
Linguistic Interactive maps 
============================

It is possible to draw interactive linguistic maps using
``lingtypology``

.. code:: ipython3

    import lingtypology

1. Maps 
--------

1.1. Simplest example 
~~~~~~~~~~~~~~~~~~~~~~

The simplest script that draws a map with Romanian and Ukrainian
languages will be:

.. code:: ipython3

    m = lingtypology.LingMap(('Romanian', 'Afrikaans', 'Tlingit', 'Japanese'))
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2E0Zjg3MmRjNTBkMDQ0NzVhMTdmZmNjOTdjOWI2ZTkzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9hNGY4NzJkYzUwZDA0NDc1YTE3ZmZjYzk3YzliNmU5MyIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfYTRmODcyZGM1MGQwNDQ3NWExN2ZmY2M5N2M5YjZlOTMgPSBMLm1hcCgKICAgICAgICAnbWFwX2E0Zjg3MmRjNTBkMDQ0NzVhMTdmZmNjOTdjOWI2ZTkzJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwpMLmNvbnRyb2wuc2NhbGUoKS5hZGRUbyhtYXBfYTRmODcyZGM1MGQwNDQ3NWExN2ZmY2M5N2M5YjZlOTMpOwoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfNDJjZGM4OWFlMDI5NDRlOGJjNDBhNzMzNzFmNTFhYmIgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwX2E0Zjg3MmRjNTBkMDQ0NzVhMTdmZmNjOTdjOWI2ZTkzKTsKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF80MmE0ZWU4MWU2Y2E0YTJlOWI3NjNiMWU5OGQ0Zjk5OSA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTRmODcyZGM1MGQwNDQ3NWExN2ZmY2M5N2M5YjZlOTMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiOTU2OTM0YTdlMDQxZDhiNGI2MGNiYTljMzRjMmRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQyYTRlZTgxZTZjYTRhMmU5Yjc2M2IxZTk4ZDRmOTk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzJhYTczMGRjNmI2NDYxMGEyZGE5MzY4YTZiYmMzMmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjIuMCwgMzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQyYTRlZTgxZTZjYTRhMmU5Yjc2M2IxZTk4ZDRmOTk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTI3NWM2ZTk5NTY2NDcxYWI2ZTc5YjhhMzE2ZmExNzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS40NDQ3LCAtMTM1LjI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNDJhNGVlODFlNmNhNGEyZTliNzYzYjFlOThkNGY5OTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OTc2M2M0NmZiMTA0MjQ0YWM1ZTY2ZWUyODEwNjJiYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNDJhNGVlODFlNmNhNGEyZTliNzYzYjFlOThkNGY5OTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZDU0ODZlZjkzZjI0ZjY5YTQ2NDA1YTJhZWMxMzJhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjM5MTMsIDI0LjIyNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80MmE0ZWU4MWU2Y2E0YTJlOWI3NjNiMWU5OGQ0Zjk5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NjMxYTIzYmZjYmE0NmRjODc3YzQzNDQyODYxZjQzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZTRkZDc5OTY4OTc0ZjA2YmU4YTg1ZWNlYjFkOTQ3OSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWU0ZGQ3OTk2ODk3NGYwNmJlOGE4NWVjZWIxZDk0NzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9yb21hMTMyNyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Sb21hbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NjMxYTIzYmZjYmE0NmRjODc3YzQzNDQyODYxZjQzOC5zZXRDb250ZW50KGh0bWxfZWU0ZGQ3OTk2ODk3NGYwNmJlOGE4NWVjZWIxZDk0NzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWQ1NDg2ZWY5M2YyNGY2OWE0NjQwNWEyYWVjMTMyYTguYmluZFBvcHVwKHBvcHVwXzY2MzFhMjNiZmNiYTQ2ZGM4NzdjNDM0NDI4NjFmNDM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZmIwZDM3MDMxODI0NzYyYjA0OWNhMDgyZWJkYThmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMi4wLCAzMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNDJhNGVlODFlNmNhNGEyZTliNzYzYjFlOThkNGY5OTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWRkNDQwNTM0YmRjNGQyNmFmZWQxMzM1ZTVlOTQ1NDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmRmMDBiZTQxNTI1NGY5MGI2MWE3NTliZWIzZTliY2QgPSAkKGA8ZGl2IGlkPSJodG1sXzZkZjAwYmU0MTUyNTRmOTBiNjFhNzU5YmViM2U5YmNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWZyaTEyNzQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWZyaWthYW5zPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FkZDQ0MDUzNGJkYzRkMjZhZmVkMTMzNWU1ZTk0NTQ3LnNldENvbnRlbnQoaHRtbF82ZGYwMGJlNDE1MjU0ZjkwYjYxYTc1OWJlYjNlOWJjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZmIwZDM3MDMxODI0NzYyYjA0OWNhMDgyZWJkYThmNy5iaW5kUG9wdXAocG9wdXBfYWRkNDQwNTM0YmRjNGQyNmFmZWQxMzM1ZTVlOTQ1NDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk2MzFiMzIzZjFmZjRhMjM4YzMwN2ZiNDA4MTVkMTM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuNDQ0NywgLTEzNS4yOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQyYTRlZTgxZTZjYTRhMmU5Yjc2M2IxZTk4ZDRmOTk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5OWYxYTE3NjQyOTQyMDg5YzYxMTZmZDcyYThkNGVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxYWUxODNmNDllZjQxOGRhYjNkOGJiZDYzOWQ1ZWRhID0gJChgPGRpdiBpZD0iaHRtbF9mMWFlMTgzZjQ5ZWY0MThkYWIzZDhiYmQ2MzlkNWVkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RsaW4xMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRsaW5naXQ8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjk5ZjFhMTc2NDI5NDIwODljNjExNmZkNzJhOGQ0ZWMuc2V0Q29udGVudChodG1sX2YxYWUxODNmNDllZjQxOGRhYjNkOGJiZDYzOWQ1ZWRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk2MzFiMzIzZjFmZjRhMjM4YzMwN2ZiNDA4MTVkMTM0LmJpbmRQb3B1cChwb3B1cF82OTlmMWExNzY0Mjk0MjA4OWM2MTE2ZmQ3MmE4ZDRlYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmQ2YjQ1OWI4MzY4NDI4MmE3MmEyYmU0Yzg2ZDEyM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS4wLCAxMzUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQyYTRlZTgxZTZjYTRhMmU5Yjc2M2IxZTk4ZDRmOTk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxMmJhZWE0NzMyZTRiNGQ4YzIxZmZkYmJlYTNjYzI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM2ZjMzZGZlNDA4MjQ0ZGJhNGY2MTA5NDk5Y2I1NzkyID0gJChgPGRpdiBpZD0iaHRtbF8zNmYzM2RmZTQwODI0NGRiYTRmNjEwOTQ5OWNiNTc5MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkphcGFuZXNlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxMmJhZWE0NzMyZTRiNGQ4YzIxZmZkYmJlYTNjYzI2LnNldENvbnRlbnQoaHRtbF8zNmYzM2RmZTQwODI0NGRiYTRmNjEwOTQ5OWNiNTc5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZDZiNDU5YjgzNjg0MjgyYTcyYTJiZTRjODZkMTIzZC5iaW5kUG9wdXAocG9wdXBfNTEyYmFlYTQ3MzJlNGI0ZDhjMjFmZmRiYmVhM2NjMjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



If you have Glottocodes rather then language names, you can pass them as
well (you need to set ``glottocode`` to ``True``).

.. code:: ipython3

    m = lingtypology.LingMap(('russ1263', 'afri1274', 'tlin1245', 'nucl1643'), glottocode=True)
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzQ4NDljNzA3OTQ0NjRiMmRhM2RhMWY5YjA3MWZhOGNhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF80ODQ5YzcwNzk0NDY0YjJkYTNkYTFmOWIwNzFmYThjYSIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfNDg0OWM3MDc5NDQ2NGIyZGEzZGExZjliMDcxZmE4Y2EgPSBMLm1hcCgKICAgICAgICAnbWFwXzQ4NDljNzA3OTQ0NjRiMmRhM2RhMWY5YjA3MWZhOGNhJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwpMLmNvbnRyb2wuc2NhbGUoKS5hZGRUbyhtYXBfNDg0OWM3MDc5NDQ2NGIyZGEzZGExZjliMDcxZmE4Y2EpOwoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfMGRmNThiMWE1MThlNDAyNThjNjNhMWE2YjJjMDRiMGMgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwXzQ4NDljNzA3OTQ0NjRiMmRhM2RhMWY5YjA3MWZhOGNhKTsKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF82NDZhNDI5NzU2ZTU0MGFlYjJiMWNjM2JjNTcyZDQ4ZSA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDg0OWM3MDc5NDQ2NGIyZGEzZGExZjliMDcxZmE4Y2EpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAyODRhMWIzYjQzMTQ0OGM5ZDY0MjllYTFlZTM2YWFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzY0NmE0Mjk3NTZlNTQwYWViMmIxY2MzYmM1NzJkNDhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDUxMjljZTlhYTM4NGY1ZThlYTZmNDQ0MDUyYTFlZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjIuMCwgMzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzY0NmE0Mjk3NTZlNTQwYWViMmIxY2MzYmM1NzJkNDhlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmI5ZTNkNTE1MDEzNDllYzhlMWM4NGRmMzIwM2QyNjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS40NDQ3LCAtMTM1LjI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjQ2YTQyOTc1NmU1NDBhZWIyYjFjYzNiYzU3MmQ0OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMTk3ZmNmMzA3OGY0NTdkOWMxYzczZmE4ZTBhM2I3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjQ2YTQyOTc1NmU1NDBhZWIyYjFjYzNiYzU3MmQ0OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZjQ1OWU5ZGY5NTQ0NzQ3ODhjNmM4MjZlYjllYTM1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82NDZhNDI5NzU2ZTU0MGFlYjJiMWNjM2JjNTcyZDQ4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODlmOTMyMmUxNzc0NzIyYTdkNTljNDlhNTcxYWI2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDcxZmM4MWE5MmE0MjZiODkwOTBlZGViNmUwMTE0NyA9ICQoYDxkaXYgaWQ9Imh0bWxfZjQ3MWZjODFhOTJhNDI2Yjg5MDkwZWRlYjZlMDExNDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4OWY5MzIyZTE3NzQ3MjJhN2Q1OWM0OWE1NzFhYjY0LnNldENvbnRlbnQoaHRtbF9mNDcxZmM4MWE5MmE0MjZiODkwOTBlZGViNmUwMTE0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZjQ1OWU5ZGY5NTQ0NzQ3ODhjNmM4MjZlYjllYTM1Yi5iaW5kUG9wdXAocG9wdXBfYzg5ZjkzMjJlMTc3NDcyMmE3ZDU5YzQ5YTU3MWFiNjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5NTYzMmYzZjI1MzQ1ZWE5YjM0NTNhYjMzMzVjMWE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIyLjAsIDMwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82NDZhNDI5NzU2ZTU0MGFlYjJiMWNjM2JjNTcyZDQ4ZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMDQ0ZDQ1NDE2NGY0MGNiOWMwMzU1MDVjYTg4YTgyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZmI0NjY4YjgyYjE0YTllOTdmMDA0ZWJlODljOGYxNiA9ICQoYDxkaXYgaWQ9Imh0bWxfZGZiNDY2OGI4MmIxNGE5ZTk3ZjAwNGViZTg5YzhmMTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZnJpMTI3NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZnJpa2FhbnM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTA0NGQ0NTQxNjRmNDBjYjljMDM1NTA1Y2E4OGE4MjQuc2V0Q29udGVudChodG1sX2RmYjQ2NjhiODJiMTRhOWU5N2YwMDRlYmU4OWM4ZjE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg5NTYzMmYzZjI1MzQ1ZWE5YjM0NTNhYjMzMzVjMWE3LmJpbmRQb3B1cChwb3B1cF8xMDQ0ZDQ1NDE2NGY0MGNiOWMwMzU1MDVjYTg4YTgyNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGZmMTZlMmNjNmZhNDBiZjk0NzFiOGVhYzI1YzlkZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS40NDQ3LCAtMTM1LjI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjQ2YTQyOTc1NmU1NDBhZWIyYjFjYzNiYzU3MmQ0OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2ZiZDgxMzIyZjZhNDY2Nzk0N2I5NmI0ZDUwMjBkODUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWI0MzJhY2ZkN2EyNDYyZTg5NGYxYTQ1OWNmMjA5ZDMgPSAkKGA8ZGl2IGlkPSJodG1sXzliNDMyYWNmZDdhMjQ2MmU4OTRmMWE0NTljZjIwOWQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGxpbjEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGxpbmdpdDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZmJkODEzMjJmNmE0NjY3OTQ3Yjk2YjRkNTAyMGQ4NS5zZXRDb250ZW50KGh0bWxfOWI0MzJhY2ZkN2EyNDYyZTg5NGYxYTQ1OWNmMjA5ZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGZmMTZlMmNjNmZhNDBiZjk0NzFiOGVhYzI1YzlkZDAuYmluZFBvcHVwKHBvcHVwXzdmYmQ4MTMyMmY2YTQ2Njc5NDdiOTZiNGQ1MDIwZDg1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Zjk5ZWM3OWI1MzY0NTMzYjljOGEwNTFkNDRlZmJjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjQ2YTQyOTc1NmU1NDBhZWIyYjFjYzNiYzU3MmQ0OGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTQ1OGIyNmZmMDJkNDU0NWFiNTc5OWZkNGNjYjg0ZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2EwZWUyYTc4Y2YyNDgxZGEyMzljZmIwYzZkNjU2YTQgPSAkKGA8ZGl2IGlkPSJodG1sXzdhMGVlMmE3OGNmMjQ4MWRhMjM5Y2ZiMGM2ZDY1NmE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDE2NDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmFwYW5lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTQ1OGIyNmZmMDJkNDU0NWFiNTc5OWZkNGNjYjg0Zjcuc2V0Q29udGVudChodG1sXzdhMGVlMmE3OGNmMjQ4MWRhMjM5Y2ZiMGM2ZDY1NmE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVmOTllYzc5YjUzNjQ1MzNiOWM4YTA1MWQ0NGVmYmMwLmJpbmRQb3B1cChwb3B1cF81NDU4YjI2ZmYwMmQ0NTQ1YWI1Nzk5ZmQ0Y2NiODRmNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.2. Save, Render or Save as Image 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Be advised that ``create_map()`` returns a ``Folium`` map. In this
notebook it is used because the map may be displayed this way.

To save your map as html run: ``m.save('map.html')``

To get html as ``str`` run: ``m.render()``

| To get a ``png`` image run ``m.save_static(fname=fname)`` (if no
  arguments are given it will be returned as ``bytes``).
| ``geckodriver`` should be installed.
| **Note:** ``save_static`` is an experimental method.

``m.save_static()``



1.3. Features 
~~~~~~~~~~~~~~

Simply drawing languages on a map is not very interesting. Let’s say
that we want to mark some morphological features as different colors.

.. code:: ipython3

    languages = ["Adyghe", "Kabardian", "Polish", "Russian", "Bulgarian"]
    features = ["Agglutinative", "Agglutinative", "Inflected", "Inflected", "Analytic"]
    m = lingtypology.LingMap(languages)
    m.add_features(features)
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2M1ZmE4NDRhMmFkZTRkMDY4MDUzZDU5YTZhNjRhNzBhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9jNWZhODQ0YTJhZGU0ZDA2ODA1M2Q1OWE2YTY0YTcwYSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+QWdnbHV0aW5hdGl2ZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzE5ZTZiNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BbmFseXRpYzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZTExOTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9jNWZhODQ0YTJhZGU0ZDA2ODA1M2Q1OWE2YTY0YTcwYSA9IEwubWFwKAogICAgICAgICdtYXBfYzVmYTg0NGEyYWRlNGQwNjgwNTNkNTlhNmE2NGE3MGEnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF9jNWZhODQ0YTJhZGU0ZDA2ODA1M2Q1OWE2YTY0YTcwYSk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl82ZmIxOWVmOTJiN2Y0NmY1OTYzODlhZmE5NjNmYWNjMSA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfYzVmYTg0NGEyYWRlNGQwNjgwNTNkNTlhNmE2NGE3MGEpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzdiN2E0Njg0MDIwZDRhODI5ZTE1ODczNzJkYjExM2FiID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9jNWZhODQ0YTJhZGU0ZDA2ODA1M2Q1OWE2YTY0YTcwYSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODVhZDc4MDdjYzU0NGI5YWJmMzQ2NjUyYjQ5N2VlZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wLCAzOS4zM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzdiN2E0Njg0MDIwZDRhODI5ZTE1ODczNzJkYjExM2FiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWJkNTE0MjMzZWY1NDQ2ZGE4NDg1ZDVkZDJiNmQxNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfN2I3YTQ2ODQwMjBkNGE4MjllMTU4NzM3MmRiMTEzYWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzRiYjg4NzkzNTU0ZWFjYmQyYTE2Zjg4MmUyYjI2OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM2NDYsIDI1LjA0Njk5OTk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzdiN2E0Njg0MDIwZDRhODI5ZTE1ODczNzJkYjExM2FiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWJmODA2NzA0NGZkNGM4OTlkMDkzMDZmZWRkOGQwMzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfN2I3YTQ2ODQwMjBkNGE4MjllMTU4NzM3MmRiMTEzYWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZTA3ZDExZTA2NzI0YjkyYjM5ODczNTExNDA3YzY5ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF83YjdhNDY4NDAyMGQ0YTgyOWUxNTg3MzcyZGIxMTNhYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3YTdjYzgxMWQ0YjQ1NzZiZDE5MzFkYjBjZjgwYzM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF83YjdhNDY4NDAyMGQ0YTgyOWUxNTg3MzcyZGIxMTNhYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YTIzNTNlYjhkNzM0MjUzYjhiZWY3ODY4ZGZmOTRkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOGQ5Nzc5ZTQwYTg0Nzk0OTBiYjQ2MGEzOWZlODM0MSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzhkOTc3OWU0MGE4NDc5NDkwYmI0NjBhMzlmZTgzNDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmEyMzUzZWI4ZDczNDI1M2I4YmVmNzg2OGRmZjk0ZDAuc2V0Q29udGVudChodG1sXzM4ZDk3NzllNDBhODQ3OTQ5MGJiNDYwYTM5ZmU4MzQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3YTdjYzgxMWQ0YjQ1NzZiZDE5MzFkYjBjZjgwYzM3LmJpbmRQb3B1cChwb3B1cF82YTIzNTNlYjhkNzM0MjUzYjhiZWY3ODY4ZGZmOTRkMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDU2MjQyZmEyNDM0NGJiNjlhMmE3ZDQ0NGE0ZDNmYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfN2I3YTQ2ODQwMjBkNGE4MjllMTU4NzM3MmRiMTEzYWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGVlNGQyNWI5ZWNjNGIyNTk1OWYwZjA4MmI3OGZlZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTM5ZjllYzJlNDdhNDE5OWJjYmZhYmQwMDVjNTUxMGYgPSAkKGA8ZGl2IGlkPSJodG1sXzEzOWY5ZWMyZTQ3YTQxOTliY2JmYWJkMDA1YzU1MTBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlZTRkMjViOWVjYzRiMjU5NTlmMGYwODJiNzhmZWQwLnNldENvbnRlbnQoaHRtbF8xMzlmOWVjMmU0N2E0MTk5YmNiZmFiZDAwNWM1NTEwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NTYyNDJmYTI0MzQ0YmI2OWEyYTdkNDQ0YTRkM2ZiMy5iaW5kUG9wdXAocG9wdXBfMGVlNGQyNWI5ZWNjNGIyNTk1OWYwZjA4MmI3OGZlZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzMjhhMDhjYWI3MTQxZTI4ZGJjZmZjOGQyNWJkODMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfN2I3YTQ2ODQwMjBkNGE4MjllMTU4NzM3MmRiMTEzYWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzE3YzRmZDgwYWE4NGRhYWJkZDk5MDAzMTU5NzFjYWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzgyYjMyMjJlMTEzNDk1NWE5OWY4NzY2YjQ3NjQzNTMgPSAkKGA8ZGl2IGlkPSJodG1sXzc4MmIzMjIyZTExMzQ5NTVhOTlmODc2NmI0NzY0MzUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnVsZzEyNjIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnVsZ2FyaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxN2M0ZmQ4MGFhODRkYWFiZGQ5OTAwMzE1OTcxY2FlLnNldENvbnRlbnQoaHRtbF83ODJiMzIyMmUxMTM0OTU1YTk5Zjg3NjZiNDc2NDM1Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMzI4YTA4Y2FiNzE0MWUyOGRiY2ZmYzhkMjViZDgzMS5iaW5kUG9wdXAocG9wdXBfYzE3YzRmZDgwYWE4NGRhYWJkZDk5MDAzMTU5NzFjYWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2MDUyZjJhNjM4YjRhNDdiMzFjN2IwZjY0MDlhYmI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZTExOSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzdiN2E0Njg0MDIwZDRhODI5ZTE1ODczNzJkYjExM2FiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5ZDljNWI5MDQyNDQ0Y2FhNTdmNDAyY2QzMTBhZmQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ4OWJhYjE0ZjlmZDQ0ZTZiNTgxYzhlN2ExNTlkMGE4ID0gJChgPGRpdiBpZD0iaHRtbF80ODliYWIxNGY5ZmQ0NGU2YjU4MWM4ZTdhMTU5ZDBhOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvbGkxMjYwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OWQ5YzViOTA0MjQ0NGNhYTU3ZjQwMmNkMzEwYWZkMi5zZXRDb250ZW50KGh0bWxfNDg5YmFiMTRmOWZkNDRlNmI1ODFjOGU3YTE1OWQwYTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTYwNTJmMmE2MzhiNGE0N2IzMWM3YjBmNjQwOWFiYjQuYmluZFBvcHVwKHBvcHVwXzY5ZDljNWI5MDQyNDQ0Y2FhNTdmNDAyY2QzMTBhZmQyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjI1ZThhYjYzNzg0Yjk1YTFiNjEzYzE0MjUzZjY1NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF83YjdhNDY4NDAyMGQ0YTgyOWUxNTg3MzcyZGIxMTNhYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTVmZDRmODAxZDI0MDM2YWNiNDQ1MzY3N2Q4Zjk0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kY2QzMmVmOWE2Njc0NmI0OTFkM2NjZjg4NjA5ZWY0MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZGNkMzJlZjlhNjY3NDZiNDkxZDNjY2Y4ODYwOWVmNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExNWZkNGY4MDFkMjQwMzZhY2I0NDUzNjc3ZDhmOTQ2LnNldENvbnRlbnQoaHRtbF9kY2QzMmVmOWE2Njc0NmI0OTFkM2NjZjg4NjA5ZWY0Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YjI1ZThhYjYzNzg0Yjk1YTFiNjEzYzE0MjUzZjY1Ni5iaW5kUG9wdXAocG9wdXBfMTE1ZmQ0ZjgwMWQyNDAzNmFjYjQ0NTM2NzdkOGY5NDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.4. Customizing the map 
~~~~~~~~~~~~~~~~~~~~~~~~~

As you can see, the map is not centered properly. It can be fixed with
passing coordinates to the ``start_location`` attribute. You can change
start zoom as well ``start_zoom``. Also, you can change colors using the
``colors`` parameter. You can determine in which order features are
placed in the legend using ``factor`` parameter.

.. code:: ipython3

    m.start_location = (40, 40)
    m.start_zoom = 3
    m.add_features(
        features,
        colors=("#00FFFF", "#FF00FF", "#FFFF00"),
        factor=('Inflected', 'Analytic', 'Agglutinative')
    )
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzE5MjdmN2U1N2Q1MjQ4ODc4NzIwNzRlOTBkM2FkNWEwIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8xOTI3ZjdlNTdkNTI0ODg3ODcyMDc0ZTkwZDNhZDVhMCIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDEiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMScgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMEZGRkY7b3BhY2l0eTowLjc7Ij48L3NwYW4+SW5mbGVjdGVkPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRkYwMEZGO29wYWNpdHk6MC43OyI+PC9zcGFuPkFuYWx5dGljPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRkZGRjAwO29wYWNpdHk6MC43OyI+PC9zcGFuPkFnZ2x1dGluYXRpdmU8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8xOTI3ZjdlNTdkNTI0ODg3ODcyMDc0ZTkwZDNhZDVhMCA9IEwubWFwKAogICAgICAgICdtYXBfMTkyN2Y3ZTU3ZDUyNDg4Nzg3MjA3NGU5MGQzYWQ1YTAnLCB7CiAgICAgICAgY2VudGVyOiBbNDAsIDQwXSwKICAgICAgICB6b29tOiAzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzE5MjdmN2U1N2Q1MjQ4ODc4NzIwNzRlOTBkM2FkNWEwKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2YzODc0MzNjYTI5ZDQyZDdhMTMyNjMwMjA1Y2I0ZTA5ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF8xOTI3ZjdlNTdkNTI0ODg3ODcyMDc0ZTkwZDNhZDVhMCk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNWM3ZmFkMmY1MDc2NGY4NmIxZTNjYTBhZjk5OWI3NjggPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzE5MjdmN2U1N2Q1MjQ4ODc4NzIwNzRlOTBkM2FkNWEwKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMGRmYWI4OTFiMGQ0NGU5OTcxZjM2YWUxNjQyYjIxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YzdmYWQyZjUwNzY0Zjg2YjFlM2NhMGFmOTk5Yjc2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjYWJiZmRlZDRlZDRkZDU4OTc5NDllNjhhY2QzYWIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVjN2ZhZDJmNTA3NjRmODZiMWUzY2EwYWY5OTliNzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTkzODIyNDhjNjBjNDhhZWJmYThlZTk1ODcyOWQxYzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YzdmYWQyZjUwNzY0Zjg2YjFlM2NhMGFmOTk5Yjc2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzllYjVlNzVhMjlhMzRmOGY5ZGFlZjhiMzBjMWZhODQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YzdmYWQyZjUwNzY0Zjg2YjFlM2NhMGFmOTk5Yjc2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1N2M5YmVhYWRjMDRkZDE5ZTc3MDI0MzVhMTViNmEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTA4MiwgNDMuMzkxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVjN2ZhZDJmNTA3NjRmODZiMWUzY2EwYWY5OTliNzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2ZkYmUwZjMwZTg1NGI1OGI4YzM1MDQ2MDQxYWMwNDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDBGRkZGIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWM3ZmFkMmY1MDc2NGY4NmIxZTNjYTBhZjk5OWI3NjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWQ0ZmE2YmRhZjI3NDE4ZTg5YTBlMzJhYThjYzUzZDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTcwZmI1NGYwMmM0NDc2Yzg2OWQxZWJmNWZhODA1NzUgPSAkKGA8ZGl2IGlkPSJodG1sXzU3MGZiNTRmMDJjNDQ3NmM4NjlkMWViZjVmYTgwNTc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcG9saTEyNjAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UG9saXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FkNGZhNmJkYWYyNzQxOGU4OWEwZTMyYWE4Y2M1M2Q1LnNldENvbnRlbnQoaHRtbF81NzBmYjU0ZjAyYzQ0NzZjODY5ZDFlYmY1ZmE4MDU3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZmRiZTBmMzBlODU0YjU4YjhjMzUwNDYwNDFhYzA0Ny5iaW5kUG9wdXAocG9wdXBfYWQ0ZmE2YmRhZjI3NDE4ZTg5YTBlMzJhYThjYzUzZDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViNzJjZWU3OWM3NzRlNzg5YzQ2NWI4MmI4NWRiMWQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwRkZGRiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVjN2ZhZDJmNTA3NjRmODZiMWUzY2EwYWY5OTliNzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0ZDFhNTE3MjYwMzQ5OWY5ZTU4YWE2ZjdjOTQ1NThlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkZDhhZTljZGEyYjQ2MjRiM2U2NjNkOTdlNjJiY2Q0ID0gJChgPGRpdiBpZD0iaHRtbF9iZGQ4YWU5Y2RhMmI0NjI0YjNlNjYzZDk3ZTYyYmNkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3J1c3MxMjYzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJ1c3NpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDRkMWE1MTcyNjAzNDk5ZjllNThhYTZmN2M5NDU1OGUuc2V0Q29udGVudChodG1sX2JkZDhhZTljZGEyYjQ2MjRiM2U2NjNkOTdlNjJiY2Q0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViNzJjZWU3OWM3NzRlNzg5YzQ2NWI4MmI4NWRiMWQ2LmJpbmRQb3B1cChwb3B1cF9kNGQxYTUxNzI2MDM0OTlmOWU1OGFhNmY3Yzk0NTU4ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWU4ZDdmYjA4YjA5NGU2ZDhhNTljNGI1ZWM3YzdlZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNGRjAwRkYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YzdmYWQyZjUwNzY0Zjg2YjFlM2NhMGFmOTk5Yjc2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZTQwYzVhNGMyYzM0MWVhYTQ2MDc3MjE1YmE3Zjg4ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYjE0YjZjM2I4NDQ0MjYwYjMwYmI0M2NmYzFlY2YxMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYmIxNGI2YzNiODQ0NDI2MGIzMGJiNDNjZmMxZWNmMTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9idWxnMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CdWxnYXJpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmU0MGM1YTRjMmMzNDFlYWE0NjA3NzIxNWJhN2Y4OGUuc2V0Q29udGVudChodG1sX2JiMTRiNmMzYjg0NDQyNjBiMzBiYjQzY2ZjMWVjZjEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFlOGQ3ZmIwOGIwOTRlNmQ4YTU5YzRiNWVjN2M3ZWRjLmJpbmRQb3B1cChwb3B1cF9mZTQwYzVhNGMyYzM0MWVhYTQ2MDc3MjE1YmE3Zjg4ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWMyMmQxMzI4NTZlNDE1ZGFjMTFhYTk4NGY0Nzk5MGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wLCAzOS4zM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0ZGRkYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVjN2ZhZDJmNTA3NjRmODZiMWUzY2EwYWY5OTliNzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjNzhjNDNhNWVmZTQ0YWQ4MzkxNjE4NThhODViMTI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2Y2Y0N2VjZTNjYTRiYjhhNjIzNzAyMDg4MDU3NGU2ID0gJChgPGRpdiBpZD0iaHRtbF9jNmNmNDdlY2UzY2E0YmI4YTYyMzcwMjA4ODA1NzRlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYzc4YzQzYTVlZmU0NGFkODM5MTYxODU4YTg1YjEyOS5zZXRDb250ZW50KGh0bWxfYzZjZjQ3ZWNlM2NhNGJiOGE2MjM3MDIwODgwNTc0ZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWMyMmQxMzI4NTZlNDE1ZGFjMTFhYTk4NGY0Nzk5MGUuYmluZFBvcHVwKHBvcHVwX2FjNzhjNDNhNWVmZTQ0YWQ4MzkxNjE4NThhODViMTI5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYTBhZmNkMjQ0Mjg0OTdlYWI3NGRiYzYwMGZjMWI0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNGRkZGMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YzdmYWQyZjUwNzY0Zjg2YjFlM2NhMGFmOTk5Yjc2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjA1NzBhODkwOGQ0OGUzYWQxNWI4NTVhYTM1ZDkyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOTYyYzk1Y2Y1MjE0NjZjYWFlNWEwYzlkNDBjNDdjYyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTk2MmM5NWNmNTIxNDY2Y2FhZTVhMGM5ZDQwYzQ3Y2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDYwNTcwYTg5MDhkNDhlM2FkMTViODU1YWEzNWQ5MjMuc2V0Q29udGVudChodG1sX2U5NjJjOTVjZjUyMTQ2NmNhYWU1YTBjOWQ0MGM0N2NjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFhMGFmY2QyNDQyODQ5N2VhYjc0ZGJjNjAwZmMxYjRmLmJpbmRQb3B1cChwb3B1cF8wNjA1NzBhODkwOGQ0OGUzYWQxNWI4NTVhYTM1ZDkyMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.5. Popups 
~~~~~~~~~~~~

| You can add popups using ``add_popups`` method. You can disable links
  to Glottolog by setting ``glottolog_links`` parameter to ``False``.
| Basically, you can set any html-code in the popups.

.. code:: ipython3

    contents = ('Caucasus', 'Caucasus', 'Europe', 'Europe', 'Europe')
    html = '''
    <a href="https://en.wikipedia.org/wiki/{data}" target="_blank">
    {data}
    </a>
    '''
    m.add_popups([html.format(data=popup) for popup in contents], glottolog_links=False)
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzYyZTQ4MWIwZGZiMzRmNjNiZmVkYTdjYjE2MmNlODUxIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF82MmU0ODFiMGRmYjM0ZjYzYmZlZGE3Y2IxNjJjZTg1MSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDIiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMicgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMEZGRkY7b3BhY2l0eTowLjc7Ij48L3NwYW4+SW5mbGVjdGVkPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRkYwMEZGO29wYWNpdHk6MC43OyI+PC9zcGFuPkFuYWx5dGljPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRkZGRjAwO29wYWNpdHk6MC43OyI+PC9zcGFuPkFnZ2x1dGluYXRpdmU8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF82MmU0ODFiMGRmYjM0ZjYzYmZlZGE3Y2IxNjJjZTg1MSA9IEwubWFwKAogICAgICAgICdtYXBfNjJlNDgxYjBkZmIzNGY2M2JmZWRhN2NiMTYyY2U4NTEnLCB7CiAgICAgICAgY2VudGVyOiBbNDAsIDQwXSwKICAgICAgICB6b29tOiAzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzYyZTQ4MWIwZGZiMzRmNjNiZmVkYTdjYjE2MmNlODUxKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzEwOTNjZjZiMTlkMDQzZWI5MzcxZTBlZDJlYjBkNDY0ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF82MmU0ODFiMGRmYjM0ZjYzYmZlZGE3Y2IxNjJjZTg1MSk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNmM3MDViZWMyZmRhNDliNmJhZTA2NjkyZDgzOTg2NmYgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzYyZTQ4MWIwZGZiMzRmNjNiZmVkYTdjYjE2MmNlODUxKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTRkMzY3MGYyMDY0YjEwYjA1MDgyOGYxMzkzODhlZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82YzcwNWJlYzJmZGE0OWI2YmFlMDY2OTJkODM5ODY2Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M1ZjJhOWIxNjE4YjQ0ODliMTVmYjJkZGYyZWRiMDk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZjNzA1YmVjMmZkYTQ5YjZiYWUwNjY5MmQ4Mzk4NjZmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTJjMTA4MTU0YzgwNGRkMGIxNzg5OTU5ZTRiM2VlMzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82YzcwNWJlYzJmZGE0OWI2YmFlMDY2OTJkODM5ODY2Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlMDA4ODZkNWZiMTQ2OTQ4MzdjYTNjYTBmOGM2ZWQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82YzcwNWJlYzJmZGE0OWI2YmFlMDY2OTJkODM5ODY2Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJkZTUwNjhiNGYzYzQ4YjhhOGNkNTA2YTA3M2Q2YmUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTA4MiwgNDMuMzkxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZjNzA1YmVjMmZkYTQ5YjZiYWUwNjY5MmQ4Mzk4NjZmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTVkNGE2ZjY0ZmU0NDYzOGFhMGQ4ODg0N2FkMTcyM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDBGRkZGIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmM3MDViZWMyZmRhNDliNmJhZTA2NjkyZDgzOTg2NmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTljMmJlZjVmNTYxNGZhYjkzZDA5ZjliZjNlOTkxN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RhMTk0OWU1NWU5NDgzNmJkZWM3ZjllODI3OTdmNTYgPSAkKGA8ZGl2IGlkPSJodG1sX2NkYTE5NDllNTVlOTQ4MzZiZGVjN2Y5ZTgyNzk3ZjU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gPGEgaHJlZj0iaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVyb3BlIiB0YXJnZXQ9Il9ibGFuayI+IEV1cm9wZSA8L2E+IDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTljMmJlZjVmNTYxNGZhYjkzZDA5ZjliZjNlOTkxN2Uuc2V0Q29udGVudChodG1sX2NkYTE5NDllNTVlOTQ4MzZiZGVjN2Y5ZTgyNzk3ZjU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE1ZDRhNmY2NGZlNDQ2MzhhYTBkODg4NDdhZDE3MjNkLmJpbmRQb3B1cChwb3B1cF8xOWMyYmVmNWY1NjE0ZmFiOTNkMDlmOWJmM2U5OTE3ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTZkZTA1NTJkNzg3NDVhZjljNDNmYjRlNDAwOWNmZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDBGRkZGIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmM3MDViZWMyZmRhNDliNmJhZTA2NjkyZDgzOTg2NmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2JiMTk3YTNlM2JhNDQ3M2ExYTdlODNlNWNkN2FkMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWVmMWExY2MyMzc2NDUwOGE0OGFjYjZlYzRjZTA0ZTggPSAkKGA8ZGl2IGlkPSJodG1sX2FlZjFhMWNjMjM3NjQ1MDhhNDhhY2I2ZWM0Y2UwNGU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gPGEgaHJlZj0iaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVyb3BlIiB0YXJnZXQ9Il9ibGFuayI+IEV1cm9wZSA8L2E+IDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2JiMTk3YTNlM2JhNDQ3M2ExYTdlODNlNWNkN2FkMGUuc2V0Q29udGVudChodG1sX2FlZjFhMWNjMjM3NjQ1MDhhNDhhY2I2ZWM0Y2UwNGU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU2ZGUwNTUyZDc4NzQ1YWY5YzQzZmI0ZTQwMDljZmRjLmJpbmRQb3B1cChwb3B1cF9jYmIxOTdhM2UzYmE0NDczYTFhN2U4M2U1Y2Q3YWQwZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDVmN2QyN2IwNmFmNDQyODljYjUyZDNiNWNhZmJhOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNGRjAwRkYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82YzcwNWJlYzJmZGE0OWI2YmFlMDY2OTJkODM5ODY2Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTg5NDRkOTRmZjc0ZjE4YWJlNTVlYzkzOWIzM2NmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MmU1ZWRmYmViYjA0NWNkOTlkNDlkM2ZjZGM1ZmQ3OSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjJlNWVkZmJlYmIwNDVjZDk5ZDQ5ZDNmY2RjNWZkNzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiA8YSBocmVmPSJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FdXJvcGUiIHRhcmdldD0iX2JsYW5rIj4gRXVyb3BlIDwvYT4gPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYTg5NDRkOTRmZjc0ZjE4YWJlNTVlYzkzOWIzM2NmMC5zZXRDb250ZW50KGh0bWxfNjJlNWVkZmJlYmIwNDVjZDk5ZDQ5ZDNmY2RjNWZkNzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDVmN2QyN2IwNmFmNDQyODljYjUyZDNiNWNhZmJhOGUuYmluZFBvcHVwKHBvcHVwX2VhODk0NGQ5NGZmNzRmMThhYmU1NWVjOTM5YjMzY2YwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMjZlZDZjZDFkZjc0MDBlYmM2NGIyYzhlOWEzMDJmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRkZGRjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmM3MDViZWMyZmRhNDliNmJhZTA2NjkyZDgzOTg2NmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjZiMzdhZGE4NjVmNGZhOGFiNWM0ODFlNWJjZTg2ZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGY1M2QxZjY2NjdjNDMyNTk4OWUyYWQzMjgwM2I5YzcgPSAkKGA8ZGl2IGlkPSJodG1sXzhmNTNkMWY2NjY3YzQzMjU5ODllMmFkMzI4MDNiOWM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gPGEgaHJlZj0iaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2F1Y2FzdXMiIHRhcmdldD0iX2JsYW5rIj4gQ2F1Y2FzdXMgPC9hPiA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2YjM3YWRhODY1ZjRmYThhYjVjNDgxZTViY2U4NmRlLnNldENvbnRlbnQoaHRtbF84ZjUzZDFmNjY2N2M0MzI1OTg5ZTJhZDMyODAzYjljNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMjZlZDZjZDFkZjc0MDBlYmM2NGIyYzhlOWEzMDJmZi5iaW5kUG9wdXAocG9wdXBfMjZiMzdhZGE4NjVmNGZhOGFiNWM0ODFlNWJjZTg2ZGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1OTcwOGIxNDI0ZTQ1MmViY2EyZWNkOTkxZTE1ZGMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTA4MiwgNDMuMzkxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0ZGRkYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZjNzA1YmVjMmZkYTQ5YjZiYWUwNjY5MmQ4Mzk4NjZmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjMzQzOTVhZGJmZTQ5OWZiZGJmNTJhZTM5Y2I0OWE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIzZjYzYmZmNzljODQ1MzNhOGM1YzRmNzM2ODUyMGVlID0gJChgPGRpdiBpZD0iaHRtbF8yM2Y2M2JmZjc5Yzg0NTMzYThjNWM0ZjczNjg1MjBlZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+IDxhIGhyZWY9Imh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NhdWNhc3VzIiB0YXJnZXQ9Il9ibGFuayI+IENhdWNhc3VzIDwvYT4gPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYzM0Mzk1YWRiZmU0OTlmYmRiZjUyYWUzOWNiNDlhOS5zZXRDb250ZW50KGh0bWxfMjNmNjNiZmY3OWM4NDUzM2E4YzVjNGY3MzY4NTIwZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTU5NzA4YjE0MjRlNDUyZWJjYTJlY2Q5OTFlMTVkYzEuYmluZFBvcHVwKHBvcHVwXzBjMzQzOTVhZGJmZTQ5OWZiZGJmNTJhZTM5Y2I0OWE5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.6. Accessing Glottolog 
~~~~~~~~~~~~~~~~~~~~~~~~~

| You can also use ``lingtypology.glottolog`` to get some data from it.
  For example, I want to add language affiliations to popups.
| See more details
  `here <https://oneadder.github.io/lingtypology/glottolog>`__.

.. code:: ipython3

    affs = lingtypology.glottolog.get_affiliations(languages)
    m.add_popups(affs)
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2VhODU1MjU0NzdkZDQwMzRhNDA5YjY3ZTFjYWM0OTg4IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9lYTg1NTI1NDc3ZGQ0MDM0YTQwOWI2N2UxY2FjNDk4OCIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDMiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMycgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMEZGRkY7b3BhY2l0eTowLjc7Ij48L3NwYW4+SW5mbGVjdGVkPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRkYwMEZGO29wYWNpdHk6MC43OyI+PC9zcGFuPkFuYWx5dGljPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRkZGRjAwO29wYWNpdHk6MC43OyI+PC9zcGFuPkFnZ2x1dGluYXRpdmU8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9lYTg1NTI1NDc3ZGQ0MDM0YTQwOWI2N2UxY2FjNDk4OCA9IEwubWFwKAogICAgICAgICdtYXBfZWE4NTUyNTQ3N2RkNDAzNGE0MDliNjdlMWNhYzQ5ODgnLCB7CiAgICAgICAgY2VudGVyOiBbNDAsIDQwXSwKICAgICAgICB6b29tOiAzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwX2VhODU1MjU0NzdkZDQwMzRhNDA5YjY3ZTFjYWM0OTg4KTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzZlNmYyOTZhNmU2ODRkYmVhMzNiNmYyOTUwMWRlZmUzID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF9lYTg1NTI1NDc3ZGQ0MDM0YTQwOWI2N2UxY2FjNDk4OCk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNmQwMzI2OWI0MmRhNDQ4MGEzMjRhYzNjM2MzOGMxMWQgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2VhODU1MjU0NzdkZDQwMzRhNDA5YjY3ZTFjYWM0OTg4KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZDA5ZjY3NjRjNzk0MTlmYmJiNDdmN2Q4MjY4MWY4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZDAzMjY5YjQyZGE0NDgwYTMyNGFjM2MzYzM4YzExZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3YTMyZTRhYzc3MTRmNmFiYjY1OGU2MmQ5MWI4NjI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZkMDMyNjliNDJkYTQ0ODBhMzI0YWMzYzNjMzhjMTFkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDFjMWM4NzRmZjlmNGFjZDkyZWQwYzkzMTk0ZjI0YWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZDAzMjY5YjQyZGE0NDgwYTMyNGFjM2MzYzM4YzExZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4MTAzZjIyNmRiMzRlODdhYTYwOTM0OWYzZmY2NDZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZDAzMjY5YjQyZGE0NDgwYTMyNGFjM2MzYzM4YzExZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAzZGI0MGZjZGYwZjQ4MmZiYjIwZTIzNGNmMDVlYzlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTA4MiwgNDMuMzkxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZkMDMyNjliNDJkYTQ0ODBhMzI0YWMzYzNjMzhjMTFkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTMxNDUzM2MzMDU0NGNmZDk0NzUxNDg5NmM0ODVlOWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDBGRkZGIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmQwMzI2OWI0MmRhNDQ4MGEzMjRhYzNjM2MzOGMxMWQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTM5YjYzZDE1MzBhNGFjZTk0OGU5MzcyMmUzN2JhZTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzU1ZGZmMmFmNjhlNDc3NmFkMmQ5N2FkOGVlZTk2OWMgPSAkKGA8ZGl2IGlkPSJodG1sXzc1NWRmZjJhZjY4ZTQ3NzZhZDJkOTdhZDhlZWU5NjljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcG9saTEyNjAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UG9saXNoPC9hPjxicj5JbmRvLUV1cm9wZWFuLCBCYWx0by1TbGF2aWMsIFNsYXZpYywgV2VzdCBTbGF2aWMsIExlY2hpdGljPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzliNjNkMTUzMGE0YWNlOTQ4ZTkzNzIyZTM3YmFlMi5zZXRDb250ZW50KGh0bWxfNzU1ZGZmMmFmNjhlNDc3NmFkMmQ5N2FkOGVlZTk2OWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTMxNDUzM2MzMDU0NGNmZDk0NzUxNDg5NmM0ODVlOWQuYmluZFBvcHVwKHBvcHVwXzUzOWI2M2QxNTMwYTRhY2U5NDhlOTM3MjJlMzdiYWUyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTBjZjdmOTc2Mzc0Y2U0ODRhMzA5M2JmZTc3NGJjNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMEZGRkYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZDAzMjY5YjQyZGE0NDgwYTMyNGFjM2MzYzM4YzExZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MGM0ZGQzMzY4OWE0YjE0YjgxN2M3YzhjYjlhOWFiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZGQwMDIyNzJlMjc0N2NlOGJjZDg5YzcyM2Y0NzljMSA9ICQoYDxkaXYgaWQ9Imh0bWxfOGRkMDAyMjcyZTI3NDdjZThiY2Q4OWM3MjNmNDc5YzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj5JbmRvLUV1cm9wZWFuLCBCYWx0by1TbGF2aWMsIFNsYXZpYywgRWFzdCBTbGF2aWM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwYzRkZDMzNjg5YTRiMTRiODE3YzdjOGNiOWE5YWIyLnNldENvbnRlbnQoaHRtbF84ZGQwMDIyNzJlMjc0N2NlOGJjZDg5YzcyM2Y0NzljMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNTBjZjdmOTc2Mzc0Y2U0ODRhMzA5M2JmZTc3NGJjNS5iaW5kUG9wdXAocG9wdXBfNjBjNGRkMzM2ODlhNGIxNGI4MTdjN2M4Y2I5YTlhYjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjOWQyZGFkOTc0NjRlODNiYjkxYTJkNjQ4N2NmZDI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRkYwMEZGIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmQwMzI2OWI0MmRhNDQ4MGEzMjRhYzNjM2MzOGMxMWQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTMwMzdiYzkxYWU2NDc4N2I2YWE0NThlOGYyZjI3NWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjExNDk4NjIxOTY1NGMzNTg2YmE3NzM0M2E0ZjgwMTkgPSAkKGA8ZGl2IGlkPSJodG1sXzYxMTQ5ODYyMTk2NTRjMzU4NmJhNzczNDNhNGY4MDE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnVsZzEyNjIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnVsZ2FyaWFuPC9hPjxicj5JbmRvLUV1cm9wZWFuLCBCYWx0by1TbGF2aWMsIFNsYXZpYywgU291dGggU2xhdmljLCBFYXN0ZXJuIFNvdXRoIFNsYXZpYywgTWFjZWRvLUJ1bGdhcmlhbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTMwMzdiYzkxYWU2NDc4N2I2YWE0NThlOGYyZjI3NWEuc2V0Q29udGVudChodG1sXzYxMTQ5ODYyMTk2NTRjMzU4NmJhNzczNDNhNGY4MDE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjOWQyZGFkOTc0NjRlODNiYjkxYTJkNjQ4N2NmZDI1LmJpbmRQb3B1cChwb3B1cF85MzAzN2JjOTFhZTY0Nzg3YjZhYTQ1OGU4ZjJmMjc1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2JkYjkzNjFmMGE5NGU2NThhMDY1NGQwODA4MDhjZTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wLCAzOS4zM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0ZGRkYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZkMDMyNjliNDJkYTQ0ODBhMzI0YWMzYzNjMzhjMTFkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzYzNlYmNjOThkMjQ1ZmRhNjczYTViZWE2MmYwNjc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwNTFmMzhkMTE4ZTRkMGE4ZjJhOWU3YTM1NDkyYTJkID0gJChgPGRpdiBpZD0iaHRtbF83MDUxZjM4ZDExOGU0ZDBhOGYyYTllN2EzNTQ5MmEyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+QWJraGF6LUFkeWdlLCBDaXJjYXNzaWFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wM2MzZWJjYzk4ZDI0NWZkYTY3M2E1YmVhNjJmMDY3Ni5zZXRDb250ZW50KGh0bWxfNzA1MWYzOGQxMThlNGQwYThmMmE5ZTdhMzU0OTJhMmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2JkYjkzNjFmMGE5NGU2NThhMDY1NGQwODA4MDhjZTYuYmluZFBvcHVwKHBvcHVwXzAzYzNlYmNjOThkMjQ1ZmRhNjczYTViZWE2MmYwNjc2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMmIwMmI4M2EzNjI0MmE1YTcyNWIwZjdmM2I5NzRiMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNGRkZGMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZDAzMjY5YjQyZGE0NDgwYTMyNGFjM2MzYzM4YzExZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNjhiNmYzZDZmODk0ZjQxOWFmNGFmMTZlY2M0OGJjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80M2M4YWJhYzQ5NWY0ODk5ODk2OTk2NTIxYzE1ODVjYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDNjOGFiYWM0OTVmNDg5OTg5Njk5NjUyMWMxNTg1Y2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkFia2hhei1BZHlnZSwgQ2lyY2Fzc2lhbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjY4YjZmM2Q2Zjg5NGY0MTlhZjRhZjE2ZWNjNDhiYzQuc2V0Q29udGVudChodG1sXzQzYzhhYmFjNDk1ZjQ4OTk4OTY5OTY1MjFjMTU4NWNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMyYjAyYjgzYTM2MjQyYTVhNzI1YjBmN2YzYjk3NGIxLmJpbmRQb3B1cChwb3B1cF8yNjhiNmYzZDZmODk0ZjQxOWFmNGFmMTZlY2M0OGJjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.7. Customizing features and controls 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

| You can pass additional parameters to the ``add_features`` method.
| If for some reason you do not wish to use colors, you could use
  shapes.
| If you want to add controls, you can do it as well.

.. code:: ipython3

    m.add_features(features, use_shapes=True, control=True)
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzE1NzJiODc4MjYzMDQxZWFhZTI3Y2Q2YWM1M2VmMDAxIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8xNTcyYjg3ODI2MzA0MWVhYWUyN2NkNmFjNTNlZjAwMSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDQiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kNCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IG9wYWNpdHk6MC43OyAiPgrirKQKPC9zcGFuPkFnZ2x1dGluYXRpdmU8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IG9wYWNpdHk6MC43OyAiPgril7wKPC9zcGFuPkFuYWx5dGljPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsgdGV4dC1hbGlnbjogY2VudGVyOyBvcGFjaXR5OjAuNzsgIj4K4payCjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8xNTcyYjg3ODI2MzA0MWVhYWUyN2NkNmFjNTNlZjAwMSA9IEwubWFwKAogICAgICAgICdtYXBfMTU3MmI4NzgyNjMwNDFlYWFlMjdjZDZhYzUzZWYwMDEnLCB7CiAgICAgICAgY2VudGVyOiBbNDAsIDQwXSwKICAgICAgICB6b29tOiAzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzE1NzJiODc4MjYzMDQxZWFhZTI3Y2Q2YWM1M2VmMDAxKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzFhMzgxMmNkNDVlNzRmZGE4N2VmNzdjOTFiNzI5ZTdhID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF8xNTcyYjg3ODI2MzA0MWVhYWUyN2NkNmFjNTNlZjAwMSk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfYjE5OTA4ZGEwNWQ2NDkwYWExNDQ4NGQzYzI0MzE2YmEgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzE1NzJiODc4MjYzMDQxZWFhZTI3Y2Q2YWM1M2VmMDAxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMTliYjAxMDdhMzNjNDQ5ZThjN2IyOWUzMjhmMzY2ZmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9iMTk5MDhkYTA1ZDY0OTBhYTE0NDg0ZDNjMjQzMTZiYSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYzgyNWNjMGViODg2NGMxZTkwNDA4MWI3MjI0N2JjMzkgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxNzAlIj7irKQ8L2Rpdj5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzE5YmIwMTA3YTMzYzQ0OWU4YzdiMjllMzI4ZjM2NmZjLnNldEljb24oZGl2X2ljb25fYzgyNWNjMGViODg2NGMxZTkwNDA4MWI3MjI0N2JjMzkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTUxYzNjOGUwNDNkNDMyYjgyN2NmNjRmNzY5YWVlOGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzZhNDVkNTY1ZmQ4NDBkM2E1ZTQyNDQyODkzNjJkOTkgPSAkKGA8ZGl2IGlkPSJodG1sXzM2YTQ1ZDU2NWZkODQwZDNhNWU0MjQ0Mjg5MzYyZDk5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5BYmtoYXotQWR5Z2UsIENpcmNhc3NpYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1MWMzYzhlMDQzZDQzMmI4MjdjZjY0Zjc2OWFlZThlLnNldENvbnRlbnQoaHRtbF8zNmE0NWQ1NjVmZDg0MGQzYTVlNDI0NDI4OTM2MmQ5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE5YmIwMTA3YTMzYzQ0OWU4YzdiMjllMzI4ZjM2NmZjLmJpbmRQb3B1cChwb3B1cF9lNTFjM2M4ZTA0M2Q0MzJiODI3Y2Y2NGY3NjlhZWU4ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzhiN2QzMDA0M2M5ODQ4ZGRiNjZmOTRlNzE2OTBmZjg4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF9iMTk5MDhkYTA1ZDY0OTBhYTE0NDg0ZDNjMjQzMTZiYSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYWNjMDcyYjJkM2RkNDk1ZDhmMDFjZDExYjhiOWViZWQgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxNzAlIj7irKQ8L2Rpdj5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhiN2QzMDA0M2M5ODQ4ZGRiNjZmOTRlNzE2OTBmZjg4LnNldEljb24oZGl2X2ljb25fYWNjMDcyYjJkM2RkNDk1ZDhmMDFjZDExYjhiOWViZWQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2NlYjc3N2I0YzUxNDdjN2IyMTg4YjI5OWZlZjA0ZTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjMzMTlkZjkxODdmNDI2YThhMWFhNGViODE3MDc1MzkgPSAkKGA8ZGl2IGlkPSJodG1sXzIzMzE5ZGY5MTg3ZjQyNmE4YTFhYTRlYjgxNzA3NTM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5BYmtoYXotQWR5Z2UsIENpcmNhc3NpYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjZWI3NzdiNGM1MTQ3YzdiMjE4OGIyOTlmZWYwNGU5LnNldENvbnRlbnQoaHRtbF8yMzMxOWRmOTE4N2Y0MjZhOGExYWE0ZWI4MTcwNzUzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhiN2QzMDA0M2M5ODQ4ZGRiNjZmOTRlNzE2OTBmZjg4LmJpbmRQb3B1cChwb3B1cF9jY2ViNzc3YjRjNTE0N2M3YjIxODhiMjk5ZmVmMDRlOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfMzQwNzVmZDFjODIyNDcyMzk0MDY5YTcxZjFkMzhlMDAgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzE1NzJiODc4MjYzMDQxZWFhZTI3Y2Q2YWM1M2VmMDAxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYjc0YjE3ZmU4ZjIzNDBhN2JhODdjMDU4YmI2OGQ3MmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQzLjM2NDYsIDI1LjA0Njk5OTk5OTk5OTk5N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMzQwNzVmZDFjODIyNDcyMzk0MDY5YTcxZjFkMzhlMDApOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2YxZjVkMWExNWYyZTQyM2VhMWJhOGRjYjNjNzBiYzQwID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTcwJSI+4pe8PC9kaXY+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iNzRiMTdmZThmMjM0MGE3YmE4N2MwNThiYjY4ZDcyYy5zZXRJY29uKGRpdl9pY29uX2YxZjVkMWExNWYyZTQyM2VhMWJhOGRjYjNjNzBiYzQwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0OGQ2YzRlNDEyNzQ1MWJhMDg0MWIyOTg0M2MzMTNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5YjI0NzRhZTZhYjQyZjlhYjI4NjBmOGEwNTMwZDA1ID0gJChgPGRpdiBpZD0iaHRtbF9iOWIyNDc0YWU2YWI0MmY5YWIyODYwZjhhMDUzMGQwNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2J1bGcxMjYyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJ1bGdhcmlhbjwvYT48YnI+SW5kby1FdXJvcGVhbiwgQmFsdG8tU2xhdmljLCBTbGF2aWMsIFNvdXRoIFNsYXZpYywgRWFzdGVybiBTb3V0aCBTbGF2aWMsIE1hY2Vkby1CdWxnYXJpYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0OGQ2YzRlNDEyNzQ1MWJhMDg0MWIyOTg0M2MzMTNkLnNldENvbnRlbnQoaHRtbF9iOWIyNDc0YWU2YWI0MmY5YWIyODYwZjhhMDUzMGQwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I3NGIxN2ZlOGYyMzQwYTdiYTg3YzA1OGJiNjhkNzJjLmJpbmRQb3B1cChwb3B1cF8yNDhkNmM0ZTQxMjc0NTFiYTA4NDFiMjk4NDNjMzEzZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfMTVmZTkzNTk2YmE1NDc3ODlmMzQyYzZhNDM0ZmY1MDYgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzE1NzJiODc4MjYzMDQxZWFhZTI3Y2Q2YWM1M2VmMDAxKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYzgxZTMwNjM4OWVjNDg4NzhkYTg2ZTFhNjU3OTcwMjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzE1ZmU5MzU5NmJhNTQ3Nzg5ZjM0MmM2YTQzNGZmNTA2KTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl85MGNhNTM5ODM2MmQ0ZGQ2YTY5YjY5ZjI0YTY4OWU0NSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDE3MCUiPuKWsjwvZGl2PmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzgxZTMwNjM4OWVjNDg4NzhkYTg2ZTFhNjU3OTcwMjQuc2V0SWNvbihkaXZfaWNvbl85MGNhNTM5ODM2MmQ0ZGQ2YTY5YjY5ZjI0YTY4OWU0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MzFhZTNmZDgxZDU0MjM1YTcxZjgyYTQ0ODdhM2YwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTY4ZGIyMGZhNzI0ZjBkYjNmNWQyYTgwOWVlZjRkZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjk2OGRiMjBmYTcyNGYwZGIzZjVkMmE4MDllZWY0ZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wb2xpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qb2xpc2g8L2E+PGJyPkluZG8tRXVyb3BlYW4sIEJhbHRvLVNsYXZpYywgU2xhdmljLCBXZXN0IFNsYXZpYywgTGVjaGl0aWM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzMWFlM2ZkODFkNTQyMzVhNzFmODJhNDQ4N2EzZjAwLnNldENvbnRlbnQoaHRtbF8yOTY4ZGIyMGZhNzI0ZjBkYjNmNWQyYTgwOWVlZjRkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M4MWUzMDYzODllYzQ4ODc4ZGE4NmUxYTY1Nzk3MDI0LmJpbmRQb3B1cChwb3B1cF84MzFhZTNmZDgxZDU0MjM1YTcxZjgyYTQ0ODdhM2YwMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2YzNTJjMmQwMDNmNDQ4ZjA4ZTAzYmY5NTAyZjUzMTdmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8xNWZlOTM1OTZiYTU0Nzc4OWYzNDJjNmE0MzRmZjUwNik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fNTk0N2VkM2JjMjA2NDdhMDg0ZDg0OTZiNTBhZDc0MzcgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxNzAlIj7ilrI8L2Rpdj5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2YzNTJjMmQwMDNmNDQ4ZjA4ZTAzYmY5NTAyZjUzMTdmLnNldEljb24oZGl2X2ljb25fNTk0N2VkM2JjMjA2NDdhMDg0ZDg0OTZiNTBhZDc0MzcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODUzNTNjYzY0NThmNDlhOGFmMzUxMDJhMzFhZjk0NTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDI4MWI4NTljOWVkNGQwMmJkODM3NmJmZmY5MWNiODggPSAkKGA8ZGl2IGlkPSJodG1sXzQyODFiODU5YzllZDRkMDJiZDgzNzZiZmZmOTFjYjg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcnVzczEyNjMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UnVzc2lhbjwvYT48YnI+SW5kby1FdXJvcGVhbiwgQmFsdG8tU2xhdmljLCBTbGF2aWMsIEVhc3QgU2xhdmljPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NTM1M2NjNjQ1OGY0OWE4YWYzNTEwMmEzMWFmOTQ1Ny5zZXRDb250ZW50KGh0bWxfNDI4MWI4NTljOWVkNGQwMmJkODM3NmJmZmY5MWNiODgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMzUyYzJkMDAzZjQ0OGYwOGUwM2JmOTUwMmY1MzE3Zi5iaW5kUG9wdXAocG9wdXBfODUzNTNjYzY0NThmNDlhOGFmMzUxMDJhMzFhZjk0NTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBsYXllcl9jb250cm9sXzBhNGFmZjNiYzhjMzRhNWFiZjc4ZWQyOWYxNWZiMGVhID0gewogICAgICAgICAgICAgICAgYmFzZV9sYXllcnMgOiB7ICJvcGVuc3RyZWV0bWFwIiA6IHRpbGVfbGF5ZXJfMWEzODEyY2Q0NWU3NGZkYTg3ZWY3N2M5MWI3MjllN2EsIH0sCiAgICAgICAgICAgICAgICBvdmVybGF5cyA6IHsgIkFnZ2x1dGluYXRpdmUiIDogZmVhdHVyZV9ncm91cF9iMTk5MDhkYTA1ZDY0OTBhYTE0NDg0ZDNjMjQzMTZiYSwiQW5hbHl0aWMiIDogZmVhdHVyZV9ncm91cF8zNDA3NWZkMWM4MjI0NzIzOTQwNjlhNzFmMWQzOGUwMCwiSW5mbGVjdGVkIiA6IGZlYXR1cmVfZ3JvdXBfMTVmZTkzNTk2YmE1NDc3ODlmMzQyYzZhNDM0ZmY1MDYsIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIEwuY29udHJvbC5sYXllcnMoCiAgICAgICAgICAgICAgICBsYXllcl9jb250cm9sXzBhNGFmZjNiYzhjMzRhNWFiZjc4ZWQyOWYxNWZiMGVhLmJhc2VfbGF5ZXJzLAogICAgICAgICAgICAgICAgbGF5ZXJfY29udHJvbF8wYTRhZmYzYmM4YzM0YTVhYmY3OGVkMjlmMTVmYjBlYS5vdmVybGF5cywKICAgICAgICAgICAgICAgIHtwb3NpdGlvbjogJ3RvcHJpZ2h0JywKICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgIGF1dG9aSW5kZXg6IHRydWUKICAgICAgICAgICAgICAgIH0pLmFkZFRvKG1hcF8xNTcyYjg3ODI2MzA0MWVhYWUyN2NkNmFjNTNlZjAwMSk7CiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.8. Stroke features 
~~~~~~~~~~~~~~~~~~~~~

It is possible to add another set of features to strokes of markers
using ``add_stroke_features`` method.

.. code:: ipython3

    stroke_features = ['Ergative', 'Ergative', 'Accusative', 'Accusative', 'Accusative']
    m = lingtypology.LingMap(languages)
    m.add_features(features)
    m.add_stroke_features(stroke_features)
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzczZWViNTQxMDIyOTQ5MjQ5MGFmMjQyNWU2N2E5N2JhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF83M2VlYjU0MTAyMjk0OTI0OTBhZjI0MjVlNjdhOTdiYSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+QWdnbHV0aW5hdGl2ZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzE5ZTZiNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BbmFseXRpYzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZTExOTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CiAgICAKPCEtLSBCYXNlZCBvbiB0aGUgdGVtcGxhdGUgZnJvbSBoZXJlOiBodHRwczovL25idmlld2VyLmp1cHl0ZXIub3JnL2dpc3QvdGFsYmVydGMtdXNncy8xOGY4OTAxZmM5OGYxMDlmMmI3MTE1NmNmM2FjODFjZCAtLT4KPCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEyLjEvdGhlbWVzL2Jhc2UvanF1ZXJ5LXVpLmNzcyI+CgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40LmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+CiAgCiAgPHNjcmlwdD4KICAgICQoZnVuY3Rpb24oKXsKICAgICAgICAkKCIjbWFwbGVnZW5kMSIpLmRyYWdnYWJsZSh7CiAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICB0b3A6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICBib3R0b206ICJhdXRvIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwogIDwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PgoKCjxkaXYgaWQ9J21hcGxlZ2VuZDEnIGNsYXNzPSdtYXBsZWdlbmQnIAogICAgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDo5OTk5OyBib3JkZXI6MnB4IHNvbGlkIGdyZXk7IGJhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgIGJvcmRlci1yYWRpdXM6NnB4OyBwYWRkaW5nOiAxMHB4OyBmb250LXNpemU6MTRweDsgcmlnaHQ6IDIwcHg7IHRvcDogMjBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TGVnZW5kPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmZmZmO29wYWNpdHk6MC43OyI+PC9zcGFuPkFjY3VzYXRpdmU8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMDAwMDA7b3BhY2l0eTowLjc7Ij48L3NwYW4+RXJnYXRpdmU8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF83M2VlYjU0MTAyMjk0OTI0OTBhZjI0MjVlNjdhOTdiYSA9IEwubWFwKAogICAgICAgICdtYXBfNzNlZWI1NDEwMjI5NDkyNDkwYWYyNDI1ZTY3YTk3YmEnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF83M2VlYjU0MTAyMjk0OTI0OTBhZjI0MjVlNjdhOTdiYSk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl9kMjI3NTQxOGZiNzE0NjkyYWE0YTRlZGZhMDJkNzRiNyA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfNzNlZWI1NDEwMjI5NDkyNDkwYWYyNDI1ZTY3YTk3YmEpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzZmMmU0MDcxZWU3ZTQ0OWQ5YmY3ZmY5MDdmMDc5Mjg0ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83M2VlYjU0MTAyMjk0OTI0OTBhZjI0MjVlNjdhOTdiYSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDEzMDY2ZmU1Y2E5NDQ4OTk0Yzc3MTU4ZDc4N2IyOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmYyZTQwNzFlZTdlNDQ5ZDliZjdmZjkwN2YwNzkyODQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMzc0NjBjM2NiYWY0YTJhYjkxYWQ2ZTQ3MTU3NmYyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmYyZTQwNzFlZTdlNDQ5ZDliZjdmZjkwN2YwNzkyODQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Yzk1MWJhYTU0Njg0NjQ2OTgxYmJlNWMzMTAwYTA5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmYyZTQwNzFlZTdlNDQ5ZDliZjdmZjkwN2YwNzkyODQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZWU1OTg1ZWM3MWI0Njc4YTlhYmM2NDk3MmNkYzk3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZmMmU0MDcxZWU3ZTQ0OWQ5YmY3ZmY5MDdmMDc5Mjg0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzhjYWRmMzk2N2E4NDk4Y2IzOTNmZGE3OGJkYzg0MDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZmMmU0MDcxZWU3ZTQ0OWQ5YmY3ZmY5MDdmMDc5Mjg0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjRlNDAzN2Q2ZGMxNGE2NWE4MTAwZGUxZmEzODhhNzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmYyZTQwNzFlZTdlNDQ5ZDliZjdmZjkwN2YwNzkyODQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MjIzOTIwMjc3ODc0MDlmODhlMjdjZmNkZjZjMzI4NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmYyZTQwNzFlZTdlNDQ5ZDliZjdmZjkwN2YwNzkyODQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzUyNTQxMmVlZDk0NDEzOWViMjU3YjNhZWVhNjRlYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmYyZTQwNzFlZTdlNDQ5ZDliZjdmZjkwN2YwNzkyODQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YjgyZTY2Njk3ODY0MzQ3ODk2MTFiNzk4Y2Q3ZmFhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZmMmU0MDcxZWU3ZTQ0OWQ5YmY3ZmY5MDdmMDc5Mjg0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGNlN2EzN2Y1OTU3NGEzN2I1YzYwYWI5NTI2NDgzNTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZmMmU0MDcxZWU3ZTQ0OWQ5YmY3ZmY5MDdmMDc5Mjg0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmVkODNjODczZjA4NDA5MzlkMzhkNGE0ODcyOTE5MDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZjJlNDA3MWVlN2U0NDlkOWJmN2ZmOTA3ZjA3OTI4NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljYjg3ODc1ZGI4ZjQ0NmFhNjM5NDYxNGNhZGM3YWY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZmMmU0MDcxZWU3ZTQ0OWQ5YmY3ZmY5MDdmMDc5Mjg0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmU0ZmEyOTVmMTllNDUxZmI1YzVlOGVkYzBiMmQ5ZTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmYyZTQwNzFlZTdlNDQ5ZDliZjdmZjkwN2YwNzkyODQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMGY0Yjg4N2VlYjQ0MzI1YmY1NTQzYWE4YjRiMTIxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmYyZTQwNzFlZTdlNDQ5ZDliZjdmZjkwN2YwNzkyODQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NWU3NjNkMjQ0YTY0YzcyYTVkYWMwZTJkNjlhYzBiZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZjJlNDA3MWVlN2U0NDlkOWJmN2ZmOTA3ZjA3OTI4NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U5ZGY2OGJmZjYzMTQzYWNhYzhkMjU2NWFlYzliYTBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmYyZTQwNzFlZTdlNDQ5ZDliZjdmZjkwN2YwNzkyODQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGI2MGE5MzU3ZDRhNGY2NGExMWNkMzQ1ZGEwMDFlZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGQyMmUyOGY0OTc5NGY4Y2E3MjBkNmI0YmNmMjdiZmYgPSAkKGA8ZGl2IGlkPSJodG1sXzBkMjJlMjhmNDk3OTRmOGNhNzIwZDZiNGJjZjI3YmZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnVsZzEyNjIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnVsZ2FyaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiNjBhOTM1N2Q0YTRmNjRhMTFjZDM0NWRhMDAxZWRiLnNldENvbnRlbnQoaHRtbF8wZDIyZTI4ZjQ5Nzk0ZjhjYTcyMGQ2YjRiY2YyN2JmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lOWRmNjhiZmY2MzE0M2FjYWM4ZDI1NjVhZWM5YmEwZC5iaW5kUG9wdXAocG9wdXBfMGI2MGE5MzU3ZDRhNGY2NGExMWNkMzQ1ZGEwMDFlZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiYTFhNTEzMjg4NzRlYWNiMWRkNWMxNjRlYWZmZjYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZmMmU0MDcxZWU3ZTQ0OWQ5YmY3ZmY5MDdmMDc5Mjg0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5MDVkNTBkZDk0NjQ0N2Y4NGQxNGFlODExNzdiZGJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkOWYwMzc5ZGE1NDQ3YmJiOWNhMDJmMzUyZTZiNjA0ID0gJChgPGRpdiBpZD0iaHRtbF80ZDlmMDM3OWRhNTQ0N2JiYjljYTAyZjM1MmU2YjYwNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvbGkxMjYwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOTA1ZDUwZGQ5NDY0NDdmODRkMTRhZTgxMTc3YmRiZS5zZXRDb250ZW50KGh0bWxfNGQ5ZjAzNzlkYTU0NDdiYmI5Y2EwMmYzNTJlNmI2MDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2JhMWE1MTMyODg3NGVhY2IxZGQ1YzE2NGVhZmZmNjIuYmluZFBvcHVwKHBvcHVwXzI5MDVkNTBkZDk0NjQ0N2Y4NGQxNGFlODExNzdiZGJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NzUwZDQ2MGIwNzA0OTM4YjVhNDM2NGRmNWQ5MzY3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZjJlNDA3MWVlN2U0NDlkOWJmN2ZmOTA3ZjA3OTI4NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NTUzOTM3ZjBjNmI0MjA3Yjk2Y2RjOGM1NTdkMmM5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjQ5NzUwMzNlOTk0OTllYjkyODZkMDk1NzJkZjM2OSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTY0OTc1MDMzZTk5NDk5ZWI5Mjg2ZDA5NTcyZGYzNjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1NTM5MzdmMGM2YjQyMDdiOTZjZGM4YzU1N2QyYzk4LnNldENvbnRlbnQoaHRtbF9hNjQ5NzUwMzNlOTk0OTllYjkyODZkMDk1NzJkZjM2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NzUwZDQ2MGIwNzA0OTM4YjVhNDM2NGRmNWQ5MzY3Mi5iaW5kUG9wdXAocG9wdXBfNDU1MzkzN2YwYzZiNDIwN2I5NmNkYzhjNTU3ZDJjOTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0ZjdiMzIxMzJjNTQ3NTJiODUwYzU2MmQ5OWVhZTBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZjJlNDA3MWVlN2U0NDlkOWJmN2ZmOTA3ZjA3OTI4NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZGNlZDkxNTk4YTc0NDU3YjdiZWQxYjRmZjM1NWFkZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYjQyNGIxMzE1Njk0NTVmOWJhMWQ4NWMzMjFmZTMwNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMGI0MjRiMTMxNTY5NDU1ZjliYTFkODVjMzIxZmUzMDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2RjZWQ5MTU5OGE3NDQ1N2I3YmVkMWI0ZmYzNTVhZGUuc2V0Q29udGVudChodG1sXzBiNDI0YjEzMTU2OTQ1NWY5YmExZDg1YzMyMWZlMzA0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM0ZjdiMzIxMzJjNTQ3NTJiODUwYzU2MmQ5OWVhZTBiLmJpbmRQb3B1cChwb3B1cF83ZGNlZDkxNTk4YTc0NDU3YjdiZWQxYjRmZjM1NWFkZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWZkMmY2MWI0MzAyNGZkY2I1ZmFjYjAxOTM1MGVlNjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMTE5IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmYyZTQwNzFlZTdlNDQ5ZDliZjdmZjkwN2YwNzkyODQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDhjZjhlNmJiNDM5NDdhYjk5MGEyZDZjNjdjNTE4ZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDNiMmY1YmQ0MmI5NGI2Yjk5MTQ4ZjIxMDAwYTE4MWMgPSAkKGA8ZGl2IGlkPSJodG1sXzQzYjJmNWJkNDJiOTRiNmI5OTE0OGYyMTAwMGExODFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4Y2Y4ZTZiYjQzOTQ3YWI5OTBhMmQ2YzY3YzUxOGQ0LnNldENvbnRlbnQoaHRtbF80M2IyZjViZDQyYjk0YjZiOTkxNDhmMjEwMDBhMTgxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZmQyZjYxYjQzMDI0ZmRjYjVmYWNiMDE5MzUwZWU2OC5iaW5kUG9wdXAocG9wdXBfZDhjZjhlNmJiNDM5NDdhYjk5MGEyZDZjNjdjNTE4ZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.9. Heatmaps 
~~~~~~~~~~~~~~

| It would seem unfair if we could only draw circles.
| Let’s draw a heatmap (the more density, the more languages with Large
  consonant inventory) using ``add_heatmap`` method.
| It is from Wals. For more information consult
  `this <https://oneadder.github.io/lingtypology/db_apis>`__.

.. code:: ipython3

    from lingtypology.datasets import Wals
    wals_page = Wals('1a').get_df()
    
    #First initialize LingMap without languages
    m = lingtypology.LingMap()
    #Add heatmap from  the Wals data
    m.add_heatmap(wals_page[wals_page._1A_desc == 'Large'].coordinates)
    m.create_map()


.. parsed-literal::

    Citation for feature 1A:
    Ian Maddieson. 2013. Consonant Inventories.
    In: Dryer, Matthew S. & Haspelmath, Martin (eds.)
    The World Atlas of Language Structures Online.
    Leipzig: Max Planck Institute for Evolutionary Anthropology.
    (Available online at http://wals.info/chapter/1, Accessed on 2019-08-09.)
    




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2Q4Y2Q1ZTU3YzIzZjQ5OTI4NzUxNTNiYTg0MzRhNWY4IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vbGVhZmxldC5naXRodWIuaW8vTGVhZmxldC5oZWF0L2Rpc3QvbGVhZmxldC1oZWF0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4gICAgCiAgICAKICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfZDhjZDVlNTdjMjNmNDk5Mjg3NTE1M2JhODQzNGE1ZjgiID48L2Rpdj4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwX2Q4Y2Q1ZTU3YzIzZjQ5OTI4NzUxNTNiYTg0MzRhNWY4ID0gTC5tYXAoCiAgICAgICAgJ21hcF9kOGNkNWU1N2MyM2Y0OTkyODc1MTUzYmE4NDM0YTVmOCcsIHsKICAgICAgICBjZW50ZXI6IFswLCAwXSwKICAgICAgICB6b29tOiAyLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwX2Q4Y2Q1ZTU3YzIzZjQ5OTI4NzUxNTNiYTg0MzRhNWY4KTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2I3NWFlMTczYWM3ZjQ2YWM5YjUyNThiMzYzOWRhMzEzID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF9kOGNkNWU1N2MyM2Y0OTkyODc1MTUzYmE4NDM0YTVmOCk7CiAgICAKICAgICAgICAgICAgdmFyIGhlYXRfbWFwX2Q3ODliNmY2MmE2OTQ5NTNiOGM2ZWQwMjRhNmNhYTMwID0gTC5oZWF0TGF5ZXIoCiAgICAgICAgICAgICAgICBbWy0yNC4wLCAyMS41XSwgWy0xOC45MTY2NjY2NjY3LCAyMS45MTY2NjY2NjY3XSwgWzQzLjA4MzMzMzMzMzMsIDQxLjBdLCBbMzQuOTE2NjY2NjY2NywgLTEwNy41ODMzMzMzMzNdLCBbNDIuMCwgNDYuODMzMzMzMzMzM10sIFstMjQuMCwgMTM2LjBdLCBbNDIuNSwgNDYuNV0sIFszNi41LCA3NC41XSwgWzU5LjAsIC0xMDYuMF0sIFs0My41LCAtMTI0LjE2NjY2NjY2N10sIFstMi4zMzMzMzMzMzMzMywgNDAuNV0sIFstMjAuNSwgMjQuNV0sIFs5LjU4MzMzMzMzMzMzMDAwMSwgOS4zMzMzMzMzMzMzMzAwMDFdLCBbLTMuNzUsIDM1LjE2NjY2NjY2NjddLCBbNTMuMCwgLTEzMi4wXSwgWzI1LjAsIDc3LjBdLCBbMjguMCwgMTA1LjBdLCBbNDIuMTY2NjY2NjY2NywgNDYuMjVdLCBbLTIwLjQxNjY2NjY2NjcsIDE2Ni41ODMzMzMzMzI5OTk5OF0sIFs0My4xNjY2NjY2NjY3LCA0NS4wODMzMzMzMzMzXSwgWzU1LjAsIC04LjBdLCBbLTEzLjAsIC03Ni4wXSwgWzE1LjE2NjY2NjY2NjcwMDAwMSwgMTA3LjgzMzMzMzMzM10sIFstMTkuMCwgMjEuMF0sIFs0My41LCA0My41XSwgWzM1LjUsIDcyLjVdLCBbMTIuNSwgLTEzLjI1XSwgWzUxLjAsIC0xMjcuMF0sIFs0Mi4xNjY2NjY2NjY3LCA0Ny4xNjY2NjY2NjY3XSwgWzQxLjY2NjY2NjY2NjcsIDQ3LjgzMzMzMzMzMzNdLCBbNTUuMCwgMjQuMF0sIFs0OC4wLCAtMTIyLjBdLCBbMTkuNDE2NjY2NjY2NywgLTk5LjkxNjY2NjY2NjddLCBbMjcuNSwgMTAwLjBdLCBbMS4zMzMzMzMzMzMzMywgMzAuMjVdLCBbMTIuMDgzMzMzMzMzMjk5OTk5LCAxMC45MTY2NjY2NjY3MDAwMDFdLCBbNDkuNjY2NjY2NjY2NywgLTEyNi42NjY2NjY2NjddLCBbMjMuMjUsIDk5LjVdLCBbNTIuMCwgMjAuMF0sIFsyLjY2NjY2NjY2NjY3LCAtNzYuMF0sIFs0MS41LCA0Ny40MTY2NjY2NjY3XSwgWzY0LjY2NjY2NjY2NjcsIDE2Ljc1XSwgWy01LjAsIDM1LjBdLCBbMTQuODMzMzMzMzMzMjk5OTk5LCAxMDguMF0sIFs1Mi4wLCAtMTIwLjBdLCBbMjYuMCwgNjkuMF0sIFs0OS42NjY2NjY2NjY3LCAtMTIzLjE2NjY2NjY2N10sIFsyNi4wLCAxMDcuNV0sIFsxMS4wLCAxMS44MzMzMzMzMzMyOTk5OTldLCBbMzAuMCwgOTEuMF0sIFs1OS4wLCAtMTM1LjBdLCBbNTIuNSwgLTEyOS4wXSwgWzQyLjUsIDQ1LjVdLCBbLTExLjM2NjY2NjY2NjcsIDE1NC4xNjY2NjY2NjcwMDAwMl0sIFstMjAuMCwgMjMuNV0sIFszNS43NSwgLTg2Ljc1XSwgWzguNSwgMjUuMjVdXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtaW5PcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgbWF4Wm9vbTogMTgsCiAgICAgICAgICAgICAgICAgICAgbWF4OiAxLjAsCiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiAyNSwKICAgICAgICAgICAgICAgICAgICBibHVyOiAxNSwKICAgICAgICAgICAgICAgICAgICBncmFkaWVudDogbnVsbAogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q4Y2Q1ZTU3YzIzZjQ5OTI4NzUxNTNiYTg0MzRhNWY4KTsKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.10. Title 
~~~~~~~~~~~~

To add title, use ``title`` attribute.

.. code:: ipython3

    m.title = 'Large Consonant Inventories'
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2QzZTBkZTJmMWUzNzQ1YTg5MWYwZTA4ODcyZDllOGVlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vbGVhZmxldC5naXRodWIuaW8vTGVhZmxldC5oZWF0L2Rpc3QvbGVhZmxldC1oZWF0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4gICAgCiAgICAKICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfZDNlMGRlMmYxZTM3NDVhODkxZjBlMDg4NzJkOWU4ZWUiID48L2Rpdj4KICAgIAo8IS0tIEJhc2VkIG9uIHRoZSB0ZW1wbGF0ZSBmcm9tIGhlcmU6IGh0dHBzOi8vbmJ2aWV3ZXIuanVweXRlci5vcmcvZ2lzdC90YWxiZXJ0Yy11c2dzLzE4Zjg5MDFmYzk4ZjEwOWYyYjcxMTU2Y2YzYWM4MWNkIC0tPgo8IWRvY3R5cGUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS90aGVtZXMvYmFzZS9qcXVlcnktdWkuY3NzIj4KCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEyLjEvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD4KICAKICA8c2NyaXB0PgogICAgJChmdW5jdGlvbigpewogICAgICAgICQoIiNtYXBsZWdlbmQwIikuZHJhZ2dhYmxlKHsKICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChldmVudCwgdWkpIHsKICAgICAgICAgICAgICAgICQodGhpcykuY3NzKHsKICAgICAgICAgICAgICAgICAgICByaWdodDogImF1dG8iLAogICAgICAgICAgICAgICAgICAgIHRvcDogImF1dG8iLAogICAgICAgICAgICAgICAgICAgIGJvdHRvbTogImF1dG8iCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSk7CiAgPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+CgoKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyB0b3A6IDIwcHg7IGxlZnQ6IDQwJTsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TGFyZ2UgQ29uc29uYW50IEludmVudG9yaWVzPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9kM2UwZGUyZjFlMzc0NWE4OTFmMGUwODg3MmQ5ZThlZSA9IEwubWFwKAogICAgICAgICdtYXBfZDNlMGRlMmYxZTM3NDVhODkxZjBlMDg4NzJkOWU4ZWUnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF9kM2UwZGUyZjFlMzc0NWE4OTFmMGUwODg3MmQ5ZThlZSk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl8wZGVlYTUxODBhZjE0ZDUyOTFhYjU4YjUwMWQ4MTZiOSA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfZDNlMGRlMmYxZTM3NDVhODkxZjBlMDg4NzJkOWU4ZWUpOwogICAgCiAgICAgICAgICAgIHZhciBoZWF0X21hcF9iYjQyNzMyZjJiYjM0ZTdjOWVmYzI1YmZjNTQ2NTY3YSA9IEwuaGVhdExheWVyKAogICAgICAgICAgICAgICAgW1stMjQuMCwgMjEuNV0sIFstMTguOTE2NjY2NjY2NywgMjEuOTE2NjY2NjY2N10sIFs0My4wODMzMzMzMzMzLCA0MS4wXSwgWzM0LjkxNjY2NjY2NjcsIC0xMDcuNTgzMzMzMzMzXSwgWzQyLjAsIDQ2LjgzMzMzMzMzMzNdLCBbLTI0LjAsIDEzNi4wXSwgWzQyLjUsIDQ2LjVdLCBbMzYuNSwgNzQuNV0sIFs1OS4wLCAtMTA2LjBdLCBbNDMuNSwgLTEyNC4xNjY2NjY2NjddLCBbLTIuMzMzMzMzMzMzMzMsIDQwLjVdLCBbLTIwLjUsIDI0LjVdLCBbOS41ODMzMzMzMzMzMzAwMDEsIDkuMzMzMzMzMzMzMzMwMDAxXSwgWy0zLjc1LCAzNS4xNjY2NjY2NjY3XSwgWzUzLjAsIC0xMzIuMF0sIFsyNS4wLCA3Ny4wXSwgWzI4LjAsIDEwNS4wXSwgWzQyLjE2NjY2NjY2NjcsIDQ2LjI1XSwgWy0yMC40MTY2NjY2NjY3LCAxNjYuNTgzMzMzMzMyOTk5OThdLCBbNDMuMTY2NjY2NjY2NywgNDUuMDgzMzMzMzMzM10sIFs1NS4wLCAtOC4wXSwgWy0xMy4wLCAtNzYuMF0sIFsxNS4xNjY2NjY2NjY3MDAwMDEsIDEwNy44MzMzMzMzMzNdLCBbLTE5LjAsIDIxLjBdLCBbNDMuNSwgNDMuNV0sIFszNS41LCA3Mi41XSwgWzEyLjUsIC0xMy4yNV0sIFs1MS4wLCAtMTI3LjBdLCBbNDIuMTY2NjY2NjY2NywgNDcuMTY2NjY2NjY2N10sIFs0MS42NjY2NjY2NjY3LCA0Ny44MzMzMzMzMzMzXSwgWzU1LjAsIDI0LjBdLCBbNDguMCwgLTEyMi4wXSwgWzE5LjQxNjY2NjY2NjcsIC05OS45MTY2NjY2NjY3XSwgWzI3LjUsIDEwMC4wXSwgWzEuMzMzMzMzMzMzMzMsIDMwLjI1XSwgWzEyLjA4MzMzMzMzMzI5OTk5OSwgMTAuOTE2NjY2NjY2NzAwMDAxXSwgWzQ5LjY2NjY2NjY2NjcsIC0xMjYuNjY2NjY2NjY3XSwgWzIzLjI1LCA5OS41XSwgWzUyLjAsIDIwLjBdLCBbMi42NjY2NjY2NjY2NywgLTc2LjBdLCBbNDEuNSwgNDcuNDE2NjY2NjY2N10sIFs2NC42NjY2NjY2NjY3LCAxNi43NV0sIFstNS4wLCAzNS4wXSwgWzE0LjgzMzMzMzMzMzI5OTk5OSwgMTA4LjBdLCBbNTIuMCwgLTEyMC4wXSwgWzI2LjAsIDY5LjBdLCBbNDkuNjY2NjY2NjY2NywgLTEyMy4xNjY2NjY2NjddLCBbMjYuMCwgMTA3LjVdLCBbMTEuMCwgMTEuODMzMzMzMzMzMjk5OTk5XSwgWzMwLjAsIDkxLjBdLCBbNTkuMCwgLTEzNS4wXSwgWzUyLjUsIC0xMjkuMF0sIFs0Mi41LCA0NS41XSwgWy0xMS4zNjY2NjY2NjY3LCAxNTQuMTY2NjY2NjY3MDAwMDJdLCBbLTIwLjAsIDIzLjVdLCBbMzUuNzUsIC04Ni43NV0sIFs4LjUsIDI1LjI1XV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbWluT3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgIG1heFpvb206IDE4LAogICAgICAgICAgICAgICAgICAgIG1heDogMS4wLAogICAgICAgICAgICAgICAgICAgIHJhZGl1czogMjUsCiAgICAgICAgICAgICAgICAgICAgYmx1cjogMTUsCiAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6IG51bGwKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kM2UwZGUyZjFlMzc0NWE4OTFmMGUwODg3MmQ5ZThlZSk7CiAgICAgICAgCjwvc2NyaXB0Pg==" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.11. Lines 
~~~~~~~~~~~~

Let’s say we have this list of languages:

.. code:: ipython3

    balkan = ['Modern Greek', 'Romanian', 'Bulgarian', 'Macedonian', 'Gheg Albanian']
    other = ['Ukrainian', 'Turkish', 'Italian']
    languages_all = balkan + other

We want the ones from Balkan sprachbund connected with lines with a
popup that says ‘Balkan’. It is possible using ``add_line`` method.

.. code:: ipython3

    #Let's get the coordinates that we need to draw a line
    coordinates = map(lingtypology.glottolog.get_coordinates, balkan)
    m = lingtypology.LingMap(languages_all)
    m.add_line(coordinates, popup='Balkan')
    m.start_location = (43, 27)
    m.start_zoom = 5
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzA4MzJmMDUxMzdhZTQ0N2E4NjRhZGZiNzY4NmIyMWUyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8wODMyZjA1MTM3YWU0NDdhODY0YWRmYjc2ODZiMjFlMiIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfMDgzMmYwNTEzN2FlNDQ3YTg2NGFkZmI3Njg2YjIxZTIgPSBMLm1hcCgKICAgICAgICAnbWFwXzA4MzJmMDUxMzdhZTQ0N2E4NjRhZGZiNzY4NmIyMWUyJywgewogICAgICAgIGNlbnRlcjogWzQzLCAyN10sCiAgICAgICAgem9vbTogNSwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF8wODMyZjA1MTM3YWU0NDdhODY0YWRmYjc2ODZiMjFlMik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl9mODVkYTRiYWUwMTY0ODBjYjdkM2M2NjZmMzQxOWQzOSA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfMDgzMmYwNTEzN2FlNDQ3YTg2NGFkZmI3Njg2YjIxZTIpOwogICAgCiAgICAgICAgICAgICAgICB2YXIgcG9seV9saW5lXzg0NDAwZTk3ZGQzNDRhZGNiNDAxMjk4ZDNjODE5YTFmID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbWzQyLjMyMjQsIDI0Ljg2OTldLCBbNDYuMzkxMywgMjQuMjI1Nl0sIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLCBbNDEuNTk1NywgMjEuNzkzMl0sIFs0Mi4zMTcsIDIxLjM4MzddXSwKICAgICAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibGFjayIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJibGFjayIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAibm9DbGlwIjogZmFsc2UsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInNtb290aEZhY3RvciI6IDEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMDgzMmYwNTEzN2FlNDQ3YTg2NGFkZmI3Njg2YjIxZTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjNkM2MxYjRiNjRmNGNkNDk1MjA2NDQwMTRiODY4NTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGYxZDVhOWVjZDQzNDg0NmEzMWEyMmUwNTQ2MmY0YjEgPSAkKGA8ZGl2IGlkPSJodG1sXzhmMWQ1YTllY2Q0MzQ4NDZhMzFhMjJlMDU0NjJmNGIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYWxrYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IzZDNjMWI0YjY0ZjRjZDQ5NTIwNjQ0MDE0Yjg2ODUxLnNldENvbnRlbnQoaHRtbF84ZjFkNWE5ZWNkNDM0ODQ2YTMxYTIyZTA1NDYyZjRiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgcG9seV9saW5lXzg0NDAwZTk3ZGQzNDRhZGNiNDAxMjk4ZDNjODE5YTFmLmJpbmRQb3B1cChwb3B1cF9iM2QzYzFiNGI2NGY0Y2Q0OTUyMDY0NDAxNGI4Njg1MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfY2UzODg1ZTUxYjZhNGMxNGE4YTRmMzVmN2ZiNGFhOGIgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MzJmMDUxMzdhZTQ0N2E4NjRhZGZiNzY4NmIyMWUyKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NGU3MWRjMGQxYWU0OWIzOTljMzI2MWNmMzU4YWE1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjMyMjQsIDI0Ljg2OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jZTM4ODVlNTFiNmE0YzE0YThhNGYzNWY3ZmI0YWE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiOGZkZTNjNWQ4ZjRkM2Y4NTQ5MTYzNjE2Y2Y4NzJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2NlMzg4NWU1MWI2YTRjMTRhOGE0ZjM1ZjdmYjRhYThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2ZiYzA2ODk2ZWM2NGU5MWEyYjA4M2JjMjhkZTg1YWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jZTM4ODVlNTFiNmE0YzE0YThhNGYzNWY3ZmI0YWE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwMjE4MTY3Yzk2MTQyMmNhMDliZjBhYzMwYTNiMTkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNTk1NywgMjEuNzkzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2NlMzg4NWU1MWI2YTRjMTRhOGE0ZjM1ZjdmYjRhYThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2E4OTIyMjgyNTU5NDAyMmFkYTZhNDUyZTM5YmUyMWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zMTcsIDIxLjM4MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jZTM4ODVlNTFiNmE0YzE0YThhNGYzNWY3ZmI0YWE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmYzg2OTU5YWUwMjRjOThhYWI4ZDllNGYzYTE4M2E5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTc1ODQxOTk5OTk5OTk2LCAyNC4zOTU3ODU5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jZTM4ODVlNTFiNmE0YzE0YThhNGYzNWY3ZmI0YWE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhNmQzMGFlYTdmODQ3Y2Q4YzZlMTAyYjAxMzVmNmYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2NlMzg4NWU1MWI2YTRjMTRhOGE0ZjM1ZjdmYjRhYThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWE1ZDRhNmNjZWMyNDJiMmFjYzkxZDA3NjdmZDFmM2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wNDY0LCAxMi42NDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfY2UzODg1ZTUxYjZhNGMxNGE4YTRmMzVmN2ZiNGFhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNWUzOGViYmJlODc0MGNlYWMzOWU0NmRiMGU4MGNjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjMyMjQsIDI0Ljg2OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jZTM4ODVlNTFiNmE0YzE0YThhNGYzNWY3ZmI0YWE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTY4MDA4MzMzYWE0MTlkYmNiNTRiM2E2MzdiN2EyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYzNjOWQzNWFhODg0NDVhODJlMmU3MjNiNjk0Zjg0MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYmMzYzlkMzVhYTg4NDQ1YTgyZTJlNzIzYjY5NGY4NDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tb2RlMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Nb2Rlcm4gR3JlZWs8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDE2ODAwODMzM2FhNDE5ZGJjYjU0YjNhNjM3YjdhMjEuc2V0Q29udGVudChodG1sX2JjM2M5ZDM1YWE4ODQ0NWE4MmUyZTcyM2I2OTRmODQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1ZTM4ZWJiYmU4NzQwY2VhYzM5ZTQ2ZGIwZTgwY2M4LmJpbmRQb3B1cChwb3B1cF9kMTY4MDA4MzMzYWE0MTlkYmNiNTRiM2E2MzdiN2EyMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2UwOWU5MWE5OWM1NGQ5ZmI1YTQ5ZWRjZDU2ZDdjOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zOTEzLCAyNC4yMjU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfY2UzODg1ZTUxYjZhNGMxNGE4YTRmMzVmN2ZiNGFhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmU1OWNjY2U3YmY1NGI2NDljYTA2YTAzZGMxYjAyZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODljOTZhNDIyNzY1NGE1YzgxY2FlZTBhZmExOTYzMmYgPSAkKGA8ZGl2IGlkPSJodG1sXzg5Yzk2YTQyMjc2NTRhNWM4MWNhZWUwYWZhMTk2MzJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcm9tYTEzMjciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Um9tYW5pYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmU1OWNjY2U3YmY1NGI2NDljYTA2YTAzZGMxYjAyZmQuc2V0Q29udGVudChodG1sXzg5Yzk2YTQyMjc2NTRhNWM4MWNhZWUwYWZhMTk2MzJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNlMDllOTFhOTljNTRkOWZiNWE0OWVkY2Q1NmQ3YzliLmJpbmRQb3B1cChwb3B1cF9iZTU5Y2NjZTdiZjU0YjY0OWNhMDZhMDNkYzFiMDJmZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjg1MzcwNWYzOWE4NDAxNWJhNWEzM2E4ZGYxOTMzNDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jZTM4ODVlNTFiNmE0YzE0YThhNGYzNWY3ZmI0YWE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OGM4NjE0NDgyMjI0NGVmYWIzMzE5YzY1ZWQyOGJiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDAzNGZlNjBhYWU0NTU0OGYwMDM2NWNjMjIyMDEzNSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWQwMzRmZTYwYWFlNDU1NDhmMDAzNjVjYzIyMjAxMzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9idWxnMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CdWxnYXJpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzhjODYxNDQ4MjIyNDRlZmFiMzMxOWM2NWVkMjhiYmUuc2V0Q29udGVudChodG1sXzlkMDM0ZmU2MGFhZTQ1NTQ4ZjAwMzY1Y2MyMjIwMTM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI4NTM3MDVmMzlhODQwMTViYTVhMzNhOGRmMTkzMzQwLmJpbmRQb3B1cChwb3B1cF83OGM4NjE0NDgyMjI0NGVmYWIzMzE5YzY1ZWQyOGJiZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTY2NzNiNTNkZTgzNDI3MzhmNTY5ODkzZTUwYzMyOWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS41OTU3LCAyMS43OTMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfY2UzODg1ZTUxYjZhNGMxNGE4YTRmMzVmN2ZiNGFhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjhmMmM2MGYzZmFmNGE1ZDk2OGY1MjVlYzliYzBhZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmJmNDhiYjI0MzU3NGNkMzk4ZGYyYzc0OWNjMjNhMmEgPSAkKGA8ZGl2IGlkPSJodG1sXzZiZjQ4YmIyNDM1NzRjZDM5OGRmMmM3NDljYzIzYTJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFjZTEyNTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFjZWRvbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOGYyYzYwZjNmYWY0YTVkOTY4ZjUyNWVjOWJjMGFkNC5zZXRDb250ZW50KGh0bWxfNmJmNDhiYjI0MzU3NGNkMzk4ZGYyYzc0OWNjMjNhMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTY2NzNiNTNkZTgzNDI3MzhmNTY5ODkzZTUwYzMyOWYuYmluZFBvcHVwKHBvcHVwX2Y4ZjJjNjBmM2ZhZjRhNWQ5NjhmNTI1ZWM5YmMwYWQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MmUxMWZmZTkyNzY0YWIxYWUwZmIyMjJkZmE1MGZhNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjMxNywgMjEuMzgzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2NlMzg4NWU1MWI2YTRjMTRhOGE0ZjM1ZjdmYjRhYThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzZGM5ZGExODc2YzQzMmJiYjU4NmE5OTk5YTEyNGFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAzMWU4OTI5Yjk0YzQwNGNhODQ3Yzg4ZDU1ODIyYWQ4ID0gJChgPGRpdiBpZD0iaHRtbF8wMzFlODkyOWI5NGM0MDRjYTg0N2M4OGQ1NTgyMmFkOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2doZWcxMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdoZWcgQWxiYW5pYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTNkYzlkYTE4NzZjNDMyYmJiNTg2YTk5OTlhMTI0YWMuc2V0Q29udGVudChodG1sXzAzMWU4OTI5Yjk0YzQwNGNhODQ3Yzg4ZDU1ODIyYWQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcyZTExZmZlOTI3NjRhYjFhZTBmYjIyMmRmYTUwZmE2LmJpbmRQb3B1cChwb3B1cF81M2RjOWRhMTg3NmM0MzJiYmI1ODZhOTk5OWExMjRhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGMxMzViMjQxOGYwNGY2YzlkMDE2YWUzNDUxODA5Y2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzU4NDE5OTk5OTk5OTYsIDI0LjM5NTc4NTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2NlMzg4NWU1MWI2YTRjMTRhOGE0ZjM1ZjdmYjRhYThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhMGVkNWQxYjU4ODRkZjY4MTJlMzMxMGEwZDRjYTk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhZjllMzNjZThhYTQ1MjZiNTdiNjZhZTg5NThkN2QwID0gJChgPGRpdiBpZD0iaHRtbF9iYWY5ZTMzY2U4YWE0NTI2YjU3YjY2YWU4OTU4ZDdkMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3VrcmExMjUzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlVrcmFpbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYTBlZDVkMWI1ODg0ZGY2ODEyZTMzMTBhMGQ0Y2E5NS5zZXRDb250ZW50KGh0bWxfYmFmOWUzM2NlOGFhNDUyNmI1N2I2NmFlODk1OGQ3ZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGMxMzViMjQxOGYwNGY2YzlkMDE2YWUzNDUxODA5Y2EuYmluZFBvcHVwKHBvcHVwX2FhMGVkNWQxYjU4ODRkZjY4MTJlMzMxMGEwZDRjYTk1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MjBkNzA0N2Q0ZTU0ZTEwODcxM2VkNWUwYmU4N2EwOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jZTM4ODVlNTFiNmE0YzE0YThhNGYzNWY3ZmI0YWE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YWYyNmFjYWVmYmQ0ZTQwYWQzM2QyMjQyZjZkNGNkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYjUzYWVkMzJlNTM0MTA4YWQzYzE4OWVkZmU3N2U4OCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGI1M2FlZDMyZTUzNDEwOGFkM2MxODllZGZlNzdlODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlhZjI2YWNhZWZiZDRlNDBhZDMzZDIyNDJmNmQ0Y2RkLnNldENvbnRlbnQoaHRtbF9kYjUzYWVkMzJlNTM0MTA4YWQzYzE4OWVkZmU3N2U4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MjBkNzA0N2Q0ZTU0ZTEwODcxM2VkNWUwYmU4N2EwOS5iaW5kUG9wdXAocG9wdXBfOWFmMjZhY2FlZmJkNGU0MGFkMzNkMjI0MmY2ZDRjZGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JkYTJjZGEzNWJhNTQ2NGNiMjA5NDdhNjI2YzQxNmEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDQ2NCwgMTIuNjQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2NlMzg4NWU1MWI2YTRjMTRhOGE0ZjM1ZjdmYjRhYThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlYTdhMTM4M2NkYzQ4NTZhZmRjODgzZTQyM2IwMTJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzMTgxM2I1ZWIxYjQwNzE4MGNhYzliZjJiN2E2N2M3ID0gJChgPGRpdiBpZD0iaHRtbF9mMzE4MTNiNWViMWI0MDcxODBjYWM5YmYyYjdhNjdjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2l0YWwxMjgyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkl0YWxpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWVhN2ExMzgzY2RjNDg1NmFmZGM4ODNlNDIzYjAxMmUuc2V0Q29udGVudChodG1sX2YzMTgxM2I1ZWIxYjQwNzE4MGNhYzliZjJiN2E2N2M3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JkYTJjZGEzNWJhNTQ2NGNiMjA5NDdhNjI2YzQxNmEzLmJpbmRQb3B1cChwb3B1cF81ZWE3YTEzODNjZGM0ODU2YWZkYzg4M2U0MjNiMDEyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.12. Customizing markers 
~~~~~~~~~~~~~~~~~~~~~~~~~~

It is possible to set opacity and width of markers.

.. code:: ipython3

    m = lingtypology.LingMap(languages)
    m.add_features(features, radius=7, opacity=0.9)
    m.add_stroke_features(stroke_features, opacity=0.7)
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzFmNjUxNDk1YjRiNzQxMGQ5YTNhMjEzMjdkYzFiNGZhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8xZjY1MTQ5NWI0Yjc0MTBkOWEzYTIxMzI3ZGMxYjRmYSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+QWdnbHV0aW5hdGl2ZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzE5ZTZiNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BbmFseXRpYzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZTExOTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CiAgICAKPCEtLSBCYXNlZCBvbiB0aGUgdGVtcGxhdGUgZnJvbSBoZXJlOiBodHRwczovL25idmlld2VyLmp1cHl0ZXIub3JnL2dpc3QvdGFsYmVydGMtdXNncy8xOGY4OTAxZmM5OGYxMDlmMmI3MTE1NmNmM2FjODFjZCAtLT4KPCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEyLjEvdGhlbWVzL2Jhc2UvanF1ZXJ5LXVpLmNzcyI+CgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40LmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+CiAgCiAgPHNjcmlwdD4KICAgICQoZnVuY3Rpb24oKXsKICAgICAgICAkKCIjbWFwbGVnZW5kMSIpLmRyYWdnYWJsZSh7CiAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICB0b3A6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICBib3R0b206ICJhdXRvIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwogIDwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PgoKCjxkaXYgaWQ9J21hcGxlZ2VuZDEnIGNsYXNzPSdtYXBsZWdlbmQnIAogICAgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDo5OTk5OyBib3JkZXI6MnB4IHNvbGlkIGdyZXk7IGJhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgIGJvcmRlci1yYWRpdXM6NnB4OyBwYWRkaW5nOiAxMHB4OyBmb250LXNpemU6MTRweDsgcmlnaHQ6IDIwcHg7IHRvcDogMjBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TGVnZW5kPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmZmZmO29wYWNpdHk6MC43OyI+PC9zcGFuPkFjY3VzYXRpdmU8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMDAwMDA7b3BhY2l0eTowLjc7Ij48L3NwYW4+RXJnYXRpdmU8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8xZjY1MTQ5NWI0Yjc0MTBkOWEzYTIxMzI3ZGMxYjRmYSA9IEwubWFwKAogICAgICAgICdtYXBfMWY2NTE0OTViNGI3NDEwZDlhM2EyMTMyN2RjMWI0ZmEnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF8xZjY1MTQ5NWI0Yjc0MTBkOWEzYTIxMzI3ZGMxYjRmYSk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl80NjI1MzRjYWVlNWY0NTVkYTYxYjE0YzA1ZjA5ZjRkZCA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfMWY2NTE0OTViNGI3NDEwZDlhM2EyMTMyN2RjMWI0ZmEpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2MxNjRlMWMxZDY3MDQyNjJhMzIzZWZhM2NkZjNkNTdmID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xZjY1MTQ5NWI0Yjc0MTBkOWEzYTIxMzI3ZGMxYjRmYSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzczY2Y0OGMyODY1NDQ5Mzg5MDE4MDY1MWFkZmNmMTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jMTY0ZTFjMWQ2NzA0MjYyYTMyM2VmYTNjZGYzZDU3Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3MDM5ODQ5MWI5NjQ2M2U5NzY0OGNlYjQwNmRkM2Y3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2MxNjRlMWMxZDY3MDQyNjJhMzIzZWZhM2NkZjNkNTdmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzJmNjI0YTUyZDNlNDk5Y2E2YzE4M2VmMTA3MjlmOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYzE2NGUxYzFkNjcwNDI2MmEzMjNlZmEzY2RmM2Q1N2YpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzU3ZTAzZjIwMTY0MzQ2YWMxMDJkOThmY2E3MmNlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYzE2NGUxYzFkNjcwNDI2MmEzMjNlZmEzY2RmM2Q1N2YpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMzRhZmZhMTMzOGU0ZWZlYjVhYzNmZjI0OGNlMDRmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jMTY0ZTFjMWQ2NzA0MjYyYTMyM2VmYTNjZGYzZDU3Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMyMWM2OWJmZTIyZDQxZTA5ZTUyOTljM2RiZjdmMzQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYzE2NGUxYzFkNjcwNDI2MmEzMjNlZmEzY2RmM2Q1N2YpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kN2YyZjQyMTg0MmM0NTFlYmNmYzhhMzQxMjBiN2Y3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jMTY0ZTFjMWQ2NzA0MjYyYTMyM2VmYTNjZGYzZDU3Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxMTAwYzVmNjE1ODQ2MWY5NDAzOTkwNWZmYTBlNjZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2MxNjRlMWMxZDY3MDQyNjJhMzIzZWZhM2NkZjNkNTdmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDNhYjYwODg1MmFkNDBjMjlkMjEzODA1Yjc0YjVlNWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wLCAzOS4zM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2MxNjRlMWMxZDY3MDQyNjJhMzIzZWZhM2NkZjNkNTdmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjk4ODUxY2FiNjM1NGQwNGIwMjY0MWQxNzNmMTM5YjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYzE2NGUxYzFkNjcwNDI2MmEzMjNlZmEzY2RmM2Q1N2YpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YmQ4YTZlMzIxM2E0OGIxYjVkMjc0OGUzZmI1ODg4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM2NDYsIDI1LjA0Njk5OTk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC45LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYzE2NGUxYzFkNjcwNDI2MmEzMjNlZmEzY2RmM2Q1N2YpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNWQ2ZDRkNWFlNjg0MjRiYjY1YzkyZTU4NjFkMDUzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2MxNjRlMWMxZDY3MDQyNjJhMzIzZWZhM2NkZjNkNTdmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTQ5MzQzNTI3ZTAzNGY2MDgzMWUxZWM1OTE2YzQzYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjksCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jMTY0ZTFjMWQ2NzA0MjYyYTMyM2VmYTNjZGYzZDU3Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U5YmJkZmYyNmY0ZjRlOGVhYTU0MzI1ZjY0ODhhM2YxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2MxNjRlMWMxZDY3MDQyNjJhMzIzZWZhM2NkZjNkNTdmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGYzOTI1MDIxZGIxNDZjM2I2MDllOWE3OTUwYTc4OWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjksCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jMTY0ZTFjMWQ2NzA0MjYyYTMyM2VmYTNjZGYzZDU3Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2NjdkOTI2Y2NmMjQ0ODFiM2NhNmY3N2YzMGZkYmJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAwLjksCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jMTY0ZTFjMWQ2NzA0MjYyYTMyM2VmYTNjZGYzZDU3Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NDgzZTYyZTlkYjU0Y2NhOGI0N2JmODljMzc5YTIyMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOWRlZjY1ZmNkNDg0OWFmYmFkNTQ3ZjgyNjQ4MDgwMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMjlkZWY2NWZjZDQ4NDlhZmJhZDU0N2Y4MjY0ODA4MDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9idWxnMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CdWxnYXJpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQ4M2U2MmU5ZGI1NGNjYThiNDdiZjg5YzM3OWEyMjIuc2V0Q29udGVudChodG1sXzI5ZGVmNjVmY2Q0ODQ5YWZiYWQ1NDdmODI2NDgwODAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU2NjdkOTI2Y2NmMjQ0ODFiM2NhNmY3N2YzMGZkYmJlLmJpbmRQb3B1cChwb3B1cF80NDgzZTYyZTlkYjU0Y2NhOGI0N2JmODljMzc5YTIyMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWFhOTQzYTNkMjg3NGIyNDkyNzU3ZjhmOWIzZWUxOWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAwLjksCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jMTY0ZTFjMWQ2NzA0MjYyYTMyM2VmYTNjZGYzZDU3Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNTI1ZTg3NDI0NGQ0MDNhYTM0ZDU0ODRkZGZjMjg2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTRmNDBiOGFiMWQ0OGE1YjFhMjM3OWNhMDA5YjU1OSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTU0ZjQwYjhhYjFkNDhhNWIxYTIzNzljYTAwOWI1NTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wb2xpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qb2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTUyNWU4NzQyNDRkNDAzYWEzNGQ1NDg0ZGRmYzI4NmEuc2V0Q29udGVudChodG1sXzE1NGY0MGI4YWIxZDQ4YTViMWEyMzc5Y2EwMDliNTU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlhYTk0M2EzZDI4NzRiMjQ5Mjc1N2Y4ZjliM2VlMTljLmJpbmRQb3B1cChwb3B1cF9lNTI1ZTg3NDI0NGQ0MDNhYTM0ZDU0ODRkZGZjMjg2YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmFlYmIyNTkyODkwNDdlNzk0MTUxOTNiNjBkM2MxYzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjksCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9jMTY0ZTFjMWQ2NzA0MjYyYTMyM2VmYTNjZGYzZDU3Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMGI2ZDA0YmE3MDk0MjcwYTQyZDNiOTg5N2UxODc5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Zjg4MTk0MjUxYzU0NDRjODk1ZjQxZjQ3ZTI1ZDZjZSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2Y4ODE5NDI1MWM1NDQ0Yzg5NWY0MWY0N2UyNWQ2Y2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QwYjZkMDRiYTcwOTQyNzBhNDJkM2I5ODk3ZTE4Nzk0LnNldENvbnRlbnQoaHRtbF83Zjg4MTk0MjUxYzU0NDRjODk1ZjQxZjQ3ZTI1ZDZjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYWViYjI1OTI4OTA0N2U3OTQxNTE5M2I2MGQzYzFjOS5iaW5kUG9wdXAocG9wdXBfZDBiNmQwNGJhNzA5NDI3MGE0MmQzYjk4OTdlMTg3OTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiZjQ1MDA2MDc4ZjQ2NWNhNzY1Njk4ZTYxNTIwNWU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDAuOSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2MxNjRlMWMxZDY3MDQyNjJhMzIzZWZhM2NkZjNkNTdmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdhZDc2NjE2YWYxODQyZjRiZDJlMDA2NmY3OGE5OWM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5ZTA0NTNjNmY1MDRlNWM4MThhNGY1OGM4NWY5OWZhID0gJChgPGRpdiBpZD0iaHRtbF9lOWUwNDUzYzZmNTA0ZTVjODE4YTRmNThjODVmOTlmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YWQ3NjYxNmFmMTg0MmY0YmQyZTAwNjZmNzhhOTljOC5zZXRDb250ZW50KGh0bWxfZTllMDQ1M2M2ZjUwNGU1YzgxOGE0ZjU4Yzg1Zjk5ZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2JmNDUwMDYwNzhmNDY1Y2E3NjU2OThlNjE1MjA1ZTQuYmluZFBvcHVwKHBvcHVwXzdhZDc2NjE2YWYxODQyZjRiZDJlMDA2NmY3OGE5OWM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjhjNGZhM2U5Njg0NDg1OWI0MzM3NGQzY2ExNDY4MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDAuOSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2MxNjRlMWMxZDY3MDQyNjJhMzIzZWZhM2NkZjNkNTdmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5YzFiNDBmNDc5NTRkODk4ODhlMDJiZTFmZDdjZWExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkY2I3OTMwYWQwNjRmMDVhNDg2NDAzZTE5ODU5OTlhID0gJChgPGRpdiBpZD0iaHRtbF84ZGNiNzkzMGFkMDY0ZjA1YTQ4NjQwM2UxOTg1OTk5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOWMxYjQwZjQ3OTU0ZDg5ODg4ZTAyYmUxZmQ3Y2VhMS5zZXRDb250ZW50KGh0bWxfOGRjYjc5MzBhZDA2NGYwNWE0ODY0MDNlMTk4NTk5OWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGY4YzRmYTNlOTY4NDQ4NTliNDMzNzRkM2NhMTQ2ODEuYmluZFBvcHVwKHBvcHVwX2U5YzFiNDBmNDc5NTRkODk4ODhlMDJiZTFmZDdjZWExKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.13. Start Location/Zoom shortcuts 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

There are some shortcuts that can allow not to choose ``start_location``
and ``start_zoom`` manually.

.. code:: ipython3

    m = lingtypology.LingMap([
        'Irish', 'Estonian', 'Norwegian', 'Romanian', 'Polish',
        'Italian', 'Turkish', 'French', 'English', 'Spanish'
    ])
    m.start_location = 'Central Europe'
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzZkYzEyZTQwMzI4NDQwYTJiYThlZWU5ODdlYzdmY2YwIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF82ZGMxMmU0MDMyODQ0MGEyYmE4ZWVlOTg3ZWM3ZmNmMCIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfNmRjMTJlNDAzMjg0NDBhMmJhOGVlZTk4N2VjN2ZjZjAgPSBMLm1hcCgKICAgICAgICAnbWFwXzZkYzEyZTQwMzI4NDQwYTJiYThlZWU5ODdlYzdmY2YwJywgewogICAgICAgIGNlbnRlcjogWzUwLCAwXSwKICAgICAgICB6b29tOiA0LAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzZkYzEyZTQwMzI4NDQwYTJiYThlZWU5ODdlYzdmY2YwKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzEwMDk4YTU2YjlmMjQyZGM4ZjAwYTQ3ODg1MGEzNGZkID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF82ZGMxMmU0MDMyODQ0MGEyYmE4ZWVlOTg3ZWM3ZmNmMCk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfYmIxMjdhYjc1YWY1NGQ2ZmFmZmFkNTZjOGNhNDYyZjkgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzZkYzEyZTQwMzI4NDQwYTJiYThlZWU5ODdlYzdmY2YwKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MDJiYjg5Y2EyMWU0YTc3OWQwMWE5ZDE0NzQzZGE2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjIxODYsIC03LjYxNTA4OTk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYjEyN2FiNzVhZjU0ZDZmYWZmYWQ1NmM4Y2E0NjJmOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4MTAwMDdmMDdmOTQwNmU5YTEyNzZiOWFlM2UxMjE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTguNTUsIDI1LjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmIxMjdhYjc1YWY1NGQ2ZmFmZmFkNTZjOGNhNDYyZjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNmYyNjBjNjllNDE0ZDIzODg0YTljMDAwZDkzY2Y3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjkyLCAxMC43MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JiMTI3YWI3NWFmNTRkNmZhZmZhZDU2YzhjYTQ2MmY5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWIxZDk2NTQ1YTE1NDMyMGIwM2RlNGYyMGFmMTgzNTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zOTEzLCAyNC4yMjU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmIxMjdhYjc1YWY1NGQ2ZmFmZmFkNTZjOGNhNDYyZjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDc4MzVlMTMxYjU0ZmFiYWVkYzhmMjVhZjNkZmQ4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYjEyN2FiNzVhZjU0ZDZmYWZmYWQ1NmM4Y2E0NjJmOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlODRlY2VjNzk1YjRmMmM5M2M1MjQyZjg1YjFlNjBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDQ2NCwgMTIuNjQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JiMTI3YWI3NWFmNTRkNmZhZmZhZDU2YzhjYTQ2MmY5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODdkOGNhZGYzNmNmNDM3MmIwOTFhYTRjY2FlNDI4ODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmIxMjdhYjc1YWY1NGQ2ZmFmZmFkNTZjOGNhNDYyZjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zODRkNzg5MGQ3MDM0ZWUyOTQzMDI5ZjQyZGMyMWM4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjAsIDIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JiMTI3YWI3NWFmNTRkNmZhZmZhZDU2YzhjYTQ2MmY5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2ZkYzY3NWM5NTgxNDVkMDg3Y2NiNjZlZGMwYTI3NDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4wLCAtMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmIxMjdhYjc1YWY1NGQ2ZmFmZmFkNTZjOGNhNDYyZjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YmRjMGYyY2EwODE0Mjg0YjkyYTcwNjdhMGI1NTdlMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQ0MTQsIC0xLjExNzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmIxMjdhYjc1YWY1NGQ2ZmFmZmFkNTZjOGNhNDYyZjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xY2RmYmIxMmQ1OTM0NmI0YWY3MzE4MmMxZmI4YzhhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjIxODYsIC03LjYxNTA4OTk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYjEyN2FiNzVhZjU0ZDZmYWZmYWQ1NmM4Y2E0NjJmOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjFmM2QwYzJhNjM0NmRjYWVlN2E0NDk1YjkzZWZiOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYjFmZTgzYTA2MTY0Zjk0YmIzNWUxNjEzZTdjZTIwMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMGIxZmU4M2EwNjE2NGY5NGJiMzVlMTYxM2U3Y2UyMDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pcmlzMTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JcmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjFmM2QwYzJhNjM0NmRjYWVlN2E0NDk1YjkzZWZiOC5zZXRDb250ZW50KGh0bWxfMGIxZmU4M2EwNjE2NGY5NGJiMzVlMTYxM2U3Y2UyMDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWNkZmJiMTJkNTkzNDZiNGFmNzMxODJjMWZiOGM4YTMuYmluZFBvcHVwKHBvcHVwX2VmMWYzZDBjMmE2MzQ2ZGNhZWU3YTQ0OTViOTNlZmI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZWRmY2FlYTMzODc0ODBlYjZjZjhmOGI5MmM0MWE4ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU4LjU1LCAyNS44Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JiMTI3YWI3NWFmNTRkNmZhZmZhZDU2YzhjYTQ2MmY5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmNTE4NjJmYTUzZDQ3YjFiZWZkYzYzZTQxZjk0NjFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwNzc4Mzg4NWY2YzRmODNhOTEwM2NhYzk0ZTRkNjQ3ID0gJChgPGRpdiBpZD0iaHRtbF9lMDc3ODM4ODVmNmM0ZjgzYTkxMDNjYWM5NGU0ZDY0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2VzdG8xMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVzdG9uaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmNTE4NjJmYTUzZDQ3YjFiZWZkYzYzZTQxZjk0NjFlLnNldENvbnRlbnQoaHRtbF9lMDc3ODM4ODVmNmM0ZjgzYTkxMDNjYWM5NGU0ZDY0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZWRmY2FlYTMzODc0ODBlYjZjZjhmOGI5MmM0MWE4ZC5iaW5kUG9wdXAocG9wdXBfYmY1MTg2MmZhNTNkNDdiMWJlZmRjNjNlNDFmOTQ2MWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEyMDhiMjdkNTIyMDQ0YWU5N2IwMmMzMzU5NjFjNmMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuOTIsIDEwLjcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmIxMjdhYjc1YWY1NGQ2ZmFmZmFkNTZjOGNhNDYyZjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2JmNzY0ZjczNmVjNDY5Zjg0NWI4NTdhZjA4YzM0MjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWFkOGVmNTk3YTRhNGY3YzhlZmJhZWU2OGUxYzhkZDkgPSAkKGA8ZGl2IGlkPSJodG1sXzFhZDhlZjU5N2E0YTRmN2M4ZWZiYWVlNjhlMWM4ZGQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9ydzEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tm9yd2VnaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiZjc2NGY3MzZlYzQ2OWY4NDViODU3YWYwOGMzNDI0LnNldENvbnRlbnQoaHRtbF8xYWQ4ZWY1OTdhNGE0ZjdjOGVmYmFlZTY4ZTFjOGRkOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMjA4YjI3ZDUyMjA0NGFlOTdiMDJjMzM1OTYxYzZjMi5iaW5kUG9wdXAocG9wdXBfY2JmNzY0ZjczNmVjNDY5Zjg0NWI4NTdhZjA4YzM0MjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjZWY1MTkyNWE4NzQzMjA4ZTBmNzU2OGU3NWNhNjkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JiMTI3YWI3NWFmNTRkNmZhZmZhZDU2YzhjYTQ2MmY5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhNzI4YjVhNWYwZDQ2MzNiMzg3YjY4MmE4ZmUzNGY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljNDQ1NjYwNmEzMzRiMWE4MTVjMTMxYmIzMGJkNjRiID0gJChgPGRpdiBpZD0iaHRtbF85YzQ0NTY2MDZhMzM0YjFhODE1YzEzMWJiMzBiZDY0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3JvbWExMzI3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJvbWFuaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhNzI4YjVhNWYwZDQ2MzNiMzg3YjY4MmE4ZmUzNGY2LnNldENvbnRlbnQoaHRtbF85YzQ0NTY2MDZhMzM0YjFhODE1YzEzMWJiMzBiZDY0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xY2VmNTE5MjVhODc0MzIwOGUwZjc1NjhlNzVjYTY5MC5iaW5kUG9wdXAocG9wdXBfZWE3MjhiNWE1ZjBkNDYzM2IzODdiNjgyYThmZTM0ZjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5Mjc1MmIyMjZiZTRmZDliM2JjNTE3MTE4NTgzZjExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JiMTI3YWI3NWFmNTRkNmZhZmZhZDU2YzhjYTQ2MmY5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5ODI1ZmU2NmYwMjRmOWY4MzJjMTUyMTlhNmQ3YWE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0ZTc5NTMyNDU4MTRlZDRhMmI4ZDE4NGZkZTZiNWI1ID0gJChgPGRpdiBpZD0iaHRtbF9kNGU3OTUzMjQ1ODE0ZWQ0YTJiOGQxODRmZGU2YjViNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvbGkxMjYwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OTgyNWZlNjZmMDI0ZjlmODMyYzE1MjE5YTZkN2FhOS5zZXRDb250ZW50KGh0bWxfZDRlNzk1MzI0NTgxNGVkNGEyYjhkMTg0ZmRlNmI1YjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjkyNzUyYjIyNmJlNGZkOWIzYmM1MTcxMTg1ODNmMTEuYmluZFBvcHVwKHBvcHVwXzg5ODI1ZmU2NmYwMjRmOWY4MzJjMTUyMTlhNmQ3YWE5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Zjg3M2JlOTA2NzE0NzAzODdkMmEyYzc0ZWE5NGM5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjA0NjQsIDEyLjY0ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYjEyN2FiNzVhZjU0ZDZmYWZmYWQ1NmM4Y2E0NjJmOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NGQ2ZWQ4MzFhODg0NWQ0YTNkOWQ0M2VjYTBlYmViZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOGJhNTJhMTVkNmQ0ODVmYTkzNzY4YTI5MGJjN2QzNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzhiYTUyYTE1ZDZkNDg1ZmE5Mzc2OGEyOTBiYzdkMzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pdGFsMTI4MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JdGFsaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0ZDZlZDgzMWE4ODQ1ZDRhM2Q5ZDQzZWNhMGViZWJkLnNldENvbnRlbnQoaHRtbF8zOGJhNTJhMTVkNmQ0ODVmYTkzNzY4YTI5MGJjN2QzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83Zjg3M2JlOTA2NzE0NzAzODdkMmEyYzc0ZWE5NGM5Yi5iaW5kUG9wdXAocG9wdXBfNjRkNmVkODMxYTg4NDVkNGEzZDlkNDNlY2EwZWJlYmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxYjRmYjE1ODQ5NDRiYjViOTA2ZDQ5NWFkYzUyYzhiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JiMTI3YWI3NWFmNTRkNmZhZmZhZDU2YzhjYTQ2MmY5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmNGVjYzI3YTE1ZjQ1MjJiNGU0MWRhYjM5OGVjZTlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxOWI2NzEwODQ5NjRlNzdiYjM2MzMyMmQ0ZWI4OGM2ID0gJChgPGRpdiBpZD0iaHRtbF9jMTliNjcxMDg0OTY0ZTc3YmIzNjMzMjJkNGViODhjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1cmtpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWY0ZWNjMjdhMTVmNDUyMmI0ZTQxZGFiMzk4ZWNlOWEuc2V0Q29udGVudChodG1sX2MxOWI2NzEwODQ5NjRlNzdiYjM2MzMyMmQ0ZWI4OGM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgxYjRmYjE1ODQ5NDRiYjViOTA2ZDQ5NWFkYzUyYzhiLmJpbmRQb3B1cChwb3B1cF85ZjRlY2MyN2ExNWY0NTIyYjRlNDFkYWIzOThlY2U5YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2NkODg3N2M3ZmFmNGZjNDg1ZDA4YmEyNTZmNWEyMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYjEyN2FiNzVhZjU0ZDZmYWZmYWQ1NmM4Y2E0NjJmOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYjQ0NzE2NDhkMjQ0ZGYyOWIzYmJiNWM2OTcwZDJkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YmU3ZjM1NThjYjg0NTdkODI3MDAxZmE2ODFiZWFkMCA9ICQoYDxkaXYgaWQ9Imh0bWxfNGJlN2YzNTU4Y2I4NDU3ZDgyNzAwMWZhNjgxYmVhZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zdGFuMTI5MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GcmVuY2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGI0NDcxNjQ4ZDI0NGRmMjliM2JiYjVjNjk3MGQyZDMuc2V0Q29udGVudChodG1sXzRiZTdmMzU1OGNiODQ1N2Q4MjcwMDFmYTY4MWJlYWQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjZDg4NzdjN2ZhZjRmYzQ4NWQwOGJhMjU2ZjVhMjI1LmJpbmRQb3B1cChwb3B1cF9kYjQ0NzE2NDhkMjQ0ZGYyOWIzYmJiNWM2OTcwZDJkMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWRjYTkxMjAyZGM2NGY4YTg5NmYwZWNjMWJjNjhjZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4wLCAtMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmIxMjdhYjc1YWY1NGQ2ZmFmZmFkNTZjOGNhNDYyZjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmI4ZTY3NjI0YmY5NGZhODg3NjEwZjlmMjJhNThkNDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDc0NTNmZmZhZDMwNGRlOGExODRmMjUyZWYzODMxNjAgPSAkKGA8ZGl2IGlkPSJodG1sX2Q3NDUzZmZmYWQzMDRkZThhMTg0ZjI1MmVmMzgzMTYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RW5nbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYjhlNjc2MjRiZjk0ZmE4ODc2MTBmOWYyMmE1OGQ0MC5zZXRDb250ZW50KGh0bWxfZDc0NTNmZmZhZDMwNGRlOGExODRmMjUyZWYzODMxNjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWRjYTkxMjAyZGM2NGY4YTg5NmYwZWNjMWJjNjhjZDkuYmluZFBvcHVwKHBvcHVwXzJiOGU2NzYyNGJmOTRmYTg4NzYxMGY5ZjIyYTU4ZDQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YzFjYjI2ZjllZWQ0YjUxYWFjODI1NGM5ZjBhN2Y0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQ0MTQsIC0xLjExNzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmIxMjdhYjc1YWY1NGQ2ZmFmZmFkNTZjOGNhNDYyZjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDVkODNlN2QzNWE0NDNkNzk3YWNkOTM0NjllODRiOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTY3ZmMwMzgyZGM5NGZmMmIxNjI2NjY5YzE0MmRlN2EgPSAkKGA8ZGl2IGlkPSJodG1sXzE2N2ZjMDM4MmRjOTRmZjJiMTYyNjY2OWMxNDJkZTdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyODgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3BhbmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNWQ4M2U3ZDM1YTQ0M2Q3OTdhY2Q5MzQ2OWU4NGI5Ny5zZXRDb250ZW50KGh0bWxfMTY3ZmMwMzgyZGM5NGZmMmIxNjI2NjY5YzE0MmRlN2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmMxY2IyNmY5ZWVkNGI1MWFhYzgyNTRjOWYwYTdmNDUuYmluZFBvcHVwKHBvcHVwX2Q1ZDgzZTdkMzVhNDQzZDc5N2FjZDkzNDY5ZTg0Yjk3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



Full list of shortcuts:

.. code:: ipython3

    m.start_location_mapping




.. parsed-literal::

    {'Central Europe': {'start_location': (50, 0), 'start_zoom': 4},
     'Caucasus': {'start_location': (43, 42), 'start_zoom': 6},
     'Australia & Oceania': {'start_location': (-16, 159), 'start_zoom': 3},
     'Papua New Guinea': {'start_location': (-5, 141), 'start_zoom': 6},
     'Africa': {'start_location': (3, 22), 'start_zoom': 3},
     'Asia': {'start_location': (36, 100), 'start_zoom': 3},
     'North America': {'start_location': (51, -102), 'start_zoom': 3},
     'Central America': {'start_location': (19, -81), 'start_zoom': 4},
     'South America': {'start_location': (-27, -49), 'start_zoom': 3}}



1.14. Color gradients 
~~~~~~~~~~~~~~~~~~~~~~

There are two ways to use color gradients. Let’s say we have features
called “Millions of native speakers”.

.. code:: ipython3

    native_speakers = [0, 1, 5, 24, 44, 62, 78, 78, 378, 442]
    m.legend_title = 'Native speakers (mln)'
    m.legend_position = 'topright'

The first way is simply pass the features as ``numeric``:

.. code:: ipython3

    m.add_features(native_speakers, numeric=True)
    m.colormap_colors = ('white', 'red')
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzY4Yjg4MGRlYzdjMzRmMjc4YTU5YmI3MGMxZDhiOWRiIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF82OGI4ODBkZWM3YzM0ZjI3OGE1OWJiNzBjMWQ4YjlkYiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IHJpZ2h0OiAyMHB4OyB0b3A6IDIwcHg7Jz4KCgo8ZGl2IGNsYXNzPSdsZWdlbmQtdGl0bGUnPk5hdGl2ZSBzcGVha2VycyAobWxuKTwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxzdmcgaGVpZ2h0PSIxNjMiIHdpZHRoPSIyMCI+PGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMjAiIHkyPSIwInN0eWxlPSJzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyIiB4Mj0iMjAiIHkyPSIyInN0eWxlPSJzdHJva2U6I2ZmZmVmZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMjAiIHkyPSIzInN0eWxlPSJzdHJva2U6I2ZmZmRmZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0IiB4Mj0iMjAiIHkyPSI0InN0eWxlPSJzdHJva2U6I2ZmZmNmYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1IiB4Mj0iMjAiIHkyPSI1InN0eWxlPSJzdHJva2U6I2ZmZmFmYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2IiB4Mj0iMjAiIHkyPSI2InN0eWxlPSJzdHJva2U6I2ZmZjlmOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3IiB4Mj0iMjAiIHkyPSI3InN0eWxlPSJzdHJva2U6I2ZmZjhmODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4IiB4Mj0iMjAiIHkyPSI4InN0eWxlPSJzdHJva2U6I2ZmZjdmNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5IiB4Mj0iMjAiIHkyPSI5InN0eWxlPSJzdHJva2U6I2ZmZjVmNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMCIgeDI9IjIwIiB5Mj0iMTAic3R5bGU9InN0cm9rZTojZmZmNGY0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExIiB4Mj0iMjAiIHkyPSIxMSJzdHlsZT0ic3Ryb2tlOiNmZmYzZjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIiIHgyPSIyMCIgeTI9IjEyInN0eWxlPSJzdHJva2U6I2ZmZjFmMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMyIgeDI9IjIwIiB5Mj0iMTMic3R5bGU9InN0cm9rZTojZmZmMGYwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0IiB4Mj0iMjAiIHkyPSIxNCJzdHlsZT0ic3Ryb2tlOiNmZmVmZWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUiIHgyPSIyMCIgeTI9IjE1InN0eWxlPSJzdHJva2U6I2ZmZWVlZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNiIgeDI9IjIwIiB5Mj0iMTYic3R5bGU9InN0cm9rZTojZmZlY2VjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE3IiB4Mj0iMjAiIHkyPSIxNyJzdHlsZT0ic3Ryb2tlOiNmZmViZWI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTgiIHgyPSIyMCIgeTI9IjE4InN0eWxlPSJzdHJva2U6I2ZmZWFlYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxOCIgeDI9IjIwIiB5Mj0iMTgic3R5bGU9InN0cm9rZTojZmZlNmU2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIwIiB4Mj0iMjAiIHkyPSIyMCJzdHlsZT0ic3Ryb2tlOiNmZmU1ZTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjEiIHgyPSIyMCIgeTI9IjIxInN0eWxlPSJzdHJva2U6I2ZmZTNlMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMiIgeDI9IjIwIiB5Mj0iMjIic3R5bGU9InN0cm9rZTojZmZlMmUyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIzIiB4Mj0iMjAiIHkyPSIyMyJzdHlsZT0ic3Ryb2tlOiNmZmUxZTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjQiIHgyPSIyMCIgeTI9IjI0InN0eWxlPSJzdHJva2U6I2ZmZGZkZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUic3R5bGU9InN0cm9rZTojZmZkZWRlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI2IiB4Mj0iMjAiIHkyPSIyNiJzdHlsZT0ic3Ryb2tlOiNmZmRkZGQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjciIHgyPSIyMCIgeTI9IjI3InN0eWxlPSJzdHJva2U6I2ZmZGNkYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyOCIgeDI9IjIwIiB5Mj0iMjgic3R5bGU9InN0cm9rZTojZmZkYWRhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI5IiB4Mj0iMjAiIHkyPSIyOSJzdHlsZT0ic3Ryb2tlOiNmZmQ5ZDk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzAiIHgyPSIyMCIgeTI9IjMwInN0eWxlPSJzdHJva2U6I2ZmZDhkODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMSIgeDI9IjIwIiB5Mj0iMzEic3R5bGU9InN0cm9rZTojZmZkN2Q3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMyIiB4Mj0iMjAiIHkyPSIzMiJzdHlsZT0ic3Ryb2tlOiNmZmQ1ZDU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzMiIHgyPSIyMCIgeTI9IjMzInN0eWxlPSJzdHJva2U6I2ZmZDRkNDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNCIgeDI9IjIwIiB5Mj0iMzQic3R5bGU9InN0cm9rZTojZmZkM2QzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM1IiB4Mj0iMjAiIHkyPSIzNSJzdHlsZT0ic3Ryb2tlOiNmZmQxZDE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzYiIHgyPSIyMCIgeTI9IjM2InN0eWxlPSJzdHJva2U6I2ZmZDBkMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNiIgeDI9IjIwIiB5Mj0iMzYic3R5bGU9InN0cm9rZTojZmZjY2NjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM4IiB4Mj0iMjAiIHkyPSIzOCJzdHlsZT0ic3Ryb2tlOiNmZmNiY2I7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzkiIHgyPSIyMCIgeTI9IjM5InN0eWxlPSJzdHJva2U6I2ZmY2FjYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MCIgeDI9IjIwIiB5Mj0iNDAic3R5bGU9InN0cm9rZTojZmZjOGM4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQxIiB4Mj0iMjAiIHkyPSI0MSJzdHlsZT0ic3Ryb2tlOiNmZmM3Yzc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDIiIHgyPSIyMCIgeTI9IjQyInN0eWxlPSJzdHJva2U6I2ZmYzZjNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MyIgeDI9IjIwIiB5Mj0iNDMic3R5bGU9InN0cm9rZTojZmZjNWM1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ0IiB4Mj0iMjAiIHkyPSI0NCJzdHlsZT0ic3Ryb2tlOiNmZmMzYzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDUiIHgyPSIyMCIgeTI9IjQ1InN0eWxlPSJzdHJva2U6I2ZmYzJjMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NiIgeDI9IjIwIiB5Mj0iNDYic3R5bGU9InN0cm9rZTojZmZjMWMxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ3IiB4Mj0iMjAiIHkyPSI0NyJzdHlsZT0ic3Ryb2tlOiNmZmJmYmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDgiIHgyPSIyMCIgeTI9IjQ4InN0eWxlPSJzdHJva2U6I2ZmYmViZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0OSIgeDI9IjIwIiB5Mj0iNDkic3R5bGU9InN0cm9rZTojZmZiZGJkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUwIiB4Mj0iMjAiIHkyPSI1MCJzdHlsZT0ic3Ryb2tlOiNmZmJjYmM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTEiIHgyPSIyMCIgeTI9IjUxInN0eWxlPSJzdHJva2U6I2ZmYmFiYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MiIgeDI9IjIwIiB5Mj0iNTIic3R5bGU9InN0cm9rZTojZmZiOWI5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUzIiB4Mj0iMjAiIHkyPSI1MyJzdHlsZT0ic3Ryb2tlOiNmZmI4Yjg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTQiIHgyPSIyMCIgeTI9IjU0InN0eWxlPSJzdHJva2U6I2ZmYjdiNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NCIgeDI9IjIwIiB5Mj0iNTQic3R5bGU9InN0cm9rZTojZmZiM2IzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU2IiB4Mj0iMjAiIHkyPSI1NiJzdHlsZT0ic3Ryb2tlOiNmZmIxYjE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTciIHgyPSIyMCIgeTI9IjU3InN0eWxlPSJzdHJva2U6I2ZmYjBiMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1OCIgeDI9IjIwIiB5Mj0iNTgic3R5bGU9InN0cm9rZTojZmZhZmFmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU5IiB4Mj0iMjAiIHkyPSI1OSJzdHlsZT0ic3Ryb2tlOiNmZmFlYWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjAiIHgyPSIyMCIgeTI9IjYwInN0eWxlPSJzdHJva2U6I2ZmYWNhYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MSIgeDI9IjIwIiB5Mj0iNjEic3R5bGU9InN0cm9rZTojZmZhYmFiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYyIiB4Mj0iMjAiIHkyPSI2MiJzdHlsZT0ic3Ryb2tlOiNmZmFhYWE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjMiIHgyPSIyMCIgeTI9IjYzInN0eWxlPSJzdHJva2U6I2ZmYThhODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NCIgeDI9IjIwIiB5Mj0iNjQic3R5bGU9InN0cm9rZTojZmZhN2E3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY1IiB4Mj0iMjAiIHkyPSI2NSJzdHlsZT0ic3Ryb2tlOiNmZmE2YTY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjYiIHgyPSIyMCIgeTI9IjY2InN0eWxlPSJzdHJva2U6I2ZmYTVhNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NyIgeDI9IjIwIiB5Mj0iNjcic3R5bGU9InN0cm9rZTojZmZhM2EzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY4IiB4Mj0iMjAiIHkyPSI2OCJzdHlsZT0ic3Ryb2tlOiNmZmEyYTI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjkiIHgyPSIyMCIgeTI9IjY5InN0eWxlPSJzdHJva2U6I2ZmYTFhMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MCIgeDI9IjIwIiB5Mj0iNzAic3R5bGU9InN0cm9rZTojZmY5ZjlmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcxIiB4Mj0iMjAiIHkyPSI3MSJzdHlsZT0ic3Ryb2tlOiNmZjllOWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzIiIHgyPSIyMCIgeTI9IjcyInN0eWxlPSJzdHJva2U6I2ZmOWQ5ZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MiIgeDI9IjIwIiB5Mj0iNzIic3R5bGU9InN0cm9rZTojZmY5OTk5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc0IiB4Mj0iMjAiIHkyPSI3NCJzdHlsZT0ic3Ryb2tlOiNmZjk4OTg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzUiIHgyPSIyMCIgeTI9Ijc1InN0eWxlPSJzdHJva2U6I2ZmOTc5NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NiIgeDI9IjIwIiB5Mj0iNzYic3R5bGU9InN0cm9rZTojZmY5NTk1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc3IiB4Mj0iMjAiIHkyPSI3NyJzdHlsZT0ic3Ryb2tlOiNmZjk0OTQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzgiIHgyPSIyMCIgeTI9Ijc4InN0eWxlPSJzdHJva2U6I2ZmOTM5MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3OSIgeDI9IjIwIiB5Mj0iNzkic3R5bGU9InN0cm9rZTojZmY5MTkxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgwIiB4Mj0iMjAiIHkyPSI4MCJzdHlsZT0ic3Ryb2tlOiNmZjkwOTA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODEiIHgyPSIyMCIgeTI9IjgxInN0eWxlPSJzdHJva2U6I2ZmOGY4ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MiIgeDI9IjIwIiB5Mj0iODIic3R5bGU9InN0cm9rZTojZmY4ZThlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgzIiB4Mj0iMjAiIHkyPSI4MyJzdHlsZT0ic3Ryb2tlOiNmZjhjOGM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODQiIHgyPSIyMCIgeTI9Ijg0InN0eWxlPSJzdHJva2U6I2ZmOGI4YjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NSIgeDI9IjIwIiB5Mj0iODUic3R5bGU9InN0cm9rZTojZmY4YThhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg2IiB4Mj0iMjAiIHkyPSI4NiJzdHlsZT0ic3Ryb2tlOiNmZjg4ODg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODciIHgyPSIyMCIgeTI9Ijg3InN0eWxlPSJzdHJva2U6I2ZmODc4NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4OCIgeDI9IjIwIiB5Mj0iODgic3R5bGU9InN0cm9rZTojZmY4Njg2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg5IiB4Mj0iMjAiIHkyPSI4OSJzdHlsZT0ic3Ryb2tlOiNmZjg1ODU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTAiIHgyPSIyMCIgeTI9IjkwInN0eWxlPSJzdHJva2U6I2ZmODM4MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MCIgeDI9IjIwIiB5Mj0iOTAic3R5bGU9InN0cm9rZTojZmY3ZjdmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkyIiB4Mj0iMjAiIHkyPSI5MiJzdHlsZT0ic3Ryb2tlOiNmZjdlN2U7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTMiIHgyPSIyMCIgeTI9IjkzInN0eWxlPSJzdHJva2U6I2ZmN2Q3ZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NCIgeDI9IjIwIiB5Mj0iOTQic3R5bGU9InN0cm9rZTojZmY3YzdjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk1IiB4Mj0iMjAiIHkyPSI5NSJzdHlsZT0ic3Ryb2tlOiNmZjdhN2E7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTYiIHgyPSIyMCIgeTI9Ijk2InN0eWxlPSJzdHJva2U6I2ZmNzk3OTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NyIgeDI9IjIwIiB5Mj0iOTcic3R5bGU9InN0cm9rZTojZmY3ODc4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk4IiB4Mj0iMjAiIHkyPSI5OCJzdHlsZT0ic3Ryb2tlOiNmZjc3Nzc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTkiIHgyPSIyMCIgeTI9Ijk5InN0eWxlPSJzdHJva2U6I2ZmNzU3NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDAiIHgyPSIyMCIgeTI9IjEwMCJzdHlsZT0ic3Ryb2tlOiNmZjc0NzQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAxIiB4Mj0iMjAiIHkyPSIxMDEic3R5bGU9InN0cm9rZTojZmY3MzczO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMiIgeDI9IjIwIiB5Mj0iMTAyInN0eWxlPSJzdHJva2U6I2ZmNzE3MTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDMiIHgyPSIyMCIgeTI9IjEwMyJzdHlsZT0ic3Ryb2tlOiNmZjcwNzA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA0IiB4Mj0iMjAiIHkyPSIxMDQic3R5bGU9InN0cm9rZTojZmY2ZjZmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwNSIgeDI9IjIwIiB5Mj0iMTA1InN0eWxlPSJzdHJva2U6I2ZmNmU2ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDYiIHgyPSIyMCIgeTI9IjEwNiJzdHlsZT0ic3Ryb2tlOiNmZjZjNmM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA3IiB4Mj0iMjAiIHkyPSIxMDcic3R5bGU9InN0cm9rZTojZmY2YjZiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwOCIgeDI9IjIwIiB5Mj0iMTA4InN0eWxlPSJzdHJva2U6I2ZmNmE2YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDgiIHgyPSIyMCIgeTI9IjEwOCJzdHlsZT0ic3Ryb2tlOiNmZjY2NjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEwIiB4Mj0iMjAiIHkyPSIxMTAic3R5bGU9InN0cm9rZTojZmY2NTY1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExMSIgeDI9IjIwIiB5Mj0iMTExInN0eWxlPSJzdHJva2U6I2ZmNjM2MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTIiIHgyPSIyMCIgeTI9IjExMiJzdHlsZT0ic3Ryb2tlOiNmZjYyNjI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEzIiB4Mj0iMjAiIHkyPSIxMTMic3R5bGU9InN0cm9rZTojZmY2MTYxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNCIgeDI9IjIwIiB5Mj0iMTE0InN0eWxlPSJzdHJva2U6I2ZmNWY1ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTUiIHgyPSIyMCIgeTI9IjExNSJzdHlsZT0ic3Ryb2tlOiNmZjVlNWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE2IiB4Mj0iMjAiIHkyPSIxMTYic3R5bGU9InN0cm9rZTojZmY1ZDVkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNyIgeDI9IjIwIiB5Mj0iMTE3InN0eWxlPSJzdHJva2U6I2ZmNWM1YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTgiIHgyPSIyMCIgeTI9IjExOCJzdHlsZT0ic3Ryb2tlOiNmZjVhNWE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE5IiB4Mj0iMjAiIHkyPSIxMTkic3R5bGU9InN0cm9rZTojZmY1OTU5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMCIgeDI9IjIwIiB5Mj0iMTIwInN0eWxlPSJzdHJva2U6I2ZmNTg1ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjEiIHgyPSIyMCIgeTI9IjEyMSJzdHlsZT0ic3Ryb2tlOiNmZjU3NTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIyIiB4Mj0iMjAiIHkyPSIxMjIic3R5bGU9InN0cm9rZTojZmY1NTU1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMyIgeDI9IjIwIiB5Mj0iMTIzInN0eWxlPSJzdHJva2U6I2ZmNTQ1NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjQiIHgyPSIyMCIgeTI9IjEyNCJzdHlsZT0ic3Ryb2tlOiNmZjUzNTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI1IiB4Mj0iMjAiIHkyPSIxMjUic3R5bGU9InN0cm9rZTojZmY1MTUxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNiIgeDI9IjIwIiB5Mj0iMTI2InN0eWxlPSJzdHJva2U6I2ZmNTA1MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjYiIHgyPSIyMCIgeTI9IjEyNiJzdHlsZT0ic3Ryb2tlOiNmZjRjNGM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI4IiB4Mj0iMjAiIHkyPSIxMjgic3R5bGU9InN0cm9rZTojZmY0YjRiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyOSIgeDI9IjIwIiB5Mj0iMTI5InN0eWxlPSJzdHJva2U6I2ZmNGE0YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzAiIHgyPSIyMCIgeTI9IjEzMCJzdHlsZT0ic3Ryb2tlOiNmZjQ4NDg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMxIiB4Mj0iMjAiIHkyPSIxMzEic3R5bGU9InN0cm9rZTojZmY0NzQ3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMiIgeDI9IjIwIiB5Mj0iMTMyInN0eWxlPSJzdHJva2U6I2ZmNDY0NjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzMiIHgyPSIyMCIgeTI9IjEzMyJzdHlsZT0ic3Ryb2tlOiNmZjQ1NDU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM0IiB4Mj0iMjAiIHkyPSIxMzQic3R5bGU9InN0cm9rZTojZmY0MzQzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzNSIgeDI9IjIwIiB5Mj0iMTM1InN0eWxlPSJzdHJva2U6I2ZmNDI0MjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzYiIHgyPSIyMCIgeTI9IjEzNiJzdHlsZT0ic3Ryb2tlOiNmZjQxNDE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM3IiB4Mj0iMjAiIHkyPSIxMzcic3R5bGU9InN0cm9rZTojZmYzZjNmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzOCIgeDI9IjIwIiB5Mj0iMTM4InN0eWxlPSJzdHJva2U6I2ZmM2UzZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzkiIHgyPSIyMCIgeTI9IjEzOSJzdHlsZT0ic3Ryb2tlOiNmZjNkM2Q7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQwIiB4Mj0iMjAiIHkyPSIxNDAic3R5bGU9InN0cm9rZTojZmYzYzNjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0MSIgeDI9IjIwIiB5Mj0iMTQxInN0eWxlPSJzdHJva2U6I2ZmM2EzYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDIiIHgyPSIyMCIgeTI9IjE0MiJzdHlsZT0ic3Ryb2tlOiNmZjM5Mzk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQzIiB4Mj0iMjAiIHkyPSIxNDMic3R5bGU9InN0cm9rZTojZmYzODM4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NCIgeDI9IjIwIiB5Mj0iMTQ0InN0eWxlPSJzdHJva2U6I2ZmMzczNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDQiIHgyPSIyMCIgeTI9IjE0NCJzdHlsZT0ic3Ryb2tlOiNmZjMzMzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ2IiB4Mj0iMjAiIHkyPSIxNDYic3R5bGU9InN0cm9rZTojZmYzMTMxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NyIgeDI9IjIwIiB5Mj0iMTQ3InN0eWxlPSJzdHJva2U6I2ZmMzAzMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDgiIHgyPSIyMCIgeTI9IjE0OCJzdHlsZT0ic3Ryb2tlOiNmZjJmMmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ5IiB4Mj0iMjAiIHkyPSIxNDkic3R5bGU9InN0cm9rZTojZmYyZTJlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MCIgeDI9IjIwIiB5Mj0iMTUwInN0eWxlPSJzdHJva2U6I2ZmMmMyYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTEiIHgyPSIyMCIgeTI9IjE1MSJzdHlsZT0ic3Ryb2tlOiNmZjJiMmI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUyIiB4Mj0iMjAiIHkyPSIxNTIic3R5bGU9InN0cm9rZTojZmYyYTJhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MyIgeDI9IjIwIiB5Mj0iMTUzInN0eWxlPSJzdHJva2U6I2ZmMjgyODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTQiIHgyPSIyMCIgeTI9IjE1NCJzdHlsZT0ic3Ryb2tlOiNmZjI3Mjc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU1IiB4Mj0iMjAiIHkyPSIxNTUic3R5bGU9InN0cm9rZTojZmYyNjI2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NiIgeDI9IjIwIiB5Mj0iMTU2InN0eWxlPSJzdHJva2U6I2ZmMjUyNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTciIHgyPSIyMCIgeTI9IjE1NyJzdHlsZT0ic3Ryb2tlOiNmZjIzMjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU4IiB4Mj0iMjAiIHkyPSIxNTgic3R5bGU9InN0cm9rZTojZmYyMjIyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1OSIgeDI9IjIwIiB5Mj0iMTU5InN0eWxlPSJzdHJva2U6I2ZmMjEyMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjAiIHgyPSIyMCIgeTI9IjE2MCJzdHlsZT0ic3Ryb2tlOiNmZjFmMWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYxIiB4Mj0iMjAiIHkyPSIxNjEic3R5bGU9InN0cm9rZTojZmYxZTFlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MiIgeDI9IjIwIiB5Mj0iMTYyInN0eWxlPSJzdHJva2U6I2ZmMWQxZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjIiIHgyPSIyMCIgeTI9IjE2MiJzdHlsZT0ic3Ryb2tlOiNmZjE5MTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjwvc3ZnPjxzdmcgaGVpZ2h0PSIxNjMiIHdpZHRoPSI1MCI+PHRleHQgeD0iNSIgeT0iMTkiIGR4PSIwIiBkeT0iMGV4Ij4tIDUwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjM3IiBkeD0iMCIgZHk9IjBleCI+LSAxMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iNTUiIGR4PSIwIiBkeT0iMGV4Ij4tIDE1MDwvdGV4dD48dGV4dCB4PSI1IiB5PSI3MyIgZHg9IjAiIGR5PSIwZXgiPi0gMjAwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjkxIiBkeD0iMCIgZHk9IjBleCI+LSAyNTA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTA5IiBkeD0iMCIgZHk9IjBleCI+LSAzMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTI3IiBkeD0iMCIgZHk9IjBleCI+LSAzNTA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTQ1IiBkeD0iMCIgZHk9IjBleCI+LSA0MDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTYzIiBkeD0iMCIgZHk9IjBleCI+LSA0NTA8L3RleHQ+PC9zdmc+CgogIDwvdWw+CjwvZGl2Pgo8L2Rpdj4KCjwvYm9keT4KPC9odG1sPgoKPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4KICAubWFwbGVnZW5kIC5sZWdlbmQtdGl0bGUgewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiA5MCU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIHsKICAgIG1hcmdpbjogMDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIHBhZGRpbmc6IDA7CiAgICBmbG9hdDogbGVmdDsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIGxpIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICB9CiAgLm1hcGxlZ2VuZCB1bC5sZWdlbmQtbGFiZWxzIGxpIHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmbG9hdDogbGVmdDsKICAgIGhlaWdodDogMTZweDsKICAgIHdpZHRoOiAzMHB4OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIAogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgIAogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zb3VyY2UgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBjb2xvcjogIzc3NzsKICAgIGNsZWFyOiBib3RoOwogICAgfQogIC5tYXBsZWdlbmQgYSB7CiAgICBjb2xvcjogIzc3NzsKICAgIH0KPC9zdHlsZT4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwXzY4Yjg4MGRlYzdjMzRmMjc4YTU5YmI3MGMxZDhiOWRiID0gTC5tYXAoCiAgICAgICAgJ21hcF82OGI4ODBkZWM3YzM0ZjI3OGE1OWJiNzBjMWQ4YjlkYicsIHsKICAgICAgICBjZW50ZXI6IFs1MCwgMF0sCiAgICAgICAgem9vbTogNCwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF82OGI4ODBkZWM3YzM0ZjI3OGE1OWJiNzBjMWQ4YjlkYik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl9iZDZiMDI3NTNmYjQ0YjYxOTc3YzljYzZmZmY0ZDJkYiA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfNjhiODgwZGVjN2MzNGYyNzhhNTliYjcwYzFkOGI5ZGIpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2Y5ZDgwNmMyOGVjNjQ0OGI5NzVhZWQ4NGE1OGMyNDk1ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF82OGI4ODBkZWM3YzM0ZjI3OGE1OWJiNzBjMWQ4YjlkYik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzc3NTIyZjk3ODE5NDJmZTg4NTMzNmM0MTg2YmY2MTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjlkODA2YzI4ZWM2NDQ4Yjk3NWFlZDg0YTU4YzI0OTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MmI0YjdmNzNlNjU0YzY4YTE3MWM5MjA4Mjk5YmE1NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU4LjU1LCAyNS44Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y5ZDgwNmMyOGVjNjQ0OGI5NzVhZWQ4NGE1OGMyNDk1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Y2NTlhY2ZjZTdiNDJiOGFmNTdjOTkwZTk2ZTI5NzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS45MiwgMTAuNzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mOWQ4MDZjMjhlYzY0NDhiOTc1YWVkODRhNThjMjQ5NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkMWRhNTAzNmExNzQzMDFhNGI1NDZjMmRkYzUzNmJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y5ZDgwNmMyOGVjNjQ0OGI5NzVhZWQ4NGE1OGMyNDk1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTc3NGZmZWRmY2Y1NGE0OGFjMmEyN2UzMzg3N2MzMjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjlkODA2YzI4ZWM2NDQ4Yjk3NWFlZDg0YTU4YzI0OTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZThkMmNiNGNjOTc0MWI5OTA5NWJmOGNhMjk1MjBkMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjA0NjQsIDEyLjY0ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mOWQ4MDZjMjhlYzY0NDhiOTc1YWVkODRhNThjMjQ5NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRlNmNhMjk4YTdjYzQ2YjBiZTFhMDc3Y2EzMmYwMTdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y5ZDgwNmMyOGVjNjQ0OGI5NzVhZWQ4NGE1OGMyNDk1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjI0ZTdhNWM4YTJhNGNiZjkzM2FlNGQ4Y2E4MTEyNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mOWQ4MDZjMjhlYzY0NDhiOTc1YWVkODRhNThjMjQ5NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliOWUzZWY3ODhhOTRiZTc5NzU5NDhlNWZjNDU2Yjc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgLTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y5ZDgwNmMyOGVjNjQ0OGI5NzVhZWQ4NGE1OGMyNDk1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGE3NjdjODg2MTZmNDYwYmEyNTdlOGU0NWQ2NDdkNzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40NDE0LCAtMS4xMTc4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y5ZDgwNmMyOGVjNjQ0OGI5NzVhZWQ4NGE1OGMyNDk1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzU4MGQ5M2E4ZmM3NGM0MDk3Yzk1MDZiNDk1ZWYwZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjlkODA2YzI4ZWM2NDQ4Yjk3NWFlZDg0YTU4YzI0OTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGRlMWJkZjAzMmM5NDFkN2IzYTNhMmYxNmIzZWNjMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTNiNThhZmNmNjA3NDc5ODlmZDkzMDJkOWY3M2ZkMjEgPSAkKGA8ZGl2IGlkPSJodG1sX2EzYjU4YWZjZjYwNzQ3OTg5ZmQ5MzAyZDlmNzNmZDIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXJpczEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXJpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGRlMWJkZjAzMmM5NDFkN2IzYTNhMmYxNmIzZWNjMTQuc2V0Q29udGVudChodG1sX2EzYjU4YWZjZjYwNzQ3OTg5ZmQ5MzAyZDlmNzNmZDIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM1ODBkOTNhOGZjNzRjNDA5N2M5NTA2YjQ5NWVmMGQyLmJpbmRQb3B1cChwb3B1cF9kZGUxYmRmMDMyYzk0MWQ3YjNhM2EyZjE2YjNlY2MxNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODZiNDE0ZWYzMmI2NDZmMjlhYzY5YTgwNmQzMThjYzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OC41NSwgMjUuODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mOWQ4MDZjMjhlYzY0NDhiOTc1YWVkODRhNThjMjQ5NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NDY0ZWJjMDVlY2U0ZTc4ODc3ZjI5MjdiOTQ4ZWQ4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YmYzYzc0ZjllMTc0NWMwYmI2OWQ0MTY5MDJiMjJlMCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWJmM2M3NGY5ZTE3NDVjMGJiNjlkNDE2OTAyYjIyZTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9lc3RvMTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Fc3RvbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NDY0ZWJjMDVlY2U0ZTc4ODc3ZjI5MjdiOTQ4ZWQ4Ny5zZXRDb250ZW50KGh0bWxfOWJmM2M3NGY5ZTE3NDVjMGJiNjlkNDE2OTAyYjIyZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODZiNDE0ZWYzMmI2NDZmMjlhYzY5YTgwNmQzMThjYzAuYmluZFBvcHVwKHBvcHVwXzU0NjRlYmMwNWVjZTRlNzg4NzdmMjkyN2I5NDhlZDg3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZjhkNDhiMWViNWQ0ZWJiYjE0NGYwY2ZjZWM1YjliOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjkyLCAxMC43MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmRmZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y5ZDgwNmMyOGVjNjQ0OGI5NzVhZWQ4NGE1OGMyNDk1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4MDA2MmQxM2E2NDRjOWJhMGNmMjgzYzM4MThhOGQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5NjYyZWEyMzhjZjQxYzBhYzg5ZTY5YjY4MDc5YTdiID0gJChgPGRpdiBpZD0iaHRtbF8wOTY2MmVhMjM4Y2Y0MWMwYWM4OWU2OWI2ODA3OWE3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25vcncxMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vcndlZ2lhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lODAwNjJkMTNhNjQ0YzliYTBjZjI4M2MzODE4YThkNS5zZXRDb250ZW50KGh0bWxfMDk2NjJlYTIzOGNmNDFjMGFjODllNjliNjgwNzlhN2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGY4ZDQ4YjFlYjVkNGViYmIxNDRmMGNmY2VjNWI5YjguYmluZFBvcHVwKHBvcHVwX2U4MDA2MmQxM2E2NDRjOWJhMGNmMjgzYzM4MThhOGQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDI3YmI4NTIyYzE0YzAzYWY5MzJhYjJkYjk3NTI2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjM5MTMsIDI0LjIyNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmYzZjMiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mOWQ4MDZjMjhlYzY0NDhiOTc1YWVkODRhNThjMjQ5NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjVmMTUyOTQ4YWI0NzllYjVkOGVjNWIwYmQ3ODY0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NmE5M2VjYTIzYjc0NTE5YmU4Y2MxMDk2NjhlMjhkNCA9ICQoYDxkaXYgaWQ9Imh0bWxfODZhOTNlY2EyM2I3NDUxOWJlOGNjMTA5NjY4ZTI4ZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9yb21hMTMyNyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Sb21hbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMjVmMTUyOTQ4YWI0NzllYjVkOGVjNWIwYmQ3ODY0Yy5zZXRDb250ZW50KGh0bWxfODZhOTNlY2EyM2I3NDUxOWJlOGNjMTA5NjY4ZTI4ZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTAyN2JiODUyMmMxNGMwM2FmOTMyYWIyZGI5NzUyNmYuYmluZFBvcHVwKHBvcHVwX2MyNWYxNTI5NDhhYjQ3OWViNWQ4ZWM1YjBiZDc4NjRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMDI4NGRmZWI3MDM0MWY5YWE5MTE5ODE1OGM3ODllZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmU5ZTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mOWQ4MDZjMjhlYzY0NDhiOTc1YWVkODRhNThjMjQ5NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZGQ4ZjJlMzgxYjc0ZmU4YmNlN2ZjMTE1NmNjYTExMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Njc4YjA0OGRhYmI0MTg5OWQ4NTEyMjEwMDJlMGExNCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTY3OGIwNDhkYWJiNDE4OTlkODUxMjIxMDAyZTBhMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wb2xpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qb2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGRkOGYyZTM4MWI3NGZlOGJjZTdmYzExNTZjY2ExMTAuc2V0Q29udGVudChodG1sXzk2NzhiMDQ4ZGFiYjQxODk5ZDg1MTIyMTAwMmUwYTE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwMjg0ZGZlYjcwMzQxZjlhYTkxMTk4MTU4Yzc4OWVkLmJpbmRQb3B1cChwb3B1cF84ZGQ4ZjJlMzgxYjc0ZmU4YmNlN2ZjMTE1NmNjYTExMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjRkMWNlYzU0NTE0NDU3MTg3NzNhMWU3N2NjMjlhYmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wNDY0LCAxMi42NDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMGUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjlkODA2YzI4ZWM2NDQ4Yjk3NWFlZDg0YTU4YzI0OTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWFlMGUzZjYzOTMxNGQ4M2I4NTY0NmY4NTYwZTNiYjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTM3MjZjNDhmYzZiNDE4Y2E2OGUwZGIwZDg0ZjVjMjMgPSAkKGA8ZGl2IGlkPSJodG1sXzkzNzI2YzQ4ZmM2YjQxOGNhNjhlMGRiMGQ4NGY1YzIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXRhbDEyODIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXRhbGlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYWUwZTNmNjM5MzE0ZDgzYjg1NjQ2Zjg1NjBlM2JiMi5zZXRDb250ZW50KGh0bWxfOTM3MjZjNDhmYzZiNDE4Y2E2OGUwZGIwZDg0ZjVjMjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjRkMWNlYzU0NTE0NDU3MTg3NzNhMWU3N2NjMjlhYmYuYmluZFBvcHVwKHBvcHVwX2VhZTBlM2Y2MzkzMTRkODNiODU2NDZmODU2MGUzYmIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNTY3M2U2ZTczOWM0ZDVhYjdmMTdhMDA4MjIyMGQ5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmQ4ZDgiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mOWQ4MDZjMjhlYzY0NDhiOTc1YWVkODRhNThjMjQ5NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOGZkODFkYTc0YjQ0ZjBkOTI0ODNkMjA0ZGJlM2E3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNzhiYzg4ZWM2YTk0OTk2OTkzMWEwYWRiYjFlZmY5MyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTc4YmM4OGVjNmE5NDk5Njk5MzFhMGFkYmIxZWZmOTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4ZmQ4MWRhNzRiNDRmMGQ5MjQ4M2QyMDRkYmUzYTdlLnNldENvbnRlbnQoaHRtbF9hNzhiYzg4ZWM2YTk0OTk2OTkzMWEwYWRiYjFlZmY5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNTY3M2U2ZTczOWM0ZDVhYjdmMTdhMDA4MjIyMGQ5Mi5iaW5kUG9wdXAocG9wdXBfZThmZDgxZGE3NGI0NGYwZDkyNDgzZDIwNGRiZTNhN2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3NDU2NGZlYjFmNjQxMjdhZGMxYTU1OWNjYTViOThmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMCwgMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZkOGQ4IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjlkODA2YzI4ZWM2NDQ4Yjk3NWFlZDg0YTU4YzI0OTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDI3YTdlYTUwY2I4NDJmOTgyNmNlYjlhOGRhNGZhYTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjk2ZDM0ZDQ4MTZmNDg4ZTljZmM4NjI0ODc1YzVmZWQgPSAkKGA8ZGl2IGlkPSJodG1sXzI5NmQzNGQ0ODE2ZjQ4OGU5Y2ZjODYyNDg3NWM1ZmVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RnJlbmNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQyN2E3ZWE1MGNiODQyZjk4MjZjZWI5YThkYTRmYWE3LnNldENvbnRlbnQoaHRtbF8yOTZkMzRkNDgxNmY0ODhlOWNmYzg2MjQ4NzVjNWZlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNzQ1NjRmZWIxZjY0MTI3YWRjMWE1NTljY2E1Yjk4Zi5iaW5kUG9wdXAocG9wdXBfNDI3YTdlYTUwY2I4NDJmOTgyNmNlYjlhOGRhNGZhYTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhMjU0ODI3ODU1NDQzZWE5Mjg5YzNjYWYwZjRlYjk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgLTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmM2UzZSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y5ZDgwNmMyOGVjNjQ0OGI5NzVhZWQ4NGE1OGMyNDk1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZiZmRiYzQ3ZGIyYzQ3YTFhMmZkNmE1NGU4N2M1ZWZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxOTg4YTJjYTkyYTRlMmZhYjUwNjg4MWIwZTY4MmNkID0gJChgPGRpdiBpZD0iaHRtbF83MTk4OGEyY2E5MmE0ZTJmYWI1MDY4ODFiMGU2ODJjZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjkzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVuZ2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJmZGJjNDdkYjJjNDdhMWEyZmQ2YTU0ZTg3YzVlZmEuc2V0Q29udGVudChodG1sXzcxOTg4YTJjYTkyYTRlMmZhYjUwNjg4MWIwZTY4MmNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhMjU0ODI3ODU1NDQzZWE5Mjg5YzNjYWYwZjRlYjk0LmJpbmRQb3B1cChwb3B1cF82YmZkYmM0N2RiMmM0N2ExYTJmZDZhNTRlODdjNWVmYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2QzNDY4MmZkMjY5NDdjY2IzYzNlZjAzNmMxYzM3NTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40NDE0LCAtMS4xMTc4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMWQxZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y5ZDgwNmMyOGVjNjQ0OGI5NzVhZWQ4NGE1OGMyNDk1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5NmU2YTNmZDdlMTQ1MzJiOWY0M2ZhZWQ5ZTlhNDNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkZjcwOTI3MWE2MjRkMDFiNmU2MjhiMzE0ODA2ZGI0ID0gJChgPGRpdiBpZD0iaHRtbF8xZGY3MDkyNzFhNjI0ZDAxYjZlNjI4YjMxNDgwNmRiNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjg4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNwYW5pc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzk2ZTZhM2ZkN2UxNDUzMmI5ZjQzZmFlZDllOWE0M2Muc2V0Q29udGVudChodG1sXzFkZjcwOTI3MWE2MjRkMDFiNmU2MjhiMzE0ODA2ZGI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkMzQ2ODJmZDI2OTQ3Y2NiM2MzZWYwMzZjMWMzNzUxLmJpbmRQb3B1cChwb3B1cF8zOTZlNmEzZmQ3ZTE0NTMyYjlmNDNmYWVkOWU5YTQzYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



Or you can simply set attribute ``color`` to a gradient using
``gradient`` function.

.. code:: ipython3

    m.add_features(native_speakers, colors=lingtypology.gradient(10, 'white', 'red'))
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2Y0YjM2NmFiYmJkODQzYWFhYTFkYzQ4ZWMyYzdiYTM4IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9mNGIzNjZhYmJiZDg0M2FhYWExZGM0OGVjMmM3YmEzOCIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDEiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQxJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IHJpZ2h0OiAyMHB4OyB0b3A6IDIwcHg7Jz4KCgo8ZGl2IGNsYXNzPSdsZWdlbmQtdGl0bGUnPk5hdGl2ZSBzcGVha2VycyAobWxuKTwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj4wPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZjJlZmVmO29wYWNpdHk6MC43OyI+PC9zcGFuPjE8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlOWRjZGM7b3BhY2l0eTowLjc7Ij48L3NwYW4+NTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2UzYzZjNjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj4yNDwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2UwYWRhZDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj40NDwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2UwOTE5MTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj42MjwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2UzNzE3MTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj43ODwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2U5NGY0ZjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj4zNzg8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNmMjI5Mjk7b3BhY2l0eTowLjc7Ij48L3NwYW4+NDQyPC9saT4KCiAgPC91bD4KPC9kaXY+CjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cgo8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPgogIC5tYXBsZWdlbmQgLmxlZ2VuZC10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDkwJTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgcGFkZGluZzogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgbGkgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIH0KICAubWFwbGVnZW5kIHVsLmxlZ2VuZC1sYWJlbHMgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgaGVpZ2h0OiAxNnB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgCiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNvdXJjZSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGNvbG9yOiAjNzc3OwogICAgY2xlYXI6IGJvdGg7CiAgICB9CiAgLm1hcGxlZ2VuZCBhIHsKICAgIGNvbG9yOiAjNzc3OwogICAgfQo8L3N0eWxlPgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfZjRiMzY2YWJiYmQ4NDNhYWFhMWRjNDhlYzJjN2JhMzggPSBMLm1hcCgKICAgICAgICAnbWFwX2Y0YjM2NmFiYmJkODQzYWFhYTFkYzQ4ZWMyYzdiYTM4JywgewogICAgICAgIGNlbnRlcjogWzUwLCAwXSwKICAgICAgICB6b29tOiA0LAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwX2Y0YjM2NmFiYmJkODQzYWFhYTFkYzQ4ZWMyYzdiYTM4KTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2U2ODkyNTI3NWQwODQ5YWFhYmZjMTk1ZDhlZjhmMGJhID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF9mNGIzNjZhYmJiZDg0M2FhYWExZGM0OGVjMmM3YmEzOCk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfM2IyN2VjYTE0YmY5NDNhNGE3YjliNzQ5NjUxYjcxYmUgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2Y0YjM2NmFiYmJkODQzYWFhYTFkYzQ4ZWMyYzdiYTM4KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNmFlZDhkZDQxMmI0NjZkYjg1YWU3NmQ0Zjk2NGVlYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjIxODYsIC03LjYxNTA4OTk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8zYjI3ZWNhMTRiZjk0M2E0YTdiOWI3NDk2NTFiNzFiZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA4ZmFlMzMwYzA4NDQ0YWQ4NjM2ZmE0ODg1ODZkZGEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTguNTUsIDI1LjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2IyN2VjYTE0YmY5NDNhNGE3YjliNzQ5NjUxYjcxYmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMDY4YWU3Nzc5Y2U0ZmM3YjAyYzA5NDE3ZWM2YTUwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjkyLCAxMC43MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzNiMjdlY2ExNGJmOTQzYTRhN2I5Yjc0OTY1MWI3MWJlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2FkMmI4NGE2ODY3NDViNzk3NWU3ODIwYjljMzk1NTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zOTEzLCAyNC4yMjU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2IyN2VjYTE0YmY5NDNhNGE3YjliNzQ5NjUxYjcxYmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTE4NzY4YWZlZmM0MjE5OGRkYzI4Y2Q4MzY4ZmUxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8zYjI3ZWNhMTRiZjk0M2E0YTdiOWI3NDk2NTFiNzFiZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3MzA1NTlhOTNjNzRjYzI4Nzc0YTllYzE0ZDNlYWM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDQ2NCwgMTIuNjQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzNiMjdlY2ExNGJmOTQzYTRhN2I5Yjc0OTY1MWI3MWJlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDRhZTc3ZWNhMTdlNDgxNWIwZmNlYjA4MzA5NzRiNjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2IyN2VjYTE0YmY5NDNhNGE3YjliNzQ5NjUxYjcxYmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNGU1NGViMzQyNDE0MmIxYWNlN2RhMGIzODVjOWM2NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjAsIDIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzNiMjdlY2ExNGJmOTQzYTRhN2I5Yjc0OTY1MWI3MWJlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmRlNTUzODY2MzdkNGE0ODgzMGE4MjU3NGRmOWU4ZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4wLCAtMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2IyN2VjYTE0YmY5NDNhNGE3YjliNzQ5NjUxYjcxYmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MmNiOWFmY2QxNTA0OWVhYjZiZGRiNjhhZDg5Y2E1NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQ0MTQsIC0xLjExNzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2IyN2VjYTE0YmY5NDNhNGE3YjliNzQ5NjUxYjcxYmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZjFmZTg5ZWEzY2U0NDJmYTU0ZTE4YjIyMjM2Nzg4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjIxODYsIC03LjYxNTA4OTk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8zYjI3ZWNhMTRiZjk0M2E0YTdiOWI3NDk2NTFiNzFiZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMGU3NzRjYTVlNDU0ZTJkYjI1ZmI2N2IwNmQzMzcxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NTgwNTA5ZDRlMjM0NDk0YmEyZDU1ZjBkZWI2MjIzMCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDU4MDUwOWQ0ZTIzNDQ5NGJhMmQ1NWYwZGViNjIyMzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pcmlzMTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JcmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMGU3NzRjYTVlNDU0ZTJkYjI1ZmI2N2IwNmQzMzcxOS5zZXRDb250ZW50KGh0bWxfNDU4MDUwOWQ0ZTIzNDQ5NGJhMmQ1NWYwZGViNjIyMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2YxZmU4OWVhM2NlNDQyZmE1NGUxOGIyMjIzNjc4ODIuYmluZFBvcHVwKHBvcHVwXzEwZTc3NGNhNWU0NTRlMmRiMjVmYjY3YjA2ZDMzNzE5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xODczNDMzZWNmMjE0NGUyYjE0ZmQ2ZTBkNjdhMDJhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU4LjU1LCAyNS44Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YyZWZlZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzNiMjdlY2ExNGJmOTQzYTRhN2I5Yjc0OTY1MWI3MWJlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4NzBlMWQ2ZjNmZTQwY2ZiMjc3ZGYyN2FkZmQ3OTJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhNWQ2NTJkMTc2NjQyM2RiODg1ZGVlYWY5MGIwMDM2ID0gJChgPGRpdiBpZD0iaHRtbF80YTVkNjUyZDE3NjY0MjNkYjg4NWRlZWFmOTBiMDAzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2VzdG8xMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVzdG9uaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4NzBlMWQ2ZjNmZTQwY2ZiMjc3ZGYyN2FkZmQ3OTJhLnNldENvbnRlbnQoaHRtbF80YTVkNjUyZDE3NjY0MjNkYjg4NWRlZWFmOTBiMDAzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xODczNDMzZWNmMjE0NGUyYjE0ZmQ2ZTBkNjdhMDJhYS5iaW5kUG9wdXAocG9wdXBfNTg3MGUxZDZmM2ZlNDBjZmIyNzdkZjI3YWRmZDc5MmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlMTU3MDdjZTJhNTRmNDBhYTk5MGVjNDJiZDZlOWNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuOTIsIDEwLjcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTlkY2RjIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2IyN2VjYTE0YmY5NDNhNGE3YjliNzQ5NjUxYjcxYmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODkyNjZlNjMxNGZkNGI5ODlmZGI3ZTEzN2FlZmIyNDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDg1ZjI5MzQ0NGM0NDJkMGEzZmY4Mjk5YzRlNDRkZDEgPSAkKGA8ZGl2IGlkPSJodG1sXzQ4NWYyOTM0NDRjNDQyZDBhM2ZmODI5OWM0ZTQ0ZGQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9ydzEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tm9yd2VnaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5MjY2ZTYzMTRmZDRiOTg5ZmRiN2UxMzdhZWZiMjQ4LnNldENvbnRlbnQoaHRtbF80ODVmMjkzNDQ0YzQ0MmQwYTNmZjgyOTljNGU0NGRkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZTE1NzA3Y2UyYTU0ZjQwYWE5OTBlYzQyYmQ2ZTljZi5iaW5kUG9wdXAocG9wdXBfODkyNjZlNjMxNGZkNGI5ODlmZGI3ZTEzN2FlZmIyNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjY2FlYzMzNjVhMDQ2ZTVhN2M1MDczOGQyYjMzZmUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2UzYzZjNiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzNiMjdlY2ExNGJmOTQzYTRhN2I5Yjc0OTY1MWI3MWJlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNmZWRkMzY0OWM4YzQ0MmY4M2Q3NTJiYjdmZjE1YmU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlNWE4MTE3YzQ1MTRhZmQ4OGU0OWVhMTY5N2QyOTg2ID0gJChgPGRpdiBpZD0iaHRtbF9iZTVhODExN2M0NTE0YWZkODhlNDllYTE2OTdkMjk4NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3JvbWExMzI3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJvbWFuaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmZWRkMzY0OWM4YzQ0MmY4M2Q3NTJiYjdmZjE1YmU4LnNldENvbnRlbnQoaHRtbF9iZTVhODExN2M0NTE0YWZkODhlNDllYTE2OTdkMjk4Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kY2NhZWMzMzY1YTA0NmU1YTdjNTA3MzhkMmIzM2ZlMS5iaW5kUG9wdXAocG9wdXBfM2ZlZGQzNjQ5YzhjNDQyZjgzZDc1MmJiN2ZmMTViZTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3NDM1OTU0ZTlkODRlYTI5NDc5ZDBlM2FjZjQwNjdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2UwYWRhZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzNiMjdlY2ExNGJmOTQzYTRhN2I5Yjc0OTY1MWI3MWJlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhZDU0NmZlMmI5ODRmZGFiNzRiZTZhZWIyZjk4ZTYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUyZjEzNTg3ZDY2NzQxNDA5NWMyNjBiZTQ1OWE3MzgwID0gJChgPGRpdiBpZD0iaHRtbF81MmYxMzU4N2Q2Njc0MTQwOTVjMjYwYmU0NTlhNzM4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvbGkxMjYwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYWQ1NDZmZTJiOTg0ZmRhYjc0YmU2YWViMmY5OGU2Mi5zZXRDb250ZW50KGh0bWxfNTJmMTM1ODdkNjY3NDE0MDk1YzI2MGJlNDU5YTczODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTc0MzU5NTRlOWQ4NGVhMjk0NzlkMGUzYWNmNDA2N2UuYmluZFBvcHVwKHBvcHVwX2ZhZDU0NmZlMmI5ODRmZGFiNzRiZTZhZWIyZjk4ZTYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NDBmYzUxOWZlNzk0ODAzOTUxNWEzOTUzZThjYjIwOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjA0NjQsIDEyLjY0ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlMDkxOTEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8zYjI3ZWNhMTRiZjk0M2E0YTdiOWI3NDk2NTFiNzFiZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODY4ZGY2YzRlMDU0NmJhOTQxNTAxN2Q3MTRiZTI2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYjM2YWE4Yzk0Mjc0MjllYTA1NWViNmRlM2ZkYzk1ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWIzNmFhOGM5NDI3NDI5ZWEwNTVlYjZkZTNmZGM5NWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pdGFsMTI4MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JdGFsaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4NjhkZjZjNGUwNTQ2YmE5NDE1MDE3ZDcxNGJlMjZmLnNldENvbnRlbnQoaHRtbF8xYjM2YWE4Yzk0Mjc0MjllYTA1NWViNmRlM2ZkYzk1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NDBmYzUxOWZlNzk0ODAzOTUxNWEzOTUzZThjYjIwOS5iaW5kUG9wdXAocG9wdXBfYjg2OGRmNmM0ZTA1NDZiYTk0MTUwMTdkNzE0YmUyNmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IwNGRjYjNlZWZiMzQ0MzZhZDEwODdhYzg5NDQ0N2Q2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2UzNzE3MSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzNiMjdlY2ExNGJmOTQzYTRhN2I5Yjc0OTY1MWI3MWJlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxN2I2MDVmZDA3YTRhYzE5M2YzZTZiNDQ1YmQ2M2ZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5ZTVjNjRiMjIzZTQzNTJiNzAyY2NkY2FhN2Q0NzljID0gJChgPGRpdiBpZD0iaHRtbF9mOWU1YzY0YjIyM2U0MzUyYjcwMmNjZGNhYTdkNDc5YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1cmtpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE3YjYwNWZkMDdhNGFjMTkzZjNlNmI0NDViZDYzZmUuc2V0Q29udGVudChodG1sX2Y5ZTVjNjRiMjIzZTQzNTJiNzAyY2NkY2FhN2Q0NzljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IwNGRjYjNlZWZiMzQ0MzZhZDEwODdhYzg5NDQ0N2Q2LmJpbmRQb3B1cChwb3B1cF9jMTdiNjA1ZmQwN2E0YWMxOTNmM2U2YjQ0NWJkNjNmZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWVhZGE1Y2YyNmVmNDA4YzhiMDk1M2FhNGZiYTJhYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlMzcxNzEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8zYjI3ZWNhMTRiZjk0M2E0YTdiOWI3NDk2NTFiNzFiZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzMyMmRhYmY2NzU0ODRhYjQ4ODE3MmM0ZGIzYmFmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MGZlM2Y1ZDk5YTk0ZjEwOTFiYTEyOGM5NjhhZDg3OSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDBmZTNmNWQ5OWE5NGYxMDkxYmExMjhjOTY4YWQ4NzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zdGFuMTI5MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GcmVuY2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWMzMjJkYWJmNjc1NDg0YWI0ODgxNzJjNGRiM2JhZmMuc2V0Q29udGVudChodG1sXzQwZmUzZjVkOTlhOTRmMTA5MWJhMTI4Yzk2OGFkODc5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVlYWRhNWNmMjZlZjQwOGM4YjA5NTNhYTRmYmEyYWEwLmJpbmRQb3B1cChwb3B1cF8xYzMyMmRhYmY2NzU0ODRhYjQ4ODE3MmM0ZGIzYmFmYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTYyNWY4ZjNmYWZjNDMxODgxZjI2M2E3MDk4ZjZiOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4wLCAtMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTk0ZjRmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2IyN2VjYTE0YmY5NDNhNGE3YjliNzQ5NjUxYjcxYmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWU2NWZkZmIwZWFlNDA1ZTk5MmYyMTc1NzRlNWVhOWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI1ZWFkOTllM2ZjNGRiN2JjMmVjMDk2Nzg5NThkMGUgPSAkKGA8ZGl2IGlkPSJodG1sXzYyNWVhZDk5ZTNmYzRkYjdiYzJlYzA5Njc4OTU4ZDBlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RW5nbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZTY1ZmRmYjBlYWU0MDVlOTkyZjIxNzU3NGU1ZWE5Zi5zZXRDb250ZW50KGh0bWxfNjI1ZWFkOTllM2ZjNGRiN2JjMmVjMDk2Nzg5NThkMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTYyNWY4ZjNmYWZjNDMxODgxZjI2M2E3MDk4ZjZiOWUuYmluZFBvcHVwKHBvcHVwXzFlNjVmZGZiMGVhZTQwNWU5OTJmMjE3NTc0ZTVlYTlmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNzBkNDQxYTdhMzE0NTIzYWFmOWMzNmQ4ZWJjNjAxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQ0MTQsIC0xLjExNzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjIyOTI5IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2IyN2VjYTE0YmY5NDNhNGE3YjliNzQ5NjUxYjcxYmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTY3ZGQ2NDJiMDI1NGEyYWIwMmVjODgwZTFkN2I5OGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjU5MGNkOTgwMGE0NDIwNGI1Y2NkZmViZGE4NDg1MGEgPSAkKGA8ZGl2IGlkPSJodG1sX2I1OTBjZDk4MDBhNDQyMDRiNWNjZGZlYmRhODQ4NTBhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyODgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3BhbmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNjdkZDY0MmIwMjU0YTJhYjAyZWM4ODBlMWQ3Yjk4Zi5zZXRDb250ZW50KGh0bWxfYjU5MGNkOTgwMGE0NDIwNGI1Y2NkZmViZGE4NDg1MGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzcwZDQ0MWE3YTMxNDUyM2FhZjljMzZkOGViYzYwMTAuYmluZFBvcHVwKHBvcHVwXzE2N2RkNjQyYjAyNTRhMmFiMDJlYzg4MGUxZDdiOThmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.15. Minicharts 
~~~~~~~~~~~~~~~~~

You can add minicharts to the map using ``add_minicharts`` method. Just
pass all the data.

Note, that if you are passing data as anything except for
``pandas.Series`` you should specify ``names`` parameter (e.g.
``names=('consonants', 'vowels')``).

.. code:: ipython3

    import pandas
    data = pandas.read_csv(
        'https://raw.githubusercontent.com/ropensci/lingtypology/master/database_creation/ejective_and_n_consonants.csv',
        delimiter=',',
        header=0,
    )
    data = data[data.language != 'Paraguayan Guarani']

.. code:: ipython3

    m = lingtypology.LingMap(data.language)
    m.add_minicharts(data.consonants, data.vowels)
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2Y1YmIxYmI5NTBlYzRiNmFhZTVhODFjNDY2N2E3OTZiIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9mNWJiMWJiOTUwZWM0YjZhYWU1YTgxYzQ2NjdhNzk2YiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+Y29uc29uYW50czwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzE5ZTZiNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj52b3dlbHM8L2xpPgoKCiAgPC91bD4KPC9kaXY+CjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cgo8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPgogIC5tYXBsZWdlbmQgLmxlZ2VuZC10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDkwJTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgcGFkZGluZzogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgbGkgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIH0KICAubWFwbGVnZW5kIHVsLmxlZ2VuZC1sYWJlbHMgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgaGVpZ2h0OiAxNnB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgCiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNvdXJjZSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGNvbG9yOiAjNzc3OwogICAgY2xlYXI6IGJvdGg7CiAgICB9CiAgLm1hcGxlZ2VuZCBhIHsKICAgIGNvbG9yOiAjNzc3OwogICAgfQo8L3N0eWxlPgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfZjViYjFiYjk1MGVjNGI2YWFlNWE4MWM0NjY3YTc5NmIgPSBMLm1hcCgKICAgICAgICAnbWFwX2Y1YmIxYmI5NTBlYzRiNmFhZTVhODFjNDY2N2E3OTZiJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwpMLmNvbnRyb2wuc2NhbGUoKS5hZGRUbyhtYXBfZjViYjFiYjk1MGVjNGI2YWFlNWE4MWM0NjY3YTc5NmIpOwoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfZmM0OTgyNmFjNWU1NDk1NDg0NzI0MGNhNzE2YjEwYTkgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwX2Y1YmIxYmI5NTBlYzRiNmFhZTVhODFjNDY2N2E3OTZiKTsKICAgIAogICAgICAgIHZhciBtYXJrZXJfNjJhYmEwYmZlOTk5NDhiNThiZDkwNmQ3MDYwNjlhODkgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjViYjFiYjk1MGVjNGI2YWFlNWE4MWM0NjY3YTc5NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2E1YTY4MTc1MGQ4ODRmMjg4MTc3ZTU5ZTc4ZTVhOWE0ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjg0Mzg1NCA4LjQ0NTYgMTkuNTU0OTE1IDguNjM4NzU2IDE4LjMxNTcwNSA5LjAxODY5NiBDIDE3LjA3NjQ5NiA5LjM5ODYzNSAxNS45MDA3OTYgOS45NjExMzQgMTQuODI3Mzk0IDEwLjY4NzYzMyBDIDEzLjc1Mzk5MSAxMS40MTQxMzMgMTIuNzk0ODIyIDEyLjI5NjU1NSAxMS45ODE1MzEgMTMuMzA1Nzg4IEMgMTEuMTY4MjQgMTQuMzE1MDIxIDEwLjUwOTg2OSAxNS40Mzk4NDMgMTAuMDI4MTQxIDE2LjY0MzE0MyBDIDkuNTQ2NDEyIDE3Ljg0NjQ0MyA5LjI0NjY4MSAxOS4xMTQ4NDIgOS4xMzg4MzcgMjAuNDA2NDk0IEMgOS4wMzA5OTQgMjEuNjk4MTQ1IDkuMTE2MjM1IDIyLjk5ODY4NyA5LjM5MTc1MSAyNC4yNjUyMTIgQyA5LjY2NzI2NyAyNS41MzE3MzYgMTAuMTI5OTkyIDI2Ljc1MDE2MSAxMC43NjQ2NjIgMjcuODgwMjg5IEMgMTEuMzk5MzMyIDI5LjAxMDQxNyAxMi4xOTg4ODggMzAuMDM5NjggMTMuMTM2OTUzIDMwLjkzNDEyNCBDIDE0LjA3NTAxOCAzMS44Mjg1NjcgMTUuMTQxMTYgMzIuNTc4MjQzIDE2LjMwMDIwNyAzMy4xNTg0MiBDIDE3LjQ1OTI1MyAzMy43Mzg1OTggMTguNjk4MzE1IDM0LjE0MjgyNCAxOS45NzY1MTUgMzQuMzU3NzY0IEMgMjEuMjU0NzE1IDM0LjU3MjcwNCAyMi41NTc4MzkgMzQuNTk1OTY3IDIzLjg0Mjg5NyAzNC40MjY3ODYgQyAyNS4xMjc5NTQgMzQuMjU3NjA1IDI2LjM4MDY1NCAzMy44OTc4NjEgMjcuNTU5NjcgMzMuMzU5NDIzIEMgMjguNzM4Njg2IDMyLjgyMDk4NSAyOS44MzA5MDcgMzIuMTA5ODM5IDMwLjgwMDI5OSAzMS4yNDk0NDggQyAzMS43Njk2OSAzMC4zODkwNTYgMzIuNjA1NDc0IDI5LjM4ODk4NiAzMy4yODAwNzcgMjguMjgyMjMyIEMgMzMuOTU0Njc5IDI3LjE3NTQ3NyAzNC40NjA1OTggMjUuOTc0MzQ0IDM0Ljc4MTE0MyAyNC43MTg0NiBDIDM1LjEwMTY4OSAyMy40NjI1NzYgMzUuMjMzMjk2IDIyLjE2NTkwNiAzNS4xNzE2MjMgMjAuODcxMjI4IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS4xNzE2MjMgMjAuODcxMjI4IEMgMzUuMDEyMTUyIDE3LjUyMzUwOSAzMy41Njg2NTMgMTQuMzYyNjg3IDMxLjE0MzA0NyAxMi4wNDk4NzYgQyAyOC43MTc0NDEgOS43MzcwNjYgMjUuNDkxNTE1IDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNS4xNzE2MjMgMjAuODcxMjI4IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82MmFiYTBiZmU5OTk0OGI1OGJkOTA2ZDcwNjA2OWE4OS5zZXRJY29uKGRpdl9pY29uX2E1YTY4MTc1MGQ4ODRmMjg4MTc3ZTU5ZTc4ZTVhOWE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0YTc0MzIxNWQzMTQ1MTU4Y2I0MWJhOGUzOWNhNmRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0ZWNmZjYxNWYwMjQ4MzhiZDcyZjJmY2I0MjkzMGFjID0gJChgPGRpdiBpZD0iaHRtbF9kNGVjZmY2MTVmMDI0ODM4YmQ3MmYyZmNiNDI5MzBhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1cmtpc2g8L2E+PGJyPmNvbnNvbmFudHM6IDI1PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0YTc0MzIxNWQzMTQ1MTU4Y2I0MWJhOGUzOWNhNmRlLnNldENvbnRlbnQoaHRtbF9kNGVjZmY2MTVmMDI0ODM4YmQ3MmYyZmNiNDI5MzBhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYyYWJhMGJmZTk5OTQ4YjU4YmQ5MDZkNzA2MDY5YTg5LmJpbmRQb3B1cChwb3B1cF85NGE3NDMyMTVkMzE0NTE1OGNiNDFiYThlMzljYTZkZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2Q1MDU1MmFlYTFlNTQ5MjE4YzhhMDU3NzkyYTM4NWVmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNy41LCAxMjguMF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNWJiMWJiOTUwZWM0YjZhYWU1YTgxYzQ2NjdhNzk2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMjNjMzAzYTc4ZWUxNGRjOWEwMWRmNzA5MjFhOTQxZTYgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuODg2MjIxIDguNDQ1NiAxNy42NzA0MzYgOS4wMjk2MTQgMTUuNzA5NDUzIDEwLjE0MDQ5NyBDIDEzLjc0ODQ3IDExLjI1MTM4IDEyLjEwODQwMyAxMi44NTE2OCAxMC45NDk3MjkgMTQuNzg0ODEgQyA5Ljc5MTA1NiAxNi43MTc5NCA5LjE1Mjg0IDE4LjkxODcyNiA5LjA5NzUyOSAyMS4xNzE4MjUgQyA5LjA0MjIxOSAyMy40MjQ5MjUgOS41NzE2NzkgMjUuNjU0Mzc1IDEwLjYzNDEwMiAyNy42NDIwMyBDIDExLjY5NjUyNiAyOS42Mjk2ODYgMTMuMjU2MDk0IDMxLjMwODUzMSAxNS4xNjAyMDcgMzIuNTE0Mjk4IEMgMTcuMDY0MzIgMzMuNzIwMDY0IDE5LjI0ODc4IDM0LjQxMjA5NyAyMS40OTk4NDMgMzQuNTIyNjg1IEMgMjMuNzUwOTA3IDM0LjYzMzI3MyAyNS45OTI2NzkgMzQuMTU4Njg2IDI4LjAwNTgwOSAzMy4xNDUzNjIgQyAzMC4wMTg5MzkgMzIuMTMyMDM3IDMxLjczNTU1MyAzMC42MTQxNCAzMi45ODc2ODUgMjguNzQwMTkxIEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi45ODc2ODUgMjguNzQwMTkxIEMgMzQuMzAwMTM4IDI2Ljc3NTk2NyAzNS4wNTQ3NyAyNC40OTE2NjMgMzUuMTcwNjg1IDIyLjEzMjE1NyBDIDM1LjI4NjYgMTkuNzcyNjUgMzQuNzU5NTAzIDE3LjQyNTM3OCAzMy42NDU4OTggMTUuMzQxOTcgQyAzMi41MzIyOTIgMTMuMjU4NTYxIDMwLjg3MzQ0NyAxMS41MTYyMjEgMjguODQ3MTkgMTAuMzAxNzI5IEMgMjYuODIwOTMzIDkuMDg3MjM4IDI0LjUwMjM1MiA4LjQ0NTYgMjIuMTQgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzIuOTg3Njg1IDI4Ljc0MDE5MSB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDUwNTUyYWVhMWU1NDkyMThjOGEwNTc3OTJhMzg1ZWYuc2V0SWNvbihkaXZfaWNvbl8yM2MzMDNhNzhlZTE0ZGM5YTAxZGY3MDkyMWE5NDFlNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYTU1ZmExZjNlOWY0YjgzOTRhZjVlMGJlZTIxMWVlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YWRiN2NiOGZlMzM0MmJmYTMxZTJjNzdjZTVhZDYxZiA9ICQoYDxkaXYgaWQ9Imh0bWxfN2FkYjdjYjhmZTMzNDJiZmEzMWUyYzc3Y2U1YWQ2MWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb3JlMTI4MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb3JlYW48L2E+PGJyPmNvbnNvbmFudHM6IDIxPGJyPnZvd2VsczogMTE8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYTU1ZmExZjNlOWY0YjgzOTRhZjVlMGJlZTIxMWVlYS5zZXRDb250ZW50KGh0bWxfN2FkYjdjYjhmZTMzNDJiZmEzMWUyYzc3Y2U1YWQ2MWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kNTA1NTJhZWExZTU0OTIxOGM4YTA1Nzc5MmEzODVlZi5iaW5kUG9wdXAocG9wdXBfM2E1NWZhMWYzZTlmNGI4Mzk0YWY1ZTBiZWUyMTFlZWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82YjBiNGY4YWY5M2Q0YjUzYmRiNTMwMzg0YTQ1Y2QwZSA9IEwubWFya2VyKAogICAgICAgICAgICBbLTExLjYzMDgsIDEzMC45NDg5OTk5OTk5OTk5OF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNWJiMWJiOTUwZWM0YjZhYWU1YTgxYzQ2NjdhNzk2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fNzFkZTE0MzI0NjEwNDI3YTg4YTBkNGVjNzBkNGM5ZWYgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuNjkxNjQ4IDguNDQ1NiAxOS4yNTMzNTUgOC42ODY3ODQgMTcuODg0MjI4IDkuMTU5MjQxIEMgMTYuNTE1MTAxIDkuNjMxNjk3IDE1LjIzNDE1NyAxMC4zMjg4NjQgMTQuMDk0MDM5IDExLjIyMjA4OSBDIDEyLjk1MzkyIDEyLjExNTMxNSAxMS45NzA0NjIgMTMuMTkyMTk0IDExLjE4NDA4MSAxNC40MDg0NzEgQyAxMC4zOTc3IDE1LjYyNDc0NyA5LjgxOTMxOCAxNi45NjM1MjcgOS40NzI3MDUgMTguMzY5NzkyIEMgOS4xMjYwOTEgMTkuNzc2MDU4IDkuMDE2MDYxIDIxLjIzMDI3NiA5LjE0NzEzNSAyMi42NzI2ODUgQyA5LjI3ODIwOSAyNC4xMTUwOTMgOS42NDg1NjggMjUuNTI1NjU4IDEwLjI0Mjk5IDI2Ljg0NjQxIEMgMTAuODM3NDEyIDI4LjE2NzE2MiAxMS42NDc2NDIgMjkuMzc5NzU2IDEyLjY0MDM4MiAzMC40MzQzNjEgQyAxMy42MzMxMjIgMzEuNDg4OTY1IDE0Ljc5NDU4NCAzMi4zNzA5MzEgMTYuMDc3MDM2IDMzLjA0NDAxNCBDIDE3LjM1OTQ4OCAzMy43MTcwOTYgMTguNzQ1MTE3IDM0LjE3MTk0NyAyMC4xNzY5OCAzNC4zODk4NzIgQyAyMS42MDg4NDMgMzQuNjA3Nzk4IDIzLjA2NzA1MiAzNC41ODU3NzEgMjQuNDkxNjggMzQuMzI0Njk5IEMgMjUuOTE2MzA3IDM0LjA2MzYyNiAyNy4yODc1NjcgMzMuNTY3MTMzIDI4LjU0OTEwNSAzMi44NTU2MjMgQyAyOS44MTA2NDIgMzIuMTQ0MTE0IDMwLjk0NDkzNiAzMS4yMjc0NyAzMS45MDUzNzEgMzAuMTQzMzYzIEMgMzIuODY1ODA2IDI5LjA1OTI1NiAzMy42MzkwNDIgMjcuODIyNzQzIDM0LjE5MzMwMiAyNi40ODQ2NDEgQyAzNC43NDc1NjIgMjUuMTQ2NTM4IDM1LjA3NTE0OCAyMy43MjU0MzEgMzUuMTYyNTk4IDIyLjI3OTcyMSBDIDM1LjI1MDA0NyAyMC44MzQwMTIgMzUuMDk2MTQ1IDE5LjM4Mzc4IDM0LjcwNzIxNiAxNy45ODg2MjUgQyAzNC4zMTgyODcgMTYuNTkzNDcgMzMuNjk5NzM0IDE1LjI3Mjc3IDMyLjg3Njk3NiAxNC4wODA3OTkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMyLjg3Njk3NiAxNC4wODA3OTkgQyAzMS42NzcxOTcgMTIuMzQyNjIgMzAuMDczMDg3IDEwLjkyMTUwMyAyOC4yMDI5NjQgOS45Mzk5ODYgQyAyNi4zMzI4NCA4Ljk1ODQ3IDI0LjI1MjA0NSA4LjQ0NTYgMjIuMTM5OTk5IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMyLjg3Njk3NiAxNC4wODA3OTkgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzZiMGI0ZjhhZjkzZDRiNTNiZGI1MzAzODRhNDVjZDBlLnNldEljb24oZGl2X2ljb25fNzFkZTE0MzI0NjEwNDI3YTg4YTBkNGVjNzBkNGM5ZWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGVlNjdiYzExMjVmNDFhYjgzNGVjY2YxNWY3NTRhZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWI2M2FhYzViNDJhNGQ5ZDhkZTM5ODlmOGM4MTY3NDIgPSAkKGA8ZGl2IGlkPSJodG1sXzFiNjNhYWM1YjQyYTRkOWQ4ZGUzOTg5ZjhjODE2NzQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGl3aTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGl3aTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiA0PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGVlNjdiYzExMjVmNDFhYjgzNGVjY2YxNWY3NTRhZGUuc2V0Q29udGVudChodG1sXzFiNjNhYWM1YjQyYTRkOWQ4ZGUzOTg5ZjhjODE2NzQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmIwYjRmOGFmOTNkNGI1M2JkYjUzMDM4NGE0NWNkMGUuYmluZFBvcHVwKHBvcHVwX2RlZTY3YmMxMTI1ZjQxYWI4MzRlY2NmMTVmNzU0YWRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYTllMTE0YmY5ZGI4NGZlZGI1OTU3ZDM3MmJlYzkxMTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzYuOTIwNDgsIC05Ljk2MTI4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1YmIxYmI5NTBlYzRiNmFhZTVhODFjNDY2N2E3OTZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl8wMWVkZWJkZDExMWQ0MWVmYTU2ZDk4ZmFmYmFlMDFkNSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAxOS45MTgxMjMgOC40NDU2IDE3LjczMjY0NSA5LjAxMzE5OCAxNS43OTE1NjMgMTAuMDk0MzczIEMgMTMuODUwNDgyIDExLjE3NTU0OCAxMi4yMTczOTQgMTIuNzM0ODc4IDExLjA0NzcyNyAxNC42MjM5NTYgQyA5Ljg3ODA2IDE2LjUxMzAzNCA5LjIxMDEzNSAxOC42Njk5NjcgOS4xMDc1MjEgMjAuODg5NDczIEMgOS4wMDQ5MDcgMjMuMTA4OTc5IDkuNDcwOTY2IDI1LjMxODMzOSAxMC40NjEzNDIgMjcuMzA3MjgyIEMgMTEuNDUxNzE4IDI5LjI5NjIyNCAxMi45MzM5NjIgMzAuOTk5NTg0IDE0Ljc2NzAwNSAzMi4yNTUyNDggQyAxNi42MDAwNDggMzMuNTEwOTExIDE4LjcyMzgzMyAzNC4yNzc3MzggMjAuOTM2MjMxIDM0LjQ4Mjc0NiBDIDIzLjE0ODYzIDM0LjY4Nzc1NSAyNS4zNzcxNTcgMzQuMzI0MjI5IDI3LjQwOTcxNiAzMy40MjY3NjYgQyAyOS40NDIyNzYgMzIuNTI5MzAzIDMxLjIxMjI3MyAzMS4xMjczMDcgMzIuNTUxMjUzIDI5LjM1NDIxMSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzIuNTUxMjUzIDI5LjM1NDIxMSBDIDM0LjAxMzQyNSAyNy40MTc5ODIgMzQuOTA2ODc2IDI1LjExMTcxNyAzNS4xMzA3NDcgMjIuNjk1NzY4IEMgMzUuMzU0NjE3IDIwLjI3OTgxOSAzNC45MDAxNTIgMTcuODQ4NjUxIDMzLjgxODY1NyAxNS42NzY3MTcgQyAzMi43MzcxNjIgMTMuNTA0NzgzIDMxLjA3MDkyNCAxMS42NzcwMDggMjkuMDA4MDQzIDEwLjM5OTcyNiBDIDI2Ljk0NTE2MSA5LjEyMjQ0NCAyNC41NjYyOTcgOC40NDU2IDIyLjEzOTk5OCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi41NTEyNTMgMjkuMzU0MjExIHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hOWUxMTRiZjlkYjg0ZmVkYjU5NTdkMzcyYmVjOTExMi5zZXRJY29uKGRpdl9pY29uXzAxZWRlYmRkMTExZDQxZWZhNTZkOThmYWZiYWUwMWQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2NzY4YTdkOWIwMzRiNjhiNzUzMTc0OGM0ZWI2ZTM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhMzNjMjc1ZmIyZjQ1NmRhOGQyMjAxYzM2Mzg1Zjk2ID0gJChgPGRpdiBpZD0iaHRtbF9kYTMzYzI3NWZiMmY0NTZkYThkMjIwMWMzNjM4NWY5NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xpYmUxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxpYmVyaWEgS3BlbGxlPC9hPjxicj5jb25zb25hbnRzOiAyMjxicj52b3dlbHM6IDEyPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjY3NjhhN2Q5YjAzNGI2OGI3NTMxNzQ4YzRlYjZlMzkuc2V0Q29udGVudChodG1sX2RhMzNjMjc1ZmIyZjQ1NmRhOGQyMjAxYzM2Mzg1Zjk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTllMTE0YmY5ZGI4NGZlZGI1OTU3ZDM3MmJlYzkxMTIuYmluZFBvcHVwKHBvcHVwXzI2NzY4YTdkOWIwMzRiNjhiNzUzMTc0OGM0ZWI2ZTM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZGU1Mzg2NDA4NmM5NDcxODljMDczNGRjZWI2OWU0ZmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzEyLjgxMTQsIDc1LjI2NTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjViYjFiYjk1MGVjNGI2YWFlNWE4MWM0NjY3YTc5NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzgxYmYwZWQ0ZDFmYTRmNzM4MmE2NzFmOTMwYjZiOTU4ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjkxMjYwNiA4LjQ0NTYgMTcuNzIxODgzIDkuMDE2MDIgMTUuNzc3MzM3IDEwLjEwMjMwOSBDIDEzLjgzMjc5MSAxMS4xODg1OTcgMTIuMTk4NDQ5IDEyLjc1NDk4NiAxMS4wMzA2MTEgMTQuNjUxNjc3IEMgOS44NjI3NzIgMTYuNTQ4MzY4IDkuMTk5ODg5IDE4LjcxMjkwNyA5LjEwNTM1NSAyMC45MzgyOTQgQyA5LjAxMDgyMiAyMy4xNjM2ODEgOS40ODc3NTEgMjUuMzc2NjM5IDEwLjQ5MDUzMiAyNy4zNjU1MzcgQyAxMS40OTMzMTIgMjkuMzU0NDM1IDEyLjk4ODkyNyAzMS4wNTM3ODMgMTQuODM0MzQ0IDMyLjMwMTA2NyBDIDE2LjY3OTc2MSAzMy41NDgzNTIgMTguODE0MjE3IDM0LjMwMjUwNCAyMS4wMzM1ODYgMzQuNDkxNCBDIDIzLjI1Mjk1NiAzNC42ODAyOTcgMjUuNDg0MTYyIDM0LjI5NzcxOCAyNy41MTM4MjcgMzMuMzgwMjUyIEMgMjkuNTQzNDkxIDMyLjQ2Mjc4NiAzMS4zMDQ3ODQgMzEuMDQwNjQyIDMyLjYyOTI2NyAyOS4yNDk4MjQgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMyLjYyOTI2NyAyOS4yNDk4MjQgQyAzNC4wNjU0NDUgMjcuMzA3OTgzIDM0LjkzNDU3MyAyNS4wMDQ5NDcgMzUuMTM5NCAyMi41OTg0MTQgQyAzNS4zNDQyMjcgMjAuMTkxODgxIDM0Ljg3NjgxNiAxNy43NzUwODkgMzMuNzg5NDY5IDE1LjYxODQ2NCBDIDMyLjcwMjEyMiAxMy40NjE4MzkgMzEuMDM2OTY2IDExLjY0ODkzNyAyOC45ODAzMjUgMTAuMzgyNjEyIEMgMjYuOTIzNjgzIDkuMTE2Mjg2IDI0LjU1NTIzNiA4LjQ0NTYgMjIuMTQwMDAyIDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMyLjYyOTI2NyAyOS4yNDk4MjQgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2RlNTM4NjQwODZjOTQ3MTg5YzA3MzRkY2ViNjllNGZiLnNldEljb24oZGl2X2ljb25fODFiZjBlZDRkMWZhNGY3MzgyYTY3MWY5MzBiNmI5NTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjkxNDJhMmIzMzNjNGRkMWExZjU5MDA4YWNkZWJjYTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjEwMzNmOGNlNWUyNDdhMjk1ZWQwNzZhN2MzNmU5NTcgPSAkKGA8ZGl2IGlkPSJodG1sX2IxMDMzZjhjZTVlMjQ3YTI5NWVkMDc2YTdjMzZlOTU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHVsdTEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVsdTwvYT48YnI+Y29uc29uYW50czogMjQ8YnI+dm93ZWxzOiAxMzxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y5MTQyYTJiMzMzYzRkZDFhMWY1OTAwOGFjZGViY2E3LnNldENvbnRlbnQoaHRtbF9iMTAzM2Y4Y2U1ZTI0N2EyOTVlZDA3NmE3YzM2ZTk1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RlNTM4NjQwODZjOTQ3MTg5YzA3MzRkY2ViNjllNGZiLmJpbmRQb3B1cChwb3B1cF9mOTE0MmEyYjMzM2M0ZGQxYTFmNTkwMDhhY2RlYmNhNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzAxNjdlNjc5NjRmNDRiZGE4OTMwMGE0Y2M3ODJiZWZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNWJiMWJiOTUwZWM0YjZhYWU1YTgxYzQ2NjdhNzk2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMmRhOTU5ZWEyZmUwNGZlYWE5MzY3ZDIyNGRiN2IwZDAgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuODIzODM5IDguNDQ1NiAxOS41MTUyMjMgOC42NDQ3NjggMTguMjU4NjU2IDkuMDM2MzMgQyAxNy4wMDIwODkgOS40Mjc4OTIgMTUuODExOTggMTAuMDA3MzU4IDE0LjcyODggMTAuNzU1MDIzIEMgMTMuNjQ1NjIgMTEuNTAyNjg4IDEyLjY4MTc5MSAxMi40MDk5NzkgMTEuODcwMDg5IDEzLjQ0NjAzOSBDIDExLjA1ODM4OCAxNC40ODIxIDEwLjQwODEyMSAxNS42MzUwNTEgOS45NDE0MDQgMTYuODY1NjgzIEMgOS40NzQ2ODcgMTguMDk2MzE1IDkuMTk2ODcgMTkuMzkwNTE4IDkuMTE3NDAyIDIwLjcwNDI3OCBDIDkuMDM3OTM1IDIyLjAxODAzOCA5LjE1NzcyNyAyMy4zMzYyOTIgOS40NzI3MDUgMjQuNjE0MjA4IEMgOS43ODc2ODMgMjUuODkyMTI0IDEwLjI5NDIzNSAyNy4xMTUwNSAxMC45NzUxMzUgMjguMjQxMzk2IEMgMTEuNjU2MDM2IDI5LjM2Nzc0MyAxMi41MDM0NzYgMzAuMzg0NTk1IDEzLjQ4ODYzNyAzMS4yNTczNzEgQyAxNC40NzM3OTggMzIuMTMwMTQ3IDE1LjU4NTM4NCAzMi44NDg4NDEgMTYuNzg1NTkxIDMzLjM4OTAxIEMgMTcuOTg1Nzk4IDMzLjkyOTE4IDE5LjI2MDg2NiAzNC4yODQ2MzEgMjAuNTY3NDMxIDM0LjQ0MzI3NyBDIDIxLjg3Mzk5NiAzNC42MDE5MjMgMjMuMTk3MDc4IDM0LjU2MTk0MyAyNC40OTE2OCAzNC4zMjQ2OTkgQyAyNS43ODYyODMgMzQuMDg3NDU0IDI3LjAzNzU2MiAzMy42NTU2NjQgMjguMjAyOTY1IDMzLjA0NDAxMyBDIDI5LjM2ODM2OCAzMi40MzIzNjIgMzAuNDM0NTMyIDMxLjY0Nzg2NCAzMS4zNjUxOTkgMzAuNzE3MTk3IEMgMzIuMjk1ODY1IDI5Ljc4NjUzMSAzMy4wODAzNjMgMjguNzIwMzY3IDMzLjY5MjAxNCAyNy41NTQ5NjQgQyAzNC4zMDM2NjUgMjYuMzg5NTYgMzQuNzM1NDU0IDI1LjEzODI4MSAzNC45NzI2OTkgMjMuODQzNjc4IEMgMzUuMjA5OTQ0IDIyLjU0OTA3NiAzNS4yNDk5MjMgMjEuMjI1OTk0IDM1LjA5MTI3NyAxOS45MTk0MjkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDM1LjA5MTI3NyAxOS45MTk0MjkgQyAzNC43MDcxMzggMTYuNzU1NzYgMzMuMTc2Nzk2IDEzLjgzOTkzNyAzMC43OTEzNjMgMTEuNzI2NjI5IEMgMjguNDA1OTMgOS42MTMzMiAyNS4zMjY5MDQgOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNS4wOTEyNzcgMTkuOTE5NDI5IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wMTY3ZTY3OTY0ZjQ0YmRhODkzMDBhNGNjNzgyYmVmZS5zZXRJY29uKGRpdl9pY29uXzJkYTk1OWVhMmZlMDRmZWFhOTM2N2QyMjRkYjdiMGQwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyNDRmMjdlOThlNzQ0MjNhYmRjNjUwNTE0ZDkwZjM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5ZThhMmMxMzU0NjQzNzc4YjdiNTQ5OGM2YmRiOWQ3ID0gJChgPGRpdiBpZD0iaHRtbF81OWU4YTJjMTM1NDY0Mzc3OGI3YjU0OThjNmJkYjlkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hcHUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcHVkdW5ndW48L2E+PGJyPmNvbnNvbmFudHM6IDIwPGJyPnZvd2VsczogNjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyNDRmMjdlOThlNzQ0MjNhYmRjNjUwNTE0ZDkwZjM4LnNldENvbnRlbnQoaHRtbF81OWU4YTJjMTM1NDY0Mzc3OGI3YjU0OThjNmJkYjlkNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAxNjdlNjc5NjRmNDRiZGE4OTMwMGE0Y2M3ODJiZWZlLmJpbmRQb3B1cChwb3B1cF8wMjQ0ZjI3ZTk4ZTc0NDIzYWJkYzY1MDUxNGQ5MGYzOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2FjNWQ1N2UyMWNjMDQ2MmU4M2UzOTY4MGIxYmFiMGU3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNC45NDAzLCAtOTguOTA0Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNWJiMWJiOTUwZWM0YjZhYWU1YTgxYzQ2NjdhNzk2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYTAyYTM3M2QzZWMyNDVjMWEwZmVhODIyZjc2OGFmMTggPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuMzQ0NjIzIDguNDQ1NiAxOC41Njg0MjMgOC44MTYyMDUgMTYuOTIyODQ4IDkuNTM0MTYyIEMgMTUuMjc3Mjc0IDEwLjI1MjExOSAxMy43OTc0NzggMTEuMzAyMDkgMTIuNTc2MzEyIDEyLjYxODE5NSBDIDExLjM1NTE0NSAxMy45MzQyOTkgMTAuNDE4Njk1IDE1LjQ4ODQyMiA5LjgyNTcyIDE3LjE4MzA0OCBDIDkuMjMyNzQ1IDE4Ljg3NzY3NCA4Ljk5NTkxMiAyMC42NzY2MDMgOS4xMzAwOCAyMi40NjY5NiBDIDkuMjY0MjQ5IDI0LjI1NzMxNiA5Ljc2NjU1NCAyNi4wMDA4NTUgMTAuNjA1NDc4IDI3LjU4ODE3NSBDIDExLjQ0NDQwMSAyOS4xNzU0OTUgMTIuNjAyMDIyIDMwLjU3MjY4OCAxNC4wMDU3MDQgMzEuNjkyMDg3IEMgMTUuNDA5Mzg2IDMyLjgxMTQ4NiAxNy4wMjkxNDQgMzMuNjI5MTc4IDE4Ljc2MzM0NSAzNC4wOTM4NTUgQyAyMC40OTc1NDYgMzQuNTU4NTMzIDIyLjMwOTE0MyAzNC42NjAyNjkgMjQuMDg0NDY3IDM0LjM5MjY4MiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMjQuMDg0NDY3IDM0LjM5MjY4MiBDIDI3LjMzODAzMSAzMy45MDIyODYgMzAuMjg4NjExIDMyLjE5ODc2NyAzMi4zNDAwODggMjkuNjI2Mjk2IEMgMzQuMzkxNTY0IDI3LjA1MzgyNCAzNS4zOTU4MDYgMjMuNzk4MTUyIDM1LjE0OTkxOSAyMC41MTcwMzkgQyAzNC45MDQwMzMgMTcuMjM1OTI1IDMzLjQyNTc3NSAxNC4xNjYyOTIgMzEuMDEzODA0IDExLjkyODMxIEMgMjguNjAxODMzIDkuNjkwMzI5IDI1LjQzMDMxMSA4LjQ0NTU5OSAyMi4xMzk5OTggOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMjQuMDg0NDY3IDM0LjM5MjY4MiB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYWM1ZDU3ZTIxY2MwNDYyZTgzZTM5NjgwYjFiYWIwZTcuc2V0SWNvbihkaXZfaWNvbl9hMDJhMzczZDNlYzI0NWMxYTBmZWE4MjJmNzY4YWYxOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Njg2MjFiMzNjYjI0ODFkOWRmMDRlYWVjODY2NDg1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOGNkMzc0ZDYxNjg0OTFiYjk4ZDc3MmQ4MmY4NGVmNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDhjZDM3NGQ2MTY4NDkxYmI5OGQ3NzJkODJmODRlZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raW93MTI2NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaW93YTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiAyMDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2ODYyMWIzM2NiMjQ4MWQ5ZGYwNGVhZWM4NjY0ODVhLnNldENvbnRlbnQoaHRtbF9kOGNkMzc0ZDYxNjg0OTFiYjk4ZDc3MmQ4MmY4NGVmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FjNWQ1N2UyMWNjMDQ2MmU4M2UzOTY4MGIxYmFiMGU3LmJpbmRQb3B1cChwb3B1cF84Njg2MjFiMzNjYjI0ODFkOWRmMDRlYWVjODY2NDg1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzk4OTU5YTc5NTUyMDQ1NjVhMjFiZjdmNjFiYzUwZGMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNS4wLCAxMzUuMF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNWJiMWJiOTUwZWM0YjZhYWU1YTgxYzQ2NjdhNzk2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fOWZkNGY1NGUyNDIxNGM4YTg0MDQ5YjBkMzEyNDZiOWMgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuNTU5OTc1IDguNDQ1NiAxNy4wMzcwMjEgOS4yMTA5MyAxNC44OTE4MDkgMTAuNjQ0MzE1IEMgMTIuNzQ2NTk2IDEyLjA3NzcgMTEuMDc0MDMxIDE0LjExNTcyNiAxMC4wODY2OTggMTYuNDk5MzU5IEMgOS4wOTkzNjUgMTguODgyOTkxIDguODQwOTQ1IDIxLjUwNjc3NiA5LjM0NDI4MyAyNC4wMzcyMjYgQyA5Ljg0NzYyMSAyNi41Njc2NzcgMTEuMDkwNDQ5IDI4Ljg5Mjg0NSAxMi45MTQ4MDIgMzAuNzE3MTk4IEMgMTQuNzM5MTU1IDMyLjU0MTU1MSAxNy4wNjQzMjMgMzMuNzg0Mzc5IDE5LjU5NDc3NCAzNC4yODc3MTcgQyAyMi4xMjUyMjQgMzQuNzkxMDU1IDI0Ljc0OTAwOSAzNC41MzI2MzUgMjcuMTMyNjQxIDMzLjU0NTMwMiBDIDI5LjUxNjI3NCAzMi41NTc5NjkgMzEuNTU0MyAzMC44ODU0MDQgMzIuOTg3Njg1IDI4Ljc0MDE5MSBDIDM0LjQyMTA3IDI2LjU5NDk3OSAzNS4xODY0IDI0LjA3MjAyNSAzNS4xODY0IDIxLjQ5MiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzUuMTg2NCAyMS40OTIgQyAzNS4xODY0IDE4LjAzMzIwNyAzMy44MTA5MzQgMTQuNzEyNTM4IDMxLjM2NTE5OCAxMi4yNjY4MDIgQyAyOC45MTk0NjIgOS44MjEwNjYgMjUuNTk4NzkzIDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNS4xODY0IDIxLjQ5MiB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTg5NTlhNzk1NTIwNDU2NWEyMWJmN2Y2MWJjNTBkYzIuc2V0SWNvbihkaXZfaWNvbl85ZmQ0ZjU0ZTI0MjE0YzhhODQwNDliMGQzMTI0NmI5Yyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDk1OWUyMDI2MTY0ZTdjYWRiMDM2OTQ2OWFlY2MzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGIzNTI5YzA4ZmE0OGNjYTYyM2Q2YzE1ZWQ4MDQ5NiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjhiMzUyOWMwOGZhNDhjY2E2MjNkNmMxNWVkODA0OTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTY0MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5KYXBhbmVzZTwvYT48YnI+Y29uc29uYW50czogMTU8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzQ5NTllMjAyNjE2NGU3Y2FkYjAzNjk0NjlhZWNjMzkuc2V0Q29udGVudChodG1sXzY4YjM1MjljMDhmYTQ4Y2NhNjIzZDZjMTVlZDgwNDk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTg5NTlhNzk1NTIwNDU2NWEyMWJmN2Y2MWJjNTBkYzIuYmluZFBvcHVwKHBvcHVwXzM0OTU5ZTIwMjYxNjRlN2NhZGIwMzY5NDY5YWVjYzM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMmQxODFjNDVmNTlkNGM4ZGIyNWRhNjY1YzRmZTBiMzggPSBMLm1hcmtlcigKICAgICAgICAgICAgWzcuMTUzNDUsIDMuNjcyMjVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjViYjFiYjk1MGVjNGI2YWFlNWE4MWM0NjY3YTc5NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzk2ODM3OTFiODI3YjQ2NTM5MzBmMDNiM2I2MTNiNmJmID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjAwOTU3IDguNDQ1NiAxNy45MTEyMTcgOC45Njc0MzcgMTYuMDI4OTU2IDkuOTY1MzQ4IEMgMTQuMTQ2Njk2IDEwLjk2MzI2IDEyLjUzNzIwOCAxMi40MDcxOTUgMTEuMzQxNjM5IDE0LjE3MDUyOSBDIDEwLjE0NjA2OSAxNS45MzM4NjIgOS40MDA0MTkgMTcuOTYzNDk0IDkuMTcwMDc5IDIwLjA4MTQzNSBDIDguOTM5NzM5IDIyLjE5OTM3NiA5LjIzMTY0NSAyNC4zNDE4NSAxMC4wMjAxOTggMjYuMzIwOTY5IEMgMTAuODA4NzUxIDI4LjMwMDA4OSAxMi4wNzAyMDYgMzAuMDU2MjU5IDEzLjY5MzkzOSAzMS40MzU0NyBDIDE1LjMxNzY3MSAzMi44MTQ2ODEgMTcuMjU0Nzg3IDMzLjc3NTQwMiAxOS4zMzU0MDggMzQuMjMzMzgyIEMgMjEuNDE2MDMgMzQuNjkxMzYyIDIzLjU3NzUwNCAzNC42MzI4MDkgMjUuNjMwMjggMzQuMDYyODU5IEMgMjcuNjgzMDU2IDMzLjQ5MjkwOSAyOS41NjUzMTggMzIuNDI4NzI0IDMxLjExMjAwMSAzMC45NjM2MjkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMxLjExMjAwMSAzMC45NjM2MjkgQyAzMy4wMDY5MjcgMjkuMTY4NjYgMzQuMzIwMjg2IDI2Ljg0NTY3NiAzNC44ODEzODIgMjQuMjk2NTkyIEMgMzUuNDQyNDc4IDIxLjc0NzUwOSAzNS4yMjU5MDIgMTkuMDg3NzYgMzQuMjU5ODAzIDE2LjY2MzAzMiBDIDMzLjI5MzcwMyAxNC4yMzgzMDMgMzEuNjIxODI5IDEyLjE1ODM5OCAyOS40NjE0NzMgMTAuNjkzNjQgQyAyNy4zMDExMTcgOS4yMjg4ODEgMjQuNzUwMTA5IDguNDQ1NiAyMi4xNDAwMDIgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzEuMTEyMDAxIDMwLjk2MzYyOSB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMmQxODFjNDVmNTlkNGM4ZGIyNWRhNjY1YzRmZTBiMzguc2V0SWNvbihkaXZfaWNvbl85NjgzNzkxYjgyN2I0NjUzOTMwZjAzYjNiNjEzYjZiZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZmFlMzFjZjY0NDA0NzE3YmU3NzE4MjZlMDFlOGU0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZDVhNzVlNzI2YmM0OWYyODVkOTc0NmM0OWIyODY4ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmQ1YTc1ZTcyNmJjNDlmMjg1ZDk3NDZjNDliMjg2OGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95b3J1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Zb3J1YmE8L2E+PGJyPmNvbnNvbmFudHM6IDE4PGJyPnZvd2VsczogMTE8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZmFlMzFjZjY0NDA0NzE3YmU3NzE4MjZlMDFlOGU0Ni5zZXRDb250ZW50KGh0bWxfNmQ1YTc1ZTcyNmJjNDlmMjg1ZDk3NDZjNDliMjg2OGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZDE4MWM0NWY1OWQ0YzhkYjI1ZGE2NjVjNGZlMGIzOC5iaW5kUG9wdXAocG9wdXBfMmZhZTMxY2Y2NDQwNDcxN2JlNzcxODI2ZTAxZThlNDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zNmM0Mjg2OWRjYTM0MWQ3YTRmNDU5N2UxZGE3NjE5NiA9IEwubWFya2VyKAogICAgICAgICAgICBbNjQuNzYyOCwgMjUuNTU3N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNWJiMWJiOTUwZWM0YjZhYWU1YTgxYzQ2NjdhNzk2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fOWIwYjdmMjViZGE4NDIxNDk0MTRhYWUxNDU3MmFkMDcgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuODAzNzIxIDguNDQ1NiAxNy41MDk3NzYgOS4wNzMxNTIgMTUuNDk4ODQyIDEwLjI2MjQxNSBDIDEzLjQ4NzkwOCAxMS40NTE2NzggMTEuODMyODYzIDEzLjE1OTU1MiAxMC43MDczNTIgMTUuMjA2ODQ5IEMgOS41ODE4NDEgMTcuMjU0MTQ2IDkuMDI2NjUzIDE5LjU2NjY3MSA5LjEwMDAzOCAyMS45MDE3OTggQyA5LjE3MzQyMiAyNC4yMzY5MjQgOS44NzI3MTkgMjYuNTEwMDI1IDExLjEyNDU2IDI4LjQ4MjYxMSBDIDEyLjM3NjQwMSAzMC40NTUxOTcgMTQuMTM1NDE5IDMyLjA1NTc3OSAxNi4yMTcwNTkgMzMuMTE2NDI4IEMgMTguMjk4Njk5IDM0LjE3NzA3NiAyMC42Mjc1MjIgMzQuNjU5MzUyIDIyLjk1OTE5MSAzNC41MTI2NTYgQyAyNS4yOTA4NiAzNC4zNjU5NiAyNy41NDA4NzQgMzMuNTk1NjA3IDI5LjQ3MzE2NSAzMi4yODI0MjQgQyAzMS40MDU0NTYgMzAuOTY5MjQgMzIuOTQ5OTk3IDI5LjE2MDgxNSAzMy45NDQ3MzYgMjcuMDQ2ODg2IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMy45NDQ3MzYgMjcuMDQ2ODg2IEMgMzQuODgwMzM3IDI1LjA1ODYzMiAzNS4yOTg2MzEgMjIuODY1ODU5IDM1LjE2MDY1NiAyMC42NzI4MDkgQyAzNS4wMjI2ODEgMTguNDc5NzU5IDM0LjMzMjg1OCAxNi4zNTY3MDMgMzMuMTU1NDQgMTQuNTAxMzg5IEMgMzEuOTc4MDIxIDEyLjY0NjA3NSAzMC4zNTA3MzUgMTEuMTE3OTUxIDI4LjQyNTE1MSAxMC4wNTkzNTIgQyAyNi40OTk1NjcgOS4wMDA3NTQgMjQuMzM3Mzg2IDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy45NDQ3MzYgMjcuMDQ2ODg2IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zNmM0Mjg2OWRjYTM0MWQ3YTRmNDU5N2UxZGE3NjE5Ni5zZXRJY29uKGRpdl9pY29uXzliMGI3ZjI1YmRhODQyMTQ5NDE0YWFlMTQ1NzJhZDA3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5MDE5YmRiNzRkMDQ4Yzg4MTJjYzNhODU5ZDU4M2I4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjYjc0NzBkMzEwZjQ0MDE4YTUwN2FmNmZkYzU4ZWM1ID0gJChgPGRpdiBpZD0iaHRtbF9hY2I3NDcwZDMxMGY0NDAxOGE1MDdhZjZmZGM1OGVjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Zpbm4xMzE4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkZpbm5pc2g8L2E+PGJyPmNvbnNvbmFudHM6IDE3PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5MDE5YmRiNzRkMDQ4Yzg4MTJjYzNhODU5ZDU4M2I4LnNldENvbnRlbnQoaHRtbF9hY2I3NDcwZDMxMGY0NDAxOGE1MDdhZjZmZGM1OGVjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM2YzQyODY5ZGNhMzQxZDdhNGY0NTk3ZTFkYTc2MTk2LmJpbmRQb3B1cChwb3B1cF8zOTAxOWJkYjc0ZDA0OGM4ODEyY2MzYTg1OWQ1ODNiOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2FmODQ3ZDdmMTM1ZjRhMTI5MGY4ZDI5N2Q4NjE5NjI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxOS42Mjk3LCAtMTU1LjQzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1YmIxYmI5NTBlYzRiNmFhZTVhODFjNDY2N2E3OTZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl84MmJlYWM2M2VmMWI0NDFjYjViMjY3MmU3NDc0OTVhOCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC4wMjc5NTQgOC40NDU2IDE3Ljk0NzE1OSA4Ljk1ODQ3IDE2LjA3NzAzNSA5LjkzOTk4NyBDIDE0LjIwNjkxMiAxMC45MjE1MDMgMTIuNjAyODAyIDEyLjM0MjYyMSAxMS40MDMwMjMgMTQuMDgwOCBDIDEwLjIwMzI0NCAxNS44MTg5OCA5LjQ0MzMwMiAxNy44MjI3ODQgOS4xODg3MjMgMTkuOTE5NDMxIEMgOC45MzQxNDQgMjIuMDE2MDc4IDkuMTkyNDYzIDI0LjE0MzUyMSA5Ljk0MTQwNCAyNi4xMTgzMTggQyAxMC42OTAzNDYgMjguMDkzMTE1IDExLjkwNzc0OCAyOS44NTY4MjYgMTMuNDg4NjM3IDMxLjI1NzM3MSBDIDE1LjA2OTUyNyAzMi42NTc5MTcgMTYuOTY3MTIgMzMuNjUzODUgMTkuMDE3NzkzIDM0LjE1OTI5NiBDIDIxLjA2ODQ2NyAzNC42NjQ3NDEgMjMuMjExNTM2IDM0LjY2NDc0MSAyNS4yNjIyMDkgMzQuMTU5Mjk1IEMgMjcuMzEyODgzIDMzLjY1Mzg0OSAyOS4yMTA0NzYgMzIuNjU3OTE1IDMwLjc5MTM2NSAzMS4yNTczNjkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMwLjc5MTM2NSAzMS4yNTczNjkgQyAzMi43NzI3ODUgMjkuNTAxOTg0IDM0LjE3Mzc5MiAyNy4xODQ0MzUgMzQuODA3Mjk2IDI0LjYxNDIwNiBDIDM1LjQ0MDggMjIuMDQzOTc3IDM1LjI3NzI4OCAxOS4zNDA4MDkgMzQuMzM4NTk1IDE2Ljg2NTY4MSBDIDMzLjM5OTkwMiAxNC4zOTA1NTMgMzEuNzI5NzYgMTIuMjU4Nzc0IDI5LjU1MTE5OCAxMC43NTUwMjIgQyAyNy4zNzI2MzYgOS4yNTEyNyAyNC43ODcxNDcgOC40NDU2IDIyLjEzOTk5OCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMC43OTEzNjUgMzEuMjU3MzY5IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hZjg0N2Q3ZjEzNWY0YTEyOTBmOGQyOTdkODYxOTYyNS5zZXRJY29uKGRpdl9pY29uXzgyYmVhYzYzZWYxYjQ0MWNiNWIyNjcyZTc0NzQ5NWE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3ZTc0MzU1YzQ2YTRlMGU4NGJjNmMzZTRiOGEzNDQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZlZGU0ODYyZDNlMjQ1NmM5YTkyNWI2NWYwZjRjM2Q4ID0gJChgPGRpdiBpZD0iaHRtbF9mZWRlNDg2MmQzZTI0NTZjOWE5MjViNjVmMGY0YzNkOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhd2ExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhd2FpaWFuPC9hPjxicj5jb25zb25hbnRzOiA4PGJyPnZvd2VsczogNTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3ZTc0MzU1YzQ2YTRlMGU4NGJjNmMzZTRiOGEzNDQ1LnNldENvbnRlbnQoaHRtbF9mZWRlNDg2MmQzZTI0NTZjOWE5MjViNjVmMGY0YzNkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FmODQ3ZDdmMTM1ZjRhMTI5MGY4ZDI5N2Q4NjE5NjI1LmJpbmRQb3B1cChwb3B1cF9lN2U3NDM1NWM0NmE0ZTBlODRiYzZjM2U0YjhhMzQ0NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzExZmI5ZWU5OTUxNjQxNTc5MmNmNTMyOGI2MWE2ZDM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0Ni45MDY4NTg1NzE0LCAxOS42NTU1MjcxNDI5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1YmIxYmI5NTBlYzRiNmFhZTVhODFjNDY2N2E3OTZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9mYmNjZDRkOGY4ZTA0MGU1Yjk5NWVmNTNiZjBkZmFkZCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAxOS45MDc5MTYgOC40NDU2IDE3LjcxMjczNiA5LjAxODQyNCAxNS43NjUyNTIgMTAuMTA5MDY4IEMgMTMuODE3NzY4IDExLjE5OTcxMSAxMi4xODIzNzYgMTIuNzcyMTEgMTEuMDE2MTE2IDE0LjY3NTI3NCBDIDkuODQ5ODU1IDE2LjU3ODQzOSA5LjE5MTI5IDE4Ljc0OTQzNyA5LjEwMzY1OCAyMC45Nzk4IEMgOS4wMTYwMjcgMjMuMjEwMTYzIDkuNTAyMjI3IDI1LjQyNjEzOSAxMC41MTU1NzIgMjcuNDE0OTQxIEMgMTEuNTI4OTE3IDI5LjQwMzc0MiAxMy4wMzU4OTggMzEuMDk5NjA1IDE0Ljg5MTgwNyAzMi4zMzk2ODQgQyAxNi43NDc3MTcgMzMuNTc5NzY0IDE4Ljg5MTE4NyAzNC4zMjMwNTUgMjEuMTE2MzkgMzQuNDk4MTgyIEMgMjMuMzQxNTkzIDM0LjY3MzMxIDI1LjU3NDk0OSAzNC4yNzQ0ODMgMjcuNjAyMDAxIDMzLjM0IEMgMjkuNjI5MDUzIDMyLjQwNTUxNiAzMS4zODI3NzIgMzAuOTY2Mjc3IDMyLjY5NDc1OCAyOS4xNjA0ODMgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMyLjY5NDc1OCAyOS4xNjA0ODMgQyAzNC4xMDg4NyAyNy4yMTQxMjYgMzQuOTU3NDIzIDI0LjkxNDAyNCAzNS4xNDYxODIgMjIuNTE1NjExIEMgMzUuMzM0OTQyIDIwLjExNzE5OCAzNC44NTY2NTIgMTcuNzEyNjcgMzMuNzY0NDI5IDE1LjU2OTA2IEMgMzIuNjcyMjA1IDEzLjQyNTQ1IDMxLjAwODAzNCAxMS42MjUxNTkgMjguOTU2NzI3IDEwLjM2ODExNyBDIDI2LjkwNTQyMSA5LjExMTA3NCAyNC41NDU4MzIgOC40NDU2IDIyLjE0MDAwMiA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi42OTQ3NTggMjkuMTYwNDgzIHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xMWZiOWVlOTk1MTY0MTU3OTJjZjUzMjhiNjFhNmQzNy5zZXRJY29uKGRpdl9pY29uX2ZiY2NkNGQ4ZjhlMDQwZTViOTk1ZWY1M2JmMGRmYWRkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzExNDM4YTdkZjBjOTQ2NDJiNzYzZDNjOWU5YzRkNTljID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViNDFhMWY5NjcyYjRkMmNiNjg5ZDM2NGNlOGZmMTdjID0gJChgPGRpdiBpZD0iaHRtbF9lYjQxYTFmOTY3MmI0ZDJjYjY4OWQzNjRjZThmZjE3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2h1bmcxMjc0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkh1bmdhcmlhbjwvYT48YnI+Y29uc29uYW50czogMjY8YnI+dm93ZWxzOiAxNDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExNDM4YTdkZjBjOTQ2NDJiNzYzZDNjOWU5YzRkNTljLnNldENvbnRlbnQoaHRtbF9lYjQxYTFmOTY3MmI0ZDJjYjY4OWQzNjRjZThmZjE3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzExZmI5ZWU5OTUxNjQxNTc5MmNmNTMyOGI2MWE2ZDM3LmJpbmRQb3B1cChwb3B1cF8xMTQzOGE3ZGYwYzk0NjQyYjc2M2QzYzllOWM0ZDU5YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzg3ZWM0NjRhZWI3NzQyZTY4Yjc1ZGE1MWZhYmI2NzgxID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MS44NTAzOTY5OTk5OTk5OTQsIDQzLjc4NjEzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1YmIxYmI5NTBlYzRiNmFhZTVhODFjNDY2N2E3OTZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl83MjA0NGM4NzJlZGI0ODMwODAwMzQ1NjE3OWQyYTlmOSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC43MzA1NDQgOC40NDU2IDE5LjMzMDM1NyA4LjY3NDAwNCAxNy45OTM5NjYgOS4xMjE5MTcgQyAxNi42NTc1NzUgOS41Njk4MyAxNS40MDI1NTggMTAuMjMxMzYxIDE0LjI3Nzc4NyAxMS4wODA3NDggQyAxMy4xNTMwMTcgMTEuOTMwMTM1IDEyLjE3MzI4OCAxMi45NTYyMDcgMTEuMzc2NzUzIDE0LjExOTAwNCBDIDEwLjU4MDIxOCAxNS4yODE4MDIgOS45NzczNTQgMTYuNTY2MDMyIDkuNTkxNjM4IDE3LjkyMTY4MyBDIDkuMjA1OTIyIDE5LjI3NzMzNCA5LjA0MjQyNyAyMC42ODY1NzYgOS4xMDc1MjEgMjIuMDk0NTI4IEMgOS4xNzI2MTQgMjMuNTAyNDggOS40NjU0NCAyNC44OTA2MjUgOS45NzQ1OTQgMjYuMjA0OTA0IEMgMTAuNDgzNzQ5IDI3LjUxOTE4MiAxMS4yMDI1MzUgMjguNzQyMzA5IDEyLjEwMjk2MiAyOS44MjY2NTEgQyAxMy4wMDMzODggMzAuOTEwOTk0IDE0LjA3MzYxMiAzMS44NDIyOSAxNS4yNzE5NTYgMzIuNTg0MjczIEMgMTYuNDcwMjk5IDMzLjMyNjI1NiAxNy43ODEwMDIgMzMuODY5MTY3IDE5LjE1MzAyIDM0LjE5MTg2MiBDIDIwLjUyNTAzOCAzNC41MTQ1NTggMjEuOTQwMzI3IDM0LjYxMjc5NSAyMy4zNDM3NyAzNC40ODI3NDYgQyAyNC43NDcyMTQgMzQuMzUyNjk4IDI2LjEyMDM1NCAzMy45OTYwNzUgMjcuNDA5NzE2IDMzLjQyNjc2NiBDIDI4LjY5OTA3NyAzMi44NTc0NTggMjkuODg3NzAzIDMyLjA4Mjk1IDMwLjkyOTMwMyAzMS4xMzM0MDYgQyAzMS45NzA5MDQgMzAuMTgzODYxIDMyLjg1MTc4IDI5LjA3MTc2OCAzMy41Mzc2MjcgMjcuODQwNDM2IEMgMzQuMjIzNDc1IDI2LjYwOTEwNCAzNC43MDUyNzQgMjUuMjc0NzI2IDM0Ljk2NDI2IDIzLjg4OTI2OSBDIDM1LjIyMzI0NyAyMi41MDM4MTIgMzUuMjU2MDE2IDIxLjA4NTQ5NiAzNS4wNjEyOTEgMTkuNjg5NTU2IEMgMzQuODY2NTY1IDE4LjI5MzYxNiAzNC40NDY5MDcgMTYuOTM4NDEyIDMzLjgxODY1OCAxNS42NzY3MTggTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMzLjgxODY1OCAxNS42NzY3MTggQyAzMi43MzcxNjMgMTMuNTA0Nzg0IDMxLjA3MDkyNSAxMS42NzcwMDggMjkuMDA4MDQ0IDEwLjM5OTcyNyBDIDI2Ljk0NTE2MiA5LjEyMjQ0NSAyNC41NjYyOTggOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy44MTg2NTggMTUuNjc2NzE4IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84N2VjNDY0YWViNzc0MmU2OGI3NWRhNTFmYWJiNjc4MS5zZXRJY29uKGRpdl9pY29uXzcyMDQ0Yzg3MmVkYjQ4MzA4MDAzNDU2MTc5ZDJhOWY5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0N2IxNDkwMzc3ZTQ4ZWM4YTUxZGI0NTg1MjJiNDg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxYjcxZDYwNDZlZDQ0NDlhZDA2YWIyNWVjYjE0NDJkID0gJChgPGRpdiBpZD0iaHRtbF8zMWI3MWQ2MDQ2ZWQ0NDQ5YWQwNmFiMjVlY2IxNDQyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdlb3JnaWFuPC9hPjxicj5jb25zb25hbnRzOiAyODxicj52b3dlbHM6IDY8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDdiMTQ5MDM3N2U0OGVjOGE1MWRiNDU4NTIyYjQ4NS5zZXRDb250ZW50KGh0bWxfMzFiNzFkNjA0NmVkNDQ0OWFkMDZhYjI1ZWNiMTQ0MmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84N2VjNDY0YWViNzc0MmU2OGI3NWRhNTFmYWJiNjc4MS5iaW5kUG9wdXAocG9wdXBfZjQ3YjE0OTAzNzdlNDhlYzhhNTFkYjQ1ODUyMmI0ODUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jZmNhN2E3ZWVkM2Q0ZWEyYWIzMjFjOThmZTJkNzg4MSA9IEwubWFya2VyKAogICAgICAgICAgICBbMTEuNzA4MTgyLCAzOS41NDM0NTZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjViYjFiYjk1MGVjNGI2YWFlNWE4MWM0NjY3YTc5NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2MwNGFmMjY0OGRlOTQ2OTY5OWM5ZjVhZDQzOWQ1M2U0ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjc1MjQwNCA4LjQ0NTYgMTkuMzczNjUxIDguNjY2OTc0IDE4LjA1NTgwMSA5LjEwMTM2NCBDIDE2LjczNzk1MSA5LjUzNTc1MyAxNS40OTc4MDEgMTAuMTc3NjIxIDE0LjM4MjE3OCAxMS4wMDI3MzIgQyAxMy4yNjY1NTQgMTEuODI3ODQzIDEyLjI4OTY3OCAxMi44MjU2NzkgMTEuNDg4NDMyIDEzLjk1ODU2NCBDIDEwLjY4NzE4NyAxNS4wOTE0NDkgMTAuMDcxNzg2IDE2LjM0NDk0NCA5LjY2NTQ2NiAxNy42NzE3MTcgQyA5LjI1OTE0NyAxOC45OTg0OSA5LjA2NzA4NyAyMC4zODE2MzEgOS4wOTY1MzkgMjEuNzY4OTE1IEMgOS4xMjU5OTEgMjMuMTU2MTk4IDkuMzc2NTggMjQuNTI5OTQyIDkuODM4ODQ0IDI1LjgzODI3NSBDIDEwLjMwMTEwNyAyNy4xNDY2MDggMTAuOTY5MTUzIDI4LjM3Mjg1NCAxMS44MTc3NTggMjkuNDcwNzEzIEMgMTIuNjY2MzYyIDMwLjU2ODU3MiAxMy42ODQ3MDggMzEuNTI0MDQ5IDE0LjgzNDM0NSAzMi4zMDEwNjggQyAxNS45ODM5ODIgMzMuMDc4MDg3IDE3LjI1MDI1NSAzMy42NjY3NDMgMTguNTg1MzU0IDM0LjA0NDgxIEMgMTkuOTIwNDUzIDM0LjQyMjg3NyAyMS4zMDczNTkgMzQuNTg1NTM2IDIyLjY5MzcwNSAzNC41MjY2NDUgQyAyNC4wODAwNTEgMzQuNDY3NzU0IDI1LjQ0ODE2NiAzNC4xODgwNjMgMjYuNzQ2MzkyIDMzLjY5ODEzNCBDIDI4LjA0NDYxOSAzMy4yMDgyMDUgMjkuMjU2NDEgMzIuNTE0MjgyIDMwLjMzNjAwOSAzMS42NDI1NjYgQyAzMS40MTU2MDkgMzAuNzcwODUgMzIuMzQ5MjU2IDI5LjczMjQ1MyAzMy4xMDE2OTggMjguNTY2NTgzIEMgMzMuODU0MTQxIDI3LjQwMDcxMyAzNC40MTU3ODcgMjYuMTIyMjMgMzQuNzY1NDMxIDI0Ljc3OTQwNyBDIDM1LjExNTA3NSAyMy40MzY1ODQgMzUuMjQ4MjU5IDIyLjA0NjUzOSAzNS4xNTk5NTYgMjAuNjYxNzU1IEMgMzUuMDcxNjUyIDE5LjI3Njk3MSAzNC43NjI5ODYgMTcuOTE1MTAxIDM0LjI0NTYxMiAxNi42Mjc1NjYgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDM0LjI0NTYxMiAxNi42Mjc1NjYgQyAzMy4yNzQ4NDIgMTQuMjExNzEyIDMxLjYwMjc2NCAxMi4xNDA4ODMgMjkuNDQ1NjU1IDEwLjY4MjkzMiBDIDI3LjI4ODU0NiA5LjIyNDk4MSAyNC43NDM2MDIgOC40NDU2IDIyLjE0IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDM0LjI0NTYxMiAxNi42Mjc1NjYgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NmY2E3YTdlZWQzZDRlYTJhYjMyMWM5OGZlMmQ3ODgxLnNldEljb24oZGl2X2ljb25fYzA0YWYyNjQ4ZGU5NDY5Njk5YzlmNWFkNDM5ZDUzZTQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGFiOGQxNGUxNzA3NDhmMTllNmEyNzcyY2ZkMTczN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODVlNzc3NDI2MzUyNDI5MmFlMDYxZGQ2YTcxYTk5NDkgPSAkKGA8ZGl2IGlkPSJodG1sXzg1ZTc3NzQyNjM1MjQyOTJhZTA2MWRkNmE3MWE5OTQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYW1oYTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QW1oYXJpYzwvYT48YnI+Y29uc29uYW50czogMzA8YnI+dm93ZWxzOiA3PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGFiOGQxNGUxNzA3NDhmMTllNmEyNzcyY2ZkMTczN2Uuc2V0Q29udGVudChodG1sXzg1ZTc3NzQyNjM1MjQyOTJhZTA2MWRkNmE3MWE5OTQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2ZjYTdhN2VlZDNkNGVhMmFiMzIxYzk4ZmUyZDc4ODEuYmluZFBvcHVwKHBvcHVwX2RhYjhkMTRlMTcwNzQ4ZjE5ZTZhMjc3MmNmZDE3MzdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNWRiOWMzZjRiOTAyNDIxYmFhYjIyMGRhY2IxZWYwM2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgWy01LjI2OTE4LCAzNS40ODA4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1YmIxYmI5NTBlYzRiNmFhZTVhODFjNDY2N2E3OTZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9mNjcxYjkxNmZmZmE0MDU3YTFiNjBmODg5YmFhNmZmNiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC42NSA4LjQ0NTYgMTkuMTcwOTUxIDguNzAwODU0IDE3Ljc2NzE0IDkuMjAwMjY5IEMgMTYuMzYzMzI5IDkuNjk5Njg0IDE1LjA1NTM5MSAxMC40MzU5MTcgMTMuOTAwMTc2IDExLjM3Njk2OSBDIDEyLjc0NDk2MSAxMi4zMTgwMjEgMTEuNzU5NDUgMTMuNDUwMDU4IDEwLjk4NjQ3OCAxNC43MjM4NzcgQyAxMC4yMTM1MDUgMTUuOTk3Njk2IDkuNjY0NDM1IDE3LjM5NDU3MSA5LjM2MzEzIDE4Ljg1Mzc4OSBDIDkuMDYxODI2IDIwLjMxMzAwNyA5LjAxMjcxOCAyMS44MTMxMTYgOS4yMTc5NCAyMy4yODg5MTYgQyA5LjQyMzE2MSAyNC43NjQ3MTYgOS44Nzk2OTYgMjYuMTk0NTExIDEwLjU2NzcwMiAyNy41MTYxNTggQyAxMS4yNTU3MDggMjguODM3ODA0IDEyLjE2NTA3IDMwLjAzMTg3MyAxMy4yNTYyNjQgMzEuMDQ2NDY0IEMgMTQuMzQ3NDU4IDMyLjA2MTA1NiAxNS42MDQ0NDMgMzIuODgxMjU2IDE2Ljk3MjU4NiAzMy40NzE0MTUgQyAxOC4zNDA3MjggMzQuMDYxNTc0IDE5Ljc5OTkxNSAzNC40MTMwMTYgMjEuMjg2NzI1IDM0LjUxMDQ2NyBDIDIyLjc3MzUzNiAzNC42MDc5MTcgMjQuMjY2MTEyIDM0LjQ0OTk0NCAyNS42OTk1ODEgMzQuMDQzNDEyIEMgMjcuMTMzMDUgMzMuNjM2ODggMjguNDg2MzM4IDMyLjk4Nzc2NiAyOS43MDA2MjggMzIuMTI0Mjg0IEMgMzAuOTE0OTE3IDMxLjI2MDgwMSAzMS45NzIzNTcgMzAuMTk1NjQ0IDMyLjgyNjk4NiAyOC45NzUxMDcgQyAzMy42ODE2MTUgMjcuNzU0NTcgMzQuMzIwODcgMjYuMzk2NTk2IDM0LjcxNjk2NiAyNC45NjAyMDkgQyAzNS4xMTMwNjMgMjMuNTIzODIxIDM1LjI2MDE3OCAyMi4wMzAxMzYgMzUuMTUxOTE3IDIwLjU0NDA3NCBDIDM1LjA0MzY1NyAxOS4wNTgwMTIgMzQuNjgxNjEyIDE3LjYwMTQxOSAzNC4wODE1MTkgMTYuMjM3NjA0IEMgMzMuNDgxNDI2IDE0Ljg3Mzc5IDMyLjY1MjEwNyAxMy42MjI4MDMgMzEuNjI5NjA2IDEyLjUzOTAxNiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzEuNjI5NjA2IDEyLjUzOTAxNiBDIDMwLjQxMDA3NSAxMS4yNDYzODggMjguOTM5MTkxIDEwLjIxNjQ2NSAyNy4zMDc0MTQgOS41MTI1ODUgQyAyNS42NzU2MzYgOC44MDg3MDUgMjMuOTE3MTE2IDguNDQ1NiAyMi4xMzk5OTkgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzEuNjI5NjA2IDEyLjUzOTAxNiB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNWRiOWMzZjRiOTAyNDIxYmFhYjIyMGRhY2IxZWYwM2Uuc2V0SWNvbihkaXZfaWNvbl9mNjcxYjkxNmZmZmE0MDU3YTFiNjBmODg5YmFhNmZmNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZmI4OWQ2ZmJjNTU0N2RlOTI1OTBjNmQ0MzE1OTMyOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNDNkNDQ0MGViOGE0M2E2OTFlMWNjNDA0ZDUzYWMwYyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTQzZDQ0NDBlYjhhNDNhNjkxZTFjYzQwNGQ1M2FjMGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zYW5kMTI3MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TYW5kYXdlPC9hPjxicj5jb25zb25hbnRzOiA0Nzxicj52b3dlbHM6IDc8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZmI4OWQ2ZmJjNTU0N2RlOTI1OTBjNmQ0MzE1OTMyOS5zZXRDb250ZW50KGh0bWxfZTQzZDQ0NDBlYjhhNDNhNjkxZTFjYzQwNGQ1M2FjMGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81ZGI5YzNmNGI5MDI0MjFiYWFiMjIwZGFjYjFlZjAzZS5iaW5kUG9wdXAocG9wdXBfZmZiODlkNmZiYzU1NDdkZTkyNTkwYzZkNDMxNTkzMjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82NzIxOTQ1YmE0YzA0NGIyOTJkODJmYWQ0YTk3MDZjYyA9IEwubWFya2VyKAogICAgICAgICAgICBbNTkuNDQ0NywgLTEzNS4yOV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9mNWJiMWJiOTUwZWM0YjZhYWU1YTgxYzQ2NjdhNzk2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYTFlZDU0OWZkODkyNGI2ZmIyZWM2ZWU1NjNmOGMxNDkgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuNjA2MTg5IDguNDQ1NiAxOS4wODQzMjcgOC43MTYwODYgMTcuNjQ0NDUyIDkuMjQ0NjA4IEMgMTYuMjA0NTc4IDkuNzczMTMxIDE0Ljg2OTEyNCAxMC41NTE0NTcgMTMuNjk5NTUxIDExLjU0Mzc2NSBDIDEyLjUyOTk3OSAxMi41MzYwNzMgMTEuNTQ0NTEgMTMuNzI2OTA0IDEwLjc4ODQ5NyAxNS4wNjE0NTMgQyAxMC4wMzI0ODUgMTYuMzk2MDAxIDkuNTE3NzA3IDE3Ljg1MzQ3NiA5LjI2Nzg1NiAxOS4zNjY4IEMgOS4wMTgwMDYgMjAuODgwMTI0IDkuMDM2OTc0IDIyLjQyNTcyIDkuMzIzODg4IDIzLjkzMjQ1NyBDIDkuNjEwODAzIDI1LjQzOTE5NCAxMC4xNjExOTMgMjYuODgzNTk2IDEwLjk0OTcyOSAyOC4xOTkxOSBDIDExLjczODI2NSAyOS41MTQ3ODMgMTIuNzUyNjYyIDMwLjY4MTA3MSAxMy45NDYyMzUgMzEuNjQ0Mzc3IEMgMTUuMTM5ODA3IDMyLjYwNzY4NCAxNi40OTM5NiAzMy4zNTMwMDIgMTcuOTQ2MzcxIDMzLjg0NjAyOSBDIDE5LjM5ODc4MyAzNC4zMzkwNTYgMjAuOTI2ODI1IDM0LjU3MjExMiAyMi40NjAxNzQgMzQuNTM0NDcxIEMgMjMuOTkzNTIyIDM0LjQ5NjgyOSAyNS41MDgyODkgMzQuMTg5MDc3IDI2LjkzNDc1OSAzMy42MjUzNzcgQyAyOC4zNjEyMjkgMzMuMDYxNjc3IDI5LjY3NzE4IDMyLjI1MDgxMiAzMC44MjIwNDggMzEuMjMwMSBDIDMxLjk2NjkxNSAzMC4yMDkzODggMzIuOTIyODY0IDI4Ljk5NDczMiAzMy42NDU4OTcgMjcuNjQyMDMxIEMgMzQuMzY4OTMgMjYuMjg5MzMxIDM0Ljg0Nzc4NSAyNC44MTk2NjIgMzUuMDYwNDIyIDIzLjMwMDY2MyBDIDM1LjI3MzA1OCAyMS43ODE2NjMgMzUuMjE2MTY1IDIwLjIzNjk5NyAzNC44OTIzNiAxOC43Mzc3NTYgQyAzNC41Njg1NTUgMTcuMjM4NTE0IDMzLjk4Mjg4MyAxNS44MDgwNTQgMzMuMTYyMjk4IDE0LjUxMjIwOCBDIDMyLjM0MTcxMyAxMy4yMTYzNjMgMzEuMjk5IDEyLjA3NTMyMSAzMC4wODIxNDYgMTEuMTQxNTk2IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMC4wODIxNDYgMTEuMTQxNTk2IEMgMjguOTUwNTc5IDEwLjI3MzMxNCAyNy42ODQyNDQgOS41OTY0NDQgMjYuMzMzNjI5IDkuMTM3OTcxIEMgMjQuOTgzMDE1IDguNjc5NDk5IDIzLjU2NjMxMSA4LjQ0NTYgMjIuMTQwMDAyIDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMwLjA4MjE0NiAxMS4xNDE1OTYgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzY3MjE5NDViYTRjMDQ0YjI5MmQ4MmZhZDRhOTcwNmNjLnNldEljb24oZGl2X2ljb25fYTFlZDU0OWZkODkyNGI2ZmIyZWM2ZWU1NjNmOGMxNDkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzRlMzM0ZGJlZTc1NDdkOGIyOTk2ZmU2ZjUzZGI4OWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGIwNjc0OTFlYTU4NDMxNDk2NGMzMjk3YzQ1ODJkNmEgPSAkKGA8ZGl2IGlkPSJodG1sX2RiMDY3NDkxZWE1ODQzMTQ5NjRjMzI5N2M0NTgyZDZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGxpbjEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGxpbmdpdDwvYT48YnI+Y29uc29uYW50czogNDM8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzRlMzM0ZGJlZTc1NDdkOGIyOTk2ZmU2ZjUzZGI4OWMuc2V0Q29udGVudChodG1sX2RiMDY3NDkxZWE1ODQzMTQ5NjRjMzI5N2M0NTgyZDZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjcyMTk0NWJhNGMwNDRiMjkyZDgyZmFkNGE5NzA2Y2MuYmluZFBvcHVwKHBvcHVwX2M0ZTMzNGRiZWU3NTQ3ZDhiMjk5NmZlNmY1M2RiODljKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZDVkZmQyNTI5OTFmNDdkNjg4ZWVhZTM0NmY1MWYyZDIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ2LjM2OTksIC0xMDMuOTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjViYjFiYjk1MGVjNGI2YWFlNWE4MWM0NjY3YTc5NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2VjNWIxODk2NWM0YTRjOTQ5OWY5ZjU4NTUzZmYzMTYxID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjgwOTE1OCA4LjQ0NTYgMTkuNDg2MTE4IDguNjQ5MjM1IDE4LjIxNjg3MiA5LjA0OTQyNyBDIDE2Ljk0NzYyNiA5LjQ0OTYxOSAxNS43NDcwNTQgMTAuMDQxNjc1IDE0LjY1Njg5MiAxMC44MDUwMTUgQyAxMy41NjY3MzEgMTEuNTY4MzU0IDEyLjU5OTc2IDEyLjQ5NDAyNyAxMS43ODk1OTUgMTMuNTQ5ODU1IEMgMTAuOTc5NDMgMTQuNjA1NjgzIDEwLjMzNTU2OSAxNS43NzkyODcgOS44ODAzOTQgMTcuMDI5ODY5IEMgOS40MjUyMTkgMTguMjgwNDUxIDkuMTY0MDY4IDE5LjU5MzM0OSA5LjEwNjAxNyAyMC45MjI5MjQgQyA5LjA0Nzk2NyAyMi4yNTI0OTkgOS4xOTM2OTggMjMuNTgzMTYzIDkuNTM4MTQ1IDI0Ljg2ODY1NyBDIDkuODgyNTkzIDI2LjE1NDE1MSAxMC40MjE3MTcgMjcuMzc5NDA2IDExLjEzNjc3OCAyOC41MDE4MjYgQyAxMS44NTE4MzkgMjkuNjI0MjQ2IDEyLjczNDQ1MiAzMC42MzA2NzQgMTMuNzUzOTM2IDMxLjQ4NjEyMyBDIDE0Ljc3MzQyIDMyLjM0MTU3MSAxNS45MTc4MjIgMzMuMDM2MDExIDE3LjE0NzM1OSAzMy41NDUzMDIgQyAxOC4zNzY4OTcgMzQuMDU0NTkzIDE5LjY3NzE1NSAzNC4zNzI3NjQgMjEuMDAyOTMyIDM0LjQ4ODc1NSBDIDIyLjMyODcwOSAzNC42MDQ3NDUgMjMuNjY0NDYzIDM0LjUxNzE5NSAyNC45NjM3NTkgMzQuMjI5MTQ4IEMgMjYuMjYzMDU0IDMzLjk0MTEwMSAyNy41MTA2NTggMzMuNDU1OTM0IDI4LjY2MzIwMSAzMi43OTA1MTMgQyAyOS44MTU3NDMgMzIuMTI1MDkzIDMwLjg1OTcxMiAzMS4yODcyMTkgMzEuNzU4ODE2IDMwLjMwNjAxOSBDIDMyLjY1NzkxOSAyOS4zMjQ4MiAzMy40MDE2MTYgMjguMjExNzk4IDMzLjk2NDA1NCAyNy4wMDU2NDYgQyAzNC41MjY0OTIgMjUuNzk5NDk0IDM0LjkwMTA3NyAyNC41MTQzNTIgMzUuMDc0Nzg2IDIzLjE5NDg5NiBDIDM1LjI0ODQ5NiAyMS44NzU0NCAzNS4yMTkyOTQgMjAuNTM3MTM4IDM0Ljk4ODE5NiAxOS4yMjY1MTUgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDM0Ljk4ODE5NiAxOS4yMjY1MTUgQyAzNC40NTU3MDEgMTYuMjA2NTg5IDMyLjg3NTE0OSAxMy40Njg5OTQgMzAuNTI2MDYzIDExLjQ5Nzg3NyBDIDI4LjE3Njk3OCA5LjUyNjc2IDI1LjIwNjUxMiA4LjQ0NTYgMjIuMTM5OTk5IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDM0Ljk4ODE5NiAxOS4yMjY1MTUgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Q1ZGZkMjUyOTkxZjQ3ZDY4OGVlYWUzNDZmNTFmMmQyLnNldEljb24oZGl2X2ljb25fZWM1YjE4OTY1YzRhNGM5NDk5ZjlmNTg1NTNmZjMxNjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I2M2Q4NmFjNDdlNGU1M2I4MTAwMDU3ODgwMjEyYmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQxN2JiYWI3MzBjNDk3MGIxYmViZWVmZjcxODFiYjAgPSAkKGA8ZGl2IGlkPSJodG1sXzVkMTdiYmFiNzMwYzQ5NzBiMWJlYmVlZmY3MTgxYmIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrbzEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFrb3RhPC9hPjxicj5jb25zb25hbnRzOiAyODxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYjYzZDg2YWM0N2U0ZTUzYjgxMDAwNTc4ODAyMTJiZS5zZXRDb250ZW50KGh0bWxfNWQxN2JiYWI3MzBjNDk3MGIxYmViZWVmZjcxODFiYjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kNWRmZDI1Mjk5MWY0N2Q2ODhlZWFlMzQ2ZjUxZjJkMi5iaW5kUG9wdXAocG9wdXBfM2I2M2Q4NmFjNDdlNGU1M2I4MTAwMDU3ODgwMjEyYmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82MGU3ZmEzMDU0ZTE0M2UxYjZiZDBhZDQzNWI4NmMyMyA9IEwubWFya2VyKAogICAgICAgICAgICBbMTguNzc1NywgLTg4Ljk1NjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjViYjFiYjk1MGVjNGI2YWFlNWE4MWM0NjY3YTc5NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzM3YmYwNWVkNDZlMTQ3Y2JhZDAxMDBlZThkNjExMDY1ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5Ljg1MDA0OSA4LjQ0NTYgMTcuNTk5OTU2IDkuMDQ4NTExIDE1LjYxNjggMTAuMTkzNDg2IEMgMTMuNjMzNjQ0IDExLjMzODQ2MiAxMS45ODY0NjEgMTIuOTg1NjQ0IDEwLjg0MTQ4NiAxNC45Njg4IEMgOS42OTY1MSAxNi45NTE5NTYgOS4wOTM2IDE5LjIwMjA1IDkuMDkzNiAyMS40OTIwMDEgQyA5LjA5MzYgMjMuNzgxOTUyIDkuNjk2NTExIDI2LjAzMjA0NSAxMC44NDE0ODcgMjguMDE1MjAxIEMgMTEuOTg2NDYyIDI5Ljk5ODM1NiAxMy42MzM2NDUgMzEuNjQ1NTM5IDE1LjYxNjgwMSAzMi43OTA1MTQgQyAxNy41OTk5NTcgMzMuOTM1NDkgMTkuODUwMDUgMzQuNTM4NCAyMi4xNDAwMDEgMzQuNTM4NCBDIDI0LjQyOTk1MiAzNC41Mzg0IDI2LjY4MDA0NiAzMy45MzU0ODkgMjguNjYzMjAxIDMyLjc5MDUxMyBDIDMwLjY0NjM1NyAzMS42NDU1MzcgMzIuMjkzNTM5IDI5Ljk5ODM1NSAzMy40Mzg1MTUgMjguMDE1MTk5IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMy40Mzg1MTUgMjguMDE1MTk5IEMgMzQuNTgzNDkgMjYuMDMyMDQzIDM1LjE4NjQgMjMuNzgxOTQ5IDM1LjE4NjQgMjEuNDkxOTk4IEMgMzUuMTg2NCAxOS4yMDIwNDcgMzQuNTgzNDg5IDE2Ljk1MTk1NCAzMy40Mzg1MTMgMTQuOTY4Nzk4IEMgMzIuMjkzNTM3IDEyLjk4NTY0MyAzMC42NDYzNTQgMTEuMzM4NDYgMjguNjYzMTk4IDEwLjE5MzQ4NSBDIDI2LjY4MDA0MiA5LjA0ODUxIDI0LjQyOTk0OSA4LjQ0NTYgMjIuMTM5OTk4IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMzLjQzODUxNSAyOC4wMTUxOTkgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzYwZTdmYTMwNTRlMTQzZTFiNmJkMGFkNDM1Yjg2YzIzLnNldEljb24oZGl2X2ljb25fMzdiZjA1ZWQ0NmUxNDdjYmFkMDEwMGVlOGQ2MTEwNjUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODU4ZjNiZjA3YzhmNGRkMDgwMDg4NzBlYzE3ZmEzZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGVhMWQ0MjdjZjIzNGVkZmI4ZjJkYWVmMjllZGM0ODUgPSAkKGA8ZGl2IGlkPSJodG1sX2RlYTFkNDI3Y2YyMzRlZGZiOGYyZGFlZjI5ZWRjNDg1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVjYTEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVjYXRlYyBNYXlhPC9hPjxicj5jb25zb25hbnRzOiAyMDxicj52b3dlbHM6IDEwPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODU4ZjNiZjA3YzhmNGRkMDgwMDg4NzBlYzE3ZmEzZDYuc2V0Q29udGVudChodG1sX2RlYTFkNDI3Y2YyMzRlZGZiOGYyZGFlZjI5ZWRjNDg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjBlN2ZhMzA1NGUxNDNlMWI2YmQwYWQ0MzViODZjMjMuYmluZFBvcHVwKHBvcHVwXzg1OGYzYmYwN2M4ZjRkZDA4MDA4ODcwZWMxN2ZhM2Q2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



| It is possible to customize them using these parameters: 1. ``colors``
| Colors for your features. If not given, default colors
  (``LingMap().colors``) will be used.

2. ``size``
   Size of the chart. Please, bear in mind that they should be small.
   Default: ``0.6``.
3. ``startangle``
   Start angle. Default ``90``. Pie-chart only.
4. ``labels``
   Show values inside the chart. Pie-chart only.
5. ``textprops``
   Set text properties (``matplotlib`` format). Default: ``None``. E.g.:
   ``textprops={'color': 'red'}``.

.. code:: ipython3

    m = lingtypology.LingMap(data.language)
    m.add_minicharts(
        data.consonants, data.vowels,
        colors = ('#0020c2', '#c22000'),
        size = 0.8,
        startangle = 45,
        labels = True,
        textprops = {'color': 'white'}
    )
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2NiZGM0N2YyMzA4NDQ0MzJhNTY5NDI2N2JlOTdkN2EyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9jYmRjNDdmMjMwODQ0NDMyYTU2OTQyNjdiZTk3ZDdhMiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMDIwYzI7b3BhY2l0eTowLjc7Ij48L3NwYW4+Y29uc29uYW50czwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2MyMjAwMDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj52b3dlbHM8L2xpPgoKCiAgPC91bD4KPC9kaXY+CjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cgo8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPgogIC5tYXBsZWdlbmQgLmxlZ2VuZC10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDkwJTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgcGFkZGluZzogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgbGkgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIH0KICAubWFwbGVnZW5kIHVsLmxlZ2VuZC1sYWJlbHMgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgaGVpZ2h0OiAxNnB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgCiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNvdXJjZSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGNvbG9yOiAjNzc3OwogICAgY2xlYXI6IGJvdGg7CiAgICB9CiAgLm1hcGxlZ2VuZCBhIHsKICAgIGNvbG9yOiAjNzc3OwogICAgfQo8L3N0eWxlPgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfY2JkYzQ3ZjIzMDg0NDQzMmE1Njk0MjY3YmU5N2Q3YTIgPSBMLm1hcCgKICAgICAgICAnbWFwX2NiZGM0N2YyMzA4NDQ0MzJhNTY5NDI2N2JlOTdkN2EyJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwpMLmNvbnRyb2wuc2NhbGUoKS5hZGRUbyhtYXBfY2JkYzQ3ZjIzMDg0NDQzMmE1Njk0MjY3YmU5N2Q3YTIpOwoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfZWJjYzNkNTdlYmY0NGY0ZjhjZjA4YmVmMjkwYzgzMDAgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwX2NiZGM0N2YyMzA4NDQ0MzJhNTY5NDI2N2JlOTdkN2EyKTsKICAgIAogICAgICAgIHZhciBtYXJrZXJfYTJiNGU4ZDFjODVhNDI5MTgwNWFmMTg0Yzk1Y2YzNTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2JkYzQ3ZjIzMDg0NDQzMmE1Njk0MjY3YmU5N2Q3YTIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzNmY2Q2NGYyYjNhZTQxM2I5ZGY0ZmU4MzM1YzFiNDMyID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyA0MC41OTgyNDYgMTUuMTMzNzE4IDM5LjIwMDkxMyAxNC4xMDA2MDMgMzcuNjc0MzY0IDEzLjI5MDQ3NiBDIDM2LjE0NzgxNiAxMi40ODAzNDkgMzQuNTA5MDI3IDExLjkwMjIxNyAzMi44MTIwNjMgMTEuNTc1MTU0IEMgMzEuMTE1MSAxMS4yNDgwOTEgMjkuMzc4ODMxIDExLjE3NTczNCAyNy42NjA1MzggMTEuMzYwNDY5IEMgMjUuOTQyMjQ2IDExLjU0NTIwNSAyNC4yNjEwMzYgMTEuOTg0OTc5IDIyLjY3MjM3NiAxMi42NjUyODMgQyAyMS4wODM3MTUgMTMuMzQ1NTg3IDE5LjYwNTI2OSAxNC4yNTg4NTcgMTguMjg1ODEyIDE1LjM3NDk2MSBDIDE2Ljk2NjM1NSAxNi40OTEwNjYgMTUuODIwNTU5IDE3Ljc5NzU5NSAxNC44ODYyMjcgMTkuMjUxNDQ1IEMgMTMuOTUxODk0IDIwLjcwNTI5NCAxMy4yMzk0MTQgMjIuMjkwMjk4IDEyLjc3MjI5MiAyMy45NTQxNjUgQyAxMi4zMDUxNjkgMjUuNjE4MDMyIDEyLjA4ODU5OSAyNy4zNDIyNiAxMi4xMjk3MjYgMjkuMDY5OTY1IEMgMTIuMTcwODUzIDMwLjc5NzY3IDEyLjQ2OTIyIDMyLjUwOTY0MSAxMy4wMTQ5ODMgMzQuMTQ5Mzk3IEMgMTMuNTYwNzQ2IDM1Ljc4OTE1MiAxNC4zNDc4MzcgMzcuMzM4NDYgMTUuMzUwMjg4IDM4Ljc0NjIwNiBDIDE2LjM1MjczOSA0MC4xNTM5NTEgMTcuNTU5NDA0IDQxLjQwNDQ4MiAxOC45MzA0NzMgNDIuNDU2NTQgQyAyMC4zMDE1NDIgNDMuNTA4NTk4IDIxLjgyMTc2OSA0NC4zNTA0ODYgMjMuNDQxIDQ0Ljk1NDQyOCBDIDI1LjA2MDIzMSA0NS41NTgzNyAyNi43NjA0NjIgNDUuOTE3NjUxIDI4LjQ4NTU5OCA0Ni4wMjA0MTggQyAzMC4yMTA3MzQgNDYuMTIzMTg0IDMxLjk0MTU5NCA0NS45NjgyOTQgMzMuNjIxMDczIDQ1LjU2MDg1NyBDIDM1LjMwMDU1MyA0NS4xNTM0MiAzNi45MDk5NzcgNDQuNDk3OTY2IDM4LjM5NjI0OSA0My42MTYxMiBDIDM5Ljg4MjUyMSA0Mi43MzQyNzQgNDEuMjI5MTEzIDQxLjYzNTg0MiA0Mi4zOTE2MDEgNDAuMzU3MDYyIEwgMjkuNTIgMjguNjU2IEwgNDEuODIwMjY0IDE2LjM1NTczNiB6IiBzdHlsZT0iZmlsbDojMDAyMGMyOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gNDIuMzkxNjAxIDQwLjM1NzA2MiBDIDQ1LjM5NzUxIDM3LjA1MDQ1MSA0Ny4wMTY2MTggMzIuNzA5NDU2IDQ2LjkxMDI3NCAyOC4yNDIwMzUgQyA0Ni44MDM5MjkgMjMuNzc0NjEzIDQ0Ljk4MDEwMyAxOS41MTU1NzUgNDEuODIwMjY0IDE2LjM1NTczNiBMIDI5LjUyIDI4LjY1NiBMIDQyLjM5MTYwMSA0MC4zNTcwNjIgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gMjUgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxOS4xODc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDAgTCA3LjMyODEyNSAwIEwgNy4zMjgxMjUgOC4yOTY4NzUgUSAxMi45Mzc1IDE0LjEwOTM3NSAyMi42MjUgMjMuODkwNjI1IFEgMzIuMzI4MTI1IDMzLjY4NzUgMzQuODEyNSAzNi41MzEyNSBRIDM5LjU0Njg3NSA0MS44NDM3NSA0MS40MjE4NzUgNDUuNTMxMjUgUSA0My4zMTI1IDQ5LjIxODc1IDQzLjMxMjUgNTIuNzgxMjUgUSA0My4zMTI1IDU4LjU5Mzc1IDM5LjIzNDM3NSA2Mi4yNSBRIDM1LjE1NjI1IDY1LjkyMTg3NSAyOC42MDkzNzUgNjUuOTIxODc1IFEgMjMuOTY4NzUgNjUuOTIxODc1IDE4LjgxMjUgNjQuMzEyNSBRIDEzLjY3MTg3NSA2Mi43MDMxMjUgNy44MTI1IDU5LjQyMTg3NSBMIDcuODEyNSA2OS4zOTA2MjUgUSAxMy43NjU2MjUgNzEuNzgxMjUgMTguOTM3NSA3MyBRIDI0LjEyNSA3NC4yMTg3NSAyOC40MjE4NzUgNzQuMjE4NzUgUSAzOS43NSA3NC4yMTg3NSA0Ni40ODQzNzUgNjguNTQ2ODc1IFEgNTMuMjE4NzUgNjIuODkwNjI1IDUzLjIxODc1IDUzLjQyMTg3NSBRIDUzLjIxODc1IDQ4LjkyMTg3NSA1MS41MzEyNSA0NC44OTA2MjUgUSA0OS44NTkzNzUgNDAuODc1IDQ1LjQwNjI1IDM1LjQwNjI1IFEgNDQuMTg3NSAzMy45ODQzNzUgMzcuNjQwNjI1IDI3LjIxODc1IFEgMzEuMTA5Mzc1IDIwLjQ1MzEyNSAxOS4xODc1IDguMjk2ODc1IHoiIGlkPSJEZWphVnVTYW5zLTUwIi8+ICAgICA8cGF0aCBkPSJNIDEwLjc5Njg3NSA3Mi45MDYyNSBMIDQ5LjUxNTYyNSA3Mi45MDYyNSBMIDQ5LjUxNTYyNSA2NC41OTM3NSBMIDE5LjgyODEyNSA2NC41OTM3NSBMIDE5LjgyODEyNSA0Ni43MzQzNzUgUSAyMS45Njg3NSA0Ny40Njg3NSAyNC4xMDkzNzUgNDcuODI4MTI1IFEgMjYuMjY1NjI1IDQ4LjE4NzUgMjguNDIxODc1IDQ4LjE4NzUgUSA0MC42MjUgNDguMTg3NSA0Ny43NSA0MS41IFEgNTQuODkwNjI1IDM0LjgxMjUgNTQuODkwNjI1IDIzLjM5MDYyNSBRIDU0Ljg5MDYyNSAxMS42MjUgNDcuNTYyNSA1LjA5Mzc1IFEgNDAuMjM0Mzc1IC0xLjQyMTg3NSAyNi45MDYyNSAtMS40MjE4NzUgUSAyMi4zMTI1IC0xLjQyMTg3NSAxNy41NDY4NzUgLTAuNjQwNjI1IFEgMTIuNzk2ODc1IDAuMTQwNjI1IDcuNzE4NzUgMS43MDMxMjUgTCA3LjcxODc1IDExLjYyNSBRIDEyLjEwOTM3NSA5LjIzNDM3NSAxNi43OTY4NzUgOC4wNjI1IFEgMjEuNDg0Mzc1IDYuODkwNjI1IDI2LjcwMzEyNSA2Ljg5MDYyNSBRIDM1LjE1NjI1IDYuODkwNjI1IDQwLjA3ODEyNSAxMS4zMjgxMjUgUSA0NS4wMTU2MjUgMTUuNzY1NjI1IDQ1LjAxNTYyNSAyMy4zOTA2MjUgUSA0NS4wMTU2MjUgMzEgNDAuMDc4MTI1IDM1LjQzNzUgUSAzNS4xNTYyNSAzOS44OTA2MjUgMjYuNzAzMTI1IDM5Ljg5MDYyNSBRIDIyLjc1IDM5Ljg5MDYyNSAxOC44MTI1IDM5LjAxNTYyNSBRIDE0Ljg5MDYyNSAzOC4xNDA2MjUgMTAuNzk2ODc1IDM2LjI4MTI1IHoiIGlkPSJEZWphVnVTYW5zLTUzIi8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjMxNjk0NSAzMS40OTgxNjgpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTAiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MyIvPiAgICA8L2c+ICAgPC9nPiAgIDxnIGlkPSJ0ZXh0XzIiPiAgICA8IS0tIDggLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAzMS43ODEyNSAzNC42MjUgUSAyNC43NSAzNC42MjUgMjAuNzE4NzUgMzAuODU5Mzc1IFEgMTYuNzAzMTI1IDI3LjA5Mzc1IDE2LjcwMzEyNSAyMC41MTU2MjUgUSAxNi43MDMxMjUgMTMuOTIxODc1IDIwLjcxODc1IDEwLjE1NjI1IFEgMjQuNzUgNi4zOTA2MjUgMzEuNzgxMjUgNi4zOTA2MjUgUSAzOC44MTI1IDYuMzkwNjI1IDQyLjg1OTM3NSAxMC4xNzE4NzUgUSA0Ni45MjE4NzUgMTMuOTY4NzUgNDYuOTIxODc1IDIwLjUxNTYyNSBRIDQ2LjkyMTg3NSAyNy4wOTM3NSA0Mi44OTA2MjUgMzAuODU5Mzc1IFEgMzguODc1IDM0LjYyNSAzMS43ODEyNSAzNC42MjUgek0gMjEuOTIxODc1IDM4LjgxMjUgUSAxNS41NzgxMjUgNDAuMzc1IDEyLjAzMTI1IDQ0LjcxODc1IFEgOC41IDQ5LjA3ODEyNSA4LjUgNTUuMzI4MTI1IFEgOC41IDY0LjA2MjUgMTQuNzE4NzUgNjkuMTQwNjI1IFEgMjAuOTUzMTI1IDc0LjIxODc1IDMxLjc4MTI1IDc0LjIxODc1IFEgNDIuNjcxODc1IDc0LjIxODc1IDQ4Ljg3NSA2OS4xNDA2MjUgUSA1NS4wNzgxMjUgNjQuMDYyNSA1NS4wNzgxMjUgNTUuMzI4MTI1IFEgNTUuMDc4MTI1IDQ5LjA3ODEyNSA1MS41MzEyNSA0NC43MTg3NSBRIDQ4IDQwLjM3NSA0MS43MDMxMjUgMzguODEyNSBRIDQ4LjgyODEyNSAzNy4xNTYyNSA1Mi43OTY4NzUgMzIuMzEyNSBRIDU2Ljc4MTI1IDI3LjQ4NDM3NSA1Ni43ODEyNSAyMC41MTU2MjUgUSA1Ni43ODEyNSA5LjkwNjI1IDUwLjMxMjUgNC4yMzQzNzUgUSA0My44NDM3NSAtMS40MjE4NzUgMzEuNzgxMjUgLTEuNDIxODc1IFEgMTkuNzM0Mzc1IC0xLjQyMTg3NSAxMy4yNSA0LjIzNDM3NSBRIDYuNzgxMjUgOS45MDYyNSA2Ljc4MTI1IDIwLjUxNTYyNSBRIDYuNzgxMjUgMjcuNDg0Mzc1IDEwLjc4MTI1IDMyLjMxMjUgUSAxNC43OTY4NzUgMzcuMTU2MjUgMjEuOTIxODc1IDM4LjgxMjUgek0gMTguMzEyNSA1NC4zOTA2MjUgUSAxOC4zMTI1IDQ4LjczNDM3NSAyMS44NDM3NSA0NS41NjI1IFEgMjUuMzkwNjI1IDQyLjM5MDYyNSAzMS43ODEyNSA0Mi4zOTA2MjUgUSAzOC4xNDA2MjUgNDIuMzkwNjI1IDQxLjcxODc1IDQ1LjU2MjUgUSA0NS4zMTI1IDQ4LjczNDM3NSA0NS4zMTI1IDU0LjM5MDYyNSBRIDQ1LjMxMjUgNjAuMDYyNSA0MS43MTg3NSA2My4yMzQzNzUgUSAzOC4xNDA2MjUgNjYuNDA2MjUgMzEuNzgxMjUgNjYuNDA2MjUgUSAyNS4zOTA2MjUgNjYuNDA2MjUgMjEuODQzNzUgNjMuMjM0Mzc1IFEgMTguMzEyNSA2MC4wNjI1IDE4LjMxMjUgNTQuMzkwNjI1IHoiIGlkPSJEZWphVnVTYW5zLTU2Ii8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjk5ODA1NSAzMS4zMzI1ODIpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTYiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTJiNGU4ZDFjODVhNDI5MTgwNWFmMTg0Yzk1Y2YzNTMuc2V0SWNvbihkaXZfaWNvbl8zZmNkNjRmMmIzYWU0MTNiOWRmNGZlODMzNWMxYjQzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNzA4MzVmODZkMTQ0OTY1OGZiMjY2MDAwMTQ3MWRlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMDliMjYwYjc0Y2Q0MmYxYjEyY2ZjZDdkYTExMWM3YSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTA5YjI2MGI3NGNkNDJmMWIxMmNmY2Q3ZGExMTFjN2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj5jb25zb25hbnRzOiAyNTxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNzA4MzVmODZkMTQ0OTY1OGZiMjY2MDAwMTQ3MWRlOC5zZXRDb250ZW50KGh0bWxfZTA5YjI2MGI3NGNkNDJmMWIxMmNmY2Q3ZGExMTFjN2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMmI0ZThkMWM4NWE0MjkxODA1YWYxODRjOTVjZjM1My5iaW5kUG9wdXAocG9wdXBfMDcwODM1Zjg2ZDE0NDk2NThmYjI2NjAwMDE0NzFkZTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jNmZhYmY4NjRhMTU0NDZlYjgxNWJjMzE4N2ZhYWY5NyA9IEwubWFya2VyKAogICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2JkYzQ3ZjIzMDg0NDQzMmE1Njk0MjY3YmU5N2Q3YTIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2Q0ODNmYjk5Y2UzZjQ4N2ViNjRiNGU2NTViZDQwYThkID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyAzOS42OTUzODEgMTQuMjMwODUzIDM3LjA1NTcwNiAxMi42OTI0MDUgMzQuMTU5NTIyIDExLjg5MDkyMyBDIDMxLjI2MzMzOCAxMS4wODk0NDEgMjguMjA4MjkyIDExLjA1MTk0OCAyNS4yOTMzMTEgMTEuNzgyMTEyIEMgMjIuMzc4MzMgMTIuNTEyMjc3IDE5LjcwMTY5NCAxMy45ODU0ODIgMTcuNTI1MzA0IDE2LjA1NzU3NyBDIDE1LjM0ODkxNCAxOC4xMjk2NzMgMTMuNzQ2MTQ4IDIwLjczMDc5OCAxMi44NzM4MzEgMjMuNjA2NDQgQyAxMi4wMDE1MTUgMjYuNDgyMDgyIDExLjg4OTA1OSAyOS41MzUyODggMTIuNTQ3NDY2IDMyLjQ2NzMxIEMgMTMuMjA1ODc0IDM1LjM5OTMzMiAxNC42MTI5NDcgMzguMTExMzE2IDE2LjYzMTAwNyA0MC4zMzc5MDIgQyAxOC42NDkwNjcgNDIuNTY0NDg5IDIxLjIxMDA3NSA0NC4yMzA2MDcgMjQuMDYzNDQzIDQ1LjE3MzIzMyBDIDI2LjkxNjgxMiA0Ni4xMTU4NTggMjkuOTY2MzM4IDQ2LjMwMzIxIDMyLjkxMzYzNSA0NS43MTY5NTYgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi45MTM2MzUgNDUuNzE2OTU2IEMgMzYuMDAyOTE2IDQ1LjEwMjQ2IDM4Ljg2ODA1MiA0My42NjAyNzEgNDEuMjAxOTAyIDQxLjU0NDk5MyBDIDQzLjUzNTc1MiAzOS40Mjk3MTUgNDUuMjUxODI5IDM2LjcxOTczNCA0Ni4xNjYxNjkgMzMuNzA1NTYgQyA0Ny4wODA1MDggMzAuNjkxMzg3IDQ3LjE1OTIyNyAyNy40ODQ3MTggNDYuMzkzODg4IDI0LjQyOTMxMSBDIDQ1LjYyODU0OCAyMS4zNzM5MDQgNDQuMDQ3NTExIDE4LjU4Mjk4MyA0MS44MjAyNjQgMTYuMzU1NzM2IEwgMjkuNTIgMjguNjU2IEwgMzIuOTEzNjM1IDQ1LjcxNjk1NiB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyMSAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgIDxwYXRoIGQ9Ik0gMTIuNDA2MjUgOC4yOTY4NzUgTCAyOC41MTU2MjUgOC4yOTY4NzUgTCAyOC41MTU2MjUgNjMuOTIxODc1IEwgMTAuOTg0Mzc1IDYwLjQwNjI1IEwgMTAuOTg0Mzc1IDY5LjM5MDYyNSBMIDI4LjQyMTg3NSA3Mi45MDYyNSBMIDM4LjI4MTI1IDcyLjkwNjI1IEwgMzguMjgxMjUgOC4yOTY4NzUgTCA1NC4zOTA2MjUgOC4yOTY4NzUgTCA1NC4zOTA2MjUgMCBMIDEyLjQwNjI1IDAgeiIgaWQ9IkRlamFWdVNhbnMtNDkiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuNDY1NzY2IDMwLjQwNTQ2MylzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ5Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gMTEgLS0+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi44NDkyMzQgMzIuNDI1Mjg3KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ5Ii8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNDkiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzZmYWJmODY0YTE1NDQ2ZWI4MTViYzMxODdmYWFmOTcuc2V0SWNvbihkaXZfaWNvbl9kNDgzZmI5OWNlM2Y0ODdlYjY0YjRlNjU1YmQ0MGE4ZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMzhiMWQ3MTU4OWM0MGI1ODJkNWE0ZDY5Mjg3ZTMyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMzg5M2Y3MTk5ZmM0ZWY1YmIzNWU0MTcxZGY0OTc3NyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTM4OTNmNzE5OWZjNGVmNWJiMzVlNDE3MWRmNDk3NzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb3JlMTI4MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb3JlYW48L2E+PGJyPmNvbnNvbmFudHM6IDIxPGJyPnZvd2VsczogMTE8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMzhiMWQ3MTU4OWM0MGI1ODJkNWE0ZDY5Mjg3ZTMyMS5zZXRDb250ZW50KGh0bWxfYTM4OTNmNzE5OWZjNGVmNWJiMzVlNDE3MWRmNDk3NzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNmZhYmY4NjRhMTU0NDZlYjgxNWJjMzE4N2ZhYWY5Ny5iaW5kUG9wdXAocG9wdXBfYzM4YjFkNzE1ODljNDBiNTgyZDVhNGQ2OTI4N2UzMjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mZjg2ZGFiODk2OWU0MTM1OWYwMGI2YmE0NDM4MzgxOSA9IEwubWFya2VyKAogICAgICAgICAgICBbLTExLjYzMDgsIDEzMC45NDg5OTk5OTk5OTk5OF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYmRjNDdmMjMwODQ0NDMyYTU2OTQyNjdiZTk3ZDdhMik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fOTQwOGQwZTJkNTVmNGU5MmE0YzY3YmJmY2ZiZGEwOWUgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDQwLjQ1NDc0NSAxNC45OTAyMTcgMzguODcxMzE4IDEzLjg2MTU3MSAzNy4xMzUwNTcgMTMuMDE2MTgyIEMgMzUuMzk4Nzk2IDEyLjE3MDc5NCAzMy41MzM4MTUgMTEuNjIwNDAzIDMxLjYxNjc2IDExLjM4NzYzMSBDIDI5LjY5OTcwNCAxMS4xNTQ4NTggMjcuNzU3MTk5IDExLjI0MjkzNiAyNS44NjkwNzYgMTEuNjQ4MjQ1IEMgMjMuOTgwOTUzIDEyLjA1MzU1NCAyMi4xNzM0MzUgMTIuNzcwNDY0IDIwLjUyMDgwNSAxMy43Njk1MTQgQyAxOC44NjgxNzUgMTQuNzY4NTYzIDE3LjM5MzM4NyAxNi4wMzU4NzYgMTYuMTU3MDQ5IDE3LjUxOTM3IEMgMTQuOTIwNzExIDE5LjAwMjg2NCAxMy45Mzk5OTUgMjAuNjgxOTM0IDEzLjI1NTIwNSAyMi40ODc1NzcgQyAxMi41NzA0MTUgMjQuMjkzMjIxIDEyLjE5MTA2MiAyNi4yMDAzNTggMTIuMTMyNzM2IDI4LjEzMDYxMyBDIDEyLjA3NDQxIDMwLjA2MDg2NyAxMi4zMzc5MjEgMzEuOTg3NDMgMTIuOTEyNDQgMzMuODMxMTI2IEMgMTMuNDg2OTU5IDM1LjY3NDgyMSAxNC4zNjQ1MDYgMzcuNDEwMDQyIDE1LjUwOTAxNyAzOC45NjU0NzggQyAxNi42NTM1MjggNDAuNTIwOTEzIDE4LjA0OTEwNyA0MS44NzQ5NTkgMTkuNjM4NDAxIDQyLjk3MTk2OSBDIDIxLjIyNzY5NCA0NC4wNjg5NzkgMjIuOTg4NjI4IDQ0Ljg5MzcxNyAyNC44NDg4MzUgNDUuNDEyMjg4IEMgMjYuNzA5MDQyIDQ1LjkzMDg2IDI4LjY0MjY4NCA0Ni4xMzYwNjMgMzAuNTcwMjk3IDQ2LjAxOTQ2MyBDIDMyLjQ5NzkwOSA0NS45MDI4NjQgMzQuMzkyNzE5IDQ1LjQ2NjA4MyAzNi4xNzY4NTYgNDQuNzI3MDY5IEMgMzcuOTYwOTkyIDQzLjk4ODA1NSAzOS42MDk2NzYgNDIuOTU3MDc0IDQxLjA1NTE1MiA0MS42NzY0OTQgQyA0Mi41MDA2MjggNDAuMzk1OTE0IDQzLjcyMjgxOSAzOC44ODM1MjIgNDQuNjcxNDk4IDM3LjIwMTQ3MSBDIDQ1LjYyMDE3OCAzNS41MTk0MjEgNDYuMjgyMTY4IDMzLjY5MTA3NSA0Ni42MzAyNjUgMzEuNzkxNTcxIEwgMjkuNTIgMjguNjU2IEwgNDEuODIwMjY0IDE2LjM1NTczNiB6IiBzdHlsZT0iZmlsbDojMDAyMGMyOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gNDYuNjMwMjY1IDMxLjc5MTU3MSBDIDQ3LjEzNzg3NCAyOS4wMjE2MzggNDYuOTY1MzQ3IDI2LjE2OTQyNiA0Ni4xMjc1NiAyMy40ODA4NzQgQyA0NS4yODk3NzMgMjAuNzkyMzIxIDQzLjgxMTUxOSAxOC4zNDY5OTEgNDEuODIwMjYzIDE2LjM1NTczNSBMIDI5LjUyIDI4LjY1NiBMIDQ2LjYzMDI2NSAzMS43OTE1NzEgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gMjIgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxOS4xODc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDAgTCA3LjMyODEyNSAwIEwgNy4zMjgxMjUgOC4yOTY4NzUgUSAxMi45Mzc1IDE0LjEwOTM3NSAyMi42MjUgMjMuODkwNjI1IFEgMzIuMzI4MTI1IDMzLjY4NzUgMzQuODEyNSAzNi41MzEyNSBRIDM5LjU0Njg3NSA0MS44NDM3NSA0MS40MjE4NzUgNDUuNTMxMjUgUSA0My4zMTI1IDQ5LjIxODc1IDQzLjMxMjUgNTIuNzgxMjUgUSA0My4zMTI1IDU4LjU5Mzc1IDM5LjIzNDM3NSA2Mi4yNSBRIDM1LjE1NjI1IDY1LjkyMTg3NSAyOC42MDkzNzUgNjUuOTIxODc1IFEgMjMuOTY4NzUgNjUuOTIxODc1IDE4LjgxMjUgNjQuMzEyNSBRIDEzLjY3MTg3NSA2Mi43MDMxMjUgNy44MTI1IDU5LjQyMTg3NSBMIDcuODEyNSA2OS4zOTA2MjUgUSAxMy43NjU2MjUgNzEuNzgxMjUgMTguOTM3NSA3MyBRIDI0LjEyNSA3NC4yMTg3NSAyOC40MjE4NzUgNzQuMjE4NzUgUSAzOS43NSA3NC4yMTg3NSA0Ni40ODQzNzUgNjguNTQ2ODc1IFEgNTMuMjE4NzUgNjIuODkwNjI1IDUzLjIxODc1IDUzLjQyMTg3NSBRIDUzLjIxODc1IDQ4LjkyMTg3NSA1MS41MzEyNSA0NC44OTA2MjUgUSA0OS44NTkzNzUgNDAuODc1IDQ1LjQwNjI1IDM1LjQwNjI1IFEgNDQuMTg3NSAzMy45ODQzNzUgMzcuNjQwNjI1IDI3LjIxODc1IFEgMzEuMTA5Mzc1IDIwLjQ1MzEyNSAxOS4xODc1IDguMjk2ODc1IHoiIGlkPSJEZWphVnVTYW5zLTUwIi8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjQ3MzQ4OCAzMi40NTA0KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUwIi8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTAiLz4gICAgPC9nPiAgIDwvZz4gICA8ZyBpZD0idGV4dF8yIj4gICAgPCEtLSA0IC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMzcuNzk2ODc1IDY0LjMxMjUgTCAxMi44OTA2MjUgMjUuMzkwNjI1IEwgMzcuNzk2ODc1IDI1LjM5MDYyNSB6TSAzNS4yMDMxMjUgNzIuOTA2MjUgTCA0Ny42MDkzNzUgNzIuOTA2MjUgTCA0Ny42MDkzNzUgMjUuMzkwNjI1IEwgNTguMDE1NjI1IDI1LjM5MDYyNSBMIDU4LjAxNTYyNSAxNy4xODc1IEwgNDcuNjA5Mzc1IDE3LjE4NzUgTCA0Ny42MDkzNzUgMCBMIDM3Ljc5Njg3NSAwIEwgMzcuNzk2ODc1IDE3LjE4NzUgTCA0Ljg5MDYyNSAxNy4xODc1IEwgNC44OTA2MjUgMjYuNzAzMTI1IHoiIGlkPSJEZWphVnVTYW5zLTUyIi8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjg0MTUxMiAzMC4zODAzNSlzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MiIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mZjg2ZGFiODk2OWU0MTM1OWYwMGI2YmE0NDM4MzgxOS5zZXRJY29uKGRpdl9pY29uXzk0MDhkMGUyZDU1ZjRlOTJhNGM2N2JiZmNmYmRhMDllKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhYWQ0MDhmNzAzMjQ2NDRiZWI1OGQ4NDJhYjBjZjU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4NjkwZjc3NzE1ZjRhYTdhODU4NWEyOGQ1NTAzNjQ1ID0gJChgPGRpdiBpZD0iaHRtbF9lODY5MGY3NzcxNWY0YWE3YTg1ODVhMjhkNTUwMzY0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rpd2kxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpd2k8L2E+PGJyPmNvbnNvbmFudHM6IDIyPGJyPnZvd2VsczogNDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRhYWQ0MDhmNzAzMjQ2NDRiZWI1OGQ4NDJhYjBjZjU0LnNldENvbnRlbnQoaHRtbF9lODY5MGY3NzcxNWY0YWE3YTg1ODVhMjhkNTUwMzY0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZmODZkYWI4OTY5ZTQxMzU5ZjAwYjZiYTQ0MzgzODE5LmJpbmRQb3B1cChwb3B1cF80YWFkNDA4ZjcwMzI0NjQ0YmViNThkODQyYWIwY2Y1NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2RhMzM4MDc4ZjMyNzRhMWI4MGUxZWU0MThjMjE3YWU1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs2LjkyMDQ4LCAtOS45NjEyOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYmRjNDdmMjMwODQ0NDMyYTU2OTQyNjdiZTk3ZDdhMik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fZmEyODU0Njg3MTkzNDJiMWFkNjg0ODFhMWVkZWI1NzkgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDM5LjcyNTQ1OCAxNC4yNjA5MyAzNy4xMjk4MzMgMTIuNzM1NTc4IDM0LjI4MDQyMiAxMS45MjQ4NSBDIDMxLjQzMTAxMSAxMS4xMTQxMjMgMjguNDIxMTcyIDExLjA0NDU4NCAyNS41MzczNTkgMTEuNzIyODUgQyAyMi42NTM1NDYgMTIuNDAxMTE3IDE5Ljk5MDI0NSAxMy44MDQ5NjcgMTcuODAwOTI5IDE1LjgwMDc5MyBDIDE1LjYxMTYxMyAxNy43OTY2MTggMTMuOTY4MDEzIDIwLjMxOTAyNyAxMy4wMjY1NTYgMjMuMTI3OTU2IEMgMTIuMDg1MDk4IDI1LjkzNjg4NCAxMS44NzY2MjggMjguOTQwMzAxIDEyLjQyMDk4NyAzMS44NTIzNjEgQyAxMi45NjUzNDUgMzQuNzY0NDIxIDE0LjI0NDY5NyAzNy40ODk3MTYgMTYuMTM3MjgzIDM5Ljc2ODg2OSBDIDE4LjAyOTg2OCA0Mi4wNDgwMjMgMjAuNDczNjc5IDQzLjgwNjM2MyAyMy4yMzYxMzEgNDQuODc2NTQyIEMgMjUuOTk4NTgyIDQ1Ljk0NjcyMSAyOC45ODkxNjYgNDYuMjkzNjc2IDMxLjkyMzI2IDQ1Ljg4NDM4NyBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMxLjkyMzI2IDQ1Ljg4NDM4NyBDIDM1LjEyNzMwMyA0NS40Mzc0NDIgMzguMTQ0MDI0IDQ0LjEwNTQyOSA0MC42MzI4NyA0Mi4wMzg3MTcgQyA0My4xMjE3MTYgMzkuOTcyMDA1IDQ0Ljk4NTM2OSAzNy4yNTE0MDUgNDYuMDEzNDQ1IDM0LjE4NDA0MyBDIDQ3LjA0MTUyMSAzMS4xMTY2OCA0Ny4xOTM4MiAyNy44MjI0OTMgNDYuNDUzMTQ5IDI0LjY3MzM1NiBDIDQ1LjcxMjQ3OCAyMS41MjQyMiA0NC4xMDc3OTkgMTguNjQzMjcgNDEuODIwMjYyIDE2LjM1NTczNCBMIDI5LjUyIDI4LjY1NiBMIDMxLjkyMzI2IDQ1Ljg4NDM4NyB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyMiAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuNDk2MzExIDMwLjMwOTc2NilzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUwIi8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gMTIgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi44MTg2ODkgMzIuNTIwOTg0KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ5Ii8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTAiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGEzMzgwNzhmMzI3NGExYjgwZTFlZTQxOGMyMTdhZTUuc2V0SWNvbihkaXZfaWNvbl9mYTI4NTQ2ODcxOTM0MmIxYWQ2ODQ4MWExZWRlYjU3OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MjU5ODViZTMzM2E0MzMzOGY5YTE5ZjE4OTE4NDE5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MTcxYWIxNmUyYTc0ZTIzYjBhNGEyNWJhODY4M2Y0OCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTE3MWFiMTZlMmE3NGUyM2IwYTRhMjViYTg2ODNmNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9saWJlMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MaWJlcmlhIEtwZWxsZTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiAxMjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyNTk4NWJlMzMzYTQzMzM4ZjlhMTlmMTg5MTg0MTk1LnNldENvbnRlbnQoaHRtbF85MTcxYWIxNmUyYTc0ZTIzYjBhNGEyNWJhODY4M2Y0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RhMzM4MDc4ZjMyNzRhMWI4MGUxZWU0MThjMjE3YWU1LmJpbmRQb3B1cChwb3B1cF82MjU5ODViZTMzM2E0MzMzOGY5YTE5ZjE4OTE4NDE5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzkxMGM5M2E1NDIwOTQxNjk5MzJmMTY3NzYzOWE0ZTFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxMi44MTE0LCA3NS4yNjUxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NiZGM0N2YyMzA4NDQ0MzJhNTY5NDI2N2JlOTdkN2EyKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl81NTQxMTIzNTdlZmY0YjU1OTMwMzFhNDVkZTA5NmEyZSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgMzkuNzIwMjU3IDE0LjI1NTcyOSAzNy4xMTcwMjcgMTIuNzI4MDkzIDM0LjI1OTUyOCAxMS45MTg5MiBDIDMxLjQwMjAyOSAxMS4xMDk3NDcgMjguMzg0MzUyIDExLjA0NTY4MSAyNS40OTUwODYgMTEuNzMyODQ5IEMgMjIuNjA1ODE5IDEyLjQyMDAxNyAxOS45NDAxIDEzLjgzNTc5MiAxNy43NTI4NTggMTUuODQ0NzggQyAxNS41NjU2MTYgMTcuODUzNzY4IDEzLjkyODg3MiAyMC4zODk4MTggMTIuOTk5MTUyIDIzLjIxMDQgQyAxMi4wNjk0MzIgMjYuMDMwOTgxIDExLjg3NzM1IDI5LjA0MzIyIDEyLjQ0MTI3NSAzMS45NTkwNDggQyAxMy4wMDUxOTkgMzQuODc0ODc1IDE0LjMwNjU2MyAzNy41OTgyOCAxNi4yMjA5MTEgMzkuODY4ODE1IEMgMTguMTM1MjYgNDIuMTM5MzUgMjAuNTk5NTU5IDQzLjg4MjI1MyAyMy4zNzgxNDEgNDQuOTMwODQ0IEMgMjYuMTU2NzIyIDQ1Ljk3OTQzNSAyOS4xNTgwOTUgNDYuMjk5MTg4IDMyLjA5NTIyOSA0NS44NTk1MjIgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi4wOTUyMjkgNDUuODU5NTIyIEMgMzUuMjgwMDU2IDQ1LjM4Mjc3OSAzOC4yNzA4MDEgNDQuMDMwODc4IDQwLjczMjgxNCA0MS45NTUwODkgQyA0My4xOTQ4MjggMzkuODc5MzAxIDQ1LjAzMjcyMyAzNy4xNjAwNDggNDYuMDQwODQ4IDM0LjEwMTYwMiBDIDQ3LjA0ODk3MyAzMS4wNDMxNTYgNDcuMTg4MjcgMjcuNzY0MDExIDQ2LjQ0MzE1MiAyNC42MzEwODggQyA0NS42OTgwMzQgMjEuNDk4MTY1IDQ0LjA5NzM3IDE4LjYzMjg0MyA0MS44MjAyNjYgMTYuMzU1NzM4IEwgMjkuNTIgMjguNjU2IEwgMzIuMDk1MjI5IDQ1Ljg1OTUyMiB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyNCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgIDxwYXRoIGQ9Ik0gMzcuNzk2ODc1IDY0LjMxMjUgTCAxMi44OTA2MjUgMjUuMzkwNjI1IEwgMzcuNzk2ODc1IDI1LjM5MDYyNSB6TSAzNS4yMDMxMjUgNzIuOTA2MjUgTCA0Ny42MDkzNzUgNzIuOTA2MjUgTCA0Ny42MDkzNzUgMjUuMzkwNjI1IEwgNTguMDE1NjI1IDI1LjM5MDYyNSBMIDU4LjAxNTYyNSAxNy4xODc1IEwgNDcuNjA5Mzc1IDE3LjE4NzUgTCA0Ny42MDkzNzUgMCBMIDM3Ljc5Njg3NSAwIEwgMzcuNzk2ODc1IDE3LjE4NzUgTCA0Ljg5MDYyNSAxNy4xODc1IEwgNC44OTA2MjUgMjYuNzAzMTI1IHoiIGlkPSJEZWphVnVTYW5zLTUyIi8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjQ5MDgzIDMwLjMyNjI1NSlzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUyIi8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gMTMgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICAgPHBhdGggZD0iTSA0MC41NzgxMjUgMzkuMzEyNSBRIDQ3LjY1NjI1IDM3Ljc5Njg3NSA1MS42MjUgMzMgUSA1NS42MDkzNzUgMjguMjE4NzUgNTUuNjA5Mzc1IDIxLjE4NzUgUSA1NS42MDkzNzUgMTAuNDA2MjUgNDguMTg3NSA0LjQ4NDM3NSBRIDQwLjc2NTYyNSAtMS40MjE4NzUgMjcuMDkzNzUgLTEuNDIxODc1IFEgMjIuNTE1NjI1IC0xLjQyMTg3NSAxNy42NTYyNSAtMC41MTU2MjUgUSAxMi43OTY4NzUgMC4zOTA2MjUgNy42MjUgMi4yMDMxMjUgTCA3LjYyNSAxMS43MTg3NSBRIDExLjcxODc1IDkuMzI4MTI1IDE2LjU5Mzc1IDguMTA5Mzc1IFEgMjEuNDg0Mzc1IDYuODkwNjI1IDI2LjgxMjUgNi44OTA2MjUgUSAzNi4wNzgxMjUgNi44OTA2MjUgNDAuOTM3NSAxMC41NDY4NzUgUSA0NS43OTY4NzUgMTQuMjAzMTI1IDQ1Ljc5Njg3NSAyMS4xODc1IFEgNDUuNzk2ODc1IDI3LjY0MDYyNSA0MS4yODEyNSAzMS4yNjU2MjUgUSAzNi43NjU2MjUgMzQuOTA2MjUgMjguNzE4NzUgMzQuOTA2MjUgTCAyMC4yMTg3NSAzNC45MDYyNSBMIDIwLjIxODc1IDQzLjAxNTYyNSBMIDI5LjEwOTM3NSA0My4wMTU2MjUgUSAzNi4zNzUgNDMuMDE1NjI1IDQwLjIzNDM3NSA0NS45MjE4NzUgUSA0NC4wOTM3NSA0OC44MjgxMjUgNDQuMDkzNzUgNTQuMjk2ODc1IFEgNDQuMDkzNzUgNTkuOTA2MjUgNDAuMTA5Mzc1IDYyLjkwNjI1IFEgMzYuMTQwNjI1IDY1LjkyMTg3NSAyOC43MTg3NSA2NS45MjE4NzUgUSAyNC42NTYyNSA2NS45MjE4NzUgMjAuMDE1NjI1IDY1LjAzMTI1IFEgMTUuMzc1IDY0LjE1NjI1IDkuODEyNSA2Mi4zMTI1IEwgOS44MTI1IDcxLjA5Mzc1IFEgMTUuNDM3NSA3Mi42NTYyNSAyMC4zNDM3NSA3My40Mzc1IFEgMjUuMjUgNzQuMjE4NzUgMjkuNTkzNzUgNzQuMjE4NzUgUSA0MC44MjgxMjUgNzQuMjE4NzUgNDcuMzU5Mzc1IDY5LjEwOTM3NSBRIDUzLjkwNjI1IDY0LjAxNTYyNSA1My45MDYyNSA1NS4zMjgxMjUgUSA1My45MDYyNSA0OS4yNjU2MjUgNTAuNDM3NSA0NS4wOTM3NSBRIDQ2Ljk2ODc1IDQwLjkyMTg3NSA0MC41NzgxMjUgMzkuMzEyNSB6IiBpZD0iRGVqYVZ1U2Fucy01MSIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi44MjQxNyAzMi41MDQ0OTUpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNDkiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MSIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85MTBjOTNhNTQyMDk0MTY5OTMyZjE2Nzc2MzlhNGUxYy5zZXRJY29uKGRpdl9pY29uXzU1NDExMjM1N2VmZjRiNTU5MzAzMWE0NWRlMDk2YTJlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRjNTBjYmZjNGNmZDRmMzQ5MWJjNjJkYjRjNTRkMGY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4OTQ5ZmFhNzgzYTQ2MDc4NDJmNzViZTBjNDlmMTFkID0gJChgPGRpdiBpZD0iaHRtbF85ODk0OWZhYTc4M2E0NjA3ODQyZjc1YmUwYzQ5ZjExZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3R1bHUxMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1bHU8L2E+PGJyPmNvbnNvbmFudHM6IDI0PGJyPnZvd2VsczogMTM8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YzUwY2JmYzRjZmQ0ZjM0OTFiYzYyZGI0YzU0ZDBmNC5zZXRDb250ZW50KGh0bWxfOTg5NDlmYWE3ODNhNDYwNzg0MmY3NWJlMGM0OWYxMWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MTBjOTNhNTQyMDk0MTY5OTMyZjE2Nzc2MzlhNGUxYy5iaW5kUG9wdXAocG9wdXBfNGM1MGNiZmM0Y2ZkNGYzNDkxYmM2MmRiNGM1NGQwZjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mYjMwOGZjNjU2OTk0M2RhYWM2NjQwNmFlMzBhZTdiOCA9IEwubWFya2VyKAogICAgICAgICAgICBbLTM4LjczOTIsIC03MS4yNzddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2JkYzQ3ZjIzMDg0NDQzMmE1Njk0MjY3YmU5N2Q3YTIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzg0ZGQ5ZGE2YmQxZjRlMjY5NjcwZThiMDc4YzkxMGU2ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyA0MC41NzkzNzUgMTUuMTE0ODQ3IDM5LjE1NzgyMyAxNC4wNjg4NSAzNy42MDM5NTIgMTMuMjUzMzE1IEMgMzYuMDUwMDgyIDEyLjQzNzc4MSAzNC4zODE3MDkgMTEuODYyMDYxIDMyLjY1NTU3MiAxMS41NDU3MzUgQyAzMC45Mjk0MzYgMTEuMjI5NDA5IDI5LjE2NTMyNyAxMS4xNzYxMDMgMjcuNDIzMjQgMTEuMzg3NjMxIEMgMjUuNjgxMTUzIDExLjU5OTE1OCAyMy45ODEwNjMgMTIuMDczMDk0IDIyLjM4MDc4NyAxMi43OTMzMiBDIDIwLjc4MDUxIDEzLjUxMzU0NiAxOS4yOTgzOTYgMTQuNDcxODA0IDE3Ljk4NDg0OCAxNS42MzU1MDYgQyAxNi42NzEzMDEgMTYuNzk5MjA4IDE1LjU0MTM4IDE4LjE1NTAxMSAxNC42MzM1MTMgMTkuNjU2ODA2IEMgMTMuNzI1NjQ3IDIxLjE1ODYwMSAxMy4wNTAyNDMgMjIuNzg5MTY5IDEyLjYzMDI3MyAyNC40OTMwNTcgQyAxMi4yMTAzMDIgMjYuMTk2OTQ1IDEyLjA1MDU3OSAyNy45NTQ2MTcgMTIuMTU2NTM3IDI5LjcwNjI5NyBDIDEyLjI2MjQ5NCAzMS40NTc5NzcgMTIuNjMyOTE2IDMzLjE4MzU4MSAxMy4yNTUyMDYgMzQuODI0NDI0IEMgMTMuODc3NDk2IDM2LjQ2NTI2NyAxNC43NDQ1MTggMzguMDAyNTM1IDE1LjgyNjc4NiAzOS4zODM5NDkgQyAxNi45MDkwNTUgNDAuNzY1MzYzIDE4LjE5NDE2MSA0MS45NzUwODMgMTkuNjM4NDAxIDQyLjk3MTk3IEMgMjEuMDgyNjQgNDMuOTY4ODU2IDIyLjY2OTQ1NCA0NC43NDE0NzggMjQuMzQ0ODc2IDQ1LjI2MzU2MSBDIDI2LjAyMDI5OCA0NS43ODU2NDMgMjcuNzY1MTE5IDQ2LjA1MTIgMjkuNTIwMDAxIDQ2LjA1MTIgQyAzMS4yNzQ4ODMgNDYuMDUxMiAzMy4wMTk3MDQgNDUuNzg1NjQzIDM0LjY5NTEyNiA0NS4yNjM1NiBDIDM2LjM3MDU0OSA0NC43NDE0NzcgMzcuOTU3MzYyIDQzLjk2ODg1NSAzOS40MDE2MDEgNDIuOTcxOTY4IEMgNDAuODQ1ODQgNDEuOTc1MDgyIDQyLjEzMDk0NiA0MC43NjUzNjEgNDMuMjEzMjE1IDM5LjM4Mzk0NyBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDQzLjIxMzIxNSAzOS4zODM5NDcgQyA0NS44MzM3ODEgMzYuMDM5MDQxIDQ3LjE0MDAyNCAzMS44NDcxNTcgNDYuODgzNDYzIDI3LjYwNTcwMiBDIDQ2LjYyNjkwMiAyMy4zNjQyNDggNDQuODI0OTA2IDE5LjM2MDM3OCA0MS44MjAyNjMgMTYuMzU1NzM1IEwgMjkuNTIgMjguNjU2IEwgNDMuMjEzMjE1IDM5LjM4Mzk0NyB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyMCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgIDxwYXRoIGQ9Ik0gMzEuNzgxMjUgNjYuNDA2MjUgUSAyNC4xNzE4NzUgNjYuNDA2MjUgMjAuMzI4MTI1IDU4LjkwNjI1IFEgMTYuNSA1MS40MjE4NzUgMTYuNSAzNi4zNzUgUSAxNi41IDIxLjM5MDYyNSAyMC4zMjgxMjUgMTMuODkwNjI1IFEgMjQuMTcxODc1IDYuMzkwNjI1IDMxLjc4MTI1IDYuMzkwNjI1IFEgMzkuNDUzMTI1IDYuMzkwNjI1IDQzLjI4MTI1IDEzLjg5MDYyNSBRIDQ3LjEyNSAyMS4zOTA2MjUgNDcuMTI1IDM2LjM3NSBRIDQ3LjEyNSA1MS40MjE4NzUgNDMuMjgxMjUgNTguOTA2MjUgUSAzOS40NTMxMjUgNjYuNDA2MjUgMzEuNzgxMjUgNjYuNDA2MjUgek0gMzEuNzgxMjUgNzQuMjE4NzUgUSA0NC4wNDY4NzUgNzQuMjE4NzUgNTAuNTE1NjI1IDY0LjUxNTYyNSBRIDU2Ljk4NDM3NSA1NC44MjgxMjUgNTYuOTg0Mzc1IDM2LjM3NSBRIDU2Ljk4NDM3NSAxNy45Njg3NSA1MC41MTU2MjUgOC4yNjU2MjUgUSA0NC4wNDY4NzUgLTEuNDIxODc1IDMxLjc4MTI1IC0xLjQyMTg3NSBRIDE5LjUzMTI1IC0xLjQyMTg3NSAxMy4wNjI1IDguMjY1NjI1IFEgNi41OTM3NSAxNy45Njg3NSA2LjU5Mzc1IDM2LjM3NSBRIDYuNTkzNzUgNTQuODI4MTI1IDEzLjA2MjUgNjQuNTE1NjI1IFEgMTkuNTMxMjUgNzQuMjE4NzUgMzEuNzgxMjUgNzQuMjE4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNDgiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuMzIyMzA3IDMxLjYyNTQzNClzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ4Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gNiAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDMzLjAxNTYyNSA0MC4zNzUgUSAyNi4zNzUgNDAuMzc1IDIyLjQ4NDM3NSAzNS44MjgxMjUgUSAxOC42MDkzNzUgMzEuMjk2ODc1IDE4LjYwOTM3NSAyMy4zOTA2MjUgUSAxOC42MDkzNzUgMTUuNTMxMjUgMjIuNDg0Mzc1IDEwLjk1MzEyNSBRIDI2LjM3NSA2LjM5MDYyNSAzMy4wMTU2MjUgNi4zOTA2MjUgUSAzOS42NTYyNSA2LjM5MDYyNSA0My41MzEyNSAxMC45NTMxMjUgUSA0Ny40MDYyNSAxNS41MzEyNSA0Ny40MDYyNSAyMy4zOTA2MjUgUSA0Ny40MDYyNSAzMS4yOTY4NzUgNDMuNTMxMjUgMzUuODI4MTI1IFEgMzkuNjU2MjUgNDAuMzc1IDMzLjAxNTYyNSA0MC4zNzUgek0gNTIuNTkzNzUgNzEuMjk2ODc1IEwgNTIuNTkzNzUgNjIuMzEyNSBRIDQ4Ljg3NSA2NC4wNjI1IDQ1LjA5Mzc1IDY0Ljk4NDM3NSBRIDQxLjMxMjUgNjUuOTIxODc1IDM3LjU5Mzc1IDY1LjkyMTg3NSBRIDI3LjgyODEyNSA2NS45MjE4NzUgMjIuNjcxODc1IDU5LjMyODEyNSBRIDE3LjUzMTI1IDUyLjczNDM3NSAxNi43OTY4NzUgMzkuNDA2MjUgUSAxOS42NzE4NzUgNDMuNjU2MjUgMjQuMDE1NjI1IDQ1LjkyMTg3NSBRIDI4LjM3NSA0OC4xODc1IDMzLjU5Mzc1IDQ4LjE4NzUgUSA0NC41NzgxMjUgNDguMTg3NSA1MC45NTMxMjUgNDEuNTE1NjI1IFEgNTcuMzI4MTI1IDM0Ljg1OTM3NSA1Ny4zMjgxMjUgMjMuMzkwNjI1IFEgNTcuMzI4MTI1IDEyLjE1NjI1IDUwLjY4NzUgNS4zNTkzNzUgUSA0NC4wNDY4NzUgLTEuNDIxODc1IDMzLjAxNTYyNSAtMS40MjE4NzUgUSAyMC4zNTkzNzUgLTEuNDIxODc1IDEzLjY3MTg3NSA4LjI2NTYyNSBRIDYuOTg0Mzc1IDE3Ljk2ODc1IDYuOTg0Mzc1IDM2LjM3NSBRIDYuOTg0Mzc1IDUzLjY1NjI1IDE1LjE4NzUgNjMuOTM3NSBRIDIzLjM5MDYyNSA3NC4yMTg3NSAzNy4yMDMxMjUgNzQuMjE4NzUgUSA0MC45MjE4NzUgNzQuMjE4NzUgNDQuNzAzMTI1IDczLjQ4NDM3NSBRIDQ4LjQ4NDM3NSA3Mi43NSA1Mi41OTM3NSA3MS4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTQiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuOTkyNjkzIDMxLjIwNTMxNSlzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01NCIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mYjMwOGZjNjU2OTk0M2RhYWM2NjQwNmFlMzBhZTdiOC5zZXRJY29uKGRpdl9pY29uXzg0ZGQ5ZGE2YmQxZjRlMjY5NjcwZThiMDc4YzkxMGU2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwMDJkMjk3NzJhNDQyMDY4NWViODUyZTRjZDU1NGM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2MGUyZWM1OWEwMzRkZDRhNTc4NWQ1NWM1ZTkzNTYwID0gJChgPGRpdiBpZD0iaHRtbF9kNjBlMmVjNTlhMDM0ZGQ0YTU3ODVkNTVjNWU5MzU2MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hcHUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcHVkdW5ndW48L2E+PGJyPmNvbnNvbmFudHM6IDIwPGJyPnZvd2VsczogNjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwMDJkMjk3NzJhNDQyMDY4NWViODUyZTRjZDU1NGM2LnNldENvbnRlbnQoaHRtbF9kNjBlMmVjNTlhMDM0ZGQ0YTU3ODVkNTVjNWU5MzU2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZiMzA4ZmM2NTY5OTQzZGFhYzY2NDA2YWUzMGFlN2I4LmJpbmRQb3B1cChwb3B1cF82MDAyZDI5NzcyYTQ0MjA2ODVlYjg1MmU0Y2Q1NTRjNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzY5N2E1OTZmNmEyZjRhNGVhMWE1ZDFhZGFjNjY1ZDk0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNC45NDAzLCAtOTguOTA0Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYmRjNDdmMjMwODQ0NDMyYTU2OTQyNjdiZTk3ZDdhMik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fZDIxYzgxNDU0Mzg2NDk4Mzk2NGI1ZjA0MGU3ZjczNjUgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDQwLjEyNzU2NiAxNC42NjMwMzkgMzguMTAzNTM5IDEzLjMzNzgzMSAzNS44NzUxOCAxMi40NjMyNjUgQyAzMy42NDY4MjEgMTEuNTg4Njk4IDMxLjI2MTczNCAxMS4xODM0NTYgMjguODY5NTcyIDExLjI3Mjk2NCBDIDI2LjQ3NzQxIDExLjM2MjQ3MyAyNC4xMjkyNzYgMTEuOTQ0ODIgMjEuOTcyNTA1IDEyLjk4MzQ2NyBDIDE5LjgxNTczMyAxNC4wMjIxMTMgMTcuODk2Mzk4IDE1LjQ5NDg3MSAxNi4zMzQ5MjkgMTcuMzA5MzMxIEMgMTQuNzczNDYxIDE5LjEyMzc5MSAxMy42MDMyMTUgMjEuMjQxMTkyIDEyLjg5NzYxOSAyMy41Mjg2NzcgQyAxMi4xOTIwMjQgMjUuODE2MTYxIDExLjk2NjE1MyAyOC4yMjQ4NjMgMTIuMjM0MTc4IDMwLjYwMzY0NyBDIDEyLjUwMjIwMyAzMi45ODI0MyAxMy4yNTgzOTggMzUuMjgwNDggMTQuNDU1MzE2IDM3LjM1MzYwMiBDIDE1LjY1MjIzNCAzOS40MjY3MjUgMTcuMjY0MzA2IDQxLjIzMDYzNCAxOS4xOTAzODIgNDIuNjUyMTQxIEwgMjkuNTIgMjguNjU2IEwgNDEuODIwMjY0IDE2LjM1NTczNiB6IiBzdHlsZT0iZmlsbDojMDAyMGMyOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMTkuMTkwMzgyIDQyLjY1MjE0MSBDIDIyLjcyMDIyMSA0NS4yNTcyOCAyNy4xMDgxNDcgNDYuNDMzMDIxIDMxLjQ2NzY0OCA0NS45NDE4MjIgQyAzNS44MjcxNDggNDUuNDUwNjI0IDM5Ljg0MzQzMiA0My4zMjc5NTUgNDIuNzA1MDcyIDQwLjAwMjY2OCBDIDQ1LjU2NjcxMiAzNi42NzczOCA0Ny4wNjcwNzUgMzIuMzg5NTg3IDQ2LjkwMzAzNSAyOC4wMDU1NjkgQyA0Ni43Mzg5OTYgMjMuNjIxNTUyIDQ0LjkyMjQgMTkuNDU3ODcxIDQxLjgyMDI2MiAxNi4zNTU3MzQgTCAyOS41MiAyOC42NTYgTCAxOS4xOTAzODIgNDIuNjUyMTQxIHoiIHN0eWxlPSJmaWxsOiNjMjIwMDA7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgIDxnIGlkPSJ0ZXh0XzEiPiAgICA8IS0tIDIyIC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMTkuMTg3NSA4LjI5Njg3NSBMIDUzLjYwOTM3NSA4LjI5Njg3NSBMIDUzLjYwOTM3NSAwIEwgNy4zMjgxMjUgMCBMIDcuMzI4MTI1IDguMjk2ODc1IFEgMTIuOTM3NSAxNC4xMDkzNzUgMjIuNjI1IDIzLjg5MDYyNSBRIDMyLjMyODEyNSAzMy42ODc1IDM0LjgxMjUgMzYuNTMxMjUgUSAzOS41NDY4NzUgNDEuODQzNzUgNDEuNDIxODc1IDQ1LjUzMTI1IFEgNDMuMzEyNSA0OS4yMTg3NSA0My4zMTI1IDUyLjc4MTI1IFEgNDMuMzEyNSA1OC41OTM3NSAzOS4yMzQzNzUgNjIuMjUgUSAzNS4xNTYyNSA2NS45MjE4NzUgMjguNjA5Mzc1IDY1LjkyMTg3NSBRIDIzLjk2ODc1IDY1LjkyMTg3NSAxOC44MTI1IDY0LjMxMjUgUSAxMy42NzE4NzUgNjIuNzAzMTI1IDcuODEyNSA1OS40MjE4NzUgTCA3LjgxMjUgNjkuMzkwNjI1IFEgMTMuNzY1NjI1IDcxLjc4MTI1IDE4LjkzNzUgNzMgUSAyNC4xMjUgNzQuMjE4NzUgMjguNDIxODc1IDc0LjIxODc1IFEgMzkuNzUgNzQuMjE4NzUgNDYuNDg0Mzc1IDY4LjU0Njg3NSBRIDUzLjIxODc1IDYyLjg5MDYyNSA1My4yMTg3NSA1My40MjE4NzUgUSA1My4yMTg3NSA0OC45MjE4NzUgNTEuNTMxMjUgNDQuODkwNjI1IFEgNDkuODU5Mzc1IDQwLjg3NSA0NS40MDYyNSAzNS40MDYyNSBRIDQ0LjE4NzUgMzMuOTg0Mzc1IDM3LjY0MDYyNSAyNy4yMTg3NSBRIDMxLjEwOTM3NSAyMC40NTMxMjUgMTkuMTg3NSA4LjI5Njg3NSB6IiBpZD0iRGVqYVZ1U2Fucy01MCIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNC4xNTc5ODYgMjkuMTQ2MDQxKXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUwIi8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTAiLz4gICAgPC9nPiAgIDwvZz4gICA8ZyBpZD0idGV4dF8yIj4gICAgPCEtLSAyMCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDMxLjc4MTI1IDY2LjQwNjI1IFEgMjQuMTcxODc1IDY2LjQwNjI1IDIwLjMyODEyNSA1OC45MDYyNSBRIDE2LjUgNTEuNDIxODc1IDE2LjUgMzYuMzc1IFEgMTYuNSAyMS4zOTA2MjUgMjAuMzI4MTI1IDEzLjg5MDYyNSBRIDI0LjE3MTg3NSA2LjM5MDYyNSAzMS43ODEyNSA2LjM5MDYyNSBRIDM5LjQ1MzEyNSA2LjM5MDYyNSA0My4yODEyNSAxMy44OTA2MjUgUSA0Ny4xMjUgMjEuMzkwNjI1IDQ3LjEyNSAzNi4zNzUgUSA0Ny4xMjUgNTEuNDIxODc1IDQzLjI4MTI1IDU4LjkwNjI1IFEgMzkuNDUzMTI1IDY2LjQwNjI1IDMxLjc4MTI1IDY2LjQwNjI1IHpNIDMxLjc4MTI1IDc0LjIxODc1IFEgNDQuMDQ2ODc1IDc0LjIxODc1IDUwLjUxNTYyNSA2NC41MTU2MjUgUSA1Ni45ODQzNzUgNTQuODI4MTI1IDU2Ljk4NDM3NSAzNi4zNzUgUSA1Ni45ODQzNzUgMTcuOTY4NzUgNTAuNTE1NjI1IDguMjY1NjI1IFEgNDQuMDQ2ODc1IC0xLjQyMTg3NSAzMS43ODEyNSAtMS40MjE4NzUgUSAxOS41MzEyNSAtMS40MjE4NzUgMTMuMDYyNSA4LjI2NTYyNSBRIDYuNTkzNzUgMTcuOTY4NzUgNi41OTM3NSAzNi4zNzUgUSA2LjU5Mzc1IDU0LjgyODEyNSAxMy4wNjI1IDY0LjUxNTYyNSBRIDE5LjUzMTI1IDc0LjIxODc1IDMxLjc4MTI1IDc0LjIxODc1IHoiIGlkPSJEZWphVnVTYW5zLTQ4Ii8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjE1NzAxNCAzMy42ODQ3MDkpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTAiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy00OCIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82OTdhNTk2ZjZhMmY0YTRlYTFhNWQxYWRhYzY2NWQ5NC5zZXRJY29uKGRpdl9pY29uX2QyMWM4MTQ1NDM4NjQ5ODM5NjRiNWYwNDBlN2Y3MzY1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3YTMyM2U2MzcwNjRiMGFiMGIxNGViZTE2NDJhYjc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyODk4ZWNmNzJkYjRhYTk4MTE0ZTRjYzFhZGQyYzZhID0gJChgPGRpdiBpZD0iaHRtbF8xMjg5OGVjZjcyZGI0YWE5ODExNGU0Y2MxYWRkMmM2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tpb3cxMjY2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktpb3dhPC9hPjxicj5jb25zb25hbnRzOiAyMjxicj52b3dlbHM6IDIwPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjdhMzIzZTYzNzA2NGIwYWIwYjE0ZWJlMTY0MmFiNzguc2V0Q29udGVudChodG1sXzEyODk4ZWNmNzJkYjRhYTk4MTE0ZTRjYzFhZGQyYzZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjk3YTU5NmY2YTJmNGE0ZWExYTVkMWFkYWM2NjVkOTQuYmluZFBvcHVwKHBvcHVwXzY3YTMyM2U2MzcwNjRiMGFiMGIxNGViZTE2NDJhYjc4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfY2E2YzkzODBhZmMzNDMzZmJkYmIzYmU3MzFiNmUxMDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NiZGM0N2YyMzA4NDQ0MzJhNTY5NDI2N2JlOTdkN2EyKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9kZTRhZjVkNTkwMGE0ZDI0YjdhY2Y4MDI3ZTY4MTk2ZCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgMzkuMzg3NzkzIDEzLjkyMzI2NSAzNi4yODc1NyAxMi4yNjYxNjEgMzIuOTEzNjM1IDExLjU5NTA0NCBDIDI5LjUzOTcwMSAxMC45MjM5MjcgMjYuMDQxMzIyIDExLjI2ODQ4NyAyMi44NjMxNDUgMTIuNTg0OTMxIEMgMTkuNjg0OTY4IDEzLjkwMTM3NSAxNi45Njc2IDE2LjEzMTQ2MSAxNS4wNTY0MiAxOC45OTE3NDUgQyAxMy4xNDUyMzkgMjEuODUyMDI4IDEyLjEyNDggMjUuMjE1OTY2IDEyLjEyNDggMjguNjU2IEMgMTIuMTI0OCAzMi4wOTYwMzQgMTMuMTQ1MjM5IDM1LjQ1OTk3MiAxNS4wNTY0MiAzOC4zMjAyNTUgQyAxNi45Njc2IDQxLjE4MDUzOSAxOS42ODQ5NjggNDMuNDEwNjI1IDIyLjg2MzE0NSA0NC43MjcwNjkgQyAyNi4wNDEzMjIgNDYuMDQzNTEzIDI5LjUzOTcwMSA0Ni4zODgwNzMgMzIuOTEzNjM1IDQ1LjcxNjk1NiBDIDM2LjI4NzU3IDQ1LjA0NTgzOSAzOS4zODc3OTMgNDMuMzg4NzM1IDQxLjgyMDI2NCA0MC45NTYyNjQgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgNDAuOTU2MjY0IEMgNDUuMDgxMjQ2IDM3LjY5NTI4MiA0Ni45MTUyIDMzLjI2NzcyNSA0Ni45MTUyIDI4LjY1NiBDIDQ2LjkxNTIgMjQuMDQ0Mjc1IDQ1LjA4MTI0NiAxOS42MTY3MTggNDEuODIwMjY0IDE2LjM1NTczNiBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCA0MC45NTYyNjQgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gMTUgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICAgPHBhdGggZD0iTSAxMC43OTY4NzUgNzIuOTA2MjUgTCA0OS41MTU2MjUgNzIuOTA2MjUgTCA0OS41MTU2MjUgNjQuNTkzNzUgTCAxOS44MjgxMjUgNjQuNTkzNzUgTCAxOS44MjgxMjUgNDYuNzM0Mzc1IFEgMjEuOTY4NzUgNDcuNDY4NzUgMjQuMTA5Mzc1IDQ3LjgyODEyNSBRIDI2LjI2NTYyNSA0OC4xODc1IDI4LjQyMTg3NSA0OC4xODc1IFEgNDAuNjI1IDQ4LjE4NzUgNDcuNzUgNDEuNSBRIDU0Ljg5MDYyNSAzNC44MTI1IDU0Ljg5MDYyNSAyMy4zOTA2MjUgUSA1NC44OTA2MjUgMTEuNjI1IDQ3LjU2MjUgNS4wOTM3NSBRIDQwLjIzNDM3NSAtMS40MjE4NzUgMjYuOTA2MjUgLTEuNDIxODc1IFEgMjIuMzEyNSAtMS40MjE4NzUgMTcuNTQ2ODc1IC0wLjY0MDYyNSBRIDEyLjc5Njg3NSAwLjE0MDYyNSA3LjcxODc1IDEuNzAzMTI1IEwgNy43MTg3NSAxMS42MjUgUSAxMi4xMDkzNzUgOS4yMzQzNzUgMTYuNzk2ODc1IDguMDYyNSBRIDIxLjQ4NDM3NSA2Ljg5MDYyNSAyNi43MDMxMjUgNi44OTA2MjUgUSAzNS4xNTYyNSA2Ljg5MDYyNSA0MC4wNzgxMjUgMTEuMzI4MTI1IFEgNDUuMDE1NjI1IDE1Ljc2NTYyNSA0NS4wMTU2MjUgMjMuMzkwNjI1IFEgNDUuMDE1NjI1IDMxIDQwLjA3ODEyNSAzNS40Mzc1IFEgMzUuMTU2MjUgMzkuODkwNjI1IDI2LjcwMzEyNSAzOS44OTA2MjUgUSAyMi43NSAzOS44OTA2MjUgMTguODEyNSAzOS4wMTU2MjUgUSAxNC44OTA2MjUgMzguMTQwNjI1IDEwLjc5Njg3NSAzNi4yODEyNSB6IiBpZD0iRGVqYVZ1U2Fucy01MyIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMy4zMTU5NiAzMS40MTUzNzUpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNDkiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MyIvPiAgICA8L2c+ICAgPC9nPiAgIDxnIGlkPSJ0ZXh0XzIiPiAgICA8IS0tIDUgLS0+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi45OTkwNCAzMS40MTUzNzUpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTMiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2E2YzkzODBhZmMzNDMzZmJkYmIzYmU3MzFiNmUxMDcuc2V0SWNvbihkaXZfaWNvbl9kZTRhZjVkNTkwMGE0ZDI0YjdhY2Y4MDI3ZTY4MTk2ZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDg4MWVjMTMyYTg0YjU5ODMzZjY5MGVhY2FjOTI2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMzZmMjFkY2NjZmI0YzcyODY3MTA3MzA1NmQyNjI2MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTM2ZjIxZGNjY2ZiNGM3Mjg2NzEwNzMwNTZkMjYyNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTY0MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5KYXBhbmVzZTwvYT48YnI+Y29uc29uYW50czogMTU8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDA4ODFlYzEzMmE4NGI1OTgzM2Y2OTBlYWNhYzkyNmEuc2V0Q29udGVudChodG1sX2EzNmYyMWRjY2NmYjRjNzI4NjcxMDczMDU2ZDI2MjYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2E2YzkzODBhZmMzNDMzZmJkYmIzYmU3MzFiNmUxMDcuYmluZFBvcHVwKHBvcHVwXzAwODgxZWMxMzJhODRiNTk4MzNmNjkwZWFjYWM5MjZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNWI5ZTMxNDU0NzE2NDYyNmI5NWY2NjZmZGNlNmZlMDIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzcuMTUzNDUsIDMuNjcyMjVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2JkYzQ3ZjIzMDg0NDQzMmE1Njk0MjY3YmU5N2Q3YTIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzhkZWExMDk3ZWM4YTQ0MTI5ODdlMmE4NTdjNDE5ZTBmID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyAzOS44MTE2NzYgMTQuMzQ3MTQ4IDM3LjM0MTMzNiAxMi44NjA3OTQgMzQuNjI1ODg0IDEyLjAyNzAyMSBDIDMxLjkxMDQzMiAxMS4xOTMyNDkgMjkuMDMxNjM3IDExLjAzNzE2NSAyNi4yNDE5NTcgMTEuNTcyNDU4IEMgMjMuNDUyMjc2IDEyLjEwNzc1IDIwLjgzNTcxNSAxMy4zMTgzIDE4LjYyMTczNCAxNS4wOTc5NDggQyAxNi40MDc3NTMgMTYuODc3NTk1IDE0LjY2MzAyMiAxOS4xNzI3NSAxMy41NDA1NDUgMjEuNzgyMTM3IEMgMTIuNDE4MDY4IDI0LjM5MTUyNCAxMS45NTE2NDYgMjcuMjM2NTY4IDEyLjE4MjE4MyAzMC4wNjc3NzEgQyAxMi40MTI3MiAzMi44OTg5NzMgMTMuMzMzMjc0IDM1LjYzMTA4IDE0Ljg2MzExNSAzOC4wMjQ0OTYgQyAxNi4zOTI5NTcgNDAuNDE3OTEyIDE4LjQ4NjAxOSA0Mi40MDA1NjYgMjAuOTU4NzQ4IDQzLjc5ODU4NyBDIDIzLjQzMTQ3NyA0NS4xOTY2MDkgMjYuMjA5NDE1IDQ1Ljk2Nzg5OSAyOS4wNDg5NDYgNDYuMDQ0ODIxIEwgMjkuNTIgMjguNjU2IEwgNDEuODIwMjY0IDE2LjM1NTczNiB6IiBzdHlsZT0iZmlsbDojMDAyMGMyOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMjkuMDQ4OTQ2IDQ2LjA0NDgyMSBDIDMyLjUyNzgxMiA0Ni4xMzkwNjIgMzUuOTU2MTg5IDQ1LjE4NzE3OCAzOC44ODg0OTUgNDMuMzEyODg1IEMgNDEuODIwODAxIDQxLjQzODU5MyA0NC4xMjQyNDYgMzguNzI2NzY4IDQ1LjQ5OTQ1NSAzNS41Mjk4NjUgQyA0Ni44NzQ2NjMgMzIuMzMyOTYxIDQ3LjI1OTM1OSAyOC43OTU3NSA0Ni42MDM1NDMgMjUuMzc3OTU5IEMgNDUuOTQ3NzI3IDIxLjk2MDE2OCA0NC4yODEwOTggMTguODE2NTcxIDQxLjgyMDI2NiAxNi4zNTU3MzggTCAyOS41MiAyOC42NTYgTCAyOS4wNDg5NDYgNDYuMDQ0ODIxIHoiIHN0eWxlPSJmaWxsOiNjMjIwMDA7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgIDxnIGlkPSJ0ZXh0XzEiPiAgICA8IS0tIDE4IC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMTIuNDA2MjUgOC4yOTY4NzUgTCAyOC41MTU2MjUgOC4yOTY4NzUgTCAyOC41MTU2MjUgNjMuOTIxODc1IEwgMTAuOTg0Mzc1IDYwLjQwNjI1IEwgMTAuOTg0Mzc1IDY5LjM5MDYyNSBMIDI4LjQyMTg3NSA3Mi45MDYyNSBMIDM4LjI4MTI1IDcyLjkwNjI1IEwgMzguMjgxMjUgOC4yOTY4NzUgTCA1NC4zOTA2MjUgOC4yOTY4NzUgTCA1NC4zOTA2MjUgMCBMIDEyLjQwNjI1IDAgeiIgaWQ9IkRlamFWdVNhbnMtNDkiLz4gICAgIDxwYXRoIGQ9Ik0gMzEuNzgxMjUgMzQuNjI1IFEgMjQuNzUgMzQuNjI1IDIwLjcxODc1IDMwLjg1OTM3NSBRIDE2LjcwMzEyNSAyNy4wOTM3NSAxNi43MDMxMjUgMjAuNTE1NjI1IFEgMTYuNzAzMTI1IDEzLjkyMTg3NSAyMC43MTg3NSAxMC4xNTYyNSBRIDI0Ljc1IDYuMzkwNjI1IDMxLjc4MTI1IDYuMzkwNjI1IFEgMzguODEyNSA2LjM5MDYyNSA0Mi44NTkzNzUgMTAuMTcxODc1IFEgNDYuOTIxODc1IDEzLjk2ODc1IDQ2LjkyMTg3NSAyMC41MTU2MjUgUSA0Ni45MjE4NzUgMjcuMDkzNzUgNDIuODkwNjI1IDMwLjg1OTM3NSBRIDM4Ljg3NSAzNC42MjUgMzEuNzgxMjUgMzQuNjI1IHpNIDIxLjkyMTg3NSAzOC44MTI1IFEgMTUuNTc4MTI1IDQwLjM3NSAxMi4wMzEyNSA0NC43MTg3NSBRIDguNSA0OS4wNzgxMjUgOC41IDU1LjMyODEyNSBRIDguNSA2NC4wNjI1IDE0LjcxODc1IDY5LjE0MDYyNSBRIDIwLjk1MzEyNSA3NC4yMTg3NSAzMS43ODEyNSA3NC4yMTg3NSBRIDQyLjY3MTg3NSA3NC4yMTg3NSA0OC44NzUgNjkuMTQwNjI1IFEgNTUuMDc4MTI1IDY0LjA2MjUgNTUuMDc4MTI1IDU1LjMyODEyNSBRIDU1LjA3ODEyNSA0OS4wNzgxMjUgNTEuNTMxMjUgNDQuNzE4NzUgUSA0OCA0MC4zNzUgNDEuNzAzMTI1IDM4LjgxMjUgUSA0OC44MjgxMjUgMzcuMTU2MjUgNTIuNzk2ODc1IDMyLjMxMjUgUSA1Ni43ODEyNSAyNy40ODQzNzUgNTYuNzgxMjUgMjAuNTE1NjI1IFEgNTYuNzgxMjUgOS45MDYyNSA1MC4zMTI1IDQuMjM0Mzc1IFEgNDMuODQzNzUgLTEuNDIxODc1IDMxLjc4MTI1IC0xLjQyMTg3NSBRIDE5LjczNDM3NSAtMS40MjE4NzUgMTMuMjUgNC4yMzQzNzUgUSA2Ljc4MTI1IDkuOTA2MjUgNi43ODEyNSAyMC41MTU2MjUgUSA2Ljc4MTI1IDI3LjQ4NDM3NSAxMC43ODEyNSAzMi4zMTI1IFEgMTQuNzk2ODc1IDM3LjE1NjI1IDIxLjkyMTg3NSAzOC44MTI1IHpNIDE4LjMxMjUgNTQuMzkwNjI1IFEgMTguMzEyNSA0OC43MzQzNzUgMjEuODQzNzUgNDUuNTYyNSBRIDI1LjM5MDYyNSA0Mi4zOTA2MjUgMzEuNzgxMjUgNDIuMzkwNjI1IFEgMzguMTQwNjI1IDQyLjM5MDYyNSA0MS43MTg3NSA0NS41NjI1IFEgNDUuMzEyNSA0OC43MzQzNzUgNDUuMzEyNSA1NC4zOTA2MjUgUSA0NS4zMTI1IDYwLjA2MjUgNDEuNzE4NzUgNjMuMjM0Mzc1IFEgMzguMTQwNjI1IDY2LjQwNjI1IDMxLjc4MTI1IDY2LjQwNjI1IFEgMjUuMzkwNjI1IDY2LjQwNjI1IDIxLjg0Mzc1IDYzLjIzNDM3NSBRIDE4LjMxMjUgNjAuMDYyNSAxOC4zMTI1IDU0LjM5MDYyNSB6IiBpZD0iRGVqYVZ1U2Fucy01NiIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMy41OTkxMDkgMzAuMDQwNjAyKXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ5Ii8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTYiLz4gICAgPC9nPiAgIDwvZz4gICA8ZyBpZD0idGV4dF8yIj4gICAgPCEtLSAxMSAtLT4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjcxNTg5MSAzMi43OTAxNDgpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNDkiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy00OSIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81YjllMzE0NTQ3MTY0NjI2Yjk1ZjY2NmZkY2U2ZmUwMi5zZXRJY29uKGRpdl9pY29uXzhkZWExMDk3ZWM4YTQ0MTI5ODdlMmE4NTdjNDE5ZTBmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyZjlmOWM0ZWM4NDQ3M2Y5YWQ4MzM1MjhjNDg1YTE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4MGFjMmMwMTA3MjQxMjNiNmIwMGYwZTRmZjBkMDdjID0gJChgPGRpdiBpZD0iaHRtbF8yODBhYzJjMDEwNzI0MTIzYjZiMDBmMGU0ZmYwZDA3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3lvcnUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPllvcnViYTwvYT48YnI+Y29uc29uYW50czogMTg8YnI+dm93ZWxzOiAxMTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyZjlmOWM0ZWM4NDQ3M2Y5YWQ4MzM1MjhjNDg1YTE1LnNldENvbnRlbnQoaHRtbF8yODBhYzJjMDEwNzI0MTIzYjZiMDBmMGU0ZmYwZDA3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzViOWUzMTQ1NDcxNjQ2MjZiOTVmNjY2ZmRjZTZmZTAyLmJpbmRQb3B1cChwb3B1cF84MmY5ZjljNGVjODQ0NzNmOWFkODMzNTI4YzQ4NWExNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2UzMTdmNTM0ZjNhODQ3MmFiNDU2ZjU0ZmYzMjY4ZDExID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs2NC43NjI4LCAyNS41NTc3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NiZGM0N2YyMzA4NDQ0MzJhNTY5NDI2N2JlOTdkN2EyKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9kMjQ4YzBmZWFhNGY0MzFlOWY3YTRkMTg0YTNkN2Q5YyA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgMzkuNjE3NTk5IDE0LjE1MzA3MSAzNi44NjMxODQgMTIuNTgxOTgxIDMzLjg0NjAxIDExLjgwNzMwMiBDIDMwLjgyODgzNiAxMS4wMzI2MjQgMjcuNjU4MjQ2IDExLjA4MjQzMSAyNC42NjY4OTQgMTEuOTUxNDk5IEMgMjEuNjc1NTQyIDEyLjgyMDU2NyAxOC45NzE4MzUgMTQuNDc3NDAxIDE2LjgzOTQ0NSAxNi43NDgxNjYgQyAxNC43MDcwNTQgMTkuMDE4OTMyIDEzLjIyMzI1NyAyMS44MjEzMzYgMTIuNTQzNzMzIDI0Ljg2MTM1NSBDIDExLjg2NDIwOCAyNy45MDEzNzQgMTIuMDEzNTgyIDMxLjA2ODgzNSAxMi45NzYxODIgMzQuMDMxNDEzIEMgMTMuOTM4NzgyIDM2Ljk5Mzk5MSAxNS42Nzk3MjMgMzkuNjQ0MzIgMTguMDE2MzQ4IDQxLjcwNDMzMiBDIDIwLjM1Mjk3MyA0My43NjQzNDUgMjMuMjAwNjAyIDQ1LjE1OTM4MyAyNi4yNjA0NjUgNDUuNzQzMDgzIEMgMjkuMzIwMzI4IDQ2LjMyNjc4MyAzMi40ODE1MzUgNDYuMDc3OTkxIDM1LjQxMjQxNSA0NS4wMjI4MDkgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS40MTI0MTUgNDUuMDIyODA5IEMgMzguMTY5MDUyIDQ0LjAzMDM1OCA0MC42MzA3ODkgNDIuMzU3MzYzIDQyLjU2ODMzMiA0MC4xNTk2NTIgQyA0NC41MDU4NzYgMzcuOTYxOTQgNDUuODU3MTQxIDM1LjMwOTkzMyA0Ni40OTYyNjcgMzIuNDUwNjQ1IEMgNDcuMTM1Mzk0IDI5LjU5MTM1NyA0Ny4wNDE5MDIgMjYuNjE2NDA4IDQ2LjIyNDUwMSAyMy44MDI4OTQgQyA0NS40MDcwOTkgMjAuOTg5Mzc5IDQzLjg5MTk3OSAxOC40Mjc0NTEgNDEuODIwMjY0IDE2LjM1NTczNiBMIDI5LjUyIDI4LjY1NiBMIDM1LjQxMjQxNSA0NS4wMjI4MDkgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gMTcgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICAgPHBhdGggZD0iTSA4LjIwMzEyNSA3Mi45MDYyNSBMIDU1LjA3ODEyNSA3Mi45MDYyNSBMIDU1LjA3ODEyNSA2OC43MDMxMjUgTCAyOC42MDkzNzUgMCBMIDE4LjMxMjUgMCBMIDQzLjIxODc1IDY0LjU5Mzc1IEwgOC4yMDMxMjUgNjQuNTkzNzUgeiIgaWQ9IkRlamFWdVNhbnMtNTUiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuMzk5NzQ3IDMwLjY1NjQ0NilzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy00OSIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU1Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gOCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDMxLjc4MTI1IDM0LjYyNSBRIDI0Ljc1IDM0LjYyNSAyMC43MTg3NSAzMC44NTkzNzUgUSAxNi43MDMxMjUgMjcuMDkzNzUgMTYuNzAzMTI1IDIwLjUxNTYyNSBRIDE2LjcwMzEyNSAxMy45MjE4NzUgMjAuNzE4NzUgMTAuMTU2MjUgUSAyNC43NSA2LjM5MDYyNSAzMS43ODEyNSA2LjM5MDYyNSBRIDM4LjgxMjUgNi4zOTA2MjUgNDIuODU5Mzc1IDEwLjE3MTg3NSBRIDQ2LjkyMTg3NSAxMy45Njg3NSA0Ni45MjE4NzUgMjAuNTE1NjI1IFEgNDYuOTIxODc1IDI3LjA5Mzc1IDQyLjg5MDYyNSAzMC44NTkzNzUgUSAzOC44NzUgMzQuNjI1IDMxLjc4MTI1IDM0LjYyNSB6TSAyMS45MjE4NzUgMzguODEyNSBRIDE1LjU3ODEyNSA0MC4zNzUgMTIuMDMxMjUgNDQuNzE4NzUgUSA4LjUgNDkuMDc4MTI1IDguNSA1NS4zMjgxMjUgUSA4LjUgNjQuMDYyNSAxNC43MTg3NSA2OS4xNDA2MjUgUSAyMC45NTMxMjUgNzQuMjE4NzUgMzEuNzgxMjUgNzQuMjE4NzUgUSA0Mi42NzE4NzUgNzQuMjE4NzUgNDguODc1IDY5LjE0MDYyNSBRIDU1LjA3ODEyNSA2NC4wNjI1IDU1LjA3ODEyNSA1NS4zMjgxMjUgUSA1NS4wNzgxMjUgNDkuMDc4MTI1IDUxLjUzMTI1IDQ0LjcxODc1IFEgNDggNDAuMzc1IDQxLjcwMzEyNSAzOC44MTI1IFEgNDguODI4MTI1IDM3LjE1NjI1IDUyLjc5Njg3NSAzMi4zMTI1IFEgNTYuNzgxMjUgMjcuNDg0Mzc1IDU2Ljc4MTI1IDIwLjUxNTYyNSBRIDU2Ljc4MTI1IDkuOTA2MjUgNTAuMzEyNSA0LjIzNDM3NSBRIDQzLjg0Mzc1IC0xLjQyMTg3NSAzMS43ODEyNSAtMS40MjE4NzUgUSAxOS43MzQzNzUgLTEuNDIxODc1IDEzLjI1IDQuMjM0Mzc1IFEgNi43ODEyNSA5LjkwNjI1IDYuNzgxMjUgMjAuNTE1NjI1IFEgNi43ODEyNSAyNy40ODQzNzUgMTAuNzgxMjUgMzIuMzEyNSBRIDE0Ljc5Njg3NSAzNy4xNTYyNSAyMS45MjE4NzUgMzguODEyNSB6TSAxOC4zMTI1IDU0LjM5MDYyNSBRIDE4LjMxMjUgNDguNzM0Mzc1IDIxLjg0Mzc1IDQ1LjU2MjUgUSAyNS4zOTA2MjUgNDIuMzkwNjI1IDMxLjc4MTI1IDQyLjM5MDYyNSBRIDM4LjE0MDYyNSA0Mi4zOTA2MjUgNDEuNzE4NzUgNDUuNTYyNSBRIDQ1LjMxMjUgNDguNzM0Mzc1IDQ1LjMxMjUgNTQuMzkwNjI1IFEgNDUuMzEyNSA2MC4wNjI1IDQxLjcxODc1IDYzLjIzNDM3NSBRIDM4LjE0MDYyNSA2Ni40MDYyNSAzMS43ODEyNSA2Ni40MDYyNSBRIDI1LjM5MDYyNSA2Ni40MDYyNSAyMS44NDM3NSA2My4yMzQzNzUgUSAxOC4zMTI1IDYwLjA2MjUgMTguMzEyNSA1NC4zOTA2MjUgeiIgaWQ9IkRlamFWdVNhbnMtNTYiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuOTE1MjUzIDMyLjE3NDMwNClzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01NiIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lMzE3ZjUzNGYzYTg0NzJhYjQ1NmY1NGZmMzI2OGQxMS5zZXRJY29uKGRpdl9pY29uX2QyNDhjMGZlYWE0ZjQzMWU5ZjdhNGQxODRhM2Q3ZDljKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzZmRjYTkwNTE5ZDQwYjhhZGNlMTMwMjFhMjQ4OTJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmNjdlODE5OTJkNzRhNGY5MTJjMmJhZTgyM2JkOGQwID0gJChgPGRpdiBpZD0iaHRtbF9kZjY3ZTgxOTkyZDc0YTRmOTEyYzJiYWU4MjNiZDhkMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Zpbm4xMzE4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkZpbm5pc2g8L2E+PGJyPmNvbnNvbmFudHM6IDE3PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzZmRjYTkwNTE5ZDQwYjhhZGNlMTMwMjFhMjQ4OTJhLnNldENvbnRlbnQoaHRtbF9kZjY3ZTgxOTkyZDc0YTRmOTEyYzJiYWU4MjNiZDhkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UzMTdmNTM0ZjNhODQ3MmFiNDU2ZjU0ZmYzMjY4ZDExLmJpbmRQb3B1cChwb3B1cF8zM2ZkY2E5MDUxOWQ0MGI4YWRjZTEzMDIxYTI0ODkyYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2ZkZjczNjQ2ZGMzNzRjYmFiYWVhOWIzNGI3ZWFhOTY3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxOS42Mjk3LCAtMTU1LjQzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NiZGM0N2YyMzA4NDQ0MzJhNTY5NDI2N2JlOTdkN2EyKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl8yNjY2OWM3MzZlY2U0YWVmOWFhNmIyODczYTQ1OTViMiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgMzkuODI5MDA4IDE0LjM2NDQ4IDM3LjM4MzY3NyAxMi44ODYyMjYgMzQuNjk1MTI1IDEyLjA0ODQzOSBDIDMyLjAwNjU3MyAxMS4yMTA2NTMgMjkuMTU0MzYxIDExLjAzODEyNiAyNi4zODQ0MjcgMTEuNTQ1NzM1IEMgMjMuNjE0NDkzIDEyLjA1MzM0NCAyMS4wMDg4MDggMTMuMjI2MDY4IDE4Ljc5MjA1MSAxNC45NjI3ODYgQyAxNi41NzUyOTQgMTYuNjk5NTA1IDE0LjgxMzA2NyAxOC45NDg4MjMgMTMuNjU3MzE5IDIxLjUxNjc4OCBDIDEyLjUwMTU3MiAyNC4wODQ3NTQgMTEuOTg2NTA3IDI2Ljg5NTM3NCAxMi4xNTY1MzcgMjkuNzA2Mjk4IEMgMTIuMzI2NTY2IDMyLjUxNzIyMSAxMy4xNzY2NTkgMzUuMjQ1MjY0IDE0LjYzMzUxNSAzNy42NTUxOTYgQyAxNi4wOTAzNyA0MC4wNjUxMjkgMTguMTEwODc1IDQyLjA4NTYzMyAyMC41MjA4MDcgNDMuNTQyNDg4IEMgMjIuOTMwNzQgNDQuOTk5MzQyIDI1LjY1ODc4MyA0NS44NDk0MzQgMjguNDY5NzA2IDQ2LjAxOTQ2NCBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDI4LjQ2OTcwNiA0Ni4wMTk0NjQgQyAzMS45OTI4IDQ2LjIzMjU3MSAzNS40OTg2ODkgNDUuMzY4NDQ2IDM4LjUxOTE5NyA0My41NDI0ODUgQyA0MS41Mzk3MDUgNDEuNzE2NTI0IDQzLjkzNDExNiAzOS4wMTM3OTEgNDUuMzgyNjgxIDM1Ljc5NTIxIEMgNDYuODMxMjQ2IDMyLjU3NjYyOSA0Ny4yNjY0ODEgMjguOTkyMTQ0IDQ2LjYzMDI2NCAyNS41MjA0MjUgQyA0NS45OTQwNDggMjIuMDQ4NzA2IDQ0LjMxNjAxOSAxOC44NTE0OSA0MS44MjAyNjIgMTYuMzU1NzM0IEwgMjkuNTIgMjguNjU2IEwgMjguNDY5NzA2IDQ2LjAxOTQ2NCB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSA4IC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMzEuNzgxMjUgMzQuNjI1IFEgMjQuNzUgMzQuNjI1IDIwLjcxODc1IDMwLjg1OTM3NSBRIDE2LjcwMzEyNSAyNy4wOTM3NSAxNi43MDMxMjUgMjAuNTE1NjI1IFEgMTYuNzAzMTI1IDEzLjkyMTg3NSAyMC43MTg3NSAxMC4xNTYyNSBRIDI0Ljc1IDYuMzkwNjI1IDMxLjc4MTI1IDYuMzkwNjI1IFEgMzguODEyNSA2LjM5MDYyNSA0Mi44NTkzNzUgMTAuMTcxODc1IFEgNDYuOTIxODc1IDEzLjk2ODc1IDQ2LjkyMTg3NSAyMC41MTU2MjUgUSA0Ni45MjE4NzUgMjcuMDkzNzUgNDIuODkwNjI1IDMwLjg1OTM3NSBRIDM4Ljg3NSAzNC42MjUgMzEuNzgxMjUgMzQuNjI1IHpNIDIxLjkyMTg3NSAzOC44MTI1IFEgMTUuNTc4MTI1IDQwLjM3NSAxMi4wMzEyNSA0NC43MTg3NSBRIDguNSA0OS4wNzgxMjUgOC41IDU1LjMyODEyNSBRIDguNSA2NC4wNjI1IDE0LjcxODc1IDY5LjE0MDYyNSBRIDIwLjk1MzEyNSA3NC4yMTg3NSAzMS43ODEyNSA3NC4yMTg3NSBRIDQyLjY3MTg3NSA3NC4yMTg3NSA0OC44NzUgNjkuMTQwNjI1IFEgNTUuMDc4MTI1IDY0LjA2MjUgNTUuMDc4MTI1IDU1LjMyODEyNSBRIDU1LjA3ODEyNSA0OS4wNzgxMjUgNTEuNTMxMjUgNDQuNzE4NzUgUSA0OCA0MC4zNzUgNDEuNzAzMTI1IDM4LjgxMjUgUSA0OC44MjgxMjUgMzcuMTU2MjUgNTIuNzk2ODc1IDMyLjMxMjUgUSA1Ni43ODEyNSAyNy40ODQzNzUgNTYuNzgxMjUgMjAuNTE1NjI1IFEgNTYuNzgxMjUgOS45MDYyNSA1MC4zMTI1IDQuMjM0Mzc1IFEgNDMuODQzNzUgLTEuNDIxODc1IDMxLjc4MTI1IC0xLjQyMTg3NSBRIDE5LjczNDM3NSAtMS40MjE4NzUgMTMuMjUgNC4yMzQzNzUgUSA2Ljc4MTI1IDkuOTA2MjUgNi43ODEyNSAyMC41MTU2MjUgUSA2Ljc4MTI1IDI3LjQ4NDM3NSAxMC43ODEyNSAzMi4zMTI1IFEgMTQuNzk2ODc1IDM3LjE1NjI1IDIxLjkyMTg3NSAzOC44MTI1IHpNIDE4LjMxMjUgNTQuMzkwNjI1IFEgMTguMzEyNSA0OC43MzQzNzUgMjEuODQzNzUgNDUuNTYyNSBRIDI1LjM5MDYyNSA0Mi4zOTA2MjUgMzEuNzgxMjUgNDIuMzkwNjI1IFEgMzguMTQwNjI1IDQyLjM5MDYyNSA0MS43MTg3NSA0NS41NjI1IFEgNDUuMzEyNSA0OC43MzQzNzUgNDUuMzEyNSA1NC4zOTA2MjUgUSA0NS4zMTI1IDYwLjA2MjUgNDEuNzE4NzUgNjMuMjM0Mzc1IFEgMzguMTQwNjI1IDY2LjQwNjI1IDMxLjc4MTI1IDY2LjQwNjI1IFEgMjUuMzkwNjI1IDY2LjQwNjI1IDIxLjg0Mzc1IDYzLjIzNDM3NSBRIDE4LjMxMjUgNjAuMDYyNSAxOC4zMTI1IDU0LjM5MDYyNSB6IiBpZD0iRGVqYVZ1U2Fucy01NiIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOS45ODQ5NjQgMjkuOTg3NTMzKXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU2Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gNSAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDEwLjc5Njg3NSA3Mi45MDYyNSBMIDQ5LjUxNTYyNSA3Mi45MDYyNSBMIDQ5LjUxNTYyNSA2NC41OTM3NSBMIDE5LjgyODEyNSA2NC41OTM3NSBMIDE5LjgyODEyNSA0Ni43MzQzNzUgUSAyMS45Njg3NSA0Ny40Njg3NSAyNC4xMDkzNzUgNDcuODI4MTI1IFEgMjYuMjY1NjI1IDQ4LjE4NzUgMjguNDIxODc1IDQ4LjE4NzUgUSA0MC42MjUgNDguMTg3NSA0Ny43NSA0MS41IFEgNTQuODkwNjI1IDM0LjgxMjUgNTQuODkwNjI1IDIzLjM5MDYyNSBRIDU0Ljg5MDYyNSAxMS42MjUgNDcuNTYyNSA1LjA5Mzc1IFEgNDAuMjM0Mzc1IC0xLjQyMTg3NSAyNi45MDYyNSAtMS40MjE4NzUgUSAyMi4zMTI1IC0xLjQyMTg3NSAxNy41NDY4NzUgLTAuNjQwNjI1IFEgMTIuNzk2ODc1IDAuMTQwNjI1IDcuNzE4NzUgMS43MDMxMjUgTCA3LjcxODc1IDExLjYyNSBRIDEyLjEwOTM3NSA5LjIzNDM3NSAxNi43OTY4NzUgOC4wNjI1IFEgMjEuNDg0Mzc1IDYuODkwNjI1IDI2LjcwMzEyNSA2Ljg5MDYyNSBRIDM1LjE1NjI1IDYuODkwNjI1IDQwLjA3ODEyNSAxMS4zMjgxMjUgUSA0NS4wMTU2MjUgMTUuNzY1NjI1IDQ1LjAxNTYyNSAyMy4zOTA2MjUgUSA0NS4wMTU2MjUgMzEgNDAuMDc4MTI1IDM1LjQzNzUgUSAzNS4xNTYyNSAzOS44OTA2MjUgMjYuNzAzMTI1IDM5Ljg5MDYyNSBRIDIyLjc1IDM5Ljg5MDYyNSAxOC44MTI1IDM5LjAxNTYyNSBRIDE0Ljg5MDYyNSAzOC4xNDA2MjUgMTAuNzk2ODc1IDM2LjI4MTI1IHoiIGlkPSJEZWphVnVTYW5zLTUzIi8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjY5MjUzNiAzMi44NDMyMTcpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTMiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmRmNzM2NDZkYzM3NGNiYWJhZWE5YjM0YjdlYWE5Njcuc2V0SWNvbihkaXZfaWNvbl8yNjY2OWM3MzZlY2U0YWVmOWFhNmIyODczYTQ1OTViMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MzIyMWQyNjM4OWQ0NDI0YTIyYmE3MzY3NzMxM2M1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZWU5ZjY3YmM1MTM0M2IwOTUwNmM5ZTI1ZDY5YjcxZSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWVlOWY2N2JjNTEzNDNiMDk1MDZjOWUyNWQ2OWI3MWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oYXdhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IYXdhaWlhbjwvYT48YnI+Y29uc29uYW50czogODxicj52b3dlbHM6IDU8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MzIyMWQyNjM4OWQ0NDI0YTIyYmE3MzY3NzMxM2M1OC5zZXRDb250ZW50KGh0bWxfOWVlOWY2N2JjNTEzNDNiMDk1MDZjOWUyNWQ2OWI3MWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZGY3MzY0NmRjMzc0Y2JhYmFlYTliMzRiN2VhYTk2Ny5iaW5kUG9wdXAocG9wdXBfNjMyMjFkMjYzODlkNDQyNGEyMmJhNzM2NzczMTNjNTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl80OTEwNmRlMmIxZGQ0YjJlYjAyN2E5NTg5YjhmZGMyNyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYmRjNDdmMjMwODQ0NDMyYTU2OTQyNjdiZTk3ZDdhMik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fZmUwMTc5NDQyOWZhNGQ5MGEwNDk1NmY4ZDFmYzMwODYgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDM5LjcxNTgzNSAxNC4yNTEzMDcgMzcuMTA2MTM2IDEyLjcyMTczNiAzNC4yNDE3NjEgMTEuOTEzODk5IEMgMzEuMzc3Mzg3IDExLjEwNjA2MiAyOC4zNTMwNTMgMTEuMDQ2NjcxIDI1LjQ1OTE3MiAxMS43NDE0MzEgQyAyMi41NjUyOSAxMi40MzYxOSAxOS44OTc1NTIgMTMuODYyMTI2IDE3LjcxMjEyNiAxNS44ODIzMTIgQyAxNS41MjY3IDE3LjkwMjQ5OSAxMy44OTU4NTEgMjAuNDUwMTM2IDEyLjk3NjE4MiAyMy4yODA1ODYgQyAxMi4wNTY1MTMgMjYuMTExMDM3IDExLjg3ODQzMyAyOS4xMzA3MDcgMTIuNDU5MDQ0IDMyLjA0OTYzNCBDIDEzLjAzOTY1NCAzNC45Njg1NiAxNC4zNTk3NTUgMzcuNjkwMjI0IDE2LjI5MjU4NSAzOS45NTMyNzcgQyAxOC4yMjU0MTUgNDIuMjE2MzMxIDIwLjcwNzA2IDQzLjk0NTk0MiAyMy40OTkyMjIgNDQuOTc2MDI1IEMgMjYuMjkxMzg1IDQ2LjAwNjEwOSAyOS4zMDE3MzUgNDYuMzAyNjAzIDMyLjI0MTIwNiA0NS44MzcwMzcgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi4yNDEyMDYgNDUuODM3MDM3IEMgMzUuNDA5NDg2IDQ1LjMzNTIzMSAzOC4zNzgwNjcgNDMuOTY2Njk3IDQwLjgxNzI3NyA0MS44ODM0MTYgQyA0My4yNTY0ODcgMzkuODAwMTM0IDQ1LjA3MjU2MSAzNy4wODIxODggNDYuMDYzODE3IDM0LjAzMTQxNSBDIDQ3LjA1NTA3NCAzMC45ODA2NDIgNDcuMTgzNDA5IDI3LjcxNDMxNiA0Ni40MzQ1NyAyNC41OTUxNzQgQyA0NS42ODU3MzEgMjEuNDc2MDMyIDQ0LjA4ODUwNCAxOC42MjM5NzcgNDEuODIwMjY2IDE2LjM1NTczOCBMIDI5LjUyIDI4LjY1NiBMIDMyLjI0MTIwNiA0NS44MzcwMzcgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gMjYgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxOS4xODc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDAgTCA3LjMyODEyNSAwIEwgNy4zMjgxMjUgOC4yOTY4NzUgUSAxMi45Mzc1IDE0LjEwOTM3NSAyMi42MjUgMjMuODkwNjI1IFEgMzIuMzI4MTI1IDMzLjY4NzUgMzQuODEyNSAzNi41MzEyNSBRIDM5LjU0Njg3NSA0MS44NDM3NSA0MS40MjE4NzUgNDUuNTMxMjUgUSA0My4zMTI1IDQ5LjIxODc1IDQzLjMxMjUgNTIuNzgxMjUgUSA0My4zMTI1IDU4LjU5Mzc1IDM5LjIzNDM3NSA2Mi4yNSBRIDM1LjE1NjI1IDY1LjkyMTg3NSAyOC42MDkzNzUgNjUuOTIxODc1IFEgMjMuOTY4NzUgNjUuOTIxODc1IDE4LjgxMjUgNjQuMzEyNSBRIDEzLjY3MTg3NSA2Mi43MDMxMjUgNy44MTI1IDU5LjQyMTg3NSBMIDcuODEyNSA2OS4zOTA2MjUgUSAxMy43NjU2MjUgNzEuNzgxMjUgMTguOTM3NSA3MyBRIDI0LjEyNSA3NC4yMTg3NSAyOC40MjE4NzUgNzQuMjE4NzUgUSAzOS43NSA3NC4yMTg3NSA0Ni40ODQzNzUgNjguNTQ2ODc1IFEgNTMuMjE4NzUgNjIuODkwNjI1IDUzLjIxODc1IDUzLjQyMTg3NSBRIDUzLjIxODc1IDQ4LjkyMTg3NSA1MS41MzEyNSA0NC44OTA2MjUgUSA0OS44NTkzNzUgNDAuODc1IDQ1LjQwNjI1IDM1LjQwNjI1IFEgNDQuMTg3NSAzMy45ODQzNzUgMzcuNjQwNjI1IDI3LjIxODc1IFEgMzEuMTA5Mzc1IDIwLjQ1MzEyNSAxOS4xODc1IDguMjk2ODc1IHoiIGlkPSJEZWphVnVTYW5zLTUwIi8+ICAgICA8cGF0aCBkPSJNIDMzLjAxNTYyNSA0MC4zNzUgUSAyNi4zNzUgNDAuMzc1IDIyLjQ4NDM3NSAzNS44MjgxMjUgUSAxOC42MDkzNzUgMzEuMjk2ODc1IDE4LjYwOTM3NSAyMy4zOTA2MjUgUSAxOC42MDkzNzUgMTUuNTMxMjUgMjIuNDg0Mzc1IDEwLjk1MzEyNSBRIDI2LjM3NSA2LjM5MDYyNSAzMy4wMTU2MjUgNi4zOTA2MjUgUSAzOS42NTYyNSA2LjM5MDYyNSA0My41MzEyNSAxMC45NTMxMjUgUSA0Ny40MDYyNSAxNS41MzEyNSA0Ny40MDYyNSAyMy4zOTA2MjUgUSA0Ny40MDYyNSAzMS4yOTY4NzUgNDMuNTMxMjUgMzUuODI4MTI1IFEgMzkuNjU2MjUgNDAuMzc1IDMzLjAxNTYyNSA0MC4zNzUgek0gNTIuNTkzNzUgNzEuMjk2ODc1IEwgNTIuNTkzNzUgNjIuMzEyNSBRIDQ4Ljg3NSA2NC4wNjI1IDQ1LjA5Mzc1IDY0Ljk4NDM3NSBRIDQxLjMxMjUgNjUuOTIxODc1IDM3LjU5Mzc1IDY1LjkyMTg3NSBRIDI3LjgyODEyNSA2NS45MjE4NzUgMjIuNjcxODc1IDU5LjMyODEyNSBRIDE3LjUzMTI1IDUyLjczNDM3NSAxNi43OTY4NzUgMzkuNDA2MjUgUSAxOS42NzE4NzUgNDMuNjU2MjUgMjQuMDE1NjI1IDQ1LjkyMTg3NSBRIDI4LjM3NSA0OC4xODc1IDMzLjU5Mzc1IDQ4LjE4NzUgUSA0NC41NzgxMjUgNDguMTg3NSA1MC45NTMxMjUgNDEuNTE1NjI1IFEgNTcuMzI4MTI1IDM0Ljg1OTM3NSA1Ny4zMjgxMjUgMjMuMzkwNjI1IFEgNTcuMzI4MTI1IDEyLjE1NjI1IDUwLjY4NzUgNS4zNTkzNzUgUSA0NC4wNDY4NzUgLTEuNDIxODc1IDMzLjAxNTYyNSAtMS40MjE4NzUgUSAyMC4zNTkzNzUgLTEuNDIxODc1IDEzLjY3MTg3NSA4LjI2NTYyNSBRIDYuOTg0Mzc1IDE3Ljk2ODc1IDYuOTg0Mzc1IDM2LjM3NSBRIDYuOTg0Mzc1IDUzLjY1NjI1IDE1LjE4NzUgNjMuOTM3NSBRIDIzLjM5MDYyNSA3NC4yMTg3NSAzNy4yMDMxMjUgNzQuMjE4NzUgUSA0MC45MjE4NzUgNzQuMjE4NzUgNDQuNzAzMTI1IDczLjQ4NDM3NSBRIDQ4LjQ4NDM3NSA3Mi43NSA1Mi41OTM3NSA3MS4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTQiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuNDg2MjM2IDMwLjM0MDI5MilzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU0Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gMTQgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICAgPHBhdGggZD0iTSAzNy43OTY4NzUgNjQuMzEyNSBMIDEyLjg5MDYyNSAyNS4zOTA2MjUgTCAzNy43OTY4NzUgMjUuMzkwNjI1IHpNIDM1LjIwMzEyNSA3Mi45MDYyNSBMIDQ3LjYwOTM3NSA3Mi45MDYyNSBMIDQ3LjYwOTM3NSAyNS4zOTA2MjUgTCA1OC4wMTU2MjUgMjUuMzkwNjI1IEwgNTguMDE1NjI1IDE3LjE4NzUgTCA0Ny42MDkzNzUgMTcuMTg3NSBMIDQ3LjYwOTM3NSAwIEwgMzcuNzk2ODc1IDAgTCAzNy43OTY4NzUgMTcuMTg3NSBMIDQuODkwNjI1IDE3LjE4NzUgTCA0Ljg5MDYyNSAyNi43MDMxMjUgeiIgaWQ9IkRlamFWdVNhbnMtNTIiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuODI4NzYzIDMyLjQ5MDQ1OClzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy00OSIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUyIi8+ICAgIDwvZz4gICA8L2c+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQ5MTA2ZGUyYjFkZDRiMmViMDI3YTk1ODliOGZkYzI3LnNldEljb24oZGl2X2ljb25fZmUwMTc5NDQyOWZhNGQ5MGEwNDk1NmY4ZDFmYzMwODYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjZiOTBlNzliZDg1NGRkMzgxMDE2ZGFkMzYwYjA1NjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWU1MjdjOWE4NTJkNDBkY2JjZDZiM2MyMjlmYjA5NzkgPSAkKGA8ZGl2IGlkPSJodG1sXzllNTI3YzlhODUyZDQwZGNiY2Q2YjNjMjI5ZmIwOTc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaHVuZzEyNzQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SHVuZ2FyaWFuPC9hPjxicj5jb25zb25hbnRzOiAyNjxicj52b3dlbHM6IDE0PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjZiOTBlNzliZDg1NGRkMzgxMDE2ZGFkMzYwYjA1NjEuc2V0Q29udGVudChodG1sXzllNTI3YzlhODUyZDQwZGNiY2Q2YjNjMjI5ZmIwOTc5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDkxMDZkZTJiMWRkNGIyZWIwMjdhOTU4OWI4ZmRjMjcuYmluZFBvcHVwKHBvcHVwX2I2YjkwZTc5YmQ4NTRkZDM4MTAxNmRhZDM2MGIwNTYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMDVkZThiN2I5YzE0NGViYmIwZjFmYWUwY2E5ZjE3NjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQxLjg1MDM5Njk5OTk5OTk5NCwgNDMuNzg2MTNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2JkYzQ3ZjIzMDg0NDQzMmE1Njk0MjY3YmU5N2Q3YTIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzQxODk1NWFjMjQ1NDRhMDZiMGUxNDZkYjk0M2E3NDIyID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyA0MC40OTE0MTYgMTUuMDI2ODg4IDM4Ljk1NTk2NSAxMy45MjIxMiAzNy4yNzM3MDggMTMuMDg0NDU1IEMgMzUuNTkxNDUgMTIuMjQ2NzkxIDMzLjc4NDUxIDExLjY4NzI0NiAzMS45MjMyNTcgMTEuNDI3NjEyIEMgMzAuMDYyMDA0IDExLjE2Nzk3OSAyOC4xNzA5MTcgMTEuMjExNjcxIDI2LjMyMzY0IDExLjU1Njk4NiBDIDI0LjQ3NjM2NCAxMS45MDIzMDIgMjIuNjk3MTk0IDEyLjU0NDcgMjEuMDU1NDE4IDEzLjQ1OTE2NCBDIDE5LjQxMzY0MSAxNC4zNzM2MjcgMTcuOTMwODUxIDE1LjU0ODEyOSAxNi42NjQ3OTIgMTYuOTM2OTMgQyAxNS4zOTg3MzMgMTguMzI1NzMxIDE0LjM2NjA1NiAxOS45MTA1NjUgMTMuNjA2OTc4IDIxLjYyOTcxNCBDIDEyLjg0Nzg5OSAyMy4zNDg4NjMgMTIuMzcyNDAyIDI1LjE3OTcxNiAxMi4xOTkwMDUgMjcuMDUwOTc0IEMgMTIuMDI1NjA3IDI4LjkyMjIzMiAxMi4xNTY1ODkgMzAuODA5Mjg0IDEyLjU4Njg1IDMyLjYzODY0MSBDIDEzLjAxNzExMSAzNC40Njc5OTkgMTMuNzQwOTkzIDM2LjIxNTYwMiAxNC43MzAzMDMgMzcuODEzMzkzIEMgMTUuNzE5NjE0IDM5LjQxMTE4NSAxNi45NjEzNDMgNDAuODM4MTUgMTguNDA3MTMzIDQyLjAzODcxOSBDIDE5Ljg1MjkyMiA0My4yMzkyODcgMjEuNDgzNzU4IDQ0LjE5NzY2OSAyMy4yMzYxMyA0NC44NzY1NDEgQyAyNC45ODg1MDEgNDUuNTU1NDEzIDI2LjgzOTM2MSA0NS45NDU4NDggMjguNzE2NjMgNDYuMDMyNjM5IEMgMzAuNTkzOSA0Ni4xMTk0MyAzMi40NzI4ODkgNDUuOTAxNDM3IDM0LjI4MDQyMyA0NS4zODcxNDkgQyAzNi4wODc5NTggNDQuODcyODYxIDM3LjgwMDI2NSA0NC4wNjkwNDIgMzkuMzUwNjYyIDQzLjAwNjk5NiBDIDQwLjkwMTA1OSA0MS45NDQ5NDkgNDIuMjY5MTU0IDQwLjYzODY0MyA0My40MDE2NyAzOS4xMzg5NDkgQyA0NC41MzQxODYgMzcuNjM5MjU2IDQ1LjQxNjIyNyAzNS45NjU4OTggNDYuMDEzNDQ0IDM0LjE4NDA0NCBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDQ2LjAxMzQ0NCAzNC4xODQwNDQgQyA0Ny4wNDE1MiAzMS4xMTY2ODIgNDcuMTkzODIgMjcuODIyNDk0IDQ2LjQ1MzE0OSAyNC42NzMzNTggQyA0NS43MTI0NzkgMjEuNTI0MjIyIDQ0LjEwNzggMTguNjQzMjcyIDQxLjgyMDI2MyAxNi4zNTU3MzUgTCAyOS41MiAyOC42NTYgTCA0Ni4wMTM0NDQgMzQuMTg0MDQ0IHoiIHN0eWxlPSJmaWxsOiNjMjIwMDA7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgIDxnIGlkPSJ0ZXh0XzEiPiAgICA8IS0tIDI4IC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMTkuMTg3NSA4LjI5Njg3NSBMIDUzLjYwOTM3NSA4LjI5Njg3NSBMIDUzLjYwOTM3NSAwIEwgNy4zMjgxMjUgMCBMIDcuMzI4MTI1IDguMjk2ODc1IFEgMTIuOTM3NSAxNC4xMDkzNzUgMjIuNjI1IDIzLjg5MDYyNSBRIDMyLjMyODEyNSAzMy42ODc1IDM0LjgxMjUgMzYuNTMxMjUgUSAzOS41NDY4NzUgNDEuODQzNzUgNDEuNDIxODc1IDQ1LjUzMTI1IFEgNDMuMzEyNSA0OS4yMTg3NSA0My4zMTI1IDUyLjc4MTI1IFEgNDMuMzEyNSA1OC41OTM3NSAzOS4yMzQzNzUgNjIuMjUgUSAzNS4xNTYyNSA2NS45MjE4NzUgMjguNjA5Mzc1IDY1LjkyMTg3NSBRIDIzLjk2ODc1IDY1LjkyMTg3NSAxOC44MTI1IDY0LjMxMjUgUSAxMy42NzE4NzUgNjIuNzAzMTI1IDcuODEyNSA1OS40MjE4NzUgTCA3LjgxMjUgNjkuMzkwNjI1IFEgMTMuNzY1NjI1IDcxLjc4MTI1IDE4LjkzNzUgNzMgUSAyNC4xMjUgNzQuMjE4NzUgMjguNDIxODc1IDc0LjIxODc1IFEgMzkuNzUgNzQuMjE4NzUgNDYuNDg0Mzc1IDY4LjU0Njg3NSBRIDUzLjIxODc1IDYyLjg5MDYyNSA1My4yMTg3NSA1My40MjE4NzUgUSA1My4yMTg3NSA0OC45MjE4NzUgNTEuNTMxMjUgNDQuODkwNjI1IFEgNDkuODU5Mzc1IDQwLjg3NSA0NS40MDYyNSAzNS40MDYyNSBRIDQ0LjE4NzUgMzMuOTg0Mzc1IDM3LjY0MDYyNSAyNy4yMTg3NSBRIDMxLjEwOTM3NSAyMC40NTMxMjUgMTkuMTg3NSA4LjI5Njg3NSB6IiBpZD0iRGVqYVZ1U2Fucy01MCIvPiAgICAgPHBhdGggZD0iTSAzMS43ODEyNSAzNC42MjUgUSAyNC43NSAzNC42MjUgMjAuNzE4NzUgMzAuODU5Mzc1IFEgMTYuNzAzMTI1IDI3LjA5Mzc1IDE2LjcwMzEyNSAyMC41MTU2MjUgUSAxNi43MDMxMjUgMTMuOTIxODc1IDIwLjcxODc1IDEwLjE1NjI1IFEgMjQuNzUgNi4zOTA2MjUgMzEuNzgxMjUgNi4zOTA2MjUgUSAzOC44MTI1IDYuMzkwNjI1IDQyLjg1OTM3NSAxMC4xNzE4NzUgUSA0Ni45MjE4NzUgMTMuOTY4NzUgNDYuOTIxODc1IDIwLjUxNTYyNSBRIDQ2LjkyMTg3NSAyNy4wOTM3NSA0Mi44OTA2MjUgMzAuODU5Mzc1IFEgMzguODc1IDM0LjYyNSAzMS43ODEyNSAzNC42MjUgek0gMjEuOTIxODc1IDM4LjgxMjUgUSAxNS41NzgxMjUgNDAuMzc1IDEyLjAzMTI1IDQ0LjcxODc1IFEgOC41IDQ5LjA3ODEyNSA4LjUgNTUuMzI4MTI1IFEgOC41IDY0LjA2MjUgMTQuNzE4NzUgNjkuMTQwNjI1IFEgMjAuOTUzMTI1IDc0LjIxODc1IDMxLjc4MTI1IDc0LjIxODc1IFEgNDIuNjcxODc1IDc0LjIxODc1IDQ4Ljg3NSA2OS4xNDA2MjUgUSA1NS4wNzgxMjUgNjQuMDYyNSA1NS4wNzgxMjUgNTUuMzI4MTI1IFEgNTUuMDc4MTI1IDQ5LjA3ODEyNSA1MS41MzEyNSA0NC43MTg3NSBRIDQ4IDQwLjM3NSA0MS43MDMxMjUgMzguODEyNSBRIDQ4LjgyODEyNSAzNy4xNTYyNSA1Mi43OTY4NzUgMzIuMzEyNSBRIDU2Ljc4MTI1IDI3LjQ4NDM3NSA1Ni43ODEyNSAyMC41MTU2MjUgUSA1Ni43ODEyNSA5LjkwNjI1IDUwLjMxMjUgNC4yMzQzNzUgUSA0My44NDM3NSAtMS40MjE4NzUgMzEuNzgxMjUgLTEuNDIxODc1IFEgMTkuNzM0Mzc1IC0xLjQyMTg3NSAxMy4yNSA0LjIzNDM3NSBRIDYuNzgxMjUgOS45MDYyNSA2Ljc4MTI1IDIwLjUxNTYyNSBRIDYuNzgxMjUgMjcuNDg0Mzc1IDEwLjc4MTI1IDMyLjMxMjUgUSAxNC43OTY4NzUgMzcuMTU2MjUgMjEuOTIxODc1IDM4LjgxMjUgek0gMTguMzEyNSA1NC4zOTA2MjUgUSAxOC4zMTI1IDQ4LjczNDM3NSAyMS44NDM3NSA0NS41NjI1IFEgMjUuMzkwNjI1IDQyLjM5MDYyNSAzMS43ODEyNSA0Mi4zOTA2MjUgUSAzOC4xNDA2MjUgNDIuMzkwNjI1IDQxLjcxODc1IDQ1LjU2MjUgUSA0NS4zMTI1IDQ4LjczNDM3NSA0NS4zMTI1IDU0LjM5MDYyNSBRIDQ1LjMxMjUgNjAuMDYyNSA0MS43MTg3NSA2My4yMzQzNzUgUSAzOC4xNDA2MjUgNjYuNDA2MjUgMzEuNzgxMjUgNjYuNDA2MjUgUSAyNS4zOTA2MjUgNjYuNDA2MjUgMjEuODQzNzUgNjMuMjM0Mzc1IFEgMTguMzEyNSA2MC4wNjI1IDE4LjMxMjUgNTQuMzkwNjI1IHoiIGlkPSJEZWphVnVTYW5zLTU2Ii8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjQwODM3IDMyLjIxMTkwMylzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU2Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gNiAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDMzLjAxNTYyNSA0MC4zNzUgUSAyNi4zNzUgNDAuMzc1IDIyLjQ4NDM3NSAzNS44MjgxMjUgUSAxOC42MDkzNzUgMzEuMjk2ODc1IDE4LjYwOTM3NSAyMy4zOTA2MjUgUSAxOC42MDkzNzUgMTUuNTMxMjUgMjIuNDg0Mzc1IDEwLjk1MzEyNSBRIDI2LjM3NSA2LjM5MDYyNSAzMy4wMTU2MjUgNi4zOTA2MjUgUSAzOS42NTYyNSA2LjM5MDYyNSA0My41MzEyNSAxMC45NTMxMjUgUSA0Ny40MDYyNSAxNS41MzEyNSA0Ny40MDYyNSAyMy4zOTA2MjUgUSA0Ny40MDYyNSAzMS4yOTY4NzUgNDMuNTMxMjUgMzUuODI4MTI1IFEgMzkuNjU2MjUgNDAuMzc1IDMzLjAxNTYyNSA0MC4zNzUgek0gNTIuNTkzNzUgNzEuMjk2ODc1IEwgNTIuNTkzNzUgNjIuMzEyNSBRIDQ4Ljg3NSA2NC4wNjI1IDQ1LjA5Mzc1IDY0Ljk4NDM3NSBRIDQxLjMxMjUgNjUuOTIxODc1IDM3LjU5Mzc1IDY1LjkyMTg3NSBRIDI3LjgyODEyNSA2NS45MjE4NzUgMjIuNjcxODc1IDU5LjMyODEyNSBRIDE3LjUzMTI1IDUyLjczNDM3NSAxNi43OTY4NzUgMzkuNDA2MjUgUSAxOS42NzE4NzUgNDMuNjU2MjUgMjQuMDE1NjI1IDQ1LjkyMTg3NSBRIDI4LjM3NSA0OC4xODc1IDMzLjU5Mzc1IDQ4LjE4NzUgUSA0NC41NzgxMjUgNDguMTg3NSA1MC45NTMxMjUgNDEuNTE1NjI1IFEgNTcuMzI4MTI1IDM0Ljg1OTM3NSA1Ny4zMjgxMjUgMjMuMzkwNjI1IFEgNTcuMzI4MTI1IDEyLjE1NjI1IDUwLjY4NzUgNS4zNTkzNzUgUSA0NC4wNDY4NzUgLTEuNDIxODc1IDMzLjAxNTYyNSAtMS40MjE4NzUgUSAyMC4zNTkzNzUgLTEuNDIxODc1IDEzLjY3MTg3NSA4LjI2NTYyNSBRIDYuOTg0Mzc1IDE3Ljk2ODc1IDYuOTg0Mzc1IDM2LjM3NSBRIDYuOTg0Mzc1IDUzLjY1NjI1IDE1LjE4NzUgNjMuOTM3NSBRIDIzLjM5MDYyNSA3NC4yMTg3NSAzNy4yMDMxMjUgNzQuMjE4NzUgUSA0MC45MjE4NzUgNzQuMjE4NzUgNDQuNzAzMTI1IDczLjQ4NDM3NSBRIDQ4LjQ4NDM3NSA3Mi43NSA1Mi41OTM3NSA3MS4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTQiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuOTA2NjMgMzAuNjE4ODQ3KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU0Ii8+ICAgIDwvZz4gICA8L2c+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA1ZGU4YjdiOWMxNDRlYmJiMGYxZmFlMGNhOWYxNzY2LnNldEljb24oZGl2X2ljb25fNDE4OTU1YWMyNDU0NGEwNmIwZTE0NmRiOTQzYTc0MjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzUwZjE0N2NmNjhhNDdmM2IxMWJiZDQzYTk2NmQ1OWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjljYzJhZTMwMDYyNDE2OTk1ZGNmZWM3Njc4MjA1ZTcgPSAkKGA8ZGl2IGlkPSJodG1sXzY5Y2MyYWUzMDA2MjQxNjk5NWRjZmVjNzY3ODIwNWU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2VvcmdpYW48L2E+PGJyPmNvbnNvbmFudHM6IDI4PGJyPnZvd2VsczogNjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1MGYxNDdjZjY4YTQ3ZjNiMTFiYmQ0M2E5NjZkNTlkLnNldENvbnRlbnQoaHRtbF82OWNjMmFlMzAwNjI0MTY5OTVkY2ZlYzc2NzgyMDVlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA1ZGU4YjdiOWMxNDRlYmJiMGYxZmFlMGNhOWYxNzY2LmJpbmRQb3B1cChwb3B1cF8zNTBmMTQ3Y2Y2OGE0N2YzYjExYmJkNDNhOTY2ZDU5ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2NhMTk5YzIwNjgxMzQ5NThiZmFiMGU1NWI2ODZkMDU1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYmRjNDdmMjMwODQ0NDMyYTU2OTQyNjdiZTk3ZDdhMik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYmU2N2UyY2FjNTFjNDJmZWE5ZWE2ZjQ4ZDhlODJjZDYgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDQwLjUxMjAyNiAxNS4wNDc0OTggMzkuMDAzNDEyIDEzLjk1NjMxMSAzNy4zNTEzODQgMTMuMTIzMzc2IEMgMzUuNjk5MzU3IDEyLjI5MDQ0MSAzMy45MjQ5NzQgMTEuNzI2Mzc2IDMyLjA5NTIzMiAxMS40NTI0NzggQyAzMC4yNjU0OSAxMS4xNzg1OCAyOC40MDM3MTMgMTEuMTk4MzQxIDI2LjU4MDE5NyAxMS41MTEwMTQgQyAyNC43NTY2ODEgMTEuODIzNjg3IDIyLjk5NDY3IDEyLjQyNTI4NyAyMS4zNjA2OTQgMTMuMjkzMDk5IEMgMTkuNzI2NzE5IDE0LjE2MDkxMSAxOC4yNDE2MDUgMTUuMjgzODczIDE2Ljk2MTQzIDE2LjYxOTU4NSBDIDE1LjY4MTI1NCAxNy45NTUyOTYgMTQuNjIyMzMzIDE5LjQ4NjczMSAxMy44MjQ2NTEgMjEuMTU2MDY2IEMgMTMuMDI2OTY5IDIyLjgyNTQgMTIuNTAwNjkzIDI0LjYxMTM1NiAxMi4yNjU2OTQgMjYuNDQ2NDk5IEMgMTIuMDMwNjk0IDI4LjI4MTY0MiAxMi4wODk5NjcgMzAuMTQyNTgxIDEyLjQ0MTI3NSAzMS45NTkwNDkgQyAxMi43OTI1ODMgMzMuNzc1NTE4IDEzLjQzMTQ0NyAzNS41MjQzNjMgMTQuMzMzNzQ1IDM3LjEzOTU1MSBDIDE1LjIzNjA0MyAzOC43NTQ3MzkgMTYuMzkwMjc0IDQwLjIxNTY4MiAxNy43NTI4NTcgNDEuNDY3MjE5IEMgMTkuMTE1NDM5IDQyLjcxODc1NSAyMC42NjkwMDUgNDMuNzQ0OTMxIDIyLjM1NDg5NSA0NC41MDcwMDIgQyAyNC4wNDA3ODUgNDUuMjY5MDcyIDI1LjgzNzUwOSA0NS43NTczMjIgMjcuNjc3MjI2IDQ1Ljk1MzMxNyBDIDI5LjUxNjk0NCA0Ni4xNDkzMTIgMzEuMzc2MjA1IDQ2LjA1MDU1MyAzMy4xODQ4MDcgNDUuNjYwNzY5IEMgMzQuOTkzNDEgNDUuMjcwOTg1IDM2LjcyODMwMSA0NC41OTUxNDUgMzguMzIzOTczIDQzLjY1ODc2OCBDIDM5LjkxOTY0NiA0Mi43MjIzOSA0MS4zNTU3NjEgNDEuNTM3NDA5IDQyLjU3ODA5NCA0MC4xNDg1NjkgQyA0My44MDA0MjcgMzguNzU5NzI5IDQ0Ljc5MzM5OCAzNy4xODQ3MzIgNDUuNTE5NTEzIDM1LjQ4MzA0NyBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDQ1LjUxOTUxMyAzNS40ODMwNDcgQyA0Ni44ODE5NTEgMzIuMjkwMTA5IDQ3LjI1Nzg5NyAyOC43NjEyNjIgNDYuNTk4NzI1IDI1LjM1Mjk1MSBDIDQ1LjkzOTU1MyAyMS45NDQ2MzkgNDQuMjc0OTYzIDE4LjgxMDQzNSA0MS44MjAyNjQgMTYuMzU1NzM2IEwgMjkuNTIgMjguNjU2IEwgNDUuNTE5NTEzIDM1LjQ4MzA0NyB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAzMCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDQwLjU3ODEyNSAzOS4zMTI1IFEgNDcuNjU2MjUgMzcuNzk2ODc1IDUxLjYyNSAzMyBRIDU1LjYwOTM3NSAyOC4yMTg3NSA1NS42MDkzNzUgMjEuMTg3NSBRIDU1LjYwOTM3NSAxMC40MDYyNSA0OC4xODc1IDQuNDg0Mzc1IFEgNDAuNzY1NjI1IC0xLjQyMTg3NSAyNy4wOTM3NSAtMS40MjE4NzUgUSAyMi41MTU2MjUgLTEuNDIxODc1IDE3LjY1NjI1IC0wLjUxNTYyNSBRIDEyLjc5Njg3NSAwLjM5MDYyNSA3LjYyNSAyLjIwMzEyNSBMIDcuNjI1IDExLjcxODc1IFEgMTEuNzE4NzUgOS4zMjgxMjUgMTYuNTkzNzUgOC4xMDkzNzUgUSAyMS40ODQzNzUgNi44OTA2MjUgMjYuODEyNSA2Ljg5MDYyNSBRIDM2LjA3ODEyNSA2Ljg5MDYyNSA0MC45Mzc1IDEwLjU0Njg3NSBRIDQ1Ljc5Njg3NSAxNC4yMDMxMjUgNDUuNzk2ODc1IDIxLjE4NzUgUSA0NS43OTY4NzUgMjcuNjQwNjI1IDQxLjI4MTI1IDMxLjI2NTYyNSBRIDM2Ljc2NTYyNSAzNC45MDYyNSAyOC43MTg3NSAzNC45MDYyNSBMIDIwLjIxODc1IDM0LjkwNjI1IEwgMjAuMjE4NzUgNDMuMDE1NjI1IEwgMjkuMTA5Mzc1IDQzLjAxNTYyNSBRIDM2LjM3NSA0My4wMTU2MjUgNDAuMjM0Mzc1IDQ1LjkyMTg3NSBRIDQ0LjA5Mzc1IDQ4LjgyODEyNSA0NC4wOTM3NSA1NC4yOTY4NzUgUSA0NC4wOTM3NSA1OS45MDYyNSA0MC4xMDkzNzUgNjIuOTA2MjUgUSAzNi4xNDA2MjUgNjUuOTIxODc1IDI4LjcxODc1IDY1LjkyMTg3NSBRIDI0LjY1NjI1IDY1LjkyMTg3NSAyMC4wMTU2MjUgNjUuMDMxMjUgUSAxNS4zNzUgNjQuMTU2MjUgOS44MTI1IDYyLjMxMjUgTCA5LjgxMjUgNzEuMDkzNzUgUSAxNS40Mzc1IDcyLjY1NjI1IDIwLjM0Mzc1IDczLjQzNzUgUSAyNS4yNSA3NC4yMTg3NSAyOS41OTM3NSA3NC4yMTg3NSBRIDQwLjgyODEyNSA3NC4yMTg3NSA0Ny4zNTkzNzUgNjkuMTA5Mzc1IFEgNTMuOTA2MjUgNjQuMDE1NjI1IDUzLjkwNjI1IDU1LjMyODEyNSBRIDUzLjkwNjI1IDQ5LjI2NTYyNSA1MC40Mzc1IDQ1LjA5Mzc1IFEgNDYuOTY4NzUgNDAuOTIxODc1IDQwLjU3ODEyNSAzOS4zMTI1IHoiIGlkPSJEZWphVnVTYW5zLTUxIi8+ICAgICA8cGF0aCBkPSJNIDMxLjc4MTI1IDY2LjQwNjI1IFEgMjQuMTcxODc1IDY2LjQwNjI1IDIwLjMyODEyNSA1OC45MDYyNSBRIDE2LjUgNTEuNDIxODc1IDE2LjUgMzYuMzc1IFEgMTYuNSAyMS4zOTA2MjUgMjAuMzI4MTI1IDEzLjg5MDYyNSBRIDI0LjE3MTg3NSA2LjM5MDYyNSAzMS43ODEyNSA2LjM5MDYyNSBRIDM5LjQ1MzEyNSA2LjM5MDYyNSA0My4yODEyNSAxMy44OTA2MjUgUSA0Ny4xMjUgMjEuMzkwNjI1IDQ3LjEyNSAzNi4zNzUgUSA0Ny4xMjUgNTEuNDIxODc1IDQzLjI4MTI1IDU4LjkwNjI1IFEgMzkuNDUzMTI1IDY2LjQwNjI1IDMxLjc4MTI1IDY2LjQwNjI1IHpNIDMxLjc4MTI1IDc0LjIxODc1IFEgNDQuMDQ2ODc1IDc0LjIxODc1IDUwLjUxNTYyNSA2NC41MTU2MjUgUSA1Ni45ODQzNzUgNTQuODI4MTI1IDU2Ljk4NDM3NSAzNi4zNzUgUSA1Ni45ODQzNzUgMTcuOTY4NzUgNTAuNTE1NjI1IDguMjY1NjI1IFEgNDQuMDQ2ODc1IC0xLjQyMTg3NSAzMS43ODEyNSAtMS40MjE4NzUgUSAxOS41MzEyNSAtMS40MjE4NzUgMTMuMDYyNSA4LjI2NTYyNSBRIDYuNTkzNzUgMTcuOTY4NzUgNi41OTM3NSAzNi4zNzUgUSA2LjU5Mzc1IDU0LjgyODEyNSAxMy4wNjI1IDY0LjUxNTYyNSBRIDE5LjUzMTI1IDc0LjIxODc1IDMxLjc4MTI1IDc0LjIxODc1IHoiIGlkPSJEZWphVnVTYW5zLTQ4Ii8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjM3OTI1NSAzMi4wNzU5ODUpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTEiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy00OCIvPiAgICA8L2c+ICAgPC9nPiAgIDxnIGlkPSJ0ZXh0XzIiPiAgICA8IS0tIDcgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSA4LjIwMzEyNSA3Mi45MDYyNSBMIDU1LjA3ODEyNSA3Mi45MDYyNSBMIDU1LjA3ODEyNSA2OC43MDMxMjUgTCAyOC42MDkzNzUgMCBMIDE4LjMxMjUgMCBMIDQzLjIxODc1IDY0LjU5Mzc1IEwgOC4yMDMxMjUgNjQuNTkzNzUgeiIgaWQ9IkRlamFWdVNhbnMtNTUiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuOTM1NzQ1IDMwLjc1NDc2NSlzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01NSIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jYTE5OWMyMDY4MTM0OTU4YmZhYjBlNTViNjg2ZDA1NS5zZXRJY29uKGRpdl9pY29uX2JlNjdlMmNhYzUxYzQyZmVhOWVhNmY0OGQ4ZTgyY2Q2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0ODY4ZDU2MjJiZDQwMTlhZThlZmY1Y2FiMzRlMzlkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ4NTQyYzkwY2FjMzQ3OGZiMjI1Zjg0MGE5MWNkMzZmID0gJChgPGRpdiBpZD0iaHRtbF80ODU0MmM5MGNhYzM0NzhmYjIyNWY4NDBhOTFjZDM2ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FtaGExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFtaGFyaWM8L2E+PGJyPmNvbnNvbmFudHM6IDMwPGJyPnZvd2VsczogNzxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE0ODY4ZDU2MjJiZDQwMTlhZThlZmY1Y2FiMzRlMzlkLnNldENvbnRlbnQoaHRtbF80ODU0MmM5MGNhYzM0NzhmYjIyNWY4NDBhOTFjZDM2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NhMTk5YzIwNjgxMzQ5NThiZmFiMGU1NWI2ODZkMDU1LmJpbmRQb3B1cChwb3B1cF8xNDg2OGQ1NjIyYmQ0MDE5YWU4ZWZmNWNhYjM0ZTM5ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzQ1YmUxZWI2MzQ3YjQ1NmI5NzllZGFhNzFkODVjMzZmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFstNS4yNjkxOCwgMzUuNDgwOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYmRjNDdmMjMwODQ0NDMyYTU2OTQyNjdiZTk3ZDdhMik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fOTdlY2VkYmVlODVkNDg1NDlmMzVjZGRhYmYxMmRhN2YgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDQwLjQxNTQ3OCAxNC45NTA5NSAzOC43ODAzNjIgMTMuNzk3MTQ2IDM2Ljk4NTk4MyAxMi45NDQ0NzMgQyAzNS4xOTE2MDQgMTIuMDkxOCAzMy4yNjQzNDIgMTEuNTUyNzkyIDMxLjI4Nzk2MiAxMS4zNTA4NzcgQyAyOS4zMTE1ODIgMTEuMTQ4OTYyIDI3LjMxNTEzOSAxMS4yODcxMDggMjUuMzg1NDA2IDExLjc1OTMxMSBDIDIzLjQ1NTY3MyAxMi4yMzE1MTMgMjEuNjIxMDE3IDEzLjAzMDgzMSAxOS45NjExODEgMTQuMTIyNTIzIEMgMTguMzAxMzQ1IDE1LjIxNDIxNCAxNi44NDA3MjkgMTYuNTgyMjMxIDE1LjY0MjgxNiAxOC4xNjcxMTMgQyAxNC40NDQ5MDMgMTkuNzUxOTk2IDEzLjUyNzMwNSAyMS41MzA0NDUgMTIuOTI5OTAzIDIzLjQyNTE2MyBDIDEyLjMzMjUgMjUuMzE5ODgxIDEyLjA2NDA3NyAyNy4zMDMwMTUgMTIuMTM2Mjk4IDI5LjI4ODM2OSBDIDEyLjIwODUyIDMxLjI3MzcyMyAxMi42MjAzMjQgMzMuMjMyMTExIDEzLjM1MzgxNCAzNS4wNzg0MTYgQyAxNC4wODczMDQgMzYuOTI0NzIgMTUuMTMxNjk2IDM4LjYzMTc5OCAxNi40NDE1OTcgNDAuMTI1NDUzIEMgMTcuNzUxNDk4IDQxLjYxOTEwOSAxOS4zMDc2NTEgNDIuODc3Mzg0IDIxLjA0MjQyIDQzLjg0NTU4OSBDIDIyLjc3NzE5IDQ0LjgxMzc5NSAyNC42NjUwNzMgNDUuNDc3Njk4IDI2LjYyNDAxNSA0NS44MDg0NDIgQyAyOC41ODI5NTcgNDYuMTM5MTg2IDMwLjU4NDE2MSA0Ni4xMzE5MDkgMzIuNTQwNjQ2IDQ1Ljc4NjkyOCBDIDM0LjQ5NzEzMiA0NS40NDE5NDYgMzYuMzgwMTM2IDQ0Ljc2NDMzMiAzOC4xMDc4MTkgNDMuNzgzNTM2IEMgMzkuODM1NTAxIDQyLjgwMjc0IDQxLjM4MjQ2MyA0MS41MzMxODIgNDIuNjgxNDY3IDQwLjAzMDA0IEMgNDMuOTgwNDcgMzguNTI2ODk4IDQ1LjAxMjQyIDM2LjgxMjI3IDQ1LjczMjQ2NCAzNC45NjA2OCBDIDQ2LjQ1MjUwOCAzMy4xMDkwOTEgNDYuODUwMDYgMzEuMTQ3NzU5IDQ2LjkwNzg0MSAyOS4xNjE5MzMgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSA0Ni45MDc4NDEgMjkuMTYxOTMzIEMgNDYuOTc2NzU3IDI2Ljc5MzQ0NiA0Ni41NjEwMTYgMjQuNDM1NjYyIDQ1LjY4NjE4NSAyMi4yMzM1ODQgQyA0NC44MTEzNTUgMjAuMDMxNTA1IDQzLjQ5NTc0NSAxOC4wMzEyMTcgNDEuODIwMjYzIDE2LjM1NTczNSBMIDI5LjUyIDI4LjY1NiBMIDQ2LjkwNzg0MSAyOS4xNjE5MzMgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gNDcgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAzNy43OTY4NzUgNjQuMzEyNSBMIDEyLjg5MDYyNSAyNS4zOTA2MjUgTCAzNy43OTY4NzUgMjUuMzkwNjI1IHpNIDM1LjIwMzEyNSA3Mi45MDYyNSBMIDQ3LjYwOTM3NSA3Mi45MDYyNSBMIDQ3LjYwOTM3NSAyNS4zOTA2MjUgTCA1OC4wMTU2MjUgMjUuMzkwNjI1IEwgNTguMDE1NjI1IDE3LjE4NzUgTCA0Ny42MDkzNzUgMTcuMTg3NSBMIDQ3LjYwOTM3NSAwIEwgMzcuNzk2ODc1IDAgTCAzNy43OTY4NzUgMTcuMTg3NSBMIDQuODkwNjI1IDE3LjE4NzUgTCA0Ljg5MDYyNSAyNi43MDMxMjUgeiIgaWQ9IkRlamFWdVNhbnMtNTIiLz4gICAgIDxwYXRoIGQ9Ik0gOC4yMDMxMjUgNzIuOTA2MjUgTCA1NS4wNzgxMjUgNzIuOTA2MjUgTCA1NS4wNzgxMjUgNjguNzAzMTI1IEwgMjguNjA5Mzc1IDAgTCAxOC4zMTI1IDAgTCA0My4yMTg3NSA2NC41OTM3NSBMIDguMjAzMTI1IDY0LjU5Mzc1IHoiIGlkPSJEZWphVnVTYW5zLTU1Ii8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjU2MTc2MyAzMi42OTk4NTgpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTIiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01NSIvPiAgICA8L2c+ICAgPC9nPiAgIDxnIGlkPSJ0ZXh0XzIiPiAgICA8IS0tIDcgLS0+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi43NTMyMzcgMzAuMTMwODkyKXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU1Ii8+ICAgIDwvZz4gICA8L2c+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQ1YmUxZWI2MzQ3YjQ1NmI5NzllZGFhNzFkODVjMzZmLnNldEljb24oZGl2X2ljb25fOTdlY2VkYmVlODVkNDg1NDlmMzVjZGRhYmYxMmRhN2YpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWI4MmE1Y2QxMzg0NDQyOWFjZmM2MjI5ZWFlODc1ZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjk5NzNhODc3ZGMxNGQ2YTkwOWZiNmI3ODM4MTYyMjcgPSAkKGA8ZGl2IGlkPSJodG1sXzY5OTczYTg3N2RjMTRkNmE5MDlmYjZiNzgzODE2MjI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2FuZDEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2FuZGF3ZTwvYT48YnI+Y29uc29uYW50czogNDc8YnI+dm93ZWxzOiA3PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWI4MmE1Y2QxMzg0NDQyOWFjZmM2MjI5ZWFlODc1ZmUuc2V0Q29udGVudChodG1sXzY5OTczYTg3N2RjMTRkNmE5MDlmYjZiNzgzODE2MjI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDViZTFlYjYzNDdiNDU2Yjk3OWVkYWE3MWQ4NWMzNmYuYmluZFBvcHVwKHBvcHVwX2FiODJhNWNkMTM4NDQ0MjlhY2ZjNjIyOWVhZTg3NWZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjFhYzYyNjhkNjFiNGExMzg4NDk1MjgwMzRmMjg2YzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2JkYzQ3ZjIzMDg0NDQzMmE1Njk0MjY3YmU5N2Q3YTIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzY4MWQ0MzYzOWM4YjQ4OGQ5N2NiMzQ2NmI5OTEwYzgxID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyA0MC4zNzQxNzMgMTQuOTA5NjQ2IDM4LjY4NDMzMSAxMy43Mjk4MzYgMzYuODI4NTA5IDEyLjg3MDYwNSBDIDM0Ljk3MjY4NiAxMi4wMTEzNzUgMzIuOTc5Nzk1IDExLjQ4NjEwOSAzMC45NDE1NTUgMTEuMzE4OTgzIEMgMjguOTAzMzE0IDExLjE1MTg1NyAyNi44NTE0NzkgMTEuMzQ1NDczIDI0Ljg4MDQ3OSAxMS44OTA5MjIgQyAyMi45MDk0NzkgMTIuNDM2MzcyIDIxLjA1MDAyMiAxMy4zMjUxNTUgMTkuMzg3Njg0IDE0LjUxNjM2OSBDIDE3LjcyNTM0NyAxNS43MDc1ODMgMTYuMjg2MDI4IDE3LjE4MjY2OSAxNS4xMzU5NjkgMTguODczNzM5IEMgMTMuOTg1OTA5IDIwLjU2NDgwOSAxMy4xNDMwMjcgMjIuNDQ1NTE4IDEyLjY0NjExMyAyNC40MjkzMSBDIDEyLjE0OTE5OCAyNi40MTMxMDMgMTIuMDA1OTk0IDI4LjQ2OTA3MiAxMi4yMjMwOTEgMzAuNTAyNTk3IEMgMTIuNDQwMTg4IDMyLjUzNjEyMiAxMy4wMTQyMDMgMzQuNTE1NTIyIDEzLjkxODcxOSAzNi4zNDk2OTkgQyAxNC44MjMyMzUgMzguMTgzODc3IDE2LjA0NDE2IDM5Ljg0NDI1NiAxNy41MjUzMDMgNDEuMjU0NDIyIEMgMTkuMDA2NDQ3IDQyLjY2NDU4OCAyMC43MjQ3MzQgNDMuODAyNTcyIDIyLjYwMTA4NCA0NC42MTYgQyAyNC40Nzc0MzUgNDUuNDI5NDI4IDI2LjQ4MjYxNiA0NS45MDU2MjcgMjguNTI0MzQ0IDQ2LjAyMjY4MiBDIDMwLjU2NjA3MiA0Ni4xMzk3MzcgMzIuNjEyNTM4IDQ1Ljg5NTgyNCAzNC41Njk1NTggNDUuMzAyMTY5IEMgMzYuNTI2NTc5IDQ0LjcwODUxNCAzOC4zNjM2NjQgNDMuNzc0MzY1IDM5Ljk5NjI2NyA0Mi41NDI3MTQgQyA0MS42Mjg4NyA0MS4zMTEwNjMgNDMuMDMxNTU1IDM5LjgwMTA5OSA0NC4xMzk3NjcgMzguMDgyMzE0IEMgNDUuMjQ3OTc5IDM2LjM2MzUyOSA0Ni4wNDQ0NTMgMzQuNDYyNzAyIDQ2LjQ5MjUzMyAzMi40NjczMTIgQyA0Ni45NDA2MTMgMzAuNDcxOTIyIDQ3LjAzMzMxOCAyOC40MTMwNTggNDYuNzY2MzgyIDI2LjM4NTQ3MyBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDQ2Ljc2NjM4MiAyNi4zODU0NzMgQyA0Ni41MTgxNTUgMjQuNDk5OTk3IDQ1Ljk2MjQwMiAyMi42Njc5MjYgNDUuMTIxMjgyIDIwLjk2MjMwMiBDIDQ0LjI4MDE2MSAxOS4yNTY2NzggNDMuMTY1MDAyIDE3LjcwMDQ3NSA0MS44MjAyNjYgMTYuMzU1NzM4IEwgMjkuNTIgMjguNjU2IEwgNDYuNzY2MzgyIDI2LjM4NTQ3MyB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSA0MyAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDM3Ljc5Njg3NSA2NC4zMTI1IEwgMTIuODkwNjI1IDI1LjM5MDYyNSBMIDM3Ljc5Njg3NSAyNS4zOTA2MjUgek0gMzUuMjAzMTI1IDcyLjkwNjI1IEwgNDcuNjA5Mzc1IDcyLjkwNjI1IEwgNDcuNjA5Mzc1IDI1LjM5MDYyNSBMIDU4LjAxNTYyNSAyNS4zOTA2MjUgTCA1OC4wMTU2MjUgMTcuMTg3NSBMIDQ3LjYwOTM3NSAxNy4xODc1IEwgNDcuNjA5Mzc1IDAgTCAzNy43OTY4NzUgMCBMIDM3Ljc5Njg3NSAxNy4xODc1IEwgNC44OTA2MjUgMTcuMTg3NSBMIDQuODkwNjI1IDI2LjcwMzEyNSB6IiBpZD0iRGVqYVZ1U2Fucy01MiIvPiAgICAgPHBhdGggZD0iTSA0MC41NzgxMjUgMzkuMzEyNSBRIDQ3LjY1NjI1IDM3Ljc5Njg3NSA1MS42MjUgMzMgUSA1NS42MDkzNzUgMjguMjE4NzUgNTUuNjA5Mzc1IDIxLjE4NzUgUSA1NS42MDkzNzUgMTAuNDA2MjUgNDguMTg3NSA0LjQ4NDM3NSBRIDQwLjc2NTYyNSAtMS40MjE4NzUgMjcuMDkzNzUgLTEuNDIxODc1IFEgMjIuNTE1NjI1IC0xLjQyMTg3NSAxNy42NTYyNSAtMC41MTU2MjUgUSAxMi43OTY4NzUgMC4zOTA2MjUgNy42MjUgMi4yMDMxMjUgTCA3LjYyNSAxMS43MTg3NSBRIDExLjcxODc1IDkuMzI4MTI1IDE2LjU5Mzc1IDguMTA5Mzc1IFEgMjEuNDg0Mzc1IDYuODkwNjI1IDI2LjgxMjUgNi44OTA2MjUgUSAzNi4wNzgxMjUgNi44OTA2MjUgNDAuOTM3NSAxMC41NDY4NzUgUSA0NS43OTY4NzUgMTQuMjAzMTI1IDQ1Ljc5Njg3NSAyMS4xODc1IFEgNDUuNzk2ODc1IDI3LjY0MDYyNSA0MS4yODEyNSAzMS4yNjU2MjUgUSAzNi43NjU2MjUgMzQuOTA2MjUgMjguNzE4NzUgMzQuOTA2MjUgTCAyMC4yMTg3NSAzNC45MDYyNSBMIDIwLjIxODc1IDQzLjAxNTYyNSBMIDI5LjEwOTM3NSA0My4wMTU2MjUgUSAzNi4zNzUgNDMuMDE1NjI1IDQwLjIzNDM3NSA0NS45MjE4NzUgUSA0NC4wOTM3NSA0OC44MjgxMjUgNDQuMDkzNzUgNTQuMjk2ODc1IFEgNDQuMDkzNzUgNTkuOTA2MjUgNDAuMTA5Mzc1IDYyLjkwNjI1IFEgMzYuMTQwNjI1IDY1LjkyMTg3NSAyOC43MTg3NSA2NS45MjE4NzUgUSAyNC42NTYyNSA2NS45MjE4NzUgMjAuMDE1NjI1IDY1LjAzMTI1IFEgMTUuMzc1IDY0LjE1NjI1IDkuODEyNSA2Mi4zMTI1IEwgOS44MTI1IDcxLjA5Mzc1IFEgMTUuNDM3NSA3Mi42NTYyNSAyMC4zNDM3NSA3My40Mzc1IFEgMjUuMjUgNzQuMjE4NzUgMjkuNTkzNzUgNzQuMjE4NzUgUSA0MC44MjgxMjUgNzQuMjE4NzUgNDcuMzU5Mzc1IDY5LjEwOTM3NSBRIDUzLjkwNjI1IDY0LjAxNTYyNSA1My45MDYyNSA1NS4zMjgxMjUgUSA1My45MDYyNSA0OS4yNjU2MjUgNTAuNDM3NSA0NS4wOTM3NSBRIDQ2Ljk2ODc1IDQwLjkyMTg3NSA0MC41NzgxMjUgMzkuMzEyNSB6IiBpZD0iRGVqYVZ1U2Fucy01MSIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMy42NzQ3NDQgMzIuOTU0MTE1KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUyIi8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTEiLz4gICAgPC9nPiAgIDwvZz4gICA8ZyBpZD0idGV4dF8yIj4gICAgPCEtLSA1IC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMTAuNzk2ODc1IDcyLjkwNjI1IEwgNDkuNTE1NjI1IDcyLjkwNjI1IEwgNDkuNTE1NjI1IDY0LjU5Mzc1IEwgMTkuODI4MTI1IDY0LjU5Mzc1IEwgMTkuODI4MTI1IDQ2LjczNDM3NSBRIDIxLjk2ODc1IDQ3LjQ2ODc1IDI0LjEwOTM3NSA0Ny44MjgxMjUgUSAyNi4yNjU2MjUgNDguMTg3NSAyOC40MjE4NzUgNDguMTg3NSBRIDQwLjYyNSA0OC4xODc1IDQ3Ljc1IDQxLjUgUSA1NC44OTA2MjUgMzQuODEyNSA1NC44OTA2MjUgMjMuMzkwNjI1IFEgNTQuODkwNjI1IDExLjYyNSA0Ny41NjI1IDUuMDkzNzUgUSA0MC4yMzQzNzUgLTEuNDIxODc1IDI2LjkwNjI1IC0xLjQyMTg3NSBRIDIyLjMxMjUgLTEuNDIxODc1IDE3LjU0Njg3NSAtMC42NDA2MjUgUSAxMi43OTY4NzUgMC4xNDA2MjUgNy43MTg3NSAxLjcwMzEyNSBMIDcuNzE4NzUgMTEuNjI1IFEgMTIuMTA5Mzc1IDkuMjM0Mzc1IDE2Ljc5Njg3NSA4LjA2MjUgUSAyMS40ODQzNzUgNi44OTA2MjUgMjYuNzAzMTI1IDYuODkwNjI1IFEgMzUuMTU2MjUgNi44OTA2MjUgNDAuMDc4MTI1IDExLjMyODEyNSBRIDQ1LjAxNTYyNSAxNS43NjU2MjUgNDUuMDE1NjI1IDIzLjM5MDYyNSBRIDQ1LjAxNTYyNSAzMSA0MC4wNzgxMjUgMzUuNDM3NSBRIDM1LjE1NjI1IDM5Ljg5MDYyNSAyNi43MDMxMjUgMzkuODkwNjI1IFEgMjIuNzUgMzkuODkwNjI1IDE4LjgxMjUgMzkuMDE1NjI1IFEgMTQuODkwNjI1IDM4LjE0MDYyNSAxMC43OTY4NzUgMzYuMjgxMjUgeiIgaWQ9IkRlamFWdVNhbnMtNTMiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuNjQwMjU2IDI5Ljg3NjYzNSlzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MyIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yMWFjNjI2OGQ2MWI0YTEzODg0OTUyODAzNGYyODZjNi5zZXRJY29uKGRpdl9pY29uXzY4MWQ0MzYzOWM4YjQ4OGQ5N2NiMzQ2NmI5OTEwYzgxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q2YjU5MzJmMjFiNDQ1YjRiMTEzMWNkZmUzMTM3NDc1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxYTgxYWExMDk2OTRiZThiOTc1NTY2OWQ3MjlhZmZlID0gJChgPGRpdiBpZD0iaHRtbF8yMWE4MWFhMTA5Njk0YmU4Yjk3NTU2NjlkNzI5YWZmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RsaW4xMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRsaW5naXQ8L2E+PGJyPmNvbnNvbmFudHM6IDQzPGJyPnZvd2VsczogNTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q2YjU5MzJmMjFiNDQ1YjRiMTEzMWNkZmUzMTM3NDc1LnNldENvbnRlbnQoaHRtbF8yMWE4MWFhMTA5Njk0YmU4Yjk3NTU2NjlkNzI5YWZmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIxYWM2MjY4ZDYxYjRhMTM4ODQ5NTI4MDM0ZjI4NmM2LmJpbmRQb3B1cChwb3B1cF9kNmI1OTMyZjIxYjQ0NWI0YjExMzFjZGZlMzEzNzQ3NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2ZmMjIwMzQxMGNlZTQ0Njc4NDIwMTMxY2YyYTYwYmI5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NiZGM0N2YyMzA4NDQ0MzJhNTY5NDI2N2JlOTdkN2EyKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl83YjJkNjc0MDMzYWI0NjBkYmUyNGRhNTcwODE4YWUxYyA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgNDAuNTY1NTM0IDE1LjEwMTAwNyAzOS4xMjYxNzEgMTQuMDQ1NjIxIDM3LjU1MjIwOSAxMy4yMjYyNjkgQyAzNS45NzgyNDggMTIuNDA2OTE3IDM0LjI4ODE0MiAxMS44MzMyMDMgMzIuNTQwNjQ1IDExLjUyNTA3MiBDIDMwLjc5MzE0NyAxMS4yMTY5NDEgMjkuMDA4NzQ1IDExLjE3ODAwNSAyNy4yNDk0NzEgMTEuNDA5NjE4IEMgMjUuNDkwMTk2IDExLjY0MTIzMSAyMy43NzY2NzMgMTIuMTQwNjc4IDIyLjE2ODQ3IDEyLjg5MDU5NSBDIDIwLjU2MDI2OCAxMy42NDA1MTIgMTkuMDc2MjM5IDE0LjYzMjEwOSAxNy43Njc5NzMgMTUuODMwOTE0IEMgMTYuNDU5NzA3IDE3LjAyOTcxOCAxNS4zNDI1NDIgMTguNDIxNjc3IDE0LjQ1NTMxNSAxOS45NTg0IEMgMTMuNTY4MDg3IDIxLjQ5NTEyNCAxMi45MjExOTggMjMuMTU4NTk2IDEyLjUzNzEzNiAyNC44OTA5OSBDIDEyLjE1MzA3MyAyNi42MjMzODQgMTIuMDM2MzQgMjguNDA0Mzg5IDEyLjE5MDk5NCAzMC4xNzIwOTIgQyAxMi4zNDU2NDggMzEuOTM5Nzk1IDEyLjc2OTg3NiAzMy42NzM0NzMgMTMuNDQ4OTMxIDM1LjMxMjg1NiBDIDE0LjEyNzk4NiAzNi45NTIyMzkgMTUuMDUzOTA2IDM4LjQ3ODEwOCAxNi4xOTQ1MDQgMzkuODM3NDIgQyAxNy4zMzUxMDIgNDEuMTk2NzMxIDE4LjY3NzAwNiA0Mi4zNzM1NDkgMjAuMTczNTY3IDQzLjMyNjk2MyBDIDIxLjY3MDEyNyA0NC4yODAzNzggMjMuMzAzOCA0NC45OTkyMSAyNS4wMTc3OTIgNDUuNDU4NDczIEMgMjYuNzMxNzg0IDQ1LjkxNzczNiAyOC41MDYwMDMgNDYuMTEyMDQ0IDMwLjI3ODc2OSA0Ni4wMzQ2NDQgQyAzMi4wNTE1MzYgNDUuOTU3MjQzIDMzLjgwMjA2NyA0NS42MDkwNCAzNS40Njk1MSA0NS4wMDIxNDEgQyAzNy4xMzY5NTMgNDQuMzk1MjQxIDM4LjcwMTc1OCA0My41MzY3NTkgNDAuMTA5NTI4IDQyLjQ1NjUzOSBDIDQxLjUxNzI5OCA0MS4zNzYzMTkgNDIuNzUxNTI5IDQwLjA4NzAyNSA0My43NjkzMTQgMzguNjMzNDc2IEwgMjkuNTIgMjguNjU2IEwgNDEuODIwMjY0IDE2LjM1NTczNiB6IiBzdHlsZT0iZmlsbDojMDAyMGMyOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gNDMuNzY5MzE0IDM4LjYzMzQ3NiBDIDQ2LjExNDQ4NyAzNS4yODQyMjEgNDcuMjA1MzU5IDMxLjIxMzAzMyA0Ni44NDkwMDYgMjcuMTM5OTA3IEMgNDYuNDkyNjUzIDIzLjA2Njc4MSA0NC43MTE0IDE5LjI0Njg3MSA0MS44MjAyNjMgMTYuMzU1NzM1IEwgMjkuNTIgMjguNjU2IEwgNDMuNzY5MzE0IDM4LjYzMzQ3NiB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyOCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgIDxwYXRoIGQ9Ik0gMzEuNzgxMjUgMzQuNjI1IFEgMjQuNzUgMzQuNjI1IDIwLjcxODc1IDMwLjg1OTM3NSBRIDE2LjcwMzEyNSAyNy4wOTM3NSAxNi43MDMxMjUgMjAuNTE1NjI1IFEgMTYuNzAzMTI1IDEzLjkyMTg3NSAyMC43MTg3NSAxMC4xNTYyNSBRIDI0Ljc1IDYuMzkwNjI1IDMxLjc4MTI1IDYuMzkwNjI1IFEgMzguODEyNSA2LjM5MDYyNSA0Mi44NTkzNzUgMTAuMTcxODc1IFEgNDYuOTIxODc1IDEzLjk2ODc1IDQ2LjkyMTg3NSAyMC41MTU2MjUgUSA0Ni45MjE4NzUgMjcuMDkzNzUgNDIuODkwNjI1IDMwLjg1OTM3NSBRIDM4Ljg3NSAzNC42MjUgMzEuNzgxMjUgMzQuNjI1IHpNIDIxLjkyMTg3NSAzOC44MTI1IFEgMTUuNTc4MTI1IDQwLjM3NSAxMi4wMzEyNSA0NC43MTg3NSBRIDguNSA0OS4wNzgxMjUgOC41IDU1LjMyODEyNSBRIDguNSA2NC4wNjI1IDE0LjcxODc1IDY5LjE0MDYyNSBRIDIwLjk1MzEyNSA3NC4yMTg3NSAzMS43ODEyNSA3NC4yMTg3NSBRIDQyLjY3MTg3NSA3NC4yMTg3NSA0OC44NzUgNjkuMTQwNjI1IFEgNTUuMDc4MTI1IDY0LjA2MjUgNTUuMDc4MTI1IDU1LjMyODEyNSBRIDU1LjA3ODEyNSA0OS4wNzgxMjUgNTEuNTMxMjUgNDQuNzE4NzUgUSA0OCA0MC4zNzUgNDEuNzAzMTI1IDM4LjgxMjUgUSA0OC44MjgxMjUgMzcuMTU2MjUgNTIuNzk2ODc1IDMyLjMxMjUgUSA1Ni43ODEyNSAyNy40ODQzNzUgNTYuNzgxMjUgMjAuNTE1NjI1IFEgNTYuNzgxMjUgOS45MDYyNSA1MC4zMTI1IDQuMjM0Mzc1IFEgNDMuODQzNzUgLTEuNDIxODc1IDMxLjc4MTI1IC0xLjQyMTg3NSBRIDE5LjczNDM3NSAtMS40MjE4NzUgMTMuMjUgNC4yMzQzNzUgUSA2Ljc4MTI1IDkuOTA2MjUgNi43ODEyNSAyMC41MTU2MjUgUSA2Ljc4MTI1IDI3LjQ4NDM3NSAxMC43ODEyNSAzMi4zMTI1IFEgMTQuNzk2ODc1IDM3LjE1NjI1IDIxLjkyMTg3NSAzOC44MTI1IHpNIDE4LjMxMjUgNTQuMzkwNjI1IFEgMTguMzEyNSA0OC43MzQzNzUgMjEuODQzNzUgNDUuNTYyNSBRIDI1LjM5MDYyNSA0Mi4zOTA2MjUgMzEuNzgxMjUgNDIuMzkwNjI1IFEgMzguMTQwNjI1IDQyLjM5MDYyNSA0MS43MTg3NSA0NS41NjI1IFEgNDUuMzEyNSA0OC43MzQzNzUgNDUuMzEyNSA1NC4zOTA2MjUgUSA0NS4zMTI1IDYwLjA2MjUgNDEuNzE4NzUgNjMuMjM0Mzc1IFEgMzguMTQwNjI1IDY2LjQwNjI1IDMxLjc4MTI1IDY2LjQwNjI1IFEgMjUuMzkwNjI1IDY2LjQwNjI1IDIxLjg0Mzc1IDYzLjIzNDM3NSBRIDE4LjMxMjUgNjAuMDYyNSAxOC4zMTI1IDU0LjM5MDYyNSB6IiBpZD0iRGVqYVZ1U2Fucy01NiIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMy4zMjkxOTkgMzEuNzE4NTkzKXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUwIi8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTYiLz4gICAgPC9nPiAgIDwvZz4gICA8ZyBpZD0idGV4dF8yIj4gICAgPCEtLSA4IC0tPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuOTg1ODAxIDMxLjExMjE1NilzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01NiIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mZjIyMDM0MTBjZWU0NDY3ODQyMDEzMWNmMmE2MGJiOS5zZXRJY29uKGRpdl9pY29uXzdiMmQ2NzQwMzNhYjQ2MGRiZTI0ZGE1NzA4MThhZTFjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyODUyNGQyYzY3MTQzODE5YjcyNWEyYmI1YWNhMjM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzNDJjYmMzYzU4NjRkOTc4NjVjNmI4NjU0ZTViYTAwID0gJChgPGRpdiBpZD0iaHRtbF9jMzQyY2JjM2M1ODY0ZDk3ODY1YzZiODY1NGU1YmEwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xha28xMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxha290YTwvYT48YnI+Y29uc29uYW50czogMjg8YnI+dm93ZWxzOiA4PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTI4NTI0ZDJjNjcxNDM4MTliNzI1YTJiYjVhY2EyMzQuc2V0Q29udGVudChodG1sX2MzNDJjYmMzYzU4NjRkOTc4NjVjNmI4NjU0ZTViYTAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmYyMjAzNDEwY2VlNDQ2Nzg0MjAxMzFjZjJhNjBiYjkuYmluZFBvcHVwKHBvcHVwX2EyODUyNGQyYzY3MTQzODE5YjcyNWEyYmI1YWNhMjM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTQxZDM4MTJmNGU2NDczMzgzM2JlMzllNzlkMjNhMmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NiZGM0N2YyMzA4NDQ0MzJhNTY5NDI2N2JlOTdkN2EyKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl83MjVmMDEwOTg2N2Y0M2UyYjlmMDkxMGM0OWEyOTMwMiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgMzkuNjYxMjc3IDE0LjE5Njc1IDM2Ljk3MTQzOSAxMi42NDM3NzEgMzQuMDIyMjA5IDExLjg1MzUyNyBDIDMxLjA3Mjk3OCAxMS4wNjMyODMgMjcuOTY3MDIxIDExLjA2MzI4MyAyNS4wMTc3OSAxMS44NTM1MjcgQyAyMi4wNjg1NiAxMi42NDM3NzEgMTkuMzc4NzIyIDE0LjE5Njc1IDE3LjIxOTczNiAxNi4zNTU3MzcgQyAxNS4wNjA3NDkgMTguNTE0NzIzIDEzLjUwNzc3MSAyMS4yMDQ1NjEgMTIuNzE3NTI3IDI0LjE1Mzc5MiBDIDExLjkyNzI4MyAyNy4xMDMwMjMgMTEuOTI3MjgzIDMwLjIwODk4IDEyLjcxNzUyNyAzMy4xNTgyMSBDIDEzLjUwNzc3MiAzNi4xMDc0NDEgMTUuMDYwNzUgMzguNzk3Mjc5IDE3LjIxOTczNyA0MC45NTYyNjUgQyAxOS4zNzg3MjQgNDMuMTE1MjUxIDIyLjA2ODU2MiA0NC42NjgyMyAyNS4wMTc3OTMgNDUuNDU4NDczIEMgMjcuOTY3MDIzIDQ2LjI0ODcxNyAzMS4wNzI5ODEgNDYuMjQ4NzE3IDM0LjAyMjIxMSA0NS40NTg0NzIgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNC4wMjIyMTEgNDUuNDU4NDcyIEMgMzYuOTcxNDQyIDQ0LjY2ODIyOCAzOS42NjEyNzkgNDMuMTE1MjQ5IDQxLjgyMDI2NiA0MC45NTYyNjIgQyA0My45NzkyNTIgMzguNzk3Mjc1IDQ1LjUzMjIzIDM2LjEwNzQzNyA0Ni4zMjI0NzQgMzMuMTU4MjA2IEMgNDcuMTEyNzE3IDMwLjIwODk3NiA0Ny4xMTI3MTcgMjcuMTAzMDE4IDQ2LjMyMjQ3MiAyNC4xNTM3ODggQyA0NS41MzIyMjggMjEuMjA0NTU4IDQzLjk3OTI0OSAxOC41MTQ3MiA0MS44MjAyNjIgMTYuMzU1NzM0IEwgMjkuNTIgMjguNjU2IEwgMzQuMDIyMjExIDQ1LjQ1ODQ3MiB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyMCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgIDxwYXRoIGQ9Ik0gMzEuNzgxMjUgNjYuNDA2MjUgUSAyNC4xNzE4NzUgNjYuNDA2MjUgMjAuMzI4MTI1IDU4LjkwNjI1IFEgMTYuNSA1MS40MjE4NzUgMTYuNSAzNi4zNzUgUSAxNi41IDIxLjM5MDYyNSAyMC4zMjgxMjUgMTMuODkwNjI1IFEgMjQuMTcxODc1IDYuMzkwNjI1IDMxLjc4MTI1IDYuMzkwNjI1IFEgMzkuNDUzMTI1IDYuMzkwNjI1IDQzLjI4MTI1IDEzLjg5MDYyNSBRIDQ3LjEyNSAyMS4zOTA2MjUgNDcuMTI1IDM2LjM3NSBRIDQ3LjEyNSA1MS40MjE4NzUgNDMuMjgxMjUgNTguOTA2MjUgUSAzOS40NTMxMjUgNjYuNDA2MjUgMzEuNzgxMjUgNjYuNDA2MjUgek0gMzEuNzgxMjUgNzQuMjE4NzUgUSA0NC4wNDY4NzUgNzQuMjE4NzUgNTAuNTE1NjI1IDY0LjUxNTYyNSBRIDU2Ljk4NDM3NSA1NC44MjgxMjUgNTYuOTg0Mzc1IDM2LjM3NSBRIDU2Ljk4NDM3NSAxNy45Njg3NSA1MC41MTU2MjUgOC4yNjU2MjUgUSA0NC4wNDY4NzUgLTEuNDIxODc1IDMxLjc4MTI1IC0xLjQyMTg3NSBRIDE5LjUzMTI1IC0xLjQyMTg3NSAxMy4wNjI1IDguMjY1NjI1IFEgNi41OTM3NSAxNy45Njg3NSA2LjU5Mzc1IDM2LjM3NSBRIDYuNTkzNzUgNTQuODI4MTI1IDEzLjA2MjUgNjQuNTE1NjI1IFEgMTkuNTMxMjUgNzQuMjE4NzUgMzEuNzgxMjUgNzQuMjE4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNDgiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuNDM0NTA1IDMwLjUxNDkzMylzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ4Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gMTAgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi44ODA0OTUgMzIuMzE1ODE2KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ5Ii8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNDgiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTQxZDM4MTJmNGU2NDczMzgzM2JlMzllNzlkMjNhMmYuc2V0SWNvbihkaXZfaWNvbl83MjVmMDEwOTg2N2Y0M2UyYjlmMDkxMGM0OWEyOTMwMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MDVjODliZWUzNGU0MDNlYTgzOTNmZGQ4NmQ1N2Y5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mY2NhNzgwMDY3NGM0YjMzODRiNDllNDBiOWVlNzkzYyA9ICQoYDxkaXYgaWQ9Imh0bWxfZmNjYTc4MDA2NzRjNGIzMzg0YjQ5ZTQwYjllZTc5M2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95dWNhMTI1NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5ZdWNhdGVjIE1heWE8L2E+PGJyPmNvbnNvbmFudHM6IDIwPGJyPnZvd2VsczogMTA8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MDVjODliZWUzNGU0MDNlYTgzOTNmZGQ4NmQ1N2Y5ZC5zZXRDb250ZW50KGh0bWxfZmNjYTc4MDA2NzRjNGIzMzg0YjQ5ZTQwYjllZTc5M2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81NDFkMzgxMmY0ZTY0NzMzODMzYmUzOWU3OWQyM2EyZi5iaW5kUG9wdXAocG9wdXBfNDA1Yzg5YmVlMzRlNDAzZWE4MzkzZmRkODZkNTdmOWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



You can also use **bar** charts.

.. code:: ipython3

    m = lingtypology.LingMap(data.language)
    m.add_minicharts(
        data.consonants, data.vowels,
        typ = 'bar',
        colors = ('blue', 'red'),
        size = 0.4
    )
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzllYWZmMmU5OTU2MjQ0Y2Q4OWMwNjlkMWVkNjg0NDE3IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF85ZWFmZjJlOTk1NjI0NGNkODljMDY5ZDFlZDY4NDQxNyIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6IGJsdWU7b3BhY2l0eTowLjc7Ij48L3NwYW4+Y29uc29uYW50czwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogcmVkO29wYWNpdHk6MC43OyI+PC9zcGFuPnZvd2VsczwvbGk+CgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF85ZWFmZjJlOTk1NjI0NGNkODljMDY5ZDFlZDY4NDQxNyA9IEwubWFwKAogICAgICAgICdtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF85ZWFmZjJlOTk1NjI0NGNkODljMDY5ZDFlZDY4NDQxNyk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl9hYWIzNmQ1NzQ3MmY0YjNlYjg2YTdlOTNiMWExMzgyYyA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jMzhlNWZhMzFlMmQ0ZWNkYjY3MzMyZjkwNWIzN2E4YiA9IEwubWFya2VyKAogICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF85ZWFmZjJlOTk1NjI0NGNkODljMDY5ZDFlZDY4NDQxNyk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fODFlMjE4MzgyNjk0NGMyNjk3MjYwMWUxMWZmN2I4MTggPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsxOC44NjQsMTguODY0XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMjguOHB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyOC44IDI4LjgiIHdpZHRoPSIyOC44cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMSI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwZGIxOTZlY2Y2OCkiIGQ9Ik0gNC42MTQ1NDUgMjUuMiBMIDE0Ljc2IDI1LjIgTCAxNC43NiA0LjQ5MTQyOSBMIDQuNjE0NTQ1IDQuNDkxNDI5IHoiIHN0eWxlPSJmaWxsOiMwMDAwZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3BkYjE5NmVjZjY4KSIgZD0iTSAxNC43NiAyNS4yIEwgMjQuOTA1NDU1IDI1LjIgTCAyNC45MDU0NTUgMTguNTczMjU3IEwgMTQuNzYgMTguNTczMjU3IHoiIHN0eWxlPSJmaWxsOiNmZjAwMDA7Ii8+ICAgPC9nPiAgPC9nPiA8L2c+IDxkZWZzPiAgPGNsaXBQYXRoIGlkPSJwZGIxOTZlY2Y2OCI+ICAgPHJlY3QgaGVpZ2h0PSIyMS43NDQiIHdpZHRoPSIyMi4zMiIgeD0iMy42IiB5PSIzLjQ1NiIvPiAgPC9jbGlwUGF0aD4gPC9kZWZzPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzM4ZTVmYTMxZTJkNGVjZGI2NzMzMmY5MDViMzdhOGIuc2V0SWNvbihkaXZfaWNvbl84MWUyMTgzODI2OTQ0YzI2OTcyNjAxZTExZmY3YjgxOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YmYzNzQwOTliY2U0NmI4OTkzZDY5NjA1ZTFlYmE1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YWJhYmY3MDQwMGY0ZTg1YjU0Y2MxMWU1ZWFiYTdiMCA9ICQoYDxkaXYgaWQ9Imh0bWxfN2FiYWJmNzA0MDBmNGU4NWI1NGNjMTFlNWVhYmE3YjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj5jb25zb25hbnRzOiAyNTxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YmYzNzQwOTliY2U0NmI4OTkzZDY5NjA1ZTFlYmE1My5zZXRDb250ZW50KGh0bWxfN2FiYWJmNzA0MDBmNGU4NWI1NGNjMTFlNWVhYmE3YjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMzhlNWZhMzFlMmQ0ZWNkYjY3MzMyZjkwNWIzN2E4Yi5iaW5kUG9wdXAocG9wdXBfOGJmMzc0MDk5YmNlNDZiODk5M2Q2OTYwNWUxZWJhNTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zN2QxNDAwOTIyN2Y0YTQ1YTBiMTYzOTQ0MzJjMjgyMyA9IEwubWFya2VyKAogICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2M1NDBlNjA1NGRmZjQ5ZGI4NjkwNmUyMTMxMTA1MGQzID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDE4Njc3ODIwNWUpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwMTg2Nzc4MjA1ZSkiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDE0LjM1MjY1MyBMIDE0Ljc2IDE0LjM1MjY1MyB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDE4Njc3ODIwNWUiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzM3ZDE0MDA5MjI3ZjRhNDVhMGIxNjM5NDQzMmMyODIzLnNldEljb24oZGl2X2ljb25fYzU0MGU2MDU0ZGZmNDlkYjg2OTA2ZTIxMzExMDUwZDMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjU5MzljNmI1NzAxNGNlMzhlZTY1MGQwNzEyMzc1YmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzJlNjQ1OGE0MjVhNDU0Yjk3ZjgzZDRkODRjYTlkMzIgPSAkKGA8ZGl2IGlkPSJodG1sX2MyZTY0NThhNDI1YTQ1NGI5N2Y4M2Q0ZDg0Y2E5ZDMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva29yZTEyODAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S29yZWFuPC9hPjxicj5jb25zb25hbnRzOiAyMTxicj52b3dlbHM6IDExPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjU5MzljNmI1NzAxNGNlMzhlZTY1MGQwNzEyMzc1YmEuc2V0Q29udGVudChodG1sX2MyZTY0NThhNDI1YTQ1NGI5N2Y4M2Q0ZDg0Y2E5ZDMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzdkMTQwMDkyMjdmNGE0NWEwYjE2Mzk0NDMyYzI4MjMuYmluZFBvcHVwKHBvcHVwXzY1OTM5YzZiNTcwMTRjZTM4ZWU2NTBkMDcxMjM3NWJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfODE1ZTBlYWVjZDQyNGZiMWI3N2ExNmEyZWQ2OWJjYzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2Y4YThmNzJlYmRlNTQyYjdhYmM4ZTliMjhiYTA4YWRlID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDA3ZDg0ZWVlNWYpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwMDdkODRlZWU1ZikiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDIxLjQzNDgwNSBMIDE0Ljc2IDIxLjQzNDgwNSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDA3ZDg0ZWVlNWYiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzgxNWUwZWFlY2Q0MjRmYjFiNzdhMTZhMmVkNjliY2MzLnNldEljb24oZGl2X2ljb25fZjhhOGY3MmViZGU1NDJiN2FiYzhlOWIyOGJhMDhhZGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGQwYzRhZWI5MmE2NDM0OTg1NDFiYzk5Zjc2YWNiOWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjgzNzY0YjMyZDJjNGIzN2E1NGQyMmFlMWUwMzg5NzAgPSAkKGA8ZGl2IGlkPSJodG1sXzI4Mzc2NGIzMmQyYzRiMzdhNTRkMjJhZTFlMDM4OTcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGl3aTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGl3aTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiA0PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGQwYzRhZWI5MmE2NDM0OTg1NDFiYzk5Zjc2YWNiOWEuc2V0Q29udGVudChodG1sXzI4Mzc2NGIzMmQyYzRiMzdhNTRkMjJhZTFlMDM4OTcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODE1ZTBlYWVjZDQyNGZiMWI3N2ExNmEyZWQ2OWJjYzMuYmluZFBvcHVwKHBvcHVwXzRkMGM0YWViOTJhNjQzNDk4NTQxYmM5OWY3NmFjYjlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfODdjNmViOTBjMjVlNDE5MWJkYTFkNDg5NDUzYzBlYWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzYuOTIwNDgsIC05Ljk2MTI4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzllYWZmMmU5OTU2MjQ0Y2Q4OWMwNjlkMWVkNjg0NDE3KTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl81NjNhYWQxZDYxZjU0YjQxYjFhN2I3YzkzMDM2NTk5OSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzE4Ljg2NCwxOC44NjRdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSIyOC44cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDI4LjggMjguOCIgd2lkdGg9IjI4LjhwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8xIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3A4ZGZhM2Y0ZWE4KSIgZD0iTSA0LjYxNDU0NSAyNS4yIEwgMTQuNzYgMjUuMiBMIDE0Ljc2IDQuNDkxNDI5IEwgNC42MTQ1NDUgNC40OTE0MjkgeiIgc3R5bGU9ImZpbGw6IzAwMDBmZjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDhkZmEzZjRlYTgpIiBkPSJNIDE0Ljc2IDI1LjIgTCAyNC45MDU0NTUgMjUuMiBMIDI0LjkwNTQ1NSAxMy45MDQ0MTYgTCAxNC43NiAxMy45MDQ0MTYgeiIgc3R5bGU9ImZpbGw6I2ZmMDAwMDsiLz4gICA8L2c+ICA8L2c+IDwvZz4gPGRlZnM+ICA8Y2xpcFBhdGggaWQ9InA4ZGZhM2Y0ZWE4Ij4gICA8cmVjdCBoZWlnaHQ9IjIxLjc0NCIgd2lkdGg9IjIyLjMyIiB4PSIzLjYiIHk9IjMuNDU2Ii8+ICA8L2NsaXBQYXRoPiA8L2RlZnM+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84N2M2ZWI5MGMyNWU0MTkxYmRhMWQ0ODk0NTNjMGVhYi5zZXRJY29uKGRpdl9pY29uXzU2M2FhZDFkNjFmNTRiNDFiMWE3YjdjOTMwMzY1OTk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VkNTQyODBiZDAxMDRiMzk4OTY0Mzc3MGRmOWU1MTU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1ZTBhOWI3NjgzOTRkOWE5MTQ3NzU4Yzk5ODI3OWY5ID0gJChgPGRpdiBpZD0iaHRtbF9lNWUwYTliNzY4Mzk0ZDlhOTE0Nzc1OGM5OTgyNzlmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xpYmUxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxpYmVyaWEgS3BlbGxlPC9hPjxicj5jb25zb25hbnRzOiAyMjxicj52b3dlbHM6IDEyPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWQ1NDI4MGJkMDEwNGIzOTg5NjQzNzcwZGY5ZTUxNTQuc2V0Q29udGVudChodG1sX2U1ZTBhOWI3NjgzOTRkOWE5MTQ3NzU4Yzk5ODI3OWY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODdjNmViOTBjMjVlNDE5MWJkYTFkNDg5NDUzYzBlYWIuYmluZFBvcHVwKHBvcHVwX2VkNTQyODBiZDAxMDRiMzk4OTY0Mzc3MGRmOWU1MTU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTEwMWE0ZWMzZTYxNGQxZjk4YjY1MzczODhkY2RiYTggPSBMLm1hcmtlcigKICAgICAgICAgICAgWzEyLjgxMTQsIDc1LjI2NTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzQ2M2U2MGEwNzJlNDQzODJhYTU0YWNlNGRjOGNkM2ZlID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDI3YmY1ODJiYWYpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwMjdiZjU4MmJhZikiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDEzLjk4Mjg1NyBMIDE0Ljc2IDEzLjk4Mjg1NyB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDI3YmY1ODJiYWYiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzUxMDFhNGVjM2U2MTRkMWY5OGI2NTM3Mzg4ZGNkYmE4LnNldEljb24oZGl2X2ljb25fNDYzZTYwYTA3MmU0NDM4MmFhNTRhY2U0ZGM4Y2QzZmUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzFjOWNkYjNjZGUzNGQ3ZDgxMWM5OGQzZTJiNWE2MjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU1YTczN2Y2YTJmNDcyYTk2ODY3ZTU5Yzk4ZTQyODcgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1NWE3MzdmNmEyZjQ3MmE5Njg2N2U1OWM5OGU0Mjg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHVsdTEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVsdTwvYT48YnI+Y29uc29uYW50czogMjQ8YnI+dm93ZWxzOiAxMzxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxYzljZGIzY2RlMzRkN2Q4MTFjOThkM2UyYjVhNjI5LnNldENvbnRlbnQoaHRtbF9kNTVhNzM3ZjZhMmY0NzJhOTY4NjdlNTljOThlNDI4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUxMDFhNGVjM2U2MTRkMWY5OGI2NTM3Mzg4ZGNkYmE4LmJpbmRQb3B1cChwb3B1cF83MWM5Y2RiM2NkZTM0ZDdkODExYzk4ZDNlMmI1YTYyOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzk5OGI4NTE3ZDBmODQwN2Q5NTg1NDVjYzIxMzE3OTVkID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF85ZWFmZjJlOTk1NjI0NGNkODljMDY5ZDFlZDY4NDQxNyk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fOWFkYTcxYjY5ODRlNDRhOWJiMjM3ZjE0NGJlMDY4ZjQgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsxOC44NjQsMTguODY0XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMjguOHB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyOC44IDI4LjgiIHdpZHRoPSIyOC44cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMSI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwOWI2YTM4ZmQ0ZCkiIGQ9Ik0gNC42MTQ1NDUgMjUuMiBMIDE0Ljc2IDI1LjIgTCAxNC43NiA0LjQ5MTQyOSBMIDQuNjE0NTQ1IDQuNDkxNDI5IHoiIHN0eWxlPSJmaWxsOiMwMDAwZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3A5YjZhMzhmZDRkKSIgZD0iTSAxNC43NiAyNS4yIEwgMjQuOTA1NDU1IDI1LjIgTCAyNC45MDU0NTUgMTguOTg3NDI5IEwgMTQuNzYgMTguOTg3NDI5IHoiIHN0eWxlPSJmaWxsOiNmZjAwMDA7Ii8+ICAgPC9nPiAgPC9nPiA8L2c+IDxkZWZzPiAgPGNsaXBQYXRoIGlkPSJwOWI2YTM4ZmQ0ZCI+ICAgPHJlY3QgaGVpZ2h0PSIyMS43NDQiIHdpZHRoPSIyMi4zMiIgeD0iMy42IiB5PSIzLjQ1NiIvPiAgPC9jbGlwUGF0aD4gPC9kZWZzPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTk4Yjg1MTdkMGY4NDA3ZDk1ODU0NWNjMjEzMTc5NWQuc2V0SWNvbihkaXZfaWNvbl85YWRhNzFiNjk4NGU0NGE5YmIyMzdmMTQ0YmUwNjhmNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NTI5ZjM4N2NlMjA0MWIzYTI2NzAzN2NlYmY3ODg3MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lN2FjNDNhN2Q0NDg0OWNmYWM3ODMyNTc1Mzg0YzMzYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTdhYzQzYTdkNDQ4NDljZmFjNzgzMjU3NTM4NGMzM2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXB1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXB1ZHVuZ3VuPC9hPjxicj5jb25zb25hbnRzOiAyMDxicj52b3dlbHM6IDY8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NTI5ZjM4N2NlMjA0MWIzYTI2NzAzN2NlYmY3ODg3MS5zZXRDb250ZW50KGh0bWxfZTdhYzQzYTdkNDQ4NDljZmFjNzgzMjU3NTM4NGMzM2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85OThiODUxN2QwZjg0MDdkOTU4NTQ1Y2MyMTMxNzk1ZC5iaW5kUG9wdXAocG9wdXBfODUyOWYzODdjZTIwNDFiM2EyNjcwMzdjZWJmNzg4NzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9kYmUzODNlNzQyZTE0MTA1OGNmYzE4MDAwNTg3MWVlYyA9IEwubWFya2VyKAogICAgICAgICAgICBbMzQuOTQwMywgLTk4LjkwNDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzE2NjUyMjdlMzAwYzQ0YmFhMjdmMDI2MTNkMjZmNzJhID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcGY0ZGNkNjY1MTcpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwZjRkY2Q2NjUxNykiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDYuMzc0MDI2IEwgMTQuNzYgNi4zNzQwMjYgeiIgc3R5bGU9ImZpbGw6I2ZmMDAwMDsiLz4gICA8L2c+ICA8L2c+IDwvZz4gPGRlZnM+ICA8Y2xpcFBhdGggaWQ9InBmNGRjZDY2NTE3Ij4gICA8cmVjdCBoZWlnaHQ9IjIxLjc0NCIgd2lkdGg9IjIyLjMyIiB4PSIzLjYiIHk9IjMuNDU2Ii8+ICA8L2NsaXBQYXRoPiA8L2RlZnM+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kYmUzODNlNzQyZTE0MTA1OGNmYzE4MDAwNTg3MWVlYy5zZXRJY29uKGRpdl9pY29uXzE2NjUyMjdlMzAwYzQ0YmFhMjdmMDI2MTNkMjZmNzJhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2MzQ1YTU0MDQwNDQ5OTE4N2U0ZDA0NTkxMWYzNzlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlZTM5Y2YwYjA5MTRmZjBhYjcxM2E3NjE5NDBmYjhkID0gJChgPGRpdiBpZD0iaHRtbF8wZWUzOWNmMGIwOTE0ZmYwYWI3MTNhNzYxOTQwZmI4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tpb3cxMjY2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktpb3dhPC9hPjxicj5jb25zb25hbnRzOiAyMjxicj52b3dlbHM6IDIwPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTYzNDVhNTQwNDA0NDk5MTg3ZTRkMDQ1OTExZjM3OWYuc2V0Q29udGVudChodG1sXzBlZTM5Y2YwYjA5MTRmZjBhYjcxM2E3NjE5NDBmYjhkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGJlMzgzZTc0MmUxNDEwNThjZmMxODAwMDU4NzFlZWMuYmluZFBvcHVwKHBvcHVwXzk2MzQ1YTU0MDQwNDQ5OTE4N2U0ZDA0NTkxMWYzNzlmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTQwZWUwOTVjYjQ2NGNlMzg0ODIzZWIwODgyOTViYWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzllYWZmMmU5OTU2MjQ0Y2Q4OWMwNjlkMWVkNjg0NDE3KTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9lYzRlOTRkYTNiNjQ0ZWE4OGFkY2I1MzUyOTk4NGRlMCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzE4Ljg2NCwxOC44NjRdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSIyOC44cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDI4LjggMjguOCIgd2lkdGg9IjI4LjhwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8xIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3BmZGVjYjIxZjMwKSIgZD0iTSA0LjYxNDU0NSAyNS4yIEwgMTQuNzYgMjUuMiBMIDE0Ljc2IDQuNDkxNDI5IEwgNC42MTQ1NDUgNC40OTE0MjkgeiIgc3R5bGU9ImZpbGw6IzAwMDBmZjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcGZkZWNiMjFmMzApIiBkPSJNIDE0Ljc2IDI1LjIgTCAyNC45MDU0NTUgMjUuMiBMIDI0LjkwNTQ1NSAxOC4yOTcxNDMgTCAxNC43NiAxOC4yOTcxNDMgeiIgc3R5bGU9ImZpbGw6I2ZmMDAwMDsiLz4gICA8L2c+ICA8L2c+IDwvZz4gPGRlZnM+ICA8Y2xpcFBhdGggaWQ9InBmZGVjYjIxZjMwIj4gICA8cmVjdCBoZWlnaHQ9IjIxLjc0NCIgd2lkdGg9IjIyLjMyIiB4PSIzLjYiIHk9IjMuNDU2Ii8+ICA8L2NsaXBQYXRoPiA8L2RlZnM+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81NDBlZTA5NWNiNDY0Y2UzODQ4MjNlYjA4ODI5NWJhYy5zZXRJY29uKGRpdl9pY29uX2VjNGU5NGRhM2I2NDRlYTg4YWRjYjUzNTI5OTg0ZGUwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwZmUxNjJmNjBjMzRjN2M4OGMzNGQ1MGNhZDlkZTNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5NzU5NWE2YzNkOTQ2NTI4NDEwNDQyMGVmMWQwOTNkID0gJChgPGRpdiBpZD0iaHRtbF81OTc1OTVhNmMzZDk0NjUyODQxMDQ0MjBlZjFkMDkzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkphcGFuZXNlPC9hPjxicj5jb25zb25hbnRzOiAxNTxicj52b3dlbHM6IDU8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MGZlMTYyZjYwYzM0YzdjODhjMzRkNTBjYWQ5ZGUzYS5zZXRDb250ZW50KGh0bWxfNTk3NTk1YTZjM2Q5NDY1Mjg0MTA0NDIwZWYxZDA5M2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81NDBlZTA5NWNiNDY0Y2UzODQ4MjNlYjA4ODI5NWJhYy5iaW5kUG9wdXAocG9wdXBfNTBmZTE2MmY2MGMzNGM3Yzg4YzM0ZDUwY2FkOWRlM2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jMTgzNDM3MTgxMzc0YzkwYjAyN2E0MTI0ZjVkYzVmNyA9IEwubWFya2VyKAogICAgICAgICAgICBbNy4xNTM0NSwgMy42NzIyNV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF85ZWFmZjJlOTk1NjI0NGNkODljMDY5ZDFlZDY4NDQxNyk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fY2UzZWRjMjFlOWM5NDYyNjk1MTE0OTMxZTQyZmI5YWMgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsxOC44NjQsMTguODY0XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMjguOHB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyOC44IDI4LjgiIHdpZHRoPSIyOC44cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMSI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwN2I5YjY1MjYyMykiIGQ9Ik0gNC42MTQ1NDUgMjUuMiBMIDE0Ljc2IDI1LjIgTCAxNC43NiA0LjQ5MTQyOSBMIDQuNjE0NTQ1IDQuNDkxNDI5IHoiIHN0eWxlPSJmaWxsOiMwMDAwZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3A3YjliNjUyNjIzKSIgZD0iTSAxNC43NiAyNS4yIEwgMjQuOTA1NDU1IDI1LjIgTCAyNC45MDU0NTUgMTIuNTQ0NzYyIEwgMTQuNzYgMTIuNTQ0NzYyIHoiIHN0eWxlPSJmaWxsOiNmZjAwMDA7Ii8+ICAgPC9nPiAgPC9nPiA8L2c+IDxkZWZzPiAgPGNsaXBQYXRoIGlkPSJwN2I5YjY1MjYyMyI+ICAgPHJlY3QgaGVpZ2h0PSIyMS43NDQiIHdpZHRoPSIyMi4zMiIgeD0iMy42IiB5PSIzLjQ1NiIvPiAgPC9jbGlwUGF0aD4gPC9kZWZzPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzE4MzQzNzE4MTM3NGM5MGIwMjdhNDEyNGY1ZGM1Zjcuc2V0SWNvbihkaXZfaWNvbl9jZTNlZGMyMWU5Yzk0NjI2OTUxMTQ5MzFlNDJmYjlhYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MGMzMWExYzNkOWI0YTAxYTI3NTQzODkwOWI3MDI4NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjkyZmFkYjY5Mjk0ZTEzOTBjN2E2NzA0YTBiNWNiZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTY5MmZhZGI2OTI5NGUxMzkwYzdhNjcwNGEwYjVjYmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95b3J1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Zb3J1YmE8L2E+PGJyPmNvbnNvbmFudHM6IDE4PGJyPnZvd2VsczogMTE8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MGMzMWExYzNkOWI0YTAxYTI3NTQzODkwOWI3MDI4NC5zZXRDb250ZW50KGh0bWxfMTY5MmZhZGI2OTI5NGUxMzkwYzdhNjcwNGEwYjVjYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMTgzNDM3MTgxMzc0YzkwYjAyN2E0MTI0ZjVkYzVmNy5iaW5kUG9wdXAocG9wdXBfNDBjMzFhMWMzZDliNGEwMWEyNzU0Mzg5MDliNzAyODQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9iM2I0ZTgyM2E1OGI0YTE3YjRiYTExYWNlZjUzZjBlYiA9IEwubWFya2VyKAogICAgICAgICAgICBbNjQuNzYyOCwgMjUuNTU3N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF85ZWFmZjJlOTk1NjI0NGNkODljMDY5ZDFlZDY4NDQxNyk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fOGZhZjVjM2QyODgyNGJkMmFiYzQ2ZjFkYTg4NzFjM2YgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsxOC44NjQsMTguODY0XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMjguOHB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyOC44IDI4LjgiIHdpZHRoPSIyOC44cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMSI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwZWUyMjUyMDA0YykiIGQ9Ik0gNC42MTQ1NDUgMjUuMiBMIDE0Ljc2IDI1LjIgTCAxNC43NiA0LjQ5MTQyOSBMIDQuNjE0NTQ1IDQuNDkxNDI5IHoiIHN0eWxlPSJmaWxsOiMwMDAwZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3BlZTIyNTIwMDRjKSIgZD0iTSAxNC43NiAyNS4yIEwgMjQuOTA1NDU1IDI1LjIgTCAyNC45MDU0NTUgMTUuNDU0NzkgTCAxNC43NiAxNS40NTQ3OSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icGVlMjI1MjAwNGMiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2IzYjRlODIzYTU4YjRhMTdiNGJhMTFhY2VmNTNmMGViLnNldEljb24oZGl2X2ljb25fOGZhZjVjM2QyODgyNGJkMmFiYzQ2ZjFkYTg4NzFjM2YpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTI4NzU4NzA0MTIyNDc0Y2E4NmFmYzAzY2IyOWFmNGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTRiNmU4YWVhNDYyNDE0ZmE2ZjI3ZWJmMzAwNjU4NjcgPSAkKGA8ZGl2IGlkPSJodG1sXzE0YjZlOGFlYTQ2MjQxNGZhNmYyN2ViZjMwMDY1ODY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZmlubjEzMTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RmlubmlzaDwvYT48YnI+Y29uc29uYW50czogMTc8YnI+dm93ZWxzOiA4PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTI4NzU4NzA0MTIyNDc0Y2E4NmFmYzAzY2IyOWFmNGYuc2V0Q29udGVudChodG1sXzE0YjZlOGFlYTQ2MjQxNGZhNmYyN2ViZjMwMDY1ODY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjNiNGU4MjNhNThiNGExN2I0YmExMWFjZWY1M2YwZWIuYmluZFBvcHVwKHBvcHVwXzkyODc1ODcwNDEyMjQ3NGNhODZhZmMwM2NiMjlhZjRmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZjk3OWEzMWNkZWVmNDdiMGFjZDdmOWRkYWYyNmE1MGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzE5LjYyOTcsIC0xNTUuNDNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzkyZDY1ZmQxMWZkOTQ5YTRiOWE2NmE0YjEzYzVkY2IwID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcGZiN2U1MzM1MTQpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwZmI3ZTUzMzUxNCkiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDEyLjI1NzE0MyBMIDE0Ljc2IDEyLjI1NzE0MyB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icGZiN2U1MzM1MTQiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Y5NzlhMzFjZGVlZjQ3YjBhY2Q3ZjlkZGFmMjZhNTBmLnNldEljb24oZGl2X2ljb25fOTJkNjVmZDExZmQ5NDlhNGI5YTY2YTRiMTNjNWRjYjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2QxZmNiMmZmZTAxNGZlMjllODE3ZWI3ZGVjMWI0ZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Y2YTMxOTkyNjBhNGU5OWIwYmZiMDk3ZTM1MDAyYWMgPSAkKGA8ZGl2IGlkPSJodG1sX2NmNmEzMTk5MjYwYTRlOTliMGJmYjA5N2UzNTAwMmFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaGF3YTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SGF3YWlpYW48L2E+PGJyPmNvbnNvbmFudHM6IDg8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2QxZmNiMmZmZTAxNGZlMjllODE3ZWI3ZGVjMWI0ZmMuc2V0Q29udGVudChodG1sX2NmNmEzMTk5MjYwYTRlOTliMGJmYjA5N2UzNTAwMmFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjk3OWEzMWNkZWVmNDdiMGFjZDdmOWRkYWYyNmE1MGYuYmluZFBvcHVwKHBvcHVwX2NkMWZjYjJmZmUwMTRmZTI5ZTgxN2ViN2RlYzFiNGZjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMDg3ZmQ1YjQyNzQyNGEwMDhkY2RhNTVkYWZjNGE3ZTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzJmNWUwMDBjZTBkYjQxMjJiYWI2N2UxOTEzYmQxYjBlID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDkyMjc0MjdiYjIpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwOTIyNzQyN2JiMikiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDE0LjA0OTIzMSBMIDE0Ljc2IDE0LjA0OTIzMSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDkyMjc0MjdiYjIiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA4N2ZkNWI0Mjc0MjRhMDA4ZGNkYTU1ZGFmYzRhN2UzLnNldEljb24oZGl2X2ljb25fMmY1ZTAwMGNlMGRiNDEyMmJhYjY3ZTE5MTNiZDFiMGUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGUyY2M3ZWFmMjVlNDU1Nzg0Njk3ZTY1Y2Y0MGI4NzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RhYzk3MWQ1Yzg2NDFmM2JmZDQ1ODM1MzIwOTI2YmEgPSAkKGA8ZGl2IGlkPSJodG1sX2NkYWM5NzFkNWM4NjQxZjNiZmQ0NTgzNTMyMDkyNmJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaHVuZzEyNzQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SHVuZ2FyaWFuPC9hPjxicj5jb25zb25hbnRzOiAyNjxicj52b3dlbHM6IDE0PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGUyY2M3ZWFmMjVlNDU1Nzg0Njk3ZTY1Y2Y0MGI4NzQuc2V0Q29udGVudChodG1sX2NkYWM5NzFkNWM4NjQxZjNiZmQ0NTgzNTMyMDkyNmJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDg3ZmQ1YjQyNzQyNGEwMDhkY2RhNTVkYWZjNGE3ZTMuYmluZFBvcHVwKHBvcHVwXzBlMmNjN2VhZjI1ZTQ1NTc4NDY5N2U2NWNmNDBiODc0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMDY2YjQ4NDgxNzllNDI2MWIxZGMyNGRkZTQ2YTc5OTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQxLjg1MDM5Njk5OTk5OTk5NCwgNDMuNzg2MTNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2I1MmI3NWQ5ZjQwZjQzMTI4ODA1N2M1MDVlMDlkZTcwID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDZkOGZjNDU5NGQpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwNmQ4ZmM0NTk0ZCkiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDIwLjc2MjQ0OSBMIDE0Ljc2IDIwLjc2MjQ0OSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDZkOGZjNDU5NGQiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA2NmI0ODQ4MTc5ZTQyNjFiMWRjMjRkZGU0NmE3OTkzLnNldEljb24oZGl2X2ljb25fYjUyYjc1ZDlmNDBmNDMxMjg4MDU3YzUwNWUwOWRlNzApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGNiMGZlOWMwOGVhNGY0ZGExY2VhNTEwMGVmZWE2NTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2MwODY4MDc0ODEzNGRiODkzY2JkZWJkOGE2MDkxNTUgPSAkKGA8ZGl2IGlkPSJodG1sX2NjMDg2ODA3NDgxMzRkYjg5M2NiZGViZDhhNjA5MTU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2VvcmdpYW48L2E+PGJyPmNvbnNvbmFudHM6IDI4PGJyPnZvd2VsczogNjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjYjBmZTljMDhlYTRmNGRhMWNlYTUxMDBlZmVhNjUzLnNldENvbnRlbnQoaHRtbF9jYzA4NjgwNzQ4MTM0ZGI4OTNjYmRlYmQ4YTYwOTE1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA2NmI0ODQ4MTc5ZTQyNjFiMWRjMjRkZGU0NmE3OTkzLmJpbmRQb3B1cChwb3B1cF9kY2IwZmU5YzA4ZWE0ZjRkYTFjZWE1MTAwZWZlYTY1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2IyZTQ2MmM4NGY0NDQ4YjA4OGZjMjc4ZDQ5N2FiZWE4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF85ZWFmZjJlOTk1NjI0NGNkODljMDY5ZDFlZDY4NDQxNyk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fY2EwMjZmNWU2ODc5NDVmMzgzYjAxYmZhNzhhOGRkYzYgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsxOC44NjQsMTguODY0XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMjguOHB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyOC44IDI4LjgiIHdpZHRoPSIyOC44cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMSI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwMzNiMWRjYTBhYikiIGQ9Ik0gNC42MTQ1NDUgMjUuMiBMIDE0Ljc2IDI1LjIgTCAxNC43NiA0LjQ5MTQyOSBMIDQuNjE0NTQ1IDQuNDkxNDI5IHoiIHN0eWxlPSJmaWxsOiMwMDAwZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3AzM2IxZGNhMGFiKSIgZD0iTSAxNC43NiAyNS4yIEwgMjQuOTA1NDU1IDI1LjIgTCAyNC45MDU0NTUgMjAuMzY4IEwgMTQuNzYgMjAuMzY4IHoiIHN0eWxlPSJmaWxsOiNmZjAwMDA7Ii8+ICAgPC9nPiAgPC9nPiA8L2c+IDxkZWZzPiAgPGNsaXBQYXRoIGlkPSJwMzNiMWRjYTBhYiI+ICAgPHJlY3QgaGVpZ2h0PSIyMS43NDQiIHdpZHRoPSIyMi4zMiIgeD0iMy42IiB5PSIzLjQ1NiIvPiAgPC9jbGlwUGF0aD4gPC9kZWZzPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjJlNDYyYzg0ZjQ0NDhiMDg4ZmMyNzhkNDk3YWJlYTguc2V0SWNvbihkaXZfaWNvbl9jYTAyNmY1ZTY4Nzk0NWYzODNiMDFiZmE3OGE4ZGRjNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzE0OTk3YmFiOWI0ZWViOGI5YjA2N2ExNzFiMzY5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YmQxZmZjMWI5ZDQ0MzJlYmRlMTBhYzI2ZGEyM2U1ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfOGJkMWZmYzFiOWQ0NDMyZWJkZTEwYWMyNmRhMjNlNWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hbWhhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BbWhhcmljPC9hPjxicj5jb25zb25hbnRzOiAzMDxicj52b3dlbHM6IDc8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzE0OTk3YmFiOWI0ZWViOGI5YjA2N2ExNzFiMzY5Yy5zZXRDb250ZW50KGh0bWxfOGJkMWZmYzFiOWQ0NDMyZWJkZTEwYWMyNmRhMjNlNWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMmU0NjJjODRmNDQ0OGIwODhmYzI3OGQ0OTdhYmVhOC5iaW5kUG9wdXAocG9wdXBfOTMxNDk5N2JhYjliNGVlYjhiOWIwNjdhMTcxYjM2OWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9kZmI0NDU3NDdkNGQ0M2JiOWQxNjI4NTdhZTIxYjIxYiA9IEwubWFya2VyKAogICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzVhNTMzZWU3MzA5NjQ4MjU4ZDdlOGYyYzhkNDk3NmM0ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcGY2ODE3NGZkYWEpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwZjY4MTc0ZmRhYSkiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDIyLjExNTc0NSBMIDE0Ljc2IDIyLjExNTc0NSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icGY2ODE3NGZkYWEiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2RmYjQ0NTc0N2Q0ZDQzYmI5ZDE2Mjg1N2FlMjFiMjFiLnNldEljb24oZGl2X2ljb25fNWE1MzNlZTczMDk2NDgyNThkN2U4ZjJjOGQ0OTc2YzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzRiMDI0MzkzOGM1NDBjYWE1MGNjNmE2YmJiNzIyYjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmRlZDk3OWMzZjljNGViZWE5MGY1YmU1NDA3MWI2ODIgPSAkKGA8ZGl2IGlkPSJodG1sXzJkZWQ5NzljM2Y5YzRlYmVhOTBmNWJlNTQwNzFiNjgyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2FuZDEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2FuZGF3ZTwvYT48YnI+Y29uc29uYW50czogNDc8YnI+dm93ZWxzOiA3PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzRiMDI0MzkzOGM1NDBjYWE1MGNjNmE2YmJiNzIyYjcuc2V0Q29udGVudChodG1sXzJkZWQ5NzljM2Y5YzRlYmVhOTBmNWJlNTQwNzFiNjgyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGZiNDQ1NzQ3ZDRkNDNiYjlkMTYyODU3YWUyMWIyMWIuYmluZFBvcHVwKHBvcHVwX2M0YjAyNDM5MzhjNTQwY2FhNTBjYzZhNmJiYjcyMmI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNDFmOTYzOGRiNzZlNDQxNjllMDc5NTg5MWUzOWY2MDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzQ4ZjdjMmM5NDU0ZDQ4NzE5N2Q1Y2RkNjIzYzg2ZDNiID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDg2ZGQzZjk4ZGQpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwODZkZDNmOThkZCkiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDIyLjc5MjAyNyBMIDE0Ljc2IDIyLjc5MjAyNyB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDg2ZGQzZjk4ZGQiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQxZjk2MzhkYjc2ZTQ0MTY5ZTA3OTU4OTFlMzlmNjAzLnNldEljb24oZGl2X2ljb25fNDhmN2MyYzk0NTRkNDg3MTk3ZDVjZGQ2MjNjODZkM2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWE5ZGMzZjQ4ZjMxNDM5NGI4NzA5MjI2YzZmNmM4NWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQ0MzU4NDIyOGUxNDJhNWI2ZTE2MGIwYTViNjExYzYgPSAkKGA8ZGl2IGlkPSJodG1sX2ZkNDM1ODQyMjhlMTQyYTViNmUxNjBiMGE1YjYxMWM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGxpbjEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGxpbmdpdDwvYT48YnI+Y29uc29uYW50czogNDM8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWE5ZGMzZjQ4ZjMxNDM5NGI4NzA5MjI2YzZmNmM4NWQuc2V0Q29udGVudChodG1sX2ZkNDM1ODQyMjhlMTQyYTViNmUxNjBiMGE1YjYxMWM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDFmOTYzOGRiNzZlNDQxNjllMDc5NTg5MWUzOWY2MDMuYmluZFBvcHVwKHBvcHVwXzFhOWRjM2Y0OGYzMTQzOTRiODcwOTIyNmM2ZjZjODVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfODIwNjNmODdjM2IxNDIzYWE2NDk0NmVlYjQyNzJkNDggPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ2LjM2OTksIC0xMDMuOTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzdkZGMwNzI2NjU3NTQwZjc5NjA3YTJjYzdiMTY0NmYzID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDU5MzY4NDRkYmYpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwNTkzNjg0NGRiZikiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDE5LjI4MzI2NSBMIDE0Ljc2IDE5LjI4MzI2NSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDU5MzY4NDRkYmYiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzgyMDYzZjg3YzNiMTQyM2FhNjQ5NDZlZWI0MjcyZDQ4LnNldEljb24oZGl2X2ljb25fN2RkYzA3MjY2NTc1NDBmNzk2MDdhMmNjN2IxNjQ2ZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGI4MmM0OTM5ODdhNGFhYjllMzY3Y2QyNTEyNzA5NWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTYwZTUxMGZjMTAzNDFlZDg4YWMxNDlhYjlhMWRhYzQgPSAkKGA8ZGl2IGlkPSJodG1sX2U2MGU1MTBmYzEwMzQxZWQ4OGFjMTQ5YWI5YTFkYWM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrbzEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFrb3RhPC9hPjxicj5jb25zb25hbnRzOiAyODxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YjgyYzQ5Mzk4N2E0YWFiOWUzNjdjZDI1MTI3MDk1ZC5zZXRDb250ZW50KGh0bWxfZTYwZTUxMGZjMTAzNDFlZDg4YWMxNDlhYjlhMWRhYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MjA2M2Y4N2MzYjE0MjNhYTY0OTQ2ZWViNDI3MmQ0OC5iaW5kUG9wdXAocG9wdXBfNGI4MmM0OTM5ODdhNGFhYjllMzY3Y2QyNTEyNzA5NWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9hMjllNTdhMWVlNzU0N2YxYTQ1MGQ4NDdiYTBiODBkYyA9IEwubWFya2VyKAogICAgICAgICAgICBbMTguNzc1NywgLTg4Ljk1NjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWVhZmYyZTk5NTYyNDRjZDg5YzA2OWQxZWQ2ODQ0MTcpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2QwNDkwYWVjMTA3NjRmODM5NTNhNWYxYmFhY2JlMzVmID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDZjMjE3NjM4Y2YpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwNmMyMTc2MzhjZikiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDE0Ljg0NTcxNCBMIDE0Ljc2IDE0Ljg0NTcxNCB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDZjMjE3NjM4Y2YiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2EyOWU1N2ExZWU3NTQ3ZjFhNDUwZDg0N2JhMGI4MGRjLnNldEljb24oZGl2X2ljb25fZDA0OTBhZWMxMDc2NGY4Mzk1M2E1ZjFiYWFjYmUzNWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGRmNTQ3NTg4NmFlNDFkN2JmNWMwMDEyOGU2NDBiOWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTUxNGIzZTBiYzUwNDk0OWJjOGJlOTNlYTE2ZTQ5NjUgPSAkKGA8ZGl2IGlkPSJodG1sX2U1MTRiM2UwYmM1MDQ5NDliYzhiZTkzZWExNmU0OTY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVjYTEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVjYXRlYyBNYXlhPC9hPjxicj5jb25zb25hbnRzOiAyMDxicj52b3dlbHM6IDEwPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGRmNTQ3NTg4NmFlNDFkN2JmNWMwMDEyOGU2NDBiOWEuc2V0Q29udGVudChodG1sX2U1MTRiM2UwYmM1MDQ5NDliYzhiZTkzZWExNmU0OTY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTI5ZTU3YTFlZTc1NDdmMWE0NTBkODQ3YmEwYjgwZGMuYmluZFBvcHVwKHBvcHVwXzRkZjU0NzU4ODZhZTQxZDdiZjVjMDAxMjhlNjQwYjlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.16. Overlapping Features 
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Let’s say we want to see info about whether language: 1. is ergative; 2.
has cases; 3. is slavic.

It is possible with ``add_overlapping_features`` method. It allows to
draw several markers of different radius and color for each given
language.

.. code:: ipython3

    languages = ('Tsakhur', 'Russian', 'Bulgarian')
    m = lingtypology.LingMap(languages)
    m.add_overlapping_features([
        ['ergative', 'has cases'],
        ['has cases', 'slavic'],
        ['slavic']
    ])
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzE1NzEzNTMzZGEyODQxMzI5NTMxMDljNDdlYWVjMTYxIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8xNTcxMzUzM2RhMjg0MTMyOTUzMTA5YzQ3ZWFlYzE2MSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+ZXJnYXRpdmU8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMxOWU2YjQ7b3BhY2l0eTowLjc7Ij48L3NwYW4+aGFzIGNhc2VzPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZlMTE5O29wYWNpdHk6MC43OyI+PC9zcGFuPnNsYXZpYzwvbGk+CgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8xNTcxMzUzM2RhMjg0MTMyOTUzMTA5YzQ3ZWFlYzE2MSA9IEwubWFwKAogICAgICAgICdtYXBfMTU3MTM1MzNkYTI4NDEzMjk1MzEwOWM0N2VhZWMxNjEnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF8xNTcxMzUzM2RhMjg0MTMyOTUzMTA5YzQ3ZWFlYzE2MSk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl8zYzI4OGUzZDFkM2Y0Zjc3ODNlYTcyNjNkMzRjYjRjNyA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfMTU3MTM1MzNkYTI4NDEzMjk1MzEwOWM0N2VhZWMxNjEpOwogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M1YzZkMWI1ZGUyMjQ4OTg5ZGM5OTVlMjI5NDIzYTkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNTkxNiwgNDYuODg1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNTcxMzUzM2RhMjg0MTMyOTUzMTA5YzQ3ZWFlYzE2MSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNGU5NGVjMDQ4Zjk0MzkzOWYxMzE5MDM3NDgyYjNkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzVlNDUzOWFiMmY0NDJjOWQ2ZWE0OGQ0NWUzM2E0ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzM1ZTQ1MzlhYjJmNDQyYzlkNmVhNDhkNDVlMzNhNGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90c2FrMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Uc2FraHVyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA0ZTk0ZWMwNDhmOTQzOTM5ZjEzMTkwMzc0ODJiM2Q4LnNldENvbnRlbnQoaHRtbF8zMzVlNDUzOWFiMmY0NDJjOWQ2ZWE0OGQ0NWUzM2E0ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNWM2ZDFiNWRlMjI0ODk4OWRjOTk1ZTIyOTQyM2E5MC5iaW5kUG9wdXAocG9wdXBfMDRlOTRlYzA0OGY5NDM5MzlmMTMxOTAzNzQ4MmIzZDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5MTAyZGU4MmMyMDQxMzY5YzYzNmUwNmY4YTdmOWNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNTkxNiwgNDYuODg1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNTcxMzUzM2RhMjg0MTMyOTUzMTA5YzQ3ZWFlYzE2MSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzYzY2RlMzQ1MTQ0MGJkOWNmOWU3Yzg5N2U4OTI3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MjI2OTE4MDEwMTY0ZDRlYWQyZmYwYzk1MmIxMTAzNCA9ICQoYDxkaXYgaWQ9Imh0bWxfODIyNjkxODAxMDE2NGQ0ZWFkMmZmMGM5NTJiMTEwMzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90c2FrMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Uc2FraHVyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzNjNjZGUzNDUxNDQwYmQ5Y2Y5ZTdjODk3ZTg5MjcwLnNldENvbnRlbnQoaHRtbF84MjI2OTE4MDEwMTY0ZDRlYWQyZmYwYzk1MmIxMTAzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOTEwMmRlODJjMjA0MTM2OWM2MzZlMDZmOGE3ZjljZS5iaW5kUG9wdXAocG9wdXBfZTM2M2NkZTM0NTE0NDBiZDljZjllN2M4OTdlODkyNzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAwMmI0OWFmYTZjNzQyOTI4OTRkYzJlMWUxNTBjNWRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNTcxMzUzM2RhMjg0MTMyOTUzMTA5YzQ3ZWFlYzE2MSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MmU2ZmU1ZWQ5NmU0MWM4ODMxOTk5NjRmMDZmMzk3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDk2ODNhMDMyMGU0ZTliYmNhZDFjMGVhMTQ2NzlmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWQ5NjgzYTAzMjBlNGU5YmJjYWQxYzBlYTE0Njc5ZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyZTZmZTVlZDk2ZTQxYzg4MzE5OTk2NGYwNmYzOTcyLnNldENvbnRlbnQoaHRtbF85ZDk2ODNhMDMyMGU0ZTliYmNhZDFjMGVhMTQ2NzlmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMDJiNDlhZmE2Yzc0MjkyODk0ZGMyZTFlMTUwYzVkZS5iaW5kUG9wdXAocG9wdXBfNTJlNmZlNWVkOTZlNDFjODgzMTk5OTY0ZjA2ZjM5NzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQxMWYwM2NiM2U2YjQ3YmQ4Yjk1YjZiM2RjNjU0ODFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZTExOSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNTcxMzUzM2RhMjg0MTMyOTUzMTA5YzQ3ZWFlYzE2MSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hOTExMWUzMDBlYTY0MzBlOWRlNDE4OTk3MDEwYTY5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMmYxYmQ4ZGU0ODA0NTdjOWY3NjUxMGEwM2E0YjU2NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzJmMWJkOGRlNDgwNDU3YzlmNzY1MTBhMDNhNGI1NjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5MTExZTMwMGVhNjQzMGU5ZGU0MTg5OTcwMTBhNjljLnNldENvbnRlbnQoaHRtbF8zMmYxYmQ4ZGU0ODA0NTdjOWY3NjUxMGEwM2E0YjU2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MTFmMDNjYjNlNmI0N2JkOGI5NWI2YjNkYzY1NDgxZS5iaW5kUG9wdXAocG9wdXBfYTkxMTFlMzAwZWE2NDMwZTlkZTQxODk5NzAxMGE2OWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1YWNiM2EwMTBiMTQ5YTU4NTZmMzJiMDNiYmI2NjAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMTE5IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE1NzEzNTMzZGEyODQxMzI5NTMxMDljNDdlYWVjMTYxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0NTA0YWQwMjJhNjRlMzlhNDY1MGE2NzY1NmMzYzRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxZmMwNGI2ZTNjMTQ1OTM5NzZiNDg2ZDcwZTE2NGVmID0gJChgPGRpdiBpZD0iaHRtbF80MWZjMDRiNmUzYzE0NTkzOTc2YjQ4NmQ3MGUxNjRlZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2J1bGcxMjYyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJ1bGdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNDUwNGFkMDIyYTY0ZTM5YTQ2NTBhNjc2NTZjM2M0Yi5zZXRDb250ZW50KGh0bWxfNDFmYzA0YjZlM2MxNDU5Mzk3NmI0ODZkNzBlMTY0ZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDVhY2IzYTAxMGIxNDlhNTg1NmYzMmIwM2JiYjY2MDAuYmluZFBvcHVwKHBvcHVwX2I0NTA0YWQwMjJhNjRlMzlhNDY1MGE2NzY1NmMzYzRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



You can use these parameters: 1. ``radius`` Default radius. Default: 7.
2. ``radius_increment`` Radius increment. By how much the size of the
marker increases with each additional feature. Default: 4. 3.
``mapping`` If you want to use custom colors, use this parameter. If it
is not given, the default color will be used.

.. code:: ipython3

    m.add_overlapping_features(
        [
            ['ergative', 'has cases'],
            ['has cases', 'slavic'],
            ['slavic']
        ],
        radius = 10,
        radius_increment = 5,
        mapping = {
            'ergative': '#e6194b',
            'has cases': '#4be619',
            'slavic': '#194be6'
        }
    )
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2NjYTJjNTQ4MjBjMDQyOTM4NDk0YTQ1MzYxMjc4YWRkIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9jY2EyYzU0ODIwYzA0MjkzODQ5NGE0NTM2MTI3OGFkZCIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDEiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMScgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+ZXJnYXRpdmU8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICM0YmU2MTk7b3BhY2l0eTowLjc7Ij48L3NwYW4+aGFzIGNhc2VzPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjMTk0YmU2O29wYWNpdHk6MC43OyI+PC9zcGFuPnNsYXZpYzwvbGk+CgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9jY2EyYzU0ODIwYzA0MjkzODQ5NGE0NTM2MTI3OGFkZCA9IEwubWFwKAogICAgICAgICdtYXBfY2NhMmM1NDgyMGMwNDI5Mzg0OTRhNDUzNjEyNzhhZGQnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF9jY2EyYzU0ODIwYzA0MjkzODQ5NGE0NTM2MTI3OGFkZCk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl9hMWI3OTZkYjhiNDA0NjZlYmFlOGUyNjUzN2UxNmMwZCA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfY2NhMmM1NDgyMGMwNDI5Mzg0OTRhNDUzNjEyNzhhZGQpOwogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjNGM0NDBhMTQwZjQzZjVhYjhkNjQxM2MwNjJjMWViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNTkxNiwgNDYuODg1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfY2NhMmM1NDgyMGMwNDI5Mzg0OTRhNDUzNjEyNzhhZGQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTNkYWI2MjJkNGViNDA2Nzg0NGQxZWIyODgzZGJkYjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGJiYWE5NzNhODE5NDU4NGE5ODYxNTk1NjAxYzQ2OGQgPSAkKGA8ZGl2IGlkPSJodG1sXzBiYmFhOTczYTgxOTQ1ODRhOTg2MTU5NTYwMWM0NjhkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHNhazEyNDkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHNha2h1cjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lM2RhYjYyMmQ0ZWI0MDY3ODQ0ZDFlYjI4ODNkYmRiNC5zZXRDb250ZW50KGh0bWxfMGJiYWE5NzNhODE5NDU4NGE5ODYxNTk1NjAxYzQ2OGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmM0YzQ0MGExNDBmNDNmNWFiOGQ2NDEzYzA2MmMxZWIuYmluZFBvcHVwKHBvcHVwX2UzZGFiNjIyZDRlYjQwNjc4NDRkMWViMjg4M2RiZGI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjI1ZDE2MzIyMWQ0OTllOGM5ZjRlNzgzYjhmYzIzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjU5MTYsIDQ2Ljg4NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0YmU2MTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfY2NhMmM1NDgyMGMwNDI5Mzg0OTRhNDUzNjEyNzhhZGQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTdlZjM2ZWZjMGE2NDVmM2FiNTgyZmNkNjIwYWIyM2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTI3YzYyYWEwZjA1NGZmMjhhMzMwZTg0NmRmNGI4MWMgPSAkKGA8ZGl2IGlkPSJodG1sX2UyN2M2MmFhMGYwNTRmZjI4YTMzMGU4NDZkZjRiODFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHNhazEyNDkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHNha2h1cjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xN2VmMzZlZmMwYTY0NWYzYWI1ODJmY2Q2MjBhYjIzYi5zZXRDb250ZW50KGh0bWxfZTI3YzYyYWEwZjA1NGZmMjhhMzMwZTg0NmRmNGI4MWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDYyNWQxNjMyMjFkNDk5ZThjOWY0ZTc4M2I4ZmMyMzIuYmluZFBvcHVwKHBvcHVwXzE3ZWYzNmVmYzBhNjQ1ZjNhYjU4MmZjZDYyMGFiMjNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OTJiOGQzYmQ3Zjc0MWRlODRmMjQ4OWVmNDkxOTg4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0YmU2MTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2NjYTJjNTQ4MjBjMDQyOTM4NDk0YTQ1MzYxMjc4YWRkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA4MmE4YjFjYWIxNjRhNGJhY2NjMDMxZWZjOTM3ZTU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViZGRjZTdlODg4MjRhZjk5ZTg0MGVjNjIzMzE4ODEwID0gJChgPGRpdiBpZD0iaHRtbF81YmRkY2U3ZTg4ODI0YWY5OWU4NDBlYzYyMzMxODgxMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3J1c3MxMjYzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJ1c3NpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDgyYThiMWNhYjE2NGE0YmFjY2MwMzFlZmM5MzdlNTcuc2V0Q29udGVudChodG1sXzViZGRjZTdlODg4MjRhZjk5ZTg0MGVjNjIzMzE4ODEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU5MmI4ZDNiZDdmNzQxZGU4NGYyNDg5ZWY0OTE5ODhiLmJpbmRQb3B1cChwb3B1cF8wODJhOGIxY2FiMTY0YTRiYWNjYzAzMWVmYzkzN2U1NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjEyODQ3MWQ0Nzg5NDU2Mjk5YWY4YjE1ZjQ0ZTQ1MzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTk0YmU2IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2NjYTJjNTQ4MjBjMDQyOTM4NDk0YTQ1MzYxMjc4YWRkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5MTFjNDUwMjJkYjQ4ZTRhZDY0YjBkZDRkYzVmODIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxYzQ5MWU5MmIxNDQ3NzQ5YTlmM2NjODhkOTIzY2NkID0gJChgPGRpdiBpZD0iaHRtbF8zMWM0OTFlOTJiMTQ0Nzc0OWE5ZjNjYzg4ZDkyM2NjZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3J1c3MxMjYzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJ1c3NpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDkxMWM0NTAyMmRiNDhlNGFkNjRiMGRkNGRjNWY4MjEuc2V0Q29udGVudChodG1sXzMxYzQ5MWU5MmIxNDQ3NzQ5YTlmM2NjODhkOTIzY2NkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYxMjg0NzFkNDc4OTQ1NjI5OWFmOGIxNWY0NGU0NTM4LmJpbmRQb3B1cChwb3B1cF80OTExYzQ1MDIyZGI0OGU0YWQ2NGIwZGQ0ZGM1ZjgyMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjk0ZjY5YzcxZDNkNGY2MmEwNmFiYzExNTE4Yzg1MGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOTRiZTYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2NjYTJjNTQ4MjBjMDQyOTM4NDk0YTQ1MzYxMjc4YWRkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0OGQ3Njk5OTg4YzQwNDlhN2UwYjg3ODk2MzE1N2I1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM2Mjk1NjM1YTBmMzQ0MTc4Nzg4MjIxNDkwMjQ3ODNlID0gJChgPGRpdiBpZD0iaHRtbF8zNjI5NTYzNWEwZjM0NDE3ODc4ODIyMTQ5MDI0NzgzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2J1bGcxMjYyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJ1bGdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NDhkNzY5OTk4OGM0MDQ5YTdlMGI4Nzg5NjMxNTdiNS5zZXRDb250ZW50KGh0bWxfMzYyOTU2MzVhMGYzNDQxNzg3ODgyMjE0OTAyNDc4M2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjk0ZjY5YzcxZDNkNGY2MmEwNmFiYzExNTE4Yzg1MGUuYmluZFBvcHVwKHBvcHVwXzg0OGQ3Njk5OTg4YzQwNDlhN2UwYjg3ODk2MzE1N2I1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.17. Using Existing Folium Map 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If you already have a ``folium.Map`` that you want to edit using
``lingtypology``, you can pass it as ``base_map`` attribute.

.. code:: ipython3

    import folium
    folium_map = folium.Map((0, 0), zoom_start=2)
    marker = folium.Marker((0, 0))
    icon = folium.DivIcon(
        html='<img src="https://raw.githubusercontent.com/OneAdder' + \
        '/lingtypology/master/data_processing/waifu6060.jpg"></img>'
    )
    marker.add_child(icon)
    folium_map.add_child(marker)
    
    m = lingtypology.LingMap(('Russian', 'Afrikaans'))
    m.base_map = folium_map
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzU0NmViNzE2MzdmZTQxNWNiZjg0NGQ4YmIzMmFiNTkxIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF81NDZlYjcxNjM3ZmU0MTVjYmY4NDRkOGJiMzJhYjU5MSIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfNTQ2ZWI3MTYzN2ZlNDE1Y2JmODQ0ZDhiYjMyYWI1OTEgPSBMLm1hcCgKICAgICAgICAnbWFwXzU0NmViNzE2MzdmZTQxNWNiZjg0NGQ4YmIzMmFiNTkxJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwoKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzMxY2E3OWM0NDgyMzQwZmVhNWI5MzlmZWYxYjI5OTM3ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF81NDZlYjcxNjM3ZmU0MTVjYmY4NDRkOGJiMzJhYjU5MSk7CiAgICAKICAgICAgICB2YXIgbWFya2VyX2ZjNWQ3ZWExNzk0ZjQxZmE4OTZiNDUyZmFkMmVlMjk4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFswLCAwXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzU0NmViNzE2MzdmZTQxNWNiZjg0NGQ4YmIzMmFiNTkxKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl84NmI4YmU0MTg1MTA0ZDljYmU2YjBhZTdhNmJkZjgwMSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8aW1nIHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL09uZUFkZGVyL2xpbmd0eXBvbG9neS9tYXN0ZXIvZGF0YV9wcm9jZXNzaW5nL3dhaWZ1NjA2MC5qcGciPjwvaW1nPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmM1ZDdlYTE3OTRmNDFmYTg5NmI0NTJmYWQyZWUyOTguc2V0SWNvbihkaXZfaWNvbl84NmI4YmU0MTg1MTA0ZDljYmU2YjBhZTdhNmJkZjgwMSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzgwNDI4M2QwN2IyNDRkYWRhMzVjMWNmZTc0NzIwYTE3ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81NDZlYjcxNjM3ZmU0MTVjYmY4NDRkOGJiMzJhYjU5MSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzFiM2JlMjc2ZGRkNGVlZGE4ZmQ1MWQ0YjdmY2M0NmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODA0MjgzZDA3YjI0NGRhZGEzNWMxY2ZlNzQ3MjBhMTcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZTk3NjQyNjg4MjI0NmY2OWY2NDg1ZWFkOTY3ZjVkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMi4wLCAzMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODA0MjgzZDA3YjI0NGRhZGEzNWMxY2ZlNzQ3MjBhMTcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzVjNGE4YWI1ZTQ0NDYxYjM1NTM3ZGRkODcxNmNmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84MDQyODNkMDdiMjQ0ZGFkYTM1YzFjZmU3NDcyMGExNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZjdjZDVkMTQxNDA0Yzc1OWJlYjRhMDA1ZDAzNzhhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNGM1MzBlMDBlOTY0N2MwOThhMjJkN2FkZDU4ZDUzYiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjRjNTMwZTAwZTk2NDdjMDk4YTIyZDdhZGQ1OGQ1M2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmN2NkNWQxNDE0MDRjNzU5YmViNGEwMDVkMDM3OGE0LnNldENvbnRlbnQoaHRtbF9iNGM1MzBlMDBlOTY0N2MwOThhMjJkN2FkZDU4ZDUzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNzVjNGE4YWI1ZTQ0NDYxYjM1NTM3ZGRkODcxNmNmNi5iaW5kUG9wdXAocG9wdXBfNWY3Y2Q1ZDE0MTQwNGM3NTliZWI0YTAwNWQwMzc4YTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwYzFiNmJlNWU4ODQ4MTA5YzY4OGQwNDI2MmI0ZWQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIyLjAsIDMwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84MDQyODNkMDdiMjQ0ZGFkYTM1YzFjZmU3NDcyMGExNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZmMxMmIwNjYxMmY0NWYzYjc5MjU1ZmRiNjNjZmQyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OTQ2NzUwZTdkYTI0ZjhhYmYyZmRmZGU5MzY0N2Q1MSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjk0Njc1MGU3ZGEyNGY4YWJmMmZkZmRlOTM2NDdkNTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZnJpMTI3NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZnJpa2FhbnM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGZjMTJiMDY2MTJmNDVmM2I3OTI1NWZkYjYzY2ZkMmEuc2V0Q29udGVudChodG1sXzY5NDY3NTBlN2RhMjRmOGFiZjJmZGZkZTkzNjQ3ZDUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QwYzFiNmJlNWU4ODQ4MTA5YzY4OGQwNDI2MmI0ZWQ4LmJpbmRQb3B1cChwb3B1cF84ZmMxMmIwNjYxMmY0NWYzYjc5MjU1ZmRiNjNjZmQyYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.18. Merging Maps 
~~~~~~~~~~~~~~~~~~~

You can also draw two ``lingtypology`` maps the way it is described in
`1.16 <#folium>`__. However, it is not recommended and may cause
glitches.

You can use ``lingtypology.merge``. Let’s merge examples from
`1.12 <#gradients>`__ and `1.13 <#minicharts>`__

.. code:: ipython3

    m1 = lingtypology.LingMap([
        'Irish', 'Estonian', 'Norwegian', 'Romanian', 'Polish',
        'Italian', 'Turkish', 'French', 'English', 'Spanish'
    ])
    m1.add_features(native_speakers, numeric=True)
    m1.colormap_colors = ('white', 'red')
    m1.legend_title = 'Native Speakers'
    m1.legend_position = 'bottomleft'
    
    m2 = lingtypology.LingMap(data.language)
    m2.legend_title = 'Consonants/Vowels'
    m2.add_minicharts(data.consonants, data.vowels)
    
    m = lingtypology.merge(m1, m2)
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzNkNDYyNjlhYmRhOTQ5OGNiNTQ1NzA0ZDg3ZmE5NjhiIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8zZDQ2MjY5YWJkYTk0OThjYjU0NTcwNGQ4N2ZhOTY4YiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IGxlZnQ6IDIwcHg7IGJvdHRvbTogNDBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TmF0aXZlIFNwZWFrZXJzPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPHN2ZyBoZWlnaHQ9IjE2MyIgd2lkdGg9IjIwIj48bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIyMCIgeTI9IjAic3R5bGU9InN0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIiIHgyPSIyMCIgeTI9IjIic3R5bGU9InN0cm9rZTojZmZmZWZlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMiIHgyPSIyMCIgeTI9IjMic3R5bGU9InN0cm9rZTojZmZmZGZkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQiIHgyPSIyMCIgeTI9IjQic3R5bGU9InN0cm9rZTojZmZmY2ZjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUiIHgyPSIyMCIgeTI9IjUic3R5bGU9InN0cm9rZTojZmZmYWZhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYiIHgyPSIyMCIgeTI9IjYic3R5bGU9InN0cm9rZTojZmZmOWY5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjciIHgyPSIyMCIgeTI9Ijcic3R5bGU9InN0cm9rZTojZmZmOGY4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgiIHgyPSIyMCIgeTI9Ijgic3R5bGU9InN0cm9rZTojZmZmN2Y3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkiIHgyPSIyMCIgeTI9Ijkic3R5bGU9InN0cm9rZTojZmZmNWY1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwIiB4Mj0iMjAiIHkyPSIxMCJzdHlsZT0ic3Ryb2tlOiNmZmY0ZjQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEiIHgyPSIyMCIgeTI9IjExInN0eWxlPSJzdHJva2U6I2ZmZjNmMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMiIgeDI9IjIwIiB5Mj0iMTIic3R5bGU9InN0cm9rZTojZmZmMWYxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzIiB4Mj0iMjAiIHkyPSIxMyJzdHlsZT0ic3Ryb2tlOiNmZmYwZjA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQiIHgyPSIyMCIgeTI9IjE0InN0eWxlPSJzdHJva2U6I2ZmZWZlZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNSIgeDI9IjIwIiB5Mj0iMTUic3R5bGU9InN0cm9rZTojZmZlZWVlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2IiB4Mj0iMjAiIHkyPSIxNiJzdHlsZT0ic3Ryb2tlOiNmZmVjZWM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTciIHgyPSIyMCIgeTI9IjE3InN0eWxlPSJzdHJva2U6I2ZmZWJlYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxOCIgeDI9IjIwIiB5Mj0iMTgic3R5bGU9InN0cm9rZTojZmZlYWVhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE4IiB4Mj0iMjAiIHkyPSIxOCJzdHlsZT0ic3Ryb2tlOiNmZmU2ZTY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjAiIHgyPSIyMCIgeTI9IjIwInN0eWxlPSJzdHJva2U6I2ZmZTVlNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMSIgeDI9IjIwIiB5Mj0iMjEic3R5bGU9InN0cm9rZTojZmZlM2UzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIyIiB4Mj0iMjAiIHkyPSIyMiJzdHlsZT0ic3Ryb2tlOiNmZmUyZTI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjMiIHgyPSIyMCIgeTI9IjIzInN0eWxlPSJzdHJva2U6I2ZmZTFlMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNCIgeDI9IjIwIiB5Mj0iMjQic3R5bGU9InN0cm9rZTojZmZkZmRmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI1IiB4Mj0iMjAiIHkyPSIyNSJzdHlsZT0ic3Ryb2tlOiNmZmRlZGU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjYiIHgyPSIyMCIgeTI9IjI2InN0eWxlPSJzdHJva2U6I2ZmZGRkZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNyIgeDI9IjIwIiB5Mj0iMjcic3R5bGU9InN0cm9rZTojZmZkY2RjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI4IiB4Mj0iMjAiIHkyPSIyOCJzdHlsZT0ic3Ryb2tlOiNmZmRhZGE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjkiIHgyPSIyMCIgeTI9IjI5InN0eWxlPSJzdHJva2U6I2ZmZDlkOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMCIgeDI9IjIwIiB5Mj0iMzAic3R5bGU9InN0cm9rZTojZmZkOGQ4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMxIiB4Mj0iMjAiIHkyPSIzMSJzdHlsZT0ic3Ryb2tlOiNmZmQ3ZDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzIiIHgyPSIyMCIgeTI9IjMyInN0eWxlPSJzdHJva2U6I2ZmZDVkNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMyIgeDI9IjIwIiB5Mj0iMzMic3R5bGU9InN0cm9rZTojZmZkNGQ0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM0IiB4Mj0iMjAiIHkyPSIzNCJzdHlsZT0ic3Ryb2tlOiNmZmQzZDM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzUiIHgyPSIyMCIgeTI9IjM1InN0eWxlPSJzdHJva2U6I2ZmZDFkMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNiIgeDI9IjIwIiB5Mj0iMzYic3R5bGU9InN0cm9rZTojZmZkMGQwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM2IiB4Mj0iMjAiIHkyPSIzNiJzdHlsZT0ic3Ryb2tlOiNmZmNjY2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzgiIHgyPSIyMCIgeTI9IjM4InN0eWxlPSJzdHJva2U6I2ZmY2JjYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzOSIgeDI9IjIwIiB5Mj0iMzkic3R5bGU9InN0cm9rZTojZmZjYWNhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQwIiB4Mj0iMjAiIHkyPSI0MCJzdHlsZT0ic3Ryb2tlOiNmZmM4Yzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDEiIHgyPSIyMCIgeTI9IjQxInN0eWxlPSJzdHJva2U6I2ZmYzdjNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MiIgeDI9IjIwIiB5Mj0iNDIic3R5bGU9InN0cm9rZTojZmZjNmM2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQzIiB4Mj0iMjAiIHkyPSI0MyJzdHlsZT0ic3Ryb2tlOiNmZmM1YzU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDQiIHgyPSIyMCIgeTI9IjQ0InN0eWxlPSJzdHJva2U6I2ZmYzNjMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NSIgeDI9IjIwIiB5Mj0iNDUic3R5bGU9InN0cm9rZTojZmZjMmMyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ2IiB4Mj0iMjAiIHkyPSI0NiJzdHlsZT0ic3Ryb2tlOiNmZmMxYzE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDciIHgyPSIyMCIgeTI9IjQ3InN0eWxlPSJzdHJva2U6I2ZmYmZiZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0OCIgeDI9IjIwIiB5Mj0iNDgic3R5bGU9InN0cm9rZTojZmZiZWJlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ5IiB4Mj0iMjAiIHkyPSI0OSJzdHlsZT0ic3Ryb2tlOiNmZmJkYmQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTAiIHgyPSIyMCIgeTI9IjUwInN0eWxlPSJzdHJva2U6I2ZmYmNiYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MSIgeDI9IjIwIiB5Mj0iNTEic3R5bGU9InN0cm9rZTojZmZiYWJhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUyIiB4Mj0iMjAiIHkyPSI1MiJzdHlsZT0ic3Ryb2tlOiNmZmI5Yjk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTMiIHgyPSIyMCIgeTI9IjUzInN0eWxlPSJzdHJva2U6I2ZmYjhiODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NCIgeDI9IjIwIiB5Mj0iNTQic3R5bGU9InN0cm9rZTojZmZiN2I3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU0IiB4Mj0iMjAiIHkyPSI1NCJzdHlsZT0ic3Ryb2tlOiNmZmIzYjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTYiIHgyPSIyMCIgeTI9IjU2InN0eWxlPSJzdHJva2U6I2ZmYjFiMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NyIgeDI9IjIwIiB5Mj0iNTcic3R5bGU9InN0cm9rZTojZmZiMGIwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU4IiB4Mj0iMjAiIHkyPSI1OCJzdHlsZT0ic3Ryb2tlOiNmZmFmYWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTkiIHgyPSIyMCIgeTI9IjU5InN0eWxlPSJzdHJva2U6I2ZmYWVhZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MCIgeDI9IjIwIiB5Mj0iNjAic3R5bGU9InN0cm9rZTojZmZhY2FjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYxIiB4Mj0iMjAiIHkyPSI2MSJzdHlsZT0ic3Ryb2tlOiNmZmFiYWI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjIiIHgyPSIyMCIgeTI9IjYyInN0eWxlPSJzdHJva2U6I2ZmYWFhYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MyIgeDI9IjIwIiB5Mj0iNjMic3R5bGU9InN0cm9rZTojZmZhOGE4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY0IiB4Mj0iMjAiIHkyPSI2NCJzdHlsZT0ic3Ryb2tlOiNmZmE3YTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjUiIHgyPSIyMCIgeTI9IjY1InN0eWxlPSJzdHJva2U6I2ZmYTZhNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NiIgeDI9IjIwIiB5Mj0iNjYic3R5bGU9InN0cm9rZTojZmZhNWE1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY3IiB4Mj0iMjAiIHkyPSI2NyJzdHlsZT0ic3Ryb2tlOiNmZmEzYTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjgiIHgyPSIyMCIgeTI9IjY4InN0eWxlPSJzdHJva2U6I2ZmYTJhMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2OSIgeDI9IjIwIiB5Mj0iNjkic3R5bGU9InN0cm9rZTojZmZhMWExO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcwIiB4Mj0iMjAiIHkyPSI3MCJzdHlsZT0ic3Ryb2tlOiNmZjlmOWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzEiIHgyPSIyMCIgeTI9IjcxInN0eWxlPSJzdHJva2U6I2ZmOWU5ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MiIgeDI9IjIwIiB5Mj0iNzIic3R5bGU9InN0cm9rZTojZmY5ZDlkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcyIiB4Mj0iMjAiIHkyPSI3MiJzdHlsZT0ic3Ryb2tlOiNmZjk5OTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzQiIHgyPSIyMCIgeTI9Ijc0InN0eWxlPSJzdHJva2U6I2ZmOTg5ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NSIgeDI9IjIwIiB5Mj0iNzUic3R5bGU9InN0cm9rZTojZmY5Nzk3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc2IiB4Mj0iMjAiIHkyPSI3NiJzdHlsZT0ic3Ryb2tlOiNmZjk1OTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzciIHgyPSIyMCIgeTI9Ijc3InN0eWxlPSJzdHJva2U6I2ZmOTQ5NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3OCIgeDI9IjIwIiB5Mj0iNzgic3R5bGU9InN0cm9rZTojZmY5MzkzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc5IiB4Mj0iMjAiIHkyPSI3OSJzdHlsZT0ic3Ryb2tlOiNmZjkxOTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODAiIHgyPSIyMCIgeTI9IjgwInN0eWxlPSJzdHJva2U6I2ZmOTA5MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MSIgeDI9IjIwIiB5Mj0iODEic3R5bGU9InN0cm9rZTojZmY4ZjhmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgyIiB4Mj0iMjAiIHkyPSI4MiJzdHlsZT0ic3Ryb2tlOiNmZjhlOGU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODMiIHgyPSIyMCIgeTI9IjgzInN0eWxlPSJzdHJva2U6I2ZmOGM4YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NCIgeDI9IjIwIiB5Mj0iODQic3R5bGU9InN0cm9rZTojZmY4YjhiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg1IiB4Mj0iMjAiIHkyPSI4NSJzdHlsZT0ic3Ryb2tlOiNmZjhhOGE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODYiIHgyPSIyMCIgeTI9Ijg2InN0eWxlPSJzdHJva2U6I2ZmODg4ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NyIgeDI9IjIwIiB5Mj0iODcic3R5bGU9InN0cm9rZTojZmY4Nzg3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg4IiB4Mj0iMjAiIHkyPSI4OCJzdHlsZT0ic3Ryb2tlOiNmZjg2ODY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODkiIHgyPSIyMCIgeTI9Ijg5InN0eWxlPSJzdHJva2U6I2ZmODU4NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MCIgeDI9IjIwIiB5Mj0iOTAic3R5bGU9InN0cm9rZTojZmY4MzgzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkwIiB4Mj0iMjAiIHkyPSI5MCJzdHlsZT0ic3Ryb2tlOiNmZjdmN2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTIiIHgyPSIyMCIgeTI9IjkyInN0eWxlPSJzdHJva2U6I2ZmN2U3ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MyIgeDI9IjIwIiB5Mj0iOTMic3R5bGU9InN0cm9rZTojZmY3ZDdkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk0IiB4Mj0iMjAiIHkyPSI5NCJzdHlsZT0ic3Ryb2tlOiNmZjdjN2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTUiIHgyPSIyMCIgeTI9Ijk1InN0eWxlPSJzdHJva2U6I2ZmN2E3YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NiIgeDI9IjIwIiB5Mj0iOTYic3R5bGU9InN0cm9rZTojZmY3OTc5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk3IiB4Mj0iMjAiIHkyPSI5NyJzdHlsZT0ic3Ryb2tlOiNmZjc4Nzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTgiIHgyPSIyMCIgeTI9Ijk4InN0eWxlPSJzdHJva2U6I2ZmNzc3NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5OSIgeDI9IjIwIiB5Mj0iOTkic3R5bGU9InN0cm9rZTojZmY3NTc1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMCIgeDI9IjIwIiB5Mj0iMTAwInN0eWxlPSJzdHJva2U6I2ZmNzQ3NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDEiIHgyPSIyMCIgeTI9IjEwMSJzdHlsZT0ic3Ryb2tlOiNmZjczNzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAyIiB4Mj0iMjAiIHkyPSIxMDIic3R5bGU9InN0cm9rZTojZmY3MTcxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMyIgeDI9IjIwIiB5Mj0iMTAzInN0eWxlPSJzdHJva2U6I2ZmNzA3MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDQiIHgyPSIyMCIgeTI9IjEwNCJzdHlsZT0ic3Ryb2tlOiNmZjZmNmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA1IiB4Mj0iMjAiIHkyPSIxMDUic3R5bGU9InN0cm9rZTojZmY2ZTZlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwNiIgeDI9IjIwIiB5Mj0iMTA2InN0eWxlPSJzdHJva2U6I2ZmNmM2YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDciIHgyPSIyMCIgeTI9IjEwNyJzdHlsZT0ic3Ryb2tlOiNmZjZiNmI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA4IiB4Mj0iMjAiIHkyPSIxMDgic3R5bGU9InN0cm9rZTojZmY2YTZhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwOCIgeDI9IjIwIiB5Mj0iMTA4InN0eWxlPSJzdHJva2U6I2ZmNjY2NjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTAiIHgyPSIyMCIgeTI9IjExMCJzdHlsZT0ic3Ryb2tlOiNmZjY1NjU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTExIiB4Mj0iMjAiIHkyPSIxMTEic3R5bGU9InN0cm9rZTojZmY2MzYzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExMiIgeDI9IjIwIiB5Mj0iMTEyInN0eWxlPSJzdHJva2U6I2ZmNjI2MjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTMiIHgyPSIyMCIgeTI9IjExMyJzdHlsZT0ic3Ryb2tlOiNmZjYxNjE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE0IiB4Mj0iMjAiIHkyPSIxMTQic3R5bGU9InN0cm9rZTojZmY1ZjVmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNSIgeDI9IjIwIiB5Mj0iMTE1InN0eWxlPSJzdHJva2U6I2ZmNWU1ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTYiIHgyPSIyMCIgeTI9IjExNiJzdHlsZT0ic3Ryb2tlOiNmZjVkNWQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE3IiB4Mj0iMjAiIHkyPSIxMTcic3R5bGU9InN0cm9rZTojZmY1YzVjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExOCIgeDI9IjIwIiB5Mj0iMTE4InN0eWxlPSJzdHJva2U6I2ZmNWE1YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTkiIHgyPSIyMCIgeTI9IjExOSJzdHlsZT0ic3Ryb2tlOiNmZjU5NTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIwIiB4Mj0iMjAiIHkyPSIxMjAic3R5bGU9InN0cm9rZTojZmY1ODU4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMSIgeDI9IjIwIiB5Mj0iMTIxInN0eWxlPSJzdHJva2U6I2ZmNTc1NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjIiIHgyPSIyMCIgeTI9IjEyMiJzdHlsZT0ic3Ryb2tlOiNmZjU1NTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIzIiB4Mj0iMjAiIHkyPSIxMjMic3R5bGU9InN0cm9rZTojZmY1NDU0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNCIgeDI9IjIwIiB5Mj0iMTI0InN0eWxlPSJzdHJva2U6I2ZmNTM1MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjUiIHgyPSIyMCIgeTI9IjEyNSJzdHlsZT0ic3Ryb2tlOiNmZjUxNTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI2IiB4Mj0iMjAiIHkyPSIxMjYic3R5bGU9InN0cm9rZTojZmY1MDUwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNiIgeDI9IjIwIiB5Mj0iMTI2InN0eWxlPSJzdHJva2U6I2ZmNGM0YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjgiIHgyPSIyMCIgeTI9IjEyOCJzdHlsZT0ic3Ryb2tlOiNmZjRiNGI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI5IiB4Mj0iMjAiIHkyPSIxMjkic3R5bGU9InN0cm9rZTojZmY0YTRhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMCIgeDI9IjIwIiB5Mj0iMTMwInN0eWxlPSJzdHJva2U6I2ZmNDg0ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzEiIHgyPSIyMCIgeTI9IjEzMSJzdHlsZT0ic3Ryb2tlOiNmZjQ3NDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMyIiB4Mj0iMjAiIHkyPSIxMzIic3R5bGU9InN0cm9rZTojZmY0NjQ2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMyIgeDI9IjIwIiB5Mj0iMTMzInN0eWxlPSJzdHJva2U6I2ZmNDU0NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzQiIHgyPSIyMCIgeTI9IjEzNCJzdHlsZT0ic3Ryb2tlOiNmZjQzNDM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM1IiB4Mj0iMjAiIHkyPSIxMzUic3R5bGU9InN0cm9rZTojZmY0MjQyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzNiIgeDI9IjIwIiB5Mj0iMTM2InN0eWxlPSJzdHJva2U6I2ZmNDE0MTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzciIHgyPSIyMCIgeTI9IjEzNyJzdHlsZT0ic3Ryb2tlOiNmZjNmM2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM4IiB4Mj0iMjAiIHkyPSIxMzgic3R5bGU9InN0cm9rZTojZmYzZTNlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzOSIgeDI9IjIwIiB5Mj0iMTM5InN0eWxlPSJzdHJva2U6I2ZmM2QzZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDAiIHgyPSIyMCIgeTI9IjE0MCJzdHlsZT0ic3Ryb2tlOiNmZjNjM2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQxIiB4Mj0iMjAiIHkyPSIxNDEic3R5bGU9InN0cm9rZTojZmYzYTNhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0MiIgeDI9IjIwIiB5Mj0iMTQyInN0eWxlPSJzdHJva2U6I2ZmMzkzOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDMiIHgyPSIyMCIgeTI9IjE0MyJzdHlsZT0ic3Ryb2tlOiNmZjM4Mzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ0IiB4Mj0iMjAiIHkyPSIxNDQic3R5bGU9InN0cm9rZTojZmYzNzM3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NCIgeDI9IjIwIiB5Mj0iMTQ0InN0eWxlPSJzdHJva2U6I2ZmMzMzMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDYiIHgyPSIyMCIgeTI9IjE0NiJzdHlsZT0ic3Ryb2tlOiNmZjMxMzE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ3IiB4Mj0iMjAiIHkyPSIxNDcic3R5bGU9InN0cm9rZTojZmYzMDMwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0OCIgeDI9IjIwIiB5Mj0iMTQ4InN0eWxlPSJzdHJva2U6I2ZmMmYyZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDkiIHgyPSIyMCIgeTI9IjE0OSJzdHlsZT0ic3Ryb2tlOiNmZjJlMmU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUwIiB4Mj0iMjAiIHkyPSIxNTAic3R5bGU9InN0cm9rZTojZmYyYzJjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MSIgeDI9IjIwIiB5Mj0iMTUxInN0eWxlPSJzdHJva2U6I2ZmMmIyYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTIiIHgyPSIyMCIgeTI9IjE1MiJzdHlsZT0ic3Ryb2tlOiNmZjJhMmE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUzIiB4Mj0iMjAiIHkyPSIxNTMic3R5bGU9InN0cm9rZTojZmYyODI4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NCIgeDI9IjIwIiB5Mj0iMTU0InN0eWxlPSJzdHJva2U6I2ZmMjcyNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTUiIHgyPSIyMCIgeTI9IjE1NSJzdHlsZT0ic3Ryb2tlOiNmZjI2MjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU2IiB4Mj0iMjAiIHkyPSIxNTYic3R5bGU9InN0cm9rZTojZmYyNTI1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NyIgeDI9IjIwIiB5Mj0iMTU3InN0eWxlPSJzdHJva2U6I2ZmMjMyMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTgiIHgyPSIyMCIgeTI9IjE1OCJzdHlsZT0ic3Ryb2tlOiNmZjIyMjI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU5IiB4Mj0iMjAiIHkyPSIxNTkic3R5bGU9InN0cm9rZTojZmYyMTIxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MCIgeDI9IjIwIiB5Mj0iMTYwInN0eWxlPSJzdHJva2U6I2ZmMWYxZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjEiIHgyPSIyMCIgeTI9IjE2MSJzdHlsZT0ic3Ryb2tlOiNmZjFlMWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYyIiB4Mj0iMjAiIHkyPSIxNjIic3R5bGU9InN0cm9rZTojZmYxZDFkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MiIgeDI9IjIwIiB5Mj0iMTYyInN0eWxlPSJzdHJva2U6I2ZmMTkxOTtzdHJva2Utd2lkdGg6MzsiIC8+PC9zdmc+PHN2ZyBoZWlnaHQ9IjE2MyIgd2lkdGg9IjUwIj48dGV4dCB4PSI1IiB5PSIxOSIgZHg9IjAiIGR5PSIwZXgiPi0gNTA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMzciIGR4PSIwIiBkeT0iMGV4Ij4tIDEwMDwvdGV4dD48dGV4dCB4PSI1IiB5PSI1NSIgZHg9IjAiIGR5PSIwZXgiPi0gMTUwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjczIiBkeD0iMCIgZHk9IjBleCI+LSAyMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iOTEiIGR4PSIwIiBkeT0iMGV4Ij4tIDI1MDwvdGV4dD48dGV4dCB4PSI1IiB5PSIxMDkiIGR4PSIwIiBkeT0iMGV4Ij4tIDMwMDwvdGV4dD48dGV4dCB4PSI1IiB5PSIxMjciIGR4PSIwIiBkeT0iMGV4Ij4tIDM1MDwvdGV4dD48dGV4dCB4PSI1IiB5PSIxNDUiIGR4PSIwIiBkeT0iMGV4Ij4tIDQwMDwvdGV4dD48dGV4dCB4PSI1IiB5PSIxNjMiIGR4PSIwIiBkeT0iMGV4Ij4tIDQ1MDwvdGV4dD48L3N2Zz4KCiAgPC91bD4KPC9kaXY+CjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cgo8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPgogIC5tYXBsZWdlbmQgLmxlZ2VuZC10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDkwJTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgcGFkZGluZzogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgbGkgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIH0KICAubWFwbGVnZW5kIHVsLmxlZ2VuZC1sYWJlbHMgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgaGVpZ2h0OiAxNnB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgCiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNvdXJjZSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGNvbG9yOiAjNzc3OwogICAgY2xlYXI6IGJvdGg7CiAgICB9CiAgLm1hcGxlZ2VuZCBhIHsKICAgIGNvbG9yOiAjNzc3OwogICAgfQo8L3N0eWxlPgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5Db25zb25hbnRzL1Zvd2VsczwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2U2MTk0YjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5jb25zb25hbnRzPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjMTllNmI0O29wYWNpdHk6MC43OyI+PC9zcGFuPnZvd2VsczwvbGk+CgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8zZDQ2MjY5YWJkYTk0OThjYjU0NTcwNGQ4N2ZhOTY4YiA9IEwubWFwKAogICAgICAgICdtYXBfM2Q0NjI2OWFiZGE5NDk4Y2I1NDU3MDRkODdmYTk2OGInLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF8zZDQ2MjY5YWJkYTk0OThjYjU0NTcwNGQ4N2ZhOTY4Yik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl80Mzg5ZWM4NTM2YTU0NTU4YjA2NWM5M2FkZTYwN2E3YyA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfM2Q0NjI2OWFiZGE5NDk4Y2I1NDU3MDRkODdmYTk2OGIpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2UyMDUwMjhhZGQ4YjRmNDc5ZmYwMzQwNTk0ZTEzOWQ3ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8zZDQ2MjY5YWJkYTk0OThjYjU0NTcwNGQ4N2ZhOTY4Yik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTJiNjExNjUxMGMyNDI3NzgxZWEwNzJiODRhNzY2M2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZTIwNTAyOGFkZDhiNGY0NzlmZjAzNDA1OTRlMTM5ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZGM3ZTE5YjA4MjY0MTUyYTE5MzMwMjA0YWI0MzBiMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU4LjU1LCAyNS44Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2UyMDUwMjhhZGQ4YjRmNDc5ZmYwMzQwNTk0ZTEzOWQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDk0Y2RiYWFiMTRiNGFhMGEwYTY0ZDY0ZTEzMTg1NTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS45MiwgMTAuNzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9lMjA1MDI4YWRkOGI0ZjQ3OWZmMDM0MDU5NGUxMzlkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFkMzgwM2VjYTBkNjQwZjRhYTQ5MzViMzQzMDgxNmNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2UyMDUwMjhhZGQ4YjRmNDc5ZmYwMzQwNTk0ZTEzOWQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzcyNDRjYTQ3NTBlNDQ1ZmE5ZDU4ODJkN2E0YjUzZGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZTIwNTAyOGFkZDhiNGY0NzlmZjAzNDA1OTRlMTM5ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wY2M4MzhmMDIwMTg0M2U2OGZkNjcxNzRiMGE3MzQ1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjA0NjQsIDEyLjY0ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9lMjA1MDI4YWRkOGI0ZjQ3OWZmMDM0MDU5NGUxMzlkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwOTIzNTE4MTg0MzRkZDg4OWJiMmUzYjc5ZDYwZTMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2UyMDUwMjhhZGQ4YjRmNDc5ZmYwMzQwNTk0ZTEzOWQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjMxNjQwZDJkZTc3NDI3MzhjY2MwZmJlMzNjZTYxMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9lMjA1MDI4YWRkOGI0ZjQ3OWZmMDM0MDU5NGUxMzlkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5NTQ0NDJkNWMwZTQyOGQ4MGIxNWRkMTkzZjA2NWEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgLTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2UyMDUwMjhhZGQ4YjRmNDc5ZmYwMzQwNTk0ZTEzOWQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzI0ZDM5ZTdjYTYwNDUyM2FiN2JjNDAyYTBiODIwNDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40NDE0LCAtMS4xMTc4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2UyMDUwMjhhZGQ4YjRmNDc5ZmYwMzQwNTk0ZTEzOWQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmUxM2RhMmIxMGM5NGNkMThlYzRhMzUwNGEwNWE1OTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZTIwNTAyOGFkZDhiNGY0NzlmZjAzNDA1OTRlMTM5ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzZjNjI4Mzg4MjJiNDlhNTg4ZjI2ZThmMWNiYzNhYzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTZhODAxMTg5YmJhNDdmM2EyZTI0Y2Q0NGFlMjhmN2YgPSAkKGA8ZGl2IGlkPSJodG1sXzU2YTgwMTE4OWJiYTQ3ZjNhMmUyNGNkNDRhZTI4ZjdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXJpczEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXJpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzZjNjI4Mzg4MjJiNDlhNTg4ZjI2ZThmMWNiYzNhYzAuc2V0Q29udGVudChodG1sXzU2YTgwMTE4OWJiYTQ3ZjNhMmUyNGNkNDRhZTI4ZjdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZlMTNkYTJiMTBjOTRjZDE4ZWM0YTM1MDRhMDVhNTkzLmJpbmRQb3B1cChwb3B1cF8zNmM2MjgzODgyMmI0OWE1ODhmMjZlOGYxY2JjM2FjMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2JiOTg2NzM5NmU4NDMzODkxMWU5NjgxNDdhODZhNDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OC41NSwgMjUuODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9lMjA1MDI4YWRkOGI0ZjQ3OWZmMDM0MDU5NGUxMzlkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YjRiODk4YjVhYjM0MDM2ODZlZDQ3YTE3MDFhODg3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzE0MDZkYzIyMGQ0ZWMyYmEzNDQxMjAwZmI4MTU0ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfY2MxNDA2ZGMyMjBkNGVjMmJhMzQ0MTIwMGZiODE1NGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9lc3RvMTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Fc3RvbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YjRiODk4YjVhYjM0MDM2ODZlZDQ3YTE3MDFhODg3My5zZXRDb250ZW50KGh0bWxfY2MxNDA2ZGMyMjBkNGVjMmJhMzQ0MTIwMGZiODE1NGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2JiOTg2NzM5NmU4NDMzODkxMWU5NjgxNDdhODZhNDcuYmluZFBvcHVwKHBvcHVwXzZiNGI4OThiNWFiMzQwMzY4NmVkNDdhMTcwMWE4ODczKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNjQ5MGQ1NDMwMjI0ZDY0YjcxMWEyOGQ0OWMwZmVmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjkyLCAxMC43MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmRmZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2UyMDUwMjhhZGQ4YjRmNDc5ZmYwMzQwNTk0ZTEzOWQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiNjFiOTllYjQ5MTRlMTdhYWVlYjAxMGZlNjgzZjI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FlNDA0YTdiZTM3YjQzZTlhYjg1OTFmMmRlZjhkYjQxID0gJChgPGRpdiBpZD0iaHRtbF9hZTQwNGE3YmUzN2I0M2U5YWI4NTkxZjJkZWY4ZGI0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25vcncxMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vcndlZ2lhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYjYxYjk5ZWI0OTE0ZTE3YWFlZWIwMTBmZTY4M2YyNi5zZXRDb250ZW50KGh0bWxfYWU0MDRhN2JlMzdiNDNlOWFiODU5MWYyZGVmOGRiNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzY0OTBkNTQzMDIyNGQ2NGI3MTFhMjhkNDljMGZlZjAuYmluZFBvcHVwKHBvcHVwXzJiNjFiOTllYjQ5MTRlMTdhYWVlYjAxMGZlNjgzZjI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZTgyMDVkNTc0Yzc0NzM3OTg1YjE1MDMyYmRmODBkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjM5MTMsIDI0LjIyNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmYzZjMiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9lMjA1MDI4YWRkOGI0ZjQ3OWZmMDM0MDU5NGUxMzlkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDUwZGFjOGM3YTU0YWIyYWMwYWJhNmYzNTkzNzJiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MWYwYmQ3NWUwZDA0MTljOGVhZGU1YjEzNzkwYWI2MyA9ICQoYDxkaXYgaWQ9Imh0bWxfODFmMGJkNzVlMGQwNDE5YzhlYWRlNWIxMzc5MGFiNjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9yb21hMTMyNyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Sb21hbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNDUwZGFjOGM3YTU0YWIyYWMwYWJhNmYzNTkzNzJiNi5zZXRDb250ZW50KGh0bWxfODFmMGJkNzVlMGQwNDE5YzhlYWRlNWIxMzc5MGFiNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmU4MjA1ZDU3NGM3NDczNzk4NWIxNTAzMmJkZjgwZDYuYmluZFBvcHVwKHBvcHVwXzI0NTBkYWM4YzdhNTRhYjJhYzBhYmE2ZjM1OTM3MmI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMDkwNWQ0MmE2ZTM0YzlkYTMxMTk4ODdhMjlhN2Y1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmU5ZTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9lMjA1MDI4YWRkOGI0ZjQ3OWZmMDM0MDU5NGUxMzlkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMDdjMDM4YmEzNDA0ZjI2YjI1NjI3MDIzMWUxNWYwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZTRhMDc2NmUwZWU0ZDExYmI3ZGRmYzU1ZmVkMDNhZCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2U0YTA3NjZlMGVlNGQxMWJiN2RkZmM1NWZlZDAzYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wb2xpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qb2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDA3YzAzOGJhMzQwNGYyNmIyNTYyNzAyMzFlMTVmMDIuc2V0Q29udGVudChodG1sXzNlNGEwNzY2ZTBlZTRkMTFiYjdkZGZjNTVmZWQwM2FkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YwOTA1ZDQyYTZlMzRjOWRhMzExOTg4N2EyOWE3ZjUwLmJpbmRQb3B1cChwb3B1cF9kMDdjMDM4YmEzNDA0ZjI2YjI1NjI3MDIzMWUxNWYwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTNmYzQ1NDhmNWU1NGJhOTg4Y2I3ODhiNDUxYjNiZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wNDY0LCAxMi42NDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMGUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZTIwNTAyOGFkZDhiNGY0NzlmZjAzNDA1OTRlMTM5ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWFkYjlmYWQ4NjI1NDA4Zjg4OWY4ZjFhZjI2MjJjYjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmE0YjU1MjQ1YWNjNDc3YmIwZDk4NmUwNjQ5OTIyZjAgPSAkKGA8ZGl2IGlkPSJodG1sX2ZhNGI1NTI0NWFjYzQ3N2JiMGQ5ODZlMDY0OTkyMmYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXRhbDEyODIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXRhbGlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YWRiOWZhZDg2MjU0MDhmODg5ZjhmMWFmMjYyMmNiMy5zZXRDb250ZW50KGh0bWxfZmE0YjU1MjQ1YWNjNDc3YmIwZDk4NmUwNjQ5OTIyZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTNmYzQ1NDhmNWU1NGJhOTg4Y2I3ODhiNDUxYjNiZDcuYmluZFBvcHVwKHBvcHVwXzlhZGI5ZmFkODYyNTQwOGY4ODlmOGYxYWYyNjIyY2IzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wN2M2NTE4NjNjOWU0YjI3YTY0YmE1ZDQxNTUwNjcwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmQ4ZDgiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9lMjA1MDI4YWRkOGI0ZjQ3OWZmMDM0MDU5NGUxMzlkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MGYxMjkxMmU1MDg0YjgyYTZlMDQwY2JhYjAwZGRhYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MmMyMmMwZTY3ZDA0ZGNhYWQzM2NkZTFiYWM5ZWM3ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjJjMjJjMGU2N2QwNGRjYWFkMzNjZGUxYmFjOWVjN2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwZjEyOTEyZTUwODRiODJhNmUwNDBjYmFiMDBkZGFiLnNldENvbnRlbnQoaHRtbF82MmMyMmMwZTY3ZDA0ZGNhYWQzM2NkZTFiYWM5ZWM3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wN2M2NTE4NjNjOWU0YjI3YTY0YmE1ZDQxNTUwNjcwMC5iaW5kUG9wdXAocG9wdXBfNzBmMTI5MTJlNTA4NGI4MmE2ZTA0MGNiYWIwMGRkYWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwMThjN2RkODI0OTRkNWY5Mjc5NjJhNWIzNmI1NTEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMCwgMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZkOGQ4IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZTIwNTAyOGFkZDhiNGY0NzlmZjAzNDA1OTRlMTM5ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDg4YjNkNDJkN2NmNDBhNWJlMzYzZTI5NDE5NmZkOGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWRhM2I3YjU5NmNkNGIzZThjYmU2MGE4YjhhZDQyNmYgPSAkKGA8ZGl2IGlkPSJodG1sX2VkYTNiN2I1OTZjZDRiM2U4Y2JlNjBhOGI4YWQ0MjZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RnJlbmNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ4OGIzZDQyZDdjZjQwYTViZTM2M2UyOTQxOTZmZDhkLnNldENvbnRlbnQoaHRtbF9lZGEzYjdiNTk2Y2Q0YjNlOGNiZTYwYThiOGFkNDI2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMDE4YzdkZDgyNDk0ZDVmOTI3OTYyYTViMzZiNTUxMy5iaW5kUG9wdXAocG9wdXBfNDg4YjNkNDJkN2NmNDBhNWJlMzYzZTI5NDE5NmZkOGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViZjZhYjU5YzAwMzQzNTlhZjEzNDllZTZiMjhkNzBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgLTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmM2UzZSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2UyMDUwMjhhZGQ4YjRmNDc5ZmYwMzQwNTk0ZTEzOWQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwNTI4ZmE5MGY5MTQ3YzJiNzlkNmJkMjM5MjJjNWY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzMmVhYTNmZjI4NjRjMzliYTFkMzQ0ZDQ5YmQxMDZjID0gJChgPGRpdiBpZD0iaHRtbF9jMzJlYWEzZmYyODY0YzM5YmExZDM0NGQ0OWJkMTA2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjkzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVuZ2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDA1MjhmYTkwZjkxNDdjMmI3OWQ2YmQyMzkyMmM1Zjkuc2V0Q29udGVudChodG1sX2MzMmVhYTNmZjI4NjRjMzliYTFkMzQ0ZDQ5YmQxMDZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViZjZhYjU5YzAwMzQzNTlhZjEzNDllZTZiMjhkNzBkLmJpbmRQb3B1cChwb3B1cF8wMDUyOGZhOTBmOTE0N2MyYjc5ZDZiZDIzOTIyYzVmOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGEzNjdiNDdjMDk1NDEwZWEzMmRkNGEwNzg1YjljY2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40NDE0LCAtMS4xMTc4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMWQxZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2UyMDUwMjhhZGQ4YjRmNDc5ZmYwMzQwNTk0ZTEzOWQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiZTFiOTg2YmNkMTQyOTZiMTVkY2FlMGNkMTIxMzY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIzM2E2Yjc3YmMzOTRkYjk4OWIwMTdjNThkMWZkZmIxID0gJChgPGRpdiBpZD0iaHRtbF8yMzNhNmI3N2JjMzk0ZGI5ODliMDE3YzU4ZDFmZGZiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjg4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNwYW5pc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmJlMWI5ODZiY2QxNDI5NmIxNWRjYWUwY2QxMjEzNjYuc2V0Q29udGVudChodG1sXzIzM2E2Yjc3YmMzOTRkYjk4OWIwMTdjNThkMWZkZmIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhMzY3YjQ3YzA5NTQxMGVhMzJkZDRhMDc4NWI5Y2NhLmJpbmRQb3B1cChwb3B1cF9iYmUxYjk4NmJjZDE0Mjk2YjE1ZGNhZTBjZDEyMTM2NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2Y0MDExMmMyMzMwZTQwZjI4NzkzMTk2YWRkNzIzMTNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzNkNDYyNjlhYmRhOTQ5OGNiNTQ1NzA0ZDg3ZmE5NjhiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9iMTkwMjY5YzMwNjQ0ZjUzOGVmN2I0ZDcyZTIyMzk5MiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC44NDM4NTQgOC40NDU2IDE5LjU1NDkxNSA4LjYzODc1NiAxOC4zMTU3MDUgOS4wMTg2OTYgQyAxNy4wNzY0OTYgOS4zOTg2MzUgMTUuOTAwNzk2IDkuOTYxMTM0IDE0LjgyNzM5NCAxMC42ODc2MzMgQyAxMy43NTM5OTEgMTEuNDE0MTMzIDEyLjc5NDgyMiAxMi4yOTY1NTUgMTEuOTgxNTMxIDEzLjMwNTc4OCBDIDExLjE2ODI0IDE0LjMxNTAyMSAxMC41MDk4NjkgMTUuNDM5ODQzIDEwLjAyODE0MSAxNi42NDMxNDMgQyA5LjU0NjQxMiAxNy44NDY0NDMgOS4yNDY2ODEgMTkuMTE0ODQyIDkuMTM4ODM3IDIwLjQwNjQ5NCBDIDkuMDMwOTk0IDIxLjY5ODE0NSA5LjExNjIzNSAyMi45OTg2ODcgOS4zOTE3NTEgMjQuMjY1MjEyIEMgOS42NjcyNjcgMjUuNTMxNzM2IDEwLjEyOTk5MiAyNi43NTAxNjEgMTAuNzY0NjYyIDI3Ljg4MDI4OSBDIDExLjM5OTMzMiAyOS4wMTA0MTcgMTIuMTk4ODg4IDMwLjAzOTY4IDEzLjEzNjk1MyAzMC45MzQxMjQgQyAxNC4wNzUwMTggMzEuODI4NTY3IDE1LjE0MTE2IDMyLjU3ODI0MyAxNi4zMDAyMDcgMzMuMTU4NDIgQyAxNy40NTkyNTMgMzMuNzM4NTk4IDE4LjY5ODMxNSAzNC4xNDI4MjQgMTkuOTc2NTE1IDM0LjM1Nzc2NCBDIDIxLjI1NDcxNSAzNC41NzI3MDQgMjIuNTU3ODM5IDM0LjU5NTk2NyAyMy44NDI4OTcgMzQuNDI2Nzg2IEMgMjUuMTI3OTU0IDM0LjI1NzYwNSAyNi4zODA2NTQgMzMuODk3ODYxIDI3LjU1OTY3IDMzLjM1OTQyMyBDIDI4LjczODY4NiAzMi44MjA5ODUgMjkuODMwOTA3IDMyLjEwOTgzOSAzMC44MDAyOTkgMzEuMjQ5NDQ4IEMgMzEuNzY5NjkgMzAuMzg5MDU2IDMyLjYwNTQ3NCAyOS4zODg5ODYgMzMuMjgwMDc3IDI4LjI4MjIzMiBDIDMzLjk1NDY3OSAyNy4xNzU0NzcgMzQuNDYwNTk4IDI1Ljk3NDM0NCAzNC43ODExNDMgMjQuNzE4NDYgQyAzNS4xMDE2ODkgMjMuNDYyNTc2IDM1LjIzMzI5NiAyMi4xNjU5MDYgMzUuMTcxNjIzIDIwLjg3MTIyOCBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzUuMTcxNjIzIDIwLjg3MTIyOCBDIDM1LjAxMjE1MiAxNy41MjM1MDkgMzMuNTY4NjUzIDE0LjM2MjY4NyAzMS4xNDMwNDcgMTIuMDQ5ODc2IEMgMjguNzE3NDQxIDkuNzM3MDY2IDI1LjQ5MTUxNSA4LjQ0NTYgMjIuMTQgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzUuMTcxNjIzIDIwLjg3MTIyOCB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjQwMTEyYzIzMzBlNDBmMjg3OTMxOTZhZGQ3MjMxM2Quc2V0SWNvbihkaXZfaWNvbl9iMTkwMjY5YzMwNjQ0ZjUzOGVmN2I0ZDcyZTIyMzk5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDEyNTU5OWZhNmE0NGM3OTE2YWNkMTE3YWE1MjMxYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNGE1MzNhM2M5MDc0MzAzOGFjOTdlMGQ1MjQ5Mzg1YyA9ICQoYDxkaXYgaWQ9Imh0bWxfYjRhNTMzYTNjOTA3NDMwMzhhYzk3ZTBkNTI0OTM4NWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj5jb25zb25hbnRzOiAyNTxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMDEyNTU5OWZhNmE0NGM3OTE2YWNkMTE3YWE1MjMxYi5zZXRDb250ZW50KGh0bWxfYjRhNTMzYTNjOTA3NDMwMzhhYzk3ZTBkNTI0OTM4NWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNDAxMTJjMjMzMGU0MGYyODc5MzE5NmFkZDcyMzEzZC5iaW5kUG9wdXAocG9wdXBfMDAxMjU1OTlmYTZhNDRjNzkxNmFjZDExN2FhNTIzMWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl84Zjc1MTU2M2I0OWY0YzRlYjJkNTVhM2VmZGVmODRhZSA9IEwubWFya2VyKAogICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfM2Q0NjI2OWFiZGE5NDk4Y2I1NDU3MDRkODdmYTk2OGIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzg0ZTUyYjI3ZDhiYTQ0NTViM2UxMGI1ZjI0ZDM0MDVhID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5Ljg4NjIyMSA4LjQ0NTYgMTcuNjcwNDM2IDkuMDI5NjE0IDE1LjcwOTQ1MyAxMC4xNDA0OTcgQyAxMy43NDg0NyAxMS4yNTEzOCAxMi4xMDg0MDMgMTIuODUxNjggMTAuOTQ5NzI5IDE0Ljc4NDgxIEMgOS43OTEwNTYgMTYuNzE3OTQgOS4xNTI4NCAxOC45MTg3MjYgOS4wOTc1MjkgMjEuMTcxODI1IEMgOS4wNDIyMTkgMjMuNDI0OTI1IDkuNTcxNjc5IDI1LjY1NDM3NSAxMC42MzQxMDIgMjcuNjQyMDMgQyAxMS42OTY1MjYgMjkuNjI5Njg2IDEzLjI1NjA5NCAzMS4zMDg1MzEgMTUuMTYwMjA3IDMyLjUxNDI5OCBDIDE3LjA2NDMyIDMzLjcyMDA2NCAxOS4yNDg3OCAzNC40MTIwOTcgMjEuNDk5ODQzIDM0LjUyMjY4NSBDIDIzLjc1MDkwNyAzNC42MzMyNzMgMjUuOTkyNjc5IDM0LjE1ODY4NiAyOC4wMDU4MDkgMzMuMTQ1MzYyIEMgMzAuMDE4OTM5IDMyLjEzMjAzNyAzMS43MzU1NTMgMzAuNjE0MTQgMzIuOTg3Njg1IDI4Ljc0MDE5MSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzIuOTg3Njg1IDI4Ljc0MDE5MSBDIDM0LjMwMDEzOCAyNi43NzU5NjcgMzUuMDU0NzcgMjQuNDkxNjYzIDM1LjE3MDY4NSAyMi4xMzIxNTcgQyAzNS4yODY2IDE5Ljc3MjY1IDM0Ljc1OTUwMyAxNy40MjUzNzggMzMuNjQ1ODk4IDE1LjM0MTk3IEMgMzIuNTMyMjkyIDEzLjI1ODU2MSAzMC44NzM0NDcgMTEuNTE2MjIxIDI4Ljg0NzE5IDEwLjMwMTcyOSBDIDI2LjgyMDkzMyA5LjA4NzIzOCAyNC41MDIzNTIgOC40NDU2IDIyLjE0IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMyLjk4NzY4NSAyOC43NDAxOTEgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhmNzUxNTYzYjQ5ZjRjNGViMmQ1NWEzZWZkZWY4NGFlLnNldEljb24oZGl2X2ljb25fODRlNTJiMjdkOGJhNDQ1NWIzZTEwYjVmMjRkMzQwNWEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWEyZDA1YThjZmVlNGM0MjhlMjRhYTAyZDg0Nzg2ODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDcxNmZjOWFjZGM2NDcwY2JlMjYwYjcyNjliOTk4MTcgPSAkKGA8ZGl2IGlkPSJodG1sXzA3MTZmYzlhY2RjNjQ3MGNiZTI2MGI3MjY5Yjk5ODE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva29yZTEyODAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S29yZWFuPC9hPjxicj5jb25zb25hbnRzOiAyMTxicj52b3dlbHM6IDExPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWEyZDA1YThjZmVlNGM0MjhlMjRhYTAyZDg0Nzg2ODEuc2V0Q29udGVudChodG1sXzA3MTZmYzlhY2RjNjQ3MGNiZTI2MGI3MjY5Yjk5ODE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGY3NTE1NjNiNDlmNGM0ZWIyZDU1YTNlZmRlZjg0YWUuYmluZFBvcHVwKHBvcHVwXzVhMmQwNWE4Y2ZlZTRjNDI4ZTI0YWEwMmQ4NDc4NjgxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZjAwMjc2NmU5ZmZhNDYwZWFmN2I4Nzg0Yjk2YTRmMzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfM2Q0NjI2OWFiZGE5NDk4Y2I1NDU3MDRkODdmYTk2OGIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2ZjY2ZmYTkyYjc4NjQwY2VhN2QxZjZmOWZhYTEyOGZiID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjY5MTY0OCA4LjQ0NTYgMTkuMjUzMzU1IDguNjg2Nzg0IDE3Ljg4NDIyOCA5LjE1OTI0MSBDIDE2LjUxNTEwMSA5LjYzMTY5NyAxNS4yMzQxNTcgMTAuMzI4ODY0IDE0LjA5NDAzOSAxMS4yMjIwODkgQyAxMi45NTM5MiAxMi4xMTUzMTUgMTEuOTcwNDYyIDEzLjE5MjE5NCAxMS4xODQwODEgMTQuNDA4NDcxIEMgMTAuMzk3NyAxNS42MjQ3NDcgOS44MTkzMTggMTYuOTYzNTI3IDkuNDcyNzA1IDE4LjM2OTc5MiBDIDkuMTI2MDkxIDE5Ljc3NjA1OCA5LjAxNjA2MSAyMS4yMzAyNzYgOS4xNDcxMzUgMjIuNjcyNjg1IEMgOS4yNzgyMDkgMjQuMTE1MDkzIDkuNjQ4NTY4IDI1LjUyNTY1OCAxMC4yNDI5OSAyNi44NDY0MSBDIDEwLjgzNzQxMiAyOC4xNjcxNjIgMTEuNjQ3NjQyIDI5LjM3OTc1NiAxMi42NDAzODIgMzAuNDM0MzYxIEMgMTMuNjMzMTIyIDMxLjQ4ODk2NSAxNC43OTQ1ODQgMzIuMzcwOTMxIDE2LjA3NzAzNiAzMy4wNDQwMTQgQyAxNy4zNTk0ODggMzMuNzE3MDk2IDE4Ljc0NTExNyAzNC4xNzE5NDcgMjAuMTc2OTggMzQuMzg5ODcyIEMgMjEuNjA4ODQzIDM0LjYwNzc5OCAyMy4wNjcwNTIgMzQuNTg1NzcxIDI0LjQ5MTY4IDM0LjMyNDY5OSBDIDI1LjkxNjMwNyAzNC4wNjM2MjYgMjcuMjg3NTY3IDMzLjU2NzEzMyAyOC41NDkxMDUgMzIuODU1NjIzIEMgMjkuODEwNjQyIDMyLjE0NDExNCAzMC45NDQ5MzYgMzEuMjI3NDcgMzEuOTA1MzcxIDMwLjE0MzM2MyBDIDMyLjg2NTgwNiAyOS4wNTkyNTYgMzMuNjM5MDQyIDI3LjgyMjc0MyAzNC4xOTMzMDIgMjYuNDg0NjQxIEMgMzQuNzQ3NTYyIDI1LjE0NjUzOCAzNS4wNzUxNDggMjMuNzI1NDMxIDM1LjE2MjU5OCAyMi4yNzk3MjEgQyAzNS4yNTAwNDcgMjAuODM0MDEyIDM1LjA5NjE0NSAxOS4zODM3OCAzNC43MDcyMTYgMTcuOTg4NjI1IEMgMzQuMzE4Mjg3IDE2LjU5MzQ3IDMzLjY5OTczNCAxNS4yNzI3NyAzMi44NzY5NzYgMTQuMDgwNzk5IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi44NzY5NzYgMTQuMDgwNzk5IEMgMzEuNjc3MTk3IDEyLjM0MjYyIDMwLjA3MzA4NyAxMC45MjE1MDMgMjguMjAyOTY0IDkuOTM5OTg2IEMgMjYuMzMyODQgOC45NTg0NyAyNC4yNTIwNDUgOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi44NzY5NzYgMTQuMDgwNzk5IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mMDAyNzY2ZTlmZmE0NjBlYWY3Yjg3ODRiOTZhNGYzOS5zZXRJY29uKGRpdl9pY29uX2ZjY2ZmYTkyYjc4NjQwY2VhN2QxZjZmOWZhYTEyOGZiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5OWVhYzlhZDNiNDQ4ZWFhYjkzMWU5YmYxNmZiYmU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjMzY1Nzc1MjlmYzQ5OTA4ODY4YzY3YjMyNDZhNGIyID0gJChgPGRpdiBpZD0iaHRtbF82YzM2NTc3NTI5ZmM0OTkwODg2OGM2N2IzMjQ2YTRiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rpd2kxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpd2k8L2E+PGJyPmNvbnNvbmFudHM6IDIyPGJyPnZvd2VsczogNDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5OWVhYzlhZDNiNDQ4ZWFhYjkzMWU5YmYxNmZiYmU3LnNldENvbnRlbnQoaHRtbF82YzM2NTc3NTI5ZmM0OTkwODg2OGM2N2IzMjQ2YTRiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YwMDI3NjZlOWZmYTQ2MGVhZjdiODc4NGI5NmE0ZjM5LmJpbmRQb3B1cChwb3B1cF81OTllYWM5YWQzYjQ0OGVhYWI5MzFlOWJmMTZmYmJlNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzA0MTk1MWJlZDQ5MjQyNzg5NDZmMGQ1ZDgxZjc3NGI0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs2LjkyMDQ4LCAtOS45NjEyOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF8zZDQ2MjY5YWJkYTk0OThjYjU0NTcwNGQ4N2ZhOTY4Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYmRhZjhhZTA4NDU1NDhlMmI3YzgzZGNkNzQ3ZjI1MjggPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuOTE4MTIzIDguNDQ1NiAxNy43MzI2NDUgOS4wMTMxOTggMTUuNzkxNTYzIDEwLjA5NDM3MyBDIDEzLjg1MDQ4MiAxMS4xNzU1NDggMTIuMjE3Mzk0IDEyLjczNDg3OCAxMS4wNDc3MjcgMTQuNjIzOTU2IEMgOS44NzgwNiAxNi41MTMwMzQgOS4yMTAxMzUgMTguNjY5OTY3IDkuMTA3NTIxIDIwLjg4OTQ3MyBDIDkuMDA0OTA3IDIzLjEwODk3OSA5LjQ3MDk2NiAyNS4zMTgzMzkgMTAuNDYxMzQyIDI3LjMwNzI4MiBDIDExLjQ1MTcxOCAyOS4yOTYyMjQgMTIuOTMzOTYyIDMwLjk5OTU4NCAxNC43NjcwMDUgMzIuMjU1MjQ4IEMgMTYuNjAwMDQ4IDMzLjUxMDkxMSAxOC43MjM4MzMgMzQuMjc3NzM4IDIwLjkzNjIzMSAzNC40ODI3NDYgQyAyMy4xNDg2MyAzNC42ODc3NTUgMjUuMzc3MTU3IDM0LjMyNDIyOSAyNy40MDk3MTYgMzMuNDI2NzY2IEMgMjkuNDQyMjc2IDMyLjUyOTMwMyAzMS4yMTIyNzMgMzEuMTI3MzA3IDMyLjU1MTI1MyAyOS4zNTQyMTEgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMyLjU1MTI1MyAyOS4zNTQyMTEgQyAzNC4wMTM0MjUgMjcuNDE3OTgyIDM0LjkwNjg3NiAyNS4xMTE3MTcgMzUuMTMwNzQ3IDIyLjY5NTc2OCBDIDM1LjM1NDYxNyAyMC4yNzk4MTkgMzQuOTAwMTUyIDE3Ljg0ODY1MSAzMy44MTg2NTcgMTUuNjc2NzE3IEMgMzIuNzM3MTYyIDEzLjUwNDc4MyAzMS4wNzA5MjQgMTEuNjc3MDA4IDI5LjAwODA0MyAxMC4zOTk3MjYgQyAyNi45NDUxNjEgOS4xMjI0NDQgMjQuNTY2Mjk3IDguNDQ1NiAyMi4xMzk5OTggOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzIuNTUxMjUzIDI5LjM1NDIxMSB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDQxOTUxYmVkNDkyNDI3ODk0NmYwZDVkODFmNzc0YjQuc2V0SWNvbihkaXZfaWNvbl9iZGFmOGFlMDg0NTU0OGUyYjdjODNkY2Q3NDdmMjUyOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYzQ1OTA3NGVmMTc0YzgzOTI2ZmRkMzhlYjgxYjUzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZWVkZGRlMWFiODU0ZDQ5YjdmY2FjY2I0NDNjMTJhZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZmVlZGRkZTFhYjg1NGQ0OWI3ZmNhY2NiNDQzYzEyYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9saWJlMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MaWJlcmlhIEtwZWxsZTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiAxMjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjNDU5MDc0ZWYxNzRjODM5MjZmZGQzOGViODFiNTNhLnNldENvbnRlbnQoaHRtbF9mZWVkZGRlMWFiODU0ZDQ5YjdmY2FjY2I0NDNjMTJhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA0MTk1MWJlZDQ5MjQyNzg5NDZmMGQ1ZDgxZjc3NGI0LmJpbmRQb3B1cChwb3B1cF9jYzQ1OTA3NGVmMTc0YzgzOTI2ZmRkMzhlYjgxYjUzYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzEyZGM5MDEyNjZjMTRhNTI5NThlZmVkMzUwMDIwNjhmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxMi44MTE0LCA3NS4yNjUxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzNkNDYyNjlhYmRhOTQ5OGNiNTQ1NzA0ZDg3ZmE5NjhiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl8wOWRmZmFmZjNjYjk0MWYxYjk4ZjYxNGJhMWZkZTgyNyA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAxOS45MTI2MDYgOC40NDU2IDE3LjcyMTg4MyA5LjAxNjAyIDE1Ljc3NzMzNyAxMC4xMDIzMDkgQyAxMy44MzI3OTEgMTEuMTg4NTk3IDEyLjE5ODQ0OSAxMi43NTQ5ODYgMTEuMDMwNjExIDE0LjY1MTY3NyBDIDkuODYyNzcyIDE2LjU0ODM2OCA5LjE5OTg4OSAxOC43MTI5MDcgOS4xMDUzNTUgMjAuOTM4Mjk0IEMgOS4wMTA4MjIgMjMuMTYzNjgxIDkuNDg3NzUxIDI1LjM3NjYzOSAxMC40OTA1MzIgMjcuMzY1NTM3IEMgMTEuNDkzMzEyIDI5LjM1NDQzNSAxMi45ODg5MjcgMzEuMDUzNzgzIDE0LjgzNDM0NCAzMi4zMDEwNjcgQyAxNi42Nzk3NjEgMzMuNTQ4MzUyIDE4LjgxNDIxNyAzNC4zMDI1MDQgMjEuMDMzNTg2IDM0LjQ5MTQgQyAyMy4yNTI5NTYgMzQuNjgwMjk3IDI1LjQ4NDE2MiAzNC4yOTc3MTggMjcuNTEzODI3IDMzLjM4MDI1MiBDIDI5LjU0MzQ5MSAzMi40NjI3ODYgMzEuMzA0Nzg0IDMxLjA0MDY0MiAzMi42MjkyNjcgMjkuMjQ5ODI0IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi42MjkyNjcgMjkuMjQ5ODI0IEMgMzQuMDY1NDQ1IDI3LjMwNzk4MyAzNC45MzQ1NzMgMjUuMDA0OTQ3IDM1LjEzOTQgMjIuNTk4NDE0IEMgMzUuMzQ0MjI3IDIwLjE5MTg4MSAzNC44NzY4MTYgMTcuNzc1MDg5IDMzLjc4OTQ2OSAxNS42MTg0NjQgQyAzMi43MDIxMjIgMTMuNDYxODM5IDMxLjAzNjk2NiAxMS42NDg5MzcgMjguOTgwMzI1IDEwLjM4MjYxMiBDIDI2LjkyMzY4MyA5LjExNjI4NiAyNC41NTUyMzYgOC40NDU2IDIyLjE0MDAwMiA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi42MjkyNjcgMjkuMjQ5ODI0IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xMmRjOTAxMjY2YzE0YTUyOTU4ZWZlZDM1MDAyMDY4Zi5zZXRJY29uKGRpdl9pY29uXzA5ZGZmYWZmM2NiOTQxZjFiOThmNjE0YmExZmRlODI3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVkMzhkZmMwMWEwZDQwZmI5NTc0MTZiNWVjMmVhOGY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU2ZmFlMWFkNzIyMTRmZjc4NWUzNTFiMmQ0M2ZkY2MwID0gJChgPGRpdiBpZD0iaHRtbF81NmZhZTFhZDcyMjE0ZmY3ODVlMzUxYjJkNDNmZGNjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3R1bHUxMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1bHU8L2E+PGJyPmNvbnNvbmFudHM6IDI0PGJyPnZvd2VsczogMTM8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZDM4ZGZjMDFhMGQ0MGZiOTU3NDE2YjVlYzJlYThmOC5zZXRDb250ZW50KGh0bWxfNTZmYWUxYWQ3MjIxNGZmNzg1ZTM1MWIyZDQzZmRjYzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMmRjOTAxMjY2YzE0YTUyOTU4ZWZlZDM1MDAyMDY4Zi5iaW5kUG9wdXAocG9wdXBfNWQzOGRmYzAxYTBkNDBmYjk1NzQxNmI1ZWMyZWE4ZjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lMjIxNzU1ZTViZWE0ZTE3OTMzZjRmZjU2ZmYzZmVjMiA9IEwubWFya2VyKAogICAgICAgICAgICBbLTM4LjczOTIsIC03MS4yNzddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfM2Q0NjI2OWFiZGE5NDk4Y2I1NDU3MDRkODdmYTk2OGIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzVhN2Q3YmNjZTYyYTRhMDY5YjIyZjFjMWZkN2IxMmI3ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjgyMzgzOSA4LjQ0NTYgMTkuNTE1MjIzIDguNjQ0NzY4IDE4LjI1ODY1NiA5LjAzNjMzIEMgMTcuMDAyMDg5IDkuNDI3ODkyIDE1LjgxMTk4IDEwLjAwNzM1OCAxNC43Mjg4IDEwLjc1NTAyMyBDIDEzLjY0NTYyIDExLjUwMjY4OCAxMi42ODE3OTEgMTIuNDA5OTc5IDExLjg3MDA4OSAxMy40NDYwMzkgQyAxMS4wNTgzODggMTQuNDgyMSAxMC40MDgxMjEgMTUuNjM1MDUxIDkuOTQxNDA0IDE2Ljg2NTY4MyBDIDkuNDc0Njg3IDE4LjA5NjMxNSA5LjE5Njg3IDE5LjM5MDUxOCA5LjExNzQwMiAyMC43MDQyNzggQyA5LjAzNzkzNSAyMi4wMTgwMzggOS4xNTc3MjcgMjMuMzM2MjkyIDkuNDcyNzA1IDI0LjYxNDIwOCBDIDkuNzg3NjgzIDI1Ljg5MjEyNCAxMC4yOTQyMzUgMjcuMTE1MDUgMTAuOTc1MTM1IDI4LjI0MTM5NiBDIDExLjY1NjAzNiAyOS4zNjc3NDMgMTIuNTAzNDc2IDMwLjM4NDU5NSAxMy40ODg2MzcgMzEuMjU3MzcxIEMgMTQuNDczNzk4IDMyLjEzMDE0NyAxNS41ODUzODQgMzIuODQ4ODQxIDE2Ljc4NTU5MSAzMy4zODkwMSBDIDE3Ljk4NTc5OCAzMy45MjkxOCAxOS4yNjA4NjYgMzQuMjg0NjMxIDIwLjU2NzQzMSAzNC40NDMyNzcgQyAyMS44NzM5OTYgMzQuNjAxOTIzIDIzLjE5NzA3OCAzNC41NjE5NDMgMjQuNDkxNjggMzQuMzI0Njk5IEMgMjUuNzg2MjgzIDM0LjA4NzQ1NCAyNy4wMzc1NjIgMzMuNjU1NjY0IDI4LjIwMjk2NSAzMy4wNDQwMTMgQyAyOS4zNjgzNjggMzIuNDMyMzYyIDMwLjQzNDUzMiAzMS42NDc4NjQgMzEuMzY1MTk5IDMwLjcxNzE5NyBDIDMyLjI5NTg2NSAyOS43ODY1MzEgMzMuMDgwMzYzIDI4LjcyMDM2NyAzMy42OTIwMTQgMjcuNTU0OTY0IEMgMzQuMzAzNjY1IDI2LjM4OTU2IDM0LjczNTQ1NCAyNS4xMzgyODEgMzQuOTcyNjk5IDIzLjg0MzY3OCBDIDM1LjIwOTk0NCAyMi41NDkwNzYgMzUuMjQ5OTIzIDIxLjIyNTk5NCAzNS4wOTEyNzcgMTkuOTE5NDI5IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS4wOTEyNzcgMTkuOTE5NDI5IEMgMzQuNzA3MTM4IDE2Ljc1NTc2IDMzLjE3Njc5NiAxMy44Mzk5MzcgMzAuNzkxMzYzIDExLjcyNjYyOSBDIDI4LjQwNTkzIDkuNjEzMzIgMjUuMzI2OTA0IDguNDQ1NiAyMi4xMzk5OTkgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzUuMDkxMjc3IDE5LjkxOTQyOSB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTIyMTc1NWU1YmVhNGUxNzkzM2Y0ZmY1NmZmM2ZlYzIuc2V0SWNvbihkaXZfaWNvbl81YTdkN2JjY2U2MmE0YTA2OWIyMmYxYzFmZDdiMTJiNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZmI2MGM2YjlmNDY0NTRiOTRiN2M3YzVjMTk2MjI5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZDhiNGViYTU2NjM0MzQ2ODBkNjdlYTJjNzMzYjM0NyA9ICQoYDxkaXYgaWQ9Imh0bWxfNWQ4YjRlYmE1NjYzNDM0NjgwZDY3ZWEyYzczM2IzNDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXB1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXB1ZHVuZ3VuPC9hPjxicj5jb25zb25hbnRzOiAyMDxicj52b3dlbHM6IDY8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZmI2MGM2YjlmNDY0NTRiOTRiN2M3YzVjMTk2MjI5Ny5zZXRDb250ZW50KGh0bWxfNWQ4YjRlYmE1NjYzNDM0NjgwZDY3ZWEyYzczM2IzNDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMjIxNzU1ZTViZWE0ZTE3OTMzZjRmZjU2ZmYzZmVjMi5iaW5kUG9wdXAocG9wdXBfNWZiNjBjNmI5ZjQ2NDU0Yjk0YjdjN2M1YzE5NjIyOTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl85YWQ4YmVlMTE5YjM0Mzc1Yjk0Y2ZlMzQ5NzQ5OWVmNSA9IEwubWFya2VyKAogICAgICAgICAgICBbMzQuOTQwMywgLTk4LjkwNDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfM2Q0NjI2OWFiZGE5NDk4Y2I1NDU3MDRkODdmYTk2OGIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2EzODFmNDE4ZjAwNTQ1ZGNiMjFiNWNlZWY2MWYzMzczID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjM0NDYyMyA4LjQ0NTYgMTguNTY4NDIzIDguODE2MjA1IDE2LjkyMjg0OCA5LjUzNDE2MiBDIDE1LjI3NzI3NCAxMC4yNTIxMTkgMTMuNzk3NDc4IDExLjMwMjA5IDEyLjU3NjMxMiAxMi42MTgxOTUgQyAxMS4zNTUxNDUgMTMuOTM0Mjk5IDEwLjQxODY5NSAxNS40ODg0MjIgOS44MjU3MiAxNy4xODMwNDggQyA5LjIzMjc0NSAxOC44Nzc2NzQgOC45OTU5MTIgMjAuNjc2NjAzIDkuMTMwMDggMjIuNDY2OTYgQyA5LjI2NDI0OSAyNC4yNTczMTYgOS43NjY1NTQgMjYuMDAwODU1IDEwLjYwNTQ3OCAyNy41ODgxNzUgQyAxMS40NDQ0MDEgMjkuMTc1NDk1IDEyLjYwMjAyMiAzMC41NzI2ODggMTQuMDA1NzA0IDMxLjY5MjA4NyBDIDE1LjQwOTM4NiAzMi44MTE0ODYgMTcuMDI5MTQ0IDMzLjYyOTE3OCAxOC43NjMzNDUgMzQuMDkzODU1IEMgMjAuNDk3NTQ2IDM0LjU1ODUzMyAyMi4zMDkxNDMgMzQuNjYwMjY5IDI0LjA4NDQ2NyAzNC4zOTI2ODIgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDI0LjA4NDQ2NyAzNC4zOTI2ODIgQyAyNy4zMzgwMzEgMzMuOTAyMjg2IDMwLjI4ODYxMSAzMi4xOTg3NjcgMzIuMzQwMDg4IDI5LjYyNjI5NiBDIDM0LjM5MTU2NCAyNy4wNTM4MjQgMzUuMzk1ODA2IDIzLjc5ODE1MiAzNS4xNDk5MTkgMjAuNTE3MDM5IEMgMzQuOTA0MDMzIDE3LjIzNTkyNSAzMy40MjU3NzUgMTQuMTY2MjkyIDMxLjAxMzgwNCAxMS45MjgzMSBDIDI4LjYwMTgzMyA5LjY5MDMyOSAyNS40MzAzMTEgOC40NDU1OTkgMjIuMTM5OTk4IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDI0LjA4NDQ2NyAzNC4zOTI2ODIgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzlhZDhiZWUxMTliMzQzNzViOTRjZmUzNDk3NDk5ZWY1LnNldEljb24oZGl2X2ljb25fYTM4MWY0MThmMDA1NDVkY2IyMWI1Y2VlZjYxZjMzNzMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmFlYzg4MTliOTc2NDhlZWFmNjc5YzM5NGJjM2UzZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGEzOTk2MDk1ZTg2NDVmMWJlNTAwMWJmNjhkOWI0MDkgPSAkKGA8ZGl2IGlkPSJodG1sX2RhMzk5NjA5NWU4NjQ1ZjFiZTUwMDFiZjY4ZDliNDA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2lvdzEyNjYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2lvd2E8L2E+PGJyPmNvbnNvbmFudHM6IDIyPGJyPnZvd2VsczogMjA8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYWVjODgxOWI5NzY0OGVlYWY2NzljMzk0YmMzZTNlZS5zZXRDb250ZW50KGh0bWxfZGEzOTk2MDk1ZTg2NDVmMWJlNTAwMWJmNjhkOWI0MDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85YWQ4YmVlMTE5YjM0Mzc1Yjk0Y2ZlMzQ5NzQ5OWVmNS5iaW5kUG9wdXAocG9wdXBfZmFlYzg4MTliOTc2NDhlZWFmNjc5YzM5NGJjM2UzZWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl85MGQwMTVjYjkyNGM0Mzg3OGFmZTY5NjY5ZjM3MWQxNiA9IEwubWFya2VyKAogICAgICAgICAgICBbMzUuMCwgMTM1LjBdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfM2Q0NjI2OWFiZGE5NDk4Y2I1NDU3MDRkODdmYTk2OGIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzdjNGI5NDlhZWUzNzRhNDNiODE0MjgxYjRhZTE1MWFmID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjU1OTk3NSA4LjQ0NTYgMTcuMDM3MDIxIDkuMjEwOTMgMTQuODkxODA5IDEwLjY0NDMxNSBDIDEyLjc0NjU5NiAxMi4wNzc3IDExLjA3NDAzMSAxNC4xMTU3MjYgMTAuMDg2Njk4IDE2LjQ5OTM1OSBDIDkuMDk5MzY1IDE4Ljg4Mjk5MSA4Ljg0MDk0NSAyMS41MDY3NzYgOS4zNDQyODMgMjQuMDM3MjI2IEMgOS44NDc2MjEgMjYuNTY3Njc3IDExLjA5MDQ0OSAyOC44OTI4NDUgMTIuOTE0ODAyIDMwLjcxNzE5OCBDIDE0LjczOTE1NSAzMi41NDE1NTEgMTcuMDY0MzIzIDMzLjc4NDM3OSAxOS41OTQ3NzQgMzQuMjg3NzE3IEMgMjIuMTI1MjI0IDM0Ljc5MTA1NSAyNC43NDkwMDkgMzQuNTMyNjM1IDI3LjEzMjY0MSAzMy41NDUzMDIgQyAyOS41MTYyNzQgMzIuNTU3OTY5IDMxLjU1NDMgMzAuODg1NDA0IDMyLjk4NzY4NSAyOC43NDAxOTEgQyAzNC40MjEwNyAyNi41OTQ5NzkgMzUuMTg2NCAyNC4wNzIwMjUgMzUuMTg2NCAyMS40OTIgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDM1LjE4NjQgMjEuNDkyIEMgMzUuMTg2NCAxOC4wMzMyMDcgMzMuODEwOTM0IDE0LjcxMjUzOCAzMS4zNjUxOTggMTIuMjY2ODAyIEMgMjguOTE5NDYyIDkuODIxMDY2IDI1LjU5ODc5MyA4LjQ0NTYgMjIuMTQgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzUuMTg2NCAyMS40OTIgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzkwZDAxNWNiOTI0YzQzODc4YWZlNjk2NjlmMzcxZDE2LnNldEljb24oZGl2X2ljb25fN2M0Yjk0OWFlZTM3NGE0M2I4MTQyODFiNGFlMTUxYWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGQyY2NhY2IyOTE3NGU4ODgwY2QxZDBkMjJkYTUxMmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjBhYTM3OTU3M2NiNDFiMTgyNWQwMDM5NGVlM2ZlNzggPSAkKGA8ZGl2IGlkPSJodG1sXzIwYWEzNzk1NzNjYjQxYjE4MjVkMDAzOTRlZTNmZTc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDE2NDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmFwYW5lc2U8L2E+PGJyPmNvbnNvbmFudHM6IDE1PGJyPnZvd2VsczogNTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRkMmNjYWNiMjkxNzRlODg4MGNkMWQwZDIyZGE1MTJlLnNldENvbnRlbnQoaHRtbF8yMGFhMzc5NTczY2I0MWIxODI1ZDAwMzk0ZWUzZmU3OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkwZDAxNWNiOTI0YzQzODc4YWZlNjk2NjlmMzcxZDE2LmJpbmRQb3B1cChwb3B1cF80ZDJjY2FjYjI5MTc0ZTg4ODBjZDFkMGQyMmRhNTEyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzhkODY2NDFmODljMDQzYWZhMGI0YTFmZWMyYWZjNTQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzNkNDYyNjlhYmRhOTQ5OGNiNTQ1NzA0ZDg3ZmE5NjhiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl83NGU5YzYxOGFkOTg0NDI5OTk0NzhhMGJlODk0MTU5NiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC4wMDk1NyA4LjQ0NTYgMTcuOTExMjE3IDguOTY3NDM3IDE2LjAyODk1NiA5Ljk2NTM0OCBDIDE0LjE0NjY5NiAxMC45NjMyNiAxMi41MzcyMDggMTIuNDA3MTk1IDExLjM0MTYzOSAxNC4xNzA1MjkgQyAxMC4xNDYwNjkgMTUuOTMzODYyIDkuNDAwNDE5IDE3Ljk2MzQ5NCA5LjE3MDA3OSAyMC4wODE0MzUgQyA4LjkzOTczOSAyMi4xOTkzNzYgOS4yMzE2NDUgMjQuMzQxODUgMTAuMDIwMTk4IDI2LjMyMDk2OSBDIDEwLjgwODc1MSAyOC4zMDAwODkgMTIuMDcwMjA2IDMwLjA1NjI1OSAxMy42OTM5MzkgMzEuNDM1NDcgQyAxNS4zMTc2NzEgMzIuODE0NjgxIDE3LjI1NDc4NyAzMy43NzU0MDIgMTkuMzM1NDA4IDM0LjIzMzM4MiBDIDIxLjQxNjAzIDM0LjY5MTM2MiAyMy41Nzc1MDQgMzQuNjMyODA5IDI1LjYzMDI4IDM0LjA2Mjg1OSBDIDI3LjY4MzA1NiAzMy40OTI5MDkgMjkuNTY1MzE4IDMyLjQyODcyNCAzMS4xMTIwMDEgMzAuOTYzNjI5IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMS4xMTIwMDEgMzAuOTYzNjI5IEMgMzMuMDA2OTI3IDI5LjE2ODY2IDM0LjMyMDI4NiAyNi44NDU2NzYgMzQuODgxMzgyIDI0LjI5NjU5MiBDIDM1LjQ0MjQ3OCAyMS43NDc1MDkgMzUuMjI1OTAyIDE5LjA4Nzc2IDM0LjI1OTgwMyAxNi42NjMwMzIgQyAzMy4yOTM3MDMgMTQuMjM4MzAzIDMxLjYyMTgyOSAxMi4xNTgzOTggMjkuNDYxNDczIDEwLjY5MzY0IEMgMjcuMzAxMTE3IDkuMjI4ODgxIDI0Ljc1MDEwOSA4LjQ0NTYgMjIuMTQwMDAyIDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMxLjExMjAwMSAzMC45NjM2MjkgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhkODY2NDFmODljMDQzYWZhMGI0YTFmZWMyYWZjNTQzLnNldEljb24oZGl2X2ljb25fNzRlOWM2MThhZDk4NDQyOTk5NDc4YTBiZTg5NDE1OTYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzM3ZWI4YmRmMTU4NDQzYmI1ODc2NTJjMWMxYjg2NzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWJhMGVlZGY1YTgwNGQwMjliMjI3OGYwZTUxYjJmMmEgPSAkKGA8ZGl2IGlkPSJodG1sXzFiYTBlZWRmNWE4MDRkMDI5YjIyNzhmMGU1MWIyZjJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveW9ydTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WW9ydWJhPC9hPjxicj5jb25zb25hbnRzOiAxODxicj52b3dlbHM6IDExPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzM3ZWI4YmRmMTU4NDQzYmI1ODc2NTJjMWMxYjg2NzIuc2V0Q29udGVudChodG1sXzFiYTBlZWRmNWE4MDRkMDI5YjIyNzhmMGU1MWIyZjJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGQ4NjY0MWY4OWMwNDNhZmEwYjRhMWZlYzJhZmM1NDMuYmluZFBvcHVwKHBvcHVwX2MzN2ViOGJkZjE1ODQ0M2JiNTg3NjUyYzFjMWI4NjcyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjkwNjUzNDI1OTFjNDRkN2IyMmFlMTg5OTk0Mjk0NTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfM2Q0NjI2OWFiZGE5NDk4Y2I1NDU3MDRkODdmYTk2OGIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzg4YTQzN2QwZGU2ZTQ0MGI5NmE1YTQ3ZWJjYjY2MGYyID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjgwMzcyMSA4LjQ0NTYgMTcuNTA5Nzc2IDkuMDczMTUyIDE1LjQ5ODg0MiAxMC4yNjI0MTUgQyAxMy40ODc5MDggMTEuNDUxNjc4IDExLjgzMjg2MyAxMy4xNTk1NTIgMTAuNzA3MzUyIDE1LjIwNjg0OSBDIDkuNTgxODQxIDE3LjI1NDE0NiA5LjAyNjY1MyAxOS41NjY2NzEgOS4xMDAwMzggMjEuOTAxNzk4IEMgOS4xNzM0MjIgMjQuMjM2OTI0IDkuODcyNzE5IDI2LjUxMDAyNSAxMS4xMjQ1NiAyOC40ODI2MTEgQyAxMi4zNzY0MDEgMzAuNDU1MTk3IDE0LjEzNTQxOSAzMi4wNTU3NzkgMTYuMjE3MDU5IDMzLjExNjQyOCBDIDE4LjI5ODY5OSAzNC4xNzcwNzYgMjAuNjI3NTIyIDM0LjY1OTM1MiAyMi45NTkxOTEgMzQuNTEyNjU2IEMgMjUuMjkwODYgMzQuMzY1OTYgMjcuNTQwODc0IDMzLjU5NTYwNyAyOS40NzMxNjUgMzIuMjgyNDI0IEMgMzEuNDA1NDU2IDMwLjk2OTI0IDMyLjk0OTk5NyAyOS4xNjA4MTUgMzMuOTQ0NzM2IDI3LjA0Njg4NiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzMuOTQ0NzM2IDI3LjA0Njg4NiBDIDM0Ljg4MDMzNyAyNS4wNTg2MzIgMzUuMjk4NjMxIDIyLjg2NTg1OSAzNS4xNjA2NTYgMjAuNjcyODA5IEMgMzUuMDIyNjgxIDE4LjQ3OTc1OSAzNC4zMzI4NTggMTYuMzU2NzAzIDMzLjE1NTQ0IDE0LjUwMTM4OSBDIDMxLjk3ODAyMSAxMi42NDYwNzUgMzAuMzUwNzM1IDExLjExNzk1MSAyOC40MjUxNTEgMTAuMDU5MzUyIEMgMjYuNDk5NTY3IDkuMDAwNzU0IDI0LjMzNzM4NiA4LjQ0NTYgMjIuMTQgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzMuOTQ0NzM2IDI3LjA0Njg4NiB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjkwNjUzNDI1OTFjNDRkN2IyMmFlMTg5OTk0Mjk0NTcuc2V0SWNvbihkaXZfaWNvbl84OGE0MzdkMGRlNmU0NDBiOTZhNWE0N2ViY2I2NjBmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZTA1ZGU3MzNlOTQ0N2Q1OGRiZTJlNzU5NzMyYjY3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOTZhMmJjY2U1ZGU0MTRiYWRlN2VkMTEwODQxYjkxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYjk2YTJiY2NlNWRlNDE0YmFkZTdlZDExMDg0MWI5MTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9maW5uMTMxOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GaW5uaXNoPC9hPjxicj5jb25zb25hbnRzOiAxNzxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZTA1ZGU3MzNlOTQ0N2Q1OGRiZTJlNzU5NzMyYjY3OS5zZXRDb250ZW50KGh0bWxfYjk2YTJiY2NlNWRlNDE0YmFkZTdlZDExMDg0MWI5MTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yOTA2NTM0MjU5MWM0NGQ3YjIyYWUxODk5OTQyOTQ1Ny5iaW5kUG9wdXAocG9wdXBfZWUwNWRlNzMzZTk0NDdkNThkYmUyZTc1OTczMmI2NzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8xMDFiMjY4ZjVlNWM0ODY5YjU0NGY4YWRmYmQ4NzMwYiA9IEwubWFya2VyKAogICAgICAgICAgICBbMTkuNjI5NywgLTE1NS40M10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF8zZDQ2MjY5YWJkYTk0OThjYjU0NTcwNGQ4N2ZhOTY4Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMDNjNDQ2Nzk1MjFlNGY0MThhMTRkYzBlZjlhNWE2YTMgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuMDI3OTU0IDguNDQ1NiAxNy45NDcxNTkgOC45NTg0NyAxNi4wNzcwMzUgOS45Mzk5ODcgQyAxNC4yMDY5MTIgMTAuOTIxNTAzIDEyLjYwMjgwMiAxMi4zNDI2MjEgMTEuNDAzMDIzIDE0LjA4MDggQyAxMC4yMDMyNDQgMTUuODE4OTggOS40NDMzMDIgMTcuODIyNzg0IDkuMTg4NzIzIDE5LjkxOTQzMSBDIDguOTM0MTQ0IDIyLjAxNjA3OCA5LjE5MjQ2MyAyNC4xNDM1MjEgOS45NDE0MDQgMjYuMTE4MzE4IEMgMTAuNjkwMzQ2IDI4LjA5MzExNSAxMS45MDc3NDggMjkuODU2ODI2IDEzLjQ4ODYzNyAzMS4yNTczNzEgQyAxNS4wNjk1MjcgMzIuNjU3OTE3IDE2Ljk2NzEyIDMzLjY1Mzg1IDE5LjAxNzc5MyAzNC4xNTkyOTYgQyAyMS4wNjg0NjcgMzQuNjY0NzQxIDIzLjIxMTUzNiAzNC42NjQ3NDEgMjUuMjYyMjA5IDM0LjE1OTI5NSBDIDI3LjMxMjg4MyAzMy42NTM4NDkgMjkuMjEwNDc2IDMyLjY1NzkxNSAzMC43OTEzNjUgMzEuMjU3MzY5IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMC43OTEzNjUgMzEuMjU3MzY5IEMgMzIuNzcyNzg1IDI5LjUwMTk4NCAzNC4xNzM3OTIgMjcuMTg0NDM1IDM0LjgwNzI5NiAyNC42MTQyMDYgQyAzNS40NDA4IDIyLjA0Mzk3NyAzNS4yNzcyODggMTkuMzQwODA5IDM0LjMzODU5NSAxNi44NjU2ODEgQyAzMy4zOTk5MDIgMTQuMzkwNTUzIDMxLjcyOTc2IDEyLjI1ODc3NCAyOS41NTExOTggMTAuNzU1MDIyIEMgMjcuMzcyNjM2IDkuMjUxMjcgMjQuNzg3MTQ3IDguNDQ1NiAyMi4xMzk5OTggOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzAuNzkxMzY1IDMxLjI1NzM2OSB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTAxYjI2OGY1ZTVjNDg2OWI1NDRmOGFkZmJkODczMGIuc2V0SWNvbihkaXZfaWNvbl8wM2M0NDY3OTUyMWU0ZjQxOGExNGRjMGVmOWE1YTZhMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWI4YTg5MzE1MDA0YzdlYTg4Njg4MDJmMjliMDNkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZDRhNTljODJiNTY0NjJlYmFlOTk4MjhiM2U4NjMwYSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWQ0YTU5YzgyYjU2NDYyZWJhZTk5ODI4YjNlODYzMGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oYXdhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IYXdhaWlhbjwvYT48YnI+Y29uc29uYW50czogODxicj52b3dlbHM6IDU8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YWI4YTg5MzE1MDA0YzdlYTg4Njg4MDJmMjliMDNkZi5zZXRDb250ZW50KGh0bWxfYWQ0YTU5YzgyYjU2NDYyZWJhZTk5ODI4YjNlODYzMGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMDFiMjY4ZjVlNWM0ODY5YjU0NGY4YWRmYmQ4NzMwYi5iaW5kUG9wdXAocG9wdXBfNWFiOGE4OTMxNTAwNGM3ZWE4ODY4ODAyZjI5YjAzZGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82NGZhNzZiNDllZmQ0MjUyYmU4NWUzYzk2ZGVhODg4OCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF8zZDQ2MjY5YWJkYTk0OThjYjU0NTcwNGQ4N2ZhOTY4Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fODIzYjFlMDIwNjE5NGYyMWE5M2IwMmQ2MjVjZWVjNDkgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuOTA3OTE2IDguNDQ1NiAxNy43MTI3MzYgOS4wMTg0MjQgMTUuNzY1MjUyIDEwLjEwOTA2OCBDIDEzLjgxNzc2OCAxMS4xOTk3MTEgMTIuMTgyMzc2IDEyLjc3MjExIDExLjAxNjExNiAxNC42NzUyNzQgQyA5Ljg0OTg1NSAxNi41Nzg0MzkgOS4xOTEyOSAxOC43NDk0MzcgOS4xMDM2NTggMjAuOTc5OCBDIDkuMDE2MDI3IDIzLjIxMDE2MyA5LjUwMjIyNyAyNS40MjYxMzkgMTAuNTE1NTcyIDI3LjQxNDk0MSBDIDExLjUyODkxNyAyOS40MDM3NDIgMTMuMDM1ODk4IDMxLjA5OTYwNSAxNC44OTE4MDcgMzIuMzM5Njg0IEMgMTYuNzQ3NzE3IDMzLjU3OTc2NCAxOC44OTExODcgMzQuMzIzMDU1IDIxLjExNjM5IDM0LjQ5ODE4MiBDIDIzLjM0MTU5MyAzNC42NzMzMSAyNS41NzQ5NDkgMzQuMjc0NDgzIDI3LjYwMjAwMSAzMy4zNCBDIDI5LjYyOTA1MyAzMi40MDU1MTYgMzEuMzgyNzcyIDMwLjk2NjI3NyAzMi42OTQ3NTggMjkuMTYwNDgzIEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi42OTQ3NTggMjkuMTYwNDgzIEMgMzQuMTA4ODcgMjcuMjE0MTI2IDM0Ljk1NzQyMyAyNC45MTQwMjQgMzUuMTQ2MTgyIDIyLjUxNTYxMSBDIDM1LjMzNDk0MiAyMC4xMTcxOTggMzQuODU2NjUyIDE3LjcxMjY3IDMzLjc2NDQyOSAxNS41NjkwNiBDIDMyLjY3MjIwNSAxMy40MjU0NSAzMS4wMDgwMzQgMTEuNjI1MTU5IDI4Ljk1NjcyNyAxMC4zNjgxMTcgQyAyNi45MDU0MjEgOS4xMTEwNzQgMjQuNTQ1ODMyIDguNDQ1NiAyMi4xNDAwMDIgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzIuNjk0NzU4IDI5LjE2MDQ4MyB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjRmYTc2YjQ5ZWZkNDI1MmJlODVlM2M5NmRlYTg4ODguc2V0SWNvbihkaXZfaWNvbl84MjNiMWUwMjA2MTk0ZjIxYTkzYjAyZDYyNWNlZWM0OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MmZkN2UyMzliMDE0NDRhYmQ3YTQxMjIwMTRhMDI1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MzJjMTI4Mzk3YmQ0YzA3YTJiYmE5MzQ2ZjBmMGNmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTMyYzEyODM5N2JkNGMwN2EyYmJhOTM0NmYwZjBjZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9odW5nMTI3NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IdW5nYXJpYW48L2E+PGJyPmNvbnNvbmFudHM6IDI2PGJyPnZvd2VsczogMTQ8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MmZkN2UyMzliMDE0NDRhYmQ3YTQxMjIwMTRhMDI1MC5zZXRDb250ZW50KGh0bWxfNTMyYzEyODM5N2JkNGMwN2EyYmJhOTM0NmYwZjBjZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NGZhNzZiNDllZmQ0MjUyYmU4NWUzYzk2ZGVhODg4OC5iaW5kUG9wdXAocG9wdXBfODJmZDdlMjM5YjAxNDQ0YWJkN2E0MTIyMDE0YTAyNTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl80NzY3N2NhYTI5OTc0YTQ3OTU2ZGVmM2VhMDdhZGEyMCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF8zZDQ2MjY5YWJkYTk0OThjYjU0NTcwNGQ4N2ZhOTY4Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fNzE0MmI0MWFhYWY2NGZjNGJjYTczZWFhMDE0MDk5OWEgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuNzMwNTQ0IDguNDQ1NiAxOS4zMzAzNTcgOC42NzQwMDQgMTcuOTkzOTY2IDkuMTIxOTE3IEMgMTYuNjU3NTc1IDkuNTY5ODMgMTUuNDAyNTU4IDEwLjIzMTM2MSAxNC4yNzc3ODcgMTEuMDgwNzQ4IEMgMTMuMTUzMDE3IDExLjkzMDEzNSAxMi4xNzMyODggMTIuOTU2MjA3IDExLjM3Njc1MyAxNC4xMTkwMDQgQyAxMC41ODAyMTggMTUuMjgxODAyIDkuOTc3MzU0IDE2LjU2NjAzMiA5LjU5MTYzOCAxNy45MjE2ODMgQyA5LjIwNTkyMiAxOS4yNzczMzQgOS4wNDI0MjcgMjAuNjg2NTc2IDkuMTA3NTIxIDIyLjA5NDUyOCBDIDkuMTcyNjE0IDIzLjUwMjQ4IDkuNDY1NDQgMjQuODkwNjI1IDkuOTc0NTk0IDI2LjIwNDkwNCBDIDEwLjQ4Mzc0OSAyNy41MTkxODIgMTEuMjAyNTM1IDI4Ljc0MjMwOSAxMi4xMDI5NjIgMjkuODI2NjUxIEMgMTMuMDAzMzg4IDMwLjkxMDk5NCAxNC4wNzM2MTIgMzEuODQyMjkgMTUuMjcxOTU2IDMyLjU4NDI3MyBDIDE2LjQ3MDI5OSAzMy4zMjYyNTYgMTcuNzgxMDAyIDMzLjg2OTE2NyAxOS4xNTMwMiAzNC4xOTE4NjIgQyAyMC41MjUwMzggMzQuNTE0NTU4IDIxLjk0MDMyNyAzNC42MTI3OTUgMjMuMzQzNzcgMzQuNDgyNzQ2IEMgMjQuNzQ3MjE0IDM0LjM1MjY5OCAyNi4xMjAzNTQgMzMuOTk2MDc1IDI3LjQwOTcxNiAzMy40MjY3NjYgQyAyOC42OTkwNzcgMzIuODU3NDU4IDI5Ljg4NzcwMyAzMi4wODI5NSAzMC45MjkzMDMgMzEuMTMzNDA2IEMgMzEuOTcwOTA0IDMwLjE4Mzg2MSAzMi44NTE3OCAyOS4wNzE3NjggMzMuNTM3NjI3IDI3Ljg0MDQzNiBDIDM0LjIyMzQ3NSAyNi42MDkxMDQgMzQuNzA1Mjc0IDI1LjI3NDcyNiAzNC45NjQyNiAyMy44ODkyNjkgQyAzNS4yMjMyNDcgMjIuNTAzODEyIDM1LjI1NjAxNiAyMS4wODU0OTYgMzUuMDYxMjkxIDE5LjY4OTU1NiBDIDM0Ljg2NjU2NSAxOC4yOTM2MTYgMzQuNDQ2OTA3IDE2LjkzODQxMiAzMy44MTg2NTggMTUuNjc2NzE4IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMy44MTg2NTggMTUuNjc2NzE4IEMgMzIuNzM3MTYzIDEzLjUwNDc4NCAzMS4wNzA5MjUgMTEuNjc3MDA4IDI5LjAwODA0NCAxMC4zOTk3MjcgQyAyNi45NDUxNjIgOS4xMjI0NDUgMjQuNTY2Mjk4IDguNDQ1NiAyMi4xMzk5OTkgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzMuODE4NjU4IDE1LjY3NjcxOCB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDc2NzdjYWEyOTk3NGE0Nzk1NmRlZjNlYTA3YWRhMjAuc2V0SWNvbihkaXZfaWNvbl83MTQyYjQxYWFhZjY0ZmM0YmNhNzNlYWEwMTQwOTk5YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTQyZWM4MWQyYmQ0NjhmODVhZTcwZTc1Y2Q0YjMzMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NzE5MjJhZWEyOWM0M2Q1YjI3M2JjMjkxNTQ0MGIzZSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTcxOTIyYWVhMjljNDNkNWIyNzNiYzI5MTU0NDBiM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HZW9yZ2lhbjwvYT48YnI+Y29uc29uYW50czogMjg8YnI+dm93ZWxzOiA2PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmE0MmVjODFkMmJkNDY4Zjg1YWU3MGU3NWNkNGIzMzAuc2V0Q29udGVudChodG1sXzk3MTkyMmFlYTI5YzQzZDViMjczYmMyOTE1NDQwYjNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDc2NzdjYWEyOTk3NGE0Nzk1NmRlZjNlYTA3YWRhMjAuYmluZFBvcHVwKHBvcHVwXzJhNDJlYzgxZDJiZDQ2OGY4NWFlNzBlNzVjZDRiMzMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNDFiNTljMDBiZjEzNGI3YTgyMjQwYjRmYjdkODY3NTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzExLjcwODE4MiwgMzkuNTQzNDU2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzNkNDYyNjlhYmRhOTQ5OGNiNTQ1NzA0ZDg3ZmE5NjhiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl8zYTY0OGZhZDg3Mzc0MzdmODQxODM2NDFhNTc5NzExYiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC43NTI0MDQgOC40NDU2IDE5LjM3MzY1MSA4LjY2Njk3NCAxOC4wNTU4MDEgOS4xMDEzNjQgQyAxNi43Mzc5NTEgOS41MzU3NTMgMTUuNDk3ODAxIDEwLjE3NzYyMSAxNC4zODIxNzggMTEuMDAyNzMyIEMgMTMuMjY2NTU0IDExLjgyNzg0MyAxMi4yODk2NzggMTIuODI1Njc5IDExLjQ4ODQzMiAxMy45NTg1NjQgQyAxMC42ODcxODcgMTUuMDkxNDQ5IDEwLjA3MTc4NiAxNi4zNDQ5NDQgOS42NjU0NjYgMTcuNjcxNzE3IEMgOS4yNTkxNDcgMTguOTk4NDkgOS4wNjcwODcgMjAuMzgxNjMxIDkuMDk2NTM5IDIxLjc2ODkxNSBDIDkuMTI1OTkxIDIzLjE1NjE5OCA5LjM3NjU4IDI0LjUyOTk0MiA5LjgzODg0NCAyNS44MzgyNzUgQyAxMC4zMDExMDcgMjcuMTQ2NjA4IDEwLjk2OTE1MyAyOC4zNzI4NTQgMTEuODE3NzU4IDI5LjQ3MDcxMyBDIDEyLjY2NjM2MiAzMC41Njg1NzIgMTMuNjg0NzA4IDMxLjUyNDA0OSAxNC44MzQzNDUgMzIuMzAxMDY4IEMgMTUuOTgzOTgyIDMzLjA3ODA4NyAxNy4yNTAyNTUgMzMuNjY2NzQzIDE4LjU4NTM1NCAzNC4wNDQ4MSBDIDE5LjkyMDQ1MyAzNC40MjI4NzcgMjEuMzA3MzU5IDM0LjU4NTUzNiAyMi42OTM3MDUgMzQuNTI2NjQ1IEMgMjQuMDgwMDUxIDM0LjQ2Nzc1NCAyNS40NDgxNjYgMzQuMTg4MDYzIDI2Ljc0NjM5MiAzMy42OTgxMzQgQyAyOC4wNDQ2MTkgMzMuMjA4MjA1IDI5LjI1NjQxIDMyLjUxNDI4MiAzMC4zMzYwMDkgMzEuNjQyNTY2IEMgMzEuNDE1NjA5IDMwLjc3MDg1IDMyLjM0OTI1NiAyOS43MzI0NTMgMzMuMTAxNjk4IDI4LjU2NjU4MyBDIDMzLjg1NDE0MSAyNy40MDA3MTMgMzQuNDE1Nzg3IDI2LjEyMjIzIDM0Ljc2NTQzMSAyNC43Nzk0MDcgQyAzNS4xMTUwNzUgMjMuNDM2NTg0IDM1LjI0ODI1OSAyMi4wNDY1MzkgMzUuMTU5OTU2IDIwLjY2MTc1NSBDIDM1LjA3MTY1MiAxOS4yNzY5NzEgMzQuNzYyOTg2IDE3LjkxNTEwMSAzNC4yNDU2MTIgMTYuNjI3NTY2IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNC4yNDU2MTIgMTYuNjI3NTY2IEMgMzMuMjc0ODQyIDE0LjIxMTcxMiAzMS42MDI3NjQgMTIuMTQwODgzIDI5LjQ0NTY1NSAxMC42ODI5MzIgQyAyNy4yODg1NDYgOS4yMjQ5ODEgMjQuNzQzNjAyIDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNC4yNDU2MTIgMTYuNjI3NTY2IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80MWI1OWMwMGJmMTM0YjdhODIyNDBiNGZiN2Q4Njc1Ny5zZXRJY29uKGRpdl9pY29uXzNhNjQ4ZmFkODczNzQzN2Y4NDE4MzY0MWE1Nzk3MTFiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwYzBmMGI5OWY1MTQwZWNiNmUwNjZlZjJjMjhkM2MwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlMmNhMjNkYzBiMDQ4ZTJhMTcyYzk2ZGRlYzVlN2M5ID0gJChgPGRpdiBpZD0iaHRtbF82ZTJjYTIzZGMwYjA0OGUyYTE3MmM5NmRkZWM1ZTdjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FtaGExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFtaGFyaWM8L2E+PGJyPmNvbnNvbmFudHM6IDMwPGJyPnZvd2VsczogNzxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwYzBmMGI5OWY1MTQwZWNiNmUwNjZlZjJjMjhkM2MwLnNldENvbnRlbnQoaHRtbF82ZTJjYTIzZGMwYjA0OGUyYTE3MmM5NmRkZWM1ZTdjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQxYjU5YzAwYmYxMzRiN2E4MjI0MGI0ZmI3ZDg2NzU3LmJpbmRQb3B1cChwb3B1cF8zMGMwZjBiOTlmNTE0MGVjYjZlMDY2ZWYyYzI4ZDNjMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2E3YmRhOGEzMzM2YjRmYzFhNjQyODRiMDVkMzMzYmEyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFstNS4yNjkxOCwgMzUuNDgwOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF8zZDQ2MjY5YWJkYTk0OThjYjU0NTcwNGQ4N2ZhOTY4Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fN2I5ZWFjYWZlNTJkNDM0MDhlZjNmNzgwMDUzNTZmZGIgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuNjUgOC40NDU2IDE5LjE3MDk1MSA4LjcwMDg1NCAxNy43NjcxNCA5LjIwMDI2OSBDIDE2LjM2MzMyOSA5LjY5OTY4NCAxNS4wNTUzOTEgMTAuNDM1OTE3IDEzLjkwMDE3NiAxMS4zNzY5NjkgQyAxMi43NDQ5NjEgMTIuMzE4MDIxIDExLjc1OTQ1IDEzLjQ1MDA1OCAxMC45ODY0NzggMTQuNzIzODc3IEMgMTAuMjEzNTA1IDE1Ljk5NzY5NiA5LjY2NDQzNSAxNy4zOTQ1NzEgOS4zNjMxMyAxOC44NTM3ODkgQyA5LjA2MTgyNiAyMC4zMTMwMDcgOS4wMTI3MTggMjEuODEzMTE2IDkuMjE3OTQgMjMuMjg4OTE2IEMgOS40MjMxNjEgMjQuNzY0NzE2IDkuODc5Njk2IDI2LjE5NDUxMSAxMC41Njc3MDIgMjcuNTE2MTU4IEMgMTEuMjU1NzA4IDI4LjgzNzgwNCAxMi4xNjUwNyAzMC4wMzE4NzMgMTMuMjU2MjY0IDMxLjA0NjQ2NCBDIDE0LjM0NzQ1OCAzMi4wNjEwNTYgMTUuNjA0NDQzIDMyLjg4MTI1NiAxNi45NzI1ODYgMzMuNDcxNDE1IEMgMTguMzQwNzI4IDM0LjA2MTU3NCAxOS43OTk5MTUgMzQuNDEzMDE2IDIxLjI4NjcyNSAzNC41MTA0NjcgQyAyMi43NzM1MzYgMzQuNjA3OTE3IDI0LjI2NjExMiAzNC40NDk5NDQgMjUuNjk5NTgxIDM0LjA0MzQxMiBDIDI3LjEzMzA1IDMzLjYzNjg4IDI4LjQ4NjMzOCAzMi45ODc3NjYgMjkuNzAwNjI4IDMyLjEyNDI4NCBDIDMwLjkxNDkxNyAzMS4yNjA4MDEgMzEuOTcyMzU3IDMwLjE5NTY0NCAzMi44MjY5ODYgMjguOTc1MTA3IEMgMzMuNjgxNjE1IDI3Ljc1NDU3IDM0LjMyMDg3IDI2LjM5NjU5NiAzNC43MTY5NjYgMjQuOTYwMjA5IEMgMzUuMTEzMDYzIDIzLjUyMzgyMSAzNS4yNjAxNzggMjIuMDMwMTM2IDM1LjE1MTkxNyAyMC41NDQwNzQgQyAzNS4wNDM2NTcgMTkuMDU4MDEyIDM0LjY4MTYxMiAxNy42MDE0MTkgMzQuMDgxNTE5IDE2LjIzNzYwNCBDIDMzLjQ4MTQyNiAxNC44NzM3OSAzMi42NTIxMDcgMTMuNjIyODAzIDMxLjYyOTYwNiAxMi41MzkwMTYgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMxLjYyOTYwNiAxMi41MzkwMTYgQyAzMC40MTAwNzUgMTEuMjQ2Mzg4IDI4LjkzOTE5MSAxMC4yMTY0NjUgMjcuMzA3NDE0IDkuNTEyNTg1IEMgMjUuNjc1NjM2IDguODA4NzA1IDIzLjkxNzExNiA4LjQ0NTYgMjIuMTM5OTk5IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMxLjYyOTYwNiAxMi41MzkwMTYgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2E3YmRhOGEzMzM2YjRmYzFhNjQyODRiMDVkMzMzYmEyLnNldEljb24oZGl2X2ljb25fN2I5ZWFjYWZlNTJkNDM0MDhlZjNmNzgwMDUzNTZmZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWM1NTMxZjYzNzc0NDcyZWFlOTY2OWQwOGY2ZWJhZDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTg1OTRlYjE1MDQwNDFkZTliOWI2N2IzMjliZjlkZTcgPSAkKGA8ZGl2IGlkPSJodG1sX2E4NTk0ZWIxNTA0MDQxZGU5YjliNjdiMzI5YmY5ZGU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2FuZDEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2FuZGF3ZTwvYT48YnI+Y29uc29uYW50czogNDc8YnI+dm93ZWxzOiA3PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM1NTMxZjYzNzc0NDcyZWFlOTY2OWQwOGY2ZWJhZDguc2V0Q29udGVudChodG1sX2E4NTk0ZWIxNTA0MDQxZGU5YjliNjdiMzI5YmY5ZGU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTdiZGE4YTMzMzZiNGZjMWE2NDI4NGIwNWQzMzNiYTIuYmluZFBvcHVwKHBvcHVwXzljNTUzMWY2Mzc3NDQ3MmVhZTk2NjlkMDhmNmViYWQ4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNjQ1ZjZjZDQzOWMyNGQ0ZmJmNTNkMjgzN2JlN2VhZTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfM2Q0NjI2OWFiZGE5NDk4Y2I1NDU3MDRkODdmYTk2OGIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2FhNTFiNmM5NWQwNjQzNjg5NGY1NmQ1NWY5Y2VmYzYwID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjYwNjE4OSA4LjQ0NTYgMTkuMDg0MzI3IDguNzE2MDg2IDE3LjY0NDQ1MiA5LjI0NDYwOCBDIDE2LjIwNDU3OCA5Ljc3MzEzMSAxNC44NjkxMjQgMTAuNTUxNDU3IDEzLjY5OTU1MSAxMS41NDM3NjUgQyAxMi41Mjk5NzkgMTIuNTM2MDczIDExLjU0NDUxIDEzLjcyNjkwNCAxMC43ODg0OTcgMTUuMDYxNDUzIEMgMTAuMDMyNDg1IDE2LjM5NjAwMSA5LjUxNzcwNyAxNy44NTM0NzYgOS4yNjc4NTYgMTkuMzY2OCBDIDkuMDE4MDA2IDIwLjg4MDEyNCA5LjAzNjk3NCAyMi40MjU3MiA5LjMyMzg4OCAyMy45MzI0NTcgQyA5LjYxMDgwMyAyNS40MzkxOTQgMTAuMTYxMTkzIDI2Ljg4MzU5NiAxMC45NDk3MjkgMjguMTk5MTkgQyAxMS43MzgyNjUgMjkuNTE0NzgzIDEyLjc1MjY2MiAzMC42ODEwNzEgMTMuOTQ2MjM1IDMxLjY0NDM3NyBDIDE1LjEzOTgwNyAzMi42MDc2ODQgMTYuNDkzOTYgMzMuMzUzMDAyIDE3Ljk0NjM3MSAzMy44NDYwMjkgQyAxOS4zOTg3ODMgMzQuMzM5MDU2IDIwLjkyNjgyNSAzNC41NzIxMTIgMjIuNDYwMTc0IDM0LjUzNDQ3MSBDIDIzLjk5MzUyMiAzNC40OTY4MjkgMjUuNTA4Mjg5IDM0LjE4OTA3NyAyNi45MzQ3NTkgMzMuNjI1Mzc3IEMgMjguMzYxMjI5IDMzLjA2MTY3NyAyOS42NzcxOCAzMi4yNTA4MTIgMzAuODIyMDQ4IDMxLjIzMDEgQyAzMS45NjY5MTUgMzAuMjA5Mzg4IDMyLjkyMjg2NCAyOC45OTQ3MzIgMzMuNjQ1ODk3IDI3LjY0MjAzMSBDIDM0LjM2ODkzIDI2LjI4OTMzMSAzNC44NDc3ODUgMjQuODE5NjYyIDM1LjA2MDQyMiAyMy4zMDA2NjMgQyAzNS4yNzMwNTggMjEuNzgxNjYzIDM1LjIxNjE2NSAyMC4yMzY5OTcgMzQuODkyMzYgMTguNzM3NzU2IEMgMzQuNTY4NTU1IDE3LjIzODUxNCAzMy45ODI4ODMgMTUuODA4MDU0IDMzLjE2MjI5OCAxNC41MTIyMDggQyAzMi4zNDE3MTMgMTMuMjE2MzYzIDMxLjI5OSAxMi4wNzUzMjEgMzAuMDgyMTQ2IDExLjE0MTU5NiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzAuMDgyMTQ2IDExLjE0MTU5NiBDIDI4Ljk1MDU3OSAxMC4yNzMzMTQgMjcuNjg0MjQ0IDkuNTk2NDQ0IDI2LjMzMzYyOSA5LjEzNzk3MSBDIDI0Ljk4MzAxNSA4LjY3OTQ5OSAyMy41NjYzMTEgOC40NDU2IDIyLjE0MDAwMiA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMC4wODIxNDYgMTEuMTQxNTk2IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82NDVmNmNkNDM5YzI0ZDRmYmY1M2QyODM3YmU3ZWFlNi5zZXRJY29uKGRpdl9pY29uX2FhNTFiNmM5NWQwNjQzNjg5NGY1NmQ1NWY5Y2VmYzYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3ZmY1ZGRkNDhlZTQ1YjhhMjc3ZTE3Yzg3ZWZiOThlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiZDkwMzA0M2Y1MjQwMTg5NDdjOTU4YzhjMzE2OGU3ID0gJChgPGRpdiBpZD0iaHRtbF8xYmQ5MDMwNDNmNTI0MDE4OTQ3Yzk1OGM4YzMxNjhlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RsaW4xMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRsaW5naXQ8L2E+PGJyPmNvbnNvbmFudHM6IDQzPGJyPnZvd2VsczogNTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3ZmY1ZGRkNDhlZTQ1YjhhMjc3ZTE3Yzg3ZWZiOThlLnNldENvbnRlbnQoaHRtbF8xYmQ5MDMwNDNmNTI0MDE4OTQ3Yzk1OGM4YzMxNjhlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY0NWY2Y2Q0MzljMjRkNGZiZjUzZDI4MzdiZTdlYWU2LmJpbmRQb3B1cChwb3B1cF9jN2ZmNWRkZDQ4ZWU0NWI4YTI3N2UxN2M4N2VmYjk4ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzNiNDFjOWJkODhiNzRmZWViZWFiNzU1ZjE2NWJiOThiID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzNkNDYyNjlhYmRhOTQ5OGNiNTQ1NzA0ZDg3ZmE5NjhiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl8zM2QzNGZhNThmMzI0NTMwODE5MDY5NjkxYzkzMzNjZCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC44MDkxNTggOC40NDU2IDE5LjQ4NjExOCA4LjY0OTIzNSAxOC4yMTY4NzIgOS4wNDk0MjcgQyAxNi45NDc2MjYgOS40NDk2MTkgMTUuNzQ3MDU0IDEwLjA0MTY3NSAxNC42NTY4OTIgMTAuODA1MDE1IEMgMTMuNTY2NzMxIDExLjU2ODM1NCAxMi41OTk3NiAxMi40OTQwMjcgMTEuNzg5NTk1IDEzLjU0OTg1NSBDIDEwLjk3OTQzIDE0LjYwNTY4MyAxMC4zMzU1NjkgMTUuNzc5Mjg3IDkuODgwMzk0IDE3LjAyOTg2OSBDIDkuNDI1MjE5IDE4LjI4MDQ1MSA5LjE2NDA2OCAxOS41OTMzNDkgOS4xMDYwMTcgMjAuOTIyOTI0IEMgOS4wNDc5NjcgMjIuMjUyNDk5IDkuMTkzNjk4IDIzLjU4MzE2MyA5LjUzODE0NSAyNC44Njg2NTcgQyA5Ljg4MjU5MyAyNi4xNTQxNTEgMTAuNDIxNzE3IDI3LjM3OTQwNiAxMS4xMzY3NzggMjguNTAxODI2IEMgMTEuODUxODM5IDI5LjYyNDI0NiAxMi43MzQ0NTIgMzAuNjMwNjc0IDEzLjc1MzkzNiAzMS40ODYxMjMgQyAxNC43NzM0MiAzMi4zNDE1NzEgMTUuOTE3ODIyIDMzLjAzNjAxMSAxNy4xNDczNTkgMzMuNTQ1MzAyIEMgMTguMzc2ODk3IDM0LjA1NDU5MyAxOS42NzcxNTUgMzQuMzcyNzY0IDIxLjAwMjkzMiAzNC40ODg3NTUgQyAyMi4zMjg3MDkgMzQuNjA0NzQ1IDIzLjY2NDQ2MyAzNC41MTcxOTUgMjQuOTYzNzU5IDM0LjIyOTE0OCBDIDI2LjI2MzA1NCAzMy45NDExMDEgMjcuNTEwNjU4IDMzLjQ1NTkzNCAyOC42NjMyMDEgMzIuNzkwNTEzIEMgMjkuODE1NzQzIDMyLjEyNTA5MyAzMC44NTk3MTIgMzEuMjg3MjE5IDMxLjc1ODgxNiAzMC4zMDYwMTkgQyAzMi42NTc5MTkgMjkuMzI0ODIgMzMuNDAxNjE2IDI4LjIxMTc5OCAzMy45NjQwNTQgMjcuMDA1NjQ2IEMgMzQuNTI2NDkyIDI1Ljc5OTQ5NCAzNC45MDEwNzcgMjQuNTE0MzUyIDM1LjA3NDc4NiAyMy4xOTQ4OTYgQyAzNS4yNDg0OTYgMjEuODc1NDQgMzUuMjE5Mjk0IDIwLjUzNzEzOCAzNC45ODgxOTYgMTkuMjI2NTE1IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNC45ODgxOTYgMTkuMjI2NTE1IEMgMzQuNDU1NzAxIDE2LjIwNjU4OSAzMi44NzUxNDkgMTMuNDY4OTk0IDMwLjUyNjA2MyAxMS40OTc4NzcgQyAyOC4xNzY5NzggOS41MjY3NiAyNS4yMDY1MTIgOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNC45ODgxOTYgMTkuMjI2NTE1IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zYjQxYzliZDg4Yjc0ZmVlYmVhYjc1NWYxNjViYjk4Yi5zZXRJY29uKGRpdl9pY29uXzMzZDM0ZmE1OGYzMjQ1MzA4MTkwNjk2OTFjOTMzM2NkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjMDExNWRjNmNjOTQ3NTRiNGE1N2ZlNTFjMDc1OWMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllYzFkNTkxYjUzMTQ4Y2E5MmI0MzAxNDRlM2Y2Zjg5ID0gJChgPGRpdiBpZD0iaHRtbF85ZWMxZDU5MWI1MzE0OGNhOTJiNDMwMTQ0ZTNmNmY4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xha28xMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxha290YTwvYT48YnI+Y29uc29uYW50czogMjg8YnI+dm93ZWxzOiA4PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWMwMTE1ZGM2Y2M5NDc1NGI0YTU3ZmU1MWMwNzU5YzEuc2V0Q29udGVudChodG1sXzllYzFkNTkxYjUzMTQ4Y2E5MmI0MzAxNDRlM2Y2Zjg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2I0MWM5YmQ4OGI3NGZlZWJlYWI3NTVmMTY1YmI5OGIuYmluZFBvcHVwKHBvcHVwXzVjMDExNWRjNmNjOTQ3NTRiNGE1N2ZlNTFjMDc1OWMxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMzQxMTAyN2Y5MDNlNDAxMzk0NzFiNTEwMGMxMTczNDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzNkNDYyNjlhYmRhOTQ5OGNiNTQ1NzA0ZDg3ZmE5NjhiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl83ZDUyMmI0NmJiOTc0ODBkYThlMDA5OGZjMWI3NjVkMSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAxOS44NTAwNDkgOC40NDU2IDE3LjU5OTk1NiA5LjA0ODUxMSAxNS42MTY4IDEwLjE5MzQ4NiBDIDEzLjYzMzY0NCAxMS4zMzg0NjIgMTEuOTg2NDYxIDEyLjk4NTY0NCAxMC44NDE0ODYgMTQuOTY4OCBDIDkuNjk2NTEgMTYuOTUxOTU2IDkuMDkzNiAxOS4yMDIwNSA5LjA5MzYgMjEuNDkyMDAxIEMgOS4wOTM2IDIzLjc4MTk1MiA5LjY5NjUxMSAyNi4wMzIwNDUgMTAuODQxNDg3IDI4LjAxNTIwMSBDIDExLjk4NjQ2MiAyOS45OTgzNTYgMTMuNjMzNjQ1IDMxLjY0NTUzOSAxNS42MTY4MDEgMzIuNzkwNTE0IEMgMTcuNTk5OTU3IDMzLjkzNTQ5IDE5Ljg1MDA1IDM0LjUzODQgMjIuMTQwMDAxIDM0LjUzODQgQyAyNC40Mjk5NTIgMzQuNTM4NCAyNi42ODAwNDYgMzMuOTM1NDg5IDI4LjY2MzIwMSAzMi43OTA1MTMgQyAzMC42NDYzNTcgMzEuNjQ1NTM3IDMyLjI5MzUzOSAyOS45OTgzNTUgMzMuNDM4NTE1IDI4LjAxNTE5OSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzMuNDM4NTE1IDI4LjAxNTE5OSBDIDM0LjU4MzQ5IDI2LjAzMjA0MyAzNS4xODY0IDIzLjc4MTk0OSAzNS4xODY0IDIxLjQ5MTk5OCBDIDM1LjE4NjQgMTkuMjAyMDQ3IDM0LjU4MzQ4OSAxNi45NTE5NTQgMzMuNDM4NTEzIDE0Ljk2ODc5OCBDIDMyLjI5MzUzNyAxMi45ODU2NDMgMzAuNjQ2MzU0IDExLjMzODQ2IDI4LjY2MzE5OCAxMC4xOTM0ODUgQyAyNi42ODAwNDIgOS4wNDg1MSAyNC40Mjk5NDkgOC40NDU2IDIyLjEzOTk5OCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy40Mzg1MTUgMjguMDE1MTk5IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zNDExMDI3ZjkwM2U0MDEzOTQ3MWI1MTAwYzExNzM0Ny5zZXRJY29uKGRpdl9pY29uXzdkNTIyYjQ2YmI5NzQ4MGRhOGUwMDk4ZmMxYjc2NWQxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyNDMxOGFlNTdkMzQ1MzFiODJhNmQzMjVlNGM0NDMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0MjI0MjE3YzE5MTRjNGJiYzM4MThlZDAxMmRiYTFlID0gJChgPGRpdiBpZD0iaHRtbF8xNDIyNDIxN2MxOTE0YzRiYmMzODE4ZWQwMTJkYmExZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3l1Y2ExMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPll1Y2F0ZWMgTWF5YTwvYT48YnI+Y29uc29uYW50czogMjA8YnI+dm93ZWxzOiAxMDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyNDMxOGFlNTdkMzQ1MzFiODJhNmQzMjVlNGM0NDMwLnNldENvbnRlbnQoaHRtbF8xNDIyNDIxN2MxOTE0YzRiYmMzODE4ZWQwMTJkYmExZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM0MTEwMjdmOTAzZTQwMTM5NDcxYjUxMDBjMTE3MzQ3LmJpbmRQb3B1cChwb3B1cF9mMjQzMThhZTU3ZDM0NTMxYjgyYTZkMzI1ZTRjNDQzMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.19. Using Different Tiles 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You can change tiles using ``tiles`` attribute. Let’s use
``Stamen Terrain``.

.. code:: ipython3

    m2 = lingtypology.LingMap(data.language)
    m2.tiles = 'Stamen Terrain'
    m2.legend_title = 'Consonants/Vowels'
    m2.add_minicharts(data.consonants, data.vowels, colors=('black', 'white'))
    m2.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2U0NzgyOTk5NjY1NjRhNDA4YjM3ZTk0NjczODEzMzlhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9lNDc4Mjk5OTY2NTY0YTQwOGIzN2U5NDY3MzgxMzM5YSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5Db25zb25hbnRzL1Zvd2VsczwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogYmxhY2s7b3BhY2l0eTowLjc7Ij48L3NwYW4+Y29uc29uYW50czwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogd2hpdGU7b3BhY2l0eTowLjc7Ij48L3NwYW4+dm93ZWxzPC9saT4KCgogIDwvdWw+CjwvZGl2Pgo8L2Rpdj4KCjwvYm9keT4KPC9odG1sPgoKPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4KICAubWFwbGVnZW5kIC5sZWdlbmQtdGl0bGUgewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiA5MCU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIHsKICAgIG1hcmdpbjogMDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIHBhZGRpbmc6IDA7CiAgICBmbG9hdDogbGVmdDsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIGxpIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICB9CiAgLm1hcGxlZ2VuZCB1bC5sZWdlbmQtbGFiZWxzIGxpIHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmbG9hdDogbGVmdDsKICAgIGhlaWdodDogMTZweDsKICAgIHdpZHRoOiAzMHB4OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIAogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgIAogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zb3VyY2UgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBjb2xvcjogIzc3NzsKICAgIGNsZWFyOiBib3RoOwogICAgfQogIC5tYXBsZWdlbmQgYSB7CiAgICBjb2xvcjogIzc3NzsKICAgIH0KPC9zdHlsZT4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwX2U0NzgyOTk5NjY1NjRhNDA4YjM3ZTk0NjczODEzMzlhID0gTC5tYXAoCiAgICAgICAgJ21hcF9lNDc4Mjk5OTY2NTY0YTQwOGIzN2U5NDY3MzgxMzM5YScsIHsKICAgICAgICBjZW50ZXI6IFswLCAwXSwKICAgICAgICB6b29tOiAyLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwX2U0NzgyOTk5NjY1NjRhNDA4YjM3ZTk0NjczODEzMzlhKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzY0MjJmZWVkY2Q4YTQyNGZiZWIxMTJhZmYwOWQwY2U4ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8vc3RhbWVuLXRpbGVzLXtzfS5hLnNzbC5mYXN0bHkubmV0L3RlcnJhaW4ve3p9L3t4fS97eX0uanBnJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF9lNDc4Mjk5OTY2NTY0YTQwOGIzN2U5NDY3MzgxMzM5YSk7CiAgICAKICAgICAgICB2YXIgbWFya2VyX2YyODYzMzU3MGM5MzQ0YTdiMDE2OWIxMzEyMjlmMmRmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2U0NzgyOTk5NjY1NjRhNDA4YjM3ZTk0NjczODEzMzlhKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9kODA0ZDI5Mzg3OWQ0ODg5ODRiYzg2NmNkZGY0YTk3NSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC44NDM4NTQgOC40NDU2IDE5LjU1NDkxNSA4LjYzODc1NiAxOC4zMTU3MDUgOS4wMTg2OTYgQyAxNy4wNzY0OTYgOS4zOTg2MzUgMTUuOTAwNzk2IDkuOTYxMTM0IDE0LjgyNzM5NCAxMC42ODc2MzMgQyAxMy43NTM5OTEgMTEuNDE0MTMzIDEyLjc5NDgyMiAxMi4yOTY1NTUgMTEuOTgxNTMxIDEzLjMwNTc4OCBDIDExLjE2ODI0IDE0LjMxNTAyMSAxMC41MDk4NjkgMTUuNDM5ODQzIDEwLjAyODE0MSAxNi42NDMxNDMgQyA5LjU0NjQxMiAxNy44NDY0NDMgOS4yNDY2ODEgMTkuMTE0ODQyIDkuMTM4ODM3IDIwLjQwNjQ5NCBDIDkuMDMwOTk0IDIxLjY5ODE0NSA5LjExNjIzNSAyMi45OTg2ODcgOS4zOTE3NTEgMjQuMjY1MjEyIEMgOS42NjcyNjcgMjUuNTMxNzM2IDEwLjEyOTk5MiAyNi43NTAxNjEgMTAuNzY0NjYyIDI3Ljg4MDI4OSBDIDExLjM5OTMzMiAyOS4wMTA0MTcgMTIuMTk4ODg4IDMwLjAzOTY4IDEzLjEzNjk1MyAzMC45MzQxMjQgQyAxNC4wNzUwMTggMzEuODI4NTY3IDE1LjE0MTE2IDMyLjU3ODI0MyAxNi4zMDAyMDcgMzMuMTU4NDIgQyAxNy40NTkyNTMgMzMuNzM4NTk4IDE4LjY5ODMxNSAzNC4xNDI4MjQgMTkuOTc2NTE1IDM0LjM1Nzc2NCBDIDIxLjI1NDcxNSAzNC41NzI3MDQgMjIuNTU3ODM5IDM0LjU5NTk2NyAyMy44NDI4OTcgMzQuNDI2Nzg2IEMgMjUuMTI3OTU0IDM0LjI1NzYwNSAyNi4zODA2NTQgMzMuODk3ODYxIDI3LjU1OTY3IDMzLjM1OTQyMyBDIDI4LjczODY4NiAzMi44MjA5ODUgMjkuODMwOTA3IDMyLjEwOTgzOSAzMC44MDAyOTkgMzEuMjQ5NDQ4IEMgMzEuNzY5NjkgMzAuMzg5MDU2IDMyLjYwNTQ3NCAyOS4zODg5ODYgMzMuMjgwMDc3IDI4LjI4MjIzMiBDIDMzLjk1NDY3OSAyNy4xNzU0NzcgMzQuNDYwNTk4IDI1Ljk3NDM0NCAzNC43ODExNDMgMjQuNzE4NDYgQyAzNS4xMDE2ODkgMjMuNDYyNTc2IDM1LjIzMzI5NiAyMi4xNjU5MDYgMzUuMTcxNjIzIDIwLjg3MTIyOCBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS4xNzE2MjMgMjAuODcxMjI4IEMgMzUuMDEyMTUyIDE3LjUyMzUwOSAzMy41Njg2NTMgMTQuMzYyNjg3IDMxLjE0MzA0NyAxMi4wNDk4NzYgQyAyOC43MTc0NDEgOS43MzcwNjYgMjUuNDkxNTE1IDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNS4xNzE2MjMgMjAuODcxMjI4IHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mMjg2MzM1NzBjOTM0NGE3YjAxNjliMTMxMjI5ZjJkZi5zZXRJY29uKGRpdl9pY29uX2Q4MDRkMjkzODc5ZDQ4ODk4NGJjODY2Y2RkZjRhOTc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U0Mjk2ZmM0MDY5MDQ4OTc4NzFlYzhiMjVlMDdhZWQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhOWNhY2Q5ZTk2YzQ1NGQ5NmEyMGI0YTU1NzkzNzlmID0gJChgPGRpdiBpZD0iaHRtbF83YTljYWNkOWU5NmM0NTRkOTZhMjBiNGE1NTc5Mzc5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1cmtpc2g8L2E+PGJyPmNvbnNvbmFudHM6IDI1PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0Mjk2ZmM0MDY5MDQ4OTc4NzFlYzhiMjVlMDdhZWQ4LnNldENvbnRlbnQoaHRtbF83YTljYWNkOWU5NmM0NTRkOTZhMjBiNGE1NTc5Mzc5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YyODYzMzU3MGM5MzQ0YTdiMDE2OWIxMzEyMjlmMmRmLmJpbmRQb3B1cChwb3B1cF9lNDI5NmZjNDA2OTA0ODk3ODcxZWM4YjI1ZTA3YWVkOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzIwYWVkMTk5NzlhNzQzMzViMmY1YWFjZGYxMzdjMTM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNy41LCAxMjguMF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9lNDc4Mjk5OTY2NTY0YTQwOGIzN2U5NDY3MzgxMzM5YSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fODA4ZGNiOTlmM2Q0NDMzYzhjNDNkZGZiNzFiN2ZlODggPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuODg2MjIxIDguNDQ1NiAxNy42NzA0MzYgOS4wMjk2MTQgMTUuNzA5NDUzIDEwLjE0MDQ5NyBDIDEzLjc0ODQ3IDExLjI1MTM4IDEyLjEwODQwMyAxMi44NTE2OCAxMC45NDk3MjkgMTQuNzg0ODEgQyA5Ljc5MTA1NiAxNi43MTc5NCA5LjE1Mjg0IDE4LjkxODcyNiA5LjA5NzUyOSAyMS4xNzE4MjUgQyA5LjA0MjIxOSAyMy40MjQ5MjUgOS41NzE2NzkgMjUuNjU0Mzc1IDEwLjYzNDEwMiAyNy42NDIwMyBDIDExLjY5NjUyNiAyOS42Mjk2ODYgMTMuMjU2MDk0IDMxLjMwODUzMSAxNS4xNjAyMDcgMzIuNTE0Mjk4IEMgMTcuMDY0MzIgMzMuNzIwMDY0IDE5LjI0ODc4IDM0LjQxMjA5NyAyMS40OTk4NDMgMzQuNTIyNjg1IEMgMjMuNzUwOTA3IDM0LjYzMzI3MyAyNS45OTI2NzkgMzQuMTU4Njg2IDI4LjAwNTgwOSAzMy4xNDUzNjIgQyAzMC4wMTg5MzkgMzIuMTMyMDM3IDMxLjczNTU1MyAzMC42MTQxNCAzMi45ODc2ODUgMjguNzQwMTkxIEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMyLjk4NzY4NSAyOC43NDAxOTEgQyAzNC4zMDAxMzggMjYuNzc1OTY3IDM1LjA1NDc3IDI0LjQ5MTY2MyAzNS4xNzA2ODUgMjIuMTMyMTU3IEMgMzUuMjg2NiAxOS43NzI2NSAzNC43NTk1MDMgMTcuNDI1Mzc4IDMzLjY0NTg5OCAxNS4zNDE5NyBDIDMyLjUzMjI5MiAxMy4yNTg1NjEgMzAuODczNDQ3IDExLjUxNjIyMSAyOC44NDcxOSAxMC4zMDE3MjkgQyAyNi44MjA5MzMgOS4wODcyMzggMjQuNTAyMzUyIDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi45ODc2ODUgMjguNzQwMTkxIHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yMGFlZDE5OTc5YTc0MzM1YjJmNWFhY2RmMTM3YzEzNy5zZXRJY29uKGRpdl9pY29uXzgwOGRjYjk5ZjNkNDQzM2M4YzQzZGRmYjcxYjdmZTg4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4OTI3ZDI2NmM1NzQ3MWU5MGMwOTg2ZWFlOTQwZWExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjMzBiNGVlYTdjZTQyNGU5ODgzZGZhODk0ZGRjMTM5ID0gJChgPGRpdiBpZD0iaHRtbF8xYzMwYjRlZWE3Y2U0MjRlOTg4M2RmYTg5NGRkYzEzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tvcmUxMjgwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktvcmVhbjwvYT48YnI+Y29uc29uYW50czogMjE8YnI+dm93ZWxzOiAxMTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4OTI3ZDI2NmM1NzQ3MWU5MGMwOTg2ZWFlOTQwZWExLnNldENvbnRlbnQoaHRtbF8xYzMwYjRlZWE3Y2U0MjRlOTg4M2RmYTg5NGRkYzEzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIwYWVkMTk5NzlhNzQzMzViMmY1YWFjZGYxMzdjMTM3LmJpbmRQb3B1cChwb3B1cF8yODkyN2QyNjZjNTc0NzFlOTBjMDk4NmVhZTk0MGVhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzljMjUxZGQ5NzQ3NzQwOGU4YzgxNjljMTAzZDdiZjAxID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFstMTEuNjMwOCwgMTMwLjk0ODk5OTk5OTk5OTk4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2U0NzgyOTk5NjY1NjRhNDA4YjM3ZTk0NjczODEzMzlhKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl82ZjI4NTk1NGU5M2I0YWI3OWRiNzQyOWYzY2U4MmRjNiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC42OTE2NDggOC40NDU2IDE5LjI1MzM1NSA4LjY4Njc4NCAxNy44ODQyMjggOS4xNTkyNDEgQyAxNi41MTUxMDEgOS42MzE2OTcgMTUuMjM0MTU3IDEwLjMyODg2NCAxNC4wOTQwMzkgMTEuMjIyMDg5IEMgMTIuOTUzOTIgMTIuMTE1MzE1IDExLjk3MDQ2MiAxMy4xOTIxOTQgMTEuMTg0MDgxIDE0LjQwODQ3MSBDIDEwLjM5NzcgMTUuNjI0NzQ3IDkuODE5MzE4IDE2Ljk2MzUyNyA5LjQ3MjcwNSAxOC4zNjk3OTIgQyA5LjEyNjA5MSAxOS43NzYwNTggOS4wMTYwNjEgMjEuMjMwMjc2IDkuMTQ3MTM1IDIyLjY3MjY4NSBDIDkuMjc4MjA5IDI0LjExNTA5MyA5LjY0ODU2OCAyNS41MjU2NTggMTAuMjQyOTkgMjYuODQ2NDEgQyAxMC44Mzc0MTIgMjguMTY3MTYyIDExLjY0NzY0MiAyOS4zNzk3NTYgMTIuNjQwMzgyIDMwLjQzNDM2MSBDIDEzLjYzMzEyMiAzMS40ODg5NjUgMTQuNzk0NTg0IDMyLjM3MDkzMSAxNi4wNzcwMzYgMzMuMDQ0MDE0IEMgMTcuMzU5NDg4IDMzLjcxNzA5NiAxOC43NDUxMTcgMzQuMTcxOTQ3IDIwLjE3Njk4IDM0LjM4OTg3MiBDIDIxLjYwODg0MyAzNC42MDc3OTggMjMuMDY3MDUyIDM0LjU4NTc3MSAyNC40OTE2OCAzNC4zMjQ2OTkgQyAyNS45MTYzMDcgMzQuMDYzNjI2IDI3LjI4NzU2NyAzMy41NjcxMzMgMjguNTQ5MTA1IDMyLjg1NTYyMyBDIDI5LjgxMDY0MiAzMi4xNDQxMTQgMzAuOTQ0OTM2IDMxLjIyNzQ3IDMxLjkwNTM3MSAzMC4xNDMzNjMgQyAzMi44NjU4MDYgMjkuMDU5MjU2IDMzLjYzOTA0MiAyNy44MjI3NDMgMzQuMTkzMzAyIDI2LjQ4NDY0MSBDIDM0Ljc0NzU2MiAyNS4xNDY1MzggMzUuMDc1MTQ4IDIzLjcyNTQzMSAzNS4xNjI1OTggMjIuMjc5NzIxIEMgMzUuMjUwMDQ3IDIwLjgzNDAxMiAzNS4wOTYxNDUgMTkuMzgzNzggMzQuNzA3MjE2IDE3Ljk4ODYyNSBDIDM0LjMxODI4NyAxNi41OTM0NyAzMy42OTk3MzQgMTUuMjcyNzcgMzIuODc2OTc2IDE0LjA4MDc5OSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi44NzY5NzYgMTQuMDgwNzk5IEMgMzEuNjc3MTk3IDEyLjM0MjYyIDMwLjA3MzA4NyAxMC45MjE1MDMgMjguMjAyOTY0IDkuOTM5OTg2IEMgMjYuMzMyODQgOC45NTg0NyAyNC4yNTIwNDUgOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi44NzY5NzYgMTQuMDgwNzk5IHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85YzI1MWRkOTc0Nzc0MDhlOGM4MTY5YzEwM2Q3YmYwMS5zZXRJY29uKGRpdl9pY29uXzZmMjg1OTU0ZTkzYjRhYjc5ZGI3NDI5ZjNjZTgyZGM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4MGE5MTc3ODMxYTQ4MjViMzYzYTU1NDRjYzBlZGY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxMjhmYTYwZjc5NDRiNTU4M2EwNjEwNjdmMDZhZTAyID0gJChgPGRpdiBpZD0iaHRtbF9kMTI4ZmE2MGY3OTQ0YjU1ODNhMDYxMDY3ZjA2YWUwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rpd2kxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpd2k8L2E+PGJyPmNvbnNvbmFudHM6IDIyPGJyPnZvd2VsczogNDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4MGE5MTc3ODMxYTQ4MjViMzYzYTU1NDRjYzBlZGY5LnNldENvbnRlbnQoaHRtbF9kMTI4ZmE2MGY3OTQ0YjU1ODNhMDYxMDY3ZjA2YWUwMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzljMjUxZGQ5NzQ3NzQwOGU4YzgxNjljMTAzZDdiZjAxLmJpbmRQb3B1cChwb3B1cF8yODBhOTE3NzgzMWE0ODI1YjM2M2E1NTQ0Y2MwZWRmOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzNhNzM2YjY3ZDE4OTRhZDdiZDhjOGYwNWQ0YWU4Mzk2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs2LjkyMDQ4LCAtOS45NjEyOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9lNDc4Mjk5OTY2NTY0YTQwOGIzN2U5NDY3MzgxMzM5YSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMmZmYmEyN2FlNzUzNGIyYjhmOGY3YjJmMjYzOWE5ZTQgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuOTE4MTIzIDguNDQ1NiAxNy43MzI2NDUgOS4wMTMxOTggMTUuNzkxNTYzIDEwLjA5NDM3MyBDIDEzLjg1MDQ4MiAxMS4xNzU1NDggMTIuMjE3Mzk0IDEyLjczNDg3OCAxMS4wNDc3MjcgMTQuNjIzOTU2IEMgOS44NzgwNiAxNi41MTMwMzQgOS4yMTAxMzUgMTguNjY5OTY3IDkuMTA3NTIxIDIwLjg4OTQ3MyBDIDkuMDA0OTA3IDIzLjEwODk3OSA5LjQ3MDk2NiAyNS4zMTgzMzkgMTAuNDYxMzQyIDI3LjMwNzI4MiBDIDExLjQ1MTcxOCAyOS4yOTYyMjQgMTIuOTMzOTYyIDMwLjk5OTU4NCAxNC43NjcwMDUgMzIuMjU1MjQ4IEMgMTYuNjAwMDQ4IDMzLjUxMDkxMSAxOC43MjM4MzMgMzQuMjc3NzM4IDIwLjkzNjIzMSAzNC40ODI3NDYgQyAyMy4xNDg2MyAzNC42ODc3NTUgMjUuMzc3MTU3IDM0LjMyNDIyOSAyNy40MDk3MTYgMzMuNDI2NzY2IEMgMjkuNDQyMjc2IDMyLjUyOTMwMyAzMS4yMTIyNzMgMzEuMTI3MzA3IDMyLjU1MTI1MyAyOS4zNTQyMTEgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzIuNTUxMjUzIDI5LjM1NDIxMSBDIDM0LjAxMzQyNSAyNy40MTc5ODIgMzQuOTA2ODc2IDI1LjExMTcxNyAzNS4xMzA3NDcgMjIuNjk1NzY4IEMgMzUuMzU0NjE3IDIwLjI3OTgxOSAzNC45MDAxNTIgMTcuODQ4NjUxIDMzLjgxODY1NyAxNS42NzY3MTcgQyAzMi43MzcxNjIgMTMuNTA0NzgzIDMxLjA3MDkyNCAxMS42NzcwMDggMjkuMDA4MDQzIDEwLjM5OTcyNiBDIDI2Ljk0NTE2MSA5LjEyMjQ0NCAyNC41NjYyOTcgOC40NDU2IDIyLjEzOTk5OCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi41NTEyNTMgMjkuMzU0MjExIHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zYTczNmI2N2QxODk0YWQ3YmQ4YzhmMDVkNGFlODM5Ni5zZXRJY29uKGRpdl9pY29uXzJmZmJhMjdhZTc1MzRiMmI4ZjhmN2IyZjI2MzlhOWU0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliNTRhZTdkMmZiMzQ1ZGI5YjAwZmFjNDliNzkyMjZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U0OWEyN2JmMTk5MDQ0YTRhMTFlZmRiOGExNTMzYzJmID0gJChgPGRpdiBpZD0iaHRtbF9lNDlhMjdiZjE5OTA0NGE0YTExZWZkYjhhMTUzM2MyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xpYmUxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxpYmVyaWEgS3BlbGxlPC9hPjxicj5jb25zb25hbnRzOiAyMjxicj52b3dlbHM6IDEyPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWI1NGFlN2QyZmIzNDVkYjliMDBmYWM0OWI3OTIyNmUuc2V0Q29udGVudChodG1sX2U0OWEyN2JmMTk5MDQ0YTRhMTFlZmRiOGExNTMzYzJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2E3MzZiNjdkMTg5NGFkN2JkOGM4ZjA1ZDRhZTgzOTYuYmluZFBvcHVwKHBvcHVwXzliNTRhZTdkMmZiMzQ1ZGI5YjAwZmFjNDliNzkyMjZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMTg0OWEwMGM5Y2NjNDY1MjlkYmI5NWQ1MjkyMmFlNTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzEyLjgxMTQsIDc1LjI2NTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTQ3ODI5OTk2NjU2NGE0MDhiMzdlOTQ2NzM4MTMzOWEpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzQ3MjFjYzRmYmY1ODQ1NWI4OTJmYTVhNWZmMGU1MGQ3ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjkxMjYwNiA4LjQ0NTYgMTcuNzIxODgzIDkuMDE2MDIgMTUuNzc3MzM3IDEwLjEwMjMwOSBDIDEzLjgzMjc5MSAxMS4xODg1OTcgMTIuMTk4NDQ5IDEyLjc1NDk4NiAxMS4wMzA2MTEgMTQuNjUxNjc3IEMgOS44NjI3NzIgMTYuNTQ4MzY4IDkuMTk5ODg5IDE4LjcxMjkwNyA5LjEwNTM1NSAyMC45MzgyOTQgQyA5LjAxMDgyMiAyMy4xNjM2ODEgOS40ODc3NTEgMjUuMzc2NjM5IDEwLjQ5MDUzMiAyNy4zNjU1MzcgQyAxMS40OTMzMTIgMjkuMzU0NDM1IDEyLjk4ODkyNyAzMS4wNTM3ODMgMTQuODM0MzQ0IDMyLjMwMTA2NyBDIDE2LjY3OTc2MSAzMy41NDgzNTIgMTguODE0MjE3IDM0LjMwMjUwNCAyMS4wMzM1ODYgMzQuNDkxNCBDIDIzLjI1Mjk1NiAzNC42ODAyOTcgMjUuNDg0MTYyIDM0LjI5NzcxOCAyNy41MTM4MjcgMzMuMzgwMjUyIEMgMjkuNTQzNDkxIDMyLjQ2Mjc4NiAzMS4zMDQ3ODQgMzEuMDQwNjQyIDMyLjYyOTI2NyAyOS4yNDk4MjQgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzIuNjI5MjY3IDI5LjI0OTgyNCBDIDM0LjA2NTQ0NSAyNy4zMDc5ODMgMzQuOTM0NTczIDI1LjAwNDk0NyAzNS4xMzk0IDIyLjU5ODQxNCBDIDM1LjM0NDIyNyAyMC4xOTE4ODEgMzQuODc2ODE2IDE3Ljc3NTA4OSAzMy43ODk0NjkgMTUuNjE4NDY0IEMgMzIuNzAyMTIyIDEzLjQ2MTgzOSAzMS4wMzY5NjYgMTEuNjQ4OTM3IDI4Ljk4MDMyNSAxMC4zODI2MTIgQyAyNi45MjM2ODMgOS4xMTYyODYgMjQuNTU1MjM2IDguNDQ1NiAyMi4xNDAwMDIgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzIuNjI5MjY3IDI5LjI0OTgyNCB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTg0OWEwMGM5Y2NjNDY1MjlkYmI5NWQ1MjkyMmFlNTEuc2V0SWNvbihkaXZfaWNvbl80NzIxY2M0ZmJmNTg0NTViODkyZmE1YTVmZjBlNTBkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YmQ3ODkwMTJiMTk0Y2M5OTRlZTY5ZDJiMTcxMjM0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTU0MTQ5ZjAyY2Q0NTJkOGRlZGU1ZWQ0ZWIzYjA4NCA9ICQoYDxkaXYgaWQ9Imh0bWxfOGE1NDE0OWYwMmNkNDUyZDhkZWRlNWVkNGViM2IwODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90dWx1MTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdWx1PC9hPjxicj5jb25zb25hbnRzOiAyNDxicj52b3dlbHM6IDEzPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGJkNzg5MDEyYjE5NGNjOTk0ZWU2OWQyYjE3MTIzNDEuc2V0Q29udGVudChodG1sXzhhNTQxNDlmMDJjZDQ1MmQ4ZGVkZTVlZDRlYjNiMDg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTg0OWEwMGM5Y2NjNDY1MjlkYmI5NWQ1MjkyMmFlNTEuYmluZFBvcHVwKHBvcHVwXzhiZDc4OTAxMmIxOTRjYzk5NGVlNjlkMmIxNzEyMzQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfY2I5MmRiNDE3MDZkNDkyNTkyOTc5ZDkxZWRmNGNjOGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWy0zOC43MzkyLCAtNzEuMjc3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2U0NzgyOTk5NjY1NjRhNDA4YjM3ZTk0NjczODEzMzlhKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl84MjQ0ZWFjODE5MGQ0ZDc2YWE2Y2Q2ZDk5MTlkNzhiYSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC44MjM4MzkgOC40NDU2IDE5LjUxNTIyMyA4LjY0NDc2OCAxOC4yNTg2NTYgOS4wMzYzMyBDIDE3LjAwMjA4OSA5LjQyNzg5MiAxNS44MTE5OCAxMC4wMDczNTggMTQuNzI4OCAxMC43NTUwMjMgQyAxMy42NDU2MiAxMS41MDI2ODggMTIuNjgxNzkxIDEyLjQwOTk3OSAxMS44NzAwODkgMTMuNDQ2MDM5IEMgMTEuMDU4Mzg4IDE0LjQ4MjEgMTAuNDA4MTIxIDE1LjYzNTA1MSA5Ljk0MTQwNCAxNi44NjU2ODMgQyA5LjQ3NDY4NyAxOC4wOTYzMTUgOS4xOTY4NyAxOS4zOTA1MTggOS4xMTc0MDIgMjAuNzA0Mjc4IEMgOS4wMzc5MzUgMjIuMDE4MDM4IDkuMTU3NzI3IDIzLjMzNjI5MiA5LjQ3MjcwNSAyNC42MTQyMDggQyA5Ljc4NzY4MyAyNS44OTIxMjQgMTAuMjk0MjM1IDI3LjExNTA1IDEwLjk3NTEzNSAyOC4yNDEzOTYgQyAxMS42NTYwMzYgMjkuMzY3NzQzIDEyLjUwMzQ3NiAzMC4zODQ1OTUgMTMuNDg4NjM3IDMxLjI1NzM3MSBDIDE0LjQ3Mzc5OCAzMi4xMzAxNDcgMTUuNTg1Mzg0IDMyLjg0ODg0MSAxNi43ODU1OTEgMzMuMzg5MDEgQyAxNy45ODU3OTggMzMuOTI5MTggMTkuMjYwODY2IDM0LjI4NDYzMSAyMC41Njc0MzEgMzQuNDQzMjc3IEMgMjEuODczOTk2IDM0LjYwMTkyMyAyMy4xOTcwNzggMzQuNTYxOTQzIDI0LjQ5MTY4IDM0LjMyNDY5OSBDIDI1Ljc4NjI4MyAzNC4wODc0NTQgMjcuMDM3NTYyIDMzLjY1NTY2NCAyOC4yMDI5NjUgMzMuMDQ0MDEzIEMgMjkuMzY4MzY4IDMyLjQzMjM2MiAzMC40MzQ1MzIgMzEuNjQ3ODY0IDMxLjM2NTE5OSAzMC43MTcxOTcgQyAzMi4yOTU4NjUgMjkuNzg2NTMxIDMzLjA4MDM2MyAyOC43MjAzNjcgMzMuNjkyMDE0IDI3LjU1NDk2NCBDIDM0LjMwMzY2NSAyNi4zODk1NiAzNC43MzU0NTQgMjUuMTM4MjgxIDM0Ljk3MjY5OSAyMy44NDM2NzggQyAzNS4yMDk5NDQgMjIuNTQ5MDc2IDM1LjI0OTkyMyAyMS4yMjU5OTQgMzUuMDkxMjc3IDE5LjkxOTQyOSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS4wOTEyNzcgMTkuOTE5NDI5IEMgMzQuNzA3MTM4IDE2Ljc1NTc2IDMzLjE3Njc5NiAxMy44Mzk5MzcgMzAuNzkxMzYzIDExLjcyNjYyOSBDIDI4LjQwNTkzIDkuNjEzMzIgMjUuMzI2OTA0IDguNDQ1NiAyMi4xMzk5OTkgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzUuMDkxMjc3IDE5LjkxOTQyOSB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2I5MmRiNDE3MDZkNDkyNTkyOTc5ZDkxZWRmNGNjOGEuc2V0SWNvbihkaXZfaWNvbl84MjQ0ZWFjODE5MGQ0ZDc2YWE2Y2Q2ZDk5MTlkNzhiYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODhlYzY0M2IzMzE0ZDA1OWY3MzMzYWFmZjYwZTZlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZWJmOGViZGEyMzU0ZTMwYmVjNGI5MTk4NDQyODc3YyA9ICQoYDxkaXYgaWQ9Imh0bWxfY2ViZjhlYmRhMjM1NGUzMGJlYzRiOTE5ODQ0Mjg3N2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXB1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXB1ZHVuZ3VuPC9hPjxicj5jb25zb25hbnRzOiAyMDxicj52b3dlbHM6IDY8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jODhlYzY0M2IzMzE0ZDA1OWY3MzMzYWFmZjYwZTZlMS5zZXRDb250ZW50KGh0bWxfY2ViZjhlYmRhMjM1NGUzMGJlYzRiOTE5ODQ0Mjg3N2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jYjkyZGI0MTcwNmQ0OTI1OTI5NzlkOTFlZGY0Y2M4YS5iaW5kUG9wdXAocG9wdXBfYzg4ZWM2NDNiMzMxNGQwNTlmNzMzM2FhZmY2MGU2ZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8xYjE1YzA1MjQ4M2M0N2YzOGFiMTEyNzI0MjUyYzVhYSA9IEwubWFya2VyKAogICAgICAgICAgICBbMzQuOTQwMywgLTk4LjkwNDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTQ3ODI5OTk2NjU2NGE0MDhiMzdlOTQ2NzM4MTMzOWEpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzZkMDBiZDA1ZTU0ZTQyNWU4YWY0Y2Y3YmYzZTI4ZmRhID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjM0NDYyMyA4LjQ0NTYgMTguNTY4NDIzIDguODE2MjA1IDE2LjkyMjg0OCA5LjUzNDE2MiBDIDE1LjI3NzI3NCAxMC4yNTIxMTkgMTMuNzk3NDc4IDExLjMwMjA5IDEyLjU3NjMxMiAxMi42MTgxOTUgQyAxMS4zNTUxNDUgMTMuOTM0Mjk5IDEwLjQxODY5NSAxNS40ODg0MjIgOS44MjU3MiAxNy4xODMwNDggQyA5LjIzMjc0NSAxOC44Nzc2NzQgOC45OTU5MTIgMjAuNjc2NjAzIDkuMTMwMDggMjIuNDY2OTYgQyA5LjI2NDI0OSAyNC4yNTczMTYgOS43NjY1NTQgMjYuMDAwODU1IDEwLjYwNTQ3OCAyNy41ODgxNzUgQyAxMS40NDQ0MDEgMjkuMTc1NDk1IDEyLjYwMjAyMiAzMC41NzI2ODggMTQuMDA1NzA0IDMxLjY5MjA4NyBDIDE1LjQwOTM4NiAzMi44MTE0ODYgMTcuMDI5MTQ0IDMzLjYyOTE3OCAxOC43NjMzNDUgMzQuMDkzODU1IEMgMjAuNDk3NTQ2IDM0LjU1ODUzMyAyMi4zMDkxNDMgMzQuNjYwMjY5IDI0LjA4NDQ2NyAzNC4zOTI2ODIgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMjQuMDg0NDY3IDM0LjM5MjY4MiBDIDI3LjMzODAzMSAzMy45MDIyODYgMzAuMjg4NjExIDMyLjE5ODc2NyAzMi4zNDAwODggMjkuNjI2Mjk2IEMgMzQuMzkxNTY0IDI3LjA1MzgyNCAzNS4zOTU4MDYgMjMuNzk4MTUyIDM1LjE0OTkxOSAyMC41MTcwMzkgQyAzNC45MDQwMzMgMTcuMjM1OTI1IDMzLjQyNTc3NSAxNC4xNjYyOTIgMzEuMDEzODA0IDExLjkyODMxIEMgMjguNjAxODMzIDkuNjkwMzI5IDI1LjQzMDMxMSA4LjQ0NTU5OSAyMi4xMzk5OTggOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMjQuMDg0NDY3IDM0LjM5MjY4MiB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMWIxNWMwNTI0ODNjNDdmMzhhYjExMjcyNDI1MmM1YWEuc2V0SWNvbihkaXZfaWNvbl82ZDAwYmQwNWU1NGU0MjVlOGFmNGNmN2JmM2UyOGZkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYTE5NWY3MDMzMDQ0YjgxYWE1NDc3NWQ4OTZmNDIzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOTg3ZTJkM2I3Zjc0MDVmYWQ0YmJjNmVlZTJlMzJhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzk4N2UyZDNiN2Y3NDA1ZmFkNGJiYzZlZWUyZTMyYTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raW93MTI2NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaW93YTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiAyMDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhMTk1ZjcwMzMwNDRiODFhYTU0Nzc1ZDg5NmY0MjNlLnNldENvbnRlbnQoaHRtbF8zOTg3ZTJkM2I3Zjc0MDVmYWQ0YmJjNmVlZTJlMzJhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFiMTVjMDUyNDgzYzQ3ZjM4YWIxMTI3MjQyNTJjNWFhLmJpbmRQb3B1cChwb3B1cF8wYTE5NWY3MDMzMDQ0YjgxYWE1NDc3NWQ4OTZmNDIzZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzczMWM4NDg4Y2EwNTQyMTZiODE3OWFmYzk0ZWYyYWRiID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNS4wLCAxMzUuMF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9lNDc4Mjk5OTY2NTY0YTQwOGIzN2U5NDY3MzgxMzM5YSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMzVmZmM1NGZkMmZmNDZkYTg0ZGE1MTBjZGVmZDE2ZmEgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuNTU5OTc1IDguNDQ1NiAxNy4wMzcwMjEgOS4yMTA5MyAxNC44OTE4MDkgMTAuNjQ0MzE1IEMgMTIuNzQ2NTk2IDEyLjA3NzcgMTEuMDc0MDMxIDE0LjExNTcyNiAxMC4wODY2OTggMTYuNDk5MzU5IEMgOS4wOTkzNjUgMTguODgyOTkxIDguODQwOTQ1IDIxLjUwNjc3NiA5LjM0NDI4MyAyNC4wMzcyMjYgQyA5Ljg0NzYyMSAyNi41Njc2NzcgMTEuMDkwNDQ5IDI4Ljg5Mjg0NSAxMi45MTQ4MDIgMzAuNzE3MTk4IEMgMTQuNzM5MTU1IDMyLjU0MTU1MSAxNy4wNjQzMjMgMzMuNzg0Mzc5IDE5LjU5NDc3NCAzNC4yODc3MTcgQyAyMi4xMjUyMjQgMzQuNzkxMDU1IDI0Ljc0OTAwOSAzNC41MzI2MzUgMjcuMTMyNjQxIDMzLjU0NTMwMiBDIDI5LjUxNjI3NCAzMi41NTc5NjkgMzEuNTU0MyAzMC44ODU0MDQgMzIuOTg3Njg1IDI4Ljc0MDE5MSBDIDM0LjQyMTA3IDI2LjU5NDk3OSAzNS4xODY0IDI0LjA3MjAyNSAzNS4xODY0IDIxLjQ5MiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS4xODY0IDIxLjQ5MiBDIDM1LjE4NjQgMTguMDMzMjA3IDMzLjgxMDkzNCAxNC43MTI1MzggMzEuMzY1MTk4IDEyLjI2NjgwMiBDIDI4LjkxOTQ2MiA5LjgyMTA2NiAyNS41OTg3OTMgOC40NDU2IDIyLjE0IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDM1LjE4NjQgMjEuNDkyIHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83MzFjODQ4OGNhMDU0MjE2YjgxNzlhZmM5NGVmMmFkYi5zZXRJY29uKGRpdl9pY29uXzM1ZmZjNTRmZDJmZjQ2ZGE4NGRhNTEwY2RlZmQxNmZhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4ZTAxMzIyYmNmOTRlZjliODQ3M2I3ODMyMTk1MGFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlMzUwOTE0M2Q4MjQwNWM4YzFjNDkzZTgwNGFmNzA5ID0gJChgPGRpdiBpZD0iaHRtbF9iZTM1MDkxNDNkODI0MDVjOGMxYzQ5M2U4MDRhZjcwOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkphcGFuZXNlPC9hPjxicj5jb25zb25hbnRzOiAxNTxicj52b3dlbHM6IDU8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOGUwMTMyMmJjZjk0ZWY5Yjg0NzNiNzgzMjE5NTBhZi5zZXRDb250ZW50KGh0bWxfYmUzNTA5MTQzZDgyNDA1YzhjMWM0OTNlODA0YWY3MDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MzFjODQ4OGNhMDU0MjE2YjgxNzlhZmM5NGVmMmFkYi5iaW5kUG9wdXAocG9wdXBfYjhlMDEzMjJiY2Y5NGVmOWI4NDczYjc4MzIxOTUwYWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lMGMwMjI5YjU4ZTY0NzNmOTZlODdkZjMxN2VhMDViZSA9IEwubWFya2VyKAogICAgICAgICAgICBbNy4xNTM0NSwgMy42NzIyNV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9lNDc4Mjk5OTY2NTY0YTQwOGIzN2U5NDY3MzgxMzM5YSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fZjk0ZDM2NDQyM2JlNDcwMTg2MzlhNTg5ZDRkYzU2NmIgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuMDA5NTcgOC40NDU2IDE3LjkxMTIxNyA4Ljk2NzQzNyAxNi4wMjg5NTYgOS45NjUzNDggQyAxNC4xNDY2OTYgMTAuOTYzMjYgMTIuNTM3MjA4IDEyLjQwNzE5NSAxMS4zNDE2MzkgMTQuMTcwNTI5IEMgMTAuMTQ2MDY5IDE1LjkzMzg2MiA5LjQwMDQxOSAxNy45NjM0OTQgOS4xNzAwNzkgMjAuMDgxNDM1IEMgOC45Mzk3MzkgMjIuMTk5Mzc2IDkuMjMxNjQ1IDI0LjM0MTg1IDEwLjAyMDE5OCAyNi4zMjA5NjkgQyAxMC44MDg3NTEgMjguMzAwMDg5IDEyLjA3MDIwNiAzMC4wNTYyNTkgMTMuNjkzOTM5IDMxLjQzNTQ3IEMgMTUuMzE3NjcxIDMyLjgxNDY4MSAxNy4yNTQ3ODcgMzMuNzc1NDAyIDE5LjMzNTQwOCAzNC4yMzMzODIgQyAyMS40MTYwMyAzNC42OTEzNjIgMjMuNTc3NTA0IDM0LjYzMjgwOSAyNS42MzAyOCAzNC4wNjI4NTkgQyAyNy42ODMwNTYgMzMuNDkyOTA5IDI5LjU2NTMxOCAzMi40Mjg3MjQgMzEuMTEyMDAxIDMwLjk2MzYyOSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMS4xMTIwMDEgMzAuOTYzNjI5IEMgMzMuMDA2OTI3IDI5LjE2ODY2IDM0LjMyMDI4NiAyNi44NDU2NzYgMzQuODgxMzgyIDI0LjI5NjU5MiBDIDM1LjQ0MjQ3OCAyMS43NDc1MDkgMzUuMjI1OTAyIDE5LjA4Nzc2IDM0LjI1OTgwMyAxNi42NjMwMzIgQyAzMy4yOTM3MDMgMTQuMjM4MzAzIDMxLjYyMTgyOSAxMi4xNTgzOTggMjkuNDYxNDczIDEwLjY5MzY0IEMgMjcuMzAxMTE3IDkuMjI4ODgxIDI0Ljc1MDEwOSA4LjQ0NTYgMjIuMTQwMDAyIDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMxLjExMjAwMSAzMC45NjM2MjkgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2UwYzAyMjliNThlNjQ3M2Y5NmU4N2RmMzE3ZWEwNWJlLnNldEljb24oZGl2X2ljb25fZjk0ZDM2NDQyM2JlNDcwMTg2MzlhNTg5ZDRkYzU2NmIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTdhMTNiYmE2YmZiNGE3MWJiMjc2ZDYwMTczOWE2OGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzI3N2E5M2M4YmE1NGFkZjg0ZmVmYWNiYzI1ZmNlNjYgPSAkKGA8ZGl2IGlkPSJodG1sXzcyNzdhOTNjOGJhNTRhZGY4NGZlZmFjYmMyNWZjZTY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveW9ydTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WW9ydWJhPC9hPjxicj5jb25zb25hbnRzOiAxODxicj52b3dlbHM6IDExPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTdhMTNiYmE2YmZiNGE3MWJiMjc2ZDYwMTczOWE2OGMuc2V0Q29udGVudChodG1sXzcyNzdhOTNjOGJhNTRhZGY4NGZlZmFjYmMyNWZjZTY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTBjMDIyOWI1OGU2NDczZjk2ZTg3ZGYzMTdlYTA1YmUuYmluZFBvcHVwKHBvcHVwXzU3YTEzYmJhNmJmYjRhNzFiYjI3NmQ2MDE3MzlhNjhjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTllZjhiMzE4Zjg3NGQ2MGJkNmU3YzVhYzRjZGQ4NzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTQ3ODI5OTk2NjU2NGE0MDhiMzdlOTQ2NzM4MTMzOWEpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2VjYjZmZDZhNDE5YTRlNzI4YWNmMDlmY2IyYmMxYjlhID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjgwMzcyMSA4LjQ0NTYgMTcuNTA5Nzc2IDkuMDczMTUyIDE1LjQ5ODg0MiAxMC4yNjI0MTUgQyAxMy40ODc5MDggMTEuNDUxNjc4IDExLjgzMjg2MyAxMy4xNTk1NTIgMTAuNzA3MzUyIDE1LjIwNjg0OSBDIDkuNTgxODQxIDE3LjI1NDE0NiA5LjAyNjY1MyAxOS41NjY2NzEgOS4xMDAwMzggMjEuOTAxNzk4IEMgOS4xNzM0MjIgMjQuMjM2OTI0IDkuODcyNzE5IDI2LjUxMDAyNSAxMS4xMjQ1NiAyOC40ODI2MTEgQyAxMi4zNzY0MDEgMzAuNDU1MTk3IDE0LjEzNTQxOSAzMi4wNTU3NzkgMTYuMjE3MDU5IDMzLjExNjQyOCBDIDE4LjI5ODY5OSAzNC4xNzcwNzYgMjAuNjI3NTIyIDM0LjY1OTM1MiAyMi45NTkxOTEgMzQuNTEyNjU2IEMgMjUuMjkwODYgMzQuMzY1OTYgMjcuNTQwODc0IDMzLjU5NTYwNyAyOS40NzMxNjUgMzIuMjgyNDI0IEMgMzEuNDA1NDU2IDMwLjk2OTI0IDMyLjk0OTk5NyAyOS4xNjA4MTUgMzMuOTQ0NzM2IDI3LjA0Njg4NiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMy45NDQ3MzYgMjcuMDQ2ODg2IEMgMzQuODgwMzM3IDI1LjA1ODYzMiAzNS4yOTg2MzEgMjIuODY1ODU5IDM1LjE2MDY1NiAyMC42NzI4MDkgQyAzNS4wMjI2ODEgMTguNDc5NzU5IDM0LjMzMjg1OCAxNi4zNTY3MDMgMzMuMTU1NDQgMTQuNTAxMzg5IEMgMzEuOTc4MDIxIDEyLjY0NjA3NSAzMC4zNTA3MzUgMTEuMTE3OTUxIDI4LjQyNTE1MSAxMC4wNTkzNTIgQyAyNi40OTk1NjcgOS4wMDA3NTQgMjQuMzM3Mzg2IDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy45NDQ3MzYgMjcuMDQ2ODg2IHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81OWVmOGIzMThmODc0ZDYwYmQ2ZTdjNWFjNGNkZDg3NS5zZXRJY29uKGRpdl9pY29uX2VjYjZmZDZhNDE5YTRlNzI4YWNmMDlmY2IyYmMxYjlhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwOTllODUwZmFjNjQzZTc5NjAyM2MyYmRmNmI4NTIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0N2UyMjY1YWM4NjQzZDY5MmE2Mzk1OTQ2ZDQxZjEzID0gJChgPGRpdiBpZD0iaHRtbF9mNDdlMjI2NWFjODY0M2Q2OTJhNjM5NTk0NmQ0MWYxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Zpbm4xMzE4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkZpbm5pc2g8L2E+PGJyPmNvbnNvbmFudHM6IDE3PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwOTllODUwZmFjNjQzZTc5NjAyM2MyYmRmNmI4NTIzLnNldENvbnRlbnQoaHRtbF9mNDdlMjI2NWFjODY0M2Q2OTJhNjM5NTk0NmQ0MWYxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU5ZWY4YjMxOGY4NzRkNjBiZDZlN2M1YWM0Y2RkODc1LmJpbmRQb3B1cChwb3B1cF81MDk5ZTg1MGZhYzY0M2U3OTYwMjNjMmJkZjZiODUyMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2RhZjZhMDc0MjM3MTQ3NDU5MmFlYjlhYWI4OTEzNWFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxOS42Mjk3LCAtMTU1LjQzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2U0NzgyOTk5NjY1NjRhNDA4YjM3ZTk0NjczODEzMzlhKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl84ZTllNTFlOTBjYjE0YWExYjEyYTZhYTc0MzdkNWE1MCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC4wMjc5NTQgOC40NDU2IDE3Ljk0NzE1OSA4Ljk1ODQ3IDE2LjA3NzAzNSA5LjkzOTk4NyBDIDE0LjIwNjkxMiAxMC45MjE1MDMgMTIuNjAyODAyIDEyLjM0MjYyMSAxMS40MDMwMjMgMTQuMDgwOCBDIDEwLjIwMzI0NCAxNS44MTg5OCA5LjQ0MzMwMiAxNy44MjI3ODQgOS4xODg3MjMgMTkuOTE5NDMxIEMgOC45MzQxNDQgMjIuMDE2MDc4IDkuMTkyNDYzIDI0LjE0MzUyMSA5Ljk0MTQwNCAyNi4xMTgzMTggQyAxMC42OTAzNDYgMjguMDkzMTE1IDExLjkwNzc0OCAyOS44NTY4MjYgMTMuNDg4NjM3IDMxLjI1NzM3MSBDIDE1LjA2OTUyNyAzMi42NTc5MTcgMTYuOTY3MTIgMzMuNjUzODUgMTkuMDE3NzkzIDM0LjE1OTI5NiBDIDIxLjA2ODQ2NyAzNC42NjQ3NDEgMjMuMjExNTM2IDM0LjY2NDc0MSAyNS4yNjIyMDkgMzQuMTU5Mjk1IEMgMjcuMzEyODgzIDMzLjY1Mzg0OSAyOS4yMTA0NzYgMzIuNjU3OTE1IDMwLjc5MTM2NSAzMS4yNTczNjkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzAuNzkxMzY1IDMxLjI1NzM2OSBDIDMyLjc3Mjc4NSAyOS41MDE5ODQgMzQuMTczNzkyIDI3LjE4NDQzNSAzNC44MDcyOTYgMjQuNjE0MjA2IEMgMzUuNDQwOCAyMi4wNDM5NzcgMzUuMjc3Mjg4IDE5LjM0MDgwOSAzNC4zMzg1OTUgMTYuODY1NjgxIEMgMzMuMzk5OTAyIDE0LjM5MDU1MyAzMS43Mjk3NiAxMi4yNTg3NzQgMjkuNTUxMTk4IDEwLjc1NTAyMiBDIDI3LjM3MjYzNiA5LjI1MTI3IDI0Ljc4NzE0NyA4LjQ0NTYgMjIuMTM5OTk4IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMwLjc5MTM2NSAzMS4yNTczNjkgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2RhZjZhMDc0MjM3MTQ3NDU5MmFlYjlhYWI4OTEzNWFjLnNldEljb24oZGl2X2ljb25fOGU5ZTUxZTkwY2IxNGFhMWIxMmE2YWE3NDM3ZDVhNTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmNmOTFmMzhlZDUwNDE3ZWJkYzU5YTU5OWY5MDA3MWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQ1OTdhMjJlNTljNDk1ZjlhMTE4OWFkN2JlNzIxY2UgPSAkKGA8ZGl2IGlkPSJodG1sX2ZkNTk3YTIyZTU5YzQ5NWY5YTExODlhZDdiZTcyMWNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaGF3YTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SGF3YWlpYW48L2E+PGJyPmNvbnNvbmFudHM6IDg8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmNmOTFmMzhlZDUwNDE3ZWJkYzU5YTU5OWY5MDA3MWYuc2V0Q29udGVudChodG1sX2ZkNTk3YTIyZTU5YzQ5NWY5YTExODlhZDdiZTcyMWNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGFmNmEwNzQyMzcxNDc0NTkyYWViOWFhYjg5MTM1YWMuYmluZFBvcHVwKHBvcHVwX2JjZjkxZjM4ZWQ1MDQxN2ViZGM1OWE1OTlmOTAwNzFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZDFkZDU0NzkzZmQ3NDM1MjliNTU4NDJlYTM1MjJkYjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTQ3ODI5OTk2NjU2NGE0MDhiMzdlOTQ2NzM4MTMzOWEpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2NiOWM0MWI4YjY2YzQzYTM5Zjc1M2U3YzI3Y2RmZDFjID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjkwNzkxNiA4LjQ0NTYgMTcuNzEyNzM2IDkuMDE4NDI0IDE1Ljc2NTI1MiAxMC4xMDkwNjggQyAxMy44MTc3NjggMTEuMTk5NzExIDEyLjE4MjM3NiAxMi43NzIxMSAxMS4wMTYxMTYgMTQuNjc1Mjc0IEMgOS44NDk4NTUgMTYuNTc4NDM5IDkuMTkxMjkgMTguNzQ5NDM3IDkuMTAzNjU4IDIwLjk3OTggQyA5LjAxNjAyNyAyMy4yMTAxNjMgOS41MDIyMjcgMjUuNDI2MTM5IDEwLjUxNTU3MiAyNy40MTQ5NDEgQyAxMS41Mjg5MTcgMjkuNDAzNzQyIDEzLjAzNTg5OCAzMS4wOTk2MDUgMTQuODkxODA3IDMyLjMzOTY4NCBDIDE2Ljc0NzcxNyAzMy41Nzk3NjQgMTguODkxMTg3IDM0LjMyMzA1NSAyMS4xMTYzOSAzNC40OTgxODIgQyAyMy4zNDE1OTMgMzQuNjczMzEgMjUuNTc0OTQ5IDM0LjI3NDQ4MyAyNy42MDIwMDEgMzMuMzQgQyAyOS42MjkwNTMgMzIuNDA1NTE2IDMxLjM4Mjc3MiAzMC45NjYyNzcgMzIuNjk0NzU4IDI5LjE2MDQ4MyBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi42OTQ3NTggMjkuMTYwNDgzIEMgMzQuMTA4ODcgMjcuMjE0MTI2IDM0Ljk1NzQyMyAyNC45MTQwMjQgMzUuMTQ2MTgyIDIyLjUxNTYxMSBDIDM1LjMzNDk0MiAyMC4xMTcxOTggMzQuODU2NjUyIDE3LjcxMjY3IDMzLjc2NDQyOSAxNS41NjkwNiBDIDMyLjY3MjIwNSAxMy40MjU0NSAzMS4wMDgwMzQgMTEuNjI1MTU5IDI4Ljk1NjcyNyAxMC4zNjgxMTcgQyAyNi45MDU0MjEgOS4xMTEwNzQgMjQuNTQ1ODMyIDguNDQ1NiAyMi4xNDAwMDIgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzIuNjk0NzU4IDI5LjE2MDQ4MyB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDFkZDU0NzkzZmQ3NDM1MjliNTU4NDJlYTM1MjJkYjcuc2V0SWNvbihkaXZfaWNvbl9jYjljNDFiOGI2NmM0M2EzOWY3NTNlN2MyN2NkZmQxYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMzAwM2I0N2Q0ZmM0NTNjODVjMmMxMjA0ZTUzZDM3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZGM4NDE5ZjBjYjk0N2RhYmMyMzZlNzA5MTk4MDM5ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWRjODQxOWYwY2I5NDdkYWJjMjM2ZTcwOTE5ODAzOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9odW5nMTI3NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IdW5nYXJpYW48L2E+PGJyPmNvbnNvbmFudHM6IDI2PGJyPnZvd2VsczogMTQ8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMzAwM2I0N2Q0ZmM0NTNjODVjMmMxMjA0ZTUzZDM3Ny5zZXRDb250ZW50KGh0bWxfZWRjODQxOWYwY2I5NDdkYWJjMjM2ZTcwOTE5ODAzOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMWRkNTQ3OTNmZDc0MzUyOWI1NTg0MmVhMzUyMmRiNy5iaW5kUG9wdXAocG9wdXBfMjMwMDNiNDdkNGZjNDUzYzg1YzJjMTIwNGU1M2QzNzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jNDIxM2E1MDAzZjI0ZTMwYjU2MTZiODcxZDdlMWRlNiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9lNDc4Mjk5OTY2NTY0YTQwOGIzN2U5NDY3MzgxMzM5YSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYmQwNzBmZmU3MDIwNDczY2JlMjI0ODQ1MjYzMWVmZWMgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuNzMwNTQ0IDguNDQ1NiAxOS4zMzAzNTcgOC42NzQwMDQgMTcuOTkzOTY2IDkuMTIxOTE3IEMgMTYuNjU3NTc1IDkuNTY5ODMgMTUuNDAyNTU4IDEwLjIzMTM2MSAxNC4yNzc3ODcgMTEuMDgwNzQ4IEMgMTMuMTUzMDE3IDExLjkzMDEzNSAxMi4xNzMyODggMTIuOTU2MjA3IDExLjM3Njc1MyAxNC4xMTkwMDQgQyAxMC41ODAyMTggMTUuMjgxODAyIDkuOTc3MzU0IDE2LjU2NjAzMiA5LjU5MTYzOCAxNy45MjE2ODMgQyA5LjIwNTkyMiAxOS4yNzczMzQgOS4wNDI0MjcgMjAuNjg2NTc2IDkuMTA3NTIxIDIyLjA5NDUyOCBDIDkuMTcyNjE0IDIzLjUwMjQ4IDkuNDY1NDQgMjQuODkwNjI1IDkuOTc0NTk0IDI2LjIwNDkwNCBDIDEwLjQ4Mzc0OSAyNy41MTkxODIgMTEuMjAyNTM1IDI4Ljc0MjMwOSAxMi4xMDI5NjIgMjkuODI2NjUxIEMgMTMuMDAzMzg4IDMwLjkxMDk5NCAxNC4wNzM2MTIgMzEuODQyMjkgMTUuMjcxOTU2IDMyLjU4NDI3MyBDIDE2LjQ3MDI5OSAzMy4zMjYyNTYgMTcuNzgxMDAyIDMzLjg2OTE2NyAxOS4xNTMwMiAzNC4xOTE4NjIgQyAyMC41MjUwMzggMzQuNTE0NTU4IDIxLjk0MDMyNyAzNC42MTI3OTUgMjMuMzQzNzcgMzQuNDgyNzQ2IEMgMjQuNzQ3MjE0IDM0LjM1MjY5OCAyNi4xMjAzNTQgMzMuOTk2MDc1IDI3LjQwOTcxNiAzMy40MjY3NjYgQyAyOC42OTkwNzcgMzIuODU3NDU4IDI5Ljg4NzcwMyAzMi4wODI5NSAzMC45MjkzMDMgMzEuMTMzNDA2IEMgMzEuOTcwOTA0IDMwLjE4Mzg2MSAzMi44NTE3OCAyOS4wNzE3NjggMzMuNTM3NjI3IDI3Ljg0MDQzNiBDIDM0LjIyMzQ3NSAyNi42MDkxMDQgMzQuNzA1Mjc0IDI1LjI3NDcyNiAzNC45NjQyNiAyMy44ODkyNjkgQyAzNS4yMjMyNDcgMjIuNTAzODEyIDM1LjI1NjAxNiAyMS4wODU0OTYgMzUuMDYxMjkxIDE5LjY4OTU1NiBDIDM0Ljg2NjU2NSAxOC4yOTM2MTYgMzQuNDQ2OTA3IDE2LjkzODQxMiAzMy44MTg2NTggMTUuNjc2NzE4IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMzLjgxODY1OCAxNS42NzY3MTggQyAzMi43MzcxNjMgMTMuNTA0Nzg0IDMxLjA3MDkyNSAxMS42NzcwMDggMjkuMDA4MDQ0IDEwLjM5OTcyNyBDIDI2Ljk0NTE2MiA5LjEyMjQ0NSAyNC41NjYyOTggOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy44MTg2NTggMTUuNjc2NzE4IHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jNDIxM2E1MDAzZjI0ZTMwYjU2MTZiODcxZDdlMWRlNi5zZXRJY29uKGRpdl9pY29uX2JkMDcwZmZlNzAyMDQ3M2NiZTIyNDg0NTI2MzFlZmVjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIwMzFlZGYwOTc1NzQ4MDFhYmY2MWY2YzliNDZjNjNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxZWExODEyZGIxYjQ4YWNhZTA5MGVhNmY2OTZmZGM4ID0gJChgPGRpdiBpZD0iaHRtbF83MWVhMTgxMmRiMWI0OGFjYWUwOTBlYTZmNjk2ZmRjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdlb3JnaWFuPC9hPjxicj5jb25zb25hbnRzOiAyODxicj52b3dlbHM6IDY8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMDMxZWRmMDk3NTc0ODAxYWJmNjFmNmM5YjQ2YzYzZi5zZXRDb250ZW50KGh0bWxfNzFlYTE4MTJkYjFiNDhhY2FlMDkwZWE2ZjY5NmZkYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNDIxM2E1MDAzZjI0ZTMwYjU2MTZiODcxZDdlMWRlNi5iaW5kUG9wdXAocG9wdXBfMjAzMWVkZjA5NzU3NDgwMWFiZjYxZjZjOWI0NmM2M2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82ODI0MjcwNTBlYWI0MDZlOWE5MWEyMzY5ZGJhNmNiYyA9IEwubWFya2VyKAogICAgICAgICAgICBbMTEuNzA4MTgyLCAzOS41NDM0NTZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTQ3ODI5OTk2NjU2NGE0MDhiMzdlOTQ2NzM4MTMzOWEpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2M2YzNiYTM2MmIyMzRlODE5NTBkNTE1YTE1MjE0OWY5ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjc1MjQwNCA4LjQ0NTYgMTkuMzczNjUxIDguNjY2OTc0IDE4LjA1NTgwMSA5LjEwMTM2NCBDIDE2LjczNzk1MSA5LjUzNTc1MyAxNS40OTc4MDEgMTAuMTc3NjIxIDE0LjM4MjE3OCAxMS4wMDI3MzIgQyAxMy4yNjY1NTQgMTEuODI3ODQzIDEyLjI4OTY3OCAxMi44MjU2NzkgMTEuNDg4NDMyIDEzLjk1ODU2NCBDIDEwLjY4NzE4NyAxNS4wOTE0NDkgMTAuMDcxNzg2IDE2LjM0NDk0NCA5LjY2NTQ2NiAxNy42NzE3MTcgQyA5LjI1OTE0NyAxOC45OTg0OSA5LjA2NzA4NyAyMC4zODE2MzEgOS4wOTY1MzkgMjEuNzY4OTE1IEMgOS4xMjU5OTEgMjMuMTU2MTk4IDkuMzc2NTggMjQuNTI5OTQyIDkuODM4ODQ0IDI1LjgzODI3NSBDIDEwLjMwMTEwNyAyNy4xNDY2MDggMTAuOTY5MTUzIDI4LjM3Mjg1NCAxMS44MTc3NTggMjkuNDcwNzEzIEMgMTIuNjY2MzYyIDMwLjU2ODU3MiAxMy42ODQ3MDggMzEuNTI0MDQ5IDE0LjgzNDM0NSAzMi4zMDEwNjggQyAxNS45ODM5ODIgMzMuMDc4MDg3IDE3LjI1MDI1NSAzMy42NjY3NDMgMTguNTg1MzU0IDM0LjA0NDgxIEMgMTkuOTIwNDUzIDM0LjQyMjg3NyAyMS4zMDczNTkgMzQuNTg1NTM2IDIyLjY5MzcwNSAzNC41MjY2NDUgQyAyNC4wODAwNTEgMzQuNDY3NzU0IDI1LjQ0ODE2NiAzNC4xODgwNjMgMjYuNzQ2MzkyIDMzLjY5ODEzNCBDIDI4LjA0NDYxOSAzMy4yMDgyMDUgMjkuMjU2NDEgMzIuNTE0MjgyIDMwLjMzNjAwOSAzMS42NDI1NjYgQyAzMS40MTU2MDkgMzAuNzcwODUgMzIuMzQ5MjU2IDI5LjczMjQ1MyAzMy4xMDE2OTggMjguNTY2NTgzIEMgMzMuODU0MTQxIDI3LjQwMDcxMyAzNC40MTU3ODcgMjYuMTIyMjMgMzQuNzY1NDMxIDI0Ljc3OTQwNyBDIDM1LjExNTA3NSAyMy40MzY1ODQgMzUuMjQ4MjU5IDIyLjA0NjUzOSAzNS4xNTk5NTYgMjAuNjYxNzU1IEMgMzUuMDcxNjUyIDE5LjI3Njk3MSAzNC43NjI5ODYgMTcuOTE1MTAxIDM0LjI0NTYxMiAxNi42Mjc1NjYgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzQuMjQ1NjEyIDE2LjYyNzU2NiBDIDMzLjI3NDg0MiAxNC4yMTE3MTIgMzEuNjAyNzY0IDEyLjE0MDg4MyAyOS40NDU2NTUgMTAuNjgyOTMyIEMgMjcuMjg4NTQ2IDkuMjI0OTgxIDI0Ljc0MzYwMiA4LjQ0NTYgMjIuMTQgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzQuMjQ1NjEyIDE2LjYyNzU2NiB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjgyNDI3MDUwZWFiNDA2ZTlhOTFhMjM2OWRiYTZjYmMuc2V0SWNvbihkaXZfaWNvbl9jNmMzYmEzNjJiMjM0ZTgxOTUwZDUxNWExNTIxNDlmOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MDdkZjRhYmQ3N2E0NDJlYTY2MWJhOWJmNWNhZDU5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOTczYjJhYWNhYWM0Njg1YWVhN2I4Y2VmZjdiMzY4OSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTk3M2IyYWFjYWFjNDY4NWFlYTdiOGNlZmY3YjM2ODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hbWhhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BbWhhcmljPC9hPjxicj5jb25zb25hbnRzOiAzMDxicj52b3dlbHM6IDc8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MDdkZjRhYmQ3N2E0NDJlYTY2MWJhOWJmNWNhZDU5YS5zZXRDb250ZW50KGh0bWxfYTk3M2IyYWFjYWFjNDY4NWFlYTdiOGNlZmY3YjM2ODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ODI0MjcwNTBlYWI0MDZlOWE5MWEyMzY5ZGJhNmNiYy5iaW5kUG9wdXAocG9wdXBfNjA3ZGY0YWJkNzdhNDQyZWE2NjFiYTliZjVjYWQ1OWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jZTBlZmExYTk3ZTI0OTY2YTRiMDcwYWY0NWY2ZmE4YSA9IEwubWFya2VyKAogICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTQ3ODI5OTk2NjU2NGE0MDhiMzdlOTQ2NzM4MTMzOWEpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzNjZjgyYjNhOWQwNDQ0YmE4MWVmYThkMTQ1MDYxNGM5ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjY1IDguNDQ1NiAxOS4xNzA5NTEgOC43MDA4NTQgMTcuNzY3MTQgOS4yMDAyNjkgQyAxNi4zNjMzMjkgOS42OTk2ODQgMTUuMDU1MzkxIDEwLjQzNTkxNyAxMy45MDAxNzYgMTEuMzc2OTY5IEMgMTIuNzQ0OTYxIDEyLjMxODAyMSAxMS43NTk0NSAxMy40NTAwNTggMTAuOTg2NDc4IDE0LjcyMzg3NyBDIDEwLjIxMzUwNSAxNS45OTc2OTYgOS42NjQ0MzUgMTcuMzk0NTcxIDkuMzYzMTMgMTguODUzNzg5IEMgOS4wNjE4MjYgMjAuMzEzMDA3IDkuMDEyNzE4IDIxLjgxMzExNiA5LjIxNzk0IDIzLjI4ODkxNiBDIDkuNDIzMTYxIDI0Ljc2NDcxNiA5Ljg3OTY5NiAyNi4xOTQ1MTEgMTAuNTY3NzAyIDI3LjUxNjE1OCBDIDExLjI1NTcwOCAyOC44Mzc4MDQgMTIuMTY1MDcgMzAuMDMxODczIDEzLjI1NjI2NCAzMS4wNDY0NjQgQyAxNC4zNDc0NTggMzIuMDYxMDU2IDE1LjYwNDQ0MyAzMi44ODEyNTYgMTYuOTcyNTg2IDMzLjQ3MTQxNSBDIDE4LjM0MDcyOCAzNC4wNjE1NzQgMTkuNzk5OTE1IDM0LjQxMzAxNiAyMS4yODY3MjUgMzQuNTEwNDY3IEMgMjIuNzczNTM2IDM0LjYwNzkxNyAyNC4yNjYxMTIgMzQuNDQ5OTQ0IDI1LjY5OTU4MSAzNC4wNDM0MTIgQyAyNy4xMzMwNSAzMy42MzY4OCAyOC40ODYzMzggMzIuOTg3NzY2IDI5LjcwMDYyOCAzMi4xMjQyODQgQyAzMC45MTQ5MTcgMzEuMjYwODAxIDMxLjk3MjM1NyAzMC4xOTU2NDQgMzIuODI2OTg2IDI4Ljk3NTEwNyBDIDMzLjY4MTYxNSAyNy43NTQ1NyAzNC4zMjA4NyAyNi4zOTY1OTYgMzQuNzE2OTY2IDI0Ljk2MDIwOSBDIDM1LjExMzA2MyAyMy41MjM4MjEgMzUuMjYwMTc4IDIyLjAzMDEzNiAzNS4xNTE5MTcgMjAuNTQ0MDc0IEMgMzUuMDQzNjU3IDE5LjA1ODAxMiAzNC42ODE2MTIgMTcuNjAxNDE5IDM0LjA4MTUxOSAxNi4yMzc2MDQgQyAzMy40ODE0MjYgMTQuODczNzkgMzIuNjUyMTA3IDEzLjYyMjgwMyAzMS42Mjk2MDYgMTIuNTM5MDE2IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMxLjYyOTYwNiAxMi41MzkwMTYgQyAzMC40MTAwNzUgMTEuMjQ2Mzg4IDI4LjkzOTE5MSAxMC4yMTY0NjUgMjcuMzA3NDE0IDkuNTEyNTg1IEMgMjUuNjc1NjM2IDguODA4NzA1IDIzLjkxNzExNiA4LjQ0NTYgMjIuMTM5OTk5IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMxLjYyOTYwNiAxMi41MzkwMTYgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NlMGVmYTFhOTdlMjQ5NjZhNGIwNzBhZjQ1ZjZmYThhLnNldEljb24oZGl2X2ljb25fM2NmODJiM2E5ZDA0NDRiYTgxZWZhOGQxNDUwNjE0YzkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjA0ZWFlNWYwYTA0NDVlYzgwMzhhZjFjN2EyZjk3YTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjY5ZDgxYjkzZWFmNDg0ZmJjNTQwYzFhZDlhODlhNjAgPSAkKGA8ZGl2IGlkPSJodG1sX2I2OWQ4MWI5M2VhZjQ4NGZiYzU0MGMxYWQ5YTg5YTYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2FuZDEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2FuZGF3ZTwvYT48YnI+Y29uc29uYW50czogNDc8YnI+dm93ZWxzOiA3PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjA0ZWFlNWYwYTA0NDVlYzgwMzhhZjFjN2EyZjk3YTkuc2V0Q29udGVudChodG1sX2I2OWQ4MWI5M2VhZjQ4NGZiYzU0MGMxYWQ5YTg5YTYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2UwZWZhMWE5N2UyNDk2NmE0YjA3MGFmNDVmNmZhOGEuYmluZFBvcHVwKHBvcHVwX2IwNGVhZTVmMGEwNDQ1ZWM4MDM4YWYxYzdhMmY5N2E5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMTZjNWVlYzM5ZTk0NGY5Y2I1M2MzZjcyMjUyZjBjODggPSBMLm1hcmtlcigKICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTQ3ODI5OTk2NjU2NGE0MDhiMzdlOTQ2NzM4MTMzOWEpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzRlMGI4YjQ3NDBjNTRlN2JhYmNiNjkwZGUwOGU0MTk3ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjYwNjE4OSA4LjQ0NTYgMTkuMDg0MzI3IDguNzE2MDg2IDE3LjY0NDQ1MiA5LjI0NDYwOCBDIDE2LjIwNDU3OCA5Ljc3MzEzMSAxNC44NjkxMjQgMTAuNTUxNDU3IDEzLjY5OTU1MSAxMS41NDM3NjUgQyAxMi41Mjk5NzkgMTIuNTM2MDczIDExLjU0NDUxIDEzLjcyNjkwNCAxMC43ODg0OTcgMTUuMDYxNDUzIEMgMTAuMDMyNDg1IDE2LjM5NjAwMSA5LjUxNzcwNyAxNy44NTM0NzYgOS4yNjc4NTYgMTkuMzY2OCBDIDkuMDE4MDA2IDIwLjg4MDEyNCA5LjAzNjk3NCAyMi40MjU3MiA5LjMyMzg4OCAyMy45MzI0NTcgQyA5LjYxMDgwMyAyNS40MzkxOTQgMTAuMTYxMTkzIDI2Ljg4MzU5NiAxMC45NDk3MjkgMjguMTk5MTkgQyAxMS43MzgyNjUgMjkuNTE0NzgzIDEyLjc1MjY2MiAzMC42ODEwNzEgMTMuOTQ2MjM1IDMxLjY0NDM3NyBDIDE1LjEzOTgwNyAzMi42MDc2ODQgMTYuNDkzOTYgMzMuMzUzMDAyIDE3Ljk0NjM3MSAzMy44NDYwMjkgQyAxOS4zOTg3ODMgMzQuMzM5MDU2IDIwLjkyNjgyNSAzNC41NzIxMTIgMjIuNDYwMTc0IDM0LjUzNDQ3MSBDIDIzLjk5MzUyMiAzNC40OTY4MjkgMjUuNTA4Mjg5IDM0LjE4OTA3NyAyNi45MzQ3NTkgMzMuNjI1Mzc3IEMgMjguMzYxMjI5IDMzLjA2MTY3NyAyOS42NzcxOCAzMi4yNTA4MTIgMzAuODIyMDQ4IDMxLjIzMDEgQyAzMS45NjY5MTUgMzAuMjA5Mzg4IDMyLjkyMjg2NCAyOC45OTQ3MzIgMzMuNjQ1ODk3IDI3LjY0MjAzMSBDIDM0LjM2ODkzIDI2LjI4OTMzMSAzNC44NDc3ODUgMjQuODE5NjYyIDM1LjA2MDQyMiAyMy4zMDA2NjMgQyAzNS4yNzMwNTggMjEuNzgxNjYzIDM1LjIxNjE2NSAyMC4yMzY5OTcgMzQuODkyMzYgMTguNzM3NzU2IEMgMzQuNTY4NTU1IDE3LjIzODUxNCAzMy45ODI4ODMgMTUuODA4MDU0IDMzLjE2MjI5OCAxNC41MTIyMDggQyAzMi4zNDE3MTMgMTMuMjE2MzYzIDMxLjI5OSAxMi4wNzUzMjEgMzAuMDgyMTQ2IDExLjE0MTU5NiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMC4wODIxNDYgMTEuMTQxNTk2IEMgMjguOTUwNTc5IDEwLjI3MzMxNCAyNy42ODQyNDQgOS41OTY0NDQgMjYuMzMzNjI5IDkuMTM3OTcxIEMgMjQuOTgzMDE1IDguNjc5NDk5IDIzLjU2NjMxMSA4LjQ0NTYgMjIuMTQwMDAyIDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMwLjA4MjE0NiAxMS4xNDE1OTYgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzE2YzVlZWMzOWU5NDRmOWNiNTNjM2Y3MjI1MmYwYzg4LnNldEljb24oZGl2X2ljb25fNGUwYjhiNDc0MGM1NGU3YmFiY2I2OTBkZTA4ZTQxOTcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2EwOThiYTYxYmYwNGY2ZDkyM2UyMWM1OGFiZDFiY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTY4NDQ4ZDEwNGViNDU4NGIxOWUxZGIwZDFhNjViNTQgPSAkKGA8ZGl2IGlkPSJodG1sXzU2ODQ0OGQxMDRlYjQ1ODRiMTllMWRiMGQxYTY1YjU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGxpbjEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGxpbmdpdDwvYT48YnI+Y29uc29uYW50czogNDM8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2EwOThiYTYxYmYwNGY2ZDkyM2UyMWM1OGFiZDFiY2Euc2V0Q29udGVudChodG1sXzU2ODQ0OGQxMDRlYjQ1ODRiMTllMWRiMGQxYTY1YjU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTZjNWVlYzM5ZTk0NGY5Y2I1M2MzZjcyMjUyZjBjODguYmluZFBvcHVwKHBvcHVwXzNhMDk4YmE2MWJmMDRmNmQ5MjNlMjFjNThhYmQxYmNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZTJmZWUzMzVmN2M4NDVkYzkxOTc1NGNkYWRjOGU0N2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ2LjM2OTksIC0xMDMuOTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTQ3ODI5OTk2NjU2NGE0MDhiMzdlOTQ2NzM4MTMzOWEpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzY5ZmVhNzhmYzJhMjQyOTU4MGFmZmY1NmI3MmNmMWVkID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjgwOTE1OCA4LjQ0NTYgMTkuNDg2MTE4IDguNjQ5MjM1IDE4LjIxNjg3MiA5LjA0OTQyNyBDIDE2Ljk0NzYyNiA5LjQ0OTYxOSAxNS43NDcwNTQgMTAuMDQxNjc1IDE0LjY1Njg5MiAxMC44MDUwMTUgQyAxMy41NjY3MzEgMTEuNTY4MzU0IDEyLjU5OTc2IDEyLjQ5NDAyNyAxMS43ODk1OTUgMTMuNTQ5ODU1IEMgMTAuOTc5NDMgMTQuNjA1NjgzIDEwLjMzNTU2OSAxNS43NzkyODcgOS44ODAzOTQgMTcuMDI5ODY5IEMgOS40MjUyMTkgMTguMjgwNDUxIDkuMTY0MDY4IDE5LjU5MzM0OSA5LjEwNjAxNyAyMC45MjI5MjQgQyA5LjA0Nzk2NyAyMi4yNTI0OTkgOS4xOTM2OTggMjMuNTgzMTYzIDkuNTM4MTQ1IDI0Ljg2ODY1NyBDIDkuODgyNTkzIDI2LjE1NDE1MSAxMC40MjE3MTcgMjcuMzc5NDA2IDExLjEzNjc3OCAyOC41MDE4MjYgQyAxMS44NTE4MzkgMjkuNjI0MjQ2IDEyLjczNDQ1MiAzMC42MzA2NzQgMTMuNzUzOTM2IDMxLjQ4NjEyMyBDIDE0Ljc3MzQyIDMyLjM0MTU3MSAxNS45MTc4MjIgMzMuMDM2MDExIDE3LjE0NzM1OSAzMy41NDUzMDIgQyAxOC4zNzY4OTcgMzQuMDU0NTkzIDE5LjY3NzE1NSAzNC4zNzI3NjQgMjEuMDAyOTMyIDM0LjQ4ODc1NSBDIDIyLjMyODcwOSAzNC42MDQ3NDUgMjMuNjY0NDYzIDM0LjUxNzE5NSAyNC45NjM3NTkgMzQuMjI5MTQ4IEMgMjYuMjYzMDU0IDMzLjk0MTEwMSAyNy41MTA2NTggMzMuNDU1OTM0IDI4LjY2MzIwMSAzMi43OTA1MTMgQyAyOS44MTU3NDMgMzIuMTI1MDkzIDMwLjg1OTcxMiAzMS4yODcyMTkgMzEuNzU4ODE2IDMwLjMwNjAxOSBDIDMyLjY1NzkxOSAyOS4zMjQ4MiAzMy40MDE2MTYgMjguMjExNzk4IDMzLjk2NDA1NCAyNy4wMDU2NDYgQyAzNC41MjY0OTIgMjUuNzk5NDk0IDM0LjkwMTA3NyAyNC41MTQzNTIgMzUuMDc0Nzg2IDIzLjE5NDg5NiBDIDM1LjI0ODQ5NiAyMS44NzU0NCAzNS4yMTkyOTQgMjAuNTM3MTM4IDM0Ljk4ODE5NiAxOS4yMjY1MTUgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzQuOTg4MTk2IDE5LjIyNjUxNSBDIDM0LjQ1NTcwMSAxNi4yMDY1ODkgMzIuODc1MTQ5IDEzLjQ2ODk5NCAzMC41MjYwNjMgMTEuNDk3ODc3IEMgMjguMTc2OTc4IDkuNTI2NzYgMjUuMjA2NTEyIDguNDQ1NiAyMi4xMzk5OTkgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzQuOTg4MTk2IDE5LjIyNjUxNSB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTJmZWUzMzVmN2M4NDVkYzkxOTc1NGNkYWRjOGU0N2Quc2V0SWNvbihkaXZfaWNvbl82OWZlYTc4ZmMyYTI0Mjk1ODBhZmZmNTZiNzJjZjFlZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYmQ1MTlhM2Y1NzQ0ZDJkYjE4NWVmMjBiZjA4MzI2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MDMxOWJkN2E0ZDE0NDYxODg3M2M4MmU2ZDVlMmRjMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNDAzMTliZDdhNGQxNDQ2MTg4NzNjODJlNmQ1ZTJkYzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sYWtvMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MYWtvdGE8L2E+PGJyPmNvbnNvbmFudHM6IDI4PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZiZDUxOWEzZjU3NDRkMmRiMTg1ZWYyMGJmMDgzMjY3LnNldENvbnRlbnQoaHRtbF80MDMxOWJkN2E0ZDE0NDYxODg3M2M4MmU2ZDVlMmRjMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UyZmVlMzM1ZjdjODQ1ZGM5MTk3NTRjZGFkYzhlNDdkLmJpbmRQb3B1cChwb3B1cF9mYmQ1MTlhM2Y1NzQ0ZDJkYjE4NWVmMjBiZjA4MzI2NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzUxN2U4NDkzZTM4MTQxMGJiZGE2Zjk1MTk0MWNkZjY5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxOC43NzU3LCAtODguOTU2N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9lNDc4Mjk5OTY2NTY0YTQwOGIzN2U5NDY3MzgxMzM5YSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYjIwYTNhYzE2ODJkNDE4Zjk1MzU4NTc4MGJhNzQyYjggPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuODUwMDQ5IDguNDQ1NiAxNy41OTk5NTYgOS4wNDg1MTEgMTUuNjE2OCAxMC4xOTM0ODYgQyAxMy42MzM2NDQgMTEuMzM4NDYyIDExLjk4NjQ2MSAxMi45ODU2NDQgMTAuODQxNDg2IDE0Ljk2ODggQyA5LjY5NjUxIDE2Ljk1MTk1NiA5LjA5MzYgMTkuMjAyMDUgOS4wOTM2IDIxLjQ5MjAwMSBDIDkuMDkzNiAyMy43ODE5NTIgOS42OTY1MTEgMjYuMDMyMDQ1IDEwLjg0MTQ4NyAyOC4wMTUyMDEgQyAxMS45ODY0NjIgMjkuOTk4MzU2IDEzLjYzMzY0NSAzMS42NDU1MzkgMTUuNjE2ODAxIDMyLjc5MDUxNCBDIDE3LjU5OTk1NyAzMy45MzU0OSAxOS44NTAwNSAzNC41Mzg0IDIyLjE0MDAwMSAzNC41Mzg0IEMgMjQuNDI5OTUyIDM0LjUzODQgMjYuNjgwMDQ2IDMzLjkzNTQ4OSAyOC42NjMyMDEgMzIuNzkwNTEzIEMgMzAuNjQ2MzU3IDMxLjY0NTUzNyAzMi4yOTM1MzkgMjkuOTk4MzU1IDMzLjQzODUxNSAyOC4wMTUxOTkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzMuNDM4NTE1IDI4LjAxNTE5OSBDIDM0LjU4MzQ5IDI2LjAzMjA0MyAzNS4xODY0IDIzLjc4MTk0OSAzNS4xODY0IDIxLjQ5MTk5OCBDIDM1LjE4NjQgMTkuMjAyMDQ3IDM0LjU4MzQ4OSAxNi45NTE5NTQgMzMuNDM4NTEzIDE0Ljk2ODc5OCBDIDMyLjI5MzUzNyAxMi45ODU2NDMgMzAuNjQ2MzU0IDExLjMzODQ2IDI4LjY2MzE5OCAxMC4xOTM0ODUgQyAyNi42ODAwNDIgOS4wNDg1MSAyNC40Mjk5NDkgOC40NDU2IDIyLjEzOTk5OCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy40Mzg1MTUgMjguMDE1MTk5IHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81MTdlODQ5M2UzODE0MTBiYmRhNmY5NTE5NDFjZGY2OS5zZXRJY29uKGRpdl9pY29uX2IyMGEzYWMxNjgyZDQxOGY5NTM1ODU3ODBiYTc0MmI4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5YTlmODU5ZTFhYzQ3ZTdiZGZjZDNlZTAyMWFhMWYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZiZDgxODI3MGFmMDRiYmZiN2VkZGMyODE5NTY2MTY1ID0gJChgPGRpdiBpZD0iaHRtbF9mYmQ4MTgyNzBhZjA0YmJmYjdlZGRjMjgxOTU2NjE2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3l1Y2ExMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPll1Y2F0ZWMgTWF5YTwvYT48YnI+Y29uc29uYW50czogMjA8YnI+dm93ZWxzOiAxMDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q5YTlmODU5ZTFhYzQ3ZTdiZGZjZDNlZTAyMWFhMWYzLnNldENvbnRlbnQoaHRtbF9mYmQ4MTgyNzBhZjA0YmJmYjdlZGRjMjgxOTU2NjE2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUxN2U4NDkzZTM4MTQxMGJiZGE2Zjk1MTk0MWNkZjY5LmJpbmRQb3B1cChwb3B1cF9kOWE5Zjg1OWUxYWM0N2U3YmRmY2QzZWUwMjFhYTFmMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



1.20. Using Elevation Data 
~~~~~~~~~~~~~~~~~~~~~~~~~~~

| ``lingtypology`` package contains data on elevation (raw data taken
  from `here <http://srtm.csi.cgiar.org/>`__) for each language from
  Glottolog.
| You can get elevation for any language using
  ``lingtypology.get_elevations`` function.

.. code:: ipython3

    m = lingtypology.LingMap(data.language)
    data['elevation'] = lingtypology.get_elevations(data.language)
    m.add_features(data.elevation, numeric=True)
    m.add_tooltips(data.elevation)
    m.legend_position = 'bottomleft'
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzI2OGFjMDU1YzMzODQ3ZTNhZWY2MmQ3ZTM0OWFjN2Y2IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8yNjhhYzA1NWMzMzg0N2UzYWVmNjJkN2UzNDlhYzdmNiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IGxlZnQ6IDIwcHg7IGJvdHRvbTogNDBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TGVnZW5kPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPHN2ZyBoZWlnaHQ9IjE2MyIgd2lkdGg9IjIwIj48bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIyMCIgeTI9IjAic3R5bGU9InN0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIiIHgyPSIyMCIgeTI9IjIic3R5bGU9InN0cm9rZTojZmVmZmZlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMiIHgyPSIyMCIgeTI9IjMic3R5bGU9InN0cm9rZTojZmRmZWZkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQiIHgyPSIyMCIgeTI9IjQic3R5bGU9InN0cm9rZTojZmNmZWZjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUiIHgyPSIyMCIgeTI9IjUic3R5bGU9InN0cm9rZTojZmFmZGZhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYiIHgyPSIyMCIgeTI9IjYic3R5bGU9InN0cm9rZTojZjlmY2Y5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjciIHgyPSIyMCIgeTI9Ijcic3R5bGU9InN0cm9rZTojZjhmY2Y4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgiIHgyPSIyMCIgeTI9Ijgic3R5bGU9InN0cm9rZTojZjdmYmY3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkiIHgyPSIyMCIgeTI9Ijkic3R5bGU9InN0cm9rZTojZjVmYWY1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwIiB4Mj0iMjAiIHkyPSIxMCJzdHlsZT0ic3Ryb2tlOiNmNGZhZjQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEiIHgyPSIyMCIgeTI9IjExInN0eWxlPSJzdHJva2U6I2YzZjlmMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMiIgeDI9IjIwIiB5Mj0iMTIic3R5bGU9InN0cm9rZTojZjFmOGYxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzIiB4Mj0iMjAiIHkyPSIxMyJzdHlsZT0ic3Ryb2tlOiNmMGY4ZjA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQiIHgyPSIyMCIgeTI9IjE0InN0eWxlPSJzdHJva2U6I2VmZjdlZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNSIgeDI9IjIwIiB5Mj0iMTUic3R5bGU9InN0cm9rZTojZWVmN2VlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2IiB4Mj0iMjAiIHkyPSIxNiJzdHlsZT0ic3Ryb2tlOiNlY2Y2ZWM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTciIHgyPSIyMCIgeTI9IjE3InN0eWxlPSJzdHJva2U6I2ViZjVlYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxOCIgeDI9IjIwIiB5Mj0iMTgic3R5bGU9InN0cm9rZTojZWFmNWVhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE4IiB4Mj0iMjAiIHkyPSIxOCJzdHlsZT0ic3Ryb2tlOiNlNmYzZTY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjAiIHgyPSIyMCIgeTI9IjIwInN0eWxlPSJzdHJva2U6I2U1ZjJlNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMSIgeDI9IjIwIiB5Mj0iMjEic3R5bGU9InN0cm9rZTojZTNmMWUzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIyIiB4Mj0iMjAiIHkyPSIyMiJzdHlsZT0ic3Ryb2tlOiNlMmYxZTI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjMiIHgyPSIyMCIgeTI9IjIzInN0eWxlPSJzdHJva2U6I2UxZjBlMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNCIgeDI9IjIwIiB5Mj0iMjQic3R5bGU9InN0cm9rZTojZGZmMGRmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI1IiB4Mj0iMjAiIHkyPSIyNSJzdHlsZT0ic3Ryb2tlOiNkZWVmZGU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjYiIHgyPSIyMCIgeTI9IjI2InN0eWxlPSJzdHJva2U6I2RkZWVkZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNyIgeDI9IjIwIiB5Mj0iMjcic3R5bGU9InN0cm9rZTojZGNlZWRjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI4IiB4Mj0iMjAiIHkyPSIyOCJzdHlsZT0ic3Ryb2tlOiNkYWVkZGE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjkiIHgyPSIyMCIgeTI9IjI5InN0eWxlPSJzdHJva2U6I2Q5ZWNkOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMCIgeDI9IjIwIiB5Mj0iMzAic3R5bGU9InN0cm9rZTojZDhlY2Q4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMxIiB4Mj0iMjAiIHkyPSIzMSJzdHlsZT0ic3Ryb2tlOiNkN2ViZDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzIiIHgyPSIyMCIgeTI9IjMyInN0eWxlPSJzdHJva2U6I2Q1ZWFkNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMyIgeDI9IjIwIiB5Mj0iMzMic3R5bGU9InN0cm9rZTojZDRlYWQ0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM0IiB4Mj0iMjAiIHkyPSIzNCJzdHlsZT0ic3Ryb2tlOiNkM2U5ZDM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzUiIHgyPSIyMCIgeTI9IjM1InN0eWxlPSJzdHJva2U6I2QxZTlkMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNiIgeDI9IjIwIiB5Mj0iMzYic3R5bGU9InN0cm9rZTojZDBlOGQwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM2IiB4Mj0iMjAiIHkyPSIzNiJzdHlsZT0ic3Ryb2tlOiNjY2U2Y2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzgiIHgyPSIyMCIgeTI9IjM4InN0eWxlPSJzdHJva2U6I2NiZTVjYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzOSIgeDI9IjIwIiB5Mj0iMzkic3R5bGU9InN0cm9rZTojY2FlNWNhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQwIiB4Mj0iMjAiIHkyPSI0MCJzdHlsZT0ic3Ryb2tlOiNjOGU0Yzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDEiIHgyPSIyMCIgeTI9IjQxInN0eWxlPSJzdHJva2U6I2M3ZTNjNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MiIgeDI9IjIwIiB5Mj0iNDIic3R5bGU9InN0cm9rZTojYzZlM2M2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQzIiB4Mj0iMjAiIHkyPSI0MyJzdHlsZT0ic3Ryb2tlOiNjNWUyYzU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDQiIHgyPSIyMCIgeTI9IjQ0InN0eWxlPSJzdHJva2U6I2MzZTJjMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NSIgeDI9IjIwIiB5Mj0iNDUic3R5bGU9InN0cm9rZTojYzJlMWMyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ2IiB4Mj0iMjAiIHkyPSI0NiJzdHlsZT0ic3Ryb2tlOiNjMWUwYzE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDciIHgyPSIyMCIgeTI9IjQ3InN0eWxlPSJzdHJva2U6I2JmZTBiZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0OCIgeDI9IjIwIiB5Mj0iNDgic3R5bGU9InN0cm9rZTojYmVkZmJlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ5IiB4Mj0iMjAiIHkyPSI0OSJzdHlsZT0ic3Ryb2tlOiNiZGRlYmQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTAiIHgyPSIyMCIgeTI9IjUwInN0eWxlPSJzdHJva2U6I2JjZGViYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MSIgeDI9IjIwIiB5Mj0iNTEic3R5bGU9InN0cm9rZTojYmFkZGJhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUyIiB4Mj0iMjAiIHkyPSI1MiJzdHlsZT0ic3Ryb2tlOiNiOWRjYjk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTMiIHgyPSIyMCIgeTI9IjUzInN0eWxlPSJzdHJva2U6I2I4ZGNiODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NCIgeDI9IjIwIiB5Mj0iNTQic3R5bGU9InN0cm9rZTojYjdkYmI3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU0IiB4Mj0iMjAiIHkyPSI1NCJzdHlsZT0ic3Ryb2tlOiNiM2Q5YjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTYiIHgyPSIyMCIgeTI9IjU2InN0eWxlPSJzdHJva2U6I2IxZDliMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NyIgeDI9IjIwIiB5Mj0iNTcic3R5bGU9InN0cm9rZTojYjBkOGIwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU4IiB4Mj0iMjAiIHkyPSI1OCJzdHlsZT0ic3Ryb2tlOiNhZmQ3YWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTkiIHgyPSIyMCIgeTI9IjU5InN0eWxlPSJzdHJva2U6I2FlZDdhZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MCIgeDI9IjIwIiB5Mj0iNjAic3R5bGU9InN0cm9rZTojYWNkNmFjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYxIiB4Mj0iMjAiIHkyPSI2MSJzdHlsZT0ic3Ryb2tlOiNhYmQ1YWI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjIiIHgyPSIyMCIgeTI9IjYyInN0eWxlPSJzdHJva2U6I2FhZDVhYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MyIgeDI9IjIwIiB5Mj0iNjMic3R5bGU9InN0cm9rZTojYThkNGE4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY0IiB4Mj0iMjAiIHkyPSI2NCJzdHlsZT0ic3Ryb2tlOiNhN2Q0YTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjUiIHgyPSIyMCIgeTI9IjY1InN0eWxlPSJzdHJva2U6I2E2ZDNhNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NiIgeDI9IjIwIiB5Mj0iNjYic3R5bGU9InN0cm9rZTojYTVkMmE1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY3IiB4Mj0iMjAiIHkyPSI2NyJzdHlsZT0ic3Ryb2tlOiNhM2QyYTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjgiIHgyPSIyMCIgeTI9IjY4InN0eWxlPSJzdHJva2U6I2EyZDFhMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2OSIgeDI9IjIwIiB5Mj0iNjkic3R5bGU9InN0cm9rZTojYTFkMGExO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcwIiB4Mj0iMjAiIHkyPSI3MCJzdHlsZT0ic3Ryb2tlOiM5ZmQwOWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzEiIHgyPSIyMCIgeTI9IjcxInN0eWxlPSJzdHJva2U6IzllY2Y5ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MiIgeDI9IjIwIiB5Mj0iNzIic3R5bGU9InN0cm9rZTojOWRjZTlkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcyIiB4Mj0iMjAiIHkyPSI3MiJzdHlsZT0ic3Ryb2tlOiM5OWNkOTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzQiIHgyPSIyMCIgeTI9Ijc0InN0eWxlPSJzdHJva2U6Izk4Y2M5ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NSIgeDI9IjIwIiB5Mj0iNzUic3R5bGU9InN0cm9rZTojOTdjYjk3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc2IiB4Mj0iMjAiIHkyPSI3NiJzdHlsZT0ic3Ryb2tlOiM5NWNiOTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzciIHgyPSIyMCIgeTI9Ijc3InN0eWxlPSJzdHJva2U6Izk0Y2E5NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3OCIgeDI9IjIwIiB5Mj0iNzgic3R5bGU9InN0cm9rZTojOTNjOTkzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc5IiB4Mj0iMjAiIHkyPSI3OSJzdHlsZT0ic3Ryb2tlOiM5MWM5OTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODAiIHgyPSIyMCIgeTI9IjgwInN0eWxlPSJzdHJva2U6IzkwYzg5MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MSIgeDI9IjIwIiB5Mj0iODEic3R5bGU9InN0cm9rZTojOGZjNzhmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgyIiB4Mj0iMjAiIHkyPSI4MiJzdHlsZT0ic3Ryb2tlOiM4ZWM3OGU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODMiIHgyPSIyMCIgeTI9IjgzInN0eWxlPSJzdHJva2U6IzhjYzY4YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NCIgeDI9IjIwIiB5Mj0iODQic3R5bGU9InN0cm9rZTojOGJjNThiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg1IiB4Mj0iMjAiIHkyPSI4NSJzdHlsZT0ic3Ryb2tlOiM4YWM1OGE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODYiIHgyPSIyMCIgeTI9Ijg2InN0eWxlPSJzdHJva2U6Izg4YzQ4ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NyIgeDI9IjIwIiB5Mj0iODcic3R5bGU9InN0cm9rZTojODdjNDg3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg4IiB4Mj0iMjAiIHkyPSI4OCJzdHlsZT0ic3Ryb2tlOiM4NmMzODY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODkiIHgyPSIyMCIgeTI9Ijg5InN0eWxlPSJzdHJva2U6Izg1YzI4NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MCIgeDI9IjIwIiB5Mj0iOTAic3R5bGU9InN0cm9rZTojODNjMjgzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkwIiB4Mj0iMjAiIHkyPSI5MCJzdHlsZT0ic3Ryb2tlOiM3ZmMwN2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTIiIHgyPSIyMCIgeTI9IjkyInN0eWxlPSJzdHJva2U6IzdlYmY3ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MyIgeDI9IjIwIiB5Mj0iOTMic3R5bGU9InN0cm9rZTojN2RiZTdkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk0IiB4Mj0iMjAiIHkyPSI5NCJzdHlsZT0ic3Ryb2tlOiM3Y2JlN2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTUiIHgyPSIyMCIgeTI9Ijk1InN0eWxlPSJzdHJva2U6IzdhYmQ3YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NiIgeDI9IjIwIiB5Mj0iOTYic3R5bGU9InN0cm9rZTojNzliZDc5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk3IiB4Mj0iMjAiIHkyPSI5NyJzdHlsZT0ic3Ryb2tlOiM3OGJjNzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTgiIHgyPSIyMCIgeTI9Ijk4InN0eWxlPSJzdHJva2U6Izc3YmI3NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5OSIgeDI9IjIwIiB5Mj0iOTkic3R5bGU9InN0cm9rZTojNzViYjc1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMCIgeDI9IjIwIiB5Mj0iMTAwInN0eWxlPSJzdHJva2U6Izc0YmE3NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDEiIHgyPSIyMCIgeTI9IjEwMSJzdHlsZT0ic3Ryb2tlOiM3M2I5NzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAyIiB4Mj0iMjAiIHkyPSIxMDIic3R5bGU9InN0cm9rZTojNzFiOTcxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMyIgeDI9IjIwIiB5Mj0iMTAzInN0eWxlPSJzdHJva2U6IzcwYjg3MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDQiIHgyPSIyMCIgeTI9IjEwNCJzdHlsZT0ic3Ryb2tlOiM2ZmI3NmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA1IiB4Mj0iMjAiIHkyPSIxMDUic3R5bGU9InN0cm9rZTojNmViNzZlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwNiIgeDI9IjIwIiB5Mj0iMTA2InN0eWxlPSJzdHJva2U6IzZjYjY2YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDciIHgyPSIyMCIgeTI9IjEwNyJzdHlsZT0ic3Ryb2tlOiM2YmI2NmI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA4IiB4Mj0iMjAiIHkyPSIxMDgic3R5bGU9InN0cm9rZTojNmFiNTZhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwOCIgeDI9IjIwIiB5Mj0iMTA4InN0eWxlPSJzdHJva2U6IzY2YjM2NjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTAiIHgyPSIyMCIgeTI9IjExMCJzdHlsZT0ic3Ryb2tlOiM2NWIyNjU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTExIiB4Mj0iMjAiIHkyPSIxMTEic3R5bGU9InN0cm9rZTojNjNiMjYzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExMiIgeDI9IjIwIiB5Mj0iMTEyInN0eWxlPSJzdHJva2U6IzYyYjE2MjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTMiIHgyPSIyMCIgeTI9IjExMyJzdHlsZT0ic3Ryb2tlOiM2MWIwNjE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE0IiB4Mj0iMjAiIHkyPSIxMTQic3R5bGU9InN0cm9rZTojNWZiMDVmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNSIgeDI9IjIwIiB5Mj0iMTE1InN0eWxlPSJzdHJva2U6IzVlYWY1ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTYiIHgyPSIyMCIgeTI9IjExNiJzdHlsZT0ic3Ryb2tlOiM1ZGFmNWQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE3IiB4Mj0iMjAiIHkyPSIxMTcic3R5bGU9InN0cm9rZTojNWNhZTVjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExOCIgeDI9IjIwIiB5Mj0iMTE4InN0eWxlPSJzdHJva2U6IzVhYWQ1YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTkiIHgyPSIyMCIgeTI9IjExOSJzdHlsZT0ic3Ryb2tlOiM1OWFkNTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIwIiB4Mj0iMjAiIHkyPSIxMjAic3R5bGU9InN0cm9rZTojNThhYzU4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMSIgeDI9IjIwIiB5Mj0iMTIxInN0eWxlPSJzdHJva2U6IzU3YWI1NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjIiIHgyPSIyMCIgeTI9IjEyMiJzdHlsZT0ic3Ryb2tlOiM1NWFiNTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIzIiB4Mj0iMjAiIHkyPSIxMjMic3R5bGU9InN0cm9rZTojNTRhYTU0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNCIgeDI9IjIwIiB5Mj0iMTI0InN0eWxlPSJzdHJva2U6IzUzYTk1MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjUiIHgyPSIyMCIgeTI9IjEyNSJzdHlsZT0ic3Ryb2tlOiM1MWE5NTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI2IiB4Mj0iMjAiIHkyPSIxMjYic3R5bGU9InN0cm9rZTojNTBhODUwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNiIgeDI9IjIwIiB5Mj0iMTI2InN0eWxlPSJzdHJva2U6IzRjYTY0YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjgiIHgyPSIyMCIgeTI9IjEyOCJzdHlsZT0ic3Ryb2tlOiM0YmE2NGI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI5IiB4Mj0iMjAiIHkyPSIxMjkic3R5bGU9InN0cm9rZTojNGFhNTRhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMCIgeDI9IjIwIiB5Mj0iMTMwInN0eWxlPSJzdHJva2U6IzQ4YTQ0ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzEiIHgyPSIyMCIgeTI9IjEzMSJzdHlsZT0ic3Ryb2tlOiM0N2E0NDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMyIiB4Mj0iMjAiIHkyPSIxMzIic3R5bGU9InN0cm9rZTojNDZhMzQ2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMyIgeDI9IjIwIiB5Mj0iMTMzInN0eWxlPSJzdHJva2U6IzQ1YTI0NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzQiIHgyPSIyMCIgeTI9IjEzNCJzdHlsZT0ic3Ryb2tlOiM0M2EyNDM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM1IiB4Mj0iMjAiIHkyPSIxMzUic3R5bGU9InN0cm9rZTojNDJhMTQyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzNiIgeDI9IjIwIiB5Mj0iMTM2InN0eWxlPSJzdHJva2U6IzQxYTE0MTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzciIHgyPSIyMCIgeTI9IjEzNyJzdHlsZT0ic3Ryb2tlOiMzZmEwM2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM4IiB4Mj0iMjAiIHkyPSIxMzgic3R5bGU9InN0cm9rZTojM2U5ZjNlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzOSIgeDI9IjIwIiB5Mj0iMTM5InN0eWxlPSJzdHJva2U6IzNkOWYzZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDAiIHgyPSIyMCIgeTI9IjE0MCJzdHlsZT0ic3Ryb2tlOiMzYzllM2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQxIiB4Mj0iMjAiIHkyPSIxNDEic3R5bGU9InN0cm9rZTojM2E5ZDNhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0MiIgeDI9IjIwIiB5Mj0iMTQyInN0eWxlPSJzdHJva2U6IzM5OWQzOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDMiIHgyPSIyMCIgeTI9IjE0MyJzdHlsZT0ic3Ryb2tlOiMzODljMzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ0IiB4Mj0iMjAiIHkyPSIxNDQic3R5bGU9InN0cm9rZTojMzc5YjM3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NCIgeDI9IjIwIiB5Mj0iMTQ0InN0eWxlPSJzdHJva2U6IzMzOWEzMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDYiIHgyPSIyMCIgeTI9IjE0NiJzdHlsZT0ic3Ryb2tlOiMzMTk5MzE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ3IiB4Mj0iMjAiIHkyPSIxNDcic3R5bGU9InN0cm9rZTojMzA5ODMwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0OCIgeDI9IjIwIiB5Mj0iMTQ4InN0eWxlPSJzdHJva2U6IzJmOTgyZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDkiIHgyPSIyMCIgeTI9IjE0OSJzdHlsZT0ic3Ryb2tlOiMyZTk3MmU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUwIiB4Mj0iMjAiIHkyPSIxNTAic3R5bGU9InN0cm9rZTojMmM5NjJjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MSIgeDI9IjIwIiB5Mj0iMTUxInN0eWxlPSJzdHJva2U6IzJiOTYyYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTIiIHgyPSIyMCIgeTI9IjE1MiJzdHlsZT0ic3Ryb2tlOiMyYTk1MmE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUzIiB4Mj0iMjAiIHkyPSIxNTMic3R5bGU9InN0cm9rZTojMjg5NDI4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NCIgeDI9IjIwIiB5Mj0iMTU0InN0eWxlPSJzdHJva2U6IzI3OTQyNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTUiIHgyPSIyMCIgeTI9IjE1NSJzdHlsZT0ic3Ryb2tlOiMyNjkzMjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU2IiB4Mj0iMjAiIHkyPSIxNTYic3R5bGU9InN0cm9rZTojMjU5MjI1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NyIgeDI9IjIwIiB5Mj0iMTU3InN0eWxlPSJzdHJva2U6IzIzOTIyMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTgiIHgyPSIyMCIgeTI9IjE1OCJzdHlsZT0ic3Ryb2tlOiMyMjkxMjI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU5IiB4Mj0iMjAiIHkyPSIxNTkic3R5bGU9InN0cm9rZTojMjE5MTIxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MCIgeDI9IjIwIiB5Mj0iMTYwInN0eWxlPSJzdHJva2U6IzFmOTAxZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjEiIHgyPSIyMCIgeTI9IjE2MSJzdHlsZT0ic3Ryb2tlOiMxZThmMWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYyIiB4Mj0iMjAiIHkyPSIxNjIic3R5bGU9InN0cm9rZTojMWQ4ZjFkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MiIgeDI9IjIwIiB5Mj0iMTYyInN0eWxlPSJzdHJva2U6IzE5OGQxOTtzdHJva2Utd2lkdGg6MzsiIC8+PC9zdmc+PHN2ZyBoZWlnaHQ9IjE2MyIgd2lkdGg9IjUwIj48dGV4dCB4PSI1IiB5PSIxOSIgZHg9IjAiIGR5PSIwZXgiPi0gNDAwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjM3IiBkeD0iMCIgZHk9IjBleCI+LSA4MDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iNTUiIGR4PSIwIiBkeT0iMGV4Ij4tIDEyMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iNzMiIGR4PSIwIiBkeT0iMGV4Ij4tIDE2MDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iOTEiIGR4PSIwIiBkeT0iMGV4Ij4tIDIwMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTA5IiBkeD0iMCIgZHk9IjBleCI+LSAyNDAwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjEyNyIgZHg9IjAiIGR5PSIwZXgiPi0gMjgwMDwvdGV4dD48dGV4dCB4PSI1IiB5PSIxNDUiIGR4PSIwIiBkeT0iMGV4Ij4tIDMyMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTYzIiBkeD0iMCIgZHk9IjBleCI+LSAzNjAwPC90ZXh0Pjwvc3ZnPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8yNjhhYzA1NWMzMzg0N2UzYWVmNjJkN2UzNDlhYzdmNiA9IEwubWFwKAogICAgICAgICdtYXBfMjY4YWMwNTVjMzM4NDdlM2FlZjYyZDdlMzQ5YWM3ZjYnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF8yNjhhYzA1NWMzMzg0N2UzYWVmNjJkN2UzNDlhYzdmNik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl9hMjAxYjBkZGE0MTA0OGQ1YTEwOGRjNjQzNGQ1ZGI3ZCA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfMjY4YWMwNTVjMzM4NDdlM2FlZjYyZDdlMzQ5YWM3ZjYpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8yNjhhYzA1NWMzMzg0N2UzYWVmNjJkN2UzNDlhYzdmNik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWZhZWE2ODZlZjA5NGI1Njg4NDQyZjBmMDUxNDM1NTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2NC43NjI4LCAyNS41NTc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MjNlMWZiYTAxN2M0YmZjOTFlNzhmZGNkMmQxOWFhNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5MzE1OWI5ZjVkZDRiMmFiMTIyZGVmNDFkMDI0OGRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuODExNCwgNzUuMjY1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGQzODg2NGVmODc2NGZkMjhmNzhhOTQ5ZTE2NGFiNmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC43NzU3LCAtODguOTU2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmRhNTFlYzk3N2JkNDJmYWE5NDdiZDM2YmE0NTM2YTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMTU4MGU5ZDQ2YTE0ZTZhYTg5MDkyMjJlMmQxNDlhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlZmQyMDAxNjI4ZTQwZDlhYTliYWNlNGE0M2JkZTM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuMCwgMTM1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyODU4NGE2MGUzMDQxYjVhNjYzNjZiZjQyYmVjNTQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmMmNiOTBkMmM1MTQ3NzJhZmM3ZTI5N2UyNzUyOTU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi45MjA0OCwgLTkuOTYxMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5OTJhY2U2OGU5MTQ1YTRiZTQzODkzODUzODNkODkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuOTQwMywgLTk4LjkwNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlMjQ2NGM3ZmRhNjRhOThhN2UyNWZjN2IzNzBlNDUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuNDQ0NywgLTEzNS4yOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTY5YTdhMWU2MDU4NDY0OWI3NDMzYTNkMzdhZDViYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZjJkYTBkYjhiOWI0YzI3YmM2MjFlNzlkYTEwZWEyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4N2NmZDQxMTA0NDQwZjBhMDhhNTVlMWFjMjI4ZGJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0Zjc5OTBlNDc5OTQwMDlhMTQ2MDZlYmRhZWJmNTYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGRlZjZkNmIxZWVlNDE4ZGI0OWRjZjJkMjQ0ODRiODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWE1MWJlMjBhOTZiNDU2ZGJkMjUyOGQzNmM0NjE4MjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOS42Mjk3LCAtMTU1LjQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMThkOGRkNGZlNjA0MTE5YTQyYzYzZjM4NTJlMmQwMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjcwODE4MiwgMzkuNTQzNDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YjdkMDQ1YWZlZTI0ZDMzOTVkZmUyNDNjYTIxZTQ0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYmZkZmIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZWJjZjNiMDY0OTM0MGJjYmYzNDMwNGViZjUzYWI5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOTZlMzQyYzQ2NjY0NzExODBkNDEyOGJkNTYzNTM4NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTk2ZTM0MmM0NjY2NDcxMTgwZDQxMjhiZDU2MzUzODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9maW5uMTMxOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GaW5uaXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllYmNmM2IwNjQ5MzQwYmNiZjM0MzA0ZWJmNTNhYjk1LnNldENvbnRlbnQoaHRtbF8xOTZlMzQyYzQ2NjY0NzExODBkNDEyOGJkNTYzNTM4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YjdkMDQ1YWZlZTI0ZDMzOTVkZmUyNDNjYTIxZTQ0My5iaW5kUG9wdXAocG9wdXBfOWViY2YzYjA2NDkzNDBiY2JmMzQzMDRlYmY1M2FiOTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl85YjdkMDQ1YWZlZTI0ZDMzOTVkZmUyNDNjYTIxZTQ0My5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA2NmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTljOTYzOTJlOWNiNDQ5OGExYjNkM2E1OGNkM2FkZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuNjMwOCwgMTMwLjk0ODk5OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmJmZGZiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDhjZWY5OGE3OWVmNGUwZDk4YjhjZTJhZGQxYzM3MTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTBiMzNiNTFmYjMxNDg2YjliZjg3MmE3NGZhMTJkNDEgPSAkKGA8ZGl2IGlkPSJodG1sXzUwYjMzYjUxZmIzMTQ4NmI5YmY4NzJhNzRmYTEyZDQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGl3aTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGl3aTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOGNlZjk4YTc5ZWY0ZTBkOThiOGNlMmFkZDFjMzcxNS5zZXRDb250ZW50KGh0bWxfNTBiMzNiNTFmYjMxNDg2YjliZjg3MmE3NGZhMTJkNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTljOTYzOTJlOWNiNDQ5OGExYjNkM2E1OGNkM2FkZTguYmluZFBvcHVwKHBvcHVwXzA4Y2VmOThhNzllZjRlMGQ5OGI4Y2UyYWRkMWMzNzE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZTljOTYzOTJlOWNiNDQ5OGExYjNkM2E1OGNkM2FkZTguYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgNzRgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3MTI5N2FiNGJjMjQ1NjliZjA4NGUyNGE3OTU0ZDkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuODExNCwgNzUuMjY1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhZmRmYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyNzc4MzhjOGU1YjRlMmE4YWYyYzA0NjUyNDE1NWMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkxYmM2NmFmODA4YTRhY2M4MGY4NGIwZTRlOWNiMjRkID0gJChgPGRpdiBpZD0iaHRtbF85MWJjNjZhZjgwOGE0YWNjODBmODRiMGU0ZTljYjI0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3R1bHUxMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1bHU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTI3NzgzOGM4ZTViNGUyYThhZjJjMDQ2NTI0MTU1YzMuc2V0Q29udGVudChodG1sXzkxYmM2NmFmODA4YTRhY2M4MGY4NGIwZTRlOWNiMjRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3MTI5N2FiNGJjMjQ1NjliZjA4NGUyNGE3OTU0ZDkwLmJpbmRQb3B1cChwb3B1cF85Mjc3ODM4YzhlNWI0ZTJhOGFmMmMwNDY1MjQxNTVjMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2I3MTI5N2FiNGJjMjQ1NjliZjA4NGUyNGE3OTU0ZDkwLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDg2YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNDM0MWY4ZWRhOGI0NjUxODczNDQ4ZTE1YzI0OTgwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmFmZGZhIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGFkOTQxNTg0M2U1NDZjNDkzMmQ5Zjk2N2NlODFiZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjVjY2I5ZWJkZmZlNDdhMmIwZmE2ODI5Njk2ODU3OTkgPSAkKGA8ZGl2IGlkPSJodG1sXzI1Y2NiOWViZGZmZTQ3YTJiMGZhNjgyOTY5Njg1Nzk5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVjYTEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVjYXRlYyBNYXlhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhZDk0MTU4NDNlNTQ2YzQ5MzJkOWY5NjdjZTgxYmRlLnNldENvbnRlbnQoaHRtbF8yNWNjYjllYmRmZmU0N2EyYjBmYTY4Mjk2OTY4NTc5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNDM0MWY4ZWRhOGI0NjUxODczNDQ4ZTE1YzI0OTgwOC5iaW5kUG9wdXAocG9wdXBfMGFkOTQxNTg0M2U1NDZjNDkzMmQ5Zjk2N2NlODFiZGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9iNDM0MWY4ZWRhOGI0NjUxODczNDQ4ZTE1YzI0OTgwOC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA4NmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGE4MmRiMTEzMzIyNDIyNjk2YTE5MjM5NmVlNDJiNzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjlmY2Y5IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2Y2NmU2NDE1ODBmNDkyNWJkM2ZjMDdmYjEzMTg2YjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTM3MmExYTA5M2VjNGNmZThlOThjY2U4YjVlMmYzN2UgPSAkKGA8ZGl2IGlkPSJodG1sX2EzNzJhMWEwOTNlYzRjZmU4ZTk4Y2NlOGI1ZTJmMzdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveW9ydTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WW9ydWJhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmNjZlNjQxNTgwZjQ5MjViZDNmYzA3ZmIxMzE4NmI2LnNldENvbnRlbnQoaHRtbF9hMzcyYTFhMDkzZWM0Y2ZlOGU5OGNjZThiNWUyZjM3ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYTgyZGIxMTMzMjI0MjI2OTZhMTkyMzk2ZWU0MmI3NS5iaW5kUG9wdXAocG9wdXBfY2Y2NmU2NDE1ODBmNDkyNWJkM2ZjMDdmYjEzMTg2YjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kYTgyZGIxMTMzMjI0MjI2OTZhMTkyMzk2ZWU0MmI3NS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAxMDVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0NjRmMThhZWM0OTRiNThhYjc3MzViOTk5NWJiNWI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y4ZmNmOCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhNjI0M2NkMzFkZjRkYWZhOWNkOTIwMzhjYmRhYWJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1N2JjYmZhODdjNDQzOTViNjZkMmQwODQ3ZDAxMzFkID0gJChgPGRpdiBpZD0iaHRtbF82NTdiY2JmYTg3YzQ0Mzk1YjY2ZDJkMDg0N2QwMTMxZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2h1bmcxMjc0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkh1bmdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YTYyNDNjZDMxZGY0ZGFmYTljZDkyMDM4Y2JkYWFiZi5zZXRDb250ZW50KGh0bWxfNjU3YmNiZmE4N2M0NDM5NWI2NmQyZDA4NDdkMDEzMWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjQ2NGYxOGFlYzQ5NGI1OGFiNzczNWI5OTk1YmI1YjkuYmluZFBvcHVwKHBvcHVwXzlhNjI0M2NkMzFkZjRkYWZhOWNkOTIwMzhjYmRhYWJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMjQ2NGYxOGFlYzQ5NGI1OGFiNzczNWI5OTk1YmI1YjkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMTEwYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzI2YzIyZDdjMWM0ODc3YTAzNTliYmZjYTMwMTk3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjdmYmY3IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDgwZGVlYzgzNTlkNDM3MWE3OTA1ZDkwNzE0NGU0OTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWM4MzRkZDk5M2NmNDc1Mjk3NTRhMjFiYzFmZjBhMzcgPSAkKGA8ZGl2IGlkPSJodG1sX2FjODM0ZGQ5OTNjZjQ3NTI5NzU0YTIxYmMxZmYwYTM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDE2NDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmFwYW5lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDgwZGVlYzgzNTlkNDM3MWE3OTA1ZDkwNzE0NGU0OTYuc2V0Q29udGVudChodG1sX2FjODM0ZGQ5OTNjZjQ3NTI5NzU0YTIxYmMxZmYwYTM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3MjZjMjJkN2MxYzQ4NzdhMDM1OWJiZmNhMzAxOTcyLmJpbmRQb3B1cChwb3B1cF9kODBkZWVjODM1OWQ0MzcxYTc5MDVkOTA3MTQ0ZTQ5NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2I3MjZjMjJkN2MxYzQ4NzdhMDM1OWJiZmNhMzAxOTcyLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDEyN2AgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk0OGFmNmRlZDJjNDg2NGFiM2JkOTllN2ZmYzE5ZjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy41LCAxMjguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y2ZmJmNiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkZWY4OTIzYzAyMDQ5N2M5YWEyZGY0NjUzNWNhMGQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhZjVmYzg4NTI4OTQ3YjFiNjZiMzE1ZTM4OGJlNDA3ID0gJChgPGRpdiBpZD0iaHRtbF82YWY1ZmM4ODUyODk0N2IxYjY2YjMxNWUzODhiZTQwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tvcmUxMjgwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktvcmVhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZGVmODkyM2MwMjA0OTdjOWFhMmRmNDY1MzVjYTBkNy5zZXRDb250ZW50KGh0bWxfNmFmNWZjODg1Mjg5NDdiMWI2NmIzMTVlMzg4YmU0MDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTk0OGFmNmRlZDJjNDg2NGFiM2JkOTllN2ZmYzE5ZjMuYmluZFBvcHVwKHBvcHVwXzhkZWY4OTIzYzAyMDQ5N2M5YWEyZGY0NjUzNWNhMGQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYTk0OGFmNmRlZDJjNDg2NGFiM2JkOTllN2ZmYzE5ZjMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMTU0YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MzJhMmIwNzJiYzk0MjI1YmM3YWNjYTBhY2ZjOWE0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuOTIwNDgsIC05Ljk2MTI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZWRmNmVkIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWI5NWNiYmM4MWZiNDg3MGFjYzVkOTRjODUwMGMyMTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWFlMjE3NjFlMDlkNDdkOGJkMzYwNWExOGRiZjIyMTEgPSAkKGA8ZGl2IGlkPSJodG1sXzVhZTIxNzYxZTA5ZDQ3ZDhiZDM2MDVhMThkYmYyMjExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGliZTEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGliZXJpYSBLcGVsbGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI5NWNiYmM4MWZiNDg3MGFjYzVkOTRjODUwMGMyMTcuc2V0Q29udGVudChodG1sXzVhZTIxNzYxZTA5ZDQ3ZDhiZDM2MDVhMThkYmYyMjExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzMmEyYjA3MmJjOTQyMjViYzdhY2NhMGFjZmM5YTQyLmJpbmRQb3B1cChwb3B1cF8xYjk1Y2JiYzgxZmI0ODcwYWNjNWQ5NGM4NTAwYzIxNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzUzMmEyYjA3MmJjOTQyMjViYzdhY2NhMGFjZmM5YTQyLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDI4NWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGIzOGVjZDM5ZDcwNGMwMDg3ZGE2NzZkYTAxN2ViNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC45NDAzLCAtOTguOTA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2UzZjFlMyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0Zjc2YWQ5NWUyOTQwOWFiMjIwNjdkNzQ0NzI5NTJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiNTA1MjA2ZmM3NDRmYTZiM2Y2M2MyMGE2YTUwNWJhID0gJChgPGRpdiBpZD0iaHRtbF82YjUwNTIwNmZjNzQ0ZmE2YjNmNjNjMjBhNmE1MDViYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tpb3cxMjY2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktpb3dhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0Zjc2YWQ5NWUyOTQwOWFiMjIwNjdkNzQ0NzI5NTJlLnNldENvbnRlbnQoaHRtbF82YjUwNTIwNmZjNzQ0ZmE2YjNmNjNjMjBhNmE1MDViYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YjM4ZWNkMzlkNzA0YzAwODdkYTY3NmRhMDE3ZWI2MC5iaW5kUG9wdXAocG9wdXBfODRmNzZhZDk1ZTI5NDA5YWIyMjA2N2Q3NDQ3Mjk1MmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80YjM4ZWNkMzlkNzA0YzAwODdkYTY3NmRhMDE3ZWI2MC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA0NTBgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAwZWIxNTIxZWQ3MjRlYTg4ZTZmOGUyNTkzOTQ0ZmE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuNDQ0NywgLTEzNS4yOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q2ZWJkNiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyOGY2YWY5NmQyZTQ2MjBiMWQzMDUxZDJlNDQ4MGM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3MzZlODdmNTUxZjQ3ODk5NmZiZmUzYTUwZGRhZjBmID0gJChgPGRpdiBpZD0iaHRtbF9hNzM2ZTg3ZjU1MWY0Nzg5OTZmYmZlM2E1MGRkYWYwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RsaW4xMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRsaW5naXQ8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjI4ZjZhZjk2ZDJlNDYyMGIxZDMwNTFkMmU0NDgwYzQuc2V0Q29udGVudChodG1sX2E3MzZlODdmNTUxZjQ3ODk5NmZiZmUzYTUwZGRhZjBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAwZWIxNTIxZWQ3MjRlYTg4ZTZmOGUyNTkzOTQ0ZmE0LmJpbmRQb3B1cChwb3B1cF8yMjhmNmFmOTZkMmU0NjIwYjFkMzA1MWQyZTQ0ODBjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzAwZWIxNTIxZWQ3MjRlYTg4ZTZmOGUyNTkzOTQ0ZmE0LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDY1NmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTQwMzBkZTZhNTM1NDA4M2E4OTJjODVjNDNmMmJiOTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjY2FlNWNhIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGI4ZWIxZGE4MjAxNGQwMjkwZmY1MjgwNzUyNWJhZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWVkYWE4OTliMmQ0NDUzN2FmODlhZjBjMzM2ZDkyY2YgPSAkKGA8ZGl2IGlkPSJodG1sXzFlZGFhODk5YjJkNDQ1MzdhZjg5YWYwYzMzNmQ5MmNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrbzEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFrb3RhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiOGViMWRhODIwMTRkMDI5MGZmNTI4MDc1MjViYWQzLnNldENvbnRlbnQoaHRtbF8xZWRhYTg5OWIyZDQ0NTM3YWY4OWFmMGMzMzZkOTJjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNDAzMGRlNmE1MzU0MDgzYTg5MmM4NWM0M2YyYmI5MS5iaW5kUG9wdXAocG9wdXBfNGI4ZWIxZGE4MjAxNGQwMjkwZmY1MjgwNzUyNWJhZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9hNDAzMGRlNmE1MzU0MDgzYTg5MmM4NWM0M2YyYmI5MS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA4MzRgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExNGViNzA5YTFiYTQ4Mjk5ZWNhOTA4YTQ1ODkwMzlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2I3ZGJiNyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1MDBkMzQxOTNiMjRkODc4MmU2NjBlYTdiMTcwMmMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzY2EwYTU1NDAzNzQ2MWQ4MGQ3NzA2ODkwOWFlMDE1ID0gJChgPGRpdiBpZD0iaHRtbF9mM2NhMGE1NTQwMzc0NjFkODBkNzcwNjg5MDlhZTAxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1cmtpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzUwMGQzNDE5M2IyNGQ4NzgyZTY2MGVhN2IxNzAyYzMuc2V0Q29udGVudChodG1sX2YzY2EwYTU1NDAzNzQ2MWQ4MGQ3NzA2ODkwOWFlMDE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExNGViNzA5YTFiYTQ4Mjk5ZWNhOTA4YTQ1ODkwMzlkLmJpbmRQb3B1cChwb3B1cF8zNTAwZDM0MTkzYjI0ZDg3ODJlNjYwZWE3YjE3MDJjMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzExNGViNzA5YTFiYTQ4Mjk5ZWNhOTA4YTQ1ODkwMzlkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDExMzhgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlZTliMTJiNjcyNDRhNjg5MjBjNmFiMjRlNTQ0NWIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiMmQ5YjIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNzliZmNhNzE0MmU0YjRjYmViNzBmZDU2ODc2OTFkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYzVmNmMyYzIyODI0NmM2OWYxNzdjYjljMjE3MjJkZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGM1ZjZjMmMyMjgyNDZjNjlmMTc3Y2I5YzIxNzIyZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zYW5kMTI3MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TYW5kYXdlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3OWJmY2E3MTQyZTRiNGNiZWI3MGZkNTY4NzY5MWQ2LnNldENvbnRlbnQoaHRtbF9kYzVmNmMyYzIyODI0NmM2OWYxNzdjYjljMjE3MjJkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZWU5YjEyYjY3MjQ0YTY4OTIwYzZhYjI0ZTU0NDViMy5iaW5kUG9wdXAocG9wdXBfMzc5YmZjYTcxNDJlNGI0Y2JlYjcwZmQ1Njg3NjkxZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl82ZWU5YjEyYjY3MjQ0YTY4OTIwYzZhYjI0ZTU0NDViMy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAxMjA4YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTIwZThhNGI1M2E0MTk0OTQ2ZWRkZTY0Nzc4NzAzOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg1MDM5Njk5OTk5OTk5NCwgNDMuNzg2MTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhYWQ1YWEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDc0YmQwNDljNTk0MDdhYTM1NGU5YmFhMjkxMjU5OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNzcyMzUwYmU1Y2I0OWU5OTU2NTQ3NTJkYzAzMWY3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NDk0ZTQ3YjhjOWE0MTFlODQ4N2QxOGMzMGE2M2U2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTQ5NGU0N2I4YzlhNDExZTg0ODdkMThjMzBhNjNlNmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HZW9yZ2lhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNzcyMzUwYmU1Y2I0OWU5OTU2NTQ3NTJkYzAzMWY3YS5zZXRDb250ZW50KGh0bWxfOTQ5NGU0N2I4YzlhNDExZTg0ODdkMThjMzBhNjNlNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmEyMGU4YTRiNTNhNDE5NDk0NmVkZGU2NDc3ODcwMzguYmluZFBvcHVwKHBvcHVwX2E3NzIzNTBiZTVjYjQ5ZTk5NTY1NDc1MmRjMDMxZjdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMmEyMGU4YTRiNTNhNDE5NDk0NmVkZGU2NDc3ODcwMzguYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMTMzOGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmVhNjQ4NzA4ZDA2NDlkMjlkODdlNTBkZjA3OTVhNzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzlkY2U5ZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VmZGM4N2EzMjU3NTRiM2ViNmJhOGE2ZmQxM2YyYjQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkMWE2ZTU2NDUwYTQ5N2FiMmRhNTg0ZmRkNzdiMmU5ID0gJChgPGRpdiBpZD0iaHRtbF83ZDFhNmU1NjQ1MGE0OTdhYjJkYTU4NGZkZDc3YjJlOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hcHUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcHVkdW5ndW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWZkYzg3YTMyNTc1NGIzZWI2YmE4YTZmZDEzZjJiNDQuc2V0Q29udGVudChodG1sXzdkMWE2ZTU2NDUwYTQ5N2FiMmRhNTg0ZmRkNzdiMmU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZlYTY0ODcwOGQwNjQ5ZDI5ZDg3ZTUwZGYwNzk1YTc2LmJpbmRQb3B1cChwb3B1cF9lZmRjODdhMzI1NzU0YjNlYjZiYThhNmZkMTNmMmI0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzZlYTY0ODcwOGQwNjQ5ZDI5ZDg3ZTUwZGYwNzk1YTc2LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDE1MzhgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0YTg2NjliMWU5NzRjMjFiMjNkM2UwZDE0NTVhMzViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNjI5NywgLTE1NS40M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzdlYmY3ZSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0NzRiZDA0OWM1OTQwN2FhMzU0ZTliYWEyOTEyNTk4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlODMwMDJiNjc2NzQzY2FhOTAwNWRkZDJmNjJlNTJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2YzZkYjMzZmJlMzQ2ZmNhN2ZmMWY3ZTcxZjliMzAyID0gJChgPGRpdiBpZD0iaHRtbF9mNmM2ZGIzM2ZiZTM0NmZjYTdmZjFmN2U3MWY5YjMwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhd2ExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhd2FpaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlODMwMDJiNjc2NzQzY2FhOTAwNWRkZDJmNjJlNTJlLnNldENvbnRlbnQoaHRtbF9mNmM2ZGIzM2ZiZTM0NmZjYTdmZjFmN2U3MWY5YjMwMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNGE4NjY5YjFlOTc0YzIxYjIzZDNlMGQxNDU1YTM1Yi5iaW5kUG9wdXAocG9wdXBfMGU4MzAwMmI2NzY3NDNjYWE5MDA1ZGRkMmY2MmU1MmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9jNGE4NjY5YjFlOTc0YzIxYjIzZDNlMGQxNDU1YTM1Yi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAyMDIwYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZWMyYTVlZmEyM2E0YjRjYWU2MzMwODMyM2FiZmU3YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjcwODE4MiwgMzkuNTQzNDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjM5MjIzIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQ3NGJkMDQ5YzU5NDA3YWEzNTRlOWJhYTI5MTI1OTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDkxNWNlNTVhNTYwNGM4MjhkNjU4YmIwNGQ2MDFhN2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDkzYzk0NDRhNTJkNGFiMjk2YmIzZDU4NTE0ZjhjZmIgPSAkKGA8ZGl2IGlkPSJodG1sX2Q5M2M5NDQ0YTUyZDRhYjI5NmJiM2Q1ODUxNGY4Y2ZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYW1oYTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QW1oYXJpYzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OTE1Y2U1NWE1NjA0YzgyOGQ2NThiYjA0ZDYwMWE3YS5zZXRDb250ZW50KGh0bWxfZDkzYzk0NDRhNTJkNGFiMjk2YmIzZDU4NTE0ZjhjZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGVjMmE1ZWZhMjNhNGI0Y2FlNjMzMDgzMjNhYmZlN2MuYmluZFBvcHVwKHBvcHVwXzQ5MTVjZTU1YTU2MDRjODI4ZDY1OGJiMDRkNjAxYTdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMGVjMmE1ZWZhMjNhNGI0Y2FlNjMzMDgzMjNhYmZlN2MuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMzQ0MGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCjwvc2NyaXB0Pg==" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



2. Some real examples 
----------------------

2.1. Circassian Example 
~~~~~~~~~~~~~~~~~~~~~~~~

Let’s draw a map based on data from
`this <https://github.com/ropensci/lingtypology/blob/master/database_creation/circassian.csv>`__
CSV.

.. code:: ipython3

    import pandas

.. code:: ipython3

    circassian = pandas.read_csv(
        'https://raw.githubusercontent.com/ropensci/lingtypology/master/database_creation/circassian.csv',
        delimiter=',',
        header=0,
    )
    circassian.head()




.. raw:: html

    <div>
    <style scoped>
        .dataframe tbody tr th:only-of-type {
            vertical-align: middle;
        }
    
        .dataframe tbody tr th {
            vertical-align: top;
        }
    
        .dataframe thead th {
            text-align: right;
        }
    </style>
    <table border="1" class="dataframe">
      <thead>
        <tr style="text-align: right;">
          <th></th>
          <th>latitude</th>
          <th>longitude</th>
          <th>village</th>
          <th>district</th>
          <th>dialect</th>
          <th>language</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>0</th>
          <td>45.183330</td>
          <td>39.666670</td>
          <td>Khatukay</td>
          <td>ra</td>
          <td>Temirgoy</td>
          <td>Adyghe</td>
        </tr>
        <tr>
          <th>1</th>
          <td>43.092518</td>
          <td>43.522085</td>
          <td>Psygansu</td>
          <td>kbr</td>
          <td>Baksan</td>
          <td>Kabardian</td>
        </tr>
        <tr>
          <th>2</th>
          <td>43.217748</td>
          <td>43.738020</td>
          <td>Verkhny Lesken</td>
          <td>kbr</td>
          <td>Baksan</td>
          <td>Kabardian</td>
        </tr>
        <tr>
          <th>3</th>
          <td>43.260246</td>
          <td>43.653788</td>
          <td>Zhemtala</td>
          <td>kbr</td>
          <td>Baksan</td>
          <td>Kabardian</td>
        </tr>
        <tr>
          <th>4</th>
          <td>43.317842</td>
          <td>43.876519</td>
          <td>Erokko</td>
          <td>kbr</td>
          <td>Baksan</td>
          <td>Kabardian</td>
        </tr>
      </tbody>
    </table>
    </div>



.. code:: ipython3

    coordinates = zip(list(circassian.latitude), list(circassian.longitude))
    dialects = circassian.dialect
    languages = circassian.language
    popups = circassian.village

.. code:: ipython3

    #Creating LingMap object
    m = lingtypology.LingMap(languages)
    #Setting up start location
    m.start_location = (44.21, 42.32)
    #Setting up start zoom
    m.start_zoom = 7
    #Inner features < dialect
    m.add_features(dialects, opacity=0.7)
    #Outer features < language
    m.add_stroke_features(languages, opacity=0.8)
    #Popups < village
    m.add_popups(popups)
    #Tooltips < language
    m.add_tooltips(languages)
    #Custom coordinates (override the ones from Glottolog)
    m.add_custom_coordinates(coordinates)
    #Inner legend title and position
    m.legend_title = 'Dialects'
    m.legend_position = 'bottomright'
    #Outer legend title and position
    m.stroke_legend_title = 'Languages'
    m.stroke_legend_position = 'topright'
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzc0MzJkZjlmNWQyMTRkODZhMmFhMzI3Y2Y5MjIyNjViIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF83NDMyZGY5ZjVkMjE0ZDg2YTJhYTMyN2NmOTIyMjY1YiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5EaWFsZWN0czwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2U2MTk0YjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BYmFkemV4PC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjMTllNmI0O29wYWNpdHk6MC43OyI+PC9zcGFuPkJha3NhbjwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZTExOTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5CZXNsZW5leTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzQzNjNkODtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5CemhlZHVraDwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2Y1ODIzMTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5LdWJhbjwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzkxMWViNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5NYWxraW48L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICM0NmYwZjA7b3BhY2l0eTowLjc7Ij48L3NwYW4+U2hhcHN1ZzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2YwMzJlNjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5UZW1pcmdveTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2JjZjYwYztvcGFjaXR5OjAuNzsiPjwvc3Bhbj5UZXJlazwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZhYmViZTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5YYWt1Y2g8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CiAgICAKPCEtLSBCYXNlZCBvbiB0aGUgdGVtcGxhdGUgZnJvbSBoZXJlOiBodHRwczovL25idmlld2VyLmp1cHl0ZXIub3JnL2dpc3QvdGFsYmVydGMtdXNncy8xOGY4OTAxZmM5OGYxMDlmMmI3MTE1NmNmM2FjODFjZCAtLT4KPCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEyLjEvdGhlbWVzL2Jhc2UvanF1ZXJ5LXVpLmNzcyI+CgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40LmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+CiAgCiAgPHNjcmlwdD4KICAgICQoZnVuY3Rpb24oKXsKICAgICAgICAkKCIjbWFwbGVnZW5kMSIpLmRyYWdnYWJsZSh7CiAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICB0b3A6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICBib3R0b206ICJhdXRvIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwogIDwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PgoKCjxkaXYgaWQ9J21hcGxlZ2VuZDEnIGNsYXNzPSdtYXBsZWdlbmQnIAogICAgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDo5OTk5OyBib3JkZXI6MnB4IHNvbGlkIGdyZXk7IGJhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgIGJvcmRlci1yYWRpdXM6NnB4OyBwYWRkaW5nOiAxMHB4OyBmb250LXNpemU6MTRweDsgcmlnaHQ6IDIwcHg7IHRvcDogMjBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TGFuZ3VhZ2VzPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmZmZmO29wYWNpdHk6MC43OyI+PC9zcGFuPkFkeWdoZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzAwMDAwMDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5LYWJhcmRpYW48L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF83NDMyZGY5ZjVkMjE0ZDg2YTJhYTMyN2NmOTIyMjY1YiA9IEwubWFwKAogICAgICAgICdtYXBfNzQzMmRmOWY1ZDIxNGQ4NmEyYWEzMjdjZjkyMjI2NWInLCB7CiAgICAgICAgY2VudGVyOiBbNDQuMjEsIDQyLjMyXSwKICAgICAgICB6b29tOiA3LAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzc0MzJkZjlmNWQyMTRkODZhMmFhMzI3Y2Y5MjIyNjViKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2RkNmZlNTg0N2Q0ZTQ2YTlhMzVkODg3NDdmYjMzY2IxID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF83NDMyZGY5ZjVkMjE0ZDg2YTJhYTMyN2NmOTIyMjY1Yik7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzc0MzJkZjlmNWQyMTRkODZhMmFhMzI3Y2Y5MjIyNjViKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYzhhYjZlMmExOTI0OWU0OThmYjI5ZDg5YjYwNDUwYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAyLCA0MC4yM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWI0NWExYjg3Y2Y1NDBhNzljMGVmYzBhYzEzYTViYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNTQxNjcsIDM5Ljk0NjM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDYwZDcyMjUwNzNkNGE5Y2E2ZTYyMTU3NTE0NmUyZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC42NDQ3MjE5OTk5OTk5OTQsIDQwLjIyNTgzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmUwOTRmMzM3MTg4NDRmOTlkYzg2ZjMzNDkyZjZmNTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MDI1LCAzOS4xNzQ3MjE5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxYjI1YzZmMzRiMjRmNmNiNDM3NTU3OWExYmM4ODRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTA1LCAzOS4yNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2ZTFmNDFlNzkxNTRhZWI4MmY4M2Q2YmI3NTg4MjNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTE1NDIxLCAzOS4zOTAyMjk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3ZjA3ZGMwZDJmMDRjMmNhMjY0YTFhNzVhOWExYmYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTIxMTEwOTk5OTk5OTk2LCAzOC45OTI3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0NjA1YzRkYjhlZTRmY2NiNmMyZTg2OGY1NDk0OGVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTI2MTExLCAzOS41NjY5NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcwYWJmOTFmZTdjYTRiMzU4ZTk4MmRjMTgwNmZmMmY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTQxNjY2OTk5OTk5OTk1LCAzOS4zNjk0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkZWYxZTBiZDM5NDQzNzhhMzJlY2QxZjQ5NjEyZjEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTUwODMzLCAzOS4xMTQ0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NkNTQxMWZiYWQ0ZDQ0NTU4ODdlZjFjZDNmYzIxYjAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODYzMDU2LCA0MS45MTM0NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3MjlhMDBiNDgzYTRjNWU5YzQ1ZmY5MTdlZWY1NDk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjA2NjIxOTk5OTk5OTk2LCA0MS44Nzc2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTg5NWUzZmM3ODMyNDg5ZmJlMTQzNDUzZjFhZGI2M2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yMjE1NTgsIDQxLjg5OTQ1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzEwNDY5MjEwOGNkNDVlZGFhMmViOTJiYWY4NjZjYjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zMzExMTEsIDQxLjkzNDcyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTZhNTdmODU4OTRhNGY4NWFjOTBmNmU4YjIzNmRmZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zNTA3NzYsIDQxLjgwMTMzNDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjA2NzFmZjYwMTgxNGYxZWI5ZWY1YmE1NTgxMTVkYTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC40MzEyOTMsIDQxLjc2MzA5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODc4NmM1ZDFmNzY5NDI2ZmFkMzI2OTdiNmQxNDUzZTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44MjE2NjcsIDQwLjUwMTY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDZjMDA5MWU1NjZiNDAwNmExOGVkM2ZkNmUzN2NmMGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45LCA0MC40ODMwMDAwMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IxOTljOTc1ZGM2ODQ0NGJiZTg1ZDEzMGEzNzQwMmI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzk5OTQ5Nzk5OTk5OTksIDQzLjMyNzYxODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0NmNkOWVjODViZTRjZjdhNmM0ZWY4OWIwMTdiZjI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODUxMjI5Mjk5OTk5OTksIDQzLjIyOTIwMTIwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTE0OGI3Y2NmMDRhNDdkN2I4ZjRjNjE2NTkxOGY2MmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45NDY4OTQ1LCA0My4xNzIxMjIyMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwYzgwNWFkZTc3OTQ5N2ZhM2E1MGE1ZWE4ZmI4M2YxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuOTY4MjE2OTk5OTk5OTk2LCAzOS40NDcxMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjMGJlYjM3ZTM5NTQzN2ZiZjIzMjI1NzNlNjJlZDFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTg0NzIyLCAzOS4wN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2JhOGJjYzNhNWVmNGQ1ZDg2M2ZmZjg3YjlhOTk5MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yODM2MDk5OTk5OTk5OTYsIDM4Ljk1MzYxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjU0M2Y2NTJjMzBiNDkxNTk2OTZjZjgwZjQ2MzhhYTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45ODczNTEwMDAwMDAwMDQsIDM4LjcxNTQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTg3NTUwZGZmYTkxNDQ1ZmJhNmYxNWY5ZmI2ZmNiMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTkxNjcsIDM4Ljc4MTk0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDY1MDM5Yzg4Y2E3NDQ2MTkxMmQyOGQ1YTI0ZmUwOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNDUyNzgsIDM4Ljc1NjExMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGUyYjQ1MWUzMmFhNDU2ZmE4ZjRjZTA2YzcwOGNiOTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNTExMTEsIDM4LjcwNjM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDAwMTk3NDk5NTRiNDkzOGIyZWQ2N2M5Yjc1ZmY1MTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4xODMzMywgMzkuNjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2YWU0OThjMTUxMDQ2MDY5ODMwMmJlZjFiNmI3OGZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDc1ODMzLCAzOS4zNDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNTI1YTdlZTM2YzU0NDI4YTJmNzUzOGI1YTI2Njc4MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjExNjM4OSwgMzkuMzAxNjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iY2Q4ZDhiMGEyOTY0MDMyOWFmZTc2Njc5ZWNiNTVjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgzNSwgNDEuMzgzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YwZGRmZTVkMTRlODRmYzRhNmU1NzA1ZWFhZjVhYTFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTU0NzQ3LCA0MC4zMTc2ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhMDgyODdkYWVjNzRjMDE4NzZmYmNiMjdkZWE5MjU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTkzMzMzLCA0MC4zMTEzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk2ZmI1ZGFkZTQwNjQxNzhhNmNlZTE3M2YxY2NlNTNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTk3NSwgNDAuMzkyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOTFlYzUzNzZlNDA0YTlhYmUxMGZiMGM2MDRkZjg0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAxMTM4OSwgNDAuMjE3MjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNmYzZmQ3N2IwOGE0MTZkYjNmMDliYjFkZjM4Yzk0YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA0NjExMDk5OTk5OTk5NiwgNDAuMTgzMDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODVkMDVkNWQ1ZGM0OThmODQ5Yzk2MTQxNzg5NjBiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA2ODg4OSwgMzkuNDk3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTVkMGQ4NmQyZDY3NDlkM2FlZTc3NWEwMDJjZDg0MGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNzIyMjIsIDQwLjE4ODYxMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjNkMTc1Zjk5MWY4NDA3Mzg3ZjIyMTBhOWI4Nzk2ZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wODM4ODksIDM5Ljg2MTM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWJmZDQ0NjA2YTNkNDUyMGJlMDVmZWU2M2Q4N2IzZTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wOTIyMjIsIDQwLjExMDI3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDJiODU0YmEyZjBhNDkwMzljMmY5ZDJhMjJhMzFiZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zODA3MzIzLCA0NC4xOTA4OTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OGY3YjZhMmE1Y2Y0YzE4OGNjMzQxZTNmMjdhNmQzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ2NzczNDgsIDQ0LjM3MzAyMTIwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzk4NmIzNGQ2NzAzNGNlZjhjNjkyMWUyZDU1ZmQ5MTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NzQ2OCwgNDQuMjQyMzI5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWI4ZmJmOThmMzFiNDkxMzgzMmQ4MDBjMzliNzhlNjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40OTkxMDk4LCA0NC4xNTEyOTQ3OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEwNTA0NzBmNGZmYTQ4ZGVhNmM1M2Y0MTljMjc5OTY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTI1NDAxNywgNDQuMjA5Mjk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ODYxZDExNWZiNDc0ZGE4ODJiMzI3ZGZmOGNjZDlmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU0MzQ4ODgsIDQ0LjQxMzc1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNhOGE5ZTMyYTY5MzQ4MmU4YmRjZGFlNjYxNWI0OTJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTcwMTE0Mzk5OTk5OTk0LCA0NC4xNDAzNDgxMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmOTg4OWNlZDdkMzQ2ZWY4OWJjNThkNDQ3NjA0ZGEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjcxMDc2MSwgNDQuMzc0MDU5MTAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZmVjZGE5MjQ5ODc0Y2JjYmZjNjVmMDU1YTJiODMxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3Mjc3OTUsIDQ0LjI5NzM2MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIzYTBlODM4MzdkNzQ1YjZhNTJhYzhkNDc4YWJlODgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODIyNzg2LCAzOS41MDA5ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliYWU2NzEwMGRhMzQ0YTBhODE1NDcyNDFiMzZkZjY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODMzOTE3LCAzOS41MDgwNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcwMGJkMTVhNzQ5ZDRhMDg5NTQ5YmUyZmNkNjk2NGMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDA5Mzg5LCAzOS4zNTY2MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxYzY2YzhlZGU2MzQ5OWZhYjk0OGEyOTkyYjdmOWEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDA5Mzk3LCAzOS4zMzUzMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmNGU1MWUyNmM5NjRkM2JhYWRlOGIyNmQxMzgxM2JjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDA5NDA5OTk5OTk5OTk1LCAzOS4zNjIzMjAwMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyZGFlOTBjOWYxNzQwYThiNmYyNGQ1YjQzMzU4MzBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDkyNTE4NCwgNDMuNTIyMDg1MTAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OWZlOTRiMWFkMGE0NjBjOTk2YjA3NzI5MGU3NDI3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjIxNzc0ODQsIDQzLjczODAyMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZmMzg2MjEwZDA4ZTQ5MzM5MzY5Yzg4MWEwNDA1NmZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjYwMjQ1ODk5OTk5OTk0LCA0My42NTM3ODgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MTM4MzVmYmU4N2Y0NTVlYmI0MmZkMTVkYmRiNDYyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjMxNzg0MTUsIDQzLjg3NjUxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTk0YTkxZjMzMTJjNGQ4NTk4OWZiNDEzNjdiYzhkMWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zMzM4OTAwMDAwMDAwMDQsIDQzLjgxNzIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YmRlMmU1NzgwYTk0NWU4YjY3ZjFkOGE3NDc0YmJkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM0MjMxNTgsIDQzLjkxMjczOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlMzQ1NjM3OGI2ZjQzYmQ4MDJkNmY2ZWRkZjE5MGM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzQzNDM5Mzk5OTk5OTk0LCA0NC4wMjU1MjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YWE0NTY0MDM0NGM0Zjk5OTU4NDFmOTY2MjhiZmMxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM0ODA4MzksIDQzLjcyNzk4Nzg5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2ZhOWExYWJhOTdjNDY3OTllZTdlNzMzM2ZjMjczOTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNTA2NTg3MDAwMDAwMDQsIDQzLjkxMDM0Mjc5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjZiNTExMDlmYjlmNGExMmFiNTcwNzg5MDEyNWNkZDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zODA0NzgwMDAwMDAwMDQsIDQyLjkwNzQ4NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwMGE3NGRjMThlMTQ1NGM5YWI4NmQ1N2E0MmFhZTY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzkzMzU1Mjk5OTk5OTk2LCA0My43NDIyNzk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NmE5MzA4MjYzNzI0ZmY1OTM0MGEwYTYxZWVhNGU4MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQxMTgxNDQsIDQzLjkwNDUxMDIwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjMxNGJjN2NiOTBjNDk0ZGE4N2I1N2JlN2FmOWI2N2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NTM1NjA2LCA0NC4yMTE5NzczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjg1ODA5YmNlZTU0MWQyOGRmOTcwM2RmNDM3MmIyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ2NjI4MzM5OTk5OTk5NSwgNDMuODM2NjkzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWVhMTAxZjY3OTdhNDAzMWIxMTYwNDVjMjZjNGFiNTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40Nzc4MTExMDAwMDAwMDQsIDQ0LjEyMzg4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmZkM2ZmN2MwNDdkNDg5MmJmZjE2YmUwMDQyNTI1OGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NzgxMTgxLCA0My43NjA2NDc2MDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0ODYyMTgwM2Y4YjQxYjliMTFlMzU2NDAzZTQ4YTQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDg1NTc1OCwgNDQuMzYzNjU1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzk2MTY4ZjE4NjQwNGQzNjliMGIxMTcyZjk4NjI0ODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDM5OTU2LCA0My43MTg1NTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MWFiYWUyOWRhMWI0NTc2ODVhOGZjODM0ZjdjNjc4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwNTkxOTM5OTk5OTk5NiwgNDQuMjE0NDgyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGI2Mzg5MDE0YWFjNGJhNmE0NWEzZWFmZTIxZjg2OTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MjQ0NDAwMDAwMDAwMDYsIDQzLjkzMTk0MDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzdiMzZjNzU1NDM4NDcyMTliYjNkZDMyYjE2ZDhhMGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MjY1Njc3LCA0My42MDI3MDQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82N2VkZWRiNGVmZDk0MTk4ODNmNjg3ZTNjOWQ1OTlmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUzODU5NzcwMDAwMDAwNCwgNDMuOTMxNzQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmNiODc0NDZhY2E1NGYwZDgwZmM3M2RlYzAxZjdhOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NDA1ODg3MDAwMDAwMSwgNDMuODk0MzIxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZThmNjliNTk0ZGJlNGZhYWI1Yjc3OTY2MzRjMWMzMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTI4MTc0OTk5OTk5OTYsIDQzLjc5NzQ2Mjg5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZWRmY2E3NmI1Zjc0MjY3ODM5OTMyMWEzOGZiNjQxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1NDE3LCA0NC4wOTk3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTQxODQ4NGFlM2I5NDFhN2I5NjFmOTI3ZTkyYzM3MzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTczNjc1LCA0My4xOTQ5NzMxMDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1MzUxOTI2ODJhOTQ4MDBhZjRlMDRiYjkxMmE3NGRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTU3NzAzOSwgNDMuNDM3MTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTlmMzlmODI4OTE0MGVhYWVhODZhMDNiOTBmMDQ1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU2MTI2OTUsIDQzLjYwNDI2NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg4ZDhmZTFmZGUyODQzYzU5OGZlM2Y2Yzc0MjMwNDRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTY2NTU1NCwgNDMuODg0MTc4OTk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YTVmNmI5YTE2MzQ0NGQwOGFkMzVmNDY1YTcxZjFmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU2Nzg5NjgsIDQzLjg0MTU4MTcwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODc5YzAzMzdmZTY1NGM1NDhiMGE0Yjg1ZmM4MzU3MDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NzgwNzM4LCA0My43NTg5MTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yODk5YTAyZTU4OTM0MDI4YTM1ODcxNTNlZTEyMjJjNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwMzMyMzgsIDQzLjk5NDgwNjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmYjZlNTIwMGUyOTRmNWE5ZjM5OTRmZmM4ODRiNjRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjA1NTI3NywgNDMuNjEwNjI2MjAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjM5YTJjY2EzYzk0ZDkxODVkMjJhNzE2NzU3YjkwMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwNjk0LCA0My44MzQxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTI2ZWQ0NWVjNWYzNDg4NzlkNGZmZWJmNTExMWQ3NGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTAxOTcyLCA0My4zNDY5OTE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjM1MmMzNmI4MWY0MWVkYmQwYjM4YmZhZGI3ZWIyOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxNDc5NjIwMDAwMDAxLCA0NC4zNTE1NDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNWJlMWMyNzkwZTQ0MTE4YjQxMTViZTJiNzc5NWIwMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxNTc1NDYsIDQ0LjA5MjY1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0MmZmMmJkODIwODRmMzBhNTAzMDcxMTE1NzUwMzBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjE5NzU1NzAwMDAwMDA2LCA0NC4xMzA1Mjg3OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2Y3OTMzY2I0MzRiNDJkZGE5NDUyY2FlZGNlOTI2Y2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42Mjk1OTc0OTk5OTk5OTYsIDQ0LjE0MzY5Nzc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNjZkYzRmM2RiOWU0ZDlmOWQwMjA2NTRlNjRhNjdhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYzMTk0LCA0NC4yNjkxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2QxMGUwNzVlYmMzNDIxZTg3M2Y5YTg2YWFhYmU5NWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MzcyMiwgNDQuMTI0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1ZTA5YTVkMmE5MzQzM2NhZmM1ZmI5MzZiMTM4N2JmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjQ2NDU5NSwgNDMuNDAzMDgzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGU3Mzk1N2ViNDIwNGIyYWIyNDI2YWFhMzVjMzBjZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDg5ODQ3LCA0My42Mzg0ODE3OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRlYzEwMWE0NGIyMDRlNDY5NWRmMjczMjc0OGE4MzY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjQ5MTY3LCA0NC4xNTU1NTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmZTdmYmYzZDk5NDRkNWM5ZGZjYWU1ZDczYjk4ZjMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjYxMjUzNCwgNDMuNDIwMzM5ODk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZDkwNTM5OTM3ODU0MDE0ODQ5NmQxMWJjMDdiM2UyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY2NTU5MjIsIDQ0LjAyNTIyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmE2M2U1YzhiZjRmNDBhNDk1YmFlYzQ4YTBkMjE2YjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NzA4Njc3OTk5OTk5OTYsIDQzLjQ5ODI2NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QyZjk3M2M1MDM2OTRiMmU5YzcwNmQ3ZGExYTUwODAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjc0MTIwOSwgNDMuNTE3ODczOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDRjNTI4NTk0ZTllNGFkNzhjODE2MzMyZmZjNmM1NDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42ODUyOCwgNDMuNjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmMGU3ZGZlYjU5ZTQxZTc5OGUxYTcyNjQ5YjFhNjM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjkzNzU3NzAwMDAwMDA2LCA0My4yNzY3NDc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTU4OWY4M2JiODY0ZGUwOGVhNTdjY2MxMTM1NWNkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY5NzkwNDEsIDQ0LjIxMzMwNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFmNWUzMTBkYmJjNDRhZmM4NjJiNTM0ZTM2M2U2MjhmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzIyNTk2OSwgNDMuODg1MDA5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2U4ODRiMzQwMjkyNGRjOGJiNjg0NGZjNWE1MzNlZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43MjI5MzEsIDQzLjUyMTY0OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwYjg5NWYwYzllOTRiM2Q4YmQ3YTAwZjA3NjBlNDE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzM0MTQ4OSwgNDMuMDM3MDI4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODIxMGNiMWMxMDdmNDQ5ZGI1ZWU3NzJlYmQ4ZWZiMjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NDAzMjU4OTk5OTk5OTUsIDQzLjE5MzI2NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IxODM2YjdkNTA4ODQ0NjdiOWU3MGNlYTIyM2E3MDhiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzQ0MTU0NiwgNDMuMzUxMDExMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTRlZjFlNjY5MjEwNDY1YWEzZTljYWI3ZTkxYWU2OTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NTc0NzAzOTk5OTk5OTUsIDQzLjcxNTY4OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2YTQzNTQxOGJhYjQxOWQ5MDY4MzBhYmE3MjljZmE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzc2ODQ2MSwgNDMuMjYwMDE0ODk5OTk5OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMmRkMGYyNTMzMTI0YWZjOWFhNDg4YTMzY2M0MWRlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjc3NzM4NTUsIDQzLjQ0NDI0ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViNmMwZmQyMmUyYzQwYWQ5ZDcwYzdjNmEzN2YwMTc0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzk4NzExNDk5OTk5OTk2LCA0My42MzkzNzU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDIyYzM0YTBhNmM0Yzc2YTFmNTRmMmQwMjRmNGM0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgwMjIyNTc5OTk5OTk5NSwgNDMuMTQ2MDU2MDk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMzkzYWMwMDAxZGY0Njg3YTUyM2VjYzYxMGE0M2YwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgwMzQ0NTYsIDQzLjc3MDYxNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2MDA3ZjU3MWI1ZTRjZWRhZTM5YjdmNWM2MTQ5ZTIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODIyOTM3NCwgNDMuMTExNDM0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGM4ZThkYTNkNjBkNDJlODhkMDExMzhlZGQ0MjYyZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MzU2MzEsIDQzLjE1MzExNjQ5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDliZmRjZDJhZTI4NDVmYTllYzgwODc1NGRjYmVjNWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MzY2NDYxLCA0My42MDc5MTg3MDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyYTg0YTZiZDUyNTRkMzU5MGM5MmQ1OTA0NzRjOTk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODQxNjEyNSwgNDMuMjA2Mzk0MjAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZWFmZjZkZjJkNGI0NGExYjI5ZTgyNjkwOTg5Mzg0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg2MDI4NDcsIDQzLjI1MTQwNDc5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzQ5MDIyYWQ5Njc4NGFkYWFmMzJhNDNlMWRhNTg5NDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44Nzg4MzQ5LCA0My4xMDc0ODE4OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1ZDVlNDBlMzMyMTRhZDQ5NTIzOTBmYzRlNzQ4NzMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjQ2MTExLCA0MS43NDEzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzZmVlYTVjZTAxMzRmMWRhZWFiYWFiZTE1M2UzNTc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMzAwNzc3MDAwMDAwMDA0LCA0MS43NDI2OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3NjYxZDZhZGVlNzQ3MTlhYzk0NDdjODg1ZjkxZDFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODM5MTY2OTk5OTk5OTk2LCA0MS40ODYxMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1NzUzNWEwYmJhNDQyNjM5OWZjNWVkZjYwMDZlNDQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODYxNTIsIDQxLjMzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOThlOGRhNWEzMjFiNDk3MDhkOWQyNWVlMzQ2MjZiNTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC42MzExMzIsIDQwLjA3MjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTEyNTMyMzYzZGZmNDJkMDg1NTFiODdmYzFkMTI1YTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44MzUsIDM5LjIwODA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWNhZjA2MTA2NWEzNGViYThjYzdlMTAzYTc2NTkxMDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NDUsIDM5LjQ2Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDRiODhlZDRhYTdkNDZlYTg3ZTRjM2ExOTVmMmY5NDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NjY2NjcsIDM5LjI4MzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTdmMWVmMmFlN2ExNDM1YjhmOWFiMTkxOGVlODY3YzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NzM5MDk5OTk5OTk5OTUsIDM5LjE1MzU1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2RiYzM0OGM3YmUxNGNiODg2ZmFjNjAzMzQ5NTA5NzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NzQ3MjIsIDM5LjQ1Nzc3ODAwMDAwMDAwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjJjOGJkMmRjYmI5NDhjYWJkMDhhN2Q2ZWFmY2M0ZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44ODMwNTU5OTk5OTk5OTYsIDM5LjM4MzA1NTk5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTRkOWE2NTBhMGIyNGFkMDgyMTQ5MDYxMWNmZTE4MTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44ODM5NDIsIDM5LjA2NjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTE5YjMwM2UxNjc4NDBkNzkzYjZlMWQ0ZDZiYjc3NjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44ODc3NzgwMDAwMDAwMDQsIDM5LjI2NjExMDk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjMzYTI2YThhMTA0NGM5ZmJkMWY1YTg4Y2JiY2U0Y2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44OTI1MjcsIDM5LjIzMzY4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDliYTM2ODgxMmRkNGZkNDgwOWQyOWU1ZDNmZjk4ZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MDUsIDM5LjQxNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAwN2VkYzk4M2QxMDRiZmJiNDE2ZjYyODdjNzA2M2FjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTIyNSwgMzkuMzgyNzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ODQxZDk1NjExMzE0YzliOTI0YjdjNjkyN2YzZDdhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkzMzg4OSwgMzguODM2OTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYzEzMGZlNGZjZGQ0YTc5ODI3MjQwNGJjZjc2OGM2OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk0NjM4OSwgMzkuNDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QxYmQyOWMyMTEwNjQ3NDVhM2IyN2MwYmYwMWJkMGE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTY1LCAzOS4zNjc3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3NTI4OTkyODRjYzRlNDhhZGI4MWMxODYwZTc1ZDA0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTgzMDU2LCAzOS40NzYxMTA5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhOTU4ZGM0ZjA3NTRhZGE4YzA0ZTgyNTYxMmIyNzMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTk0NDQ0LCAzOS4wMDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OTNkODg4MThhMGI0OTk5YTg0ZjNlODQ1MDMxNzQ5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAyMzk3MiwgMzguOTM2OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZDEzNTY0ODQ4NmM0YWU3OTBjNWFiMTNmMmQyNDkzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAzNDE2NywgMzguODk0NzIxOTk5OTk5OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDZkZjY5ZjNkNDg0NDZhOGRjZDQ3NmY2ZjZkMjc1OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA2NTU1NiwgNDAuMTc0MTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWUwOTA4ODI1ZmY0NDE2OTQ5NjdhNTdkYWEyNGM4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk1OTM0ODk5OTk5OTk5NiwgNDEuNzQzODQ2OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NGZjZDFhYThiNDc0NWY1YWE4YWVjMjMyNTIzZjk4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk4ODMzMzAwMDAwMDAwNCwgNDEuNzM4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YmYxNTZjMDU1MTA0MDlkYTM5MjA2ZGE1NjlhMmRmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjA0MjM2NTk5OTk5OTk5NCwgNDEuNzY0MDk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjcxMTZkYjk2NDk0ZTlmODEzZGYxN2UzOGI0ODBiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjExNTI3OCwgNDEuODI4MDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MzJjOTVhYWNhZjc0N2NkOWNhZjczZmM4YzIxN2ZiOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjEzOTk1MSwgNDEuODUzODc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMmM2MzlkYzA3ZjI0YmQ0YWVkYjRmZGExMzY1ZDVlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjE5ODQyMzc5OTk5OTk5LCA0MS42OTk5NjQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTE3ODFhMTgyM2Y0YTVmYjM3Y2UwZDA3MzAwZjE1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI1MzI3MTk5OTk5OTk5NiwgNDEuOTAwMDQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMjI2MDUxYWNlMzE0ZDQwYjJjNDYzMWU1ZTBlOTRjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQwMDgzMywgNDEuOTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMTVkZWE2YmY3OTc0YTZlOTU5ODQwYTRjNDMwYWNmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjUxOTcyMTk5OTk5OTk5NCwgNDAuNzEwMjc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MTcxZjZlOTUzZTQ0ZDRmYTIxMGEyM2FhYzY2MjdlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg2NSwgMzguOTg4MDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZDc2YmFlMDkwNDk0Mzc5YmUyODhjMTFkNzlmMWM3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjIxMjUsIDQzLjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5MDRiYmNjZTJiMzQ0M2JiYjJhZmMwNmUxYzU4MjQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDIsIDQwLjIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lODBkMWFjM2UyYzU0NTgxYjU0NGU5NjFhNzI4ODg1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA1NDE2NywgMzkuOTQ2Mzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMzhiMzA0OTAwMTY0ZDUyYTY4YzY0YTZkMWQ3MDczMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjY0NDcyMTk5OTk5OTk5NCwgNDAuMjI1ODMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NjNiNjQxOTMyNzQ0YzFjOTIxZTA4ODZlMjgxYjIxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkwMjUsIDM5LjE3NDcyMTk5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGM3OTRkMzdhY2Q4NGE3OTliY2M3M2M4ZjVlM2FiMjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MDUsIDM5LjI3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGNhMjhjODM2NjYxNDUwMmI4ZTFhNWY5ODhkNThhMmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MTU0MjEsIDM5LjM5MDIyOTk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWU1NjUzNmIyMjZlNDdhN2IwMWY1MDY1ZTI5MzQ2YzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MjExMTA5OTk5OTk5OTYsIDM4Ljk5Mjc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmEwZWRjMzRkOGVhNDIyYjg0M2I5MGJkOGZmZWMyYTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MjYxMTEsIDM5LjU2Njk0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzBjNjY3ZGNmYTk3NDczMWE1MmE0N2EwNDZlZDc3OTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NDE2NjY5OTk5OTk5OTUsIDM5LjM2OTQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTdhMWVhYjI3YjIzNDFjYjkwMzZlZjhjMWM5OTY3ZjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NTA4MzMsIDM5LjExNDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTE1NDBlMWY2ZWNhNDM4NzljNDA1MTBlZTA1NTg2YWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NjMwNTYsIDQxLjkxMzQ3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWE3NDg0ZDUyOTUzNDhmZDljMDFjMWVlMGYxMTdkM2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yMDY2MjE5OTk5OTk5OTYsIDQxLjg3NzY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNDM1NGFhMTA5NmI0OWNiYjExMmE5MWIyY2JlNTVlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjIyMTU1OCwgNDEuODk5NDUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDE4ODE3OTRjYTg0OWRhYTcwYWJmNmIwOWU4MDU4MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjMzMTExMSwgNDEuOTM0NzIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTc1YzQxNjk2OWM0ZmQyOGRhOWRjZjVhZDQwMTkyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjM1MDc3NiwgNDEuODAxMzM0MDAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMGNiYzE3MDZhNTU0YmFhOTAxMzA5MzE2MDczOWZlYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQzMTI5MywgNDEuNzYzMDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YjFlMDNmNTkyNGE0MGMyOGE1MDcxY2Q3YWFlMDE3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgyMTY2NywgNDAuNTAxNjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MTNmYjA1NWVlODE0ZTMyODEzODM4M2NjMjAxMmNlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjksIDQwLjQ4MzAwMDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmY2ZTViNDU4Yjg3NDM2NWI0NjJlNjE3ZDEzYzVjMGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43OTk5NDk3OTk5OTk5OSwgNDMuMzI3NjE4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmYzNWU5NjcwZThmNDI2OGJhZmEzYjQ4ZmJlY2VmNWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NTEyMjkyOTk5OTk5OSwgNDMuMjI5MjAxMjAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZjQyZDVjZTliYjA0MmI5OGZhMDBiYjBhZTI5Y2E4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk0Njg5NDUsIDQzLjE3MjEyMjIwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWU2MGE0YzQ5ODA4NDJhY2JiZTM3MTFjYWJkYWE5NWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45NjgyMTY5OTk5OTk5OTYsIDM5LjQ0NzEzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODkyMGQzYjQwMzg1NGRkMWE3MDkwZmIwYzQ2YjMzYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4xODQ3MjIsIDM5LjA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNTliYzJhNGIzNTM0ZTliOGYzNTJlOWE4YjE1NWIzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI4MzYwOTk5OTk5OTk5NiwgMzguOTUzNjE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZjNmYzA0MjAyMDE0ZDUzYjFkZDcwZTcwNmY0ZTk3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk4NzM1MTAwMDAwMDAwNCwgMzguNzE1NDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOWY2MDE1MTA2OGE0MzJmYmI0MDM1NWEyMDRiNDBhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk5OTE2NywgMzguNzgxOTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZWUyNzBkZDliZjE0YjIzYTNjMzJiN2ZjYzZhNmFiZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA0NTI3OCwgMzguNzU2MTExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YjM4OTY4YmJmYTU0ODdiOGRhNTIwNjk4NGIzYTdkMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA1MTExMSwgMzguNzA2Mzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZWE4OWNlNjU3NzA0MTRiOWQ3OWI0ZmJhOTA4ZWI3ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjE4MzMzLCAzOS42NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWIxZWE1MDhiYzcxNGUxZjkwOGE3ZWYzZGEzZDUwY2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wNzU4MzMsIDM5LjM0MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliOWIyMWRlMjcxYzRhYTViZWMwNDVkOTc3NTZiZTg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTE2Mzg5LCAzOS4zMDE2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2ODNkMjM1ODljMTQ0MThhYzdlNDE3YTg3OTU2N2EzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODM1LCA0MS4zODM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWYzMDhlNGQ0YTczNGNjN2FjNjM1N2I4YTY4YTQzNmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NTQ3NDcsIDQwLjMxNzY4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk2MjExNDFjODNjNGUwZTlmMGYwNTgzYjIzMjNjZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTMzMzMsIDQwLjMxMTM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTIwN2EyZmMwMGIwNDFjNDliMGU5ODcyNjRmOGNiZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTc1LCA0MC4zOTIyMjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjMjljMTcxZWIwZDQwOGViZWEwYzMwYTRlODkyYzkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDExMzg5LCA0MC4yMTcyMjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhYTM2ZjM2MjlkNjQ2NzVhMjA2NzdiMjVhNWNmYjI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDQ2MTEwOTk5OTk5OTk2LCA0MC4xODMwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1OTBlMDE5YmY2NjQ0ZjI5ZmZhYTdjNzg3Yjk4YTVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDY4ODg5LCAzOS40OTc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTYxNjU3MGE1ODQ0MWI1OTQ4ZmMwNDAzNjUxNzFhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA3MjIyMiwgNDAuMTg4NjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNTVkMjQwZTQ5ZWI0M2U2OWIxNGE2MTg5NDM3YTZmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA4Mzg4OSwgMzkuODYxMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZDMzNDExOTNkOTY0ZTA4YTg4ZTY5NzAwMGZiZDBjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA5MjIyMiwgNDAuMTEwMjc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNTEyN2ZmMGUwMzQ0NjYzODNjZmNhMmVhYzJkMTMyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM4MDczMjMsIDQ0LjE5MDg5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhMDQ1N2FiMTI1MzQ3NTVhYzQ5ZjZkMDkwNmQ5YWUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDY3NzM0OCwgNDQuMzczMDIxMjAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMWRjY2JlMjZhMWU0ZTQxYTAzMDQxYTg0MTFjYzUzOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ3NDY4LCA0NC4yNDIzMjk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMTJmODM3OGQ3Yzc0YjMzYmE1MzVhZjk5NTNjYjNjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ5OTEwOTgsIDQ0LjE1MTI5NDc5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTM3MjVhMmUzZDAwNDRlNmE3MDVmMmIyNDk3YWU2ODQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MjU0MDE3LCA0NC4yMDkyOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiMmNmOGUyNWI0YjRmN2RiMDk0YjU5MTRjY2E2MWU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTQzNDg4OCwgNDQuNDEzNzU3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDJiNzNhNWY2YzM4NDgzOGJlOGUzNjZmZTZiOTRlZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NzAxMTQzOTk5OTk5OTQsIDQ0LjE0MDM0ODEwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDk0NDI4NDMwMDFhNDM4MjhjMjg2NzZhOTQ2OWE4ZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NzEwNzYxLCA0NC4zNzQwNTkxMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3NTBiMGM3OGMyODQ5MDU5YmM0ZGQ4ZTFjMDY4Y2JjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjcyNzc5NSwgNDQuMjk3MzYxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzlhYWY2MThhNGFjNDk2Yjk4YWI4NTBmNWU5YTgzNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MjI3ODYsIDM5LjUwMDk4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjc4NTM5MzA4MzRhNGNjNzk2NWI0MTI1MDc4YWY3OTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MzM5MTcsIDM5LjUwODA2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmE3OWQyNzgzMTZlNDNmMjg4OGU3OTU2NDE5MDQ5MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wMDkzODksIDM5LjM1NjYzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk4YzkyOWQyYjE5NGM5Y2JlY2JjZjUwN2E2YTNjMWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wMDkzOTcsIDM5LjMzNTMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjY1N2QxZWVhODU1NDY3MWE0OTYwOGUwNTNkZWYzYmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wMDk0MDk5OTk5OTk5OTUsIDM5LjM2MjMyMDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjY5OTEwYzc5MDNiNGYwNGEwMjliOTExODRjOWY4MTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wOTI1MTg0LCA0My41MjIwODUxMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlODUyMTYwYzIwNDQ0NGQ5ZmU2NmNkNzliOWEyZDM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjE3NzQ4NCwgNDMuNzM4MDIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Y0ZmZiM2I1ZTJmNGU1MmFlNTIwZGI1YzRmMzVjMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4yNjAyNDU4OTk5OTk5OTQsIDQzLjY1Mzc4ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UxM2M1NzE4NDhmNzQyYTM4YTEzNzRmYTg2NzhhMGExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzE3ODQxNSwgNDMuODc2NTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMGVhMDYxZWJiMjE0MTI2OGVjZjM1OTE3ZWVhOGQ2ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjMzMzg5MDAwMDAwMDAwNCwgNDMuODE3MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5MmFjNGM0NjVlNDQzOTNhYzQyNGFjMTFlODIwYjY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzQyMzE1OCwgNDMuOTEyNzM5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGQyOTM2NzY4NzZiNGFhNGJhY2JkMTFhZWRiMGQ4OTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNDM0MzkzOTk5OTk5OTQsIDQ0LjAyNTUyMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1ZmNkOWJmOWM5MzQ2ZjliYjQ3ODQ3Zjc5NWIxMDUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzQ4MDgzOSwgNDMuNzI3OTg3ODk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NjNjZGViMTg5NTA0NDVlYmM0NGVkOGRmZTgwNTU0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM1MDY1ODcwMDAwMDAwNCwgNDMuOTEwMzQyNzk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YzEwN2I0ZTQ1NTQ0ZDlmYWI1OTc3NTEzM2MxNDVkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM4MDQ3ODAwMDAwMDAwNCwgNDIuOTA3NDg0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzRkMDhjOWQ2MWM5NGZmMzliOWY4MGNjNDUzZGQ2YWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zOTMzNTUyOTk5OTk5OTYsIDQzLjc0MjI3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0OTNlZTI1ZjE5NjRjMDVhODJhODU2ZGJjMjA3MmJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDExODE0NCwgNDMuOTA0NTEwMjAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNGY1NjhmMTc3MTM0NjY4YjE4MjYwMzZjOTkyZGFkMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ1MzU2MDYsIDQ0LjIxMTk3NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NhM2U5Njk1NGU4ZjQ3ODdhNmRkYWE5YzI5MDIzMmU1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDY2MjgzMzk5OTk5OTk1LCA0My44MzY2OTM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NGYwOWIxZWE0NzA0ZGQ2YWUxM2M3YzJlYTRhNTc3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ3NzgxMTEwMDAwMDAwNCwgNDQuMTIzODgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lODc2MWUwYzYzMDY0NzdkYjFkNTBkNmYzNWJjMzFjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ3ODExODEsIDQzLjc2MDY0NzYwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzU0MzA2MWM3OTM1NGUxNmFmY2FhZmQ3YTcwNzNkYjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40ODU1NzU4LCA0NC4zNjM2NTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MWFlNTE1OTk2ZWY0ZTI4ODE3NjQxMWRhYjc5YTM0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwMzk5NTYsIDQzLjcxODU1NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhNGFjNTNlZTg3MzRlNzc4ZmZiMjEyMjQzNmYzYzM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTA1OTE5Mzk5OTk5OTk2LCA0NC4yMTQ0ODI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMTY1MzM4YzI4NmY0MmYzYTlkMDJiZTc2NzQ2YmM1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUyNDQ0MDAwMDAwMDAwNiwgNDMuOTMxOTQwMDAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOWNlZDdkODlkYTE0NDJkYWQ3YjJkOWZmM2ZjZDU0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUyNjU2NzcsIDQzLjYwMjcwNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE5Mzk2ZTA2ZWMyNzQ4M2JiOTJjNGFmNTBjYzZhNjQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTM4NTk3NzAwMDAwMDA0LCA0My45MzE3NDM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OWFiMTRjMjIzNTk0MzQ5OTEwMTA4Y2Q1MjUxM2MwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU0MDU4ODcwMDAwMDAxLCA0My44OTQzMjE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MTIyYmNjZWZmYTQ0NTFhYjFiYThlOTNjZmE1YmQyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1MjgxNzQ5OTk5OTk5NiwgNDMuNzk3NDYyODk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0ZmIyZmUxZTMyODQ5Y2Y5Mjk1M2M5NjQ3MWE0ZTA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTU0MTcsIDQ0LjA5OTcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOTM1MjlmZWE1MmY0NWZiYjY4YWNjYTI5ZDdkZDc5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1NzM2NzUsIDQzLjE5NDk3MzEwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWM1YWEyZTNkZmY2NGYzNmIzYzhiOGJjNDFiODdmMTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTc3MDM5LCA0My40MzcxODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE3N2YxMTJkMzVlNzRjMmZhZjIzODYwMTBjNWIxMGFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTYxMjY5NSwgNDMuNjA0MjY0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjMxNGVmMzM1N2I0NDkzY2JjMzg1MDY2ZDliZDQ5NzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NjY1NTU0LCA0My44ODQxNzg5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU1N2UxZTJlMmYzYjQxYmM5ZWY1MGQxOWNlNzRiYTUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTY3ODk2OCwgNDMuODQxNTgxNzAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MGZlYWVjZDhlZjI0Y2U0YTM3ODBjNDEyNTc1MjczYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU3ODA3MzgsIDQzLjc1ODkxNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1NzlkYzI1ZDU3NjQzZjQ5NzE2MjgyMzYwNGE3ZjY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjAzMzIzOCwgNDMuOTk0ODA2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWNhYWUyNWQwM2ExNGU4MThjNmQ5MjcxNzdkOTQxYjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MDU1Mjc3LCA0My42MTA2MjYyMDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhNmZlOWYzZTNjMTQwODNiOTAxMzRjNGEwNWY3NmIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjA2OTQsIDQzLjgzNDE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZDVmMjQzNmRiZDc0MWY2Yjk0ZWMzNTA0NzA2MzUyZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxMDE5NzIsIDQzLjM0Njk5MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkyNmU4ZGYyNGQyNzQ3YTA5N2JjNzFhOTcxZTgzZTdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjE0Nzk2MjAwMDAwMDEsIDQ0LjM1MTU0MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczY2E5MGE3MmMzMjQzNzk4ZmUyOGU3MTc2MjVjODA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjE1NzU0NiwgNDQuMDkyNjU1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmE0ZjZmMmY4NTgwNDY5NWE3MmY0MTcyNThhZjAwNDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTk3NTU3MDAwMDAwMDYsIDQ0LjEzMDUyODc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzE3YzJmZjkyOTc0OGY0ODI5Yjg2NDc2NjBkNWIxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYyOTU5NzQ5OTk5OTk5NiwgNDQuMTQzNjk3Nzk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ZmRiOWRlNzk4ZTQxYmM5NmU4YmMwMGZlZTA4ZTBhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjMxOTQsIDQ0LjI2OTE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YmM5OWU4MzJhZmM0OGViODFmZTY4NjViMmJkZjc1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYzNzIyLCA0NC4xMjQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Y4YmVkYzM2YzRmNGYwMmFmMTIyNTAwYWMxMzJlZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDY0NTk1LCA0My40MDMwODM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MjQ3NDQxYjgwZGM0YzY2OThjYmJhNDEzMjY3MzQyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY0ODk4NDcsIDQzLjYzODQ4MTc5OTk5OTk5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDNiMjE1OThlYzgwNDVlMTliYmExOGIzOWU0NzRlMGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDkxNjcsIDQ0LjE1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmYxZGYyZDQzZjAzNDgzNTkzYjlhYzNiMmM1YjgzOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NjEyNTM0LCA0My40MjAzMzk4OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2YjQ2MDE1YTZiODQyN2E4YzlhNTZjYTliY2FkYzViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjY1NTkyMiwgNDQuMDI1MjIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MzMxNTUxMmNkODY0NmU0ODA2ZGFlMDFhYmYyNDMwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3MDg2Nzc5OTk5OTk5NiwgNDMuNDk4MjY3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzFhN2ViZGRhNDk1NGVkY2E0NTRlOTI2OWU5N2ZiZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NzQxMjA5LCA0My41MTc4NzM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kY2NkZDQ3NTI4ODE0Y2U2YjQxNzE5YzQyNTYxMjNmZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY4NTI4LCA0My42NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGQzODE1NTQxYjA0NDlhN2FhMTA3N2MzYzMzZTBiYWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42OTM3NTc3MDAwMDAwMDYsIDQzLjI3Njc0NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1NWNmOGEwNmU2ZTQ2OGI4MjRjZmU3ZDMxMTc4ZjEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjk3OTA0MSwgNDQuMjEzMzA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmJkYzNlNDg0ZjU3NDhlMzg2M2NmMWQwOTg0OWM0ZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43MjI1OTY5LCA0My44ODUwMDk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODE4ODY3NDk2YjY0ZmY1OWZhYWVlODc5NjY2NmJjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjcyMjkzMSwgNDMuNTIxNjQ5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTAzZjhjMjMyODExNDZkMGE4ZTEzZDRjMGI4OGMzMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43MzQxNDg5LCA0My4wMzcwMjg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZjRlNWIzNWFiMzI0ZmMwYTU4OGIzMGE5MThlZDc0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjc0MDMyNTg5OTk5OTk5NSwgNDMuMTkzMjY3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2U3NDBkYThlOTlhNDIxMGEwZTAzZTY4ZGZkZmI4MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NDQxNTQ2LCA0My4zNTEwMTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZWRkNDJjNjA5ZWM0OTkxYTFkNDhmMTNlMDRkMWQ3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjc1NzQ3MDM5OTk5OTk5NSwgNDMuNzE1Njg5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTM2N2FlOGI3NjgzNDQ5YmJjYTM4MTIyOWEwNGVjMDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NzY4NDYxLCA0My4yNjAwMTQ4OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmZTFhMDllNWMyYzRhODI4MzgxNDhiYzYxNDBjNjFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzc3Mzg1NSwgNDMuNDQ0MjQ4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTkyYjliNzA0MDU0NDNhNTg4NTgzYzY0NDg3MjQxNjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43OTg3MTE0OTk5OTk5OTYsIDQzLjYzOTM3NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBmMzI2MDc4YjM3ODRlM2M5YWYzMmI1M2YzMjMyMWNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODAyMjI1Nzk5OTk5OTk1LCA0My4xNDYwNTYwOTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBkMWExMDg1ZGExZDQzN2ZiODk0ZGJiY2ViNWI5ZWMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODAzNDQ1NiwgNDMuNzcwNjE0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTI4ZDY0MjljYjM1NDU3YmE1YTNlM2U5MGEzOWZhN2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MjI5Mzc0LCA0My4xMTE0MzQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hN2E0YzcyMDg3Y2I0ZWFiYjU1YWFhZGQ0MjQyNDQ3OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzNTYzMSwgNDMuMTUzMTE2NDk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODE1MTcxZjA0NmE0ZWI5ODJmMzY3M2E2ZmVlN2VlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzNjY0NjEsIDQzLjYwNzkxODcwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmYyODc2OGY2YWJmNGRmOTkxOTcxNThlNTU0MGJiMjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NDE2MTI1LCA0My4yMDYzOTQyMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmMTc3ZjNmYjJkMTQ4MWE5ZjI3MDJhMWYxYmE1ZjAxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODYwMjg0NywgNDMuMjUxNDA0Nzk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMTQyMWMyZDkxZjY0ZTEwYWM5MDdiYTZmYTZmYmE2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg3ODgzNDksIDQzLjEwNzQ4MTg5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmRmMGVhY2M0ODg5NDU3NDk1YWFkYmY4OWZkZTE4NGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yNDYxMTEsIDQxLjc0MTM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTBmMTcxZmY0ODQ2NDE3YmE1OGI1NDJjZDgyYjYyMmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zMDA3NzcwMDAwMDAwMDQsIDQxLjc0MjY5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTY1NTJlYTRhMjc3NDA5YWI0MzRkNzNmNGY1N2MzZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44MzkxNjY5OTk5OTk5OTYsIDQxLjQ4NjExMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODgyNDBmNjQ0MDU1NDFkNTliMTdjZTUxNzYxMmMxZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NjE1MiwgNDEuMzM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMTJiYzU0OGZhODk0Y2M4YjU5MzhjMjg5YTU0YTQ5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjYzMTEzMiwgNDAuMDcyNjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NzE4MTdiMjhhM2I0NTAyOThiMGY3YjJmZDVkMTI0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgzNSwgMzkuMjA4MDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMGVjMTcxZDg0OTQ0MzM5OWQ5MDU5N2ZhZjZhZTk4ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg0NSwgMzkuNDY3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82M2ZkN2VmMDU3MmQ0YTRhOWJhNzA3NTEwZmZkMWY2MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg2NjY2NywgMzkuMjgzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYWNmMjc3YzFjYzA0M2MwOWMyMGY2NzhlMjBlYjAwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg3MzkwOTk5OTk5OTk5NSwgMzkuMTUzNTU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNzA1MzM0NmQzZmQ0MmFjYmNmZWYwNDhjYTU1NjhmOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg3NDcyMiwgMzkuNDU3Nzc4MDAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OGE0MjU4NTQzOTI0MjE4OGI5MmE0MzBmZDM1NjFiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg4MzA1NTk5OTk5OTk5NiwgMzkuMzgzMDU1OTk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNWY2YWU2ZTRmMTE0YmJhYTQ4MTkzNTJkYmFiY2UwYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg4Mzk0MiwgMzkuMDY2NjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZjVlMmVmZTVkZjA0OTNkYTEyMGMyZTk5Y2M0NzcyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg4Nzc3ODAwMDAwMDAwNCwgMzkuMjY2MTEwOTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYWFhYmFmY2QzNzg0ZDQ0YTc0ZTE4NTQ2ZjdiYjA0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg5MjUyNywgMzkuMjMzNjg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTc1MzgwMTdjOTE0ZWNjOTk3MTVkNDE4OGNiZGJhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkwNSwgMzkuNDE3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjlmNzBiOTcyOGY4NGQ2MGJjMGQ4MWNhYjA2MjhkODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MjI1LCAzOS4zODI3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhYjUxNzBjMjRmNjQ0MGZiYWM0ZTI1ZGUwNWQ1ZGE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTMzODg5LCAzOC44MzY5NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y4YjQ3ZTRmMmFjODRlMmJiYTNlOTk1YWEyYzJhZWJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTQ2Mzg5LCAzOS40MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjYyYTkxMGNmZWVkNGUzMDhlNTg2ZWE3YWY4NWI5NzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NjUsIDM5LjM2Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGQwYmU1OTFiYTBjNDczN2EyMzg4YTkyNWY5OGFlZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45ODMwNTYsIDM5LjQ3NjExMDk5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2JiNjQwNTk5OGRiNDNmNDkyYzM4MjM2MzdkNjk2OWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTQ0NDQsIDM5LjAwMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjZWU1YmQ1ZjRjNjQyMDdiNzIyNTk2NjIyODBhN2IzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDIzOTcyLCAzOC45MzY5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4YmEzOGZlYTQ0YzQxZmJhZmY2MTAxNzc4M2UyYWZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDM0MTY3LCAzOC44OTQ3MjE5OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlNzk4OTQ2YmUzNzQ5N2VhZmFmY2VmYTBhMjM1NmVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDY1NTU2LCA0MC4xNzQxNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlMjM1NWFiZTNhMTRmNGI5YjFiZWMwYzA5ZThhODQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuOTU5MzQ4OTk5OTk5OTk2LCA0MS43NDM4NDY5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmNWZjNmYzNmM3MzQ1M2E4YjJmNWVlZWE0NzU4NDJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuOTg4MzMzMDAwMDAwMDA0LCA0MS43Mzg4ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIyZjBlOTEzM2FhNzQzODE4YzUwZmUzZDM5ZjhkZWY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDQyMzY1OTk5OTk5OTk0LCA0MS43NjQwOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQzOWYyN2I0YjEzZjQ4YzFiNTVjNDY2ZDExYWU3N2I2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTE1Mjc4LCA0MS44MjgwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0MWM0M2ZjOTY2MjRhY2E5MDg5MzM3MzRjOWJhMmM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTM5OTUxLCA0MS44NTM4NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwNDUwNmJlNzFhMzQzZTM4NmJkYTIyZGNhZGM4NjEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTk4NDIzNzk5OTk5OTksIDQxLjY5OTk2NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzOGVkZjhhNTk0NTRlM2VhMDliZDcxYTcwZDQ1NDg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjUzMjcxOTk5OTk5OTk2LCA0MS45MDAwNDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2YmY1MjlkMzIyYTRkMWZiNTE3NGM1ZjQ5ZWVlZmRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNDAwODMzLCA0MS45MzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IxM2ZkODEwYThjNjRmMThhZWVjZTIxM2VmM2IxNzI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNTE5NzIxOTk5OTk5OTk0LCA0MC43MTAyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzZTI5NTVkYjVkODRlOGFiNDAxZTk2Yjg4NmQ5NjRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODY1LCAzOC45ODgwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIzNTVkY2UxNWNhZTQ2NTE4NTFiNTY4ZWJiYzIzYWVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjEyNSwgNDMuN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzNmNzRmY2QyZjVjNGU4ODk1ZmZlNWRjNDZmNThhZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wMiwgNDAuMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2I0ZWE3NzMzNmQwNDIzMjkwNjNlNzRhZDU2N2M5ZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNTQxNjcsIDM5Ljk0NjM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOWMzNjU2NjUxNjA0YzM5YWQzMDY3OTc1ZDM5OTUzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjY0NDcyMTk5OTk5OTk5NCwgNDAuMjI1ODMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2ODdlNTJiYjJkMzRhZmRhYTAzMGRhNzE3NzkwMzhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTAyNSwgMzkuMTc0NzIxOTk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0MDgyNmExYTQ1MjQ0ZmVhM2EwYTdlYTUxYTVmYjA2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTA1LCAzOS4yNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDY5OTg1NjhkNmUyNDYzZWFmZjEyZjkzNzExYTRmYjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MTU0MjEsIDM5LjM5MDIyOTk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjllYmVkMmZmMDY0M2YxODEzZDg0NTRhZjVjMDIzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkyMTExMDk5OTk5OTk5NiwgMzguOTkyNzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxM2E0MDhjMDQ4YTQ5YzhhZWRmZmZhZjNhMTQ1NWE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTI2MTExLCAzOS41NjY5NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDNmYTNjNzg1ZDk1NGE1Zjk2ZGEyZTllYzY0ZTFlNDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NDE2NjY5OTk5OTk5OTUsIDM5LjM2OTQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOGU4ZjJkMDc0MzY0Y2NkOGM1MjRiYmM0ZjI0YWVhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk1MDgzMywgMzkuMTE0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0MGQxOTE1ODdhMDQ0ZjRhNGY0MTI2YTc4M2FiNDZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODYzMDU2LCA0MS45MTM0NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDkwOGE3ODZmNThiNDVjMGFmMTgyN2UzMThiZTcxZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yMDY2MjE5OTk5OTk5OTYsIDQxLjg3NzY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ODc2NjhiMTBkYTQxZjNhNzIxYjdkZDVhZmYyNWI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjIxNTU4LCA0MS44OTk0NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDhlZDFmZTM3MWIyNDYyZGFiOGYyNDVjYWRjNGJmNDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zMzExMTEsIDQxLjkzNDcyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODVmZjQwYjNjY2M0MGJlYTFkMTkzNTVmZjZiNGUyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjM1MDc3NiwgNDEuODAxMzM0MDAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwZjdjMDhmODI2MTRmMjY4ZTdjNjU0MmYxODQ1MDdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNDMxMjkzLCA0MS43NjMwOTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTdiZGQ1MmU2ZmRiNDMzZDllYzIyZTczZmMxNjg0MzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44MjE2NjcsIDQwLjUwMTY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYWY4ODZmODU3NWI0OGYxYWFiNTVmMzQzYzU0ZGQxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjksIDQwLjQ4MzAwMDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNDc1NWU2OTBhODk0ZDg2ODgxMzI3Nzk0OWU4MjI1NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjc5OTk0OTc5OTk5OTk5LCA0My4zMjc2MTg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEyMDkwNDE2M2FkYzRkMTViYzVlZDRkMGQ0OTc5Y2JlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODUxMjI5Mjk5OTk5OTksIDQzLjIyOTIwMTIwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYTE5MDYwNzdkODE0MWY2ODQwMzVlODhhMWMxNDI0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk0Njg5NDUsIDQzLjE3MjEyMjIwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODAxODBhOTJkYTc0ODlhYTQ2YzM4ZWE3MjI4NDk0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk2ODIxNjk5OTk5OTk5NiwgMzkuNDQ3MTMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3NTQ3MDQzMmI2YzQxZTRiM2MwM2FhM2ZjOGRhYzBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTg0NzIyLCAzOS4wN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZTJiYWNiNWNlYWY0ODI4YmUyMGI2OTc3Mzg4Y2NjZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI4MzYwOTk5OTk5OTk5NiwgMzguOTUzNjE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0M2IyMWZiMzFkMDQxNmViYTY4MDc3NjNjYTQ4YWExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTg3MzUxMDAwMDAwMDA0LCAzOC43MTU0ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzJjOTVkNzlmNjBiNGE3Nzk4ZDhkMWVlNmUyMDc1ZGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTkxNjcsIDM4Ljc4MTk0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYjM0ZjNlMzA1ODA0MWNkYjU1OTJiMTE4MTAwMWFjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA0NTI3OCwgMzguNzU2MTExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3ODQ3ZjUwYjc2NTRjOTBiZjllYzkzYTkyYzliOWMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDUxMTExLCAzOC43MDYzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjFhMTg5Mzg2NTQ1NGRhYmJiZDgxNzgwNmY1YzEzMzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4xODMzMywgMzkuNjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjIyZTE1NWJiNDU2NDkwYzhmNTJlOWE0MzI5NWVmYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wNzU4MzMsIDM5LjM0MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDJkODNmOTEyM2RjNDBhYjg3ZTNkNWQ2N2FiZjc2ZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4xMTYzODksIDM5LjMwMTY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MTMzMDEzYzE2M2Q0MzhhODk5NDAxNTJkZGU1YTRjNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgzNSwgNDEuMzgzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODczNTk3OTk2OTFkNGMwODk1Yzk0MTYxYTIzOWJhNzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NTQ3NDcsIDQwLjMxNzY4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MTE0ZmZmZTRjZDQ0NDg4OWRhN2NhYmI3ZTdlYzc3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk5MzMzMywgNDAuMzExMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmMDMwNThkYTQwZDQyODU4NWVjYmExNTEyOWU1MWZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTk3NSwgNDAuMzkyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExY2YwYTRkOTYwYTQzNzc4Mjg0MzFjYWVmODI4ZjNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDExMzg5LCA0MC4yMTcyMjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWVmZWQ4ODMxZjc2NDYxNGEzMzFjMmYwZTYyNjU5NzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNDYxMTA5OTk5OTk5OTYsIDQwLjE4MzA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNmM0MWY0NzdmNWQ0OTQ5YmEwY2FlMzBlOGU5NTQ0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA2ODg4OSwgMzkuNDk3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZjIwOGZiNzYyMDY0Y2E5OGY1YjNlZTFlZGYwMTMzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA3MjIyMiwgNDAuMTg4NjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5MjQzMDU0YzBlZDQ3MmY4ZjE1NWMwNmI3MTYwNGEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDgzODg5LCAzOS44NjEzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWIzYWU1MWQ2ZTg5NDI5YmJmOTk2YmI2ODNmNDg1MDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wOTIyMjIsIDQwLjExMDI3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZDI0MWZlOGU2ODU0N2FhYjdiNDFkNjU4NGVjZDcxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM4MDczMjMsIDQ0LjE5MDg5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTcxNmE4NTgxMDgwNDIzOThjMmYyMTBlMGEwMTYyODIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40Njc3MzQ4LCA0NC4zNzMwMjEyMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGVhYWY0Yzc0YmE5NDM2ZGJhMGUzYzA4YTJjMmY5NDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NzQ2OCwgNDQuMjQyMzI5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMWIxMTgyNmIwYzE0YWRiYTgwMzgwZTdlM2I5NDlkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ5OTEwOTgsIDQ0LjE1MTI5NDc5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZDI4NjE4MzU4Y2E0MGQzOTRhZDdiOGFiZTNhZmYxMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUyNTQwMTcsIDQ0LjIwOTI5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOGI5MDU0NGU5ZjQ0OTFiODI4NDY5YzE3NmI2ZjljZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU0MzQ4ODgsIDQ0LjQxMzc1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDFlZjUwYmYzYWIwNDkyMDkwMjMzMjEzMDE5MTU0ZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NzAxMTQzOTk5OTk5OTQsIDQ0LjE0MDM0ODEwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOWVlMTM0OGE2ZWQ0MjIyYTMxMGYxMGIxZTdlMjdiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3MTA3NjEsIDQ0LjM3NDA1OTEwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYmU5MGQwYmRmYTI0ODExOTcyZWQyN2E5MjJlNjkyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3Mjc3OTUsIDQ0LjI5NzM2MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZThhMDJmZmJmZDlkNGRmMjk0ZTY5Y2ZhMjk0NjEyNWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MjI3ODYsIDM5LjUwMDk4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Y2NiNGJmZjEyNjA0YjVmYmU3ODFjMThiNGVjMDdlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzMzkxNywgMzkuNTA4MDY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBiZjg1NzBjODRkYjRhOGU5OTVmMjVlNzNiNGUyODYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDA5Mzg5LCAzOS4zNTY2MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTNhM2I0Y2RhYjQwNGRjYzkyOWM5N2ZiMzMzZDc0OWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wMDkzOTcsIDM5LjMzNTMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jY2YyZDNmNTkxODg0ZGJkYTJkZGVhZjM2NmEzMzJlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAwOTQwOTk5OTk5OTk5NSwgMzkuMzYyMzIwMDAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmOTA0ODdkMmI2ZjQ2NDQ5MTllYzcxN2I2M2U1ZDYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDkyNTE4NCwgNDMuNTIyMDg1MTAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFkNmQyNDA1NWEyZTRlZDNhNzZkNzkxODc3MDEyODA4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjE3NzQ4NCwgNDMuNzM4MDIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NzExYmZhMGU1Zjg0ZWY3YTllZDBkZmVkNzNjMzEzOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjI2MDI0NTg5OTk5OTk5NCwgNDMuNjUzNzg4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMmFlNjdiMmE4ZTA0ZGM4OTBkMmM5YjQ2MTIwZDZkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjMxNzg0MTUsIDQzLjg3NjUxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZjRiZTdhMzEzYTE0YTcwYjQzYzUzMWIyNDhkMmNlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjMzMzg5MDAwMDAwMDAwNCwgNDMuODE3MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGM5NDdiMzRkYjEyNDZiZDg2NjBhMzEyN2Q1ZGQ0YzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNDIzMTU4LCA0My45MTI3Mzk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjNzkyMzIxNTUxYzQyNDA4ODlmY2NhYjU3NzE1NDU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzQzNDM5Mzk5OTk5OTk0LCA0NC4wMjU1MjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxYjA0Zjk2NmI2NjQ1ZjY4ZDM3YmU0NjZjOTZiN2Y4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzQ4MDgzOSwgNDMuNzI3OTg3ODk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2ZWVmOGYxMzMxODRlMmI4NjEwOTU1M2I1YTlkYTIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzUwNjU4NzAwMDAwMDA0LCA0My45MTAzNDI3OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjUxZGU0MmQ5NDY0NDcwNGJkNWE2ZTE5YjFiZTllMGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zODA0NzgwMDAwMDAwMDQsIDQyLjkwNzQ4NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzk0YjMzYTRhYTgyNGUxYmEzMWU5MjNmZTUzNGQ1ZWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zOTMzNTUyOTk5OTk5OTYsIDQzLjc0MjI3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTllZGNhYjE0YzgyNDU4MmEzOGQ5ZjIxMTkwNzdmNDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40MTE4MTQ0LCA0My45MDQ1MTAyMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzkzNzcwOGZhY2NmNDIxMTkwMDU3MzFkODZhNWUzN2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NTM1NjA2LCA0NC4yMTE5NzczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkzMTdkMDkwN2I1MjQ5MGM5Njg4ZjYwODNiYjY0MGExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDY2MjgzMzk5OTk5OTk1LCA0My44MzY2OTM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwZDI3ZGNmZjRiOTQ2ODJhNWM1OWVkYTBiOWFkNTExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDc3ODExMTAwMDAwMDA0LCA0NC4xMjM4ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjVjODBlZWVhNDBlNDlkMDk1ZmRiNDkxODJiNzE2NWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NzgxMTgxLCA0My43NjA2NDc2MDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTQ3ODliYWRmNGFjNGJkMmI5MTI1NTFlOWYwODk5MDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40ODU1NzU4LCA0NC4zNjM2NTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwN2Q5ZWQxNDg4MDRiMDNiMmNkMjM3MWY5YjU1YjNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTAzOTk1NiwgNDMuNzE4NTU1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NDk0MzA5ZjA3YzI0OWUwYWZmNWJkNGI3MDM3NjkzOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwNTkxOTM5OTk5OTk5NiwgNDQuMjE0NDgyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xM2FhMGEyODg0Mzc0YWQ1OTg1Y2Y2NDdkYjVkZDY1NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUyNDQ0MDAwMDAwMDAwNiwgNDMuOTMxOTQwMDAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkZjMzMWFhODk0NjQ1ZDc4YTdiMzJhNTJiODg0YWE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTI2NTY3NywgNDMuNjAyNzA0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZjRkNmQ5Y2Y2ZGE0NjY2OTdiMjVkNWY5M2RhYmE2ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUzODU5NzcwMDAwMDAwNCwgNDMuOTMxNzQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOWEyMDAyODQ0ZDg0OTY1OGYyNjZiMjM3YThmNjI5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU0MDU4ODcwMDAwMDAxLCA0My44OTQzMjE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjZjA5MjYyYTgwMjRiZWVhNzEyNGI1MDVhMzc1YTk5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTUyODE3NDk5OTk5OTk2LCA0My43OTc0NjI4OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMTgyNThiMTk1YzQ0ODNiYmU2MmJmYzdjOGM0ODgwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1NDE3LCA0NC4wOTk3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZjE2ZDVmOTFmMzM0OGI3YWFmMDhkMmU1NDIxYTcxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1NzM2NzUsIDQzLjE5NDk3MzEwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NGMzMzkxNzkxNDQ0ODdjOThmNTI1ZjA1YzdmNTgzOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1NzcwMzksIDQzLjQzNzE4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82M2ZmZGUwZTA3Njc0YzU1OWRjOTlkNmZkYTNjOGMwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU2MTI2OTUsIDQzLjYwNDI2NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWQ3MDU2NGFjYWIxNDdlMTkxNGFkNDM0M2MzMThkMmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NjY1NTU0LCA0My44ODQxNzg5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjQ2ZTExYjIyMmZkNGZmMTk3NTUzMmE3NDUzMmIyOTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41Njc4OTY4LCA0My44NDE1ODE3MDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Y2OGNmYjdjMmY4NDA4MGE0MjljZjc5Mzk1ZjhhMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NzgwNzM4LCA0My43NTg5MTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwMGIxMmZhYTU4NTQ2NTY4OTg1NTM3MjVlNDVmMGRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjAzMzIzOCwgNDMuOTk0ODA2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MTFmNDNkOWU0MzY0MTg1YjNmYWIxNTg2OTg1YWU4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwNTUyNzcsIDQzLjYxMDYyNjIwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDA3ZjU1YTAwYjI0YTc2YjBlMTI4Mzc5NDg1ZWJjZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwNjk0LCA0My44MzQxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOTAwOTYzZDcyZmM0OTY1OTBmZDgyYjU1MTE0ZGRkMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxMDE5NzIsIDQzLjM0Njk5MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDNlODgxODhiMzBjNGRlMTk4ZThlMWE4MmVjMDM5MWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTQ3OTYyMDAwMDAwMSwgNDQuMzUxNTQwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMGQ1MTVmNjk0MGQ0YTQzODc5YmI4ODkyODE2YTFmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxNTc1NDYsIDQ0LjA5MjY1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTNhMGI1YWY1ZTg1NGQ3Y2JkYTdkNzhlYjk2ZjU5MzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTk3NTU3MDAwMDAwMDYsIDQ0LjEzMDUyODc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmODJmMmI3MTg2MjQxOTQ4NjdiODcyNWJkMTZmYmYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjI5NTk3NDk5OTk5OTk2LCA0NC4xNDM2OTc3OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNGZmMjU1ODQ3NTE0OTE3YWIxNjYzZjhhMzA1ODBlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYzMTk0LCA0NC4yNjkxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YWFlOWE4MzFmYjA0YzViODNjMDJjODM2MDhlYzA0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYzNzIyLCA0NC4xMjQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOTc1Mjg0YmU2NDQ0YzZiOTcxMTI4N2JkYTlhOGZjZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY0NjQ1OTUsIDQzLjQwMzA4MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTBiNjk5YTEzN2U0NGQyMmJmMWM4ZWYzNzgyZjRhZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDg5ODQ3LCA0My42Mzg0ODE3OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjVlZGJjNzk1ODZkNDY3OWFiY2NlN2Q0YmYzYzg0MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDkxNjcsIDQ0LjE1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MTRhODNjMjAyNTU0NjY5ODVhZGQwYTE0MDQzNTRkMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY2MTI1MzQsIDQzLjQyMDMzOTg5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YmM1YmEwMzBkMWQ0YzhjOGY3ZjA4NzA0ZWUwMWRmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY2NTU5MjIsIDQ0LjAyNTIyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MmNiYjRmNTMwNjg0ZDFhOGE2MjEyNzU3N2M1NmNhNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3MDg2Nzc5OTk5OTk5NiwgNDMuNDk4MjY3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OGZlZjhkNTVhYWI0NGU3YjFmNjRhZTAyOTcwZGM2MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3NDEyMDksIDQzLjUxNzg3MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTAyZTExMTY3Y2ExNGE3ZmE2ZjVmNjY5MmYzMjY3MTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42ODUyOCwgNDMuNjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Q4NjUzZmU5MDVhNDQ4ZjllMzhjYzA5ZDg1Mzg4ZmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42OTM3NTc3MDAwMDAwMDYsIDQzLjI3Njc0NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDkyMjBmNDIwYmY3NDk0MGJmOWY2NzU3NzVjMDUyMGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42OTc5MDQxLCA0NC4yMTMzMDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IwYTU1NjhjOTQ0MDQzOTY5OTZhNmE2NGZlNjU0YzhhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzIyNTk2OSwgNDMuODg1MDA5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTU1MTAyZGRlODM0YzJkOGIyZjBjN2VkZmY0OTFjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjcyMjkzMSwgNDMuNTIxNjQ5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZDQ5MWM2OWY5NjM0ZTc3YjdhYjg2NzI5YjFjMzBmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjczNDE0ODksIDQzLjAzNzAyODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTRlNGMwOTUwYjg1NDY5MWFjNTUwZTBjMzQ4ODY5MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NDAzMjU4OTk5OTk5OTUsIDQzLjE5MzI2NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmJjNGMxODg2MjQ1NGUyMzlmMmM4NjdhNDI2OGEwZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NDQxNTQ2LCA0My4zNTEwMTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3YzFjMDJiNmQ1MjQ3ZWZiMjA3NjY2MjIwMDY4ZmY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzU3NDcwMzk5OTk5OTk1LCA0My43MTU2ODk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmZjg0MzE2NWM5MzQ1MzdhZjg3OTg2YmQ1MDc0ZWJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzc2ODQ2MSwgNDMuMjYwMDE0ODk5OTk5OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkODcxMTA0YTIxYjQ0ZDg5NGFkMTg3NzM3ZjJiNGUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzc3Mzg1NSwgNDMuNDQ0MjQ4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NmEzM2Q5NjQ4YzU0MzQ1OTQyN2I5ODQyOTM2ZjNlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjc5ODcxMTQ5OTk5OTk5NiwgNDMuNjM5Mzc1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NDEyMDJhNjVlYjY0M2YyOWI5Mzc2ZTA4MGMwZThkMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgwMjIyNTc5OTk5OTk5NSwgNDMuMTQ2MDU2MDk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiNzlmM2RmZjA0YjQwZTQ4NmE1MDIzMmI3MWZiYmM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODAzNDQ1NiwgNDMuNzcwNjE0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MmQ3MjY0ZjM3YzM0NWRhOTFmZTA0MjgxMjJkMDU3ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgyMjkzNzQsIDQzLjExMTQzNDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzYxMDVjODc1MGY5NDJlODgyNTNlNDgzNTRkYzk3MWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MzU2MzEsIDQzLjE1MzExNjQ5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kY2FjYmFkYzYwMmQ0NjZkOTdjNGI2ZGI0OTA1MDVkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzNjY0NjEsIDQzLjYwNzkxODcwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZTE3NjVmZTdjNDM0NDkwYmUzOTg4OGFkMmNmNmM3OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg0MTYxMjUsIDQzLjIwNjM5NDIwMDAwMDAwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTQ5ODFiZTBkOGM0ZTZiYjU1OTVlOGRjNWYyMmJlYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg2MDI4NDcsIDQzLjI1MTQwNDc5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YzRlMTQwYzMyOTE0NTk2OWVmZjE5MTI3NWE1ZDI1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg3ODgzNDksIDQzLjEwNzQ4MTg5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNWY3MzIyYWM3NDg0ZTQwYmVkZGI1NjgxOWNhY2ViNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI0NjExMSwgNDEuNzQxMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyNGNlOGIwNjdmYzQ4MzJiNzA1ZmUxM2RiMmFhZjU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMzAwNzc3MDAwMDAwMDA0LCA0MS43NDI2OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjA4NWNhODJiZDE2NGVlMGJiNjkwNTlmZjAwZjJjNjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44MzkxNjY5OTk5OTk5OTYsIDQxLjQ4NjExMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjFiNWQ0MTAyN2U0N2UyYmY3MjcwOWQ2NWExODliNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg2MTUyLCA0MS4zMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWM0ZGUyMWIyNDg0NDBlMmExYWY3NDY2ZjY2NWRiNGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC42MzExMzIsIDQwLjA3MjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZmU1ZDBhNTA1MTQ0NGFjOTBjNDFiMmU2MTNiYzBkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgzNSwgMzkuMjA4MDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlMDBlNTE4NGFlNjQyODE5NDU4NDM0NTYzOGZkMDk5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODQ1LCAzOS40Njc3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzQzMGRlN2ExOWQ2NDg1OWJiYTI4ZDI1NWFmNWY0NDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NjY2NjcsIDM5LjI4MzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YWIwZWQ3NTJlYjQ0N2UyYTdmYzgxMGM5NjlhMDY4ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg3MzkwOTk5OTk5OTk5NSwgMzkuMTUzNTU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE0ZTk5YjE2YjY2MjQyNTRiY2JhNTgxNzFiMDUwZWFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODc0NzIyLCAzOS40NTc3NzgwMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2NmODA3ZjkyMzAyNDFlOGJhOTM0YjM1ZmZiNzZhNGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44ODMwNTU5OTk5OTk5OTYsIDM5LjM4MzA1NTk5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMDIyOTFmM2U4OGI0ZTUzOTQ4MGI3YWE0YTQ3YTcyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg4Mzk0MiwgMzkuMDY2NjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0ODA2ODljMzM5NTRlNWY5M2EyZWNmNDNmNWNkZTdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODg3Nzc4MDAwMDAwMDA0LCAzOS4yNjYxMTA5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzdmOGMxNDI4MDFjNGI1NWIxNDMyNWVhZjMwYWJmNmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44OTI1MjcsIDM5LjIzMzY4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMGM0YjRkMDBjYjk0M2Y2YWQxMWI3NjVjNDAxMDA4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkwNSwgMzkuNDE3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZjgxMjRlYmJmMDI0NGU3OTQ1MTAyZTBiMTZjY2E0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkyMjUsIDM5LjM4Mjc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNDg0MTQ5ZmJjNjQ0NGZkYTE5NjZkNTViYzExYzA1ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkzMzg4OSwgMzguODM2OTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlMzQ4NzM5OWU2MDQ2MmY5YTExZTJmMTNjOWE1NzlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTQ2Mzg5LCAzOS40MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYmZlZjY4ODhjZDU0Yjk5YTFhNWYwM2Y2ZTU3YzY4NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk2NSwgMzkuMzY3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlYzM4MTkzNDhhNjQ2ZjdiM2JiMTJiMTIyNmFkODgwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTgzMDU2LCAzOS40NzYxMTA5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDEzNmJjYzU2Njg5NDQ1OGEyZjBmMDljNWViZjhiMzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTQ0NDQsIDM5LjAwMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzI2ZmIwYjljYWM3NDUyNWJjZDc1MjdhZDRmY2Q3MDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wMjM5NzIsIDM4LjkzNjk5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MWI0NWNjOTk0MjU0MTQ2YTljNGZkODlkZTlkNWFmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAzNDE2NywgMzguODk0NzIxOTk5OTk5OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlNDU3NTZjMTg4ZTRkMDY5ZjQ3Y2MyZWYyM2Q2OGE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDY1NTU2LCA0MC4xNzQxNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODdjMTQ4OWMwOGZmNGViZDk4MmEyY2YwYTdjODZlMDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45NTkzNDg5OTk5OTk5OTYsIDQxLjc0Mzg0Njk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNWIzZTA3NzFjNzY0MGMwOTFlNzI0Y2Y0YWYxNWYzOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk4ODMzMzAwMDAwMDAwNCwgNDEuNzM4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2N2YzYTI4MDgxMTRmZGVhMjc3NjljMjQ2YjJhY2ExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDQyMzY1OTk5OTk5OTk0LCA0MS43NjQwOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODE1YjdlMzhjZDg1NDZlMzg2MzRiNDhmZmYzODJjNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4xMTUyNzgsIDQxLjgyODA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMmE5MWRjOWI2NTE0MzdkOWQwMThjMDM3ZGQ3ZmZlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjEzOTk1MSwgNDEuODUzODc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlYzQ2ZTA1MTgwOTQ5NDJhY2NhYWIxMzU3MWUxNmMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTk4NDIzNzk5OTk5OTksIDQxLjY5OTk2NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDE4NzFhMzBjODc5NGU3ZGJlZGJjNDE2ZTY2Y2M5OTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yNTMyNzE5OTk5OTk5OTYsIDQxLjkwMDA0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMDJkMTliNmU2MzA0Yjk3YmU0YmEyNDMwN2U1ZjcyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQwMDgzMywgNDEuOTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwMjRjM2YwMTBjOTRlMzY4Y2FhZjRmZWEzZTJjNTJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNTE5NzIxOTk5OTk5OTk0LCA0MC43MTAyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGY3YjgwYTQ1MDg2NDhmNWE4YmFjZTNmMjFlY2VhMzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NjUsIDM4Ljk4ODA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOGFlOGNlMWYxYWI0YWE3YTc3YmVkNWY3NWQ2OTk2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjIxMjUsIDQzLjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzExNGUwNjcyMTFjNDAyZWJiYzM3M2NhYTM1ZjVmN2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wMiwgNDAuMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5YmQxOWRkMWI4ODQwODJhNzIwNzNlZTAyN2E0ZTM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2ZDAxNDViYjMyZjQ1MTk4MWJhOGVlNGViMTRhYTZhID0gJChgPGRpdiBpZD0iaHRtbF83NmQwMTQ1YmIzMmY0NTE5ODFiYThlZTRlYjE0YWE2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S2hha3VyaW5va2hhYmw8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5YmQxOWRkMWI4ODQwODJhNzIwNzNlZTAyN2E0ZTM0LnNldENvbnRlbnQoaHRtbF83NmQwMTQ1YmIzMmY0NTE5ODFiYThlZTRlYjE0YWE2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MTE0ZTA2NzIxMWM0MDJlYmJjMzczY2FhMzVmNWY3YS5iaW5kUG9wdXAocG9wdXBfNTliZDE5ZGQxYjg4NDA4MmE3MjA3M2VlMDI3YTRlMzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl83MTE0ZTA2NzIxMWM0MDJlYmJjMzczY2FhMzVmNWY3YS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlYjVjMDg4ZjAwZjRhOTJiYWY0ZDFiMTg0ZWYyMDZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDU0MTY3LCAzOS45NDYzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxMDgzMzM0ZmY4NjRlMTBiNjBlNTQ0OWMxZjFmMzMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0MmVlZmIzNDM5MzRiOWRhYjBhMDE4ZWU5Y2UyNmY2ID0gJChgPGRpdiBpZD0iaHRtbF9iNDJlZWZiMzQzOTM0YjlkYWIwYTAxOGVlOWNlMjZmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+VWx5YXA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxMDgzMzM0ZmY4NjRlMTBiNjBlNTQ0OWMxZjFmMzMwLnNldENvbnRlbnQoaHRtbF9iNDJlZWZiMzQzOTM0YjlkYWIwYTAxOGVlOWNlMjZmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZWI1YzA4OGYwMGY0YTkyYmFmNGQxYjE4NGVmMjA2Yi5iaW5kUG9wdXAocG9wdXBfYzEwODMzMzRmZjg2NGUxMGI2MGU1NDQ5YzFmMWYzMzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl81ZWI1YzA4OGYwMGY0YTkyYmFmNGQxYjE4NGVmMjA2Yi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4NDRiMGJjZTZiNzRkYzlhNDZiMDE5NGE5Y2Y1NGQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNjQ0NzIxOTk5OTk5OTk0LCA0MC4yMjU4MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzNWQ0NDY5NWZlYzRlNjc5MzA4NTMwOTBjNTZhZDUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmODBmZjM4MzA1MzRiMjZiMGE1NTcxMzJlODNkMjY4ID0gJChgPGRpdiBpZD0iaHRtbF8yZjgwZmYzODMwNTM0YjI2YjBhNTU3MTMyZTgzZDI2OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+T2t0eWFicnNraXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzNWQ0NDY5NWZlYzRlNjc5MzA4NTMwOTBjNTZhZDUxLnNldENvbnRlbnQoaHRtbF8yZjgwZmYzODMwNTM0YjI2YjBhNTU3MTMyZTgzZDI2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jODQ0YjBiY2U2Yjc0ZGM5YTQ2YjAxOTRhOWNmNTRkNC5iaW5kUG9wdXAocG9wdXBfMDM1ZDQ0Njk1ZmVjNGU2NzkzMDg1MzA5MGM1NmFkNTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9jODQ0YjBiY2U2Yjc0ZGM5YTQ2YjAxOTRhOWNmNTRkNC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5OGUyMTE3OTIwYTQ2NjViZTY5YWY0NDU3MzZmYWRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTAyNSwgMzkuMTc0NzIxOTk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZmI1ZjBkYWEyYzA0MzM3YTQ0ZmVmZDgyOGQzNWRhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YWVhMDE0ZjY5ZWU0N2U0OTRhOGZkMTQxNDQ0ZTA2NyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWFlYTAxNGY2OWVlNDdlNDk0YThmZDE0MTQ0NGUwNjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkthemF6b3ZvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZmI1ZjBkYWEyYzA0MzM3YTQ0ZmVmZDgyOGQzNWRhNi5zZXRDb250ZW50KGh0bWxfOWFlYTAxNGY2OWVlNDdlNDk0YThmZDE0MTQ0NGUwNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzk4ZTIxMTc5MjBhNDY2NWJlNjlhZjQ0NTczNmZhZGIuYmluZFBvcHVwKHBvcHVwXzhmYjVmMGRhYTJjMDQzMzdhNDRmZWZkODI4ZDM1ZGE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNzk4ZTIxMTc5MjBhNDY2NWJlNjlhZjQ0NTczNmZhZGIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZDBiMTQyMGQ5ODY0N2Y3YjQ1Y2JhMDliNzM3M2VhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkwNSwgMzkuMjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMmNkNzRiYjI5NzE0ODg4OGVjNWQ1Y2IxMTg4MDJmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNmNmMDEwZjYyYWY0NDliYTE4ZGIzMWYzNzNlMzcwNiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTZjZjAxMGY2MmFmNDQ5YmExOGRiMzFmMzczZTM3MDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPk5vdm92b2NoZXBzaGl5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMmNkNzRiYjI5NzE0ODg4OGVjNWQ1Y2IxMTg4MDJmYS5zZXRDb250ZW50KGh0bWxfZTZjZjAxMGY2MmFmNDQ5YmExOGRiMzFmMzczZTM3MDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmQwYjE0MjBkOTg2NDdmN2I0NWNiYTA5YjczNzNlYTkuYmluZFBvcHVwKHBvcHVwX2IyY2Q3NGJiMjk3MTQ4ODg4ZWM1ZDVjYjExODgwMmZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYmQwYjE0MjBkOTg2NDdmN2I0NWNiYTA5YjczNzNlYTkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjdmMmU4MjJjNmY0NzA4OGRiYjA5ODg2NGE5YzZhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkxNTQyMSwgMzkuMzkwMjI5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNGZkMTE3ZjJjMDQ0MTQ1OWQxYmFiYjhhZGMwNzA0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYjNmMjBlYmE3NDc0YmFmYjk2NzIxODhhNjA1YjY2MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZGIzZjIwZWJhNzQ3NGJhZmI5NjcyMTg4YTYwNWI2NjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPktvbG9zPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNGZkMTE3ZjJjMDQ0MTQ1OWQxYmFiYjhhZGMwNzA0YS5zZXRDb250ZW50KGh0bWxfZGIzZjIwZWJhNzQ3NGJhZmI5NjcyMTg4YTYwNWI2NjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGI3ZjJlODIyYzZmNDcwODhkYmIwOTg4NjRhOWM2YTQuYmluZFBvcHVwKHBvcHVwXzE0ZmQxMTdmMmMwNDQxNDU5ZDFiYWJiOGFkYzA3MDRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZGI3ZjJlODIyYzZmNDcwODhkYmIwOTg4NjRhOWM2YTQuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNjM2N2ZlY2EyNGY0ZGMzYjJiMTkwOTliYzNkN2Q0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkyMTExMDk5OTk5OTk5NiwgMzguOTkyNzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MmRkMzE2OTMzMmE0Y2VjYWM2MDY4YWExMjE1NWU2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZDA2NjljZTQ2NDA0ZGNlYWJhOWFjMWM5MjNkOGEwNSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2QwNjY5Y2U0NjQwNGRjZWFiYTlhYzFjOTIzZDhhMDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPlRha2h0YW11a2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MmRkMzE2OTMzMmE0Y2VjYWM2MDY4YWExMjE1NWU2Ny5zZXRDb250ZW50KGh0bWxfY2QwNjY5Y2U0NjQwNGRjZWFiYTlhYzFjOTIzZDhhMDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzYzNjdmZWNhMjRmNGRjM2IyYjE5MDk5YmMzZDdkNGMuYmluZFBvcHVwKHBvcHVwXzgyZGQzMTY5MzMyYTRjZWNhYzYwNjhhYTEyMTU1ZTY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYzYzNjdmZWNhMjRmNGRjM2IyYjE5MDk5YmMzZDdkNGMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NTY3ZTM0MDYxNzg0MTE3OWYyMTMwNzU0ZWE5NTU0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkyNjExMSwgMzkuNTY2OTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOTA0MDIwYjExN2M0NDM1YjVhNjAyYjhlN2RmMWEzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZWJlZTI1MmI5ODM0M2I5ODcxNDA4MTk2NDg2NGNhMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMmViZWUyNTJiOTgzNDNiOTg3MTQwODE5NjQ4NjRjYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkdhYnVrYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5MDQwMjBiMTE3YzQ0MzViNWE2MDJiOGU3ZGYxYTNhLnNldENvbnRlbnQoaHRtbF8yZWJlZTI1MmI5ODM0M2I5ODcxNDA4MTk2NDg2NGNhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NTY3ZTM0MDYxNzg0MTE3OWYyMTMwNzU0ZWE5NTU0OC5iaW5kUG9wdXAocG9wdXBfMzkwNDAyMGIxMTdjNDQzNWI1YTYwMmI4ZTdkZjFhM2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80NTY3ZTM0MDYxNzg0MTE3OWYyMTMwNzU0ZWE5NTU0OC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkYTI4YjM1ZjcwODQyMDY4NWE0MmE3NWZkZDg3OGZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTQxNjY2OTk5OTk5OTk1LCAzOS4zNjk0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M5M2Y5ZTVhYTNlMzQ2YmM5ZWRkZmQyNjkwZmJiNDQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0MmFlZTU3YmNkYzRiYTY4M2I2ZDdmNjk3Y2ViODhkID0gJChgPGRpdiBpZD0iaHRtbF8wNDJhZWU1N2JjZGM0YmE2ODNiNmQ3ZjY5N2NlYjg4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UHNoaWt1eWtoYWJsJzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzkzZjllNWFhM2UzNDZiYzllZGRmZDI2OTBmYmI0NDkuc2V0Q29udGVudChodG1sXzA0MmFlZTU3YmNkYzRiYTY4M2I2ZDdmNjk3Y2ViODhkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkYTI4YjM1ZjcwODQyMDY4NWE0MmE3NWZkZDg3OGZmLmJpbmRQb3B1cChwb3B1cF9jOTNmOWU1YWEzZTM0NmJjOWVkZGZkMjY5MGZiYjQ0OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzlkYTI4YjM1ZjcwODQyMDY4NWE0MmE3NWZkZDg3OGZmLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzA1ODg2ZWJmYjI2NGYyYzlkMTQ3NzVlMmZiYjlhZjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NTA4MzMsIDM5LjExNDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTU0MzhhMTQ1YTQ2NDZlYWJhYzdlOTA2ZTc5ZWFlMzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDM3NTNiYjhjMTY0NGM3YmJmMTQ2NTFmOGQ4YjU1MzQgPSAkKGA8ZGl2IGlkPSJodG1sX2QzNzUzYmI4YzE2NDRjN2JiZjE0NjUxZjhkOGI1NTM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5UdWd1cmdveTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTU0MzhhMTQ1YTQ2NDZlYWJhYzdlOTA2ZTc5ZWFlMzIuc2V0Q29udGVudChodG1sX2QzNzUzYmI4YzE2NDRjN2JiZjE0NjUxZjhkOGI1NTM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMwNTg4NmViZmIyNjRmMmM5ZDE0Nzc1ZTJmYmI5YWYzLmJpbmRQb3B1cChwb3B1cF9lNTQzOGExNDVhNDY0NmVhYmFjN2U5MDZlNzllYWUzMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzMwNTg4NmViZmIyNjRmMmM5ZDE0Nzc1ZTJmYmI5YWYzLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDEzMzAyN2E4NzI4NGU4MDk2NzMzZjU2MjVhNzk4MzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NjMwNTYsIDQxLjkxMzQ3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzIwN2VhYTQ5ODRiNDY5N2FkMjg2ZTg3NjZhYjJjODUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmZhNGY0NTcwYTNlNDg4MmIzMDUwNWQwMGYxZTRiNGIgPSAkKGA8ZGl2IGlkPSJodG1sX2ZmYTRmNDU3MGEzZTQ4ODJiMzA1MDVkMDBmMWU0YjRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5LaHVtYXJhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMjA3ZWFhNDk4NGI0Njk3YWQyODZlODc2NmFiMmM4NS5zZXRDb250ZW50KGh0bWxfZmZhNGY0NTcwYTNlNDg4MmIzMDUwNWQwMGYxZTRiNGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDEzMzAyN2E4NzI4NGU4MDk2NzMzZjU2MjVhNzk4MzQuYmluZFBvcHVwKHBvcHVwX2MyMDdlYWE0OTg0YjQ2OTdhZDI4NmU4NzY2YWIyYzg1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZDEzMzAyN2E4NzI4NGU4MDk2NzMzZjU2MjVhNzk4MzQuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYWI0ZTMxNjE0Mjg0NjAyODQ1MTQ2YjI3MTdiOWRkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjIwNjYyMTk5OTk5OTk5NiwgNDEuODc3NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkZTE3OWJiZjhkNzRlYjdhMzg1OTdmOTAyN2E3MmUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyNjRmNjA5OGI0ZTQ5NTJhNDdiOTUwZGY1MzY4OGIzID0gJChgPGRpdiBpZD0iaHRtbF9lMjY0ZjYwOThiNGU0OTUyYTQ3Yjk1MGRmNTM2ODhiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+UHNhdWNoeWUtRGFraGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkZTE3OWJiZjhkNzRlYjdhMzg1OTdmOTAyN2E3MmUwLnNldENvbnRlbnQoaHRtbF9lMjY0ZjYwOThiNGU0OTUyYTQ3Yjk1MGRmNTM2ODhiMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYWI0ZTMxNjE0Mjg0NjAyODQ1MTQ2YjI3MTdiOWRkYy5iaW5kUG9wdXAocG9wdXBfNmRlMTc5YmJmOGQ3NGViN2EzODU5N2Y5MDI3YTcyZTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kYWI0ZTMxNjE0Mjg0NjAyODQ1MTQ2YjI3MTdiOWRkYy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmMmRjNzA3OTk3YTRlNDVhMDc4YjEyMjhiMjA2YzY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjIxNTU4LCA0MS44OTk0NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3NTVhOTg4MWNkYjQ2ZWE4ZjU2MDUyYjBlZTg4NjViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5OGQ2ZTc3YmJlZjRmMTQ4MTJiOTNhMjE2OGZhMGI5ID0gJChgPGRpdiBpZD0iaHRtbF8wOThkNmU3N2JiZWY0ZjE0ODEyYjkzYTIxNjhmYTBiOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+Tm92b2todW1hcmluc2tpeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjc1NWE5ODgxY2RiNDZlYThmNTYwNTJiMGVlODg2NWIuc2V0Q29udGVudChodG1sXzA5OGQ2ZTc3YmJlZjRmMTQ4MTJiOTNhMjE2OGZhMGI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmMmRjNzA3OTk3YTRlNDVhMDc4YjEyMjhiMjA2YzY1LmJpbmRQb3B1cChwb3B1cF82NzU1YTk4ODFjZGI0NmVhOGY1NjA1MmIwZWU4ODY1YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzJmMmRjNzA3OTk3YTRlNDVhMDc4YjEyMjhiMjA2YzY1LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI5ZmRkNWVjNDRjNDFhMGFlOTllMTE3OTRjNTFhYzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zMzExMTEsIDQxLjkzNDcyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWI2NzhmNDRjZWZlNDJjZTk4NzMwMTFiNjBmNmZlZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWVkZTViMzMxYzc5NGZkZWI5NTNkMTEyYzA2NmI5MmUgPSAkKGA8ZGl2IGlkPSJodG1sX2FlZGU1YjMzMWM3OTRmZGViOTUzZDExMmMwNjZiOTJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5BZHlnZS1LaGFibDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWI2NzhmNDRjZWZlNDJjZTk4NzMwMTFiNjBmNmZlZDkuc2V0Q29udGVudChodG1sX2FlZGU1YjMzMWM3OTRmZGViOTUzZDExMmMwNjZiOTJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyOWZkZDVlYzQ0YzQxYTBhZTk5ZTExNzk0YzUxYWM4LmJpbmRQb3B1cChwb3B1cF85YjY3OGY0NGNlZmU0MmNlOTg3MzAxMWI2MGY2ZmVkOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzQyOWZkZDVlYzQ0YzQxYTBhZTk5ZTExNzk0YzUxYWM4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWQzNDg0ZDQ2MTc5NGE0N2I4MTdhMDQ0NTNlMDQxMjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zNTA3NzYsIDQxLjgwMTMzNDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjA4N2Y2NzFlNzdmNGIzOTg5Y2FlYTRiMjQ3NWYwZTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGRmMWI5MWExZDJiNDFiOWFjNWQyNGJlM2ZjNDFkMjcgPSAkKGA8ZGl2IGlkPSJodG1sXzRkZjFiOTFhMWQyYjQxYjlhYzVkMjRiZTNmYzQxZDI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5CYXJhbGtpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMDg3ZjY3MWU3N2Y0YjM5ODljYWVhNGIyNDc1ZjBlMy5zZXRDb250ZW50KGh0bWxfNGRmMWI5MWExZDJiNDFiOWFjNWQyNGJlM2ZjNDFkMjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWQzNDg0ZDQ2MTc5NGE0N2I4MTdhMDQ0NTNlMDQxMjguYmluZFBvcHVwKHBvcHVwX2IwODdmNjcxZTc3ZjRiMzk4OWNhZWE0YjI0NzVmMGUzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOWQzNDg0ZDQ2MTc5NGE0N2I4MTdhMDQ0NTNlMDQxMjguYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OGQxZDAzN2ExMzc0NGU2YmQ0NjNjZjllODdlYmUwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQzMTI5MywgNDEuNzYzMDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NDgyNGRiMTJiZDA0MDQwOWY1MzM1NDVhOWY1ZDc3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZTkzNmM5ZjI4ZDM0ZTk5OTA1NDdjMGRlZGVjNjUyZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmU5MzZjOWYyOGQzNGU5OTkwNTQ3YzBkZWRlYzY1MmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkVyc2Frb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0ODI0ZGIxMmJkMDQwNDA5ZjUzMzU0NWE5ZjVkNzdiLnNldENvbnRlbnQoaHRtbF82ZTkzNmM5ZjI4ZDM0ZTk5OTA1NDdjMGRlZGVjNjUyZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OGQxZDAzN2ExMzc0NGU2YmQ0NjNjZjllODdlYmUwZC5iaW5kUG9wdXAocG9wdXBfNzQ4MjRkYjEyYmQwNDA0MDlmNTMzNTQ1YTlmNWQ3N2IpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80OGQxZDAzN2ExMzc0NGU2YmQ0NjNjZjllODdlYmUwZC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3NjgzZjY2YzhjMDQ5YWU5ZDAxNjM0MjIxNjFjODk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODIxNjY3LCA0MC41MDE2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwZTQ3NDcxOGVmZjQ3MTk4NTcyMGRkZGZlMDIxNDE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5MTgyMThlNDM2YTQ5ZWNiMzQ3OTgyMjg4M2Q1MmZlID0gJChgPGRpdiBpZD0iaHRtbF8wOTE4MjE4ZTQzNmE0OWVjYjM0Nzk4MjI4ODNkNTJmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+QmxlY2hlcHNpbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDBlNDc0NzE4ZWZmNDcxOTg1NzIwZGRkZmUwMjE0MTYuc2V0Q29udGVudChodG1sXzA5MTgyMThlNDM2YTQ5ZWNiMzQ3OTgyMjg4M2Q1MmZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc3NjgzZjY2YzhjMDQ5YWU5ZDAxNjM0MjIxNjFjODk2LmJpbmRQb3B1cChwb3B1cF8wMGU0NzQ3MThlZmY0NzE5ODU3MjBkZGRmZTAyMTQxNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzc3NjgzZjY2YzhjMDQ5YWU5ZDAxNjM0MjIxNjFjODk2LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWMwMzViZDIzNmY3NDQ0YTgxODZmODMxNTZkNzhiODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45LCA0MC40ODMwMDAwMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0Y2NmMWIyNDY1YjQzMTU5NGJhM2I4NWFiYjk0MDRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjZWYzZjg3MzgyNTRjNzhhNDM3MGExZmM2ZDEwMTFhID0gJChgPGRpdiBpZD0iaHRtbF8xY2VmM2Y4NzM4MjU0Yzc4YTQzNzBhMWZjNmQxMDExYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S29zaGVraGFibDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTRjY2YxYjI0NjViNDMxNTk0YmEzYjg1YWJiOTQwNGMuc2V0Q29udGVudChodG1sXzFjZWYzZjg3MzgyNTRjNzhhNDM3MGExZmM2ZDEwMTFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjMDM1YmQyMzZmNzQ0NGE4MTg2ZjgzMTU2ZDc4YjgxLmJpbmRQb3B1cChwb3B1cF9hNGNjZjFiMjQ2NWI0MzE1OTRiYTNiODVhYmI5NDA0YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2FjMDM1YmQyMzZmNzQ0NGE4MTg2ZjgzMTU2ZDc4YjgxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2E1N2I2Njg3YTc4NDFiODk2OWI2Y2ZhNjI3MTE0MWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43OTk5NDk3OTk5OTk5OSwgNDMuMzI3NjE4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I3MzFhNGJmNmFkNGJiNzhlNWY3NmRmMWU3NTM0MWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTE4MmM1ZjdjZDAyNDg4Mzg4ZWNmMzEyOTA4ZDU5MDkgPSAkKGA8ZGl2IGlkPSJodG1sXzkxODJjNWY3Y2QwMjQ4ODM4OGVjZjMxMjkwOGQ1OTA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5NYWxrYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2I3MzFhNGJmNmFkNGJiNzhlNWY3NmRmMWU3NTM0MWUuc2V0Q29udGVudChodG1sXzkxODJjNWY3Y2QwMjQ4ODM4OGVjZjMxMjkwOGQ1OTA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NhNTdiNjY4N2E3ODQxYjg5NjliNmNmYTYyNzExNDFjLmJpbmRQb3B1cChwb3B1cF8zYjczMWE0YmY2YWQ0YmI3OGU1Zjc2ZGYxZTc1MzQxZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2NhNTdiNjY4N2E3ODQxYjg5NjliNmNmYTYyNzExNDFjLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjA2Nzk2NDE2MGYwNGJiMDgxOWQ2YmQzNWRhYzI4ZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NTEyMjkyOTk5OTk5OSwgNDMuMjI5MjAxMjAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMmU5ZGI3YmUyMGQ0NmExOTgxNTJiNGQxYTYwODMzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjY5NzUwOTNkMjA0MzFjYmQ1MGU1YjUxMjQ3ZjRiYyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTY2OTc1MDkzZDIwNDMxY2JkNTBlNWI1MTI0N2Y0YmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkJhdGVraDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzJlOWRiN2JlMjBkNDZhMTk4MTUyYjRkMWE2MDgzMzEuc2V0Q29udGVudChodG1sX2E2Njk3NTA5M2QyMDQzMWNiZDUwZTViNTEyNDdmNGJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwNjc5NjQxNjBmMDRiYjA4MTlkNmJkMzVkYWMyOGQzLmJpbmRQb3B1cChwb3B1cF8zMmU5ZGI3YmUyMGQ0NmExOTgxNTJiNGQxYTYwODMzMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzIwNjc5NjQxNjBmMDRiYjA4MTlkNmJkMzVkYWMyOGQzLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTU0N2IyZjBkNzU3NGY3OWFjNGJkN2E4MzcyM2FhMGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45NDY4OTQ1LCA0My4xNzIxMjIyMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjNjg2NWM1MWM0MTRiNjFiYmM4OTlmNDE2ZDAyOWNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NiZjZjZTZhNzRmNTQ5ZjZhODQxNzc1YTg1ZTMxNWYyID0gJChgPGRpdiBpZD0iaHRtbF9jYmY2Y2U2YTc0ZjU0OWY2YTg0MTc3NWE4NWUzMTVmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+RXRva288L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJjNjg2NWM1MWM0MTRiNjFiYmM4OTlmNDE2ZDAyOWNhLnNldENvbnRlbnQoaHRtbF9jYmY2Y2U2YTc0ZjU0OWY2YTg0MTc3NWE4NWUzMTVmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NTQ3YjJmMGQ3NTc0Zjc5YWM0YmQ3YTgzNzIzYWEwZi5iaW5kUG9wdXAocG9wdXBfMmM2ODY1YzUxYzQxNGI2MWJiYzg5OWY0MTZkMDI5Y2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl85NTQ3YjJmMGQ3NTc0Zjc5YWM0YmQ3YTgzNzIzYWEwZi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0MDViOTE3NzY4ZDRlY2RhNGRiODVjOGExYTE0YTkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuOTY4MjE2OTk5OTk5OTk2LCAzOS40NDcxMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhYWZiZTBiMGYxMTRlMDRhMTJhYWNmNDQ3MzAzNTNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzZDAyMzU4ZTA4NjQ4YjRhM2E4MDUzMDg5YTg5ZjQ3ID0gJChgPGRpdiBpZD0iaHRtbF9mM2QwMjM1OGUwODY0OGI0YTNhODA1MzA4OWE4OWY0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+VGtoYWdhcHNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYWFmYmUwYjBmMTE0ZTA0YTEyYWFjZjQ0NzMwMzUzYS5zZXRDb250ZW50KGh0bWxfZjNkMDIzNThlMDg2NDhiNGEzYTgwNTMwODlhODlmNDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQwNWI5MTc3NjhkNGVjZGE0ZGI4NWM4YTFhMTRhOTAuYmluZFBvcHVwKHBvcHVwX2NhYWZiZTBiMGYxMTRlMDRhMTJhYWNmNDQ3MzAzNTNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOTQwNWI5MTc3NjhkNGVjZGE0ZGI4NWM4YTFhMTRhOTAuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDYyNWMyZWYyOTI0NmFmYmZjOGZhOGJlMGIzYzcxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjE4NDcyMiwgMzkuMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1OWIwMmFmOTFkNzRlZDdhNDE0YzlmZTUyOTJlOTAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlMWEyODE1MWNkZDQzMTk5YzQ2MDg1OTQwNDk2YmNmID0gJChgPGRpdiBpZD0iaHRtbF9lZTFhMjgxNTFjZGQ0MzE5OWM0NjA4NTk0MDQ5NmJjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+QWd1eS1TaGFwc3VnPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNTliMDJhZjkxZDc0ZWQ3YTQxNGM5ZmU1MjkyZTkwMy5zZXRDb250ZW50KGh0bWxfZWUxYTI4MTUxY2RkNDMxOTljNDYwODU5NDA0OTZiY2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTA2MjVjMmVmMjkyNDZhZmJmYzhmYThiZTBiM2M3MTMuYmluZFBvcHVwKHBvcHVwXzI1OWIwMmFmOTFkNzRlZDdhNDE0YzlmZTUyOTJlOTAzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYTA2MjVjMmVmMjkyNDZhZmJmYzhmYThiZTBiM2M3MTMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NmI2ZTUxNjdlY2E0NTNhYWMxNjdjODA5ZWJhMDk1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI4MzYwOTk5OTk5OTk5NiwgMzguOTUzNjE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MmUzNjg2OWZjMDk0NmU2YjEwY2MwNmY2MGU5ODNiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYTNkZWU4NzYwYjY0OTA3ODNmODJlYmFiNDRlMzFiYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWEzZGVlODc2MGI2NDkwNzgzZjgyZWJhYjQ0ZTMxYmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPlBzZWJlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MmUzNjg2OWZjMDk0NmU2YjEwY2MwNmY2MGU5ODNiZC5zZXRDb250ZW50KGh0bWxfZWEzZGVlODc2MGI2NDkwNzgzZjgyZWJhYjQ0ZTMxYmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDZiNmU1MTY3ZWNhNDUzYWFjMTY3YzgwOWViYTA5NTMuYmluZFBvcHVwKHBvcHVwXzUyZTM2ODY5ZmMwOTQ2ZTZiMTBjYzA2ZjYwZTk4M2JkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNDZiNmU1MTY3ZWNhNDUzYWFjMTY3YzgwOWViYTA5NTMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMGI3ZmFmNmM0Yjg0NGRlODRiOWNjZDhlMzUyNmZkMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk4NzM1MTAwMDAwMDAwNCwgMzguNzE1NDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWE0MTA3M2JlZWI0NjY5YTBhMTViNmEwMDk2ZDY2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTJkMjIzMDZmN2M0YTFlOGI2YTRjZWIzMTUxM2VhOSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2EyZDIyMzA2ZjdjNGExZThiNmE0Y2ViMzE1MTNlYTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPlBhbmFraGVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZWE0MTA3M2JlZWI0NjY5YTBhMTViNmEwMDk2ZDY2NC5zZXRDb250ZW50KGh0bWxfY2EyZDIyMzA2ZjdjNGExZThiNmE0Y2ViMzE1MTNlYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjBiN2ZhZjZjNGI4NDRkZTg0YjljY2Q4ZTM1MjZmZDEuYmluZFBvcHVwKHBvcHVwXzdlYTQxMDczYmVlYjQ2NjlhMGExNWI2YTAwOTZkNjY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYjBiN2ZhZjZjNGI4NDRkZTg0YjljY2Q4ZTM1MjZmZDEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZDVhZjcyZGIyODM0YzE1Yjc2NTVkZmVkMzk2ODZlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk5OTE2NywgMzguNzgxOTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZWJlZDI3MjU2MjI0ODA3OWMyMTFjZGRlMDg3YzA1NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTNiZDE0NGQ0NTI0MzUzYjBkM2I3NWVmODY3ZjY0OSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGEzYmQxNDRkNDUyNDM1M2IwZDNiNzVlZjg2N2Y2NDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkFmaXBzaXA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FlYmVkMjcyNTYyMjQ4MDc5YzIxMWNkZGUwODdjMDU2LnNldENvbnRlbnQoaHRtbF9kYTNiZDE0NGQ0NTI0MzUzYjBkM2I3NWVmODY3ZjY0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZDVhZjcyZGIyODM0YzE1Yjc2NTVkZmVkMzk2ODZlNi5iaW5kUG9wdXAocG9wdXBfYWViZWQyNzI1NjIyNDgwNzljMjExY2RkZTA4N2MwNTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl83ZDVhZjcyZGIyODM0YzE1Yjc2NTVkZmVkMzk2ODZlNi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiMWVmYjJhZWY2NzQ4MDRiNGZkOTZhY2JmNzU2YTkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDQ1Mjc4LCAzOC43NTYxMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcxZTU2MzM5ZDMzOTQ2ZmQ5ZWFmOGYwNTMwMmQxNjBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzOWQ2MTJmNTY4MjQ5NTE4ZDUwOGYxOGVhYjJlNzAyID0gJChgPGRpdiBpZD0iaHRtbF8zMzlkNjEyZjU2ODI0OTUxOGQ1MDhmMThlYWIyZTcwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S2hhc2h0dWs8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxZTU2MzM5ZDMzOTQ2ZmQ5ZWFmOGYwNTMwMmQxNjBlLnNldENvbnRlbnQoaHRtbF8zMzlkNjEyZjU2ODI0OTUxOGQ1MDhmMThlYWIyZTcwMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYjFlZmIyYWVmNjc0ODA0YjRmZDk2YWNiZjc1NmE5Mi5iaW5kUG9wdXAocG9wdXBfNzFlNTYzMzlkMzM5NDZmZDllYWY4ZjA1MzAyZDE2MGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9iYjFlZmIyYWVmNjc0ODA0YjRmZDk2YWNiZjc1NmE5Mi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M2NmJlYzgyZjU5MjQ4OGVhOTgyMWJmM2Y5MjYyYWUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDUxMTExLCAzOC43MDYzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxOTc3NjFlZjRjMDQ5ZjI4M2M5YWNmNGZjNjBlN2NlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxYzlhNjVkODIzNzRkNTc4ZmVmMDgxZDIwNzdmNzk1ID0gJChgPGRpdiBpZD0iaHRtbF9jMWM5YTY1ZDgyMzc0ZDU3OGZlZjA4MWQyMDc3Zjc5NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UHNleXR1azwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTE5Nzc2MWVmNGMwNDlmMjgzYzlhY2Y0ZmM2MGU3Y2Uuc2V0Q29udGVudChodG1sX2MxYzlhNjVkODIzNzRkNTc4ZmVmMDgxZDIwNzdmNzk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M2NmJlYzgyZjU5MjQ4OGVhOTgyMWJmM2Y5MjYyYWUwLmJpbmRQb3B1cChwb3B1cF85MTk3NzYxZWY0YzA0OWYyODNjOWFjZjRmYzYwZTdjZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2M2NmJlYzgyZjU5MjQ4OGVhOTgyMWJmM2Y5MjYyYWUwLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2E0MjgzM2RlYTM2NGY2MzlhZjMwNTczMjlmNzljNDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4xODMzMywgMzkuNjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1OGNlY2E1NTA3ZTRkMGRhZWQ4YzFlOTI1YTE3MDUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0OTk2ZTA5NTdkOTQ0YzNhYjhjZDAxNDQzOTk3ODFiID0gJChgPGRpdiBpZD0iaHRtbF8yNDk5NmUwOTU3ZDk0NGMzYWI4Y2QwMTQ0Mzk5NzgxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S2hhdHVrYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1OGNlY2E1NTA3ZTRkMGRhZWQ4YzFlOTI1YTE3MDUyLnNldENvbnRlbnQoaHRtbF8yNDk5NmUwOTU3ZDk0NGMzYWI4Y2QwMTQ0Mzk5NzgxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYTQyODMzZGVhMzY0ZjYzOWFmMzA1NzMyOWY3OWM0MS5iaW5kUG9wdXAocG9wdXBfZTU4Y2VjYTU1MDdlNGQwZGFlZDhjMWU5MjVhMTcwNTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8zYTQyODMzZGVhMzY0ZjYzOWFmMzA1NzMyOWY3OWM0MS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5MmRjMDRmMGY4ZDQwY2JhZDMwMjU3NzEwMTQ3NmZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDc1ODMzLCAzOS4zNDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Njg3YTA3NWQ5YmU0OTM4OWMwYmRmYTM4ODY3NWRhOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOTRiY2FiNTdkNzU0MmI0YTgzM2ZlMzIxYzZkMDEzMSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTk0YmNhYjU3ZDc1NDJiNGE4MzNmZTMyMWM2ZDAxMzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkJvbHNob3llIFBzZXVzaGtobzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDY4N2EwNzVkOWJlNDkzODljMGJkZmEzODg2NzVkYTkuc2V0Q29udGVudChodG1sX2E5NGJjYWI1N2Q3NTQyYjRhODMzZmUzMjFjNmQwMTMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M5MmRjMDRmMGY4ZDQwY2JhZDMwMjU3NzEwMTQ3NmZlLmJpbmRQb3B1cChwb3B1cF80Njg3YTA3NWQ5YmU0OTM4OWMwYmRmYTM4ODY3NWRhOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2M5MmRjMDRmMGY4ZDQwY2JhZDMwMjU3NzEwMTQ3NmZlLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTU2OTFkMjljNGEyNDljN2JmY2Y4OGQwMDBlY2Y4YTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4xMTYzODksIDM5LjMwMTY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2MzZjRiNWM0M2FlNGE0YzgwYzMwYmVkOTVlNjI4ZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGI4ZDgxMTE1NDI5NDk4NzhkNDNmMmNkYWVjYjY4YjYgPSAkKGA8ZGl2IGlkPSJodG1sX2RiOGQ4MTExNTQyOTQ5ODc4ZDQzZjJjZGFlY2I2OGI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5NYWxveWUgUHNldXNoa2hvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYzNmNGI1YzQzYWU0YTRjODBjMzBiZWQ5NWU2MjhlYi5zZXRDb250ZW50KGh0bWxfZGI4ZDgxMTE1NDI5NDk4NzhkNDNmMmNkYWVjYjY4YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTU2OTFkMjljNGEyNDljN2JmY2Y4OGQwMDBlY2Y4YTkuYmluZFBvcHVwKHBvcHVwXzNjM2Y0YjVjNDNhZTRhNGM4MGMzMGJlZDk1ZTYyOGViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMTU2OTFkMjljNGEyNDljN2JmY2Y4OGQwMDBlY2Y4YTkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzFiZDg3ZGJiMzE0MGE3ODJiOGU0NDUwMzkzOTZmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgzNSwgNDEuMzgzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2ZGY0ZmMzMGNmNTQ1ZjJhZTQ5YzFhZmVjZDc1MjI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczNjg1MjcxNGQ4NjQ3ZWI4ZTczYjNhMjJmMDhhNjQxID0gJChgPGRpdiBpZD0iaHRtbF83MzY4NTI3MTRkODY0N2ViOGU3M2IzYTIyZjA4YTY0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+VXNwZW5za295ZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjZkZjRmYzMwY2Y1NDVmMmFlNDljMWFmZWNkNzUyMjUuc2V0Q29udGVudChodG1sXzczNjg1MjcxNGQ4NjQ3ZWI4ZTczYjNhMjJmMDhhNjQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y3MWJkODdkYmIzMTQwYTc4MmI4ZTQ0NTAzOTM5NmZmLmJpbmRQb3B1cChwb3B1cF9mNmRmNGZjMzBjZjU0NWYyYWU0OWMxYWZlY2Q3NTIyNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2Y3MWJkODdkYmIzMTQwYTc4MmI4ZTQ0NTAzOTM5NmZmLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGQ3YmQzMjcwNjQwNGJkNmI1NmZiZjQ5NDJiMGY3Y2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NTQ3NDcsIDQwLjMxNzY4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjFkZTJmNGFhNzFlNGMxMWJkNTc3YjFmZTQ1ZWIxODkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWEzZjYyZTFkODRhNGY1NDk4Zjc5YjU5MDVlNWQ0NzggPSAkKGA8ZGl2IGlkPSJodG1sX2FhM2Y2MmUxZDg0YTRmNTQ5OGY3OWI1OTA1ZTVkNDc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5LaGFjaGVteml5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMWRlMmY0YWE3MWU0YzExYmQ1NzdiMWZlNDVlYjE4OS5zZXRDb250ZW50KGh0bWxfYWEzZjYyZTFkODRhNGY1NDk4Zjc5YjU5MDVlNWQ0NzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGQ3YmQzMjcwNjQwNGJkNmI1NmZiZjQ5NDJiMGY3Y2IuYmluZFBvcHVwKHBvcHVwXzIxZGUyZjRhYTcxZTRjMTFiZDU3N2IxZmU0NWViMTg5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOGQ3YmQzMjcwNjQwNGJkNmI1NmZiZjQ5NDJiMGY3Y2IuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hY2ExMWQ0MGU4ZTY0OGYyOGYyNjk2ZWNiZTY1NzYyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk5MzMzMywgNDAuMzExMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMThlYjI3OWFhZGE0N2UwYWI3Mzk3MzBlYTljZmU3NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTY4ZmJlMWM1ZDI0MGJlYWVmNjI2NWU0MGJhMDhkNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZGU2OGZiZTFjNWQyNDBiZWFlZjYyNjVlNDBiYTA4ZDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkR6aGVyb2theTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTE4ZWIyNzlhYWRhNDdlMGFiNzM5NzMwZWE5Y2ZlNzUuc2V0Q29udGVudChodG1sX2RlNjhmYmUxYzVkMjQwYmVhZWY2MjY1ZTQwYmEwOGQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjYTExZDQwZThlNjQ4ZjI4ZjI2OTZlY2JlNjU3NjJjLmJpbmRQb3B1cChwb3B1cF9lMThlYjI3OWFhZGE0N2UwYWI3Mzk3MzBlYTljZmU3NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2FjYTExZDQwZThlNjQ4ZjI4ZjI2OTZlY2JlNjU3NjJjLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWEyNjFjMGIzNGExNDNmMzk0ZTc5Mzk4Yzc5Nzg5MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTc1LCA0MC4zOTIyMjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyMGJkZjI2MmI2MjQ0MjdhOTIzODI2Mzc1YTExZjRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzOGI5OTBmYjEwYjQ2OGE4YTE4NWQ2YjJlNzVkZTY0ID0gJChgPGRpdiBpZD0iaHRtbF9hMzhiOTkwZmIxMGI0NjhhOGExODVkNmIyZTc1ZGU2NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+RWdlcnVraGF5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMjBiZGYyNjJiNjI0NDI3YTkyMzgyNjM3NWExMWY0ZS5zZXRDb250ZW50KGh0bWxfYTM4Yjk5MGZiMTBiNDY4YThhMTg1ZDZiMmU3NWRlNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWEyNjFjMGIzNGExNDNmMzk0ZTc5Mzk4Yzc5Nzg5MGEuYmluZFBvcHVwKHBvcHVwXzAyMGJkZjI2MmI2MjQ0MjdhOTIzODI2Mzc1YTExZjRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNWEyNjFjMGIzNGExNDNmMzk0ZTc5Mzk4Yzc5Nzg5MGEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MDY1NTM1MzUwOGI0ZTBiODhmZjkyZDIwNTIxNzc4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAxMTM4OSwgNDAuMjE3MjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZGI2MWE2NTBmZTI0N2EyODlmYWYwNzIyYjlkNzMxZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMmQ1MDQ3ZWY4NDg0NTM4OTUwMTNiM2QyYTdhMjI1MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzJkNTA0N2VmODQ4NDUzODk1MDEzYjNkMmE3YTIyNTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPk1hbWtoZWc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkYjYxYTY1MGZlMjQ3YTI4OWZhZjA3MjJiOWQ3MzFkLnNldENvbnRlbnQoaHRtbF9jMmQ1MDQ3ZWY4NDg0NTM4OTUwMTNiM2QyYTdhMjI1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MDY1NTM1MzUwOGI0ZTBiODhmZjkyZDIwNTIxNzc4Mi5iaW5kUG9wdXAocG9wdXBfNmRiNjFhNjUwZmUyNDdhMjg5ZmFmMDcyMmI5ZDczMWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl81MDY1NTM1MzUwOGI0ZTBiODhmZjkyZDIwNTIxNzc4Mi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5ZTUyMDM1Mzg1MTQzZjhhMTA2NDUyMjliMDc0OTJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDQ2MTEwOTk5OTk5OTk2LCA0MC4xODMwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1ZWU5ODJiOTlmODRhNDI5NWZkNjQ4YmU5OWEwZDFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAzNWIzMjVlZjllYTRmZmQ4YTFhNmJlMWFjNWEwYzU1ID0gJChgPGRpdiBpZD0iaHRtbF8wMzViMzI1ZWY5ZWE0ZmZkOGExYTZiZTFhYzVhMGM1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S2FiZWtoYWJsJzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzVlZTk4MmI5OWY4NGE0Mjk1ZmQ2NDhiZTk5YTBkMWQuc2V0Q29udGVudChodG1sXzAzNWIzMjVlZjllYTRmZmQ4YTFhNmJlMWFjNWEwYzU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc5ZTUyMDM1Mzg1MTQzZjhhMTA2NDUyMjliMDc0OTJhLmJpbmRQb3B1cChwb3B1cF9jNWVlOTgyYjk5Zjg0YTQyOTVmZDY0OGJlOTlhMGQxZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzc5ZTUyMDM1Mzg1MTQzZjhhMTA2NDUyMjliMDc0OTJhLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTRlMjJlZjIxYTA5NGQ1MGExNDRlYmFhN2Q5MmExNjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNjg4ODksIDM5LjQ5NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2NzMyODAxYzI5OTRkN2FiMWVjYjAxZGE5YTQwNTc3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5NmYwZGRmNDg2MDRiOTM4ZGY0NWMzNjVjZGM2OGE4ID0gJChgPGRpdiBpZD0iaHRtbF8wOTZmMGRkZjQ4NjA0YjkzOGRmNDVjMzY1Y2RjNjhhOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+QWRhbWl5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjczMjgwMWMyOTk0ZDdhYjFlY2IwMWRhOWE0MDU3Ny5zZXRDb250ZW50KGh0bWxfMDk2ZjBkZGY0ODYwNGI5MzhkZjQ1YzM2NWNkYzY4YTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTRlMjJlZjIxYTA5NGQ1MGExNDRlYmFhN2Q5MmExNjIuYmluZFBvcHVwKHBvcHVwXzA2NzMyODAxYzI5OTRkN2FiMWVjYjAxZGE5YTQwNTc3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZTRlMjJlZjIxYTA5NGQ1MGExNDRlYmFhN2Q5MmExNjIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OGI2ZDAxMWQ2YWE0ZWYxYTNkMDE4YzY5ZmY4NzAxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA3MjIyMiwgNDAuMTg4NjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YjIyMTgzZmEyMDU0ZWIzOWQ3Y2U5ZjA3YmI1NDlhZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZjk5YzRiZTJjYzE0Njg5Yjk3ZDkwMjAzYWM2MzhjMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWY5OWM0YmUyY2MxNDY4OWI5N2Q5MDIwM2FjNjM4YzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPktoYXRhemh1a2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YjIyMTgzZmEyMDU0ZWIzOWQ3Y2U5ZjA3YmI1NDlhZS5zZXRDb250ZW50KGh0bWxfMWY5OWM0YmUyY2MxNDY4OWI5N2Q5MDIwM2FjNjM4YzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNThiNmQwMTFkNmFhNGVmMWEzZDAxOGM2OWZmODcwMTkuYmluZFBvcHVwKHBvcHVwXzZiMjIxODNmYTIwNTRlYjM5ZDdjZTlmMDdiYjU0OWFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNThiNmQwMTFkNmFhNGVmMWEzZDAxOGM2OWZmODcwMTkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kM2VkOThlNDdmODM0MWU5YmEwNTU0MWU0NWJiOGQ3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA4Mzg4OSwgMzkuODYxMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYTRhYmM3OTNiNWE0MDZjOTYxN2UzNDM5NDc5ZTJkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNTc5M2EwMjkwM2I0OThmYjUxMmZhMTE5YTRiMzNhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjU3OTNhMDI5MDNiNDk4ZmI1MTJmYTExOWE0YjMzYTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkR6aGFtYmljaGk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhNGFiYzc5M2I1YTQwNmM5NjE3ZTM0Mzk0NzllMmQwLnNldENvbnRlbnQoaHRtbF8yNTc5M2EwMjkwM2I0OThmYjUxMmZhMTE5YTRiMzNhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kM2VkOThlNDdmODM0MWU5YmEwNTU0MWU0NWJiOGQ3YS5iaW5kUG9wdXAocG9wdXBfYWE0YWJjNzkzYjVhNDA2Yzk2MTdlMzQzOTQ3OWUyZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kM2VkOThlNDdmODM0MWU5YmEwNTU0MWU0NWJiOGQ3YS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiNjkwNWNhODI4ZjRmNGNhNzNmYmRmMmQzY2Q5NWFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDkyMjIyLCA0MC4xMTAyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhOTgwNTIwZjQ0MDQ1N2U5YmIxOTdiN2Q3YmVhNTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhY2VjMDU3MGJlNzQ0MjZhNDIwMmZhNGU0NGVlZWJkID0gJChgPGRpdiBpZD0iaHRtbF9mYWNlYzA1NzBiZTc0NDI2YTQyMDJmYTRlNDRlZWViZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UHNoaXpvdjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWE5ODA1MjBmNDQwNDU3ZTliYjE5N2I3ZDdiZWE1NTMuc2V0Q29udGVudChodG1sX2ZhY2VjMDU3MGJlNzQ0MjZhNDIwMmZhNGU0NGVlZWJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFiNjkwNWNhODI4ZjRmNGNhNzNmYmRmMmQzY2Q5NWFmLmJpbmRQb3B1cChwb3B1cF9lYTk4MDUyMGY0NDA0NTdlOWJiMTk3YjdkN2JlYTU1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzFiNjkwNWNhODI4ZjRmNGNhNzNmYmRmMmQzY2Q5NWFmLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQ0YzA3NDJkZjIwNDA3ODhlN2ZkM2VhMzRlMWVlYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zODA3MzIzLCA0NC4xOTA4OTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZWNkYzU4NTg4NDI0ZTg5OGFiZWE5YTcwMjYzMDgzMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDlmNjQwZmM1NDg0YWY3OTRhZjM4ODczZGNmMGY2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDQ5ZjY0MGZjNTQ4NGFmNzk0YWYzODg3M2RjZjBmNmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlBsYW5vdnNrb2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlY2RjNTg1ODg0MjRlODk4YWJlYTlhNzAyNjMwODMyLnNldENvbnRlbnQoaHRtbF80NDlmNjQwZmM1NDg0YWY3OTRhZjM4ODczZGNmMGY2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDRjMDc0MmRmMjA0MDc4OGU3ZmQzZWEzNGUxZWViNC5iaW5kUG9wdXAocG9wdXBfM2VjZGM1ODU4ODQyNGU4OThhYmVhOWE3MDI2MzA4MzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80ZDRjMDc0MmRmMjA0MDc4OGU3ZmQzZWEzNGUxZWViNC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRkY2ZhYmExNGFmMTQ4ZjJhMmRlYmI3OTVkZDYyYjc1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDY3NzM0OCwgNDQuMzczMDIxMjAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjFkODhjODZiODc0OTBmODAxNTI2NWY2NTVhNDE5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ODk0ZjdmNjc3MzA0MzM3OTMxYzIwMTk4ZDU4NzQ0ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTg5NGY3ZjY3NzMwNDMzNzkzMWMyMDE5OGQ1ODc0NGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlZlcmtobnkgS3VycDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWYxZDg4Yzg2Yjg3NDkwZjgwMTUyNjVmNjU1YTQxOTQuc2V0Q29udGVudChodG1sXzk4OTRmN2Y2NzczMDQzMzc5MzFjMjAxOThkNTg3NDRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRkY2ZhYmExNGFmMTQ4ZjJhMmRlYmI3OTVkZDYyYjc1LmJpbmRQb3B1cChwb3B1cF9lZjFkODhjODZiODc0OTBmODAxNTI2NWY2NTVhNDE5NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzRkY2ZhYmExNGFmMTQ4ZjJhMmRlYmI3OTVkZDYyYjc1LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGQyODE2NWQ1ZTQyNGU2YjhjNDRiYmM3NTgwNTE2YWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NzQ2OCwgNDQuMjQyMzI5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjgzNjE1MmIzZGI4NDg3MDg1OTNlZWU2YzQ1YjNkMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGJkMzRmZmY0OTQwNDdjNDkwYjRkNzhiNjQ0ODA2YzYgPSAkKGA8ZGl2IGlkPSJodG1sXzhiZDM0ZmZmNDk0MDQ3YzQ5MGI0ZDc4YjY0NDgwNmM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5WZXJraG55IEFrYmFzaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjgzNjE1MmIzZGI4NDg3MDg1OTNlZWU2YzQ1YjNkMTYuc2V0Q29udGVudChodG1sXzhiZDM0ZmZmNDk0MDQ3YzQ5MGI0ZDc4YjY0NDgwNmM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RkMjgxNjVkNWU0MjRlNmI4YzQ0YmJjNzU4MDUxNmFhLmJpbmRQb3B1cChwb3B1cF8yODM2MTUyYjNkYjg0ODcwODU5M2VlZTZjNDViM2QxNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2RkMjgxNjVkNWU0MjRlNmI4YzQ0YmJjNzU4MDUxNmFhLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzQ2Njk0Y2IwOTVhNDcyNmEyZjZjNDY4ODgyODM5MDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40OTkxMDk4LCA0NC4xNTEyOTQ3OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JjZTVkYzZhNDRiODQ3NDg5MzQ2MDYxZjM3YTAwZTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzYzI1ZTI1OTJhODQ4OGNiNzc4NzY5ZmZhYWViNWY4ID0gJChgPGRpdiBpZD0iaHRtbF9iM2MyNWUyNTkyYTg0ODhjYjc3ODc2OWZmYWFlYjVmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+RGV5c2tvZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmNlNWRjNmE0NGI4NDc0ODkzNDYwNjFmMzdhMDBlNjAuc2V0Q29udGVudChodG1sX2IzYzI1ZTI1OTJhODQ4OGNiNzc4NzY5ZmZhYWViNWY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc0NjY5NGNiMDk1YTQ3MjZhMmY2YzQ2ODg4MjgzOTA3LmJpbmRQb3B1cChwb3B1cF9iY2U1ZGM2YTQ0Yjg0NzQ4OTM0NjA2MWYzN2EwMGU2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzc0NjY5NGNiMDk1YTQ3MjZhMmY2YzQ2ODg4MjgzOTA3LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWNiMTM3MmZmODk3NGMyNGEwZWEzMjhhZGIxNDk3MDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MjU0MDE3LCA0NC4yMDkyOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViMjNlZjI3YTY5ZTQ4MGJiZDYzZDllNmY0MWIwZTVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhOWYyMTZlZWRhNzQ1NTc4NTM1N2Y2ZTU1Yzc2MDJlID0gJChgPGRpdiBpZD0iaHRtbF8wYTlmMjE2ZWVkYTc0NTU3ODUzNTdmNmU1NWM3NjAyZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+Tml6aG55IEFrYmFzaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWIyM2VmMjdhNjllNDgwYmJkNjNkOWU2ZjQxYjBlNWUuc2V0Q29udGVudChodG1sXzBhOWYyMTZlZWRhNzQ1NTc4NTM1N2Y2ZTU1Yzc2MDJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzljYjEzNzJmZjg5NzRjMjRhMGVhMzI4YWRiMTQ5NzAzLmJpbmRQb3B1cChwb3B1cF81YjIzZWYyN2E2OWU0ODBiYmQ2M2Q5ZTZmNDFiMGU1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzljYjEzNzJmZjg5NzRjMjRhMGVhMzI4YWRiMTQ5NzAzLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2Y4MTJhYzE4MDQxNGE4ZmJhNmZmMDIyZTRhMTA4NDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NDM0ODg4LCA0NC40MTM3NTc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80M2IxMjA1ZTc5ZGM0YWI3YTgyNDdlM2ViN2JmOWI0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzIzZWMyYzBhYzQ0YTkxYWVmMDc1OWVhZmU0MDk3NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzMyM2VjMmMwYWM0NGE5MWFlZjA3NTllYWZlNDA5NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPk5pemhueSBLdXJwPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80M2IxMjA1ZTc5ZGM0YWI3YTgyNDdlM2ViN2JmOWI0Ni5zZXRDb250ZW50KGh0bWxfMzMyM2VjMmMwYWM0NGE5MWFlZjA3NTllYWZlNDA5NzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Y4MTJhYzE4MDQxNGE4ZmJhNmZmMDIyZTRhMTA4NDQuYmluZFBvcHVwKHBvcHVwXzQzYjEyMDVlNzlkYzRhYjdhODI0N2UzZWI3YmY5YjQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfY2Y4MTJhYzE4MDQxNGE4ZmJhNmZmMDIyZTRhMTA4NDQuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMTk0MDUzMTUwNzk0NDViOTc0OTZjMDgxMDBhNmFjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU3MDExNDM5OTk5OTk5NCwgNDQuMTQwMzQ4MTAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYWRiY2FjYjBjNzI0NWRmOTg0NTQwMTA1NDI5MWFhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzkyOWQ3OGU5ZTM0MDRmODgwZTkxNGJmOWFmZjg3MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTM5MjlkNzhlOWUzNDA0Zjg4MGU5MTRiZjlhZmY4NzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkFyaWs8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhZGJjYWNiMGM3MjQ1ZGY5ODQ1NDAxMDU0MjkxYWExLnNldENvbnRlbnQoaHRtbF9lMzkyOWQ3OGU5ZTM0MDRmODgwZTkxNGJmOWFmZjg3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMTk0MDUzMTUwNzk0NDViOTc0OTZjMDgxMDBhNmFjYy5iaW5kUG9wdXAocG9wdXBfY2FkYmNhY2IwYzcyNDVkZjk4NDU0MDEwNTQyOTFhYTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8xMTk0MDUzMTUwNzk0NDViOTc0OTZjMDgxMDBhNmFjYy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiZDQ4MjE5MWIxZDRmNTRhZWYyYTRmMjQ5MGI1ODlhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjcxMDc2MSwgNDQuMzc0MDU5MTAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZWMwOGExMDQwZjE0NzljYTEzZjEwYTk2ZjRmYTljMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzI2M2U4M2IzZTE0ZjRkYTk5ZTVlZDliZjYwMmVlOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWMyNjNlODNiM2UxNGY0ZGE5OWU1ZWQ5YmY2MDJlZTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPktoYW1pZGllPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZWMwOGExMDQwZjE0NzljYTEzZjEwYTk2ZjRmYTljMi5zZXRDb250ZW50KGh0bWxfMWMyNjNlODNiM2UxNGY0ZGE5OWU1ZWQ5YmY2MDJlZTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2JkNDgyMTkxYjFkNGY1NGFlZjJhNGYyNDkwYjU4OWEuYmluZFBvcHVwKHBvcHVwX2NlYzA4YTEwNDBmMTQ3OWNhMTNmMTBhOTZmNGZhOWMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfM2JkNDgyMTkxYjFkNGY1NGFlZjJhNGYyNDkwYjU4OWEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOWMzODgzOTRhNmI0NDEzOTljMTEwMmU0MTJiMjYyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3Mjc3OTUsIDQ0LjI5NzM2MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1NGE5NzJlNzM1MjRmNzM5NzliMzMzMjE0ZjQwYThkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiOGMwMmQ3ZDE4NzRhNjA5ZTlmMjJkNDVhZDFkMmU4ID0gJChgPGRpdiBpZD0iaHRtbF8wYjhjMDJkN2QxODc0YTYwOWU5ZjIyZDQ1YWQxZDJlOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+VGVyZWtza29lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NTRhOTcyZTczNTI0ZjczOTc5YjMzMzIxNGY0MGE4ZC5zZXRDb250ZW50KGh0bWxfMGI4YzAyZDdkMTg3NGE2MDllOWYyMmQ0NWFkMWQyZTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDljMzg4Mzk0YTZiNDQxMzk5YzExMDJlNDEyYjI2MmUuYmluZFBvcHVwKHBvcHVwXzc1NGE5NzJlNzM1MjRmNzM5NzliMzMzMjE0ZjQwYThkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMDljMzg4Mzk0YTZiNDQxMzk5YzExMDJlNDEyYjI2MmUuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Mzg1MmIwYTlmNzI0NTZhYjIwYmRlOTE1M2IyMTJhNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgyMjc4NiwgMzkuNTAwOTgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NTRkY2U5MjFlZjg0OGMwYjJjMWY3MWJjNWY1MzIzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MzYxZTc2MzhlMjM0MzExYmYxMWU0MzFhM2QxZWYxZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzM2MWU3NjM4ZTIzNDMxMWJmMTFlNDMxYTNkMWVmMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPk1hbHl5IEtpY2htYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1NGRjZTkyMWVmODQ4YzBiMmMxZjcxYmM1ZjUzMjM5LnNldENvbnRlbnQoaHRtbF83MzYxZTc2MzhlMjM0MzExYmYxMWU0MzFhM2QxZWYxZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81Mzg1MmIwYTlmNzI0NTZhYjIwYmRlOTE1M2IyMTJhNy5iaW5kUG9wdXAocG9wdXBfNTU0ZGNlOTIxZWY4NDhjMGIyYzFmNzFiYzVmNTMyMzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl81Mzg1MmIwYTlmNzI0NTZhYjIwYmRlOTE1M2IyMTJhNy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0MzljMWE0NGM1NTRjZmI5OTg2ZTg4YTk3YjBiMjE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODMzOTE3LCAzOS41MDgwNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2N2RlNmViZjRhODQ4ZjhhZDFjZDU1NWQwYTQ3ZjgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3MGU5OTlmNmEzNjQ1NDQ5YzYzN2JkNzU4MjdlZDMzID0gJChgPGRpdiBpZD0iaHRtbF9lNzBlOTk5ZjZhMzY0NTQ0OWM2MzdiZDc1ODI3ZWQzMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+Qm9sc2hveSBLaWNobWF5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NjdkZTZlYmY0YTg0OGY4YWQxY2Q1NTVkMGE0N2Y4MC5zZXRDb250ZW50KGh0bWxfZTcwZTk5OWY2YTM2NDU0NDljNjM3YmQ3NTgyN2VkMzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDQzOWMxYTQ0YzU1NGNmYjk5ODZlODhhOTdiMGIyMTkuYmluZFBvcHVwKHBvcHVwXzU2N2RlNmViZjRhODQ4ZjhhZDFjZDU1NWQwYTQ3ZjgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZDQzOWMxYTQ0YzU1NGNmYjk5ODZlODhhOTdiMGIyMTkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzI2YTM3MmIxZjA0NTMxOGZiMGE3NWIzYmRhOWI5NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAwOTM4OSwgMzkuMzU2NjM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMWVjOWU0ODg3ODg0ZWRkODI1N2YwZWY4ODcxNTBhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNWE0MGI2OTFmMTc0M2YyOTc4ZTQ5YmFkYmQwOWMyZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDVhNDBiNjkxZjE3NDNmMjk3OGU0OWJhZGJkMDljMmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkthbGV6aDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDFlYzllNDg4Nzg4NGVkZDgyNTdmMGVmODg3MTUwYTAuc2V0Q29udGVudChodG1sX2Q1YTQwYjY5MWYxNzQzZjI5NzhlNDliYWRiZDA5YzJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA3MjZhMzcyYjFmMDQ1MzE4ZmIwYTc1YjNiZGE5Yjk0LmJpbmRQb3B1cChwb3B1cF8wMWVjOWU0ODg3ODg0ZWRkODI1N2YwZWY4ODcxNTBhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzA3MjZhMzcyYjFmMDQ1MzE4ZmIwYTc1YjNiZGE5Yjk0LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjA4YmExNWFjNzU3NDJkOWE3Y2ViNDBjNWYxYmM2YjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wMDkzOTcsIDM5LjMzNTMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTk4YWE0ZDZiZTNkNDg2YTk5YzE2MDRlNDY1YzdlMDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDJlODkyZDE1ZDZmNDE3M2E4N2YyN2UwMDYzOWM2ZjggPSAkKGA8ZGl2IGlkPSJodG1sXzQyZTg5MmQxNWQ2ZjQxNzNhODdmMjdlMDA2MzljNmY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5LaGFkemhpa288L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5OGFhNGQ2YmUzZDQ4NmE5OWMxNjA0ZTQ2NWM3ZTAwLnNldENvbnRlbnQoaHRtbF80MmU4OTJkMTVkNmY0MTczYTg3ZjI3ZTAwNjM5YzZmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMDhiYTE1YWM3NTc0MmQ5YTdjZWI0MGM1ZjFiYzZiNi5iaW5kUG9wdXAocG9wdXBfOTk4YWE0ZDZiZTNkNDg2YTk5YzE2MDRlNDY1YzdlMDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9mMDhiYTE1YWM3NTc0MmQ5YTdjZWI0MGM1ZjFiYzZiNi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlMWI4MDI1MDc5NjRiODFiNjcxYTYxYWRlZTJjMWMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDA5NDA5OTk5OTk5OTk1LCAzOS4zNjIzMjAwMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5OTg1N2I1N2YwODRiZDg5NWMxOGRmNTM5M2NjMGEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3YTk3NGMxMTY3MTRlM2E5MjA2Yjc5YjA4ODQ0YzI5ID0gJChgPGRpdiBpZD0iaHRtbF8yN2E5NzRjMTE2NzE0ZTNhOTIwNmI3OWIwODg0NGMyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+THlnb3RraDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTk5ODU3YjU3ZjA4NGJkODk1YzE4ZGY1MzkzY2MwYTIuc2V0Q29udGVudChodG1sXzI3YTk3NGMxMTY3MTRlM2E5MjA2Yjc5YjA4ODQ0YzI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlMWI4MDI1MDc5NjRiODFiNjcxYTYxYWRlZTJjMWMyLmJpbmRQb3B1cChwb3B1cF85OTk4NTdiNTdmMDg0YmQ4OTVjMThkZjUzOTNjYzBhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzJlMWI4MDI1MDc5NjRiODFiNjcxYTYxYWRlZTJjMWMyLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWNkNzMwZjU2ODY5NDcxNTg3ODg0OWE0MjdjMzQ5NzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wOTI1MTg0LCA0My41MjIwODUxMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3MzllNzQ0N2E3ZjRkMTFhNjc0ZjU2MzE1N2U2NGVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzYjU0MzAwYjAzODRhOGFiNTg1NmI5ZGRiMmI4ZDZkID0gJChgPGRpdiBpZD0iaHRtbF8zM2I1NDMwMGIwMzg0YThhYjU4NTZiOWRkYjJiOGQ2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+UHN5Z2Fuc3U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3MzllNzQ0N2E3ZjRkMTFhNjc0ZjU2MzE1N2U2NGVjLnNldENvbnRlbnQoaHRtbF8zM2I1NDMwMGIwMzg0YThhYjU4NTZiOWRkYjJiOGQ2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85Y2Q3MzBmNTY4Njk0NzE1ODc4ODQ5YTQyN2MzNDk3Mi5iaW5kUG9wdXAocG9wdXBfODczOWU3NDQ3YTdmNGQxMWE2NzRmNTYzMTU3ZTY0ZWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl85Y2Q3MzBmNTY4Njk0NzE1ODc4ODQ5YTQyN2MzNDk3Mi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RkNzZkZjdmOTRmMTRiMjdiNTJhNjQzNjViYTZhZGM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjE3NzQ4NCwgNDMuNzM4MDIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzkxMjcyNmMxZWQyNDA1M2JiOWRlYTVkYWI4OGU2OTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDBlYmE4NGIyODBhNDk4MzlmZjU3M2IxNzZiZDk1MGUgPSAkKGA8ZGl2IGlkPSJodG1sXzQwZWJhODRiMjgwYTQ5ODM5ZmY1NzNiMTc2YmQ5NTBlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5WZXJraG55IExlc2tlbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzkxMjcyNmMxZWQyNDA1M2JiOWRlYTVkYWI4OGU2OTQuc2V0Q29udGVudChodG1sXzQwZWJhODRiMjgwYTQ5ODM5ZmY1NzNiMTc2YmQ5NTBlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RkNzZkZjdmOTRmMTRiMjdiNTJhNjQzNjViYTZhZGM1LmJpbmRQb3B1cChwb3B1cF8zOTEyNzI2YzFlZDI0MDUzYmI5ZGVhNWRhYjg4ZTY5NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2RkNzZkZjdmOTRmMTRiMjdiNTJhNjQzNjViYTZhZGM1LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTJiOTc1M2RmYmFhNGU5YWI1YjU0YmU2YWUxMjYzODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4yNjAyNDU4OTk5OTk5OTQsIDQzLjY1Mzc4ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhlYzc3YWMzZjY3ZTQyY2RhOGEzM2ExOTU1MzkzNWJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhjMjZiZmFkMzc0NzQxNmU4NTFmMmNjMDM5NjljZDFmID0gJChgPGRpdiBpZD0iaHRtbF84YzI2YmZhZDM3NDc0MTZlODUxZjJjYzAzOTY5Y2QxZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+WmhlbXRhbGE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhlYzc3YWMzZjY3ZTQyY2RhOGEzM2ExOTU1MzkzNWJmLnNldENvbnRlbnQoaHRtbF84YzI2YmZhZDM3NDc0MTZlODUxZjJjYzAzOTY5Y2QxZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMmI5NzUzZGZiYWE0ZTlhYjViNTRiZTZhZTEyNjM4OC5iaW5kUG9wdXAocG9wdXBfOGVjNzdhYzNmNjdlNDJjZGE4YTMzYTE5NTUzOTM1YmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9lMmI5NzUzZGZiYWE0ZTlhYjViNTRiZTZhZTEyNjM4OC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmODRmYThlMGI1YjQxYTE4ZTRiNGFiZWJjYjEwODc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzE3ODQxNSwgNDMuODc2NTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzU4M2Y4NTkyZDM0ZjUxYTE4YmM3ZDIzMWI1MWZhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80M2UwNDAxYmZkMzA0YTkwODgwZWEzZDExNjI4YjZmNyA9ICQoYDxkaXYgaWQ9Imh0bWxfNDNlMDQwMWJmZDMwNGE5MDg4MGVhM2QxMTYyOGI2ZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkVyb2trbzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc1ODNmODU5MmQzNGY1MWExOGJjN2QyMzFiNTFmYTAuc2V0Q29udGVudChodG1sXzQzZTA0MDFiZmQzMDRhOTA4ODBlYTNkMTE2MjhiNmY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhmODRmYThlMGI1YjQxYTE4ZTRiNGFiZWJjYjEwODc4LmJpbmRQb3B1cChwb3B1cF84NzU4M2Y4NTkyZDM0ZjUxYTE4YmM3ZDIzMWI1MWZhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzhmODRmYThlMGI1YjQxYTE4ZTRiNGFiZWJjYjEwODc4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmIyMDdkOTM3MjM0NGE4MDkyYTQ0YTkzYzhmNmVjMDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zMzM4OTAwMDAwMDAwMDQsIDQzLjgxNzIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjVlNGZmNDM2N2M0M2M1OTNlODhiNzBjZjllOTNlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWJkYjU5YWU2YzI0NmQ3YmZmNTkwNWQzNTJjZDRhZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGFiZGI1OWFlNmMyNDZkN2JmZjU5MDVkMzUyY2Q0YWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlByb2dyZXNzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNjVlNGZmNDM2N2M0M2M1OTNlODhiNzBjZjllOTNlNy5zZXRDb250ZW50KGh0bWxfNGFiZGI1OWFlNmMyNDZkN2JmZjU5MDVkMzUyY2Q0YWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmIyMDdkOTM3MjM0NGE4MDkyYTQ0YTkzYzhmNmVjMDEuYmluZFBvcHVwKHBvcHVwXzE2NWU0ZmY0MzY3YzQzYzU5M2U4OGI3MGNmOWU5M2U3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZmIyMDdkOTM3MjM0NGE4MDkyYTQ0YTkzYzhmNmVjMDEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjA5NzhjZTM3MmM0OTJjOGEwYjAyMDFkMzIzNDlkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM0MjMxNTgsIDQzLjkxMjczOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3YjU4OTg4ZGViNzQzYWE5OWY2NTlkYmMwMWI4YTZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExODBhMWZhMWJlMDQ4NzhhYjc1YzQ0ZmJmMjI0MzcwID0gJChgPGRpdiBpZD0iaHRtbF9hMTgwYTFmYTFiZTA0ODc4YWI3NWM0NGZiZjIyNDM3MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+QW56b3JleTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTdiNTg5ODhkZWI3NDNhYTk5ZjY1OWRiYzAxYjhhNmUuc2V0Q29udGVudChodG1sX2ExODBhMWZhMWJlMDQ4NzhhYjc1YzQ0ZmJmMjI0MzcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiMDk3OGNlMzcyYzQ5MmM4YTBiMDIwMWQzMjM0OWRmLmJpbmRQb3B1cChwb3B1cF9lN2I1ODk4OGRlYjc0M2FhOTlmNjU5ZGJjMDFiOGE2ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2RiMDk3OGNlMzcyYzQ5MmM4YTBiMDIwMWQzMjM0OWRmLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTI1NGJmYzJmZTljNGM4YWE3YzAyZTU0N2I1NjI4ZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNDM0MzkzOTk5OTk5OTQsIDQ0LjAyNTUyMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VkYmM4OTYwZjEyMjQwYzQ4Y2RkNjVkY2QyMDYwYTVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwMTQ5ODI3MjNmMDQxOWI4MmFhMDM2ZWQ3ZGI1Nzc2ID0gJChgPGRpdiBpZD0iaHRtbF8yMDE0OTgyNzIzZjA0MTliODJhYTAzNmVkN2RiNTc3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S2hhdHVleTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWRiYzg5NjBmMTIyNDBjNDhjZGQ2NWRjZDIwNjBhNWEuc2V0Q29udGVudChodG1sXzIwMTQ5ODI3MjNmMDQxOWI4MmFhMDM2ZWQ3ZGI1Nzc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUyNTRiZmMyZmU5YzRjOGFhN2MwMmU1NDdiNTYyOGQyLmJpbmRQb3B1cChwb3B1cF9lZGJjODk2MGYxMjI0MGM0OGNkZDY1ZGNkMjA2MGE1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzUyNTRiZmMyZmU5YzRjOGFhN2MwMmU1NDdiNTYyOGQyLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDVmMjdiNzNhNmRiNGFlMzlkM2E5NjQ1Y2ZjMmY4OGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNDgwODM5LCA0My43Mjc5ODc4OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyODE4NTI2N2E0MjQ1OWE5MTQwNGE5NGIyNWIyYzNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3MGYzZDZlZGRkZDQxODZhNDE4N2Q5MzcxMWI5OTBkID0gJChgPGRpdiBpZD0iaHRtbF9hNzBmM2Q2ZWRkZGQ0MTg2YTQxODdkOTM3MTFiOTkwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+WmFyYWdpemg8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyODE4NTI2N2E0MjQ1OWE5MTQwNGE5NGIyNWIyYzNmLnNldENvbnRlbnQoaHRtbF9hNzBmM2Q2ZWRkZGQ0MTg2YTQxODdkOTM3MTFiOTkwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NWYyN2I3M2E2ZGI0YWUzOWQzYTk2NDVjZmMyZjg4ZC5iaW5kUG9wdXAocG9wdXBfMzI4MTg1MjY3YTQyNDU5YTkxNDA0YTk0YjI1YjJjM2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80NWYyN2I3M2E2ZGI0YWUzOWQzYTk2NDVjZmMyZjg4ZC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FkOTk1YTUxMDIxNzQ3ZTc4MDQyZmFkMDFkZWQyNzcwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzUwNjU4NzAwMDAwMDA0LCA0My45MTAzNDI3OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2NjBhNzRkYWU5YzRiZTdiNDFiZDYwMTAwYjRkYTdhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyMWNmYTFiZmZjZjQ5ODM5MGQxNDAwN2NlZDI2Y2RkID0gJChgPGRpdiBpZD0iaHRtbF83MjFjZmExYmZmY2Y0OTgzOTBkMTQwMDdjZWQyNmNkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+VnRvcm95IExlc2tlbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODY2MGE3NGRhZTljNGJlN2I0MWJkNjAxMDBiNGRhN2Euc2V0Q29udGVudChodG1sXzcyMWNmYTFiZmZjZjQ5ODM5MGQxNDAwN2NlZDI2Y2RkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FkOTk1YTUxMDIxNzQ3ZTc4MDQyZmFkMDFkZWQyNzcwLmJpbmRQb3B1cChwb3B1cF84NjYwYTc0ZGFlOWM0YmU3YjQxYmQ2MDEwMGI0ZGE3YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2FkOTk1YTUxMDIxNzQ3ZTc4MDQyZmFkMDFkZWQyNzcwLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzdjYzI5NWUxY2MyNDY3NWFkYjZhNTQxODVhM2Y1MTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zODA0NzgwMDAwMDAwMDQsIDQyLjkwNzQ4NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczNDMxNGQzNzdmZTQ1OGE4MDQ2ZjA1MmRmNzc2ZDYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkNmE3NWM5MTZhNDQ1M2ZiODI2ZmZiZDk3MWMwMjA0ID0gJChgPGRpdiBpZD0iaHRtbF82ZDZhNzVjOTE2YTQ0NTNmYjgyNmZmYmQ5NzFjMDIwNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+Zy4gVHlybnlhdXo8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczNDMxNGQzNzdmZTQ1OGE4MDQ2ZjA1MmRmNzc2ZDYwLnNldENvbnRlbnQoaHRtbF82ZDZhNzVjOTE2YTQ0NTNmYjgyNmZmYmQ5NzFjMDIwNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jN2NjMjk1ZTFjYzI0Njc1YWRiNmE1NDE4NWEzZjUxOS5iaW5kUG9wdXAocG9wdXBfNzM0MzE0ZDM3N2ZlNDU4YTgwNDZmMDUyZGY3NzZkNjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9jN2NjMjk1ZTFjYzI0Njc1YWRiNmE1NDE4NWEzZjUxOS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQxZDNmNDRmODkzNDQ0ZGRiNzg4ZTM0ZDI2ZjdjYmM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzkzMzU1Mjk5OTk5OTk2LCA0My43NDIyNzk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDU4ZGQ5OWE4MTM0YTZiOTQzNTdhZTlmYTk4YWQzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZjNhMWQ1YjVhMzk0NjVhYWQ3ZmM3NTQ5YzU5ODE0YyA9ICQoYDxkaXYgaWQ9Imh0bWxfMGYzYTFkNWI1YTM5NDY1YWFkN2ZjNzU0OWM1OTgxNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkF1c2hpZ2VyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNDU4ZGQ5OWE4MTM0YTZiOTQzNTdhZTlmYTk4YWQzZi5zZXRDb250ZW50KGh0bWxfMGYzYTFkNWI1YTM5NDY1YWFkN2ZjNzU0OWM1OTgxNGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDFkM2Y0NGY4OTM0NDRkZGI3ODhlMzRkMjZmN2NiYzkuYmluZFBvcHVwKHBvcHVwXzI0NThkZDk5YTgxMzRhNmI5NDM1N2FlOWZhOThhZDNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNDFkM2Y0NGY4OTM0NDRkZGI3ODhlMzRkMjZmN2NiYzkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjA2NzY3MWRiYWU0ZDZmYTg1MTgyNWI3ZTNiOTg3ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQxMTgxNDQsIDQzLjkwNDUxMDIwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjlkZjBkYmRiZTAxNDRkOTg3ODIzZDgwMjU2Y2E2NzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjgzZmFhNjBiNjIyNGE5MzhmZTFjM2Q4ZmMxOGFjYmMgPSAkKGA8ZGl2IGlkPSJodG1sXzI4M2ZhYTYwYjYyMjRhOTM4ZmUxYzNkOGZjMThhY2JjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5Bcmd1ZGFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOWRmMGRiZGJlMDE0NGQ5ODc4MjNkODAyNTZjYTY3Ny5zZXRDb250ZW50KGh0bWxfMjgzZmFhNjBiNjIyNGE5MzhmZTFjM2Q4ZmMxOGFjYmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmYwNjc2NzFkYmFlNGQ2ZmE4NTE4MjViN2UzYjk4N2YuYmluZFBvcHVwKHBvcHVwX2Y5ZGYwZGJkYmUwMTQ0ZDk4NzgyM2Q4MDI1NmNhNjc3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMmYwNjc2NzFkYmFlNGQ2ZmE4NTE4MjViN2UzYjk4N2YuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZGQ2YjdmYzNlZjA0NDdhOGUxZjlhOTlmMGEyNjgxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ1MzU2MDYsIDQ0LjIxMTk3NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlZDIxMjAwOTQxZDQ3ZTc5YzgzMDlkZGRjNzRlYjJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0NjI1NTY5NTNlOTRiN2RhYzhhZTlmYjllZTBjNDlmID0gJChgPGRpdiBpZD0iaHRtbF9kNDYyNTU2OTUzZTk0YjdkYWM4YWU5ZmI5ZWUwYzQ5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+QmVsb2dsaW5za29lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZWQyMTIwMDk0MWQ0N2U3OWM4MzA5ZGRkYzc0ZWIyZS5zZXRDb250ZW50KGh0bWxfZDQ2MjU1Njk1M2U5NGI3ZGFjOGFlOWZiOWVlMGM0OWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGRkNmI3ZmMzZWYwNDQ3YThlMWY5YTk5ZjBhMjY4MTkuYmluZFBvcHVwKHBvcHVwXzNlZDIxMjAwOTQxZDQ3ZTc5YzgzMDlkZGRjNzRlYjJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNGRkNmI3ZmMzZWYwNDQ3YThlMWY5YTk5ZjBhMjY4MTkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTA4YjE2NjlmMDk0ODQwOGU3MTI0OGFiZDk4ZjZlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ2NjI4MzM5OTk5OTk5NSwgNDMuODM2NjkzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTlkMTE1YTYxNmRiNGIxYmE3YTFiYzhjYTAxYzliZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTkyZDU2OTkxOTMzNDBkNzg4ZTZkZjJhZTIzMTVkYjUgPSAkKGA8ZGl2IGlkPSJodG1sXzk5MmQ1Njk5MTkzMzQwZDc4OGU2ZGYyYWUyMzE1ZGI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5TdGFyeSBDaGVyZWs8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5ZDExNWE2MTZkYjRiMWJhN2ExYmM4Y2EwMWM5YmU4LnNldENvbnRlbnQoaHRtbF85OTJkNTY5OTE5MzM0MGQ3ODhlNmRmMmFlMjMxNWRiNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NTA4YjE2NjlmMDk0ODQwOGU3MTI0OGFiZDk4ZjZlZS5iaW5kUG9wdXAocG9wdXBfOTlkMTE1YTYxNmRiNGIxYmE3YTFiYzhjYTAxYzliZTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl81NTA4YjE2NjlmMDk0ODQwOGU3MTI0OGFiZDk4ZjZlZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IwN2U2NjZlMWNlNDRmYjdiYzlmOGM4YmVjOWFlOTI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDc3ODExMTAwMDAwMDA0LCA0NC4xMjM4ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiNDhhMTJiNzQzNDQwMTZhOWQ3YjBhZDU0NzJkMThiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwZmM0ZjVkNjliMTQ2ZDQ5Y2RmMzFjZTk5ZTI0MDg0ID0gJChgPGRpdiBpZD0iaHRtbF9hMGZjNGY1ZDY5YjE0NmQ0OWNkZjMxY2U5OWUyNDA4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+SW50ZXJuYXRzaW9uYWxub2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JiNDhhMTJiNzQzNDQwMTZhOWQ3YjBhZDU0NzJkMThiLnNldENvbnRlbnQoaHRtbF9hMGZjNGY1ZDY5YjE0NmQ0OWNkZjMxY2U5OWUyNDA4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMDdlNjY2ZTFjZTQ0ZmI3YmM5ZjhjOGJlYzlhZTkyNS5iaW5kUG9wdXAocG9wdXBfYmI0OGExMmI3NDM0NDAxNmE5ZDdiMGFkNTQ3MmQxOGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9iMDdlNjY2ZTFjZTQ0ZmI3YmM5ZjhjOGJlYzlhZTkyNS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyMTg0N2IxZWU1YTRhNWE4ZTQyOGU4OGFkZTJiNzM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDc4MTE4MSwgNDMuNzYwNjQ3NjAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMTE5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZDE2YTE3YjhiNGE0OTQ4YTI3MWNhOTRiNmFkM2Y4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYWMyYmJhNTU0NmU0ZTYxYTkxNGIwY2I4YTdjZTZmNCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWFjMmJiYTU1NDZlNGU2MWE5MTRiMGNiOGE3Y2U2ZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlVydmFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZDE2YTE3YjhiNGE0OTQ4YTI3MWNhOTRiNmFkM2Y4OC5zZXRDb250ZW50KGh0bWxfZWFjMmJiYTU1NDZlNGU2MWE5MTRiMGNiOGE3Y2U2ZjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDIxODQ3YjFlZTVhNGE1YThlNDI4ZTg4YWRlMmI3MzQuYmluZFBvcHVwKHBvcHVwXzNkMTZhMTdiOGI0YTQ5NDhhMjcxY2E5NGI2YWQzZjg4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNDIxODQ3YjFlZTVhNGE1YThlNDI4ZTg4YWRlMmI3MzQuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMTc2MjQwMDYyNGQ0Y2FhOTEzOGJjMWRhZjM5M2RmNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ4NTU3NTgsIDQ0LjM2MzY1NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcxZThiOTZjZGRiYTQ4MDNhNGNmMDEwMjA0ODE1MWJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjNWMwYWFhYzAxYjQ2OTc5OTMyZDVlZTAyODZhOTQzID0gJChgPGRpdiBpZD0iaHRtbF9kYzVjMGFhYWMwMWI0Njk3OTkzMmQ1ZWUwMjg2YTk0MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+SW5hcmtveTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzFlOGI5NmNkZGJhNDgwM2E0Y2YwMTAyMDQ4MTUxYmEuc2V0Q29udGVudChodG1sX2RjNWMwYWFhYzAxYjQ2OTc5OTMyZDVlZTAyODZhOTQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IxNzYyNDAwNjI0ZDRjYWE5MTM4YmMxZGFmMzkzZGY0LmJpbmRQb3B1cChwb3B1cF83MWU4Yjk2Y2RkYmE0ODAzYTRjZjAxMDIwNDgxNTFiYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2IxNzYyNDAwNjI0ZDRjYWE5MTM4YmMxZGFmMzkzZGY0LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWI4ZWY5MTZjNzRjNDU4ZDk2Mzg2NjU0Nzc0NzdmYzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDM5OTU2LCA0My43MTg1NTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMTE5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYTc5MTI1NDQzMmE0ZmEyYjg0Y2M2ZDRkY2Y5OTVhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZThhOWE0ZTk5Zjk0ZWI5OGY4M2FlYjU5Y2ZmOWFiNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWU4YTlhNGU5OWY5NGViOThmODNhZWI1OWNmZjlhYjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPk5hcnRhbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWE3OTEyNTQ0MzJhNGZhMmI4NGNjNmQ0ZGNmOTk1YTYuc2V0Q29udGVudChodG1sXzFlOGE5YTRlOTlmOTRlYjk4ZjgzYWViNTljZmY5YWI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzliOGVmOTE2Yzc0YzQ1OGQ5NjM4NjY1NDc3NDc3ZmMzLmJpbmRQb3B1cChwb3B1cF9hYTc5MTI1NDQzMmE0ZmEyYjg0Y2M2ZDRkY2Y5OTVhNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzliOGVmOTE2Yzc0YzQ1OGQ5NjM4NjY1NDc3NDc3ZmMzLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmUyODMzZDE2NDBlNGExZmExMzA4MDQzZmNhOTBjN2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDU5MTkzOTk5OTk5OTYsIDQ0LjIxNDQ4MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2MjZjMTNjNjExMzQzZmRhYzg4N2JkYTcyOWUxNWEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5YTU5ZWVjNjFkNzQ3Nzc5MWJjMTA2ZGEyNGY4MDAwID0gJChgPGRpdiBpZD0iaHRtbF9lOWE1OWVlYzYxZDc0Nzc3OTFiYzEwNmRhMjRmODAwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+VGFtYm92c2tvZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTYyNmMxM2M2MTEzNDNmZGFjODg3YmRhNzI5ZTE1YTIuc2V0Q29udGVudChodG1sX2U5YTU5ZWVjNjFkNzQ3Nzc5MWJjMTA2ZGEyNGY4MDAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlMjgzM2QxNjQwZTRhMWZhMTMwODA0M2ZjYTkwYzdkLmJpbmRQb3B1cChwb3B1cF85NjI2YzEzYzYxMTM0M2ZkYWM4ODdiZGE3MjllMTVhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzJlMjgzM2QxNjQwZTRhMWZhMTMwODA0M2ZjYTkwYzdkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTQ5NThlNDZmNzc5NDc4MTgwZDNmMDAzYmZlZGZjMTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MjQ0NDAwMDAwMDAwMDYsIDQzLjkzMTk0MDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzlmNGIwOWE0YzFiNGM0NmI2ZjM2ZjliNzdhYzAyYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzgwMjU1MjYyYmNiNDk2NGE3N2NlMWViMmI0MzkyYzMgPSAkKGA8ZGl2IGlkPSJodG1sX2M4MDI1NTI2MmJjYjQ5NjRhNzdjZTFlYjJiNDM5MmMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5OaXpobnkgQ2hlcmVrPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OWY0YjA5YTRjMWI0YzQ2YjZmMzZmOWI3N2FjMDJiMC5zZXRDb250ZW50KGh0bWxfYzgwMjU1MjYyYmNiNDk2NGE3N2NlMWViMmI0MzkyYzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQ5NThlNDZmNzc5NDc4MTgwZDNmMDAzYmZlZGZjMTEuYmluZFBvcHVwKHBvcHVwXzc5ZjRiMDlhNGMxYjRjNDZiNmYzNmY5Yjc3YWMwMmIwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOTQ5NThlNDZmNzc5NDc4MTgwZDNmMDAzYmZlZGZjMTEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMWUzMmZlN2JhNDg0ZThkOGU3MWNlZjMyNDkwZmYwYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUyNjU2NzcsIDQzLjYwMjcwNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhNWUzNTM0NTI1YzRlMDZiYjRjNmI5YmQ5YzE4OTA2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlMTM4ZTZkZDdhMjQ2MjI4MjI5YzllZTVjNjBkNDBiID0gJChgPGRpdiBpZD0iaHRtbF84ZTEzOGU2ZGQ3YTI0NjIyODIyOWM5ZWU1YzYwZDQwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+U2hhbHVzaGthPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYTVlMzUzNDUyNWM0ZTA2YmI0YzZiOWJkOWMxODkwNi5zZXRDb250ZW50KGh0bWxfOGUxMzhlNmRkN2EyNDYyMjgyMjljOWVlNWM2MGQ0MGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzFlMzJmZTdiYTQ4NGU4ZDhlNzFjZWYzMjQ5MGZmMGEuYmluZFBvcHVwKHBvcHVwX2ZhNWUzNTM0NTI1YzRlMDZiYjRjNmI5YmQ5YzE4OTA2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMzFlMzJmZTdiYTQ4NGU4ZDhlNzFjZWYzMjQ5MGZmMGEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NDcyMDhmZjI4ODU0ZjE1YjcxYzAyYjFlYmRhYTg0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUzODU5NzcwMDAwMDAwNCwgNDMuOTMxNzQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjU5MWYzNmE3ZDg5NDhiODhhMDQyNjQ5M2QwYzY4YjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjZiZjJjOWYzZDRmNGJmNjg2ZDkyMDVkMmRkMjQyNWEgPSAkKGA8ZGl2IGlkPSJodG1sX2Y2YmYyYzlmM2Q0ZjRiZjY4NmQ5MjA1ZDJkZDI0MjVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5Qc3luYWJvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTkxZjM2YTdkODk0OGI4OGEwNDI2NDkzZDBjNjhiOC5zZXRDb250ZW50KGh0bWxfZjZiZjJjOWYzZDRmNGJmNjg2ZDkyMDVkMmRkMjQyNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDQ3MjA4ZmYyODg1NGYxNWI3MWMwMmIxZWJkYWE4NDMuYmluZFBvcHVwKHBvcHVwXzY1OTFmMzZhN2Q4OTQ4Yjg4YTA0MjY0OTNkMGM2OGI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNDQ3MjA4ZmYyODg1NGYxNWI3MWMwMmIxZWJkYWE4NDMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNzM3OGFiMmNkZTQ0OGI3YjQ3OWY3OWIzZTdjYTNlYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU0MDU4ODcwMDAwMDAxLCA0My44OTQzMjE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84M2JlYjA3ZDhmNGY0NzM2ODlmMGNmNjUwYzA1N2YyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNzA3MDU0NjI3NWU0YWMxOGFmN2E3MzA0ZDJlNzI4MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTcwNzA1NDYyNzVlNGFjMThhZjdhNzMwNGQyZTcyODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPktha2h1bjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODNiZWIwN2Q4ZjRmNDczNjg5ZjBjZjY1MGMwNTdmMjAuc2V0Q29udGVudChodG1sXzE3MDcwNTQ2Mjc1ZTRhYzE4YWY3YTczMDRkMmU3MjgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M3Mzc4YWIyY2RlNDQ4YjdiNDc5Zjc5YjNlN2NhM2VjLmJpbmRQb3B1cChwb3B1cF84M2JlYjA3ZDhmNGY0NzM2ODlmMGNmNjUwYzA1N2YyMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2M3Mzc4YWIyY2RlNDQ4YjdiNDc5Zjc5YjNlN2NhM2VjLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTFjNzEwODNhMTYyNDdlMTkyNWYxYzRiYjRhNDNiNTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTI4MTc0OTk5OTk5OTYsIDQzLjc5NzQ2Mjg5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOGNhOGYzNDA1ZjM0NzBiODc0MWJmMDI0ZGMxODZkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOTg4YmVjZWM5MDM0ZmI1ODU5MDU3NzBmMTMwMDQ4NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTk4OGJlY2VjOTAzNGZiNTg1OTA1NzcwZjEzMDA0ODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlNoaXRraGFsYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzhjYThmMzQwNWYzNDcwYjg3NDFiZjAyNGRjMTg2ZDEuc2V0Q29udGVudChodG1sXzE5ODhiZWNlYzkwMzRmYjU4NTkwNTc3MGYxMzAwNDg3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExYzcxMDgzYTE2MjQ3ZTE5MjVmMWM0YmI0YTQzYjU2LmJpbmRQb3B1cChwb3B1cF9jOGNhOGYzNDA1ZjM0NzBiODc0MWJmMDI0ZGMxODZkMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzExYzcxMDgzYTE2MjQ3ZTE5MjVmMWM0YmI0YTQzYjU2LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTNiMGYzYmU2ZTJiNDA0OGExYmIyZGEwM2NmNTQxY2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTQxNywgNDQuMDk5NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3MDE2OGQzMjU4MjQwM2FhMzMwMzZhMzMxZDc0MGQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyZGRiMmUzMmMwNjRmMjI4NzRmYTkwNTY2YmU1NTJiID0gJChgPGRpdiBpZD0iaHRtbF84MmRkYjJlMzJjMDY0ZjIyODc0ZmE5MDU2NmJlNTUyYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+UHN5bmFzaGtobzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDcwMTY4ZDMyNTgyNDAzYWEzMzAzNmEzMzFkNzQwZDUuc2V0Q29udGVudChodG1sXzgyZGRiMmUzMmMwNjRmMjI4NzRmYTkwNTY2YmU1NTJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UzYjBmM2JlNmUyYjQwNDhhMWJiMmRhMDNjZjU0MWNiLmJpbmRQb3B1cChwb3B1cF9kNzAxNjhkMzI1ODI0MDNhYTMzMDM2YTMzMWQ3NDBkNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2UzYjBmM2JlNmUyYjQwNDhhMWJiMmRhMDNjZjU0MWNiLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGJkNDFhM2FiZjU1NGVkNmE4ODhkN2JkN2M4NjI5NzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTczNjc1LCA0My4xOTQ5NzMxMDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiZTA2MTYxNDY4NDQ4OTQ4ZTVkMTk4NjM4ZWM2YTNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2ODQzNmY0N2MxODRjY2M4ZTg2N2QxYWQ1YTU2YTc3ID0gJChgPGRpdiBpZD0iaHRtbF9kNjg0MzZmNDdjMTg0Y2NjOGU4NjdkMWFkNWE1NmE3NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+Wmhhbmtob3Rla288L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiZTA2MTYxNDY4NDQ4OTQ4ZTVkMTk4NjM4ZWM2YTNhLnNldENvbnRlbnQoaHRtbF9kNjg0MzZmNDdjMTg0Y2NjOGU4NjdkMWFkNWE1NmE3Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYmQ0MWEzYWJmNTU0ZWQ2YTg4OGQ3YmQ3Yzg2Mjk3Ny5iaW5kUG9wdXAocG9wdXBfMGJlMDYxNjE0Njg0NDg5NDhlNWQxOTg2MzhlYzZhM2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8wYmQ0MWEzYWJmNTU0ZWQ2YTg4OGQ3YmQ3Yzg2Mjk3Ny5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwZjdjYjA2NmI4YTQyYWQ5YWZlMTA5YzQ1NzQ1ZWI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTU3NzAzOSwgNDMuNDM3MTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OWNmMzM5MzZhOGQ0MzJhYWJjNzllY2NhY2Y3MmRjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMjE1MDA5NzI1ZWY0MjdhYTBkZDYwNzMyM2Q3NmZjMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjIxNTAwOTcyNWVmNDI3YWEwZGQ2MDczMjNkNzZmYzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkxlY2hpbmtheTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzljZjMzOTM2YThkNDMyYWFiYzc5ZWNjYWNmNzJkYzAuc2V0Q29udGVudChodG1sX2IyMTUwMDk3MjVlZjQyN2FhMGRkNjA3MzIzZDc2ZmMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMwZjdjYjA2NmI4YTQyYWQ5YWZlMTA5YzQ1NzQ1ZWI3LmJpbmRQb3B1cChwb3B1cF83OWNmMzM5MzZhOGQ0MzJhYWJjNzllY2NhY2Y3MmRjMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzMwZjdjYjA2NmI4YTQyYWQ5YWZlMTA5YzQ1NzQ1ZWI3LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI0OTg2NTQ4NjZiNGE1NmI2NWI1ZmI4ZTZiNTA1NDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NjEyNjk1LCA0My42MDQyNjQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODlkNzcyZDNkN2I0NTBjYjQ1MTRhYTJhY2ViNzgxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Zjc4OGI2N2U3Y2I0NWM3ODNjNjE1MDNlYmNhOWEyNiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWY3ODhiNjdlN2NiNDVjNzgzYzYxNTAzZWJjYTlhMjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPmcuIENoZWdlbTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjg5ZDc3MmQzZDdiNDUwY2I0NTE0YWEyYWNlYjc4MTcuc2V0Q29udGVudChodG1sXzlmNzg4YjY3ZTdjYjQ1Yzc4M2M2MTUwM2ViY2E5YTI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyNDk4NjU0ODY2YjRhNTZiNjViNWZiOGU2YjUwNTQ5LmJpbmRQb3B1cChwb3B1cF9iODlkNzcyZDNkN2I0NTBjYjQ1MTRhYTJhY2ViNzgxNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzQyNDk4NjU0ODY2YjRhNTZiNjViNWZiOGU2YjUwNTQ5LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTY1MzM5NGMzMDlkNGFhNmIwN2RkZDQ1ZDkzMzA4M2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NjY1NTU0LCA0My44ODQxNzg5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3Y2FiYmE1YWYxYTQ0ZmNhZThiN2RiOTdmMTFiMjE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5YTdhMGRkNzFiMjQ2MmU4YTQ1YjVhMjQ0YzliMDZjID0gJChgPGRpdiBpZD0iaHRtbF9lOWE3YTBkZDcxYjI0NjJlOGE0NWI1YTI0NGM5YjA2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+Zy4gTmFydGthbGE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3Y2FiYmE1YWYxYTQ0ZmNhZThiN2RiOTdmMTFiMjE0LnNldENvbnRlbnQoaHRtbF9lOWE3YTBkZDcxYjI0NjJlOGE0NWI1YTI0NGM5YjA2Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNjUzMzk0YzMwOWQ0YWE2YjA3ZGRkNDVkOTMzMDgzZS5iaW5kUG9wdXAocG9wdXBfZDdjYWJiYTVhZjFhNDRmY2FlOGI3ZGI5N2YxMWIyMTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9hNjUzMzk0YzMwOWQ0YWE2YjA3ZGRkNDVkOTMzMDgzZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjNmRjNzBmMDY3ZDRhOGZiN2E2NGQ1NTBlZTg1ZTU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTY3ODk2OCwgNDMuODQxNTgxNzAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZjdhYjljY2FmNTM0Nzg3OWU0YzFhODJkZjc2MDRlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYTQ2MzY1Zjc4Mzc0ZmNhYTRlYjkwMzc4YWMyNTA2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2E0NjM2NWY3ODM3NGZjYWE0ZWI5MDM3OGFjMjUwNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPk1vcnpva2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmN2FiOWNjYWY1MzQ3ODc5ZTRjMWE4MmRmNzYwNGVhLnNldENvbnRlbnQoaHRtbF8zYTQ2MzY1Zjc4Mzc0ZmNhYTRlYjkwMzc4YWMyNTA2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYzZkYzcwZjA2N2Q0YThmYjdhNjRkNTUwZWU4NWU1OC5iaW5kUG9wdXAocG9wdXBfNGY3YWI5Y2NhZjUzNDc4NzllNGMxYTgyZGY3NjA0ZWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9jYzZkYzcwZjA2N2Q0YThmYjdhNjRkNTUwZWU4NWU1OC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMyNzU0OWI5YjE4MzQwYjJiZTdkOTRhNzYyM2ZhN2EzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTc4MDczOCwgNDMuNzU4OTE2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmUzMjg0MGQ4MDM5NDAwMGFhZTI0ZjA1YjMwYjlhZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzFlZDFhMDViMGY2NGEwYzhjNWY0NzZmZjE0MmQxNjUgPSAkKGA8ZGl2IGlkPSJodG1sX2MxZWQxYTA1YjBmNjRhMGM4YzVmNDc2ZmYxNDJkMTY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5HZXJtZW5jaGlrPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTMyODQwZDgwMzk0MDAwYWFlMjRmMDViMzBiOWFlZi5zZXRDb250ZW50KGh0bWxfYzFlZDFhMDViMGY2NGEwYzhjNWY0NzZmZjE0MmQxNjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzI3NTQ5YjliMTgzNDBiMmJlN2Q5NGE3NjIzZmE3YTMuYmluZFBvcHVwKHBvcHVwX2ZlMzI4NDBkODAzOTQwMDBhYWUyNGYwNWIzMGI5YWVmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMzI3NTQ5YjliMTgzNDBiMmJlN2Q5NGE3NjIzZmE3YTMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNWQ4ZWI0YmE1ZGE0YWQxOGI2Zjk0MDA3MDVlZjYyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwMzMyMzgsIDQzLjk5NDgwNjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5ODJjOTQyMmU1YjQ3NTY4NTE3YjU4NDRlZDQ4MzIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkZDFiOWMxZDIyODRkOGU5NDAwMjIwMTIwNTRmM2E3ID0gJChgPGRpdiBpZD0iaHRtbF9kZGQxYjljMWQyMjg0ZDhlOTQwMDIyMDEyMDU0ZjNhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+UHN5a29kPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OTgyYzk0MjJlNWI0NzU2ODUxN2I1ODQ0ZWQ0ODMyMS5zZXRDb250ZW50KGh0bWxfZGRkMWI5YzFkMjI4NGQ4ZTk0MDAyMjAxMjA1NGYzYTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTVkOGViNGJhNWRhNGFkMThiNmY5NDAwNzA1ZWY2MjcuYmluZFBvcHVwKHBvcHVwXzY5ODJjOTQyMmU1YjQ3NTY4NTE3YjU4NDRlZDQ4MzIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMTVkOGViNGJhNWRhNGFkMThiNmY5NDAwNzA1ZWY2MjcuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYTU0MTcxNjQzMWE0MmViOWMzODJiZjkyZDMxYmVjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwNTUyNzcsIDQzLjYxMDYyNjIwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2I4N2VlOTgxMjNjNGEwZmJlM2Q3ZGNmMzFjODBiNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQzMDAwYzU1MjFlNDIxMjljMzgyNjAzYzc5ZmQ4M2IgPSAkKGA8ZGl2IGlkPSJodG1sX2E0MzAwMGM1NTIxZTQyMTI5YzM4MjYwM2M3OWZkODNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5DaGVnZW0gVnRvcm95PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYjg3ZWU5ODEyM2M0YTBmYmUzZDdkY2YzMWM4MGI1Yi5zZXRDb250ZW50KGh0bWxfYTQzMDAwYzU1MjFlNDIxMjljMzgyNjAzYzc5ZmQ4M2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWE1NDE3MTY0MzFhNDJlYjljMzgyYmY5MmQzMWJlYzAuYmluZFBvcHVwKHBvcHVwX2NiODdlZTk4MTIzYzRhMGZiZTNkN2RjZjMxYzgwYjViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMWE1NDE3MTY0MzFhNDJlYjljMzgyYmY5MmQzMWJlYzAuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjI1MTNhMzdiYjc0NGE1YTI1YmI2NTZmZjZlNWM1NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwNjk0LCA0My44MzQxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWJhNGU3MjUzNzM3NDRlODkxZGZiMmJiYmMzZDc5NzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2U2ZDBhYzJhNzNiNDRhZWE2ZDU4NTA3NWFlNTY2MjkgPSAkKGA8ZGl2IGlkPSJodG1sXzNlNmQwYWMyYTczYjQ0YWVhNmQ1ODUwNzVhZTU2NjI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5DaGVybmF5YSBSZWNoa2E8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliYTRlNzI1MzczNzQ0ZTg5MWRmYjJiYmJjM2Q3OTcwLnNldENvbnRlbnQoaHRtbF8zZTZkMGFjMmE3M2I0NGFlYTZkNTg1MDc1YWU1NjYyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MjI1MTNhMzdiYjc0NGE1YTI1YmI2NTZmZjZlNWM1NC5iaW5kUG9wdXAocG9wdXBfOWJhNGU3MjUzNzM3NDRlODkxZGZiMmJiYmMzZDc5NzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl85MjI1MTNhMzdiYjc0NGE1YTI1YmI2NTZmZjZlNWM1NC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M1OTcxOWU4OGY1MzQxNGRiZDY2NDIxZWU4Zjk1NGQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjEwMTk3MiwgNDMuMzQ2OTkxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmIzZjQ3NjA0Y2I5NDJmNmJkM2RjODIyMjdiNWMxNWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGQ2YTg0N2JmYmEwNDQyN2EzZjFkOTcwMDExNDU1OTUgPSAkKGA8ZGl2IGlkPSJodG1sXzhkNmE4NDdiZmJhMDQ0MjdhM2YxZDk3MDAxMTQ1NTk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5aYXl1a292bzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmIzZjQ3NjA0Y2I5NDJmNmJkM2RjODIyMjdiNWMxNWQuc2V0Q29udGVudChodG1sXzhkNmE4NDdiZmJhMDQ0MjdhM2YxZDk3MDAxMTQ1NTk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M1OTcxOWU4OGY1MzQxNGRiZDY2NDIxZWU4Zjk1NGQ4LmJpbmRQb3B1cChwb3B1cF8yYjNmNDc2MDRjYjk0MmY2YmQzZGM4MjIyN2I1YzE1ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2M1OTcxOWU4OGY1MzQxNGRiZDY2NDIxZWU4Zjk1NGQ4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODgwMGJhZjE4MWYwNDZmZGJmZTZlMTdiYWZjZjdhOGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTQ3OTYyMDAwMDAwMSwgNDQuMzUxNTQwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzdhNzQ0NmM3ZGNlNGFkYzg5YjM4Y2NkNWU5NGMyNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODQ2ODA0YzY1NGM3NDdmYWEzYzY1ODNjNGE1ZmE4MmUgPSAkKGA8ZGl2IGlkPSJodG1sXzg0NjgwNGM2NTRjNzQ3ZmFhM2M2NTgzYzRhNWZhODJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5Ob3ZvLUtoYW1pZGllPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jN2E3NDQ2YzdkY2U0YWRjODliMzhjY2Q1ZTk0YzI2OC5zZXRDb250ZW50KGh0bWxfODQ2ODA0YzY1NGM3NDdmYWEzYzY1ODNjNGE1ZmE4MmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODgwMGJhZjE4MWYwNDZmZGJmZTZlMTdiYWZjZjdhOGEuYmluZFBvcHVwKHBvcHVwX2M3YTc0NDZjN2RjZTRhZGM4OWIzOGNjZDVlOTRjMjY4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfODgwMGJhZjE4MWYwNDZmZGJmZTZlMTdiYWZjZjdhOGEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NmMxNWI0ZjFmMDA0MTA5OTJjYWE1NDA2YWViNTYwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxNTc1NDYsIDQ0LjA5MjY1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmODA1MTIxZjViNDQ5MGJiMDI5NzIyMjBjNjAwY2E3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3NzM3YWE1M2U5MDQyNTg5ZTRmNTcwZTg1NTU4NDFlID0gJChgPGRpdiBpZD0iaHRtbF9lNzczN2FhNTNlOTA0MjU4OWU0ZjU3MGU4NTU1ODQxZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+RHpodWxhdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2Y4MDUxMjFmNWI0NDkwYmIwMjk3MjIyMGM2MDBjYTcuc2V0Q29udGVudChodG1sX2U3NzM3YWE1M2U5MDQyNTg5ZTRmNTcwZTg1NTU4NDFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ2YzE1YjRmMWYwMDQxMDk5MmNhYTU0MDZhZWI1NjAwLmJpbmRQb3B1cChwb3B1cF9jZjgwNTEyMWY1YjQ0OTBiYjAyOTcyMjIwYzYwMGNhNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzQ2YzE1YjRmMWYwMDQxMDk5MmNhYTU0MDZhZWI1NjAwLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTNhYjZjNjBkYmE2NDg2Y2FlMTMyNDJhZjBhOTMyNjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTk3NTU3MDAwMDAwMDYsIDQ0LjEzMDUyODc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNWZkNzZhM2VkMGQ0OWJiYTdjYzE4YjlkMDA2NzRkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZmQ4Y2RjMjVlYTY0OGU0OGQwYTljNjcwY2I2YTM0MSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGZkOGNkYzI1ZWE2NDhlNDhkMGE5YzY3MGNiNmEzNDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkt1eWFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNWZkNzZhM2VkMGQ0OWJiYTdjYzE4YjlkMDA2NzRkMy5zZXRDb250ZW50KGh0bWxfNGZkOGNkYzI1ZWE2NDhlNDhkMGE5YzY3MGNiNmEzNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTNhYjZjNjBkYmE2NDg2Y2FlMTMyNDJhZjBhOTMyNjQuYmluZFBvcHVwKHBvcHVwXzE1ZmQ3NmEzZWQwZDQ5YmJhN2NjMThiOWQwMDY3NGQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMTNhYjZjNjBkYmE2NDg2Y2FlMTMyNDJhZjBhOTMyNjQuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTg3YjRlOWI2ZDc0YTM2YmQyNjU4OTA3MzU4NDVjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYyOTU5NzQ5OTk5OTk5NiwgNDQuMTQzNjk3Nzk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4MGUzODQyNGFmZTRiOTc4NjczMGNlYTZjMTJkN2QyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhYmEyNjkzZWYxZDRlMjc5OTkyMWJkNTdjM2E2ODUzID0gJChgPGRpdiBpZD0iaHRtbF8wYWJhMjY5M2VmMWQ0ZTI3OTk5MjFiZDU3YzNhNjg1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+T3B5dG5vZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzgwZTM4NDI0YWZlNGI5Nzg2NzMwY2VhNmMxMmQ3ZDIuc2V0Q29udGVudChodG1sXzBhYmEyNjkzZWYxZDRlMjc5OTkyMWJkNTdjM2E2ODUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNhODdiNGU5YjZkNzRhMzZiZDI2NTg5MDczNTg0NWM2LmJpbmRQb3B1cChwb3B1cF8zODBlMzg0MjRhZmU0Yjk3ODY3MzBjZWE2YzEyZDdkMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzNhODdiNGU5YjZkNzRhMzZiZDI2NTg5MDczNTg0NWM2LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGI1MDFhY2JlODlmNDAxZTlhZDRhNDI1ZTZmNGEyZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MzE5NCwgNDQuMjY5MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzYjNmYmEyNTk1MDRhMjY5N2IxNjY1MTVkYTcyOTdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2ZGVkZTUyNzdhYjQ0NWQ5OTgyZmNmN2ZkZmNlMmRlID0gJChgPGRpdiBpZD0iaHRtbF9kNmRlZGU1Mjc3YWI0NDVkOTk4MmZjZjdmZGZjZTJkZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+TWFseSBUZXJlazwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzNiM2ZiYTI1OTUwNGEyNjk3YjE2NjUxNWRhNzI5N2Muc2V0Q29udGVudChodG1sX2Q2ZGVkZTUyNzdhYjQ0NWQ5OTgyZmNmN2ZkZmNlMmRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRiNTAxYWNiZTg5ZjQwMWU5YWQ0YTQyNWU2ZjRhMmQwLmJpbmRQb3B1cChwb3B1cF8zM2IzZmJhMjU5NTA0YTI2OTdiMTY2NTE1ZGE3Mjk3YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzRiNTAxYWNiZTg5ZjQwMWU5YWQ0YTQyNWU2ZjRhMmQwLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjdlM2JmNGY0M2E4NDM4NzgwODQzZWQxMTE3YWVhYzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MzcyMiwgNDQuMTI0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwN2VkOTJkMTc0MDQxMDZiMDA2NDM0MmU0MTRmNzBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2ZmMzODIyOWFlMzQ3ZjNiNjhhYWYxNzc2ZjhmZThkID0gJChgPGRpdiBpZD0iaHRtbF80NmZjMzgyMjlhZTM0N2YzYjY4YWFmMTc3NmY4ZmU4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S3Jhc25vYXJtZXlza29lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDdlZDkyZDE3NDA0MTA2YjAwNjQzNDJlNDE0ZjcwZS5zZXRDb250ZW50KGh0bWxfNDZmYzM4MjI5YWUzNDdmM2I2OGFhZjE3NzZmOGZlOGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjdlM2JmNGY0M2E4NDM4NzgwODQzZWQxMTE3YWVhYzIuYmluZFBvcHVwKHBvcHVwX2UwN2VkOTJkMTc0MDQxMDZiMDA2NDM0MmU0MTRmNzBlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMjdlM2JmNGY0M2E4NDM4NzgwODQzZWQxMTE3YWVhYzIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOGQ1NGQ0M2I0ZDc0Njk2YmQ0NGMwNmQ4YzA1YmM1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY0NjQ1OTUsIDQzLjQwMzA4MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxYWVmY2YzMTM2YjQ2OGRhYmFhOTI0YmIxOTZkYjY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0ZDhiYmRkNmRlNjQ5YTRhN2RmZDZmMjNmYmFmZWQxID0gJChgPGRpdiBpZD0iaHRtbF85NGQ4YmJkZDZkZTY0OWE0YTdkZmQ2ZjIzZmJhZmVkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+QXRhemh1a2lubzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTFhZWZjZjMxMzZiNDY4ZGFiYWE5MjRiYjE5NmRiNjguc2V0Q29udGVudChodG1sXzk0ZDhiYmRkNmRlNjQ5YTRhN2RmZDZmMjNmYmFmZWQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M4ZDU0ZDQzYjRkNzQ2OTZiZDQ0YzA2ZDhjMDViYzVjLmJpbmRQb3B1cChwb3B1cF9lMWFlZmNmMzEzNmI0NjhkYWJhYTkyNGJiMTk2ZGI2OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2M4ZDU0ZDQzYjRkNzQ2OTZiZDQ0YzA2ZDhjMDViYzVjLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDRiMGQ2YzRhYTNkNDcyM2I4YmZjNThiNWRlYmNjMGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDg5ODQ3LCA0My42Mzg0ODE3OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0NjQ3ZmM1OTJjNjQ5Mjk4NzVlMDJiNTQ4N2ZhNzZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzNDVmZGRlODE3NzRmNjE4MTg5Y2Q4MmQzOTgwZDBiID0gJChgPGRpdiBpZD0iaHRtbF80MzQ1ZmRkZTgxNzc0ZjYxODE4OWNkODJkMzk4MGQwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S2lzaHBlazwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQ2NDdmYzU5MmM2NDkyOTg3NWUwMmI1NDg3ZmE3NmYuc2V0Q29udGVudChodG1sXzQzNDVmZGRlODE3NzRmNjE4MTg5Y2Q4MmQzOTgwZDBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA0YjBkNmM0YWEzZDQ3MjNiOGJmYzU4YjVkZWJjYzBmLmJpbmRQb3B1cChwb3B1cF80NDY0N2ZjNTkyYzY0OTI5ODc1ZTAyYjU0ODdmYTc2ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzA0YjBkNmM0YWEzZDQ3MjNiOGJmYzU4YjVkZWJjYzBmLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDFlZmIwMjkzMDRiNDM5YzhiMDc4Y2Q1YzdhNzA3OWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDkxNjcsIDQ0LjE1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDRkZWYzOGQ4NmU5NDgzZThkNzBiYjZiYmUyMTMwMWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDdhZDhhY2IxYzFmNDdiOWEwMmZmYTlmY2UxZGFjMGUgPSAkKGA8ZGl2IGlkPSJodG1sX2Q3YWQ4YWNiMWMxZjQ3YjlhMDJmZmE5ZmNlMWRhYzBlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5TaGlrdWxleTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDRkZWYzOGQ4NmU5NDgzZThkNzBiYjZiYmUyMTMwMWUuc2V0Q29udGVudChodG1sX2Q3YWQ4YWNiMWMxZjQ3YjlhMDJmZmE5ZmNlMWRhYzBlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxZWZiMDI5MzA0YjQzOWM4YjA3OGNkNWM3YTcwNzliLmJpbmRQb3B1cChwb3B1cF9kNGRlZjM4ZDg2ZTk0ODNlOGQ3MGJiNmJiZTIxMzAxZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzAxZWZiMDI5MzA0YjQzOWM4YjA3OGNkNWM3YTcwNzliLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzdmMjNiNjlmZTdjNDYwOWJkYTQxMGQyYzQyNGE1Y2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NjEyNTM0LCA0My40MjAzMzk4OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1YzQzMWU2MjM1ZTQ4MDliMWUyZGE4NmM5MDkzNmQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1ZjQ4ZTc2MmRjNjRjNmZhZTEwMTg3MDJkNzM5ZmZmID0gJChgPGRpdiBpZD0iaHRtbF9iNWY0OGU3NjJkYzY0YzZmYWUxMDE4NzAyZDczOWZmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+SXNsYW1leTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTVjNDMxZTYyMzVlNDgwOWIxZTJkYTg2YzkwOTM2ZDMuc2V0Q29udGVudChodG1sX2I1ZjQ4ZTc2MmRjNjRjNmZhZTEwMTg3MDJkNzM5ZmZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM3ZjIzYjY5ZmU3YzQ2MDliZGE0MTBkMmM0MjRhNWNkLmJpbmRQb3B1cChwb3B1cF8xNWM0MzFlNjIzNWU0ODA5YjFlMmRhODZjOTA5MzZkMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzM3ZjIzYjY5ZmU3YzQ2MDliZGE0MTBkMmM0MjRhNWNkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmQ1ZTNmMGNhNjBmNDJkZDkwMzUzY2I5MTM1NDIyNWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NjU1OTIyLCA0NC4wMjUyMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q2NzU1OGQ3OWNhZDRkYWE4MWRmYmQ5ZjkwY2M2NDRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkMjc5OTg5N2M3ZDQyMTQ5OTBiMzhkY2FjZjUxZGY2ID0gJChgPGRpdiBpZD0iaHRtbF9jZDI3OTk4OTdjN2Q0MjE0OTkwYjM4ZGNhY2Y1MWRmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+T2t0eWFicnNrb2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q2NzU1OGQ3OWNhZDRkYWE4MWRmYmQ5ZjkwY2M2NDRkLnNldENvbnRlbnQoaHRtbF9jZDI3OTk4OTdjN2Q0MjE0OTkwYjM4ZGNhY2Y1MWRmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZDVlM2YwY2E2MGY0MmRkOTAzNTNjYjkxMzU0MjI1Zi5iaW5kUG9wdXAocG9wdXBfZDY3NTU4ZDc5Y2FkNGRhYTgxZGZiZDlmOTBjYzY0NGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl82ZDVlM2YwY2E2MGY0MmRkOTAzNTNjYjkxMzU0MjI1Zi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlOTlhN2EyYzBmZDQ3OTg4NTMyMTU3NzQ0NzU1ZDhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjcwODY3Nzk5OTk5OTk2LCA0My40OTgyNjc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81M2VkYTU4OTZlM2U0NTZjOTg2OGM4MmMyYTAyNTkxZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMzFmZDY3OTU3MGU0MDU4YWY3NzY2YjgyZGQzMWQwMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMjMxZmQ2Nzk1NzBlNDA1OGFmNzc2NmI4MmRkMzFkMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkR5Z3VseWJnZXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzZWRhNTg5NmUzZTQ1NmM5ODY4YzgyYzJhMDI1OTFmLnNldENvbnRlbnQoaHRtbF8yMzFmZDY3OTU3MGU0MDU4YWY3NzY2YjgyZGQzMWQwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZTk5YTdhMmMwZmQ0Nzk4ODUzMjE1Nzc0NDc1NWQ4ZC5iaW5kUG9wdXAocG9wdXBfNTNlZGE1ODk2ZTNlNDU2Yzk4NjhjODJjMmEwMjU5MWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9lZTk5YTdhMmMwZmQ0Nzk4ODUzMjE1Nzc0NDc1NWQ4ZC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3NjY0NDNjZDkyZjQ5YmVhNTY2MTFjY2E0OGNkNjNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjc0MTIwOSwgNDMuNTE3ODczOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y1ODIzMSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjI0ZGY3YzRjMWIzNGY4ZGE2NTg3ZWFmMGQ3MGU5YjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDA3M2I4NmVlZGRjNDM2MGExOWM1M2VhMGI4NDI1MWEgPSAkKGA8ZGl2IGlkPSJodG1sXzQwNzNiODZlZWRkYzQzNjBhMTljNTNlYTBiODQyNTFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5nLiBCYWtzYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyNGRmN2M0YzFiMzRmOGRhNjU4N2VhZjBkNzBlOWI3LnNldENvbnRlbnQoaHRtbF80MDczYjg2ZWVkZGM0MzYwYTE5YzUzZWEwYjg0MjUxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNzY2NDQzY2Q5MmY0OWJlYTU2NjExY2NhNDhjZDYzZS5iaW5kUG9wdXAocG9wdXBfZjI0ZGY3YzRjMWIzNGY4ZGE2NTg3ZWFmMGQ3MGU5YjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9mNzY2NDQzY2Q5MmY0OWJlYTU2NjExY2NhNDhjZDYzZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg4NmI1ZTY4NzE0ZDRlMjQ5ZWI3MGMwYjI5YmMzMTljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjg1MjgsIDQzLjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZTI3ZDVmYmY5MWQ0OGYyYjE3MTZkNTRiZjc2NjBmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZTU2OTIxYTEyODI0NDg1YWU1YzQ1NjhkMTczOGZhNiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmU1NjkyMWExMjgyNDQ4NWFlNWM0NTY4ZDE3MzhmYTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkJha3NhbmVub2s8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZlMjdkNWZiZjkxZDQ4ZjJiMTcxNmQ1NGJmNzY2MGY2LnNldENvbnRlbnQoaHRtbF9mZTU2OTIxYTEyODI0NDg1YWU1YzQ1NjhkMTczOGZhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ODZiNWU2ODcxNGQ0ZTI0OWViNzBjMGIyOWJjMzE5Yy5iaW5kUG9wdXAocG9wdXBfNmUyN2Q1ZmJmOTFkNDhmMmIxNzE2ZDU0YmY3NjYwZjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl84ODZiNWU2ODcxNGQ0ZTI0OWViNzBjMGIyOWJjMzE5Yy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZiMDM1YTZiOGQxYTQ5MDJiNTRkNjdjNzIzOWZkZjY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjkzNzU3NzAwMDAwMDA2LCA0My4yNzY3NDc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMjQ1YTBlNzUyZWY0ZDZhOWY0MDY0ZTQ3Y2U4MmFiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZmYxYTY1Y2RiZWI0ZmYxYTQ0ZTQwY2M0NDcwNzlmMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMGZmMWE2NWNkYmViNGZmMWE0NGU0MGNjNDQ3MDc5ZjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlZlcmtobml5IEt1cmt1emhpbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTI0NWEwZTc1MmVmNGQ2YTlmNDA2NGU0N2NlODJhYjMuc2V0Q29udGVudChodG1sXzBmZjFhNjVjZGJlYjRmZjFhNDRlNDBjYzQ0NzA3OWYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZiMDM1YTZiOGQxYTQ5MDJiNTRkNjdjNzIzOWZkZjY3LmJpbmRQb3B1cChwb3B1cF9lMjQ1YTBlNzUyZWY0ZDZhOWY0MDY0ZTQ3Y2U4MmFiMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzZiMDM1YTZiOGQxYTQ5MDJiNTRkNjdjNzIzOWZkZjY3LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDE0NDFmYjY3ZmZhNGZlYWJmMTM5NTk4YzY0M2UyMjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42OTc5MDQxLCA0NC4yMTMzMDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYmI1ZTUyYjhlODQ0MTkzYWJkOTY4YjE1MDBhMzRmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTI4NDA2ZWM5OWQ0OTJkOTRlZTA0OWFiYjc0Zjc4NyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWEyODQwNmVjOTlkNDkyZDk0ZWUwNDlhYmI3NGY3ODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlVyb3poYXlub2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiYjVlNTJiOGU4NDQxOTNhYmQ5NjhiMTUwMGEzNGY0LnNldENvbnRlbnQoaHRtbF85YTI4NDA2ZWM5OWQ0OTJkOTRlZTA0OWFiYjc0Zjc4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MTQ0MWZiNjdmZmE0ZmVhYmYxMzk1OThjNjQzZTIyOS5iaW5kUG9wdXAocG9wdXBfMWJiNWU1MmI4ZTg0NDE5M2FiZDk2OGIxNTAwYTM0ZjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80MTQ0MWZiNjdmZmE0ZmVhYmYxMzk1OThjNjQzZTIyOS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlZGFiNzJjMGU1ODQxZmM5NDY1MjE5OWFiM2NkMmRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzIyNTk2OSwgNDMuODg1MDA5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y1ODIzMSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjE1NjU5YzYzMDkxNDI2NDg5YTllOGY5YjUyMTRhYjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Q5YzM5YjE3OTk0NDE3MWIwMzhiZGI4YzRjNjU4MjcgPSAkKGA8ZGl2IGlkPSJodG1sX2NkOWMzOWIxNzk5NDQxNzFiMDM4YmRiOGM0YzY1ODI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5BbHR1ZDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjE1NjU5YzYzMDkxNDI2NDg5YTllOGY5YjUyMTRhYjYuc2V0Q29udGVudChodG1sX2NkOWMzOWIxNzk5NDQxNzFiMDM4YmRiOGM0YzY1ODI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlZGFiNzJjMGU1ODQxZmM5NDY1MjE5OWFiM2NkMmRlLmJpbmRQb3B1cChwb3B1cF82MTU2NTljNjMwOTE0MjY0ODlhOWU4ZjliNTIxNGFiNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzBlZGFiNzJjMGU1ODQxZmM5NDY1MjE5OWFiM2NkMmRlLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDk1NmJlODQ1M2NhNDRjYmFiNDlhOTFmMGZhZjRiOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43MjI5MzEsIDQzLjUyMTY0OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTgyMzEiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiNmQ3MjA4NjRjZjQ2NzQ4YzE1Y2NiNTNjZmU1NTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkMThlM2JlZDY3OTQ0M2E4NjgyZDdiNjI3ODg5ZTc2ID0gJChgPGRpdiBpZD0iaHRtbF9mZDE4ZTNiZWQ2Nzk0NDNhODY4MmQ3YjYyNzg4OWU3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+UHN5Y2hva2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiNmQ3MjA4NjRjZjQ2NzQ4YzE1Y2NiNTNjZmU1NTUzLnNldENvbnRlbnQoaHRtbF9mZDE4ZTNiZWQ2Nzk0NDNhODY4MmQ3YjYyNzg4OWU3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OTU2YmU4NDUzY2E0NGNiYWI0OWE5MWYwZmFmNGI4ZS5iaW5kUG9wdXAocG9wdXBfOGI2ZDcyMDg2NGNmNDY3NDhjMTVjY2I1M2NmZTU1NTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80OTU2YmU4NDUzY2E0NGNiYWI0OWE5MWYwZmFmNGI4ZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkYjU0ZjQ3YmEwZTQzMGQ5MmYxNmFmMmI0NWY5ZDhiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzM0MTQ4OSwgNDMuMDM3MDI4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y1ODIzMSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGIwMGRhODRlNTUwNGQ0Zjk2YjRiN2NiYWYwZDEzNmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGY2NWU1Mzk3ZGZiNGJkN2IwNjc0YTA5M2YwZDNkYTAgPSAkKGA8ZGl2IGlkPSJodG1sXzhmNjVlNTM5N2RmYjRiZDdiMDY3NGEwOTNmMGQzZGEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5LYW1lbm5vbW9zdHNrb2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiMDBkYTg0ZTU1MDRkNGY5NmI0YjdjYmFmMGQxMzZiLnNldENvbnRlbnQoaHRtbF84ZjY1ZTUzOTdkZmI0YmQ3YjA2NzRhMDkzZjBkM2RhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZGI1NGY0N2JhMGU0MzBkOTJmMTZhZjJiNDVmOWQ4Yi5iaW5kUG9wdXAocG9wdXBfOGIwMGRhODRlNTUwNGQ0Zjk2YjRiN2NiYWYwZDEzNmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9mZGI1NGY0N2JhMGU0MzBkOTJmMTZhZjJiNDVmOWQ4Yi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjNDM5YzQwMjgzMzQ1NWE5NjUyNjk3OWE3MGE1MjE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzQwMzI1ODk5OTk5OTk1LCA0My4xOTMyNjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODIxYTUzZDRhYWM0NTAzYTYzNWVmNmJmYmU5OWRhNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOWYxMzE0Y2M2YzY0NTgxYmUzOTYzOGM4NTIzOTMxZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjlmMTMxNGNjNmM2NDU4MWJlMzk2MzhjODUyMzkzMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlNhcm1ha292bzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTgyMWE1M2Q0YWFjNDUwM2E2MzVlZjZiZmJlOTlkYTUuc2V0Q29udGVudChodG1sX2Y5ZjEzMTRjYzZjNjQ1ODFiZTM5NjM4Yzg1MjM5MzFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFjNDM5YzQwMjgzMzQ1NWE5NjUyNjk3OWE3MGE1MjE1LmJpbmRQb3B1cChwb3B1cF85ODIxYTUzZDRhYWM0NTAzYTYzNWVmNmJmYmU5OWRhNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzFjNDM5YzQwMjgzMzQ1NWE5NjUyNjk3OWE3MGE1MjE1LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2E1NDAwMjMzZmJiNDBjMTg0ZjcwODE5NDUwMTMzOTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NDQxNTQ2LCA0My4zNTEwMTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNGI4NTRhMzhhZGQ0ZGNiOGMzMDc1YWExOWVmN2JkNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZmZhMjIzNzRhYjU0N2MxYTE0MDJkNDliNmY3OGEyOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZmZmYTIyMzc0YWI1NDdjMWExNDAyZDQ5YjZmNzhhMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPk5pemhueSBLdXJrdXpoaW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0Yjg1NGEzOGFkZDRkY2I4YzMwNzVhYTE5ZWY3YmQ0LnNldENvbnRlbnQoaHRtbF9mZmZhMjIzNzRhYjU0N2MxYTE0MDJkNDliNmY3OGEyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYTU0MDAyMzNmYmI0MGMxODRmNzA4MTk0NTAxMzM5NS5iaW5kUG9wdXAocG9wdXBfZTRiODU0YTM4YWRkNGRjYjhjMzA3NWFhMTllZjdiZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9jYTU0MDAyMzNmYmI0MGMxODRmNzA4MTk0NTAxMzM5NS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3YTc4N2ZkMjkxMTRlYjdiNjk1ZWMxOWVlMGY4Y2JlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzU3NDcwMzk5OTk5OTk1LCA0My43MTU2ODk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMDc0MWU1MTg2ZDI0M2VmYmZiNTgxYTg0MDU2M2FkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOWRiYzY0MjQyYjM0YTQ5YTBlYjg0N2I0YTVkYzQyMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzlkYmM2NDI0MmIzNGE0OWEwZWI4NDdiNGE1ZGM0MjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlBzeW5zaG9rbzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDA3NDFlNTE4NmQyNDNlZmJmYjU4MWE4NDA1NjNhZGIuc2V0Q29udGVudChodG1sX2M5ZGJjNjQyNDJiMzRhNDlhMGViODQ3YjRhNWRjNDIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ3YTc4N2ZkMjkxMTRlYjdiNjk1ZWMxOWVlMGY4Y2JlLmJpbmRQb3B1cChwb3B1cF9kMDc0MWU1MTg2ZDI0M2VmYmZiNTgxYTg0MDU2M2FkYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzQ3YTc4N2ZkMjkxMTRlYjdiNjk1ZWMxOWVlMGY4Y2JlLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjdiNGNhZWQ2OWNkNDMyMWE3NzhkNTEzYTY2OWIxMGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NzY4NDYxLCA0My4yNjAwMTQ4OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTgyMzEiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzExMTEzZWRlNTE2YTQwYTE5ZjIxZmE4MzJjZDNlOTU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjYzFjMDA0ODU5NDRjOTBiMTQ5NjJjZjg1YThjYWNiID0gJChgPGRpdiBpZD0iaHRtbF9lY2MxYzAwNDg1OTQ0YzkwYjE0OTYyY2Y4NWE4Y2FjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S2FtbHl1a292bzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTExMTNlZGU1MTZhNDBhMTlmMjFmYTgzMmNkM2U5NTUuc2V0Q29udGVudChodG1sX2VjYzFjMDA0ODU5NDRjOTBiMTQ5NjJjZjg1YThjYWNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI3YjRjYWVkNjljZDQzMjFhNzc4ZDUxM2E2NjliMTBhLmJpbmRQb3B1cChwb3B1cF8xMTExM2VkZTUxNmE0MGExOWYyMWZhODMyY2QzZTk1NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzI3YjRjYWVkNjljZDQzMjFhNzc4ZDUxM2E2NjliMTBhLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzE4MDU1YTM0Yjk0NDA3NmI5NjA0MTVkY2E0NGFhM2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NzczODU1LCA0My40NDQyNDg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWYzMjlkMjI0ODU0ZjZhOTRmMzI3OTg0NDFiZGM2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYmE2MDljZGUyMDA0N2M0YTdjYzY2MWViY2ZhZTIyOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWJhNjA5Y2RlMjAwNDdjNGE3Y2M2NjFlYmNmYWUyMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkt1YmEtVGFiYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2VmMzI5ZDIyNDg1NGY2YTk0ZjMyNzk4NDQxYmRjNjAuc2V0Q29udGVudChodG1sX2ViYTYwOWNkZTIwMDQ3YzRhN2NjNjYxZWJjZmFlMjI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MxODA1NWEzNGI5NDQwNzZiOTYwNDE1ZGNhNDRhYTNhLmJpbmRQb3B1cChwb3B1cF83ZWYzMjlkMjI0ODU0ZjZhOTRmMzI3OTg0NDFiZGM2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2MxODA1NWEzNGI5NDQwNzZiOTYwNDE1ZGNhNDRhYTNhLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzllMzQxNDY5M2JiNDI5YWJiOWVkNGI2ZThhZWRlNjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43OTg3MTE0OTk5OTk5OTYsIDQzLjYzOTM3NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTgyMzEiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhYWZiNDNlNTE2MjQ4NWVhZWNjMzY3ZDExNzljYjRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAwZDVkYmQ4ZDA4MjQwMTE4ODllZTNmNDY5MjZmYzk5ID0gJChgPGRpdiBpZD0iaHRtbF8wMGQ1ZGJkOGQwODI0MDExODg5ZWUzZjQ2OTI2ZmM5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S3JlbWVuY2h1Zy1Lb25zdGFudGlub3Zza29lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YWFmYjQzZTUxNjI0ODVlYWVjYzM2N2QxMTc5Y2I0ZS5zZXRDb250ZW50KGh0bWxfMDBkNWRiZDhkMDgyNDAxMTg4OWVlM2Y0NjkyNmZjOTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzllMzQxNDY5M2JiNDI5YWJiOWVkNGI2ZThhZWRlNjEuYmluZFBvcHVwKHBvcHVwXzlhYWZiNDNlNTE2MjQ4NWVhZWNjMzY3ZDExNzljYjRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMzllMzQxNDY5M2JiNDI5YWJiOWVkNGI2ZThhZWRlNjEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTljY2RkNjYxODk0ZDdiOTQzZGNiZDA1N2E3ZTQxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgwMjIyNTc5OTk5OTk5NSwgNDMuMTQ2MDU2MDk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOWNiMTE0NGU3NDE0Y2IxOWY1ODQ0NjUwNWJhZjg4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOWYwY2FjZDVjNzk0ZWNmYjZkOWUxMTkyYThmMjQ0ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjlmMGNhY2Q1Yzc5NGVjZmI2ZDllMTE5MmE4ZjI0NGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlNvdmtob3pub2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5Y2IxMTQ0ZTc0MTRjYjE5ZjU4NDQ2NTA1YmFmODhiLnNldENvbnRlbnQoaHRtbF9mOWYwY2FjZDVjNzk0ZWNmYjZkOWUxMTkyYThmMjQ0ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYTljY2RkNjYxODk0ZDdiOTQzZGNiZDA1N2E3ZTQxNi5iaW5kUG9wdXAocG9wdXBfMTljYjExNDRlNzQxNGNiMTlmNTg0NDY1MDViYWY4OGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yYTljY2RkNjYxODk0ZDdiOTQzZGNiZDA1N2E3ZTQxNi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxY2IyNzc0YmNiNDQwNzM4YTVmZmQyZjhiMWNkYjZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODAzNDQ1NiwgNDMuNzcwNjE0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y1ODIzMSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzI5ZTk5ZGFiNWZjNGU0ZWExOTQ1YTg0MzI0ZDVkOWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmVlNzU5MjQ2MTgwNDZkNmFjZjAzZjkzZDI4ZTUzYzQgPSAkKGA8ZGl2IGlkPSJodG1sXzJlZTc1OTI0NjE4MDQ2ZDZhY2YwM2Y5M2QyOGU1M2M0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5LYXJhZ2FjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzI5ZTk5ZGFiNWZjNGU0ZWExOTQ1YTg0MzI0ZDVkOWMuc2V0Q29udGVudChodG1sXzJlZTc1OTI0NjE4MDQ2ZDZhY2YwM2Y5M2QyOGU1M2M0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxY2IyNzc0YmNiNDQwNzM4YTVmZmQyZjhiMWNkYjZiLmJpbmRQb3B1cChwb3B1cF9jMjllOTlkYWI1ZmM0ZTRlYTE5NDVhODQzMjRkNWQ5YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzUxY2IyNzc0YmNiNDQwNzM4YTVmZmQyZjhiMWNkYjZiLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2M2MzkyOWM2ZWNkNGVmMDhkZDUwZWYyNmQxMDUyYzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MjI5Mzc0LCA0My4xMTE0MzQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNmY1YzM2ZjFiZmY0NGY1YjY3NzUxZGRiOWUyNjNkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZDMxZDFiMDg5MmM0MjNiOGM1M2VhZWUwMzAxMzE0MyA9ICQoYDxkaXYgaWQ9Imh0bWxfM2QzMWQxYjA4OTJjNDIzYjhjNTNlYWVlMDMwMTMxNDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkR6aGVuYWw8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2ZjVjMzZmMWJmZjQ0ZjViNjc3NTFkZGI5ZTI2M2Q4LnNldENvbnRlbnQoaHRtbF8zZDMxZDFiMDg5MmM0MjNiOGM1M2VhZWUwMzAxMzE0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YzYzOTI5YzZlY2Q0ZWYwOGRkNTBlZjI2ZDEwNTJjMS5iaW5kUG9wdXAocG9wdXBfMTZmNWMzNmYxYmZmNDRmNWI2Nzc1MWRkYjllMjYzZDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl83YzYzOTI5YzZlY2Q0ZWYwOGRkNTBlZjI2ZDEwNTJjMS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5YWZhYzJlMTNmMTRkYjNiN2VhMGNlYTQwN2E1Y2Q5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODM1NjMxLCA0My4xNTMxMTY0OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTgyMzEiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyMTQxNzAxZWM5YjRmZThiYTVmNTM3ODJkNWJhMzhiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAzNDVjOGNiZGM1ZTRlM2NiMTY1ZGZhZTMyODQ3MTMxID0gJChgPGRpdiBpZD0iaHRtbF8wMzQ1YzhjYmRjNWU0ZTNjYjE2NWRmYWUzMjg0NzEzMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+WmFsdWtvZGVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMjE0MTcwMWVjOWI0ZmU4YmE1ZjUzNzgyZDViYTM4Yi5zZXRDb250ZW50KGh0bWxfMDM0NWM4Y2JkYzVlNGUzY2IxNjVkZmFlMzI4NDcxMzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTlhZmFjMmUxM2YxNGRiM2I3ZWEwY2VhNDA3YTVjZDkuYmluZFBvcHVwKHBvcHVwXzIyMTQxNzAxZWM5YjRmZThiYTVmNTM3ODJkNWJhMzhiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYTlhZmFjMmUxM2YxNGRiM2I3ZWEwY2VhNDA3YTVjZDkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMzJkNGJkZTg4OTY0MWVlODIzNGE0N2FkZTZkYjI1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzNjY0NjEsIDQzLjYwNzkxODcwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzkxMWViNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjE3OGE0MWZmYjQyNDE2NWEzY2VjZWYxYmQyODMwN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDA4NjRmMTM1YzUzNDc1ODkyNTRmODRlNDBhNmViMTcgPSAkKGA8ZGl2IGlkPSJodG1sXzAwODY0ZjEzNWM1MzQ3NTg5MjU0Zjg0ZTQwYTZlYjE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5Qc3lraHVyZXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxNzhhNDFmZmI0MjQxNjVhM2NlY2VmMWJkMjgzMDdlLnNldENvbnRlbnQoaHRtbF8wMDg2NGYxMzVjNTM0NzU4OTI1NGY4NGU0MGE2ZWIxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMzJkNGJkZTg4OTY0MWVlODIzNGE0N2FkZTZkYjI1Yy5iaW5kUG9wdXAocG9wdXBfMjE3OGE0MWZmYjQyNDE2NWEzY2VjZWYxYmQyODMwN2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kMzJkNGJkZTg4OTY0MWVlODIzNGE0N2FkZTZkYjI1Yy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0NmRmZTg0YjljNDRlY2NiMjAzMGE4YTg2MjEyMjEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODQxNjEyNSwgNDMuMjA2Mzk0MjAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjOTExZWI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZTA3MjU1NDFlMTg0OWZjOWQ5ZWI5YjgzOGM2MjhlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGU5YjdmODc3NmU0MGU5YTk2YjMzN2ZhMTJmNGI5ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjhlOWI3Zjg3NzZlNDBlOWE5NmIzMzdmYTEyZjRiOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlpvbHNrb3llPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZTA3MjU1NDFlMTg0OWZjOWQ5ZWI5YjgzOGM2MjhlZS5zZXRDb250ZW50KGh0bWxfNjhlOWI3Zjg3NzZlNDBlOWE5NmIzMzdmYTEyZjRiOWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzQ2ZGZlODRiOWM0NGVjY2IyMDMwYThhODYyMTIyMTIuYmluZFBvcHVwKHBvcHVwX2NlMDcyNTU0MWUxODQ5ZmM5ZDllYjliODM4YzYyOGVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYzQ2ZGZlODRiOWM0NGVjY2IyMDMwYThhODYyMTIyMTIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOTMwZmFlMmE1NTg0NThhYjM3YTgwYTIwZDRiNDM3NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg2MDI4NDcsIDQzLjI1MTQwNDc5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzkxMWViNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjQzZTc1M2Q5NjQ5NDRhMmExNGFhYTc0NzY0MjAzYWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjhjZGNlY2ZhMWQ3NDRlNDk4NzdjODNiN2FjOTliMzQgPSAkKGA8ZGl2IGlkPSJodG1sX2I4Y2RjZWNmYTFkNzQ0ZTQ5ODc3YzgzYjdhYzk5YjM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5Qc3luYWRha2hhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDNlNzUzZDk2NDk0NGEyYTE0YWFhNzQ3NjQyMDNhYS5zZXRDb250ZW50KGh0bWxfYjhjZGNlY2ZhMWQ3NDRlNDk4NzdjODNiN2FjOTliMzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTkzMGZhZTJhNTU4NDU4YWIzN2E4MGEyMGQ0YjQzNzcuYmluZFBvcHVwKHBvcHVwX2Y0M2U3NTNkOTY0OTQ0YTJhMTRhYWE3NDc2NDIwM2FhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZTkzMGZhZTJhNTU4NDU4YWIzN2E4MGEyMGQ0YjQzNzcuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMDFhMDg1NGY4Yzc0NTljOTRjNGJkNTJhMTU0N2U0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg3ODgzNDksIDQzLjEwNzQ4MTg5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQ2ZjBmMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWRkNjk3NDM4MWViNDBkYjgwN2ZhZDc0NjM4MGMwZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDEyNTY1MDFkNWM5NDBmZjhmODI3MTUwZDkyMDcyMDEgPSAkKGA8ZGl2IGlkPSJodG1sXzAxMjU2NTAxZDVjOTQwZmY4ZjgyNzE1MGQ5MjA3MjAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5TaG9yZGFrb3ZvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZGQ2OTc0MzgxZWI0MGRiODA3ZmFkNzQ2MzgwYzBmZS5zZXRDb250ZW50KGh0bWxfMDEyNTY1MDFkNWM5NDBmZjhmODI3MTUwZDkyMDcyMDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjAxYTA4NTRmOGM3NDU5Yzk0YzRiZDUyYTE1NDdlNDMuYmluZFBvcHVwKHBvcHVwX2VkZDY5NzQzODFlYjQwZGI4MDdmYWQ3NDYzODBjMGZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMjAxYTA4NTRmOGM3NDU5Yzk0YzRiZDUyYTE1NDdlNDMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yY2JjNjNiZGQ0MTc0M2VhOGRlZTczNGIxYmQ0MTMyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI0NjExMSwgNDEuNzQxMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDZmMGYwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMmIzNDc5NjIxN2Y0OTgwOWVjMWRmZjgzNGY5ZDUzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOTA0Njc1NGIyYjg0ZTg2OTY4ZmNlMGFlN2FhYmQ2OCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjkwNDY3NTRiMmI4NGU4Njk2OGZjZTBhZTdhYWJkNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkJlc2xlbmV5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMmIzNDc5NjIxN2Y0OTgwOWVjMWRmZjgzNGY5ZDUzYy5zZXRDb250ZW50KGh0bWxfYjkwNDY3NTRiMmI4NGU4Njk2OGZjZTBhZTdhYWJkNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmNiYzYzYmRkNDE3NDNlYThkZWU3MzRiMWJkNDEzMmIuYmluZFBvcHVwKHBvcHVwX2YyYjM0Nzk2MjE3ZjQ5ODA5ZWMxZGZmODM0ZjlkNTNjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMmNiYzYzYmRkNDE3NDNlYThkZWU3MzRiMWJkNDEzMmIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80M2MyOGViNDMxOTI0YWY2OGMwNTk2NGVmNmQ1M2Y5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjMwMDc3NzAwMDAwMDAwNCwgNDEuNzQyNjkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDZmMGYwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MzFkYTI0NDA5MDU0YTg5ODRhMzlhOTBiMDQ3ZDg3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wY2RlZGYzOTE2MzU0OWJlOWM3YTYwNWMwOTdhYzMxYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMGNkZWRmMzkxNjM1NDliZTljN2E2MDVjMDk3YWMzMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlZha28tWmhpbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzMWRhMjQ0MDkwNTRhODk4NGEzOWE5MGIwNDdkODc3LnNldENvbnRlbnQoaHRtbF8wY2RlZGYzOTE2MzU0OWJlOWM3YTYwNWMwOTdhYzMxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80M2MyOGViNDMxOTI0YWY2OGMwNTk2NGVmNmQ1M2Y5My5iaW5kUG9wdXAocG9wdXBfNDMxZGEyNDQwOTA1NGE4OTg0YTM5YTkwYjA0N2Q4NzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80M2MyOGViNDMxOTI0YWY2OGMwNTk2NGVmNmQ1M2Y5My5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiNmY1YWQ2MmM1YjQ2ODI5MTQ5ZWVmYzFlMjZhYjIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODM5MTY2OTk5OTk5OTk2LCA0MS40ODYxMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0NmYwZjAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1ODEyZjU0NmE0ODRlMDc5MjM4NTYwODViZjAxYWZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2ZjY3ODUyZTA1MDQyNzU5YTYxYjI3NTA0OTBjZTY2ID0gJChgPGRpdiBpZD0iaHRtbF9jNmY2Nzg1MmUwNTA0Mjc1OWE2MWIyNzUwNDkwY2U2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S3VyZ29rb3Zza2l5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTgxMmY1NDZhNDg0ZTA3OTIzODU2MDg1YmYwMWFmZi5zZXRDb250ZW50KGh0bWxfYzZmNjc4NTJlMDUwNDI3NTlhNjFiMjc1MDQ5MGNlNjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmI2ZjVhZDYyYzViNDY4MjkxNDllZWZjMWUyNmFiMjEuYmluZFBvcHVwKHBvcHVwXzM1ODEyZjU0NmE0ODRlMDc5MjM4NTYwODViZjAxYWZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMmI2ZjVhZDYyYzViNDY4MjkxNDllZWZjMWUyNmFiMjEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODc2YjdlNDQwMDA0MTQ1OTVmNTMyMDI3MDQyMzc0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg2MTUyLCA0MS4zMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0NmYwZjAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3NDNjMTg5NzFhZjRjODdhMGQ3ZDU0NzNiODZlM2VhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5Y2QwNGU0NmIxMzRhMTg4ZTdjZTdiM2I1ZWU3YjQ5ID0gJChgPGRpdiBpZD0iaHRtbF9mOWNkMDRlNDZiMTM0YTE4OGU3Y2U3YjNiNWVlN2I0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S29ub2tvdm88L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE3NDNjMTg5NzFhZjRjODdhMGQ3ZDU0NzNiODZlM2VhLnNldENvbnRlbnQoaHRtbF9mOWNkMDRlNDZiMTM0YTE4OGU3Y2U3YjNiNWVlN2I0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wODc2YjdlNDQwMDA0MTQ1OTVmNTMyMDI3MDQyMzc0Zi5iaW5kUG9wdXAocG9wdXBfMTc0M2MxODk3MWFmNGM4N2EwZDdkNTQ3M2I4NmUzZWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8wODc2YjdlNDQwMDA0MTQ1OTVmNTMyMDI3MDQyMzc0Zi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxMjMxOWNmOTVmZDQ3OTdiM2U4YmRmZWU1YWZmMDg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNjMxMTMyLCA0MC4wNzI2ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0NmYwZjAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkZGRkMDNkNzY4ZjQxNzA5NzM3NDBiMzc2YTY4MGE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVlN2M1MzQwZGM1YTQ2MGY4YTZkMjJhMjU2ZDdiMjNkID0gJChgPGRpdiBpZD0iaHRtbF81ZTdjNTM0MGRjNWE0NjBmOGE2ZDIyYTI1NmQ3YjIzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+WmFwYWRueXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFkZGRkMDNkNzY4ZjQxNzA5NzM3NDBiMzc2YTY4MGE3LnNldENvbnRlbnQoaHRtbF81ZTdjNTM0MGRjNWE0NjBmOGE2ZDIyYTI1NmQ3YjIzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMTIzMTljZjk1ZmQ0Nzk3YjNlOGJkZmVlNWFmZjA4NS5iaW5kUG9wdXAocG9wdXBfMWRkZGQwM2Q3NjhmNDE3MDk3Mzc0MGIzNzZhNjgwYTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9jMTIzMTljZjk1ZmQ0Nzk3YjNlOGJkZmVlNWFmZjA4NS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1Y2Y0ZjA2MjRiNTRkZDlhNDM0ZWExOGU3NzAwNjUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODM1LCAzOS4yMDgwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0NmYwZjAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1ZTYwZWJhMDZhYTQ5YjA4NDlmMzE1YWZjMWFkYmYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0YjQ5Y2I2OGI1MTQwOTA4NDk5M2ExZjI4YWY1ZDNlID0gJChgPGRpdiBpZD0iaHRtbF85NGI0OWNiNjhiNTE0MDkwODQ5OTNhMWYyOGFmNWQzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UHNla3VwczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzVlNjBlYmEwNmFhNDliMDg0OWYzMTVhZmMxYWRiZjMuc2V0Q29udGVudChodG1sXzk0YjQ5Y2I2OGI1MTQwOTA4NDk5M2ExZjI4YWY1ZDNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I1Y2Y0ZjA2MjRiNTRkZDlhNDM0ZWExOGU3NzAwNjUwLmJpbmRQb3B1cChwb3B1cF9jNWU2MGViYTA2YWE0OWIwODQ5ZjMxNWFmYzFhZGJmMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2I1Y2Y0ZjA2MjRiNTRkZDlhNDM0ZWExOGU3NzAwNjUwLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDEyZWQ4MzVjZTY3NDQ2OGE5MDFhYzNiNmVhYWNlYTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NDUsIDM5LjQ2Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQ2ZjBmMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjY4MzNhZDg4ZWYyNGZkYzkwMjQzOGQ3ZDgzNzUwYzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWIzYzU0ODY5NTgxNDEzNDhiNzNjMDZlOWYwOGYwZDUgPSAkKGA8ZGl2IGlkPSJodG1sX2FiM2M1NDg2OTU4MTQxMzQ4YjczYzA2ZTlmMDhmMGQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5Bc3Nva29sYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2ODMzYWQ4OGVmMjRmZGM5MDI0MzhkN2Q4Mzc1MGMwLnNldENvbnRlbnQoaHRtbF9hYjNjNTQ4Njk1ODE0MTM0OGI3M2MwNmU5ZjA4ZjBkNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMTJlZDgzNWNlNjc0NDY4YTkwMWFjM2I2ZWFhY2VhOS5iaW5kUG9wdXAocG9wdXBfZjY4MzNhZDg4ZWYyNGZkYzkwMjQzOGQ3ZDgzNzUwYzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8wMTJlZDgzNWNlNjc0NDY4YTkwMWFjM2I2ZWFhY2VhOS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI4MTdkZDNlNjBiZTQ4MDliZmM5Y2VhYjAwYjdhNWVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODY2NjY3LCAzOS4yODMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkYjM4NzcwODA1NjQwMTRiODgyNTcwMTE5NTZhZmU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzMzVmOTg5NjZhNzRmNTM4OGM0YjdlNWE5YjdiZjBmID0gJChgPGRpdiBpZD0iaHRtbF82MzM1Zjk4OTY2YTc0ZjUzODhjNGI3ZTVhOWI3YmYwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+Vm9jaGVwc2hpeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2RiMzg3NzA4MDU2NDAxNGI4ODI1NzAxMTk1NmFmZTcuc2V0Q29udGVudChodG1sXzYzMzVmOTg5NjZhNzRmNTM4OGM0YjdlNWE5YjdiZjBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI4MTdkZDNlNjBiZTQ4MDliZmM5Y2VhYjAwYjdhNWVhLmJpbmRQb3B1cChwb3B1cF83ZGIzODc3MDgwNTY0MDE0Yjg4MjU3MDExOTU2YWZlNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzI4MTdkZDNlNjBiZTQ4MDliZmM5Y2VhYjAwYjdhNWVhLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDZkNWY1OTRjODg3NDRiNDk2M2RjZWU4MDU1ZDg4OTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NzM5MDk5OTk5OTk5OTUsIDM5LjE1MzU1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMzJlNiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWVhZTdlNDg1MDBlNGFmNGEwZjEzMjA5YjU1MTYzNTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTEyOTE2MWJhYmQxNGYzYTlkMDMxMzU2MjU0Nzg2ZTQgPSAkKGA8ZGl2IGlkPSJodG1sX2UxMjkxNjFiYWJkMTRmM2E5ZDAzMTM1NjI1NDc4NmU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5DaGV0dWs8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlYWU3ZTQ4NTAwZTRhZjRhMGYxMzIwOWI1NTE2MzUzLnNldENvbnRlbnQoaHRtbF9lMTI5MTYxYmFiZDE0ZjNhOWQwMzEzNTYyNTQ3ODZlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNmQ1ZjU5NGM4ODc0NGI0OTYzZGNlZTgwNTVkODg5Ni5iaW5kUG9wdXAocG9wdXBfNWVhZTdlNDg1MDBlNGFmNGEwZjEzMjA5YjU1MTYzNTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kNmQ1ZjU5NGM4ODc0NGI0OTYzZGNlZTgwNTVkODg5Ni5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjZGI4OWM1YmY3MDRmZDdhZmQ1ODdhMzc0YzVmYTYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODc0NzIyLCAzOS40NTc3NzgwMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmZTdjNTFmY2UwMzQyZmRhYjI5YzIxM2ZiNTI3Yzc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3ZWRkZmNjOGYzODQ4YWVhYmQ0NzVmNTMxMjViNzIxID0gJChgPGRpdiBpZD0iaHRtbF82N2VkZGZjYzhmMzg0OGFlYWJkNDc1ZjUzMTI1YjcyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S3Jhc25veWU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmZTdjNTFmY2UwMzQyZmRhYjI5YzIxM2ZiNTI3Yzc0LnNldENvbnRlbnQoaHRtbF82N2VkZGZjYzhmMzg0OGFlYWJkNDc1ZjUzMTI1YjcyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xY2RiODljNWJmNzA0ZmQ3YWZkNTg3YTM3NGM1ZmE2Mi5iaW5kUG9wdXAocG9wdXBfMGZlN2M1MWZjZTAzNDJmZGFiMjljMjEzZmI1MjdjNzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8xY2RiODljNWJmNzA0ZmQ3YWZkNTg3YTM3NGM1ZmE2Mi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiZDdhNThkNGFmZjRlMGViYTUyYmJkNDg0MGQyZGYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODgzMDU1OTk5OTk5OTk2LCAzOS4zODMwNTU5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZiYjkxZGI0YjQ5YTRjNzI4Y2I4OGUxYTBmYTc2ZGRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUyNGZkZmM2ZGE4MTRmY2JiNTU4NjE3YTA5ZWZjY2MxID0gJChgPGRpdiBpZD0iaHRtbF81MjRmZGZjNmRhODE0ZmNiYjU1ODYxN2EwOWVmY2NjMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UG9uZXpodWtheTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJiOTFkYjRiNDlhNGM3MjhjYjg4ZTFhMGZhNzZkZGYuc2V0Q29udGVudChodG1sXzUyNGZkZmM2ZGE4MTRmY2JiNTU4NjE3YTA5ZWZjY2MxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhiZDdhNThkNGFmZjRlMGViYTUyYmJkNDg0MGQyZGYwLmJpbmRQb3B1cChwb3B1cF82YmI5MWRiNGI0OWE0YzcyOGNiODhlMWEwZmE3NmRkZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzhiZDdhNThkNGFmZjRlMGViYTUyYmJkNDg0MGQyZGYwLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDM4YTZlNzE1Y2QxNGY4ZTgwY2VhYmJlMTBmNjgwZjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44ODM5NDIsIDM5LjA2NjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMzJlNiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmNjNDRmZWQ2OWZiNDgyODk4YWFjMWQ3OTViYzA5NWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjIxMzYwMDAwOTA2NDRkMjgwOWY0YTc2MjlkNTE3MDUgPSAkKGA8ZGl2IGlkPSJodG1sX2IyMTM2MDAwMDkwNjQ0ZDI4MDlmNGE3NjI5ZDUxNzA1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5TaGVuZHpoaXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZjYzQ0ZmVkNjlmYjQ4Mjg5OGFhYzFkNzk1YmMwOTViLnNldENvbnRlbnQoaHRtbF9iMjEzNjAwMDA5MDY0NGQyODA5ZjRhNzYyOWQ1MTcwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMzhhNmU3MTVjZDE0ZjhlODBjZWFiYmUxMGY2ODBmMy5iaW5kUG9wdXAocG9wdXBfZmNjNDRmZWQ2OWZiNDgyODk4YWFjMWQ3OTViYzA5NWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kMzhhNmU3MTVjZDE0ZjhlODBjZWFiYmUxMGY2ODBmMy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmMTM5MDA2NzQ0OTRhYjJhYjEyNzM3MzZiM2YyMzk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODg3Nzc4MDAwMDAwMDA0LCAzOS4yNjYxMTA5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0NDMxYjgzZjFlZjRhMjU4YjhmNzM5OTFmZmMwODczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhMDU0OGI3MGY1MzRiMDhhNDY2OTc4OTYyNDMyMzI2ID0gJChgPGRpdiBpZD0iaHRtbF9lYTA1NDhiNzBmNTM0YjA4YTQ2Njk3ODk2MjQzMjMyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UGNoZWdhdGx1a2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNDQzMWI4M2YxZWY0YTI1OGI4ZjczOTkxZmZjMDg3My5zZXRDb250ZW50KGh0bWxfZWEwNTQ4YjcwZjUzNGIwOGE0NjY5Nzg5NjI0MzIzMjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2YxMzkwMDY3NDQ5NGFiMmFiMTI3MzczNmIzZjIzOTQuYmluZFBvcHVwKHBvcHVwXzA0NDMxYjgzZjFlZjRhMjU4YjhmNzM5OTFmZmMwODczKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfY2YxMzkwMDY3NDQ5NGFiMmFiMTI3MzczNmIzZjIzOTQuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMzRiNzEwYTVmZjg0Mzg2OWY0MDA2YjQ3NGNhZThlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg5MjUyNywgMzkuMjMzNjg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjAzMmU2IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNjA0MDc0MjJmY2Y0Y2M5YmNmM2E3ZDFiMTA5NTIyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMWVmZDU2YTE4MWM0ODM3Yjc1NjllZmEzNzk5YjAwZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzFlZmQ1NmExODFjNDgzN2I3NTY5ZWZhMzc5OWIwMGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkdhdGx1a2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNjA0MDc0MjJmY2Y0Y2M5YmNmM2E3ZDFiMTA5NTIyYy5zZXRDb250ZW50KGh0bWxfYzFlZmQ1NmExODFjNDgzN2I3NTY5ZWZhMzc5OWIwMGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTM0YjcxMGE1ZmY4NDM4NjlmNDAwNmI0NzRjYWU4ZTYuYmluZFBvcHVwKHBvcHVwX2E2MDQwNzQyMmZjZjRjYzliY2YzYTdkMWIxMDk1MjJjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZTM0YjcxMGE1ZmY4NDM4NjlmNDAwNmI0NzRjYWU4ZTYuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMmEzODQ1NTQ0NTg0ZjRlOTFkNjkyN2QzMThlMjBiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkwNSwgMzkuNDE3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMzJlNiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGQ2OTA2NmY1NjdkNGQ2NmI4MzcyMjY1NmFiZmZhZjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmFmMWExYzczYTNjNGE5NjlhZWM5NjU3NmI3ZmYwYzcgPSAkKGA8ZGl2IGlkPSJodG1sXzJhZjFhMWM3M2EzYzRhOTY5YWVjOTY1NzZiN2ZmMGM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5OZXNodWtheTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQ2OTA2NmY1NjdkNGQ2NmI4MzcyMjY1NmFiZmZhZjkuc2V0Q29udGVudChodG1sXzJhZjFhMWM3M2EzYzRhOTY5YWVjOTY1NzZiN2ZmMGM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MyYTM4NDU1NDQ1ODRmNGU5MWQ2OTI3ZDMxOGUyMGI1LmJpbmRQb3B1cChwb3B1cF84ZDY5MDY2ZjU2N2Q0ZDY2YjgzNzIyNjU2YWJmZmFmOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2MyYTM4NDU1NDQ1ODRmNGU5MWQ2OTI3ZDMxOGUyMGI1LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmYwMjE0ODMwZjUxNDg0ZGE2NzNjOTUxYTQ5N2RiODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MjI1LCAzOS4zODI3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxYzU1ODFiOWQ5MjRhNjY4MDcwZGQ2MTQ0YzIwODQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxOGY0YTYzNjQwMjRkNDJiMGQxNWE2MWRkZThiOTE3ID0gJChgPGRpdiBpZD0iaHRtbF9kMThmNGE2MzY0MDI0ZDQyYjBkMTVhNjFkZGU4YjkxNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+TmFjaGVyZXppeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDFjNTU4MWI5ZDkyNGE2NjgwNzBkZDYxNDRjMjA4NDguc2V0Q29udGVudChodG1sX2QxOGY0YTYzNjQwMjRkNDJiMGQxNWE2MWRkZThiOTE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmMDIxNDgzMGY1MTQ4NGRhNjczYzk1MWE0OTdkYjg1LmJpbmRQb3B1cChwb3B1cF80MWM1NTgxYjlkOTI0YTY2ODA3MGRkNjE0NGMyMDg0OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2JmMDIxNDgzMGY1MTQ4NGRhNjczYzk1MWE0OTdkYjg1LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTkzYjFhMTIyZmE0NDcyNjk4ZjRhZDM1ZmEyOGExNjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MzM4ODksIDM4LjgzNjk0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMzJlNiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTc3YTAyNzQ2OWZlNDZkY2JjNWVjNzlkY2EwMTQ2YzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2I5MjMzYjk3NDY4NDFjMWE5NTRjZWZlMDBiODVhYmQgPSAkKGA8ZGl2IGlkPSJodG1sX2NiOTIzM2I5NzQ2ODQxYzFhOTU0Y2VmZTAwYjg1YWJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5Ob3ZvYnpoZWdva2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NzdhMDI3NDY5ZmU0NmRjYmM1ZWM3OWRjYTAxNDZjMi5zZXRDb250ZW50KGh0bWxfY2I5MjMzYjk3NDY4NDFjMWE5NTRjZWZlMDBiODVhYmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTkzYjFhMTIyZmE0NDcyNjk4ZjRhZDM1ZmEyOGExNjkuYmluZFBvcHVwKHBvcHVwXzk3N2EwMjc0NjlmZTQ2ZGNiYzVlYzc5ZGNhMDE0NmMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMTkzYjFhMTIyZmE0NDcyNjk4ZjRhZDM1ZmEyOGExNjkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NjgxYWFiYTEzYWM0ZTdhOTk3YzIzNDVhMjk3ZjNiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk0NjM4OSwgMzkuNDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwZTRhMjExZjIyZjRjNTM5YzhmNjc4YjY2NTViZWI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxYjBlOWRiY2ViNDRlZThhY2QxMmU0ZDI3NDUxZTljID0gJChgPGRpdiBpZD0iaHRtbF82MWIwZTlkYmNlYjQ0ZWU4YWNkMTJlNGQyNzQ1MWU5YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+RHpoaWR6aGlraGFibCc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwZTRhMjExZjIyZjRjNTM5YzhmNjc4YjY2NTViZWI1LnNldENvbnRlbnQoaHRtbF82MWIwZTlkYmNlYjQ0ZWU4YWNkMTJlNGQyNzQ1MWU5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NjgxYWFiYTEzYWM0ZTdhOTk3YzIzNDVhMjk3ZjNiNC5iaW5kUG9wdXAocG9wdXBfOTBlNGEyMTFmMjJmNGM1MzljOGY2NzhiNjY1NWJlYjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl83NjgxYWFiYTEzYWM0ZTdhOTk3YzIzNDVhMjk3ZjNiNC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBkZTE3ZmI5NjNmMzQ0OTA4ZTUyMzMyMmZjZjY3YjA2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTY1LCAzOS4zNjc3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0MTQ1ZmNlMGIwMTQ1NDg4OWU2OTc5ZTAwZTkwZjNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyMjFjN2IwZDZhYjRlNjhhOTkyNzg4MjJiMWE0YzMxID0gJChgPGRpdiBpZD0iaHRtbF84MjIxYzdiMGQ2YWI0ZTY4YTk5Mjc4ODIyYjFhNGMzMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+VGF1eWtoYWJsJzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQxNDVmY2UwYjAxNDU0ODg5ZTY5NzllMDBlOTBmM2Quc2V0Q29udGVudChodG1sXzgyMjFjN2IwZDZhYjRlNjhhOTkyNzg4MjJiMWE0YzMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBkZTE3ZmI5NjNmMzQ0OTA4ZTUyMzMyMmZjZjY3YjA2LmJpbmRQb3B1cChwb3B1cF85NDE0NWZjZTBiMDE0NTQ4ODllNjk3OWUwMGU5MGYzZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzBkZTE3ZmI5NjNmMzQ0OTA4ZTUyMzMyMmZjZjY3YjA2LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTViYzc1MGNiOTFhNDdiYzg5ZWI2ZTI3N2RkYmEyZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45ODMwNTYsIDM5LjQ3NjExMDk5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMzJlNiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDQxMjE4YmJjYTgwNDAzYWFjZjM5ODQyNjQxYzI1ODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNmM2IwYTk4ZTY0NDYyODkxYmVlM2I5M2U4NjMxZjUgPSAkKGA8ZGl2IGlkPSJodG1sXzkzZjNiMGE5OGU2NDQ2Mjg5MWJlZTNiOTNlODYzMWY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5LdW5jaHVrb2toYWJsJzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQxMjE4YmJjYTgwNDAzYWFjZjM5ODQyNjQxYzI1ODYuc2V0Q29udGVudChodG1sXzkzZjNiMGE5OGU2NDQ2Mjg5MWJlZTNiOTNlODYzMWY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk1YmM3NTBjYjkxYTQ3YmM4OWViNmUyNzdkZGJhMmYyLmJpbmRQb3B1cChwb3B1cF80NDEyMThiYmNhODA0MDNhYWNmMzk4NDI2NDFjMjU4NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzk1YmM3NTBjYjkxYTQ3YmM4OWViNmUyNzdkZGJhMmYyLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmNkZjRiZWQ5YjBjNDUzNzliOWIyOWQzYTA2YjYwMGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTQ0NDQsIDM5LjAwMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkYTkxYmU2OThiNDQzNGNhMGU3NWQ1M2YxMTY1NzRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg4NTM5OGRlNjM0YTQwOTk4MDc3MTEzNjI4N2EyZmYyID0gJChgPGRpdiBpZD0iaHRtbF84ODUzOThkZTYzNGE0MDk5ODA3NzExMzYyODdhMmZmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S296ZXQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkYTkxYmU2OThiNDQzNGNhMGU3NWQ1M2YxMTY1NzRhLnNldENvbnRlbnQoaHRtbF84ODUzOThkZTYzNGE0MDk5ODA3NzExMzYyODdhMmZmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yY2RmNGJlZDliMGM0NTM3OWI5YjI5ZDNhMDZiNjAwZS5iaW5kUG9wdXAocG9wdXBfM2RhOTFiZTY5OGI0NDM0Y2EwZTc1ZDUzZjExNjU3NGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yY2RmNGJlZDliMGM0NTM3OWI5YjI5ZDNhMDZiNjAwZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRkOTE2YjI1MjY0MTRkMjJhMjUwNmNmZTRhMDI3ZGY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDIzOTcyLCAzOC45MzY5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlODc5ZGY1MDU4ZDQ5ZDlhN2UyOWY0ZDdmODZlODFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0ZDRmYzI3YjQ5OTRlODdhYzMwZWFhOWU2MzhhMWJiID0gJChgPGRpdiBpZD0iaHRtbF9hNGQ0ZmMyN2I0OTk0ZTg3YWMzMGVhYTllNjM4YTFiYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+Tm92YXlhIEFkeWdleWE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlODc5ZGY1MDU4ZDQ5ZDlhN2UyOWY0ZDdmODZlODFjLnNldENvbnRlbnQoaHRtbF9hNGQ0ZmMyN2I0OTk0ZTg3YWMzMGVhYTllNjM4YTFiYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDkxNmIyNTI2NDE0ZDIyYTI1MDZjZmU0YTAyN2RmNC5iaW5kUG9wdXAocG9wdXBfZWU4NzlkZjUwNThkNDlkOWE3ZTI5ZjRkN2Y4NmU4MWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80ZDkxNmIyNTI2NDE0ZDIyYTI1MDZjZmU0YTAyN2RmNC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxNzFlOTA4NmZkMjRkZjM5ZmNhZDY0NGNiMDU5N2JmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDM0MTY3LCAzOC44OTQ3MjE5OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViYjA5OWJiMTg1ZDRiZjFhM2JiZDUyZWM3Y2I1ZTVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5OWZkZTM0ZDc2NjQyOTM5NDEzYmY0YmVmMTE5ZjVlID0gJChgPGRpdiBpZD0iaHRtbF9kOTlmZGUzNGQ3NjY0MjkzOTQxM2JmNGJlZjExOWY1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+U3Rhcm9iemhlZ29rYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViYjA5OWJiMTg1ZDRiZjFhM2JiZDUyZWM3Y2I1ZTVkLnNldENvbnRlbnQoaHRtbF9kOTlmZGUzNGQ3NjY0MjkzOTQxM2JmNGJlZjExOWY1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MTcxZTkwODZmZDI0ZGYzOWZjYWQ2NDRjYjA1OTdiZi5iaW5kUG9wdXAocG9wdXBfNWJiMDk5YmIxODVkNGJmMWEzYmJkNTJlYzdjYjVlNWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl82MTcxZTkwODZmZDI0ZGYzOWZjYWQ2NDRjYjA1OTdiZi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAwYmM5ZGVmMmU1NzQ5ZGQ5ZDU2NTAyMTY1ZDZmODRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDY1NTU2LCA0MC4xNzQxNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0ZjhlNWEzNjliZTQ0YzRiMDlhY2MwMzVlNDJmYzdlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FhMzhhY2Q1YWExNTQ1NTQ5NDU0MjFhYTZiMjUxY2JkID0gJChgPGRpdiBpZD0iaHRtbF9hYTM4YWNkNWFhMTU0NTU0OTQ1NDIxYWE2YjI1MWNiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UHNoaWNobzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTRmOGU1YTM2OWJlNDRjNGIwOWFjYzAzNWU0MmZjN2Uuc2V0Q29udGVudChodG1sX2FhMzhhY2Q1YWExNTQ1NTQ5NDU0MjFhYTZiMjUxY2JkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAwYmM5ZGVmMmU1NzQ5ZGQ5ZDU2NTAyMTY1ZDZmODRiLmJpbmRQb3B1cChwb3B1cF85NGY4ZTVhMzY5YmU0NGM0YjA5YWNjMDM1ZTQyZmM3ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzAwYmM5ZGVmMmU1NzQ5ZGQ5ZDU2NTAyMTY1ZDZmODRiLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmNkYTAxODFhYThjNDZmZjhhZWIzYTQ5NzhjZmIzZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45NTkzNDg5OTk5OTk5OTYsIDQxLjc0Mzg0Njk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2JjZjYwYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODIzYzU3ZDNmMmE4NDFlZWI1OTlhZTNhMmM5MmUzZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTI1OGVhOTU4NjE1NGQ2OGIzM2YzMTdhYmRhMWEzNGQgPSAkKGA8ZGl2IGlkPSJodG1sXzkyNThlYTk1ODYxNTRkNjhiMzNmMzE3YWJkYTFhMzRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5aaGFrbzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODIzYzU3ZDNmMmE4NDFlZWI1OTlhZTNhMmM5MmUzZGIuc2V0Q29udGVudChodG1sXzkyNThlYTk1ODYxNTRkNjhiMzNmMzE3YWJkYTFhMzRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjZGEwMTgxYWE4YzQ2ZmY4YWViM2E0OTc4Y2ZiM2UxLmJpbmRQb3B1cChwb3B1cF84MjNjNTdkM2YyYTg0MWVlYjU5OWFlM2EyYzkyZTNkYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2ZjZGEwMTgxYWE4YzQ2ZmY4YWViM2E0OTc4Y2ZiM2UxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWQ4ZGI1MGRiYmMxNDRkYmFhNjI3OTBmNDA5OWU3MjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45ODgzMzMwMDAwMDAwMDQsIDQxLjczODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2JjZjYwYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTVmZTcwM2Q2Yzg5NDM0ZmI4NDA0NDA1ZjE3NDZmODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2QxOWUzN2NlMDE3NGEyZjgzN2MxOTIyZmNkN2E1MmUgPSAkKGA8ZGl2IGlkPSJodG1sXzNkMTllMzdjZTAxNzRhMmY4MzdjMTkyMmZjZDdhNTJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5BbGktQmVyZHVrb3Zza2l5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNWZlNzAzZDZjODk0MzRmYjg0MDQ0MDVmMTc0NmY4MS5zZXRDb250ZW50KGh0bWxfM2QxOWUzN2NlMDE3NGEyZjgzN2MxOTIyZmNkN2E1MmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWQ4ZGI1MGRiYmMxNDRkYmFhNjI3OTBmNDA5OWU3MjMuYmluZFBvcHVwKHBvcHVwX2U1ZmU3MDNkNmM4OTQzNGZiODQwNDQwNWYxNzQ2ZjgxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNWQ4ZGI1MGRiYmMxNDRkYmFhNjI3OTBmNDA5OWU3MjMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODc4OWM1MmUwODY0MGU4YTJmYzk0NzA1MWQzZGYzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjA0MjM2NTk5OTk5OTk5NCwgNDEuNzY0MDk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYmNmNjBjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWI4MjEzZGM3MmQ0M2FjYjM0ZjUyMGUzNjM0ZDllYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NTBiZGYyZjM0YTc0NmE5YmJhMTNhODMwNWUwZWFmNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTUwYmRmMmYzNGE3NDZhOWJiYTEzYTgzMDVlMGVhZjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPktoYWJlejwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWFiODIxM2RjNzJkNDNhY2IzNGY1MjBlMzYzNGQ5ZWMuc2V0Q29udGVudChodG1sXzU1MGJkZjJmMzRhNzQ2YTliYmExM2E4MzA1ZTBlYWY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I4Nzg5YzUyZTA4NjQwZThhMmZjOTQ3MDUxZDNkZjNiLmJpbmRQb3B1cChwb3B1cF81YWI4MjEzZGM3MmQ0M2FjYjM0ZjUyMGUzNjM0ZDllYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2I4Nzg5YzUyZTA4NjQwZThhMmZjOTQ3MDUxZDNkZjNiLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTEzNmJmZjZmYTQwNGI3NjliM2IwZjRkYmIzMGEyODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4xMTUyNzgsIDQxLjgyODA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2JjZjYwYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmU4ZTNhNTIyNTM0NGZjMjhkN2E3NzBhNTI3ZjEzOGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmRjZDQwZDZkYjRlNDUzZjg0NTVhODVhODE3YTEyMTcgPSAkKGA8ZGl2IGlkPSJodG1sXzJkY2Q0MGQ2ZGI0ZTQ1M2Y4NDU1YTg1YTgxN2ExMjE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5aZXl1a288L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZlOGUzYTUyMjUzNDRmYzI4ZDdhNzcwYTUyN2YxMzhhLnNldENvbnRlbnQoaHRtbF8yZGNkNDBkNmRiNGU0NTNmODQ1NWE4NWE4MTdhMTIxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMTM2YmZmNmZhNDA0Yjc2OWIzYjBmNGRiYjMwYTI4Ny5iaW5kUG9wdXAocG9wdXBfZmU4ZTNhNTIyNTM0NGZjMjhkN2E3NzBhNTI3ZjEzOGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8xMTM2YmZmNmZhNDA0Yjc2OWIzYjBmNGRiYjMwYTI4Ny5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwYWRhMmMwM2Y2OTQyZjZiZmQxYTQ3NTE1YjFlMjljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTM5OTUxLCA0MS44NTM4NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5YzkzNGFjZDEzNTQ4NGQ4YzAwYmRjOTVmMDYzOWZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2MmZjZjM2MTA4NDRkNGI5OTA1MWUwZWQxYTU0ZDNkID0gJChgPGRpdiBpZD0iaHRtbF80NjJmY2YzNjEwODQ0ZDRiOTkwNTFlMGVkMWE1NGQzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S29zaC1LaGFibCc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5YzkzNGFjZDEzNTQ4NGQ4YzAwYmRjOTVmMDYzOWZlLnNldENvbnRlbnQoaHRtbF80NjJmY2YzNjEwODQ0ZDRiOTkwNTFlMGVkMWE1NGQzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MGFkYTJjMDNmNjk0MmY2YmZkMWE0NzUxNWIxZTI5Yy5iaW5kUG9wdXAocG9wdXBfMzljOTM0YWNkMTM1NDg0ZDhjMDBiZGM5NWYwNjM5ZmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl82MGFkYTJjMDNmNjk0MmY2YmZkMWE0NzUxNWIxZTI5Yy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdhMzczOGZkNDE2NDQ3YTY4ZjRiMzQ4YTBjMWI5MGQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTk4NDIzNzk5OTk5OTksIDQxLjY5OTk2NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5ZGNkMjkyZTA4MDQ5NjdhOTNkNzJmZGI3MDIzMTU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4YzYwZDg0ZDFhMTQzNWY5MjNjZWEzNmFjNjgzMmFlID0gJChgPGRpdiBpZD0iaHRtbF8xOGM2MGQ4NGQxYTE0MzVmOTIzY2VhMzZhYzY4MzJhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+SW56aGljaGlzaGtobzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzlkY2QyOTJlMDgwNDk2N2E5M2Q3MmZkYjcwMjMxNTQuc2V0Q29udGVudChodG1sXzE4YzYwZDg0ZDFhMTQzNWY5MjNjZWEzNmFjNjgzMmFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdhMzczOGZkNDE2NDQ3YTY4ZjRiMzQ4YTBjMWI5MGQxLmJpbmRQb3B1cChwb3B1cF8zOWRjZDI5MmUwODA0OTY3YTkzZDcyZmRiNzAyMzE1NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzdhMzczOGZkNDE2NDQ3YTY4ZjRiMzQ4YTBjMWI5MGQxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmExMjkxZTRmYjJhNGYyOWI1NmYyNDU0OGU3ZjQ3YTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yNTMyNzE5OTk5OTk5OTYsIDQxLjkwMDA0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhYmViZSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjUyYTI1YmU5ODY0NDc3NWI0OThkMGQwNmJjNTBlZDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGMxOTViNDg3OGY1NGU3MGJmYjJhYzBjZDZjOWNjMGEgPSAkKGA8ZGl2IGlkPSJodG1sX2RjMTk1YjQ4NzhmNTRlNzBiZmIyYWMwY2Q2YzljYzBhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5BYmF6YWt0PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTJhMjViZTk4NjQ0Nzc1YjQ5OGQwZDA2YmM1MGVkOC5zZXRDb250ZW50KGh0bWxfZGMxOTViNDg3OGY1NGU3MGJmYjJhYzBjZDZjOWNjMGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmExMjkxZTRmYjJhNGYyOWI1NmYyNDU0OGU3ZjQ3YTcuYmluZFBvcHVwKHBvcHVwX2I1MmEyNWJlOTg2NDQ3NzViNDk4ZDBkMDZiYzUwZWQ4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMmExMjkxZTRmYjJhNGYyOWI1NmYyNDU0OGU3ZjQ3YTcuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZTU1ZjJkZmYzOTE0ZmVjODUzMzRlYmYyOWRkNDE0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQwMDgzMywgNDEuOTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmFiZWJlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85OTlmNzFkYzBhNDU0MjllOWU1NGQyZWVhODY2NWY5OSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82N2U1ODJhZWEyNTQ0YzRkYWI4ZDUwNzgxNTFmODhlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNjM5MWE2MDZhNTQ0NDk0Yjk2YTMyNjVlNDU3YTdiYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTYzOTFhNjA2YTU0NDQ5NGI5NmEzMjY1ZTQ1N2E3YmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPk1hbHl5IFplbGVuY2h1azwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjdlNTgyYWVhMjU0NGM0ZGFiOGQ1MDc4MTUxZjg4ZTEuc2V0Q29udGVudChodG1sX2U2MzkxYTYwNmE1NDQ0OTRiOTZhMzI2NWU0NTdhN2JiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlNTVmMmRmZjM5MTRmZWM4NTMzNGViZjI5ZGQ0MTQ3LmJpbmRQb3B1cChwb3B1cF82N2U1ODJhZWEyNTQ0YzRkYWI4ZDUwNzgxNTFmODhlMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzJlNTVmMmRmZjM5MTRmZWM4NTMzNGViZjI5ZGQ0MTQ3LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjRhZjNmODZkZDVjNDllNzk5NmNiYjU5YjM5MTVhZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC41MTk3MjE5OTk5OTk5OTQsIDQwLjcxMDI3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhYmViZSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzY3MTYxODQ0ZDk5NDA5NGI2ZGM0YWNlM2I1OTQ4ZTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBhZDEwMjk4MTFhNGVjZTgxNDZmOTY0YWIyOGMwNTUgPSAkKGA8ZGl2IGlkPSJodG1sX2UwYWQxMDI5ODExYTRlY2U4MTQ2Zjk2NGFiMjhjMDU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5LaG9keic8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2NzE2MTg0NGQ5OTQwOTRiNmRjNGFjZTNiNTk0OGUzLnNldENvbnRlbnQoaHRtbF9lMGFkMTAyOTgxMWE0ZWNlODE0NmY5NjRhYjI4YzA1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNGFmM2Y4NmRkNWM0OWU3OTk2Y2JiNTliMzkxNWFmMi5iaW5kUG9wdXAocG9wdXBfYzY3MTYxODQ0ZDk5NDA5NGI2ZGM0YWNlM2I1OTQ4ZTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yNGFmM2Y4NmRkNWM0OWU3OTk2Y2JiNTliMzkxNWFmMi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyMGI2MTVlN2I2YjQ2MzU4ZWEzYjNmNzhiZWZlNjI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODY1LCAzOC45ODgwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYWJlYmUiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzk5OWY3MWRjMGE0NTQyOWU5ZTU0ZDJlZWE4NjY1Zjk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyMzA3MWY3MzhmNTQwY2RiNjIwZWIyZGZjZjk5NDQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxZjAzMDQ4MDgzYTQ4ZTVhNjZmMmQ4ZmVkZGY2NjY4ID0gJChgPGRpdiBpZD0iaHRtbF80MWYwMzA0ODA4M2E0OGU1YTY2ZjJkOGZlZGRmNjY2OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+TmF0dWtoYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIyMzA3MWY3MzhmNTQwY2RiNjIwZWIyZGZjZjk5NDQ2LnNldENvbnRlbnQoaHRtbF80MWYwMzA0ODA4M2E0OGU1YTY2ZjJkOGZlZGRmNjY2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MjBiNjE1ZTdiNmI0NjM1OGVhM2IzZjc4YmVmZTYyNy5iaW5kUG9wdXAocG9wdXBfMjIzMDcxZjczOGY1NDBjZGI2MjBlYjJkZmNmOTk0NDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl81MjBiNjE1ZTdiNmI0NjM1OGVhM2IzZjc4YmVmZTYyNy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0MTgwODI4NDQyMDQ2MDZhNjczNWU0MzgzZmY2MDI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjEyNSwgNDMuN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhYmViZSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOTk5ZjcxZGMwYTQ1NDI5ZTllNTRkMmVlYTg2NjVmOTkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDRkYjRkZjc1MjNjNDdiYWFmYTlmOThkOTE5ZGNkZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmZlMzRhNjY1NjYzNDNjN2IzNjIyMzMzYTI1NjNjMGYgPSAkKGA8ZGl2IGlkPSJodG1sX2JmZTM0YTY2NTY2MzQzYzdiMzYyMjMzM2EyNTYzYzBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5VcmF6aGF5bm9lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NGRiNGRmNzUyM2M0N2JhYWZhOWY5OGQ5MTlkY2RmNS5zZXRDb250ZW50KGh0bWxfYmZlMzRhNjY1NjYzNDNjN2IzNjIyMzMzYTI1NjNjMGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTQxODA4Mjg0NDIwNDYwNmE2NzM1ZTQzODNmZjYwMjYuYmluZFBvcHVwKHBvcHVwXzQ0ZGI0ZGY3NTIzYzQ3YmFhZmE5Zjk4ZDkxOWRjZGY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNTQxODA4Mjg0NDIwNDYwNmE2NzM1ZTQzODNmZjYwMjYuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



2.2. Consonants Example 
~~~~~~~~~~~~~~~~~~~~~~~~

Map based on
`this <https://raw.githubusercontent.com/ropensci/lingtypology/master/database_creation/ejective_and_n_consonants.csv>`__
data.

.. code:: ipython3

    data = pandas.read_csv(
        'https://raw.githubusercontent.com/ropensci/lingtypology/master/database_creation/ejective_and_n_consonants.csv',
        delimiter=',',
        header=0,
    )

.. code:: ipython3

    m = lingtypology.LingMap(data.language)
    m.legend_title = 'Consonants'
    m.legend_position = 'bottomleft'
    m.add_tooltips(data.consonants)
    #If numeric is True, it will look like this
    m.add_features(data.consonants, numeric=True)
    m.create_map()




.. raw:: html

    <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2JlNmM2YzRlMzdmMjRiNWI5MDI3ODY0ZGU5ZmRjYjg4IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9iZTZjNmM0ZTM3ZjI0YjViOTAyNzg2NGRlOWZkY2I4OCIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IGxlZnQ6IDIwcHg7IGJvdHRvbTogNDBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+Q29uc29uYW50czwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxzdmcgaGVpZ2h0PSIxNjMiIHdpZHRoPSIyMCI+PGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMjAiIHkyPSIwInN0eWxlPSJzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyIiB4Mj0iMjAiIHkyPSIyInN0eWxlPSJzdHJva2U6I2ZlZmZmZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMjAiIHkyPSIzInN0eWxlPSJzdHJva2U6I2ZkZmVmZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0IiB4Mj0iMjAiIHkyPSI0InN0eWxlPSJzdHJva2U6I2ZjZmVmYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1IiB4Mj0iMjAiIHkyPSI1InN0eWxlPSJzdHJva2U6I2ZhZmRmYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2IiB4Mj0iMjAiIHkyPSI2InN0eWxlPSJzdHJva2U6I2Y5ZmNmOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3IiB4Mj0iMjAiIHkyPSI3InN0eWxlPSJzdHJva2U6I2Y4ZmNmODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4IiB4Mj0iMjAiIHkyPSI4InN0eWxlPSJzdHJva2U6I2Y3ZmJmNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5IiB4Mj0iMjAiIHkyPSI5InN0eWxlPSJzdHJva2U6I2Y1ZmFmNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMCIgeDI9IjIwIiB5Mj0iMTAic3R5bGU9InN0cm9rZTojZjRmYWY0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExIiB4Mj0iMjAiIHkyPSIxMSJzdHlsZT0ic3Ryb2tlOiNmM2Y5ZjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIiIHgyPSIyMCIgeTI9IjEyInN0eWxlPSJzdHJva2U6I2YxZjhmMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMyIgeDI9IjIwIiB5Mj0iMTMic3R5bGU9InN0cm9rZTojZjBmOGYwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0IiB4Mj0iMjAiIHkyPSIxNCJzdHlsZT0ic3Ryb2tlOiNlZmY3ZWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUiIHgyPSIyMCIgeTI9IjE1InN0eWxlPSJzdHJva2U6I2VlZjdlZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNiIgeDI9IjIwIiB5Mj0iMTYic3R5bGU9InN0cm9rZTojZWNmNmVjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE3IiB4Mj0iMjAiIHkyPSIxNyJzdHlsZT0ic3Ryb2tlOiNlYmY1ZWI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTgiIHgyPSIyMCIgeTI9IjE4InN0eWxlPSJzdHJva2U6I2VhZjVlYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxOCIgeDI9IjIwIiB5Mj0iMTgic3R5bGU9InN0cm9rZTojZTZmM2U2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIwIiB4Mj0iMjAiIHkyPSIyMCJzdHlsZT0ic3Ryb2tlOiNlNWYyZTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjEiIHgyPSIyMCIgeTI9IjIxInN0eWxlPSJzdHJva2U6I2UzZjFlMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMiIgeDI9IjIwIiB5Mj0iMjIic3R5bGU9InN0cm9rZTojZTJmMWUyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIzIiB4Mj0iMjAiIHkyPSIyMyJzdHlsZT0ic3Ryb2tlOiNlMWYwZTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjQiIHgyPSIyMCIgeTI9IjI0InN0eWxlPSJzdHJva2U6I2RmZjBkZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUic3R5bGU9InN0cm9rZTojZGVlZmRlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI2IiB4Mj0iMjAiIHkyPSIyNiJzdHlsZT0ic3Ryb2tlOiNkZGVlZGQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjciIHgyPSIyMCIgeTI9IjI3InN0eWxlPSJzdHJva2U6I2RjZWVkYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyOCIgeDI9IjIwIiB5Mj0iMjgic3R5bGU9InN0cm9rZTojZGFlZGRhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI5IiB4Mj0iMjAiIHkyPSIyOSJzdHlsZT0ic3Ryb2tlOiNkOWVjZDk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzAiIHgyPSIyMCIgeTI9IjMwInN0eWxlPSJzdHJva2U6I2Q4ZWNkODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMSIgeDI9IjIwIiB5Mj0iMzEic3R5bGU9InN0cm9rZTojZDdlYmQ3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMyIiB4Mj0iMjAiIHkyPSIzMiJzdHlsZT0ic3Ryb2tlOiNkNWVhZDU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzMiIHgyPSIyMCIgeTI9IjMzInN0eWxlPSJzdHJva2U6I2Q0ZWFkNDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNCIgeDI9IjIwIiB5Mj0iMzQic3R5bGU9InN0cm9rZTojZDNlOWQzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM1IiB4Mj0iMjAiIHkyPSIzNSJzdHlsZT0ic3Ryb2tlOiNkMWU5ZDE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzYiIHgyPSIyMCIgeTI9IjM2InN0eWxlPSJzdHJva2U6I2QwZThkMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNiIgeDI9IjIwIiB5Mj0iMzYic3R5bGU9InN0cm9rZTojY2NlNmNjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM4IiB4Mj0iMjAiIHkyPSIzOCJzdHlsZT0ic3Ryb2tlOiNjYmU1Y2I7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzkiIHgyPSIyMCIgeTI9IjM5InN0eWxlPSJzdHJva2U6I2NhZTVjYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MCIgeDI9IjIwIiB5Mj0iNDAic3R5bGU9InN0cm9rZTojYzhlNGM4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQxIiB4Mj0iMjAiIHkyPSI0MSJzdHlsZT0ic3Ryb2tlOiNjN2UzYzc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDIiIHgyPSIyMCIgeTI9IjQyInN0eWxlPSJzdHJva2U6I2M2ZTNjNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MyIgeDI9IjIwIiB5Mj0iNDMic3R5bGU9InN0cm9rZTojYzVlMmM1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ0IiB4Mj0iMjAiIHkyPSI0NCJzdHlsZT0ic3Ryb2tlOiNjM2UyYzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDUiIHgyPSIyMCIgeTI9IjQ1InN0eWxlPSJzdHJva2U6I2MyZTFjMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NiIgeDI9IjIwIiB5Mj0iNDYic3R5bGU9InN0cm9rZTojYzFlMGMxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ3IiB4Mj0iMjAiIHkyPSI0NyJzdHlsZT0ic3Ryb2tlOiNiZmUwYmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDgiIHgyPSIyMCIgeTI9IjQ4InN0eWxlPSJzdHJva2U6I2JlZGZiZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0OSIgeDI9IjIwIiB5Mj0iNDkic3R5bGU9InN0cm9rZTojYmRkZWJkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUwIiB4Mj0iMjAiIHkyPSI1MCJzdHlsZT0ic3Ryb2tlOiNiY2RlYmM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTEiIHgyPSIyMCIgeTI9IjUxInN0eWxlPSJzdHJva2U6I2JhZGRiYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MiIgeDI9IjIwIiB5Mj0iNTIic3R5bGU9InN0cm9rZTojYjlkY2I5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUzIiB4Mj0iMjAiIHkyPSI1MyJzdHlsZT0ic3Ryb2tlOiNiOGRjYjg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTQiIHgyPSIyMCIgeTI9IjU0InN0eWxlPSJzdHJva2U6I2I3ZGJiNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NCIgeDI9IjIwIiB5Mj0iNTQic3R5bGU9InN0cm9rZTojYjNkOWIzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU2IiB4Mj0iMjAiIHkyPSI1NiJzdHlsZT0ic3Ryb2tlOiNiMWQ5YjE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTciIHgyPSIyMCIgeTI9IjU3InN0eWxlPSJzdHJva2U6I2IwZDhiMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1OCIgeDI9IjIwIiB5Mj0iNTgic3R5bGU9InN0cm9rZTojYWZkN2FmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU5IiB4Mj0iMjAiIHkyPSI1OSJzdHlsZT0ic3Ryb2tlOiNhZWQ3YWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjAiIHgyPSIyMCIgeTI9IjYwInN0eWxlPSJzdHJva2U6I2FjZDZhYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MSIgeDI9IjIwIiB5Mj0iNjEic3R5bGU9InN0cm9rZTojYWJkNWFiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYyIiB4Mj0iMjAiIHkyPSI2MiJzdHlsZT0ic3Ryb2tlOiNhYWQ1YWE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjMiIHgyPSIyMCIgeTI9IjYzInN0eWxlPSJzdHJva2U6I2E4ZDRhODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NCIgeDI9IjIwIiB5Mj0iNjQic3R5bGU9InN0cm9rZTojYTdkNGE3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY1IiB4Mj0iMjAiIHkyPSI2NSJzdHlsZT0ic3Ryb2tlOiNhNmQzYTY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjYiIHgyPSIyMCIgeTI9IjY2InN0eWxlPSJzdHJva2U6I2E1ZDJhNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NyIgeDI9IjIwIiB5Mj0iNjcic3R5bGU9InN0cm9rZTojYTNkMmEzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY4IiB4Mj0iMjAiIHkyPSI2OCJzdHlsZT0ic3Ryb2tlOiNhMmQxYTI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjkiIHgyPSIyMCIgeTI9IjY5InN0eWxlPSJzdHJva2U6I2ExZDBhMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MCIgeDI9IjIwIiB5Mj0iNzAic3R5bGU9InN0cm9rZTojOWZkMDlmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcxIiB4Mj0iMjAiIHkyPSI3MSJzdHlsZT0ic3Ryb2tlOiM5ZWNmOWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzIiIHgyPSIyMCIgeTI9IjcyInN0eWxlPSJzdHJva2U6IzlkY2U5ZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MiIgeDI9IjIwIiB5Mj0iNzIic3R5bGU9InN0cm9rZTojOTljZDk5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc0IiB4Mj0iMjAiIHkyPSI3NCJzdHlsZT0ic3Ryb2tlOiM5OGNjOTg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzUiIHgyPSIyMCIgeTI9Ijc1InN0eWxlPSJzdHJva2U6Izk3Y2I5NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NiIgeDI9IjIwIiB5Mj0iNzYic3R5bGU9InN0cm9rZTojOTVjYjk1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc3IiB4Mj0iMjAiIHkyPSI3NyJzdHlsZT0ic3Ryb2tlOiM5NGNhOTQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzgiIHgyPSIyMCIgeTI9Ijc4InN0eWxlPSJzdHJva2U6IzkzYzk5MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3OSIgeDI9IjIwIiB5Mj0iNzkic3R5bGU9InN0cm9rZTojOTFjOTkxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgwIiB4Mj0iMjAiIHkyPSI4MCJzdHlsZT0ic3Ryb2tlOiM5MGM4OTA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODEiIHgyPSIyMCIgeTI9IjgxInN0eWxlPSJzdHJva2U6IzhmYzc4ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MiIgeDI9IjIwIiB5Mj0iODIic3R5bGU9InN0cm9rZTojOGVjNzhlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgzIiB4Mj0iMjAiIHkyPSI4MyJzdHlsZT0ic3Ryb2tlOiM4Y2M2OGM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODQiIHgyPSIyMCIgeTI9Ijg0InN0eWxlPSJzdHJva2U6IzhiYzU4YjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NSIgeDI9IjIwIiB5Mj0iODUic3R5bGU9InN0cm9rZTojOGFjNThhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg2IiB4Mj0iMjAiIHkyPSI4NiJzdHlsZT0ic3Ryb2tlOiM4OGM0ODg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODciIHgyPSIyMCIgeTI9Ijg3InN0eWxlPSJzdHJva2U6Izg3YzQ4NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4OCIgeDI9IjIwIiB5Mj0iODgic3R5bGU9InN0cm9rZTojODZjMzg2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg5IiB4Mj0iMjAiIHkyPSI4OSJzdHlsZT0ic3Ryb2tlOiM4NWMyODU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTAiIHgyPSIyMCIgeTI9IjkwInN0eWxlPSJzdHJva2U6IzgzYzI4MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MCIgeDI9IjIwIiB5Mj0iOTAic3R5bGU9InN0cm9rZTojN2ZjMDdmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkyIiB4Mj0iMjAiIHkyPSI5MiJzdHlsZT0ic3Ryb2tlOiM3ZWJmN2U7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTMiIHgyPSIyMCIgeTI9IjkzInN0eWxlPSJzdHJva2U6IzdkYmU3ZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NCIgeDI9IjIwIiB5Mj0iOTQic3R5bGU9InN0cm9rZTojN2NiZTdjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk1IiB4Mj0iMjAiIHkyPSI5NSJzdHlsZT0ic3Ryb2tlOiM3YWJkN2E7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTYiIHgyPSIyMCIgeTI9Ijk2InN0eWxlPSJzdHJva2U6Izc5YmQ3OTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NyIgeDI9IjIwIiB5Mj0iOTcic3R5bGU9InN0cm9rZTojNzhiYzc4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk4IiB4Mj0iMjAiIHkyPSI5OCJzdHlsZT0ic3Ryb2tlOiM3N2JiNzc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTkiIHgyPSIyMCIgeTI9Ijk5InN0eWxlPSJzdHJva2U6Izc1YmI3NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDAiIHgyPSIyMCIgeTI9IjEwMCJzdHlsZT0ic3Ryb2tlOiM3NGJhNzQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAxIiB4Mj0iMjAiIHkyPSIxMDEic3R5bGU9InN0cm9rZTojNzNiOTczO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMiIgeDI9IjIwIiB5Mj0iMTAyInN0eWxlPSJzdHJva2U6IzcxYjk3MTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDMiIHgyPSIyMCIgeTI9IjEwMyJzdHlsZT0ic3Ryb2tlOiM3MGI4NzA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA0IiB4Mj0iMjAiIHkyPSIxMDQic3R5bGU9InN0cm9rZTojNmZiNzZmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwNSIgeDI9IjIwIiB5Mj0iMTA1InN0eWxlPSJzdHJva2U6IzZlYjc2ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDYiIHgyPSIyMCIgeTI9IjEwNiJzdHlsZT0ic3Ryb2tlOiM2Y2I2NmM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA3IiB4Mj0iMjAiIHkyPSIxMDcic3R5bGU9InN0cm9rZTojNmJiNjZiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwOCIgeDI9IjIwIiB5Mj0iMTA4InN0eWxlPSJzdHJva2U6IzZhYjU2YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDgiIHgyPSIyMCIgeTI9IjEwOCJzdHlsZT0ic3Ryb2tlOiM2NmIzNjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEwIiB4Mj0iMjAiIHkyPSIxMTAic3R5bGU9InN0cm9rZTojNjViMjY1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExMSIgeDI9IjIwIiB5Mj0iMTExInN0eWxlPSJzdHJva2U6IzYzYjI2MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTIiIHgyPSIyMCIgeTI9IjExMiJzdHlsZT0ic3Ryb2tlOiM2MmIxNjI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEzIiB4Mj0iMjAiIHkyPSIxMTMic3R5bGU9InN0cm9rZTojNjFiMDYxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNCIgeDI9IjIwIiB5Mj0iMTE0InN0eWxlPSJzdHJva2U6IzVmYjA1ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTUiIHgyPSIyMCIgeTI9IjExNSJzdHlsZT0ic3Ryb2tlOiM1ZWFmNWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE2IiB4Mj0iMjAiIHkyPSIxMTYic3R5bGU9InN0cm9rZTojNWRhZjVkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNyIgeDI9IjIwIiB5Mj0iMTE3InN0eWxlPSJzdHJva2U6IzVjYWU1YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTgiIHgyPSIyMCIgeTI9IjExOCJzdHlsZT0ic3Ryb2tlOiM1YWFkNWE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE5IiB4Mj0iMjAiIHkyPSIxMTkic3R5bGU9InN0cm9rZTojNTlhZDU5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMCIgeDI9IjIwIiB5Mj0iMTIwInN0eWxlPSJzdHJva2U6IzU4YWM1ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjEiIHgyPSIyMCIgeTI9IjEyMSJzdHlsZT0ic3Ryb2tlOiM1N2FiNTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIyIiB4Mj0iMjAiIHkyPSIxMjIic3R5bGU9InN0cm9rZTojNTVhYjU1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMyIgeDI9IjIwIiB5Mj0iMTIzInN0eWxlPSJzdHJva2U6IzU0YWE1NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjQiIHgyPSIyMCIgeTI9IjEyNCJzdHlsZT0ic3Ryb2tlOiM1M2E5NTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI1IiB4Mj0iMjAiIHkyPSIxMjUic3R5bGU9InN0cm9rZTojNTFhOTUxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNiIgeDI9IjIwIiB5Mj0iMTI2InN0eWxlPSJzdHJva2U6IzUwYTg1MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjYiIHgyPSIyMCIgeTI9IjEyNiJzdHlsZT0ic3Ryb2tlOiM0Y2E2NGM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI4IiB4Mj0iMjAiIHkyPSIxMjgic3R5bGU9InN0cm9rZTojNGJhNjRiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyOSIgeDI9IjIwIiB5Mj0iMTI5InN0eWxlPSJzdHJva2U6IzRhYTU0YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzAiIHgyPSIyMCIgeTI9IjEzMCJzdHlsZT0ic3Ryb2tlOiM0OGE0NDg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMxIiB4Mj0iMjAiIHkyPSIxMzEic3R5bGU9InN0cm9rZTojNDdhNDQ3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMiIgeDI9IjIwIiB5Mj0iMTMyInN0eWxlPSJzdHJva2U6IzQ2YTM0NjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzMiIHgyPSIyMCIgeTI9IjEzMyJzdHlsZT0ic3Ryb2tlOiM0NWEyNDU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM0IiB4Mj0iMjAiIHkyPSIxMzQic3R5bGU9InN0cm9rZTojNDNhMjQzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzNSIgeDI9IjIwIiB5Mj0iMTM1InN0eWxlPSJzdHJva2U6IzQyYTE0MjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzYiIHgyPSIyMCIgeTI9IjEzNiJzdHlsZT0ic3Ryb2tlOiM0MWExNDE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM3IiB4Mj0iMjAiIHkyPSIxMzcic3R5bGU9InN0cm9rZTojM2ZhMDNmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzOCIgeDI9IjIwIiB5Mj0iMTM4InN0eWxlPSJzdHJva2U6IzNlOWYzZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzkiIHgyPSIyMCIgeTI9IjEzOSJzdHlsZT0ic3Ryb2tlOiMzZDlmM2Q7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQwIiB4Mj0iMjAiIHkyPSIxNDAic3R5bGU9InN0cm9rZTojM2M5ZTNjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0MSIgeDI9IjIwIiB5Mj0iMTQxInN0eWxlPSJzdHJva2U6IzNhOWQzYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDIiIHgyPSIyMCIgeTI9IjE0MiJzdHlsZT0ic3Ryb2tlOiMzOTlkMzk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQzIiB4Mj0iMjAiIHkyPSIxNDMic3R5bGU9InN0cm9rZTojMzg5YzM4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NCIgeDI9IjIwIiB5Mj0iMTQ0InN0eWxlPSJzdHJva2U6IzM3OWIzNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDQiIHgyPSIyMCIgeTI9IjE0NCJzdHlsZT0ic3Ryb2tlOiMzMzlhMzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ2IiB4Mj0iMjAiIHkyPSIxNDYic3R5bGU9InN0cm9rZTojMzE5OTMxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NyIgeDI9IjIwIiB5Mj0iMTQ3InN0eWxlPSJzdHJva2U6IzMwOTgzMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDgiIHgyPSIyMCIgeTI9IjE0OCJzdHlsZT0ic3Ryb2tlOiMyZjk4MmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ5IiB4Mj0iMjAiIHkyPSIxNDkic3R5bGU9InN0cm9rZTojMmU5NzJlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MCIgeDI9IjIwIiB5Mj0iMTUwInN0eWxlPSJzdHJva2U6IzJjOTYyYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTEiIHgyPSIyMCIgeTI9IjE1MSJzdHlsZT0ic3Ryb2tlOiMyYjk2MmI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUyIiB4Mj0iMjAiIHkyPSIxNTIic3R5bGU9InN0cm9rZTojMmE5NTJhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MyIgeDI9IjIwIiB5Mj0iMTUzInN0eWxlPSJzdHJva2U6IzI4OTQyODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTQiIHgyPSIyMCIgeTI9IjE1NCJzdHlsZT0ic3Ryb2tlOiMyNzk0Mjc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU1IiB4Mj0iMjAiIHkyPSIxNTUic3R5bGU9InN0cm9rZTojMjY5MzI2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NiIgeDI9IjIwIiB5Mj0iMTU2InN0eWxlPSJzdHJva2U6IzI1OTIyNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTciIHgyPSIyMCIgeTI9IjE1NyJzdHlsZT0ic3Ryb2tlOiMyMzkyMjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU4IiB4Mj0iMjAiIHkyPSIxNTgic3R5bGU9InN0cm9rZTojMjI5MTIyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1OSIgeDI9IjIwIiB5Mj0iMTU5InN0eWxlPSJzdHJva2U6IzIxOTEyMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjAiIHgyPSIyMCIgeTI9IjE2MCJzdHlsZT0ic3Ryb2tlOiMxZjkwMWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYxIiB4Mj0iMjAiIHkyPSIxNjEic3R5bGU9InN0cm9rZTojMWU4ZjFlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MiIgeDI9IjIwIiB5Mj0iMTYyInN0eWxlPSJzdHJva2U6IzFkOGYxZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjIiIHgyPSIyMCIgeTI9IjE2MiJzdHlsZT0ic3Ryb2tlOiMxOThkMTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjwvc3ZnPjxzdmcgaGVpZ2h0PSIxNjMiIHdpZHRoPSI1MCI+PHRleHQgeD0iNSIgeT0iMTkiIGR4PSIwIiBkeT0iMGV4Ij4tIDU8L3RleHQ+PHRleHQgeD0iNSIgeT0iMzciIGR4PSIwIiBkeT0iMGV4Ij4tIDEwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjU1IiBkeD0iMCIgZHk9IjBleCI+LSAxNTwvdGV4dD48dGV4dCB4PSI1IiB5PSI3MyIgZHg9IjAiIGR5PSIwZXgiPi0gMjA8L3RleHQ+PHRleHQgeD0iNSIgeT0iOTEiIGR4PSIwIiBkeT0iMGV4Ij4tIDI1PC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjEwOSIgZHg9IjAiIGR5PSIwZXgiPi0gMzA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTI3IiBkeD0iMCIgZHk9IjBleCI+LSAzNTwvdGV4dD48dGV4dCB4PSI1IiB5PSIxNDUiIGR4PSIwIiBkeT0iMGV4Ij4tIDQwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjE2MyIgZHg9IjAiIGR5PSIwZXgiPi0gNDU8L3RleHQ+PC9zdmc+CgogIDwvdWw+CjwvZGl2Pgo8L2Rpdj4KCjwvYm9keT4KPC9odG1sPgoKPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4KICAubWFwbGVnZW5kIC5sZWdlbmQtdGl0bGUgewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiA5MCU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIHsKICAgIG1hcmdpbjogMDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIHBhZGRpbmc6IDA7CiAgICBmbG9hdDogbGVmdDsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIGxpIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICB9CiAgLm1hcGxlZ2VuZCB1bC5sZWdlbmQtbGFiZWxzIGxpIHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmbG9hdDogbGVmdDsKICAgIGhlaWdodDogMTZweDsKICAgIHdpZHRoOiAzMHB4OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIAogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgIAogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zb3VyY2UgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBjb2xvcjogIzc3NzsKICAgIGNsZWFyOiBib3RoOwogICAgfQogIC5tYXBsZWdlbmQgYSB7CiAgICBjb2xvcjogIzc3NzsKICAgIH0KPC9zdHlsZT4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwX2JlNmM2YzRlMzdmMjRiNWI5MDI3ODY0ZGU5ZmRjYjg4ID0gTC5tYXAoCiAgICAgICAgJ21hcF9iZTZjNmM0ZTM3ZjI0YjViOTAyNzg2NGRlOWZkY2I4OCcsIHsKICAgICAgICBjZW50ZXI6IFswLCAwXSwKICAgICAgICB6b29tOiAyLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwX2JlNmM2YzRlMzdmMjRiNWI5MDI3ODY0ZGU5ZmRjYjg4KTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzkwMjdjMWE2NmRmMjRjNGY5NmJhMjQ1MmI4NTY2OTg5ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF9iZTZjNmM0ZTM3ZjI0YjViOTAyNzg2NGRlOWZkY2I4OCk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2JlNmM2YzRlMzdmMjRiNWI5MDI3ODY0ZGU5ZmRjYjg4KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZWE1Nzg4ZjQ0MTc0ZDZiYjZlN2EyNjVlNjg1NjIyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE5LjYyOTcsIC0xNTUuNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxOTQ3NGU5ODZkMDQ0NjhiZmU4ZmYyOTZlODRmNGJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuMCwgMTM1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2MzE5MDc2ZWNmZTQwOTBiMmNmYjFmOGQ4MzU2MmYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjQuNzYyOCwgMjUuNTU3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODEwMjc4ZjIwYmViNDJhNWE0YTRjNjhlOTczNWQxYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NmVjMWFjOTBmOGU0NzkyOGNmMTUzYjg1MDEwN2M2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zOC43MzkyLCAtNzEuMjc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYWE3NDViODAwMGU0N2JhOTYzZGNjMWQxNmNkNDc5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YTJmN2NiYTA4Mzc0OGJlOTc3NmMzMDg5NTU5OTM1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjUsIDEyOC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YjVmOWY1YWY3MDE0YTc4OWY0NWIxMjZmMmY1ZDJlOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5Y2YzNjc1NmUwYjRmZjU5MGYyNDk4NTQ2ZDk0MDMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi45MjA0OCwgLTkuOTYxMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdhMGNkNGRmZGFmMTRmNTFiMWM4NmZmMjIwODM3ZjRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuOTQwMywgLTk4LjkwNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExZGU5MTc3YWIwYjRlMWJiM2M4NzQyMzAzYmUyMzk3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuODExNCwgNzUuMjY1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTkyYjlkZDhlMzgwNDk5MWFmZmJjZjZmNjNiODI3OWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNGRhMGVmMTdiNzI0MDJlYTlhMTg4YTFlMTQ3YmMyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQxNGZmNTlmYjVmMDRiOThhMzBlM2RhZjkwNWE1NTkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTU1NWI0Y2FlNjAwNGJjNDgzZGUzMGM3ZWI1NzIzZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85N2YxM2M1ZTZjMzk0M2I0YThlM2IwNDIwNmNlNTA2MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjcwODE4MiwgMzkuNTQzNDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZTU2MjY2YzA3N2I0NDY2ODM4MDUyY2YwZTc1MzNmOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyNmUzZWQ5OTExYzQxNmNiM2EyZmJmOTZmODBmYTM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1Y2VmNTNmY2ZlNDQ4NmVhNGY4OTMyOGZiNGU1ZjMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNjI5NywgLTE1NS40M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q3ZWJkNyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1YTA1NmViMjExZjQ3YTE4MWZkYWUzMTBkMmY5OWNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NiMzE4OTYwMmVjOTQ3YmFiNzQ5Y2FlMDFiN2Y5M2E3ID0gJChgPGRpdiBpZD0iaHRtbF9jYjMxODk2MDJlYzk0N2JhYjc0OWNhZTAxYjdmOTNhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhd2ExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhd2FpaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1YTA1NmViMjExZjQ3YTE4MWZkYWUzMTBkMmY5OWNlLnNldENvbnRlbnQoaHRtbF9jYjMxODk2MDJlYzk0N2JhYjc0OWNhZTAxYjdmOTNhNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NWNlZjUzZmNmZTQ0ODZlYTRmODkzMjhmYjRlNWYzMi5iaW5kUG9wdXAocG9wdXBfNDVhMDU2ZWIyMTFmNDdhMTgxZmRhZTMxMGQyZjk5Y2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl84NWNlZjUzZmNmZTQ0ODZlYTRmODkzMjhmYjRlNWYzMi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA4YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZmJjMGI5YTZhYjE0MDc2Yjg0YjMzNzZlYzNkZTE3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYjNkOWIzIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjA2YmM4ZDNkMzEzNDE4N2I2N2Y1NDEwZTU4MmFkZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjM0MWY3MjBmMjNmNGI1NWFkMDQ0N2Y4YWQ2NDA5ZGMgPSAkKGA8ZGl2IGlkPSJodG1sXzIzNDFmNzIwZjIzZjRiNTVhZDA0NDdmOGFkNjQwOWRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDE2NDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmFwYW5lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjA2YmM4ZDNkMzEzNDE4N2I2N2Y1NDEwZTU4MmFkZDYuc2V0Q29udGVudChodG1sXzIzNDFmNzIwZjIzZjRiNTVhZDA0NDdmOGFkNjQwOWRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmYmMwYjlhNmFiMTQwNzZiODRiMzM3NmVjM2RlMTdiLmJpbmRQb3B1cChwb3B1cF9mMDZiYzhkM2QzMTM0MTg3YjY3ZjU0MTBlNTgyYWRkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2JmYmMwYjlhNmFiMTQwNzZiODRiMzM3NmVjM2RlMTdiLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDE1YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NmQ2NTQzNjEyM2U0MzhhOWJiY2MwNWZhMWEwYWZlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhOGQ0YTgiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OWU2ZmFmMWE5NzQ0ODljOTI5YzM4MmFjNDJjMjk5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZTA2YjRiMjUwNTY0YjgzYTkwZWExYjE2NjVjYjY5ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWUwNmI0YjI1MDU2NGI4M2E5MGVhMWIxNjY1Y2I2OWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9maW5uMTMxOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GaW5uaXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc5ZTZmYWYxYTk3NDQ4OWM5MjljMzgyYWM0MmMyOTliLnNldENvbnRlbnQoaHRtbF9lZTA2YjRiMjUwNTY0YjgzYTkwZWExYjE2NjVjYjY5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NmQ2NTQzNjEyM2U0MzhhOWJiY2MwNWZhMWEwYWZlNi5iaW5kUG9wdXAocG9wdXBfNzllNmZhZjFhOTc0NDg5YzkyOWMzODJhYzQyYzI5OWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl82NmQ2NTQzNjEyM2U0MzhhOWJiY2MwNWZhMWEwYWZlNi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAxN2AgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTYyODBjY2MzZmYwNGFlMGI2M2M2YjI1YTJhYjA0Y2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTNkMmEzIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDBhODRkN2RmYzdmNDc0Zjg4YjUzZmNhOGJhYjAzNjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2I4NGFhNjkyY2UxNGE2N2I3ZDk1ZmJjOTlkYThjOTAgPSAkKGA8ZGl2IGlkPSJodG1sXzdiODRhYTY5MmNlMTRhNjdiN2Q5NWZiYzk5ZGE4YzkwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveW9ydTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WW9ydWJhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QwYTg0ZDdkZmM3ZjQ3NGY4OGI1M2ZjYThiYWIwMzY1LnNldENvbnRlbnQoaHRtbF83Yjg0YWE2OTJjZTE0YTY3YjdkOTVmYmM5OWRhOGM5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NjI4MGNjYzNmZjA0YWUwYjYzYzZiMjVhMmFiMDRjZS5iaW5kUG9wdXAocG9wdXBfZDBhODRkN2RmYzdmNDc0Zjg4YjUzZmNhOGJhYjAzNjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl85NjI4MGNjYzNmZjA0YWUwYjYzYzZiMjVhMmFiMDRjZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAxOGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2VmNWJmMGYzNmNkNGQ0ZjhmZTM4OWFkZjI0NWRhMTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzk5Y2Q5OSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwN2YyYTE5MTZkZTQ4NGY4NTZkYjI4YWY0MjJmOWM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlOWUxY2RlNTAwZTRjMDRiNjM1ZWNkNTEzZDQ4ZTRkID0gJChgPGRpdiBpZD0iaHRtbF84ZTllMWNkZTUwMGU0YzA0YjYzNWVjZDUxM2Q0OGU0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hcHUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcHVkdW5ndW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDA3ZjJhMTkxNmRlNDg0Zjg1NmRiMjhhZjQyMmY5Yzcuc2V0Q29udGVudChodG1sXzhlOWUxY2RlNTAwZTRjMDRiNjM1ZWNkNTEzZDQ4ZTRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNlZjViZjBmMzZjZDRkNGY4ZmUzODlhZGYyNDVkYTE5LmJpbmRQb3B1cChwb3B1cF8wMDdmMmExOTE2ZGU0ODRmODU2ZGIyOGFmNDIyZjljNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzNlZjViZjBmMzZjZDRkNGY4ZmUzODlhZGYyNDVkYTE5LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDIwYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NWViMGM2NzlhNTI0M2UzODA0YWQ0NzE0MDg0MWE5NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjOTljZDk5IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjFmOGIxNjkwNDFkNDAzNGE3NzFjZmY2ZWU5ZWIxZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDA1NWMxNTBkYzY4NGFmZWE5NGUwNDJjNjg0MGY4N2QgPSAkKGA8ZGl2IGlkPSJodG1sX2QwNTVjMTUwZGM2ODRhZmVhOTRlMDQyYzY4NDBmODdkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVjYTEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVjYXRlYyBNYXlhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YxZjhiMTY5MDQxZDQwMzRhNzcxY2ZmNmVlOWViMWYzLnNldENvbnRlbnQoaHRtbF9kMDU1YzE1MGRjNjg0YWZlYTk0ZTA0MmM2ODQwZjg3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NWViMGM2NzlhNTI0M2UzODA0YWQ0NzE0MDg0MWE5NC5iaW5kUG9wdXAocG9wdXBfZjFmOGIxNjkwNDFkNDAzNGE3NzFjZmY2ZWU5ZWIxZjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl84NWViMGM2NzlhNTI0M2UzODA0YWQ0NzE0MDg0MWE5NC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAyMGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQzMGQ2ODY3NDQwNDlmMzhlYzUwYzU2ZTUwZmM4ZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy41LCAxMjguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzk0Y2E5NCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2ZjBjNjA5MGU0MjQyZDliYThhM2YzODNhYjIxNDRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxYTk2MTc2MjA4MjQwZWZhMTg4MGVlZTg4MDBhZTdjID0gJChgPGRpdiBpZD0iaHRtbF8zMWE5NjE3NjIwODI0MGVmYTE4ODBlZWU4ODAwYWU3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tvcmUxMjgwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktvcmVhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NmYwYzYwOTBlNDI0MmQ5YmE4YTNmMzgzYWIyMTQ0Zi5zZXRDb250ZW50KGh0bWxfMzFhOTYxNzYyMDgyNDBlZmExODgwZWVlODgwMGFlN2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDQzMGQ2ODY3NDQwNDlmMzhlYzUwYzU2ZTUwZmM4ZDMuYmluZFBvcHVwKHBvcHVwXzk2ZjBjNjA5MGU0MjQyZDliYThhM2YzODNhYjIxNDRmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNDQzMGQ2ODY3NDQwNDlmMzhlYzUwYzU2ZTUwZmM4ZDMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMjFgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiYWM1ODFiZGE0YTRlZWRhNzUyZWRmNWYyYmJhZmIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjYzMDgsIDEzMC45NDg5OTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzhmYzc4ZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3YWMyZmI3OGRlNDQ3NmU5YjkyZWYyMTczZjgwNGExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRjYjY0NWVmZTFhZDQ4N2Q4YTYyOTE2OTcwNWM5YWQ0ID0gJChgPGRpdiBpZD0iaHRtbF80Y2I2NDVlZmUxYWQ0ODdkOGE2MjkxNjk3MDVjOWFkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rpd2kxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpd2k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjdhYzJmYjc4ZGU0NDc2ZTliOTJlZjIxNzNmODA0YTEuc2V0Q29udGVudChodG1sXzRjYjY0NWVmZTFhZDQ4N2Q4YTYyOTE2OTcwNWM5YWQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhiYWM1ODFiZGE0YTRlZWRhNzUyZWRmNWYyYmJhZmIyLmJpbmRQb3B1cChwb3B1cF9iN2FjMmZiNzhkZTQ0NzZlOWI5MmVmMjE3M2Y4MDRhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzhiYWM1ODFiZGE0YTRlZWRhNzUyZWRmNWYyYmJhZmIyLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDIyYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MmE1NmY4YmM0NWQ0OWZhYTRkZjQ3MmUwYjEwMGE3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuOTIwNDgsIC05Ljk2MTI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjOGZjNzhmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDE3YTQ3ZWQzYjYzNDYzYWIwNWE1YjFhNTZiYmVkMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODA2ZTQzNDAzYzRhNDNmN2IzM2VmMmJmOWE5YmU3MGIgPSAkKGA8ZGl2IGlkPSJodG1sXzgwNmU0MzQwM2M0YTQzZjdiMzNlZjJiZjlhOWJlNzBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGliZTEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGliZXJpYSBLcGVsbGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDE3YTQ3ZWQzYjYzNDYzYWIwNWE1YjFhNTZiYmVkMzMuc2V0Q29udGVudChodG1sXzgwNmU0MzQwM2M0YTQzZjdiMzNlZjJiZjlhOWJlNzBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyYTU2ZjhiYzQ1ZDQ5ZmFhNGRmNDcyZTBiMTAwYTcwLmJpbmRQb3B1cChwb3B1cF9kMTdhNDdlZDNiNjM0NjNhYjA1YTViMWE1NmJiZWQzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzQyYTU2ZjhiYzQ1ZDQ5ZmFhNGRmNDcyZTBiMTAwYTcwLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDIyYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZTY4NDc2ZTQ3YTg0Y2M0YmFkNTFhNmIxYzI4MWMwMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0Ljk0MDMsIC05OC45MDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjOGZjNzhmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzlhYTZkYWVlYjRlNDBlMzg4M2NkMTI2ODhmOWUzMTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDg1ZDZjMzhjYWYxNGEyNjgxYWRiNTc2ZGM0Y2Y1MTIgPSAkKGA8ZGl2IGlkPSJodG1sX2Q4NWQ2YzM4Y2FmMTRhMjY4MWFkYjU3NmRjNGNmNTEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2lvdzEyNjYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2lvd2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzlhYTZkYWVlYjRlNDBlMzg4M2NkMTI2ODhmOWUzMTkuc2V0Q29udGVudChodG1sX2Q4NWQ2YzM4Y2FmMTRhMjY4MWFkYjU3NmRjNGNmNTEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdlNjg0NzZlNDdhODRjYzRiYWQ1MWE2YjFjMjgxYzAzLmJpbmRQb3B1cChwb3B1cF8zOWFhNmRhZWViNGU0MGUzODgzY2QxMjY4OGY5ZTMxOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzdlNjg0NzZlNDdhODRjYzRiYWQ1MWE2YjFjMjgxYzAzLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDIyYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMTY5NjVkNWNkZDM0YWIwYWUxMjZmOTVlZjhjYmE0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjgxMTQsIDc1LjI2NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4NWMyODUiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTJiNjg4Nzg4YTg0YzhkYmMyM2Y5ODEzZDMwOTlkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MjY0NWIyNGVjZjM0MjRjYmMzYWU4ZGFlNzk3N2U0NiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDI2NDViMjRlY2YzNDI0Y2JjM2FlOGRhZTc5NzdlNDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90dWx1MTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdWx1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhlMmI2ODg3ODhhODRjOGRiYzIzZjk4MTNkMzA5OWRjLnNldENvbnRlbnQoaHRtbF80MjY0NWIyNGVjZjM0MjRjYmMzYWU4ZGFlNzk3N2U0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMTY5NjVkNWNkZDM0YWIwYWUxMjZmOTVlZjhjYmE0YS5iaW5kUG9wdXAocG9wdXBfOGUyYjY4ODc4OGE4NGM4ZGJjMjNmOTgxM2QzMDk5ZGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8xMTY5NjVkNWNkZDM0YWIwYWUxMjZmOTVlZjhjYmE0YS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAyNGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWZhZjEwY2Q0ODljNDdlN2IzNDQzZTZjZjQyMjNhNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjN2ZjMDdmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY0NmZjMzM0ZjI3NGMyMzhlYTJiOTQ2NDUwNzU2YmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzNkNzcyYTMzNmZlNDU0NWFjOGJlMzllZjA4YzRiMDcgPSAkKGA8ZGl2IGlkPSJodG1sX2MzZDc3MmEzMzZmZTQ1NDVhYzhiZTM5ZWYwOGM0YjA3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVya2lzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjQ2ZmMzMzRmMjc0YzIzOGVhMmI5NDY0NTA3NTZiYS5zZXRDb250ZW50KGh0bWxfYzNkNzcyYTMzNmZlNDU0NWFjOGJlMzllZjA4YzRiMDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWZhZjEwY2Q0ODljNDdlN2IzNDQzZTZjZjQyMjNhNjAuYmluZFBvcHVwKHBvcHVwX2ZmNDZmYzMzNGYyNzRjMjM4ZWEyYjk0NjQ1MDc1NmJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMWZhZjEwY2Q0ODljNDdlN2IzNDQzZTZjZjQyMjNhNjAuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMjVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiMzViNDk2MmM5YTRkYWViMWRjZGVkYWZhOTVjZjAzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzdhYmQ3YSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhMGIxYjEzMzM4MDRjZDU4NWZhMDhjMTMwMjBjYzc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlNGJiYTEwOGYyZDQyMTA4ODU4YzEyNDVjODM1ZWExID0gJChgPGRpdiBpZD0iaHRtbF82ZTRiYmExMDhmMmQ0MjEwODg1OGMxMjQ1YzgzNWVhMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2h1bmcxMjc0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkh1bmdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYTBiMWIxMzMzODA0Y2Q1ODVmYTA4YzEzMDIwY2M3OS5zZXRDb250ZW50KGh0bWxfNmU0YmJhMTA4ZjJkNDIxMDg4NThjMTI0NWM4MzVlYTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2IzNWI0OTYyYzlhNGRhZWIxZGNkZWRhZmE5NWNmMDMuYmluZFBvcHVwKHBvcHVwX2FhMGIxYjEzMzM4MDRjZDU4NWZhMDhjMTMwMjBjYzc5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfY2IzNWI0OTYyYzlhNGRhZWIxZGNkZWRhZmE5NWNmMDMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMjZgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgzZjdhYjkxZjNjMzRlM2FiM2FiOWQzMWVjNzc4OTE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzcwYjg3MCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjNTQ5ZjlmMGMwZDQwNzQ4YjYyZTc1ZjRiMTNhZDhmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlZTc4ZjBhYjY4ZDQzZWVhN2Q5ZDIwZmQ0MGMwM2ZmID0gJChgPGRpdiBpZD0iaHRtbF82ZWU3OGYwYWI2OGQ0M2VlYTdkOWQyMGZkNDBjMDNmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdlb3JnaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjNTQ5ZjlmMGMwZDQwNzQ4YjYyZTc1ZjRiMTNhZDhmLnNldENvbnRlbnQoaHRtbF82ZWU3OGYwYWI2OGQ0M2VlYTdkOWQyMGZkNDBjMDNmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84M2Y3YWI5MWYzYzM0ZTNhYjNhYjlkMzFlYzc3ODkxOC5iaW5kUG9wdXAocG9wdXBfNWM1NDlmOWYwYzBkNDA3NDhiNjJlNzVmNGIxM2FkOGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl84M2Y3YWI5MWYzYzM0ZTNhYjNhYjlkMzFlYzc3ODkxOC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAyOGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGY2ZWRiYmU3MGU1NGIwMzgwNzU1MzUwNDNiYmJjODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNzBiODcwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOWVkNTQ2YWM2MDk1NGY0OGE3ZDE3MDVjZDRjM2M4MzIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjFjZjFkNjhiMDI3NDE1NTg5YjMxNmYxMTZmODVmYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGZiNjE5ZmJkOTU2NDRjNjlkN2I2ODBmM2U1YmM2YTQgPSAkKGA8ZGl2IGlkPSJodG1sX2RmYjYxOWZiZDk1NjQ0YzY5ZDdiNjgwZjNlNWJjNmE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrbzEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFrb3RhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYxY2YxZDY4YjAyNzQxNTU4OWIzMTZmMTE2Zjg1ZmIwLnNldENvbnRlbnQoaHRtbF9kZmI2MTlmYmQ5NTY0NGM2OWQ3YjY4MGYzZTViYzZhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZjZlZGJiZTcwZTU0YjAzODA3NTUzNTA0M2JiYmM4Ny5iaW5kUG9wdXAocG9wdXBfNjFjZjFkNjhiMDI3NDE1NTg5YjMxNmYxMTZmODVmYjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80ZjZlZGJiZTcwZTU0YjAzODA3NTUzNTA0M2JiYmM4Ny5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAyOGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDEwNDQxYTRmYWYzNDc4ZmEyNjRjYTUzOTc2NWM3YzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzY2YjM2NiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwMzQ1YjEwYWE1MzRkMTE4NGQxMDkwZDViMjMzOWY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxNjE5YzhkMmQ4ZTQ0YjY4ODNjNGI4NmFmODljZGQwID0gJChgPGRpdiBpZD0iaHRtbF80MTYxOWM4ZDJkOGU0NGI2ODgzYzRiODZhZjg5Y2RkMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FtaGExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFtaGFyaWM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjAzNDViMTBhYTUzNGQxMTg0ZDEwOTBkNWIyMzM5ZjUuc2V0Q29udGVudChodG1sXzQxNjE5YzhkMmQ4ZTQ0YjY4ODNjNGI4NmFmODljZGQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxMDQ0MWE0ZmFmMzQ3OGZhMjY0Y2E1Mzk3NjVjN2MzLmJpbmRQb3B1cChwb3B1cF9mMDM0NWIxMGFhNTM0ZDExODRkMTA5MGQ1YjIzMzlmNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzAxMDQ0MWE0ZmFmMzQ3OGZhMjY0Y2E1Mzk3NjVjN2MzLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDMwYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Y2ZmZDU1YzhjMTE0NTI0YTMzMjVjMzY1Y2NiNGQ0YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyMzkyMjMiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF85ZWQ1NDZhYzYwOTU0ZjQ4YTdkMTcwNWNkNGMzYzgzMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hODU4OTE1Yzk5ZTA0YmNmYWYzNDI2ZmJkM2Y0MWU3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YzI3N2U2NzAyYmY0YjZjYmJlNGYyNjZjZmFmNTBkOCA9ICQoYDxkaXYgaWQ9Imh0bWxfOGMyNzdlNjcwMmJmNGI2Y2JiZTRmMjY2Y2ZhZjUwZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90bGluMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UbGluZ2l0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4NTg5MTVjOTllMDRiY2ZhZjM0MjZmYmQzZjQxZTc5LnNldENvbnRlbnQoaHRtbF84YzI3N2U2NzAyYmY0YjZjYmJlNGYyNjZjZmFmNTBkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Y2ZmZDU1YzhjMTE0NTI0YTMzMjVjMzY1Y2NiNGQ0Yi5iaW5kUG9wdXAocG9wdXBfYTg1ODkxNWM5OWUwNGJjZmFmMzQyNmZiZDNmNDFlNzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl84Y2ZmZDU1YzhjMTE0NTI0YTMzMjVjMzY1Y2NiNGQ0Yi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA0M2AgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTkwNTE5ZjczZTNhNGJhOWJlMjkyYWQxMWVmMGFlZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNS4yNjkxOCwgMzUuNDgwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBmODgwZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzllZDU0NmFjNjA5NTRmNDhhN2QxNzA1Y2Q0YzNjODMyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxMzc5ZjFiZjU1MDQ1YThhMTQzM2Y2ODRkZjg4MDFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2YjVlN2VlYmE1YzRjZGJhNThkZDJjODNlYzBkMzMwID0gJChgPGRpdiBpZD0iaHRtbF83NmI1ZTdlZWJhNWM0Y2RiYTU4ZGQyYzgzZWMwZDMzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NhbmQxMjczIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNhbmRhd2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzEzNzlmMWJmNTUwNDVhOGExNDMzZjY4NGRmODgwMWQuc2V0Q29udGVudChodG1sXzc2YjVlN2VlYmE1YzRjZGJhNThkZDJjODNlYzBkMzMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk5MDUxOWY3M2UzYTRiYTliZTI5MmFkMTFlZjBhZWZjLmJpbmRQb3B1cChwb3B1cF8zMTM3OWYxYmY1NTA0NWE4YTE0MzNmNjg0ZGY4ODAxZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzk5MDUxOWY3M2UzYTRiYTliZTI5MmFkMTFlZjBhZWZjLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDQ3YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKPC9zY3JpcHQ+" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>



`Go back up <#up>`__
