-
Notifications
You must be signed in to change notification settings - Fork 2
/
pkglist.txt
executable file
·56 lines (56 loc) · 82.3 KB
/
pkglist.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
{
"1.0.0": {},
"1.1.0": {
"update": true,
"description": "Fixed urgent bugs, updated for pre beta-release",
"version": "1.1.0",
"filesToEdit": true,
"filesToAdd": false,
"urgent": true,
"editedFiles": ["main.js"],
"addedFiles": [],
"editSummary": {
"main.js": "Y29uc3QgeyBOb3RpZmljYXRpb24sIEJyb3dzZXJXaW5kb3csIGFwcCwgTWVudSwgc2hlbGwsIGRpYWxvZyB9ID0gcmVxdWlyZSgiZWxlY3Ryb24iKTsNCmNvbnN0IGJ0b2EgPSByZXF1aXJlKCJidG9hIik7DQpjb25zdCBwYXRoID0gcmVxdWlyZSgicGF0aCIpOw0KY29uc3Qgcm9vdFBhdGggPSByZXF1aXJlKCJlbGVjdHJvbi1yb290LXBhdGgiKS5yb290UGF0aDsNCmNvbnN0IGxvY2F0aW9uID0gcGF0aC5qb2luKHJvb3RQYXRoLCAicGFja2FnZS5qc29uIik7DQpjb25zdCBmcyA9IHJlcXVpcmUoImZzIik7DQpjb25zdCBuYXRpdmVUaGVtZSA9IHJlcXVpcmUoImVsZWN0cm9uIikubmF0aXZlVGhlbWU7DQpjb25zdCB7IG1vdmVUb0FwcGxpY2F0aW9ucyB9ID0gcmVxdWlyZSgiZWxlY3Ryb24tbGV0cy1tb3ZlIik7DQpjb25zdCB7IHVzZXJJbmZvIH0gPSByZXF1aXJlKCJvcyIpOw0KY29uc3QgZXhlYyA9IHJlcXVpcmUoImNoaWxkX3Byb2Nlc3MiKS5leGVjOw0KY29uc3QgaHR0cCA9IHJlcXVpcmUoImh0dHBzIik7DQpjb25zdCBhdG9iID0gcmVxdWlyZSgiYXRvYiIpOw0KY29uc3QgU2VuZGVyID0gcmVxdWlyZSgiZWxlY3Ryb24tc2VuZGVyIik7DQpjb25zdCBBY2N1cml6ZXIgPSByZXF1aXJlKCJhY2N1cml6ZXIiKTsNCmNvbnN0IGxvY2FsU3RvcmFnZSA9IG5ldyAocmVxdWlyZSgibm9kZS1sb2NhbHN0b3JhZ2UiKS5Mb2NhbFN0b3JhZ2UpKCIuL3N0b3JhZ2UiKTsNCg0KaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidmVyc2lvbiIpKSB7DQogIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ2ZXJzaW9uIiwgIjEuMC4wIik7DQp9DQoNCmxldCBhcHBWZXJzaW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInZlcnNpb24iKSB8fCAiMS4wLjAiOw0KDQoNCmxldCB1cGRhdGVJbmZvID0ge307DQoNCmxldCByZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KHsNCiAgaG9zdDogInBhcmtpbmdtYXN0ZXIubWwiLA0KICBwYXRoOiAiL3BrZ2xpc3QudHh0Ig0KfSwgZnVuY3Rpb24ocmVzKSB7DQogIGxldCBkYXRhID0gIiI7DQogIHJlcy5vbigiZGF0YSIsIGZ1bmN0aW9uKGNodW5rKSB7DQogICAgZGF0YSArPSBjaHVuazsNCiAgfSk7DQogIHJlcy5vbigiZW5kIiwgZnVuY3Rpb24oKSB7DQogICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7DQogICAgbGV0IG5leHRWZXJzaW9uID0gT2JqZWN0LmtleXMoZGF0YSlbT2JqZWN0LmtleXMoZGF0YSkuaW5kZXhPZihhcHBWZXJzaW9uKSArIDFdOw0KICAgIGNvbnNvbGUubG9nKG5leHRWZXJzaW9uLCBhcHBWZXJzaW9uKQ0KICAgIGlmICghIW5leHRWZXJzaW9uKSByZXR1cm4gdXBkYXRlSW5mbyA9IGRhdGFbbmV4dFZlcnNpb25dOw0KICAgIHVwZGF0ZUluZm8gPSBkYXRhW2FwcFZlcnNpb25dOw0KICB9KTsNCn0pOw0KDQpyZXF1ZXN0Lm9uKCJlcnJvciIsIGZ1bmN0aW9uKGUpIHsNCiAgY29uc29sZS5sb2coZS5tZXNzYWdlKTsNCn0pOw0KDQpyZXF1ZXN0LmVuZCgpOw0KbmF0aXZlVGhlbWUudGhlbWVTb3VyY2UgPSAibGlnaHQiOw0KDQpmdW5jdGlvbiBub3RpZnkodCwgbSwgdykgew0KICBzZXRUaW1lb3V0KCgpID0+IHcud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYG5ldyBOb3RpZmljYXRpb24oIlBhcmtpbmcgTWFzdGVyIDIuMCBOb3RpZmllciIsIHsgYm9keTogIiR7bX0iIH0pO2ApLCAxMDAwKTsNCn0NCg0KZnVuY3Rpb24gYWxlcnQodGl0bGUgPSAiIiwgdGV4dCA9ICIiLCBidXR0b25zID0gW10pIHsNCiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgew0KICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZSgvXCIvZ2ksIGBcXCJgKTsNCiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cIi9naSwgYFxcImApOw0KICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYA0KICAgIHN3YWxXaXRoUmV0dXJuKHsNCiAgICAgIHRpdGxlOiAiJHt0aXRsZX0iLA0KICAgICAgdGV4dDogIiR7dGV4dH0iLA0KICAgICAgJHtidXR0b25zLmxlbmd0aCA8IDEgPyAiYnV0dG9uOiBmYWxzZSIgOiBidXR0b25zLmxlbmd0aCA8IDIgPyBgYnV0dG9uOiAiJHtidXR0b25zWzBdfSJgIDogYGJ1dHRvbnM6IFsiJHtidXR0b25zWzBdfSIsICIke2J1dHRvbnNbMV19Il1gfQ0KICAgIH0pOw0KICAgIGApOw0KICAgIFNlbmRlci5yZWNlaXZlKG1haW5XaW5kb3csICJhbGVydE91dHB1dCIsIChlKSA9PiB7DQogICAgICBpZiAoYnV0dG9ucy5sZW5ndGggPCAyKSBlID0gInRydWUiOw0KICAgICAgZSA9IEpTT04ucGFyc2UoZSk7DQogICAgICBpZiAoZSkgcmVzb2x2ZSgpOw0KICAgICAgaWYgKCFlKSByZWplY3QoKTsNCiAgICB9KTsNCiAgfSk7DQp9DQoNCmZ1bmN0aW9uIGluaXQoKSB7DQogIHNldEludGVydmFsKCgpID0+IHsNCiAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGANCiAgICBmdW5jdGlvbiBzd2FsV2l0aFJldHVybigpIHsNCiAgICAgIHN3YWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS50aGVuKChlKSA9PiB7DQogICAgICAgIGlmIChlKSByZXR1cm4gU2VuZGVyLnNlbmQoImFsZXJ0T3V0cHV0IiwgW3RydWVdKTsNCiAgICAgICAgaWYgKCFlKSByZXR1cm4gU2VuZGVyLnNlbmQoImFsZXJ0T3V0cHV0IiwgW2ZhbHNlXSk7DQogICAgICB9KTsNCiAgICB9DQogICAgYCk7DQogIH0sIDIwMCk7DQogIC8vIEdldCB1cGRhdGUgaW5mbw0KICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICBpZiAodXBkYXRlSW5mby51cGRhdGUgJiYgdXBkYXRlSW5mby52ZXJzaW9uICE9PSBhcHBWZXJzaW9uKSB7DQogICAgICBBY2N1cml6ZXIoIm11bHRpIiwgNSwgew0KICAgICAgICBmdW5jdGlvbnM6IFsibmV0d29yayIsICJkb3dubG9hZCJdLA0KICAgICAgICB1cmw6ICJodHRwczovL3BhcmtpbmdtYXN0ZXIubWwvcGtnbGlzdC50eHQiDQogICAgICB9KS50aGVuKHRpbWUgPT4gew0KICAgICAgICB0aW1lICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDkpOw0KICAgICAgICBsZXQgc2l6ZSA9IHVwZGF0ZUluZm8uZmlsZXNUb0VkaXQgPyAoT2JqZWN0LnZhbHVlcyh1cGRhdGVJbmZvLmVkaXRTdW1tYXJ5KS5tYXAoeCA9PiB7IHJldHVybiB4Lmxlbmd0aCB9KS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBhKSA9PiB7IHJldHVybiBhY2N1bXVsYXRvciArIGEgfSwgMCkgKyAxMDI0KSAvIDEwMjQgOiAodXBkYXRlSW5mby5maWxlc1RvQWRkID8gdXBkYXRlSW5mby5hZGRlZEZpbGVzLmxlbmd0aCAqIDEwMjQgOiAwKSAvIDEwMjQ7DQogICAgICAgIHNpemUgPSBzaXplLnRvRml4ZWQoMik7DQogICAgICAgIGFsZXJ0KCJOZXcgdXBkYXRlcyBhdmFpbGFibGUiLCAiXCIiICsgdXBkYXRlSW5mby5kZXNjcmlwdGlvbiArICJcIlxcblxcblVwZGF0ZSB2ZXJzaW9uOiAiICsgdXBkYXRlSW5mby52ZXJzaW9uICsgIlxcblVwZGF0ZSBzaXplOiAiICsgc2l6ZSArICJtYlxcblVwZGF0ZSB0aW1lOiAiICsgdGltZSArICJzXFxuXFxuV291bGQgeW91IGxpa2UgdG8gdXBkYXRlIG5vdz8iLCBbIk5vIiwgIlllcyJdKS50aGVuKCgpID0+IHsNCiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoInN3YWwuY2xvc2UoKSIpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oInZlcnNpb24iLCB1cGRhdGVJbmZvLnZlcnNpb24pOw0KICAgICAgICAgICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KG1haW5XaW5kb3csIHsNCiAgICAgICAgICAgICAgdGl0bGU6ICJBcHAgaXMgdXAgdG8gZGF0ZSIsDQogICAgICAgICAgICAgIG1lc3NhZ2U6ICJUaGUgYXBwbGljYXRpb24gd2lsbCBub3cgcmVzdGFydCBmb3IgdGhlIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QiLA0KICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7DQogICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpOw0KICAgICAgICAgICAgICBhcHAuZXhpdCgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgfSwgKHRpbWUgLSAwKSAqIDEwMDApOw0KICAgICAgICAgIGFsZXJ0KCJVcGRhdGluZy4uLiIsICJQbGVhc2Ugd2FpdCwgdGhpcyB3aWxsIG9ubHkgdGFrZSAiICsgdGltZS50b0ZpeGVkKDApICsgIiBzZWNvbmRzISIpOw0KICAgICAgICAgIGlmICh1cGRhdGVJbmZvLmZpbGVzVG9BZGQpIHsNCiAgICAgICAgICAgIHVwZGF0ZUluZm8uYWRkZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4gew0KICAgICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlKSkgcmV0dXJuOw0KICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSk7DQogICAgICAgICAgICAgIHN0cmVhbS5lbmQoKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodXBkYXRlSW5mby5maWxlc1RvRWRpdCkgew0KICAgICAgICAgICAgdXBkYXRlSW5mby5lZGl0ZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4gew0KICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZSkpIHJldHVybjsNCiAgICAgICAgICAgICAgbGV0IGRhdGEgPSAoYXRvYih1cGRhdGVJbmZvLmVkaXRTdW1tYXJ5W2ZpbGVdKSk7DQogICAgICAgICAgICAgIHZhciB3cml0ZVN0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZpbGUpOw0KICAgICAgICAgICAgICB3cml0ZVN0cmVhbS53cml0ZShkYXRhKTsNCiAgICAgICAgICAgICAgd3JpdGVTdHJlYW0uZW5kKCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgfSk7DQogICAgfQ0KICB9LCAzMDAwKTsNCiAgY29uc3QgZG9ja01lbnUgPSBNZW51LmJ1aWxkRnJvbVRlbXBsYXRlKFt7DQogICAgbGFiZWw6ICJOZXcgV2luZG93IiwNCiAgICBjbGljaygpIHsgaW5pdCgpIH0NCiAgfSwgew0KICAgICAgbGFiZWw6ICJOZXcgV2luZG93IHdpdGggU2V0dGluZ3MiLA0KICAgICAgc3VibWVudTogWw0KICAgICAgICB7IGxhYmVsOiAiQmFzaWMiIH0sDQogICAgICAgIHsgbGFiZWw6ICJQcm8iIH0NCiAgICAgIF0NCiAgICB9LA0KICAgIHsgbGFiZWw6ICJOZXcgQ29tbWFuZC4uLiIgfQ0KICBdKTsNCiAgYXBwLmRvY2suc2V0TWVudShkb2NrTWVudSk7DQogIG1haW5XaW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdyh7DQogICAgc2hvdzogZmFsc2UsDQogICAgd2lkdGg6IDEyODAsDQogICAgaGVpZ2h0OiA4MDAsDQogICAgaGFzU2hhZG93OiBmYWxzZSwNCiAgICBpY29uOiBfX2Rpcm5hbWUgKyAiL2ljb24uaWNucyIsDQogICAgY2VudGVyOiB0cnVlDQogIH0pOw0KICBTZW5kZXIuYXBwZW5kKG1haW5XaW5kb3cpOw0KICBtYWluV2luZG93LmxvYWRGaWxlKCJibGFuayIpOw0KICBmcy5leGlzdHNTeW5jKCIvVXNlcnMvIiArIHVzZXJJbmZvKCkudXNlcm5hbWUgKyAiL0FwcGxpY2F0aW9ucy9QYXJraW5nIE1hc3RlciAyLjAuYXBwIikgfHwgbW92ZVRvQXBwbGljYXRpb25zKGZ1bmN0aW9uKGVyciwgbW92ZWQpIHsNCiAgICBpZiAoZXJyKSB7DQogICAgICBub3RpZnkoIiIsIGVyciwgbWFpbldpbmRvdyk7DQogICAgfQ0KICAgIGlmICghbW92ZWQpIHsNCiAgICAgIG5vdGlmeSgiIiwgbW92ZWQsIG1haW5XaW5kb3cpOw0KICAgIH0NCiAgfSk7DQogIGxldCBjID0gMDsNCiAgbGV0IHByb2dyZXNzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7DQogICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KHsNCiAgICAgIHR5cGU6ICJwcm9ncmVzcyINCiAgICB9KQ0KICB9LCAxMDApOw0KICBsZXQgY2xvc2VldnQgPSAoZXZlbnQpID0+IHsNCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOzsNCiAgICBsZXQgb3BhYyA9IDEuMDsNCiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7DQogICAgICBpZiAob3BhYyA8PSAwLjApIHsNCiAgICAgICAgcmV0dXJuIGZvcmNlUXVpdCgpOw0KICAgICAgfQ0KICAgICAgb3BhYyAtPSAuMTsNCiAgICAgIG1haW5XaW5kb3cuc2V0T3BhY2l0eShvcGFjKTsNCiAgICB9LCAxKTsNCiAgfQ0KICBmdW5jdGlvbiBmb3JjZVF1aXQoKSB7DQogICAgY2xvc2VldnQgPSB1bmRlZmluZWQ7DQogICAgbWFpbldpbmRvdy5jbG9zZSgpOw0KICB9DQogIG1haW5XaW5kb3cub24oImNsb3NlIiwgKGUpID0+IGNsb3NlZXZ0KGUpKTsNCiAgZ2V0UG9pbnRzKCk7DQogIGZ1bmN0aW9uIHJlbmRlclByb2Nlc3NFeGVjdXRpb25zKHByb2Nlc3Nfd2luZG93LCBoYW5kbGVyLCBjYWxsYmFjaykgew0KICAgIHByb2Nlc3Nfd2luZG93LndlYkNvbnRlbnRzLm9uKCJjb25zb2xlLW1lc3NhZ2UiLCBmdW5jdGlvbihyLCBlLCBpKSB7DQogICAgICBpZiAoaS5zcGxpdCgiWyIpWzBdID09ICgiI0VsZWN0cm9uOiIgKyBoYW5kbGVyLnRyaW0oKSArICIgIikpIHsNCiAgICAgICAgY2FsbGJhY2soaS5zcGxpdCgiWyIpWzFdLnNwbGl0KCIiKS5yZXZlcnNlKCkuc3BsaWNlKDEpLnJldmVyc2UoKS5qb2luKCIiKSk7DQogICAgICB9DQogICAgfSk7DQogIH0NCiAgZnVuY3Rpb24gZ2V0UG9pbnRzKCkgew0KICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYGNvbnNvbGUubG9nKCIjRWxlY3Ryb246cmV0dXJuX3BvaW50cyBbIiArIGxvY2FsU3RvcmFnZVsiY3VycmVudF9wdHMiXSArICJdIilgKQ0KICAgIHJlbmRlclByb2Nlc3NFeGVjdXRpb25zKG1haW5XaW5kb3csICJyZXR1cm5fcG9pbnRzIiwgKHB0cykgPT4gew0KICAgICAgbm90aWZ5KCJQYXJraW5nIE1hc3RlciAyLjAiLCAiV2VsY29tZSBiYWNrISBZb3UgY3VycmVudGx5IGhhdmUgIiArIHB0cyArICIgYXZhaWxhYmxlIHBvaW50cyIsIG1haW5XaW5kb3cpOw0KICAgIH0pOw0KICB9DQogIHJlbmRlclByb2Nlc3NFeGVjdXRpb25zKG1haW5XaW5kb3csICJkaWFsb2dfYm94IiwgKG1zZykgPT4gew0KICAgIGNvbnN0IGRpYWxvZyA9IG5ldyBCcm93c2VyV2luZG93KHsNCiAgICAgIGZyYW1lOiBmYWxzZSwNCiAgICAgIGhhc1NoYWRvdzogZmFsc2UsDQogICAgICB0aXRsZTogIldhcm5pbmciLA0KICAgICAgdGl0bGVCYXJTdHlsZTogImhpZGRlbiIsDQogICAgICBiYWNrZ3JvdW5kQ29sb3I6ICIjZmZmIiwNCiAgICAgIHdpZHRoOiA0MDAsDQogICAgICBoZWlnaHQ6IDI1MCwNCiAgICAgIGFsd2F5c09uVG9wOiB0cnVlLA0KICAgICAgcGFyZW50OiBtYWluV2luZG93LA0KICAgICAgY2xvc2FibGU6IGZhbHNlLA0KICAgICAgbWluaW1pemFibGU6IGZhbHNlLA0KICAgICAgbWF4aW1pemFibGU6IGZhbHNlLA0KICAgICAgbW92YWJsZTogZmFsc2UsDQogICAgICBzaG93OiBmYWxzZQ0KICAgIH0pOw0KICAgIGRpYWxvZy5sb2FkRmlsZSgiYmxhbmsiKTsNCiAgICBkaWFsb2cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYGRvY3VtZW50LmJvZHkuc3R5bGUgPSAibWFyZ2luOiAwOyBwYWRkaW5nOiAtMnB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBwb3NpdGlvbjogYWJzb2x1dGU7IGJvcmRlcjogMnB4IHNvbGlkICNkZGQ7IHdpZHRoOiA5OSU7IGhlaWdodDogOTguNCU7IjsgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gXGANCiAgICA8aDEgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNkZGQ7Ij5XYXJuaW5nPC9oMT4NCiAgICBcYDtgKTsNCiAgICBkaWFsb2cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IFxgDQogICAgPGJyPg0KICAgIDxwIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojZGRkOyI+JHtkZWNvZGVVUklDb21wb25lbnQobXNnKX08L3A+DQogICAgXGA7YCk7DQogICAgZGlhbG9nLndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBcYA0KICAgIDxicj4NCiAgICA8YnV0dG9uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMyLjUlO2JhY2tncm91bmQ6I2RkZDtjb2xvcjojZmZmO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtwYWRkaW5nOjRweCA1cHg7Ym9yZGVyLXJhZGl1czozcHg7bWFyZ2luOjVweDthbGlnbjpyaWdodDsiIGFsaWduPSJyaWdodCIgb25jbGljaz0id2luZG93LmNsb3NlKCkiPkNhbmNlbDwvYnV0dG9uPg0KICAgIDxidXR0b24gc3R5bGU9ImN1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzIuNSU7YmFja2dyb3VuZDojZGRkO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6NHB4IDVweDtib3JkZXItcmFkaXVzOjNweDttYXJnaW46NXB4O2FsaWduOnJpZ2h0OyIgYWxpZ249InJpZ2h0IiBvbmNsaWNrPSJjb25zb2xlLmxvZygiI0VsZWN0cm9uOmNsb3NlX2FsbF93aW5kb3dzIFtdIikiPkNvbmZpcm08L2J1dHRvbj4NCiAgICBcYDtgKTsNCiAgICByZW5kZXJQcm9jZXNzRXhlY3V0aW9ucyhkaWFsb2csICJjbG9zZV9hbGxfd2luZG93cyIsICgpID0+IHsNCiAgICAgIGxldCBvcGFjID0gMTsNCiAgICAgIHNldEludGVydmFsKGZ1bmN0aW9uKCkgew0KICAgICAgICBpZiAob3BhYyA+IDApIHsNCiAgICAgICAgICBvcGFjICs9IC0uMTsNCiAgICAgICAgICBtYWluV2luZG93LnNldE9wYWNpdHkob3BhYyk7DQogICAgICAgICAgZGlhbG9nLnNldE9wYWNpdHkob3BhYyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgYXBwLnF1aXQoKTsNCiAgICAgICAgICBkaWFsb2cuYmx1cigpOw0KICAgICAgICAgIG1haW5XaW5kb3cuYmx1cigpOw0KICAgICAgICAgIGRpYWxvZy5jbG9zZSgpOw0KICAgICAgICAgIG1haW5XaW5kb3cuY2xvc2UoKTsNCiAgICAgICAgfQ0KICAgICAgfSwgMy41KTsNCiAgICB9KTsNCiAgICBkaWFsb2cuc2hvdygpOw0KICB9KTsNCiAgbWFpbldpbmRvdy53ZWJDb250ZW50cy5leGVjdXRlSmF2YVNjcmlwdCgiIXdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lICYmIGNvbnNvbGUubG9nKCcjRWxlY3Ryb246b2ZmbGluZV9uZXR3b3JrX3JlcG9ydCBbXScpIik7DQogIG1haW5XaW5kb3cubG9hZFVSTCgiaHR0cHM6Ly9wYXJraW5nbWFzdGVyLm1sL2luZGV4Lmh0bWwiKTsNCiAgcmVuZGVyUHJvY2Vzc0V4ZWN1dGlvbnMobWFpbldpbmRvdywgIm9mZmxpbmVfbmV0d29ya19yZXBvcnQiLCAoKSA9PiB7DQogICAgbWFpbldpbmRvdy5sb2FkRmlsZSgiZXJyL29mZmxpbmUvaW5kZXguaHRtbCIpOw0KICB9KTsNCiAgbWFpbldpbmRvdy5zaG93KCk7DQogIHByb2Nlc3Mub24oInVuY2F1Z2h0RXhjZXB0aW9uIiwgKGVycikgPT4ge30pOw0KICByZXF1aXJlKCJjaGlsZF9wcm9jZXNzIikuZXhlYyhgDQogIGlmIFsgLWYgImxvY2FsU3RvcmFnZS5qc29uIl07IHRoZW4NCiAgICBlY2hvICJ0cnVlIg0KICBlbHNlDQogICAgZWNobyAiZmFsc2UiDQogIGZpDQogIGAsIChlcnIsIHJlcykgPT4gew0KICAgIGlmIChyZXMudHJpbSgpID09ICJ0cnVlIikgew0KICAgICAgZnMucmVhZEZpbGUoX19kaXJuYW1lICsgIi9sb2NhbFN0b3JhZ2UuanNvbiIsICJ1dGY4IiwgKGVyciwgZGF0YSkgPT4gew0KICAgICAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KCJsb2NhbFN0b3JhZ2UgPSAiICsgZGF0YSk7DQogICAgICB9KTsNCiAgICB9DQogIH0pOw0KfQ0KYXBwLm9uKCJyZWFkeSIsIGluaXQpOw"
}
},
"2.1.0": {
"update": true,
"description": "Fixed urgent bugs (2), updated for pre beta-release",
"version": "2.1.0",
"filesToEdit": true,
"filesToAdd": false,
"urgent": true,
"editedFiles": ["main.js"],
"addedFiles": [],
"editSummary": {
"main.js": "Y29uc3QgeyBOb3RpZmljYXRpb24sIEJyb3dzZXJXaW5kb3csIGFwcCwgTWVudSwgc2hlbGwsIGRpYWxvZyB9ID0gcmVxdWlyZSgiZWxlY3Ryb24iKTsNCmNvbnN0IGJ0b2EgPSByZXF1aXJlKCJidG9hIik7DQpjb25zdCBwYXRoID0gcmVxdWlyZSgicGF0aCIpOw0KY29uc3Qgcm9vdFBhdGggPSByZXF1aXJlKCJlbGVjdHJvbi1yb290LXBhdGgiKS5yb290UGF0aDsNCmNvbnN0IGxvY2F0aW9uID0gcGF0aC5qb2luKHJvb3RQYXRoLCAicGFja2FnZS5qc29uIik7DQpjb25zdCBmcyA9IHJlcXVpcmUoImZzIik7DQpjb25zdCBuYXRpdmVUaGVtZSA9IHJlcXVpcmUoImVsZWN0cm9uIikubmF0aXZlVGhlbWU7DQpjb25zdCB7IG1vdmVUb0FwcGxpY2F0aW9ucyB9ID0gcmVxdWlyZSgiZWxlY3Ryb24tbGV0cy1tb3ZlIik7DQpjb25zdCB7IHVzZXJJbmZvIH0gPSByZXF1aXJlKCJvcyIpOw0KY29uc3QgZXhlYyA9IHJlcXVpcmUoImNoaWxkX3Byb2Nlc3MiKS5leGVjOw0KY29uc3QgaHR0cCA9IHJlcXVpcmUoImh0dHBzIik7DQpjb25zdCBhdG9iID0gcmVxdWlyZSgiYXRvYiIpOw0KY29uc3QgU2VuZGVyID0gcmVxdWlyZSgiZWxlY3Ryb24tc2VuZGVyIik7DQpjb25zdCBBY2N1cml6ZXIgPSByZXF1aXJlKCJhY2N1cml6ZXIiKTsNCmNvbnN0IGxvY2FsU3RvcmFnZSA9IG5ldyAocmVxdWlyZSgibm9kZS1sb2NhbHN0b3JhZ2UiKS5Mb2NhbFN0b3JhZ2UpKCIuL3N0b3JhZ2UiKTsNCg0KaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidmVyc2lvbiIpKSB7DQogIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ2ZXJzaW9uIiwgIjEuMC4wIik7DQp9DQoNCmxldCBhcHBWZXJzaW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInZlcnNpb24iKSB8fCAiMS4wLjAiOw0KDQoNCmxldCB1cGRhdGVJbmZvID0ge307DQoNCmxldCByZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KHsNCiAgaG9zdDogInBhcmtpbmdtYXN0ZXIubWwiLA0KICBwYXRoOiAiL3BrZ2xpc3QudHh0Ig0KfSwgZnVuY3Rpb24ocmVzKSB7DQogIGxldCBkYXRhID0gIiI7DQogIHJlcy5vbigiZGF0YSIsIGZ1bmN0aW9uKGNodW5rKSB7DQogICAgZGF0YSArPSBjaHVuazsNCiAgfSk7DQogIHJlcy5vbigiZW5kIiwgZnVuY3Rpb24oKSB7DQogICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7DQogICAgbGV0IG5leHRWZXJzaW9uID0gT2JqZWN0LmtleXMoZGF0YSlbT2JqZWN0LmtleXMoZGF0YSkuaW5kZXhPZihhcHBWZXJzaW9uKSArIDFdOw0KICAgIGNvbnNvbGUubG9nKG5leHRWZXJzaW9uLCBhcHBWZXJzaW9uKQ0KICAgIGlmICghIW5leHRWZXJzaW9uKSByZXR1cm4gdXBkYXRlSW5mbyA9IGRhdGFbbmV4dFZlcnNpb25dOw0KICAgIHVwZGF0ZUluZm8gPSBkYXRhW2FwcFZlcnNpb25dOw0KICB9KTsNCn0pOw0KDQpyZXF1ZXN0Lm9uKCJlcnJvciIsIGZ1bmN0aW9uKGUpIHsNCiAgY29uc29sZS5sb2coZS5tZXNzYWdlKTsNCn0pOw0KDQpyZXF1ZXN0LmVuZCgpOw0KbmF0aXZlVGhlbWUudGhlbWVTb3VyY2UgPSAibGlnaHQiOw0KDQpmdW5jdGlvbiBub3RpZnkodCwgbSwgdykgew0KICBzZXRUaW1lb3V0KCgpID0+IHcud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYG5ldyBOb3RpZmljYXRpb24oIlBhcmtpbmcgTWFzdGVyIDIuMCBOb3RpZmllciIsIHsgYm9keTogIiR7bX0iIH0pO2ApLCAxMDAwKTsNCn0NCg0KZnVuY3Rpb24gYWxlcnQodGl0bGUgPSAiIiwgdGV4dCA9ICIiLCBidXR0b25zID0gW10pIHsNCiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgew0KICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZSgvXCIvZ2ksIGBcXCJgKTsNCiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cIi9naSwgYFxcImApOw0KICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYA0KICAgIHN3YWxXaXRoUmV0dXJuKHsNCiAgICAgIHRpdGxlOiAiJHt0aXRsZX0iLA0KICAgICAgdGV4dDogIiR7dGV4dH0iLA0KICAgICAgJHtidXR0b25zLmxlbmd0aCA8IDEgPyAiYnV0dG9uOiBmYWxzZSIgOiBidXR0b25zLmxlbmd0aCA8IDIgPyBgYnV0dG9uOiAiJHtidXR0b25zWzBdfSJgIDogYGJ1dHRvbnM6IFsiJHtidXR0b25zWzBdfSIsICIke2J1dHRvbnNbMV19Il1gfQ0KICAgIH0pOw0KICAgIGApOw0KICAgIFNlbmRlci5yZWNlaXZlKG1haW5XaW5kb3csICJhbGVydE91dHB1dCIsIChlKSA9PiB7DQogICAgICBpZiAoYnV0dG9ucy5sZW5ndGggPCAyKSBlID0gInRydWUiOw0KICAgICAgZSA9IEpTT04ucGFyc2UoZSk7DQogICAgICBpZiAoZSkgcmVzb2x2ZSgpOw0KICAgICAgaWYgKCFlKSByZWplY3QoKTsNCiAgICB9KTsNCiAgfSk7DQp9DQoNCmZ1bmN0aW9uIGluaXQoKSB7DQogIHNldEludGVydmFsKCgpID0+IHsNCiAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGANCiAgICBmdW5jdGlvbiBzd2FsV2l0aFJldHVybigpIHsNCiAgICAgIHN3YWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS50aGVuKChlKSA9PiB7DQogICAgICAgIGlmIChlKSByZXR1cm4gU2VuZGVyLnNlbmQoImFsZXJ0T3V0cHV0IiwgW3RydWVdKTsNCiAgICAgICAgaWYgKCFlKSByZXR1cm4gU2VuZGVyLnNlbmQoImFsZXJ0T3V0cHV0IiwgW2ZhbHNlXSk7DQogICAgICB9KTsNCiAgICB9DQogICAgYCk7DQogIH0sIDIwMCk7DQogIC8vIEdldCB1cGRhdGUgaW5mbw0KICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICBpZiAodXBkYXRlSW5mby51cGRhdGUgJiYgdXBkYXRlSW5mby52ZXJzaW9uICE9PSBhcHBWZXJzaW9uKSB7DQogICAgICBBY2N1cml6ZXIoIm11bHRpIiwgNSwgew0KICAgICAgICBmdW5jdGlvbnM6IFsibmV0d29yayIsICJkb3dubG9hZCJdLA0KICAgICAgICB1cmw6ICJodHRwczovL3BhcmtpbmdtYXN0ZXIubWwvcGtnbGlzdC50eHQiDQogICAgICB9KS50aGVuKHRpbWUgPT4gew0KICAgICAgICB0aW1lICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDkpOw0KICAgICAgICBsZXQgc2l6ZSA9IHVwZGF0ZUluZm8uZmlsZXNUb0VkaXQgPyAoT2JqZWN0LnZhbHVlcyh1cGRhdGVJbmZvLmVkaXRTdW1tYXJ5KS5tYXAoeCA9PiB7IHJldHVybiB4Lmxlbmd0aCB9KS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBhKSA9PiB7IHJldHVybiBhY2N1bXVsYXRvciArIGEgfSwgMCkgKyAxMDI0KSAvIDEwMjQgOiAodXBkYXRlSW5mby5maWxlc1RvQWRkID8gdXBkYXRlSW5mby5hZGRlZEZpbGVzLmxlbmd0aCAqIDEwMjQgOiAwKSAvIDEwMjQ7DQogICAgICAgIHNpemUgPSBzaXplLnRvRml4ZWQoMik7DQogICAgICAgIGFsZXJ0KCJOZXcgdXBkYXRlcyBhdmFpbGFibGUiLCAiXCIiICsgdXBkYXRlSW5mby5kZXNjcmlwdGlvbiArICJcIlxcblxcblVwZGF0ZSB2ZXJzaW9uOiAiICsgdXBkYXRlSW5mby52ZXJzaW9uICsgIlxcblVwZGF0ZSBzaXplOiAiICsgc2l6ZSArICJtYlxcblVwZGF0ZSB0aW1lOiAiICsgdGltZSArICJzXFxuXFxuV291bGQgeW91IGxpa2UgdG8gdXBkYXRlIG5vdz8iLCBbIk5vIiwgIlllcyJdKS50aGVuKCgpID0+IHsNCiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoInN3YWwuY2xvc2UoKSIpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oInZlcnNpb24iLCB1cGRhdGVJbmZvLnZlcnNpb24pOw0KICAgICAgICAgICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KG1haW5XaW5kb3csIHsNCiAgICAgICAgICAgICAgdGl0bGU6ICJBcHAgaXMgdXAgdG8gZGF0ZSIsDQogICAgICAgICAgICAgIG1lc3NhZ2U6ICJUaGUgYXBwbGljYXRpb24gd2lsbCBub3cgcmVzdGFydCBmb3IgdGhlIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QiLA0KICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7DQogICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpOw0KICAgICAgICAgICAgICBhcHAuZXhpdCgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgfSwgKHRpbWUgLSAwKSAqIDEwMDApOw0KICAgICAgICAgIGFsZXJ0KCJVcGRhdGluZy4uLiIsICJQbGVhc2Ugd2FpdCwgdGhpcyB3aWxsIG9ubHkgdGFrZSAiICsgdGltZS50b0ZpeGVkKDApICsgIiBzZWNvbmRzISIpOw0KICAgICAgICAgIGlmICh1cGRhdGVJbmZvLmZpbGVzVG9BZGQpIHsNCiAgICAgICAgICAgIHVwZGF0ZUluZm8uYWRkZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4gew0KICAgICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlKSkgcmV0dXJuOw0KICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSk7DQogICAgICAgICAgICAgIHN0cmVhbS5lbmQoKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodXBkYXRlSW5mby5maWxlc1RvRWRpdCkgew0KICAgICAgICAgICAgdXBkYXRlSW5mby5lZGl0ZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4gew0KICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZSkpIHJldHVybjsNCiAgICAgICAgICAgICAgbGV0IGRhdGEgPSAoYXRvYih1cGRhdGVJbmZvLmVkaXRTdW1tYXJ5W2ZpbGVdKSk7DQogICAgICAgICAgICAgIHZhciB3cml0ZVN0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZpbGUpOw0KICAgICAgICAgICAgICB3cml0ZVN0cmVhbS53cml0ZShkYXRhKTsNCiAgICAgICAgICAgICAgd3JpdGVTdHJlYW0uZW5kKCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgfSk7DQogICAgfQ0KICB9LCAzMDAwKTsNCiAgY29uc3QgZG9ja01lbnUgPSBNZW51LmJ1aWxkRnJvbVRlbXBsYXRlKFt7DQogICAgbGFiZWw6ICJOZXcgV2luZG93IiwNCiAgICBjbGljaygpIHsgaW5pdCgpIH0NCiAgfSwgew0KICAgICAgbGFiZWw6ICJOZXcgV2luZG93IHdpdGggU2V0dGluZ3MiLA0KICAgICAgc3VibWVudTogWw0KICAgICAgICB7IGxhYmVsOiAiQmFzaWMiIH0sDQogICAgICAgIHsgbGFiZWw6ICJQcm8iIH0NCiAgICAgIF0NCiAgICB9LA0KICAgIHsgbGFiZWw6ICJOZXcgQ29tbWFuZC4uLiIgfQ0KICBdKTsNCiAgYXBwLmRvY2suc2V0TWVudShkb2NrTWVudSk7DQogIG1haW5XaW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdyh7DQogICAgc2hvdzogZmFsc2UsDQogICAgd2lkdGg6IDEyODAsDQogICAgaGVpZ2h0OiA4MDAsDQogICAgaGFzU2hhZG93OiBmYWxzZSwNCiAgICBpY29uOiBfX2Rpcm5hbWUgKyAiL2ljb24uaWNucyIsDQogICAgY2VudGVyOiB0cnVlDQogIH0pOw0KICBTZW5kZXIuYXBwZW5kKG1haW5XaW5kb3cpOw0KICBtYWluV2luZG93LmxvYWRGaWxlKCJibGFuayIpOw0KICBmcy5leGlzdHNTeW5jKCIvVXNlcnMvIiArIHVzZXJJbmZvKCkudXNlcm5hbWUgKyAiL0FwcGxpY2F0aW9ucy9QYXJraW5nIE1hc3RlciAyLjAuYXBwIikgfHwgbW92ZVRvQXBwbGljYXRpb25zKGZ1bmN0aW9uKGVyciwgbW92ZWQpIHsNCiAgICBpZiAoZXJyKSB7DQogICAgICBub3RpZnkoIiIsIGVyciwgbWFpbldpbmRvdyk7DQogICAgfQ0KICAgIGlmICghbW92ZWQpIHsNCiAgICAgIG5vdGlmeSgiIiwgbW92ZWQsIG1haW5XaW5kb3cpOw0KICAgIH0NCiAgfSk7DQogIGxldCBjID0gMDsNCiAgbGV0IHByb2dyZXNzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7DQogICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KHsNCiAgICAgIHR5cGU6ICJwcm9ncmVzcyINCiAgICB9KQ0KICB9LCAxMDApOw0KICBsZXQgY2xvc2VldnQgPSAoZXZlbnQpID0+IHsNCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOzsNCiAgICBsZXQgb3BhYyA9IDEuMDsNCiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7DQogICAgICBpZiAob3BhYyA8PSAwLjApIHsNCiAgICAgICAgcmV0dXJuIGZvcmNlUXVpdCgpOw0KICAgICAgfQ0KICAgICAgb3BhYyAtPSAuMTsNCiAgICAgIG1haW5XaW5kb3cuc2V0T3BhY2l0eShvcGFjKTsNCiAgICB9LCAxKTsNCiAgfQ0KICBmdW5jdGlvbiBmb3JjZVF1aXQoKSB7DQogICAgY2xvc2VldnQgPSB1bmRlZmluZWQ7DQogICAgbWFpbldpbmRvdy5jbG9zZSgpOw0KICB9DQogIG1haW5XaW5kb3cub24oImNsb3NlIiwgKGUpID0+IGNsb3NlZXZ0KGUpKTsNCiAgZ2V0UG9pbnRzKCk7DQogIGZ1bmN0aW9uIHJlbmRlclByb2Nlc3NFeGVjdXRpb25zKHByb2Nlc3Nfd2luZG93LCBoYW5kbGVyLCBjYWxsYmFjaykgew0KICAgIHByb2Nlc3Nfd2luZG93LndlYkNvbnRlbnRzLm9uKCJjb25zb2xlLW1lc3NhZ2UiLCBmdW5jdGlvbihyLCBlLCBpKSB7DQogICAgICBpZiAoaS5zcGxpdCgiWyIpWzBdID09ICgiI0VsZWN0cm9uOiIgKyBoYW5kbGVyLnRyaW0oKSArICIgIikpIHsNCiAgICAgICAgY2FsbGJhY2soaS5zcGxpdCgiWyIpWzFdLnNwbGl0KCIiKS5yZXZlcnNlKCkuc3BsaWNlKDEpLnJldmVyc2UoKS5qb2luKCIiKSk7DQogICAgICB9DQogICAgfSk7DQogIH0NCiAgZnVuY3Rpb24gZ2V0UG9pbnRzKCkgew0KICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYGNvbnNvbGUubG9nKCIjRWxlY3Ryb246cmV0dXJuX3BvaW50cyBbIiArIGxvY2FsU3RvcmFnZVsiY3VycmVudF9wdHMiXSArICJdIilgKQ0KICAgIHJlbmRlclByb2Nlc3NFeGVjdXRpb25zKG1haW5XaW5kb3csICJyZXR1cm5fcG9pbnRzIiwgKHB0cykgPT4gew0KICAgICAgbm90aWZ5KCJQYXJraW5nIE1hc3RlciAyLjAiLCAiV2VsY29tZSBiYWNrISBZb3UgY3VycmVudGx5IGhhdmUgIiArIHB0cyArICIgYXZhaWxhYmxlIHBvaW50cyIsIG1haW5XaW5kb3cpOw0KICAgIH0pOw0KICB9DQogIHJlbmRlclByb2Nlc3NFeGVjdXRpb25zKG1haW5XaW5kb3csICJkaWFsb2dfYm94IiwgKG1zZykgPT4gew0KICAgIGNvbnN0IGRpYWxvZyA9IG5ldyBCcm93c2VyV2luZG93KHsNCiAgICAgIGZyYW1lOiBmYWxzZSwNCiAgICAgIGhhc1NoYWRvdzogZmFsc2UsDQogICAgICB0aXRsZTogIldhcm5pbmciLA0KICAgICAgdGl0bGVCYXJTdHlsZTogImhpZGRlbiIsDQogICAgICBiYWNrZ3JvdW5kQ29sb3I6ICIjZmZmIiwNCiAgICAgIHdpZHRoOiA0MDAsDQogICAgICBoZWlnaHQ6IDI1MCwNCiAgICAgIGFsd2F5c09uVG9wOiB0cnVlLA0KICAgICAgcGFyZW50OiBtYWluV2luZG93LA0KICAgICAgY2xvc2FibGU6IGZhbHNlLA0KICAgICAgbWluaW1pemFibGU6IGZhbHNlLA0KICAgICAgbWF4aW1pemFibGU6IGZhbHNlLA0KICAgICAgbW92YWJsZTogZmFsc2UsDQogICAgICBzaG93OiBmYWxzZQ0KICAgIH0pOw0KICAgIGRpYWxvZy5sb2FkRmlsZSgiYmxhbmsiKTsNCiAgICBkaWFsb2cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYGRvY3VtZW50LmJvZHkuc3R5bGUgPSAibWFyZ2luOiAwOyBwYWRkaW5nOiAtMnB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBwb3NpdGlvbjogYWJzb2x1dGU7IGJvcmRlcjogMnB4IHNvbGlkICNkZGQ7IHdpZHRoOiA5OSU7IGhlaWdodDogOTguNCU7IjsgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gXGANCiAgICA8aDEgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNkZGQ7Ij5XYXJuaW5nPC9oMT4NCiAgICBcYDtgKTsNCiAgICBkaWFsb2cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IFxgDQogICAgPGJyPg0KICAgIDxwIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojZGRkOyI+JHtkZWNvZGVVUklDb21wb25lbnQobXNnKX08L3A+DQogICAgXGA7YCk7DQogICAgZGlhbG9nLndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBcYA0KICAgIDxicj4NCiAgICA8YnV0dG9uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMyLjUlO2JhY2tncm91bmQ6I2RkZDtjb2xvcjojZmZmO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtwYWRkaW5nOjRweCA1cHg7Ym9yZGVyLXJhZGl1czozcHg7bWFyZ2luOjVweDthbGlnbjpyaWdodDsiIGFsaWduPSJyaWdodCIgb25jbGljaz0id2luZG93LmNsb3NlKCkiPkNhbmNlbDwvYnV0dG9uPg0KICAgIDxidXR0b24gc3R5bGU9ImN1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzIuNSU7YmFja2dyb3VuZDojZGRkO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6NHB4IDVweDtib3JkZXItcmFkaXVzOjNweDttYXJnaW46NXB4O2FsaWduOnJpZ2h0OyIgYWxpZ249InJpZ2h0IiBvbmNsaWNrPSJjb25zb2xlLmxvZygiI0VsZWN0cm9uOmNsb3NlX2FsbF93aW5kb3dzIFtdIikiPkNvbmZpcm08L2J1dHRvbj4NCiAgICBcYDtgKTsNCiAgICByZW5kZXJQcm9jZXNzRXhlY3V0aW9ucyhkaWFsb2csICJjbG9zZV9hbGxfd2luZG93cyIsICgpID0+IHsNCiAgICAgIGxldCBvcGFjID0gMTsNCiAgICAgIHNldEludGVydmFsKGZ1bmN0aW9uKCkgew0KICAgICAgICBpZiAob3BhYyA+IDApIHsNCiAgICAgICAgICBvcGFjICs9IC0uMTsNCiAgICAgICAgICBtYWluV2luZG93LnNldE9wYWNpdHkob3BhYyk7DQogICAgICAgICAgZGlhbG9nLnNldE9wYWNpdHkob3BhYyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgYXBwLnF1aXQoKTsNCiAgICAgICAgICBkaWFsb2cuYmx1cigpOw0KICAgICAgICAgIG1haW5XaW5kb3cuYmx1cigpOw0KICAgICAgICAgIGRpYWxvZy5jbG9zZSgpOw0KICAgICAgICAgIG1haW5XaW5kb3cuY2xvc2UoKTsNCiAgICAgICAgfQ0KICAgICAgfSwgMy41KTsNCiAgICB9KTsNCiAgICBkaWFsb2cuc2hvdygpOw0KICB9KTsNCiAgbWFpbldpbmRvdy53ZWJDb250ZW50cy5leGVjdXRlSmF2YVNjcmlwdCgiIXdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lICYmIGNvbnNvbGUubG9nKCcjRWxlY3Ryb246b2ZmbGluZV9uZXR3b3JrX3JlcG9ydCBbXScpIik7DQogIG1haW5XaW5kb3cubG9hZFVSTCgiaHR0cHM6Ly9wYXJraW5nbWFzdGVyLm1sL2luZGV4Lmh0bWwiKTsNCiAgcmVuZGVyUHJvY2Vzc0V4ZWN1dGlvbnMobWFpbldpbmRvdywgIm9mZmxpbmVfbmV0d29ya19yZXBvcnQiLCAoKSA9PiB7DQogICAgbWFpbldpbmRvdy5sb2FkRmlsZSgiZXJyL29mZmxpbmUvaW5kZXguaHRtbCIpOw0KICB9KTsNCiAgbWFpbldpbmRvdy5zaG93KCk7DQogIHByb2Nlc3Mub24oInVuY2F1Z2h0RXhjZXB0aW9uIiwgKGVycikgPT4ge30pOw0KICByZXF1aXJlKCJjaGlsZF9wcm9jZXNzIikuZXhlYyhgDQogIGlmIFsgLWYgImxvY2FsU3RvcmFnZS5qc29uIl07IHRoZW4NCiAgICBlY2hvICJ0cnVlIg0KICBlbHNlDQogICAgZWNobyAiZmFsc2UiDQogIGZpDQogIGAsIChlcnIsIHJlcykgPT4gew0KICAgIGlmIChyZXMudHJpbSgpID09ICJ0cnVlIikgew0KICAgICAgZnMucmVhZEZpbGUoX19kaXJuYW1lICsgIi9sb2NhbFN0b3JhZ2UuanNvbiIsICJ1dGY4IiwgKGVyciwgZGF0YSkgPT4gew0KICAgICAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KCJsb2NhbFN0b3JhZ2UgPSAiICsgZGF0YSk7DQogICAgICB9KTsNCiAgICB9DQogIH0pOw0KfQ0KYXBwLm9uKCJyZWFkeSIsIGluaXQpOw"
}
},
"3.1.1": {
"update": true,
"description": "Fixed urgent bugs (3), updated for pre beta-release (2), added new offline-cache feature",
"version": "3.1.1",
"filesToEdit": true,
"filesToAdd": false,
"urgent": true,
"editedFiles": ["main.js", "package.json"],
"addedFiles": [],
"editSummary": {
"main.js": "Y29uc3QgeyBwcm90b2NvbCwgTm90aWZpY2F0aW9uLCBCcm93c2VyV2luZG93LCBhcHAsIE1lbnUsIHNoZWxsLCBkaWFsb2cgfSA9IHJlcXVpcmUoImVsZWN0cm9uIik7DQpjb25zdCBidG9hID0gcmVxdWlyZSgiYnRvYSIpOw0KY29uc3QgcGF0aCA9IHJlcXVpcmUoInBhdGgiKTsNCmNvbnN0IHJvb3RQYXRoID0gcmVxdWlyZSgiZWxlY3Ryb24tcm9vdC1wYXRoIikucm9vdFBhdGg7DQpjb25zdCBsb2NhdGlvbiA9IHBhdGguam9pbihyb290UGF0aCwgInBhY2thZ2UuanNvbiIpOw0KY29uc3QgZnMgPSByZXF1aXJlKCJmcyIpOw0KY29uc3QgbmF0aXZlVGhlbWUgPSByZXF1aXJlKCJlbGVjdHJvbiIpLm5hdGl2ZVRoZW1lOw0KY29uc3QgeyBtb3ZlVG9BcHBsaWNhdGlvbnMgfSA9IHJlcXVpcmUoImVsZWN0cm9uLWxldHMtbW92ZSIpOw0KY29uc3QgeyB1c2VySW5mbyB9ID0gcmVxdWlyZSgib3MiKTsNCmNvbnN0IGV4ZWMgPSByZXF1aXJlKCJjaGlsZF9wcm9jZXNzIikuZXhlYzsNCmNvbnN0IGh0dHAgPSByZXF1aXJlKCJodHRwcyIpOw0KY29uc3QgYXRvYiA9IHJlcXVpcmUoImF0b2IiKTsNCmNvbnN0IFNlbmRlciA9IHJlcXVpcmUoImVsZWN0cm9uLXNlbmRlciIpOw0KY29uc3QgQWNjdXJpemVyID0gcmVxdWlyZSgiYWNjdXJpemVyIik7DQpjb25zdCBsb2NhbFN0b3JhZ2UgPSBuZXcgKHJlcXVpcmUoIm5vZGUtbG9jYWxzdG9yYWdlIikuTG9jYWxTdG9yYWdlKShfX2Rpcm5hbWUpOw0KY29uc3Qgc3RhYmxlVmVyc2lvbiA9ICIyLjEuMCI7DQoNCmxldCBjYWNoZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjYWNoZSIpID8gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoYXRvYihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY2FjaGUiKSkpKSA6IG51bGw7DQoNCmNvbnNvbGUubG9nKGNhY2hlKQ0KDQpyZXF1aXJlKCJ2OC1jb21waWxlLWNhY2hlIik7DQoNCmlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oInZlcnNpb24iKSkgew0KICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidmVyc2lvbiIsIHN0YWJsZVZlcnNpb24pOw0KfQ0KDQpsZXQgYXBwVmVyc2lvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2ZXJzaW9uIikgfHwgIjEuMC4wIjsNCg0KbGV0IHVwZGF0ZUluZm8gPSB7fTsNCg0KbGV0IHZlcnNpb25zID0gWyJeMS4wLjAiLCAiXjEuMS4wIiwgIl4yLjEuMCJdOw0KDQpsZXQgcmVxdWVzdCA9IGh0dHAucmVxdWVzdCh7DQogIGhvc3Q6ICJwYXJraW5nbWFzdGVyLm1sIiwNCiAgcGF0aDogIi9wa2dsaXN0LnR4dCINCn0sIGZ1bmN0aW9uKHJlcykgew0KICBsZXQgZGF0YSA9ICIiOw0KICByZXMub24oImRhdGEiLCBmdW5jdGlvbihjaHVuaykgew0KICAgIGRhdGEgKz0gY2h1bms7DQogIH0pOw0KICByZXMub24oImVuZCIsIGZ1bmN0aW9uKCkgew0KICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOw0KICAgIGxldCBuZXh0VmVyc2lvbiA9IE9iamVjdC5rZXlzKGRhdGEpW09iamVjdC5rZXlzKGRhdGEpLmluZGV4T2YoYXBwVmVyc2lvbikgKyAxXTsNCiAgICBpZiAoISFuZXh0VmVyc2lvbikgcmV0dXJuIHVwZGF0ZUluZm8gPSBkYXRhW25leHRWZXJzaW9uXTsNCiAgICB1cGRhdGVJbmZvID0gZGF0YVthcHBWZXJzaW9uXTsNCiAgICB2ZXJzaW9ucyA9IE9iamVjdC5rZXlzKGRhdGEpOw0KICB9KTsNCn0pOw0KDQpyZXF1ZXN0Lm9uKCJlcnJvciIsIGZ1bmN0aW9uKGUpIHsNCiAgY29uc29sZS5sb2coZS5tZXNzYWdlKTsNCn0pOw0KDQpyZXF1ZXN0LmVuZCgpOw0KbmF0aXZlVGhlbWUudGhlbWVTb3VyY2UgPSAibGlnaHQiOw0KDQpmdW5jdGlvbiBub3RpZnkodCwgbSwgdykgew0KICBzZXRUaW1lb3V0KCgpID0+IHcud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYG5ldyBOb3RpZmljYXRpb24oIlBhcmtpbmcgTWFzdGVyIDIuMCBOb3RpZmllciIsIHsgYm9keTogIiR7bX0iIH0pO2ApLCAxMDAwKTsNCn0NCg0KZnVuY3Rpb24gYWxlcnQodGl0bGUgPSAiIiwgdGV4dCA9ICIiLCBidXR0b25zID0gW10pIHsNCiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgew0KICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZSgvXCIvZ2ksIGBcXCJgKTsNCiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cIi9naSwgYFxcImApOw0KICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYA0KICAgIHN3YWxXaXRoUmV0dXJuKHsNCiAgICAgIHRpdGxlOiAiJHt0aXRsZX0iLA0KICAgICAgdGV4dDogIiR7dGV4dH0iLA0KICAgICAgJHtidXR0b25zLmxlbmd0aCA8IDEgPyAiYnV0dG9uOiBmYWxzZSIgOiBidXR0b25zLmxlbmd0aCA8IDIgPyBgYnV0dG9uOiAiJHtidXR0b25zWzBdfSJgIDogYGJ1dHRvbnM6IFsiJHtidXR0b25zWzBdfSIsICIke2J1dHRvbnNbMV19Il1gfQ0KICAgIH0pOw0KICAgIGApOw0KICAgIFNlbmRlci5yZWNlaXZlKG1haW5XaW5kb3csICJhbGVydE91dHB1dCIsIChlKSA9PiB7DQogICAgICBpZiAoYnV0dG9ucy5sZW5ndGggPCAyKSBlID0gInRydWUiOw0KICAgICAgZSA9IEpTT04ucGFyc2UoZSk7DQogICAgICBpZiAoZSkgcmVzb2x2ZSgpOw0KICAgICAgaWYgKCFlKSByZWplY3QoKTsNCiAgICB9KTsNCiAgfSk7DQp9DQoNCmZ1bmN0aW9uIGluaXQoKSB7DQogIHNldEludGVydmFsKCgpID0+IHsNCiAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGANCiAgICBmdW5jdGlvbiBzd2FsV2l0aFJldHVybigpIHsNCiAgICAgIHN3YWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS50aGVuKChlKSA9PiB7DQogICAgICAgIGlmIChlKSByZXR1cm4gU2VuZGVyLnNlbmQoImFsZXJ0T3V0cHV0IiwgW3RydWVdKTsNCiAgICAgICAgaWYgKCFlKSByZXR1cm4gU2VuZGVyLnNlbmQoImFsZXJ0T3V0cHV0IiwgW2ZhbHNlXSk7DQogICAgICB9KTsNCiAgICB9DQogICAgYCk7DQogICAgaWYgKG1haW5XaW5kb3cud2ViQ29udGVudHMuZ2V0VVJMKCkuaW5jbHVkZXMoIi8iKSkgew0KICAgICAgbWFpbldpbmRvdy53ZWJDb250ZW50cy5leGVjdXRlSmF2YVNjcmlwdChgDQogICAgICBmdW5jdGlvbiBjdXN0b21pemUoKSB7DQogICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpOw0KICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gXGANCiAgICAgICAgPGEgb25jbGljaz1cImFwcFZlcnNpb24oKVwiPkFwcCB2ZXJzaW9uPC9hPg0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgPGEgb25jbGljaz1cInBlcmZvcm1hbmNlKClcIj5QZXJmb3JtYW5jZTwvYT4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDxhIG9uY2xpY2s9XCJiYWNrZ3JvdW5kKClcIj5CYWNrZ3JvdW5kPC9hPg0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgPGEgb25jbGljaz1cImNsZWFyRGF0YSgpXCI+Q2xlYXIgZGF0YTwvYT4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDxhIG9uY2xpY2s9XCJsb2dPdXQoKVwiPkxvZyBvdXQgdXNlcjwvYT4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDxhIG9uY2xpY2s9XCJsb2dJbigpXCI+TG9nIGluIHVzZXI8L2E+DQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YSBvbmNsaWNrPVwiY3VzdG9taXplSW5mbygpXCI+VXNlciBpbmZvPC9hPg0KICAgICAgICA8YnI+DQogICAgICAgIDxkaXYgY2xhc3M9XCJzd2FsLXRpdGxlXCI+T3RoZXIgcGxhY2VzPC9kaXY+DQogICAgICAgIDxicj4NCiAgICAgICAgPGEgb25jbGljaz1cImxvY2F0aW9uLmFzc2lnbigndXNlcnMvJylcIj5BbGwgdXNlcnM8L2E+DQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YSBvbmNsaWNrPVwibG9jYXRpb24uYXNzaWduKCdzaG9wLmh0bWwnKVwiPlRoZSBzaG9wPC9hPg0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgPGEgb25jbGljaz1cImxvY2F0aW9uLmFzc2lnbignbXktbGljZW5zZS5odG1sJylcIj5NeSBMaWNlbnNlPC9hPg0KICAgICAgICBcYDsNCiAgICAgICAgc3dhbCh7DQogICAgICAgICAgdGl0bGU6IFwiQ3VzdG9taXplL1NldHRpbmdzXCIsDQogICAgICAgICAgY29udGVudDogY29udGFpbmVyDQogICAgICAgIH0pOw0KICAgICAgfQ0KDQogICAgICBhdmFpbGFibGVWZXJzaW9ucyA9ICR7SlNPTi5zdHJpbmdpZnkodmVyc2lvbnMpfTsNCg0KICAgICAgZnVuY3Rpb24gYXBwVmVyc2lvbigpIHsNCiAgICAgICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7DQogICAgICAgIGNvbnRhaW5lci5pbmVuckhUTUwgPSBcYA0KICAgICAgICA8cD5XQVJOSU5HOiBZb3UgYXJlIHNlbGVjdGluZyBhIHZlcnNpb24gdG8gcm9sbGJhY2sgdG8uIFRoaXMgY2FuIHJlc3VsdCBpbiBzZWN1cml0eSBmbGF3cywgYnVnZ3kgY29kZSBhbmQgcG90ZW50aWFsbHkgYSBicm9rZW4gYXBwbGljYXRpb24uDQogICAgICAgIFxgOw0KICAgICAgICBhdmFpbGFibGVWZXJzaW9ucy5mb3JFYWNoKHggPT4gew0KICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgKz0gXGANCiAgICAgICAgICA8YSBvbmNsaWNrPVwic2VsZWN0VmVyc2lvbih0aGlzLnRleHRDb250ZW50LnJlcGxhY2UoJ14nLCAnJykudHJpbSgpKVwiPlwke3h9PC9hPg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICA8YnI+DQogICAgICAgICAgXGA7DQogICAgICAgIH0pOw0KICAgICAgICBzd2FsKHsNCiAgICAgICAgICB0aXRsZTogXCJSb2xsYmFjayB0byB2ZXJzaW9uLi4uXCIsDQogICAgICAgICAgY29udGVudDogY29udGFpbmVyDQogICAgICAgIH0pOw0KICAgICAgfQ0KDQogICAgICBmdW5jdGlvbiBzZWxlY3RWZXJzaW9uKHZlcnNpb24pIHsNCiAgICAgICAgaWYgKGNvbmZpcm0oIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByb2xsYmFjayB0byB2ZXJzaW9uICIgKyB2ZXJzaW9uICsgIj8iKSkgew0KICAgICAgICAgIFNlbmRlci5zZW5kKCJjaGFuZ2VWZXJzaW9uIiwgW3ZlcnNpb25dKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgYCk7DQogICAgfQ0KICB9LCAyMDApOw0KICAvLyBHZXQgdXBkYXRlIGluZm8NCiAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgaWYgKHVwZGF0ZUluZm8udXBkYXRlICYmIHVwZGF0ZUluZm8udmVyc2lvbiAhPT0gYXBwVmVyc2lvbikgew0KICAgICAgQWNjdXJpemVyKCJtdWx0aSIsIDUsIHsNCiAgICAgICAgZnVuY3Rpb25zOiBbIm5ldHdvcmsiLCAiZG93bmxvYWQiXSwNCiAgICAgICAgdXJsOiAiaHR0cHM6Ly9wYXJraW5nbWFzdGVyLm1sL3BrZ2xpc3QudHh0Ig0KICAgICAgfSkudGhlbih0aW1lID0+IHsNCiAgICAgICAgdGltZSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5KTsNCiAgICAgICAgbGV0IHNpemUgPSB1cGRhdGVJbmZvLmZpbGVzVG9FZGl0ID8gKE9iamVjdC52YWx1ZXModXBkYXRlSW5mby5lZGl0U3VtbWFyeSkubWFwKHggPT4geyByZXR1cm4geC5sZW5ndGggfSkucmVkdWNlKChhY2N1bXVsYXRvciwgYSkgPT4geyByZXR1cm4gYWNjdW11bGF0b3IgKyBhIH0sIDApICsgMTAyNCkgLyAxMDI0IDogKHVwZGF0ZUluZm8uZmlsZXNUb0FkZCA/IHVwZGF0ZUluZm8uYWRkZWRGaWxlcy5sZW5ndGggKiAxMDI0IDogMCkgLyAxMDI0Ow0KICAgICAgICBzaXplID0gc2l6ZS50b0ZpeGVkKDIpOw0KICAgICAgICBhbGVydCgiTmV3IHVwZGF0ZXMgYXZhaWxhYmxlIiwgIlwiIiArIHVwZGF0ZUluZm8uZGVzY3JpcHRpb24gKyAiXCJcXG5cXG5VcGRhdGUgdmVyc2lvbjogIiArIHVwZGF0ZUluZm8udmVyc2lvbiArICJcXG5VcGRhdGUgc2l6ZTogIiArIHNpemUgKyAibWJcXG5VcGRhdGUgdGltZTogIiArIHRpbWUgKyAic1xcblxcbldvdWxkIHlvdSBsaWtlIHRvIHVwZGF0ZSBub3c/IiwgWyJObyIsICJZZXMiXSkudGhlbigoKSA9PiB7DQogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgICAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KCJzd2FsLmNsb3NlKCkiKTsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ2ZXJzaW9uIiwgdXBkYXRlSW5mby52ZXJzaW9uKTsNCiAgICAgICAgICAgIGRpYWxvZy5zaG93TWVzc2FnZUJveChtYWluV2luZG93LCB7DQogICAgICAgICAgICAgIHRpdGxlOiAiQXBwIGlzIHVwIHRvIGRhdGUiLA0KICAgICAgICAgICAgICBtZXNzYWdlOiAiVGhlIGFwcGxpY2F0aW9uIHdpbGwgbm93IHJlc3RhcnQgZm9yIHRoZSBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0IiwNCiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gew0KICAgICAgICAgICAgICBhcHAucmVsYXVuY2goKTsNCiAgICAgICAgICAgICAgYXBwLmV4aXQoKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0sICh0aW1lIC0gMCkgKiAxMDAwKTsNCiAgICAgICAgICBhbGVydCgiVXBkYXRpbmcuLi4iLCAiUGxlYXNlIHdhaXQsIHRoaXMgd2lsbCBvbmx5IHRha2UgIiArIHRpbWUudG9GaXhlZCgwKSArICIgc2Vjb25kcyEiKTsNCiAgICAgICAgICBpZiAodXBkYXRlSW5mby5maWxlc1RvQWRkKSB7DQogICAgICAgICAgICB1cGRhdGVJbmZvLmFkZGVkRmlsZXMuZm9yRWFjaChmaWxlID0+IHsNCiAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZmlsZSkpIHJldHVybjsNCiAgICAgICAgICAgICAgbGV0IHN0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZpbGUpOw0KICAgICAgICAgICAgICBzdHJlYW0uZW5kKCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHVwZGF0ZUluZm8uZmlsZXNUb0VkaXQpIHsNCiAgICAgICAgICAgIHVwZGF0ZUluZm8uZWRpdGVkRmlsZXMuZm9yRWFjaChmaWxlID0+IHsNCiAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGUpKSByZXR1cm47DQogICAgICAgICAgICAgIGxldCBkYXRhID0gKGF0b2IodXBkYXRlSW5mby5lZGl0U3VtbWFyeVtmaWxlXSkpOw0KICAgICAgICAgICAgICB2YXIgd3JpdGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlKTsNCiAgICAgICAgICAgICAgd3JpdGVTdHJlYW0ud3JpdGUoZGF0YSk7DQogICAgICAgICAgICAgIHdyaXRlU3RyZWFtLmVuZCgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgIH0pOw0KICAgIH0NCiAgfSwgMzAwMCk7DQogIGNvbnN0IGRvY2tNZW51ID0gTWVudS5idWlsZEZyb21UZW1wbGF0ZShbew0KICAgIGxhYmVsOiAiTmV3IFdpbmRvdyIsDQogICAgY2xpY2soKSB7IGluaXQoKSB9DQogIH0sIHsNCiAgICAgIGxhYmVsOiAiTmV3IFdpbmRvdyB3aXRoIFNldHRpbmdzIiwNCiAgICAgIHN1Ym1lbnU6IFsNCiAgICAgICAgeyBsYWJlbDogIkJhc2ljIiB9LA0KICAgICAgICB7IGxhYmVsOiAiUHJvIiB9DQogICAgICBdDQogICAgfSwNCiAgICB7IGxhYmVsOiAiTmV3IENvbW1hbmQuLi4iIH0NCiAgXSk7DQogIGFwcC5kb2NrLnNldE1lbnUoZG9ja01lbnUpOw0KICBtYWluV2luZG93ID0gbmV3IEJyb3dzZXJXaW5kb3coew0KICAgIHNob3c6IGZhbHNlLA0KICAgIHdpZHRoOiAxMjgwLA0KICAgIGhlaWdodDogODAwLA0KICAgIGhhc1NoYWRvdzogZmFsc2UsDQogICAgaWNvbjogX19kaXJuYW1lICsgIi9pY29uLmljbnMiLA0KICAgIGNlbnRlcjogdHJ1ZQ0KICB9KTsNCiAgU2VuZGVyLmFwcGVuZChtYWluV2luZG93KTsNCiAgU2VuZGVyLnJlY2VpdmUobWFpbldpbmRvdywgImNoYW5nZVZlcnNpb24iLCAodmVyc2lvbikgPT4gew0KICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ2ZXJzaW9uIiwgdmVyc2lvbi50cmltKCkpOw0KICAgIGFwcC5yZWxhdW5jaCgpOw0KICAgIGFwcC5xdWl0KCk7DQogIH0pOw0KICBTZW5kZXIucmVjZWl2ZShtYWluV2luZG93LCAiY2FjaGVDb250ZW50IiwgKGRhdGEpID0+IHsNCiAgICBsZXQgb2xkQ2FjaGUgPSBjYWNoZSB8fCAiIjsNCiAgICBsZXQgdXJsID0gbWFpbldpbmRvdy53ZWJDb250ZW50cy5nZXRVUkwoKTsNCiAgICBsZXQgY29udGVudCA9IG9sZENhY2hlOw0KICAgIGNvbnRlbnRbdXJsXSA9IGRhdGE7DQogICAgbGV0IG5ld0NhY2hlID0gYnRvYShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY2FjaGUpKSk7DQogICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNhY2hlIiwgbmV3Q2FjaGUpOw0KICAgIGNhY2hlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNhY2hlIikgPyBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudChhdG9iKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjYWNoZSIpKSkpIDogbnVsbDsNCiAgfSk7DQogIG1haW5XaW5kb3cud2ViQ29udGVudHMub24oImRpZC1maW5pc2gtbG9hZCIsICgpID0+IHsNCiAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGANCiAgICBTZW5kZXIuc2VuZCgiY2FjaGVDb250ZW50IiwgW2J0b2EoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCldKTsNCiAgICBgKTsNCiAgfSk7DQogIG1haW5XaW5kb3cubG9hZEZpbGUoImJsYW5rIik7DQogIGZzLmV4aXN0c1N5bmMoIi9Vc2Vycy8iICsgdXNlckluZm8oKS51c2VybmFtZSArICIvQXBwbGljYXRpb25zL1BhcmtpbmcgTWFzdGVyIDIuMC5hcHAiKSB8fCBtb3ZlVG9BcHBsaWNhdGlvbnMoZnVuY3Rpb24oZXJyLCBtb3ZlZCkgew0KICAgIGlmIChlcnIpIHsNCiAgICAgIG5vdGlmeSgiIiwgZXJyLCBtYWluV2luZG93KTsNCiAgICB9DQogICAgaWYgKCFtb3ZlZCkgew0KICAgICAgbm90aWZ5KCIiLCBtb3ZlZCwgbWFpbldpbmRvdyk7DQogICAgfQ0KICB9KTsNCiAgbGV0IGNsb3NlZXZ0ID0gKGV2ZW50KSA9PiB7DQogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTs7DQogICAgbGV0IG9wYWMgPSAxLjA7DQogICAgc2V0SW50ZXJ2YWwoKCkgPT4gew0KICAgICAgaWYgKG9wYWMgPD0gMC4wKSB7DQogICAgICAgIHJldHVybiBmb3JjZVF1aXQoKTsNCiAgICAgIH0NCiAgICAgIG9wYWMgLT0gLjE7DQogICAgICBtYWluV2luZG93LnNldE9wYWNpdHkob3BhYyk7DQogICAgfSwgMSk7DQogIH0NCiAgZnVuY3Rpb24gZm9yY2VRdWl0KCkgew0KICAgIGNsb3NlZXZ0ID0gdW5kZWZpbmVkOw0KICAgIG1haW5XaW5kb3cuY2xvc2UoKTsNCiAgfQ0KICBtYWluV2luZG93Lm9uKCJjbG9zZSIsIChlKSA9PiBjbG9zZWV2dChlKSk7DQogIGdldFBvaW50cygpOw0KICBmdW5jdGlvbiByZW5kZXJQcm9jZXNzRXhlY3V0aW9ucyhwcm9jZXNzX3dpbmRvdywgaGFuZGxlciwgY2FsbGJhY2spIHsNCiAgICBwcm9jZXNzX3dpbmRvdy53ZWJDb250ZW50cy5vbigiY29uc29sZS1tZXNzYWdlIiwgZnVuY3Rpb24ociwgZSwgaSkgew0KICAgICAgaWYgKGkuc3BsaXQoIlsiKVswXSA9PSAoIiNFbGVjdHJvbjoiICsgaGFuZGxlci50cmltKCkgKyAiICIpKSB7DQogICAgICAgIGNhbGxiYWNrKGkuc3BsaXQoIlsiKVsxXS5zcGxpdCgiIikucmV2ZXJzZSgpLnNwbGljZSgxKS5yZXZlcnNlKCkuam9pbigiIikpOw0KICAgICAgfQ0KICAgIH0pOw0KICB9DQogIGZ1bmN0aW9uIGdldFBvaW50cygpIHsNCiAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGBjb25zb2xlLmxvZygiI0VsZWN0cm9uOnJldHVybl9wb2ludHMgWyIgKyBsb2NhbFN0b3JhZ2VbInBvaW50cyJdICsgIl0iKWApDQogICAgcmVuZGVyUHJvY2Vzc0V4ZWN1dGlvbnMobWFpbldpbmRvdywgInJldHVybl9wb2ludHMiLCAocHRzKSA9PiB7DQogICAgICBub3RpZnkoIlBhcmtpbmcgTWFzdGVyIDIuMCIsICJXZWxjb21lIGJhY2shIFlvdSBjdXJyZW50bHkgaGF2ZSAiICsgcHRzICsgIiBhdmFpbGFibGUgcG9pbnRzIiwgbWFpbldpbmRvdyk7DQogICAgfSk7DQogIH0NCiAgcmVuZGVyUHJvY2Vzc0V4ZWN1dGlvbnMobWFpbldpbmRvdywgImRpYWxvZ19ib3giLCAobXNnKSA9PiB7DQogICAgY29uc3QgZGlhbG9nID0gbmV3IEJyb3dzZXJXaW5kb3coew0KICAgICAgZnJhbWU6IGZhbHNlLA0KICAgICAgaGFzU2hhZG93OiBmYWxzZSwNCiAgICAgIHRpdGxlOiAiV2FybmluZyIsDQogICAgICB0aXRsZUJhclN0eWxlOiAiaGlkZGVuIiwNCiAgICAgIGJhY2tncm91bmRDb2xvcjogIiNmZmYiLA0KICAgICAgd2lkdGg6IDQwMCwNCiAgICAgIGhlaWdodDogMjUwLA0KICAgICAgYWx3YXlzT25Ub3A6IHRydWUsDQogICAgICBwYXJlbnQ6IG1haW5XaW5kb3csDQogICAgICBjbG9zYWJsZTogZmFsc2UsDQogICAgICBtaW5pbWl6YWJsZTogZmFsc2UsDQogICAgICBtYXhpbWl6YWJsZTogZmFsc2UsDQogICAgICBtb3ZhYmxlOiBmYWxzZSwNCiAgICAgIHNob3c6IGZhbHNlDQogICAgfSk7DQogICAgZGlhbG9nLmxvYWRGaWxlKCJibGFuayIpOw0KICAgIGRpYWxvZy53ZWJDb250ZW50cy5leGVjdXRlSmF2YVNjcmlwdChgZG9jdW1lbnQuYm9keS5zdHlsZSA9ICJtYXJnaW46IDA7IHBhZGRpbmc6IC0ycHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYm9yZGVyOiAycHggc29saWQgI2RkZDsgd2lkdGg6IDk5JTsgaGVpZ2h0OiA5OC40JTsiOyBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBcYA0KICAgIDxoMSBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I2RkZDsiPldhcm5pbmc8L2gxPg0KICAgIFxgO2ApOw0KICAgIGRpYWxvZy53ZWJDb250ZW50cy5leGVjdXRlSmF2YVNjcmlwdChgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gXGANCiAgICA8YnI+DQogICAgPHAgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNkZGQ7Ij4ke2RlY29kZVVSSUNvbXBvbmVudChtc2cpfTwvcD4NCiAgICBcYDtgKTsNCiAgICBkaWFsb2cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IFxgDQogICAgPGJyPg0KICAgIDxidXR0b24gc3R5bGU9ImN1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzIuNSU7YmFja2dyb3VuZDojZGRkO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6NHB4IDVweDtib3JkZXItcmFkaXVzOjNweDttYXJnaW46NXB4O2FsaWduOnJpZ2h0OyIgYWxpZ249InJpZ2h0IiBvbmNsaWNrPSJ3aW5kb3cuY2xvc2UoKSI+Q2FuY2VsPC9idXR0b24+DQogICAgPGJ1dHRvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMi41JTtiYWNrZ3JvdW5kOiNkZGQ7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzo0cHggNXB4O2JvcmRlci1yYWRpdXM6M3B4O21hcmdpbjo1cHg7YWxpZ246cmlnaHQ7IiBhbGlnbj0icmlnaHQiIG9uY2xpY2s9ImNvbnNvbGUubG9nKCIjRWxlY3Ryb246Y2xvc2VfYWxsX3dpbmRvd3MgW10iKSI+Q29uZmlybTwvYnV0dG9uPg0KICAgIFxgO2ApOw0KICAgIHJlbmRlclByb2Nlc3NFeGVjdXRpb25zKGRpYWxvZywgImNsb3NlX2FsbF93aW5kb3dzIiwgKCkgPT4gew0KICAgICAgbGV0IG9wYWMgPSAxOw0KICAgICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQogICAgICAgIGlmIChvcGFjID4gMCkgew0KICAgICAgICAgIG9wYWMgKz0gLS4xOw0KICAgICAgICAgIG1haW5XaW5kb3cuc2V0T3BhY2l0eShvcGFjKTsNCiAgICAgICAgICBkaWFsb2cuc2V0T3BhY2l0eShvcGFjKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICBhcHAucXVpdCgpOw0KICAgICAgICAgIGRpYWxvZy5ibHVyKCk7DQogICAgICAgICAgbWFpbldpbmRvdy5ibHVyKCk7DQogICAgICAgICAgZGlhbG9nLmNsb3NlKCk7DQogICAgICAgICAgbWFpbldpbmRvdy5jbG9zZSgpOw0KICAgICAgICB9DQogICAgICB9LCAzLjUpOw0KICAgIH0pOw0KICAgIGRpYWxvZy5zaG93KCk7DQogIH0pOw0KICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KCIhd2luZG93Lm5hdmlnYXRvci5vbkxpbmUgJiYgY29uc29sZS5sb2coJyNFbGVjdHJvbjpvZmZsaW5lX25ldHdvcmtfcmVwb3J0IFtdJykiKTsNCiAgbWFpbldpbmRvdy5sb2FkVVJMKCJodHRwczovL3BhcmtpbmdtYXN0ZXIubWwvaW5kZXguaHRtbCIpOw0KICByZW5kZXJQcm9jZXNzRXhlY3V0aW9ucyhtYWluV2luZG93LCAib2ZmbGluZV9uZXR3b3JrX3JlcG9ydCIsICgpID0+IHsNCiAgICBsZXQgdXJsID0gbWFpbldpbmRvdy53ZWJDb250ZW50cy5nZXRVUkwoKTsNCiAgICBpZiAoY2FjaGUgJiYgY2FjaGVbdXJsXSkgew0KICAgICAgbGV0IGNvbnRlbnQgPSBhdG9iKGNhY2hlW3VybF0pOw0KICAgICAgbWFpbldpbmRvdy53ZWJDb250ZW50cy5leGVjdXRlSmF2YVNjcmlwdChgDQogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MID0gYXRvYigiJHtidG9hKGNvbnRlbnQpfSIpOw0KICAgICAgYCk7DQogICAgICByZXR1cm47DQogICAgfQ0KICAgIG1haW5XaW5kb3cubG9hZEZpbGUoImVyci9vZmZsaW5lL2luZGV4Lmh0bWwiKTsNCiAgfSk7DQogIG1haW5XaW5kb3cuc2hvdygpOw0KICByZXF1aXJlKCJjaGlsZF9wcm9jZXNzIikuZXhlYyhgDQogIGlmIFsgLWYgImxvY2FsU3RvcmFnZS5qc29uIl07IHRoZW4NCiAgICBlY2hvICJ0cnVlIg0KICBlbHNlDQogICAgZWNobyAiZmFsc2UiDQogIGZpDQogIGAsIChlcnIsIHJlcykgPT4gew0KICAgIGlmIChyZXMudHJpbSgpID09ICJ0cnVlIikgew0KICAgICAgZnMucmVhZEZpbGUoX19kaXJuYW1lICsgIi9sb2NhbFN0b3JhZ2UuanNvbiIsICJ1dGY4IiwgKGVyciwgZGF0YSkgPT4gew0KICAgICAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KCJsb2NhbFN0b3JhZ2UgPSAiICsgZGF0YSk7DQogICAgICB9KTsNCiAgICB9DQogIH0pOw0KfQ0KYXBwLm9uKCJyZWFkeSIsIGluaXQpOw",
"package.json": "ew0KICAibmFtZSI6ICJwYXJraW5nLW1hc3Rlci0zLjAiLA0KICAidmVyc2lvbiI6ICIyLjEuMCIsDQogICJkZXNjcmlwdGlvbiI6ICJQYXJraW5nIE1hc3RlciAzLjAgaXMgYSBmdW4gY2FyIGdhbWUgdGhhdCBnaXZlcyB5b3UgcmFuZG9tIGNoYWxsZW5nZXMgdG8gZWFybiBhd2Vzb21lIHJld2FyZHMhIiwNCiAgIm1haW4iOiAibWFpbi5qcyIsDQogICJkZXBlbmRlbmNpZXMiOiB7DQogICAgImFiYnJldiI6ICJeMS4xLjEiLA0KICAgICJhY2N1cml6ZXIiOiAiXjEuMC4zIiwNCiAgICAiYWNvcm4iOiAiXjYuNC4yIiwNCiAgICAiYWNvcm4tanN4IjogIl41LjMuMiIsDQogICAgImFjb3JuLW5vZGUiOiAiXjEuOC4yIiwNCiAgICAiYWNvcm4td2FsayI6ICJeNy4yLjAiLA0KICAgICJhZ2VudC1iYXNlIjogIl42LjAuMiIsDQogICAgImFnZW50a2VlcGFsaXZlIjogIl40LjMuMCIsDQogICAgImFnZ3JlZ2F0ZS1lcnJvciI6ICJeMy4xLjAiLA0KICAgICJhanYiOiAiXjYuMTIuNiIsDQogICAgImFuc2ktZXNjYXBlcyI6ICJeNC4zLjIiLA0KICAgICJhbnNpLXJlZ2V4IjogIl41LjAuMSIsDQogICAgImFuc2ktc3R5bGVzIjogIl40LjMuMCIsDQogICAgImFwcm9iYSI6ICJeMi4wLjAiLA0KICAgICJhcmUtd2UtdGhlcmUteWV0IjogIl4zLjAuMSIsDQogICAgImFyZ3BhcnNlIjogIl4xLjAuMTAiLA0KICAgICJhcnJheS1mcm9tIjogIl4yLjEuMSIsDQogICAgImFzYXIiOiAiXjMuMi4wIiwNCiAgICAiYXNuMSI6ICJeMC4yLjYiLA0KICAgICJhc3NlcnQtcGx1cyI6ICJeMS4wLjAiLA0KICAgICJhc3NlcnRpb24tZXJyb3IiOiAiXjEuMS4wIiwNCiAgICAiYXN0cmFsLXJlZ2V4IjogIl4yLjAuMCIsDQogICAgImFzeW5ja2l0IjogIl4wLjQuMCIsDQogICAgImF0LWxlYXN0LW5vZGUiOiAiXjEuMC4wIiwNCiAgICAiYXV0aG9yLXJlZ2V4IjogIl4xLjAuMCIsDQogICAgImF3cy1zaWduMiI6ICJeMC43LjAiLA0KICAgICJhd3M0IjogIl4xLjExLjAiLA0KICAgICJiYWJlbC1jb2RlLWZyYW1lIjogIl42LjI2LjAiLA0KICAgICJiYWxhbmNlZC1tYXRjaCI6ICJeMS4wLjIiLA0KICAgICJiYXNlNjQtanMiOiAiXjEuNS4xIiwNCiAgICAiYmNyeXB0LXBia2RmIjogIl4xLjAuMiIsDQogICAgImJsIjogIl40LjEuMCIsDQogICAgImJsdWViaXJkIjogIl4zLjcuMiIsDQogICAgImJvb2xlYW4iOiAiXjMuMi4wIiwNCiAgICAiYnJhY2UtZXhwYW5zaW9uIjogIl4xLjEuMTEiLA0KICAgICJicmFjZXMiOiAiXjMuMC4yIiwNCiAgICAiYnJmcyI6ICJeMi4wLjIiLA0KICAgICJicm93c2VyLXN0ZG91dCI6ICJeMS4zLjAiLA0KICAgICJidG9hIjogIl4xLjIuMSIsDQogICAgImJ1ZmZlciI6ICJeNS43LjEiLA0KICAgICJidWZmZXItYWxsb2MiOiAiXjEuMi4wIiwNCiAgICAiYnVmZmVyLWFsbG9jLXVuc2FmZSI6ICJeMS4xLjAiLA0KICAgICJidWZmZXItY3JjMzIiOiAiXjAuMi4xMyIsDQogICAgImJ1ZmZlci1lcXVhbCI6ICJeMS4wLjEiLA0KICAgICJidWZmZXItZmlsbCI6ICJeMS4wLjAiLA0KICAgICJidWZmZXItZnJvbSI6ICJeMS4xLjIiLA0KICAgICJjYWNhY2hlIjogIl4xNi4xLjMiLA0KICAgICJjYWNoZWFibGUtbG9va3VwIjogIl41LjAuNCIsDQogICAgImNhY2hlYWJsZS1yZXF1ZXN0IjogIl43LjAuMiIsDQogICAgImNhbGxlci1wYXRoIjogIl4wLjEuMCIsDQogICAgImNhbGxzaXRlcyI6ICJeMy4xLjAiLA0KICAgICJjYW1lbGNhc2UiOiAiXjUuMy4xIiwNCiAgICAiY2FzZWxlc3MiOiAiXjAuMTIuMCIsDQogICAgImNoYWkiOiAiXjQuMy42IiwNCiAgICAiY2hhaS1hcy1wcm9taXNlZCI6ICJeNy4xLjEiLA0KICAgICJjaGFsayI6ICJeNC4xLjIiLA0KICAgICJjaGFyZGV0IjogIl4wLjcuMCIsDQogICAgImNoZWNrLWVycm9yIjogIl4xLjAuMiIsDQogICAgImNob3duciI6ICJeMi4wLjAiLA0KICAgICJjaHJvbWl1bS1waWNrbGUtanMiOiAiXjAuMi4wIiwNCiAgICAiY2lyY3VsYXItanNvbiI6ICJeMC4zLjMiLA0KICAgICJjbGVhbi1zdGFjayI6ICJeMi4yLjAiLA0KICAgICJjbGktY3Vyc29yIjogIl4zLjEuMCIsDQogICAgImNsaS1zcGlubmVycyI6ICJeMi44LjAiLA0KICAgICJjbGktdHJ1bmNhdGUiOiAiXjIuMS4wIiwNCiAgICAiY2xpLXdpZHRoIjogIl4zLjAuMCIsDQogICAgImNsaXVpIjogIl44LjAuMSIsDQogICAgImNsb25lIjogIl4xLjAuNCIsDQogICAgImNsb25lLXJlc3BvbnNlIjogIl4xLjAuMyIsDQogICAgImNvIjogIl40LjYuMCIsDQogICAgImNvZGUtcG9pbnQtYXQiOiAiXjEuMS4wIiwNCiAgICAiY29sb3ItY29udmVydCI6ICJeMi4wLjEiLA0KICAgICJjb2xvci1uYW1lIjogIl4xLjEuNCIsDQogICAgImNvbG9yLXN1cHBvcnQiOiAiXjEuMS4zIiwNCiAgICAiY29sb3JldHRlIjogIl4yLjAuMjAiLA0KICAgICJjb2xvcnMiOiAiXjEuMC4zIiwNCiAgICAiY29tYmluZWQtc3RyZWFtIjogIl4xLjAuOCIsDQogICAgImNvbW1hbmRlciI6ICJeNC4xLjEiLA0KICAgICJjb21wYXJlLXZlcnNpb24iOiAiXjAuMS4yIiwNCiAgICAiY29tcHJlc3MtYnJvdGxpIjogIl4xLjMuOCIsDQogICAgImNvbmNhdC1tYXAiOiAiXjAuMC4xIiwNCiAgICAiY29uY2F0LXN0cmVhbSI6ICJeMS42LjIiLA0KICAgICJjb25maWctY2hhaW4iOiAiXjEuMS4xMyIsDQogICAgImNvbnNvbGUtY29udHJvbC1zdHJpbmdzIjogIl4xLjEuMCIsDQogICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMS44LjAiLA0KICAgICJjb3JlLXV0aWwtaXMiOiAiXjEuMC4zIiwNCiAgICAiY3Jvc3Mtc3Bhd24iOiAiXjcuMC4zIiwNCiAgICAiY3Jvc3Mtc3Bhd24td2luZG93cy1leGUiOiAiXjEuMi4wIiwNCiAgICAiY3Jvc3MtemlwIjogIl40LjAuMCIsDQogICAgImN1aW50IjogIl4wLjIuMiIsDQogICAgImN1cnJpZnkiOiAiXjQuMC4wIiwNCiAgICAiY3VzdG9tLWVsZWN0cm9uLXRpdGxlYmFyIjogIl40LjEuMCIsDQogICAgImQiOiAiXjEuMC4xIiwNCiAgICAiZGFzaC1hc3QiOiAiXjIuMC4xIiwNCiAgICAiZGFzaGRhc2giOiAiXjEuMTQuMSIsDQogICAgImRhdGEtdXJpLXRvLWJ1ZmZlciI6ICJeMC4wLjQiLA0KICAgICJkZWJ1ZyI6ICJeNC4zLjQiLA0KICAgICJkZWNhbWVsaXplIjogIl4xLjIuMCIsDQogICAgImRlY29tcHJlc3MtcmVzcG9uc2UiOiAiXjYuMC4wIiwNCiAgICAiZGVlcC1lcWwiOiAiXjMuMC4xIiwNCiAgICAiZGVlcC1pcyI6ICJeMC4xLjQiLA0KICAgICJkZWZhdWx0Y3NzIjogIl4xLjEuMSIsDQogICAgImRlZmF1bHRzIjogIl4xLjAuNCIsDQogICAgImRlZmVyLXRvLWNvbm5lY3QiOiAiXjIuMC4xIiwNCiAgICAiZGVmaW5lLWxhenktcHJvcCI6ICJeMi4wLjAiLA0KICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4yLjAiLA0KICAgICJkZWxheWVkLXN0cmVhbSI6ICJeMS4wLjAiLA0KICAgICJkZWxlZ2F0ZXMiOiAiXjEuMC4wIiwNCiAgICAiZGVwZCI6ICJeMi4wLjAiLA0KICAgICJkZXRlY3QtbGliYyI6ICJeMi4wLjEiLA0KICAgICJkZXRlY3Qtbm9kZSI6ICJeMi4xLjAiLA0KICAgICJkaWFsb2dzIjogIl4yLjAuMSIsDQogICAgImRpZmYiOiAiXjMuMi4wIiwNCiAgICAiZGlyLWNvbXBhcmUiOiAiXjMuMy4wIiwNCiAgICAiZG9jdHJpbmUiOiAiXjMuMC4wIiwNCiAgICAiZG9taWZ5IjogIl4wLjIuMCIsDQogICAgImR1cGxleGVyMiI6ICJeMC4xLjQiLA0KICAgICJkdXBsZXhlcjMiOiAiXjAuMS41IiwNCiAgICAiZWNjLWpzYm4iOiAiXjAuMS4yIiwNCiAgICAiZWxlY3Ryb24iOiAiXjI1LjIuMCIsDQogICAgImVsZWN0cm9uLWluc3RhbGxlci1jb21tb24iOiAiXjAuMTAuMyIsDQogICAgImVsZWN0cm9uLWluc3RhbGxlci1kZWJpYW4iOiAiXjMuMS4wIiwNCiAgICAiZWxlY3Ryb24taW5zdGFsbGVyLXJlZGhhdCI6ICJeMy40LjAiLA0KICAgICJlbGVjdHJvbi1pcy1wYWNrYWdlZCI6ICJeMS4wLjIiLA0KICAgICJlbGVjdHJvbi1sZXRzLW1vdmUiOiAiXjAuMC41IiwNCiAgICAiZWxlY3Ryb24tbm90YXJpemUiOiAiXjEuMi4xIiwNCiAgICAiZWxlY3Ryb24tb3N4LXByb21wdCI6ICJeMS40LjEiLA0KICAgICJlbGVjdHJvbi1vc3gtc2lnbiI6ICJeMC41LjAiLA0KICAgICJlbGVjdHJvbi1yZWJ1aWxkIjogIl4zLjIuNyIsDQogICAgImVsZWN0cm9uLXJvb3QtcGF0aCI6ICJeMS4wLjE2IiwNCiAgICAiZWxlY3Ryb24tc2VuZGVyIjogIl4xLjAuNSIsDQogICAgImVsZWN0cm9uLXNxdWlycmVsLXN0YXJ0dXAiOiAiXjEuMC4wIiwNCiAgICAiZWxlY3Ryb24tdGl0bGViYXItd2luZG93cyI6ICJeMy4wLjAiLA0KICAgICJlbGVjdHJvbi13aW5zdGFsbGVyIjogIl41LjEuMCIsDQogICAgImVtb2ppLXJlZ2V4IjogIl44LjAuMCIsDQogICAgImVuY29kZXVybCI6ICJeMS4wLjIiLA0KICAgICJlbmNvZGluZyI6ICJeMC4xLjEzIiwNCiAgICAiZW5kLW9mLXN0cmVhbSI6ICJeMS40LjQiLA0KICAgICJlbnYtcGF0aHMiOiAiXjIuMi4xIiwNCiAgICAiZXJyLWNvZGUiOiAiXjIuMC4zIiwNCiAgICAiZXJyb3ItZXgiOiAiXjEuMy4yIiwNCiAgICAiZXM1LWV4dCI6ICJeMC4xMC42MSIsDQogICAgImVzNi1lcnJvciI6ICJeNC4xLjEiLA0KICAgICJlczYtaXRlcmF0b3IiOiAiXjIuMC4zIiwNCiAgICAiZXM2LW1hcCI6ICJeMC4xLjUiLA0KICAgICJlczYtc2V0IjogIl4wLjEuNSIsDQogICAgImVzNi1zeW1ib2wiOiAiXjMuMS4zIiwNCiAgICAiZXNjYWxhZGUiOiAiXjMuMS4xIiwNCiAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjQuMC4wIiwNCiAgICAiZXNjb2RlZ2VuIjogIl4xLjE0LjMiLA0KICAgICJlc2xpbnQiOiAiXjUuMTYuMCIsDQogICAgImVzbGludC1zY29wZSI6ICJeNC4wLjMiLA0KICAgICJlc2xpbnQtdXRpbHMiOiAiXjEuNC4zIiwNCiAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeMS4zLjAiLA0KICAgICJlc3ByZWUiOiAiXjUuMC4xIiwNCiAgICAiZXNwcmltYSI6ICJeNC4wLjEiLA0KICAgICJlc3F1ZXJ5IjogIl4xLjQuMCIsDQogICAgImVzcmVjdXJzZSI6ICJeNC4zLjAiLA0KICAgICJlc3RyYXZlcnNlIjogIl40LjMuMCIsDQogICAgImVzdHJlZS1pcy1mdW5jdGlvbiI6ICJeMS4wLjAiLA0KICAgICJlc3V0aWxzIjogIl4yLjAuMyIsDQogICAgImV2ZW50LWVtaXR0ZXIiOiAiXjAuMy41IiwNCiAgICAiZXhlY2EiOiAiXjEuMC4wIiwNCiAgICAiZXhwYW5kLXRpbGRlIjogIl4yLjAuMiIsDQogICAgImV4cHJlc3MtbWlycm9yIjogIl4xLjAuMiIsDQogICAgImV4dCI6ICJeMS42LjAiLA0KICAgICJleHRlbmQiOiAiXjMuMC4yIiwNCiAgICAiZXh0ZXJuYWwtZWRpdG9yIjogIl4zLjEuMCIsDQogICAgImV4dHJhY3QtemlwIjogIl4xLjcuMCIsDQogICAgImV4dHNwcmludGYiOiAiXjEuMy4wIiwNCiAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMyIsDQogICAgImZhc3QtZ2xvYiI6ICJeMy4yLjEyIiwNCiAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMS4wIiwNCiAgICAiZmFzdC1sZXZlbnNodGVpbiI6ICJeMi4wLjYiLA0KICAgICJmYXN0cSI6ICJeMS4xNS4wIiwNCiAgICAiZmQtc2xpY2VyIjogIl4xLjEuMCIsDQogICAgImZpZ3VyZXMiOiAiXjMuMi4wIiwNCiAgICAiZmlsZS1lbnRyeS1jYWNoZSI6ICJeNS4wLjEiLA0KICAgICJmaWxlbmFtZS1yZXNlcnZlZC1yZWdleCI6ICJeMi4wLjAiLA0KICAgICJmaWxlbmFtaWZ5IjogIl40LjMuMCIsDQogICAgImZpbGwtcmFuZ2UiOiAiXjcuMC4xIiwNCiAgICAiZmluZC11cCI6ICJeNS4wLjAiLA0KICAgICJmbGF0LWNhY2hlIjogIl4yLjAuMSIsDQogICAgImZsYXR0ZWQiOiAiXjIuMC4yIiwNCiAgICAiZmxvcmEtY29sb3NzdXMiOiAiXjEuMC4xIiwNCiAgICAiZm9yZXZlci1hZ2VudCI6ICJeMC42LjEiLA0KICAgICJmb3JtLWRhdGEiOiAiXjIuMy4zIiwNCiAgICAiZnMtZXh0cmEiOiAiXjEwLjEuMCIsDQogICAgImZzLW1pbmlwYXNzIjogIl4yLjEuMCIsDQogICAgImZzLnJlYWxwYXRoIjogIl4xLjAuMCIsDQogICAgImZ1bGxzdG9yZSI6ICJeMy4wLjAiLA0KICAgICJmdW5jdGlvbi1iaW5kIjogIl4xLjEuMSIsDQogICAgImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWUiOiAiXjEuMC4xIiwNCiAgICAiZ2FsYWN0dXMiOiAiXjAuMi4xIiwNCiAgICAiZ2FyIjogIl4xLjAuNCIsDQogICAgImdhdWdlIjogIl40LjAuNCIsDQogICAgImdldC1hc3NpZ25lZC1pZGVudGlmaWVycyI6ICJeMS4yLjAiLA0KICAgICJnZXQtY2FsbGVyLWZpbGUiOiAiXjIuMC41IiwNCiAgICAiZ2V0LWZvbGRlci1zaXplIjogIl4yLjAuMSIsDQogICAgImdldC1mdW5jLW5hbWUiOiAiXjIuMC4wIiwNCiAgICAiZ2V0LWluc3RhbGxlZC1wYXRoIjogIl4yLjEuMSIsDQogICAgImdldC1pbnRyaW5zaWMiOiAiXjEuMi4wIiwNCiAgICAiZ2V0LXBhY2thZ2UtaW5mbyI6ICJeMS4wLjAiLA0KICAgICJnZXQtc3RyZWFtIjogIl41LjIuMCIsDQogICAgImdldHBhc3MiOiAiXjAuMS43IiwNCiAgICAiZ2xvYiI6ICJeNy4yLjMiLA0KICAgICJnbG9iLXBhcmVudCI6ICJeNS4xLjIiLA0KICAgICJnbG9iYWwtYWdlbnQiOiAiXjMuMC4wIiwNCiAgICAiZ2xvYmFsLW1vZHVsZXMiOiAiXjEuMC4wIiwNCiAgICAiZ2xvYmFsLXByZWZpeCI6ICJeMS4wLjIiLA0KICAgICJnbG9iYWwtdHVubmVsLW5nIjogIl4yLjcuMSIsDQogICAgImdsb2JhbHMiOiAiXjExLjEyLjAiLA0KICAgICJnbG9iYWx0aGlzIjogIl4xLjAuMyIsDQogICAgImdvdCI6ICJeMTEuOC42IiwNCiAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsDQogICAgImdyYWNlZnVsLXJlYWRsaW5rIjogIl4xLjAuMSIsDQogICAgImdyb3dsIjogIl4xLjkuMiIsDQogICAgImdyb3dseSI6ICJeMS4zLjAiLA0KICAgICJoYXItc2NoZW1hIjogIl4yLjAuMCIsDQogICAgImhhci12YWxpZGF0b3IiOiAiXjUuMS41IiwNCiAgICAiaGFzIjogIl4xLjAuMyIsDQogICAgImhhcy1hbnNpIjogIl4yLjAuMCIsDQogICAgImhhcy1mbGFnIjogIl40LjAuMCIsDQogICAgImhhcy1wcm9wZXJ0eS1kZXNjcmlwdG9ycyI6ICJeMS4wLjAiLA0KICAgICJoYXMtc3ltYm9scyI6ICJeMS4wLjMiLA0KICAgICJoYXMtdW5pY29kZSI6ICJeMi4wLjEiLA0KICAgICJoZSI6ICJeMS4xLjEiLA0KICAgICJob21lZGlyLXBvbHlmaWxsIjogIl4xLjAuMyIsDQogICAgImhvc3RlZC1naXQtaW5mbyI6ICJeMi44LjkiLA0KICAgICJodHRwLWNhY2hlLXNlbWFudGljcyI6ICJeNC4xLjEiLA0KICAgICJodHRwLXByb3h5LWFnZW50IjogIl41LjAuMCIsDQogICAgImh0dHAtc2lnbmF0dXJlIjogIl4xLjIuMCIsDQogICAgImh0dHAyLXdyYXBwZXIiOiAiXjEuMC4zIiwNCiAgICAiaHR0cHMtcHJveHktYWdlbnQiOiAiXjUuMC4xIiwNCiAgICAiaHVtYW5pemUtbXMiOiAiXjEuMi4xIiwNCiAgICAiaHlwZXJnbHVlIjogIl4yLjAuMSIsDQogICAgImljb252LWxpdGUiOiAiXjAuNi4zIiwNCiAgICAiaWVlZTc1NCI6ICJeMS4yLjEiLA0KICAgICJpZ25vcmUiOiAiXjQuMC42IiwNCiAgICAiaW1wb3J0LWZyZXNoIjogIl4zLjMuMCIsDQogICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsDQogICAgImluZGVudC1zdHJpbmciOiAiXjQuMC4wIiwNCiAgICAiaW5mZXItb3duZXIiOiAiXjEuMC40IiwNCiAgICAiaW5mbGlnaHQiOiAiXjEuMC42IiwNCiAgICAiaW5oZXJpdHMiOiAiXjIuMC40IiwNCiAgICAiaW5pIjogIl4xLjMuOCIsDQogICAgImlucXVpcmVyIjogIl44LjIuNCIsDQogICAgImluc2VydC1jc3MiOiAiXjIuMC4wIiwNCiAgICAiaW50ZXJwcmV0IjogIl4zLjEuMSIsDQogICAgImlwIjogIl4yLjAuMCIsDQogICAgImlzLWFycmF5aXNoIjogIl4wLjIuMSIsDQogICAgImlzLWNvcmUtbW9kdWxlIjogIl4yLjEyLjAiLA0KICAgICJpcy1kb2NrZXIiOiAiXjIuMi4xIiwNCiAgICAiaXMtZXh0Z2xvYiI6ICJeMi4xLjEiLA0KICAgICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6ICJeMy4wLjAiLA0KICAgICJpcy1nbG9iIjogIl40LjAuMyIsDQogICAgImlzLWludGVyYWN0aXZlIjogIl4xLjAuMCIsDQogICAgImlzLWxhbWJkYSI6ICJeMS4wLjEiLA0KICAgICJpcy1udW1iZXIiOiAiXjcuMC4wIiwNCiAgICAiaXMtcmVzb2x2YWJsZSI6ICJeMS4xLjAiLA0KICAgICJpcy1zdHJlYW0iOiAiXjEuMS4wIiwNCiAgICAiaXMtdHlwZWRhcnJheSI6ICJeMS4wLjAiLA0KICAgICJpcy11bmljb2RlLXN1cHBvcnRlZCI6ICJeMC4xLjAiLA0KICAgICJpcy13aW5kb3dzIjogIl4xLjAuMiIsDQogICAgImlzLXdzbCI6ICJeMi4yLjAiLA0KICAgICJpc2FycmF5IjogIl4xLjAuMCIsDQogICAgImlzYmluYXJ5ZmlsZSI6ICJeNC4wLjEwIiwNCiAgICAiaXNleGUiOiAiXjIuMC4wIiwNCiAgICAiaXNzdHJlYW0iOiAiXjAuMS4yIiwNCiAgICAianMtdG9rZW5zIjogIl40LjAuMCIsDQogICAgImpzLXlhbWwiOiAiXjMuMTQuMSIsDQogICAgImpzYm4iOiAiXjAuMS4xIiwNCiAgICAianNvbi1idWZmZXIiOiAiXjMuMC4xIiwNCiAgICAianNvbi1zY2hlbWEiOiAiXjAuNC4wIiwNCiAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjAuNC4xIiwNCiAgICAianNvbi1zdGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeSI6ICJeMS4wLjEiLA0KICAgICJqc29uLXN0cmluZ2lmeS1zYWZlIjogIl41LjAuMSIsDQogICAgImpzb24zIjogIl4zLjMuMiIsDQogICAgImpzb25maWxlIjogIl42LjEuMCIsDQogICAgImpzcHJpbSI6ICJeMS40LjIiLA0KICAgICJqdW5rIjogIl4zLjEuMCIsDQogICAgImtleXYiOiAiXjQuNS4yIiwNCiAgICAibGV2biI6ICJeMC4zLjAiLA0KICAgICJsaXN0cjIiOiAiXjUuMC44IiwNCiAgICAibG9hZC1qc29uLWZpbGUiOiAiXjIuMC4wIiwNCiAgICAibG9jYXRlLXBhdGgiOiAiXjYuMC4wIiwNCiAgICAibG9kYXNoIjogIl40LjE3LjIxIiwNCiAgICAibG9kYXNoLl9iYXNlYXNzaWduIjogIl4zLjIuMCIsDQogICAgImxvZGFzaC5fYmFzZWNvcHkiOiAiXjMuMC4xIiwNCiAgICAibG9kYXNoLl9iYXNlY3JlYXRlIjogIl4zLjAuMyIsDQogICAgImxvZGFzaC5fZ2V0bmF0aXZlIjogIl4zLjkuMSIsDQogICAgImxvZGFzaC5faXNpdGVyYXRlZWNhbGwiOiAiXjMuMC45IiwNCiAgICAibG9kYXNoLl9yZWludGVycG9sYXRlIjogIl4zLjAuMCIsDQogICAgImxvZGFzaC5jcmVhdGUiOiAiXjMuMS4xIiwNCiAgICAibG9kYXNoLmdldCI6ICJeNC40LjIiLA0KICAgICJsb2Rhc2guaXNhcmd1bWVudHMiOiAiXjMuMS4wIiwNCiAgICAibG9kYXNoLmlzYXJyYXkiOiAiXjMuMC40IiwNCiAgICAibG9kYXNoLmtleXMiOiAiXjMuMS4yIiwNCiAgICAibG9kYXNoLnRlbXBsYXRlIjogIl40LjUuMCIsDQogICAgImxvZGFzaC50ZW1wbGF0ZXNldHRpbmdzIjogIl40LjIuMCIsDQogICAgImxvZy1zeW1ib2xzIjogIl40LjEuMCIsDQogICAgImxvZy11cGRhdGUiOiAiXjQuMC4wIiwNCiAgICAibG91cGUiOiAiXjIuMy40IiwNCiAgICAibG93ZXJjYXNlLWtleXMiOiAiXjIuMC4wIiwNCiAgICAibHJ1LWNhY2hlIjogIl43LjE4LjMiLA0KICAgICJsem1hLW5hdGl2ZSI6ICJeOC4wLjYiLA0KICAgICJtYWdpYy1zdHJpbmciOiAiXjAuMjUuMSIsDQogICAgIm1ha2UtZmV0Y2gtaGFwcGVuIjogIl4xMC4yLjEiLA0KICAgICJtYXAtYWdlLWNsZWFuZXIiOiAiXjAuMS4zIiwNCiAgICAibWF0Y2hlciI6ICJeMy4wLjAiLA0KICAgICJtZW0iOiAiXjQuMy4wIiwNCiAgICAibWVyZ2Utc291cmNlLW1hcCI6ICJeMS4wLjQiLA0KICAgICJtZXJnZTIiOiAiXjEuNC4xIiwNCiAgICAibWljcm9tYXRjaCI6ICJeNC4wLjUiLA0KICAgICJtaW1lLWRiIjogIl4xLjUyLjAiLA0KICAgICJtaW1lLXR5cGVzIjogIl4yLjEuMzUiLA0KICAgICJtaW1pYy1mbiI6ICJeMi4xLjAiLA0KICAgICJtaW1pYy1yZXNwb25zZSI6ICJeMS4wLjEiLA0KICAgICJtaW5pbWF0Y2giOiAiXjMuMS4yIiwNCiAgICAibWluaW1pc3QiOiAiXjEuMi44IiwNCiAgICAibWluaXBhc3MiOiAiXjMuMy42IiwNCiAgICAibWluaXBhc3MtY29sbGVjdCI6ICJeMS4wLjIiLA0KICAgICJtaW5pcGFzcy1mZXRjaCI6ICJeMi4xLjIiLA0KICAgICJtaW5pcGFzcy1mbHVzaCI6ICJeMS4wLjUiLA0KICAgICJtaW5pcGFzcy1waXBlbGluZSI6ICJeMS4yLjQiLA0KICAgICJtaW5pcGFzcy1zaXplZCI6ICJeMS4wLjMiLA0KICAgICJtaW5pemxpYiI6ICJeMi4xLjIiLA0KICAgICJta2RpcnAiOiAiXjAuNS42IiwNCiAgICAibW9jaGEtYmV0dGVyLXNwZWMtcmVwb3J0ZXIiOiAiXjMuMS4wIiwNCiAgICAibXMiOiAiXjIuMS4yIiwNCiAgICAibXV0ZS1zdHJlYW0iOiAiXjAuMC44IiwNCiAgICAibmF0dXJhbC1jb21wYXJlIjogIl4xLjQuMCIsDQogICAgIm5lZ290aWF0b3IiOiAiXjAuNi4zIiwNCiAgICAibmV4dC10aWNrIjogIl4xLjEuMCIsDQogICAgIm5pY2UtdHJ5IjogIl4xLjAuNSIsDQogICAgIm5vZGUtYWJpIjogIl4zLjQwLjAiLA0KICAgICJub2RlLWFkZG9uLWFwaSI6ICJeMy4yLjEiLA0KICAgICJub2RlLWFwaS12ZXJzaW9uIjogIl4wLjEuNCIsDQogICAgIm5vZGUtZmV0Y2giOiAiXjIuNi45IiwNCiAgICAibm9kZS1neXAiOiAiXjkuMy4xIiwNCiAgICAibm9kZS1neXAtYnVpbGQiOiAiXjQuNC4wIiwNCiAgICAibm9kZS1ub3RpZmllciI6ICJeMTAuMC4xIiwNCiAgICAibm9wdCI6ICJeNi4wLjAiLA0KICAgICJub3JtYWxpemUtcGFja2FnZS1kYXRhIjogIl4yLjUuMCIsDQogICAgIm5vcm1hbGl6ZS11cmwiOiAiXjYuMS4wIiwNCiAgICAibnBtLWNvbmYiOiAiXjEuMS4zIiwNCiAgICAibnBtLXJ1bi1wYXRoIjogIl4yLjAuMiIsDQogICAgIm5wbWxvZyI6ICJeNi4wLjIiLA0KICAgICJudWdnZXQiOiAiXjIuMC4yIiwNCiAgICAibnVtYmVyLWlzLW5hbiI6ICJeMS4wLjEiLA0KICAgICJvYXV0aC1zaWduIjogIl4wLjkuMCIsDQogICAgIm9iamVjdC1hc3NpZ24iOiAiXjQuMS4xIiwNCiAgICAib2JqZWN0LWluc3BlY3QiOiAiXjEuMTIuMiIsDQogICAgIm9iamVjdC1rZXlzIjogIl4xLjEuMSIsDQogICAgIm9uY2UiOiAiXjEuNC4wIiwNCiAgICAib25ldGltZSI6ICJeNS4xLjIiLA0KICAgICJvcGVuIjogIl44LjQuMCIsDQogICAgIm9wdGlvbmF0b3IiOiAiXjAuOC4zIiwNCiAgICAib3JhIjogIl41LjQuMSIsDQogICAgIm9zLXRtcGRpciI6ICJeMS4wLjIiLA0KICAgICJwLWNhbmNlbGFibGUiOiAiXjIuMS4xIiwNCiAgICAicC1kZWZlciI6ICJeMS4wLjAiLA0KICAgICJwLWZpbmFsbHkiOiAiXjEuMC4wIiwNCiAgICAicC1pcy1wcm9taXNlIjogIl4yLjEuMCIsDQogICAgInAtbGltaXQiOiAiXjMuMS4wIiwNCiAgICAicC1sb2NhdGUiOiAiXjUuMC4wIiwNCiAgICAicC1tYXAiOiAiXjQuMC4wIiwNCiAgICAicC10cnkiOiAiXjIuMi4wIiwNCiAgICAicGFyZW50LW1vZHVsZSI6ICJeMS4wLjEiLA0KICAgICJwYXJzZS1hdXRob3IiOiAiXjIuMC4wIiwNCiAgICAicGFyc2UtanNvbiI6ICJeMi4yLjAiLA0KICAgICJwYXJzZS1tcyI6ICJeMi4xLjAiLA0KICAgICJwYXJzZS1wYXNzd2QiOiAiXjEuMC4wIiwNCiAgICAicGF0aC1leGlzdHMiOiAiXjQuMC4wIiwNCiAgICAicGF0aC1pcy1hYnNvbHV0ZSI6ICJeMS4wLjEiLA0KICAgICJwYXRoLWlzLWluc2lkZSI6ICJeMS4wLjIiLA0KICAgICJwYXRoLWtleSI6ICJeMy4xLjEiLA0KICAgICJwYXRoLXBhcnNlIjogIl4xLjAuNyIsDQogICAgInBhdGgtdHlwZSI6ICJeMi4wLjAiLA0KICAgICJwYXRodmFsIjogIl4xLjEuMSIsDQogICAgInBlbmQiOiAiXjEuMi4wIiwNCiAgICAicGVyZm9ybWFuY2Utbm93IjogIl4yLjEuMCIsDQogICAgInBpY29tYXRjaCI6ICJeMi4zLjEiLA0KICAgICJwaWZ5IjogIl4yLjMuMCIsDQogICAgInBrZy1kaXIiOiAiXjQuMi4wIiwNCiAgICAicGxpc3QiOiAiXjMuMC42IiwNCiAgICAicGx1cmFsaXplIjogIl43LjAuMCIsDQogICAgInByZWx1ZGUtbHMiOiAiXjEuMS4yIiwNCiAgICAicHJlcGVuZC1odHRwIjogIl4yLjAuMCIsDQogICAgInByZXR0eS1ieXRlcyI6ICJeNC4wLjIiLA0KICAgICJwcmV0dHktbXMiOiAiXjcuMC4xIiwNCiAgICAicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOiAiXjIuMC4xIiwNCiAgICAicHJvZ3Jlc3MiOiAiXjIuMC4zIiwNCiAgICAicHJvZ3Jlc3Mtc3RyZWFtIjogIl4xLjIuMCIsDQogICAgInByb21pc2UtaW5mbGlnaHQiOiAiXjEuMC4xIiwNCiAgICAicHJvbWlzZS1yZXRyeSI6ICJeMi4wLjEiLA0KICAgICJwcm90by1saXN0IjogIl4xLjIuNCIsDQogICAgInByb3RvY29sIjogIl4wLjEuNCIsDQogICAgInBzZXVkb21hcCI6ICJeMS4wLjIiLA0KICAgICJwc2wiOiAiXjEuOC4wIiwNCiAgICAicHVtcCI6ICJeMy4wLjAiLA0KICAgICJwdW55Y29kZSI6ICJeMi4xLjEiLA0KICAgICJxcyI6ICJeNi41LjMiLA0KICAgICJxdWV1ZS1taWNyb3Rhc2siOiAiXjEuMi4zIiwNCiAgICAicXVpY2stbHJ1IjogIl41LjEuMSIsDQogICAgInF1b3RlLXN0cmVhbSI6ICJeMS4wLjIiLA0KICAgICJyY2VkaXQiOiAiXjMuMC4xIiwNCiAgICAicmVhZC1wa2ciOiAiXjIuMC4wIiwNCiAgICAicmVhZC1wa2ctdXAiOiAiXjIuMC4wIiwNCiAgICAicmVhZGFibGUtc3RyZWFtIjogIl4yLjMuOCIsDQogICAgInJlY2hvaXIiOiAiXjAuOC4wIiwNCiAgICAicmVnZXhwcCI6ICJeMi4wLjEiLA0KICAgICJyZXF1ZXN0IjogIl4yLjg4LjIiLA0KICAgICJyZXF1aXJlLWRpcmVjdG9yeSI6ICJeMi4xLjEiLA0KICAgICJyZXF1aXJlLW1haW4tZmlsZW5hbWUiOiAiXjIuMC4wIiwNCiAgICAicmVxdWlyZS11bmNhY2hlZCI6ICJeMS4wLjMiLA0KICAgICJyZXNvbHZlIjogIl4xLjIyLjIiLA0KICAgICJyZXNvbHZlLWFscG4iOiAiXjEuMi4xIiwNCiAgICAicmVzb2x2ZS1kaXIiOiAiXjEuMC4xIiwNCiAgICAicmVzb2x2ZS1mcm9tIjogIl40LjAuMCIsDQogICAgInJlc29sdmUtcGFja2FnZSI6ICJeMS4wLjEiLA0KICAgICJyZXNwb25zZWxpa2UiOiAiXjIuMC4xIiwNCiAgICAicmVzdG9yZS1jdXJzb3IiOiAiXjMuMS4wIiwNCiAgICAicmV0cnkiOiAiXjAuMTIuMCIsDQogICAgInJldXNpZnkiOiAiXjEuMC40IiwNCiAgICAicmZkYyI6ICJeMS4zLjAiLA0KICAgICJyaW1yYWYiOiAiXjMuMC4yIiwNCiAgICAicm9hcnIiOiAiXjIuMTUuNCIsDQogICAgInJ1bi1hc3luYyI6ICJeMi40LjEiLA0KICAgICJydW4tcGFyYWxsZWwiOiAiXjEuMi4wIiwNCiAgICAicngtbGl0ZSI6ICJeNC4wLjgiLA0KICAgICJyeC1saXRlLWFnZ3JlZ2F0ZXMiOiAiXjQuMC44IiwNCiAgICAicnhqcyI6ICJeNy44LjEiLA0KICAgICJzYWZlLWJ1ZmZlciI6ICJeNS4xLjIiLA0KICAgICJzYWZlci1idWZmZXIiOiAiXjIuMS4yIiwNCiAgICAic2NvcGUtYW5hbHl6ZXIiOiAiXjIuMS4yIiwNCiAgICAic2VtdmVyIjogIl43LjUuMCIsDQogICAgInNlbXZlci1jb21wYXJlIjogIl4xLjAuMCIsDQogICAgInNlcmlhbGl6ZS1lcnJvciI6ICJeNy4wLjEiLA0KICAgICJzZXQtYmxvY2tpbmciOiAiXjIuMC4wIiwNCiAgICAic2hhbGxvdy1jb3B5IjogIl4wLjAuMSIsDQogICAgInNoZWJhbmctY29tbWFuZCI6ICJeMi4wLjAiLA0KICAgICJzaGViYW5nLXJlZ2V4IjogIl4zLjAuMCIsDQogICAgInNoZWxsd29yZHMiOiAiXjAuMS4xIiwNCiAgICAic2hvdWxkLWZvcm1hdCI6ICJeMy4wLjMiLA0KICAgICJzaG91bGQtdHlwZSI6ICJeMS40LjAiLA0KICAgICJzaG91bGQtdHlwZS1hZGFwdG9ycyI6ICJeMS4xLjAiLA0KICAgICJzaG91bGQtdXRpbCI6ICJeMS4wLjEiLA0KICAgICJzaWduYWwtZXhpdCI6ICJeMy4wLjciLA0KICAgICJzaW5nbGUtbGluZS1sb2ciOiAiXjEuMS4yIiwNCiAgICAic2xpY2UtYW5zaSI6ICJeMy4wLjAiLA0KICAgICJzbWFsbHRhbGsiOiAiXjQuMC43IiwNCiAgICAic21hcnQtYnVmZmVyIjogIl40LjIuMCIsDQogICAgInNvY2tzIjogIl4yLjcuMSIsDQogICAgInNvY2tzLXByb3h5LWFnZW50IjogIl43LjAuMCIsDQogICAgInNvdXJjZS1tYXAiOiAiXjAuNi4xIiwNCiAgICAic291cmNlLW1hcC1zdXBwb3J0IjogIl4wLjUuMjEiLA0KICAgICJzb3VyY2VtYXAtY29kZWMiOiAiXjEuNC44IiwNCiAgICAic3BkeC1jb3JyZWN0IjogIl4zLjIuMCIsDQogICAgInNwZHgtZXhjZXB0aW9ucyI6ICJeMi4zLjAiLA0KICAgICJzcGR4LWV4cHJlc3Npb24tcGFyc2UiOiAiXjMuMC4xIiwNCiAgICAic3BkeC1saWNlbnNlLWlkcyI6ICJeMy4wLjEzIiwNCiAgICAic3BlZWRvbWV0ZXIiOiAiXjAuMS40IiwNCiAgICAic3ByaW50Zi1qcyI6ICJeMS4xLjIiLA0KICAgICJzc2hwayI6ICJeMS4xNy4wIiwNCiAgICAic3NyaSI6ICJeOS4wLjEiLA0KICAgICJzdGFjay10cmFjZSI6ICJeMC4wLjkiLA0KICAgICJzdGF0aWMtZXZhbCI6ICJeMi4xLjAiLA0KICAgICJzdGF0aWMtbW9kdWxlIjogIl4zLjAuNCIsDQogICAgInN0cmluZ19kZWNvZGVyIjogIl4xLjEuMSIsDQogICAgInN0cmluZy13aWR0aCI6ICJeNC4yLjMiLA0KICAgICJzdHJpcC1hbnNpIjogIl42LjAuMSIsDQogICAgInN0cmlwLWJvbSI6ICJeMy4wLjAiLA0KICAgICJzdHJpcC1lb2YiOiAiXjEuMC4wIiwNCiAgICAic3RyaXAtanNvbi1jb21tZW50cyI6ICJeMi4wLjEiLA0KICAgICJzdHJpcC1vdXRlciI6ICJeMS4wLjEiLA0KICAgICJzdWRvLXByb21wdCI6ICJeOS4yLjEiLA0KICAgICJzdW1jaGVja2VyIjogIl4zLjAuMSIsDQogICAgInN1cHBvcnRzLWNvbG9yIjogIl43LjIuMCIsDQogICAgInN1cHBvcnRzLXByZXNlcnZlLXN5bWxpbmtzLWZsYWciOiAiXjEuMC4wIiwNCiAgICAidGFibGUiOiAiXjUuNC42IiwNCiAgICAidGFyIjogIl42LjEuMTMiLA0KICAgICJ0ZW1wIjogIl4wLjkuNCIsDQogICAgInRleHQtdGFibGUiOiAiXjAuMi4wIiwNCiAgICAidGhyb3R0bGVpdCI6ICJeMC4wLjIiLA0KICAgICJ0aHJvdWdoIjogIl4yLjMuOCIsDQogICAgInRocm91Z2gyIjogIl4wLjIuMyIsDQogICAgInRpbnktZWFjaC1hc3luYyI6ICJeMi4wLjMiLA0KICAgICJ0bXAiOiAiXjAuMi4xIiwNCiAgICAidG1wLXByb21pc2UiOiAiXjMuMC4zIiwNCiAgICAidG8tcmVhZGFibGUtc3RyZWFtIjogIl4xLjAuMCIsDQogICAgInRvLXJlZ2V4LXJhbmdlIjogIl41LjAuMSIsDQogICAgInRvdWdoLWNvb2tpZSI6ICJeMi41LjAiLA0KICAgICJ0cjQ2IjogIl4wLjAuMyIsDQogICAgInRyaW0tcmVwZWF0ZWQiOiAiXjEuMC4wIiwNCiAgICAidHNsaWIiOiAiXjIuNS4wIiwNCiAgICAidHVubmVsIjogIl4wLjAuNiIsDQogICAgInR1bm5lbC1hZ2VudCI6ICJeMC42LjAiLA0KICAgICJ0d2VldG5hY2wiOiAiXjAuMTQuNSIsDQogICAgInR5cGUiOiAiXjEuMi4wIiwNCiAgICAidHlwZS1jaGVjayI6ICJeMC4zLjIiLA0KICAgICJ0eXBlLWRldGVjdCI6ICJeNC4wLjgiLA0KICAgICJ0eXBlLWZlc3QiOiAiXjAuMjEuMyIsDQogICAgInR5cGVkYXJyYXkiOiAiXjAuMC42IiwNCiAgICAidW5pcXVlLWZpbGVuYW1lIjogIl4yLjAuMSIsDQogICAgInVuaXF1ZS1zbHVnIjogIl4zLjAuMCIsDQogICAgInVuaXZlcnNhbGlmeSI6ICJeMi4wLjAiLA0KICAgICJ1cmktanMiOiAiXjQuNC4xIiwNCiAgICAidXJsLXBhcnNlLWxheCI6ICJeMy4wLjAiLA0KICAgICJ1c2VybmFtZSI6ICJeNS4xLjAiLA0KICAgICJ1dGlsLWRlcHJlY2F0ZSI6ICJeMS4wLjIiLA0KICAgICJ1dWlkIjogIl4zLjQuMCIsDQogICAgInY4LWNvbXBpbGUtY2FjaGUiOiAiXjIuMy4wIiwNCiAgICAidmFsaWRhdGUtbnBtLXBhY2thZ2UtbGljZW5zZSI6ICJeMy4wLjQiLA0KICAgICJ2ZXJyb3IiOiAiXjEuMTAuMCIsDQogICAgIndjd2lkdGgiOiAiXjEuMC4xIiwNCiAgICAid2ViaWRsLWNvbnZlcnNpb25zIjogIl4zLjAuMSIsDQogICAgIndoYXR3Zy11cmwiOiAiXjUuMC4wIiwNCiAgICAid2hpY2giOiAiXjIuMC4yIiwNCiAgICAid2hpY2gtbW9kdWxlIjogIl4yLjAuMSIsDQogICAgIndpZGUtYWxpZ24iOiAiXjEuMS41IiwNCiAgICAid29yZC13cmFwIjogIl4xLjIuMyIsDQogICAgIndyYXAtYW5zaSI6ICJeNy4wLjAiLA0KICAgICJ3cmFwcHkiOiAiXjEuMC4yIiwNCiAgICAid3JpdGUiOiAiXjEuMC4zIiwNCiAgICAieG1sYnVpbGRlciI6ICJeMTUuMS4xIiwNCiAgICAieHRlbmQiOiAiXjIuMS4yIiwNCiAgICAieTE4biI6ICJeNS4wLjgiLA0KICAgICJ5YWxsaXN0IjogIl40LjAuMCIsDQogICAgInlhcmdzIjogIl4xNy43LjEiLA0KICAgICJ5YXJncy1wYXJzZXIiOiAiXjIxLjEuMSIsDQogICAgInlhcm4tb3ItbnBtIjogIl4zLjAuMSIsDQogICAgInlhdXpsIjogIl4yLjEwLjAiLA0KICAgICJ5b2N0by1xdWV1ZSI6ICJeMC4xLjAiDQogIH0sDQogICJkZXZEZXBlbmRlbmNpZXMiOiB7DQogICAgImVsZWN0cm9uLXBhY2thZ2VyIjogIl4xNy4xLjEiLA0KICAgICJtb2NoYSI6ICJeMy41LjMiDQogIH0sDQogICJzY3JpcHRzIjogew0KICAgICJ0ZXN0IjogImVsZWN0cm9uIC4iDQogIH0sDQogICJyZXBvc2l0b3J5Ijogew0KICAgICJ0eXBlIjogImdpdCIsDQogICAgInVybCI6ICJnaXQraHR0cHM6Ly9naXRodWIuY29tL1BhcmtpbmctTWFzdGVyL1BhcmtpbmctTWFzdGVyLTMuMC5naXQiDQogIH0sDQogICJrZXl3b3JkcyI6IFsNCiAgICAicGFya2luZy1nYW1lIiwNCiAgICAiY2FyLWdhbWUiLA0KICAgICJqYXZhc2NyaXB0LWdhbWUiLA0KICAgICJodG1sIg0KICBdLA0KICAiYXV0aG9yIjogIlBhcmtpbmcgTWFzdGVyIDxwYXJraW5nbWFzdGVyQG1haWwuY29tPiAoaHR0cHM6Ly9wYXJraW5nbWFzdGVyLnczc3BhY2VzLmNvbS8pIiwNCiAgImxpY2Vuc2UiOiAiTUlUIiwNCiAgImJ1Z3MiOiB7DQogICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vUGFya2luZy1NYXN0ZXIvUGFya2luZy1NYXN0ZXItMy4wL2lzc3VlcyINCiAgfSwNCiAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9QYXJraW5nLU1hc3Rlci9QYXJraW5nLU1hc3Rlci0zLjAjcmVhZG1lIg0KfQ0K"
}
},
"3.1.2": {
"update": true,
"description": "Fixed minor bug regarding text format when display rollback versions",
"version": "3.1.2",
"filesToEdit": true,
"filesToAdd": false,
"urgent": false,
"editedFiles": ["main.js"],
"addedFiles": [],
"editSummary": {
"main.js": "Y29uc3QgeyBwcm90b2NvbCwgTm90aWZpY2F0aW9uLCBCcm93c2VyV2luZG93LCBhcHAsIE1lbnUsIHNoZWxsLCBkaWFsb2cgfSA9IHJlcXVpcmUoImVsZWN0cm9uIik7DQpjb25zdCBidG9hID0gcmVxdWlyZSgiYnRvYSIpOw0KY29uc3QgcGF0aCA9IHJlcXVpcmUoInBhdGgiKTsNCmNvbnN0IHJvb3RQYXRoID0gcmVxdWlyZSgiZWxlY3Ryb24tcm9vdC1wYXRoIikucm9vdFBhdGg7DQpjb25zdCBsb2NhdGlvbiA9IHBhdGguam9pbihyb290UGF0aCwgInBhY2thZ2UuanNvbiIpOw0KY29uc3QgZnMgPSByZXF1aXJlKCJmcyIpOw0KY29uc3QgbmF0aXZlVGhlbWUgPSByZXF1aXJlKCJlbGVjdHJvbiIpLm5hdGl2ZVRoZW1lOw0KY29uc3QgeyBtb3ZlVG9BcHBsaWNhdGlvbnMgfSA9IHJlcXVpcmUoImVsZWN0cm9uLWxldHMtbW92ZSIpOw0KY29uc3QgeyB1c2VySW5mbyB9ID0gcmVxdWlyZSgib3MiKTsNCmNvbnN0IGV4ZWMgPSByZXF1aXJlKCJjaGlsZF9wcm9jZXNzIikuZXhlYzsNCmNvbnN0IGh0dHAgPSByZXF1aXJlKCJodHRwcyIpOw0KY29uc3QgYXRvYiA9IHJlcXVpcmUoImF0b2IiKTsNCmNvbnN0IFNlbmRlciA9IHJlcXVpcmUoImVsZWN0cm9uLXNlbmRlciIpOw0KY29uc3QgQWNjdXJpemVyID0gcmVxdWlyZSgiYWNjdXJpemVyIik7DQpjb25zdCBsb2NhbFN0b3JhZ2UgPSBuZXcgKHJlcXVpcmUoIm5vZGUtbG9jYWxzdG9yYWdlIikuTG9jYWxTdG9yYWdlKShfX2Rpcm5hbWUpOw0KbGV0IHN0YWJsZVZlcnNpb24gPSAiMy4xLjEiOw0KDQpsZXQgY2FjaGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY2FjaGUiKSA/IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNhY2hlIikpKSkgOiBudWxsOw0KDQpjb25zb2xlLmxvZyhjYWNoZSkNCg0KcmVxdWlyZSgidjgtY29tcGlsZS1jYWNoZSIpOw0KDQppZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2ZXJzaW9uIikpIHsNCiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oInZlcnNpb24iLCBzdGFibGVWZXJzaW9uKTsNCn0NCg0KbGV0IGFwcFZlcnNpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidmVyc2lvbiIpIHx8ICIxLjAuMCI7DQoNCmxldCB1cGRhdGVJbmZvID0ge307DQoNCmxldCB2ZXJzaW9ucyA9IFsiXjEuMC4wIiwgIl4xLjEuMCIsICJeMi4xLjAiLCAiXjMuMS4xIl07DQoNCmxldCByZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KHsNCiAgaG9zdDogInBhcmtpbmdtYXN0ZXIubWwiLA0KICBwYXRoOiAiL3BrZ2xpc3QudHh0Ig0KfSwgZnVuY3Rpb24ocmVzKSB7DQogIGxldCBkYXRhID0gIiI7DQogIHJlcy5vbigiZGF0YSIsIGZ1bmN0aW9uKGNodW5rKSB7DQogICAgZGF0YSArPSBjaHVuazsNCiAgfSk7DQogIHJlcy5vbigiZW5kIiwgZnVuY3Rpb24oKSB7DQogICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7DQogICAgbGV0IG5leHRWZXJzaW9uID0gT2JqZWN0LmtleXMoZGF0YSlbT2JqZWN0LmtleXMoZGF0YSkuaW5kZXhPZihhcHBWZXJzaW9uKSArIDFdOw0KICAgIGlmICghIW5leHRWZXJzaW9uKSByZXR1cm4gdXBkYXRlSW5mbyA9IGRhdGFbbmV4dFZlcnNpb25dOw0KICAgIHVwZGF0ZUluZm8gPSBkYXRhW2FwcFZlcnNpb25dOw0KICAgIGxldCBhZGF0YSA9IE9iamVjdC5rZXlzKGRhdGEpOw0KICAgIGxldCBiZGF0YSA9IFtdOw0KICAgIGFkYXRhLmZvckVhY2goeCA9PiAoYmRhdGEucHVzaCgiXiIgKyB4KSkpOw0KICAgIHZlcnNpb25zID0gYmRhdGE7DQogICAgaWYgKCFuZXh0VmVyc2lvbikgc3RhYmxlVmVyc2lvbiA9IGFwcFZlcnNpb247DQogIH0pOw0KfSk7DQoNCnJlcXVlc3Qub24oImVycm9yIiwgZnVuY3Rpb24oZSkgew0KICBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpOw0KfSk7DQoNCnJlcXVlc3QuZW5kKCk7DQpuYXRpdmVUaGVtZS50aGVtZVNvdXJjZSA9ICJsaWdodCI7DQoNCmZ1bmN0aW9uIG5vdGlmeSh0LCBtLCB3KSB7DQogIHNldFRpbWVvdXQoKCkgPT4gdy53ZWJDb250ZW50cy5leGVjdXRlSmF2YVNjcmlwdChgbmV3IE5vdGlmaWNhdGlvbigiUGFya2luZyBNYXN0ZXIgMi4wIE5vdGlmaWVyIiwgeyBib2R5OiAiJHttfSIgfSk7YCksIDEwMDApOw0KfQ0KDQpmdW5jdGlvbiBhbGVydCh0aXRsZSA9ICIiLCB0ZXh0ID0gIiIsIGJ1dHRvbnMgPSBbXSkgew0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKC9cIi9naSwgYFxcImApOw0KICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1wiL2dpLCBgXFwiYCk7DQogICAgbWFpbldpbmRvdy53ZWJDb250ZW50cy5leGVjdXRlSmF2YVNjcmlwdChgDQogICAgc3dhbFdpdGhSZXR1cm4oew0KICAgICAgdGl0bGU6ICIke3RpdGxlfSIsDQogICAgICB0ZXh0OiAiJHt0ZXh0fSIsDQogICAgICAke2J1dHRvbnMubGVuZ3RoIDwgMSA/ICJidXR0b246IGZhbHNlIiA6IGJ1dHRvbnMubGVuZ3RoIDwgMiA/IGBidXR0b246ICIke2J1dHRvbnNbMF19ImAgOiBgYnV0dG9uczogWyIke2J1dHRvbnNbMF19IiwgIiR7YnV0dG9uc1sxXX0iXWB9DQogICAgfSk7DQogICAgYCk7DQogICAgU2VuZGVyLnJlY2VpdmUobWFpbldpbmRvdywgImFsZXJ0T3V0cHV0IiwgKGUpID0+IHsNCiAgICAgIGlmIChidXR0b25zLmxlbmd0aCA8IDIpIGUgPSAidHJ1ZSI7DQogICAgICBlID0gSlNPTi5wYXJzZShlKTsNCiAgICAgIGlmIChlKSByZXNvbHZlKCk7DQogICAgICBpZiAoIWUpIHJlamVjdCgpOw0KICAgIH0pOw0KICB9KTsNCn0NCg0KZnVuY3Rpb24gaW5pdCgpIHsNCiAgc2V0SW50ZXJ2YWwoKCkgPT4gew0KICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYA0KICAgIGZ1bmN0aW9uIHN3YWxXaXRoUmV0dXJuKCkgew0KICAgICAgc3dhbC5hcHBseShudWxsLCBhcmd1bWVudHMpLnRoZW4oKGUpID0+IHsNCiAgICAgICAgaWYgKGUpIHJldHVybiBTZW5kZXIuc2VuZCgiYWxlcnRPdXRwdXQiLCBbdHJ1ZV0pOw0KICAgICAgICBpZiAoIWUpIHJldHVybiBTZW5kZXIuc2VuZCgiYWxlcnRPdXRwdXQiLCBbZmFsc2VdKTsNCiAgICAgIH0pOw0KICAgIH0NCiAgICBgKTsNCiAgICBpZiAobWFpbldpbmRvdy53ZWJDb250ZW50cy5nZXRVUkwoKS5pbmNsdWRlcygiLyIpKSB7DQogICAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGANCiAgICAgIGZ1bmN0aW9uIGN1c3RvbWl6ZSgpIHsNCiAgICAgICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7DQogICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBcYA0KICAgICAgICA8YSBvbmNsaWNrPVwiYXBwVmVyc2lvbigpXCI+QXBwIHZlcnNpb248L2E+DQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YSBvbmNsaWNrPVwicGVyZm9ybWFuY2UoKVwiPlBlcmZvcm1hbmNlPC9hPg0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgPGEgb25jbGljaz1cImJhY2tncm91bmQoKVwiPkJhY2tncm91bmQ8L2E+DQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YSBvbmNsaWNrPVwiY2xlYXJEYXRhKClcIj5DbGVhciBkYXRhPC9hPg0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgPGEgb25jbGljaz1cImxvZ091dCgpXCI+TG9nIG91dCB1c2VyPC9hPg0KICAgICAgICA8YnI+DQogICAgICAgIDxicj4NCiAgICAgICAgPGEgb25jbGljaz1cImxvZ0luKClcIj5Mb2cgaW4gdXNlcjwvYT4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDxhIG9uY2xpY2s9XCJjdXN0b21pemVJbmZvKClcIj5Vc2VyIGluZm88L2E+DQogICAgICAgIDxicj4NCiAgICAgICAgPGRpdiBjbGFzcz1cInN3YWwtdGl0bGVcIj5PdGhlciBwbGFjZXM8L2Rpdj4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YSBvbmNsaWNrPVwibG9jYXRpb24uYXNzaWduKCd1c2Vycy8nKVwiPkFsbCB1c2VyczwvYT4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YnI+DQogICAgICAgIDxhIG9uY2xpY2s9XCJsb2NhdGlvbi5hc3NpZ24oJ3Nob3AuaHRtbCcpXCI+VGhlIHNob3A8L2E+DQogICAgICAgIDxicj4NCiAgICAgICAgPGJyPg0KICAgICAgICA8YSBvbmNsaWNrPVwibG9jYXRpb24uYXNzaWduKCdteS1saWNlbnNlLmh0bWwnKVwiPk15IExpY2Vuc2U8L2E+DQogICAgICAgIFxgOw0KICAgICAgICBzd2FsKHsNCiAgICAgICAgICB0aXRsZTogXCJDdXN0b21pemUvU2V0dGluZ3NcIiwNCiAgICAgICAgICBjb250ZW50OiBjb250YWluZXINCiAgICAgICAgfSk7DQogICAgICB9DQoNCiAgICAgIGF2YWlsYWJsZVZlcnNpb25zID0gJHtKU09OLnN0cmluZ2lmeSh2ZXJzaW9ucyl9Ow0KDQogICAgICBmdW5jdGlvbiBhcHBWZXJzaW9uKCkgew0KICAgICAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTsNCiAgICAgICAgY29udGFpbmVyLmluZW5ySFRNTCA9IFxgDQogICAgICAgIDxwPldBUk5JTkc6IFlvdSBhcmUgc2VsZWN0aW5nIGEgdmVyc2lvbiB0byByb2xsYmFjayB0by4gVGhpcyBjYW4gcmVzdWx0IGluIHNlY3VyaXR5IGZsYXdzLCBidWdneSBjb2RlIGFuZCBwb3RlbnRpYWxseSBhIGJyb2tlbiBhcHBsaWNhdGlvbi4NCiAgICAgICAgXGA7DQogICAgICAgIGF2YWlsYWJsZVZlcnNpb25zLmZvckVhY2goeCA9PiB7DQogICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCArPSBcYA0KICAgICAgICAgIDxhIG9uY2xpY2s9XCJzZWxlY3RWZXJzaW9uKHRoaXMudGV4dENvbnRlbnQucmVwbGFjZSgnXicsICcnKS50cmltKCkpXCI+XCR7eH08L2E+DQogICAgICAgICAgPGJyPg0KICAgICAgICAgIDxicj4NCiAgICAgICAgICBcYDsNCiAgICAgICAgfSk7DQogICAgICAgIHN3YWwoew0KICAgICAgICAgIHRpdGxlOiBcIlJvbGxiYWNrIHRvIHZlcnNpb24uLi5cIiwNCiAgICAgICAgICBjb250ZW50OiBjb250YWluZXINCiAgICAgICAgfSk7DQogICAgICB9DQoNCiAgICAgIGZ1bmN0aW9uIHNlbGVjdFZlcnNpb24odmVyc2lvbikgew0KICAgICAgICBpZiAoY29uZmlybSgiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJvbGxiYWNrIHRvIHZlcnNpb24gIiArIHZlcnNpb24gKyAiPyIpKSB7DQogICAgICAgICAgU2VuZGVyLnNlbmQoImNoYW5nZVZlcnNpb24iLCBbdmVyc2lvbl0pOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBgKTsNCiAgICB9DQogIH0sIDIwMCk7DQogIC8vIEdldCB1cGRhdGUgaW5mbw0KICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICBpZiAodXBkYXRlSW5mby51cGRhdGUgJiYgdXBkYXRlSW5mby52ZXJzaW9uICE9PSBhcHBWZXJzaW9uKSB7DQogICAgICBBY2N1cml6ZXIoIm11bHRpIiwgNSwgew0KICAgICAgICBmdW5jdGlvbnM6IFsibmV0d29yayIsICJkb3dubG9hZCJdLA0KICAgICAgICB1cmw6ICJodHRwczovL3BhcmtpbmdtYXN0ZXIubWwvcGtnbGlzdC50eHQiDQogICAgICB9KS50aGVuKHRpbWUgPT4gew0KICAgICAgICB0aW1lICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDkpOw0KICAgICAgICBsZXQgc2l6ZSA9IHVwZGF0ZUluZm8uZmlsZXNUb0VkaXQgPyAoT2JqZWN0LnZhbHVlcyh1cGRhdGVJbmZvLmVkaXRTdW1tYXJ5KS5tYXAoeCA9PiB7IHJldHVybiB4Lmxlbmd0aCB9KS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBhKSA9PiB7IHJldHVybiBhY2N1bXVsYXRvciArIGEgfSwgMCkgKyAxMDI0KSAvIDEwMjQgOiAodXBkYXRlSW5mby5maWxlc1RvQWRkID8gdXBkYXRlSW5mby5hZGRlZEZpbGVzLmxlbmd0aCAqIDEwMjQgOiAwKSAvIDEwMjQ7DQogICAgICAgIHNpemUgPSBzaXplLnRvRml4ZWQoMik7DQogICAgICAgIGFsZXJ0KCJOZXcgdXBkYXRlcyBhdmFpbGFibGUiLCAiXCIiICsgdXBkYXRlSW5mby5kZXNjcmlwdGlvbiArICJcIlxcblxcblVwZGF0ZSB2ZXJzaW9uOiAiICsgdXBkYXRlSW5mby52ZXJzaW9uICsgIlxcblVwZGF0ZSBzaXplOiAiICsgc2l6ZSArICJtYlxcblVwZGF0ZSB0aW1lOiAiICsgdGltZSArICJzXFxuXFxuV291bGQgeW91IGxpa2UgdG8gdXBkYXRlIG5vdz8iLCBbIk5vIiwgIlllcyJdKS50aGVuKCgpID0+IHsNCiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoInN3YWwuY2xvc2UoKSIpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oInZlcnNpb24iLCB1cGRhdGVJbmZvLnZlcnNpb24pOw0KICAgICAgICAgICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KG1haW5XaW5kb3csIHsNCiAgICAgICAgICAgICAgdGl0bGU6ICJBcHAgaXMgdXAgdG8gZGF0ZSIsDQogICAgICAgICAgICAgIG1lc3NhZ2U6ICJUaGUgYXBwbGljYXRpb24gd2lsbCBub3cgcmVzdGFydCBmb3IgdGhlIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QiLA0KICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7DQogICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpOw0KICAgICAgICAgICAgICBhcHAuZXhpdCgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgfSwgKHRpbWUgLSAwKSAqIDEwMDApOw0KICAgICAgICAgIGFsZXJ0KCJVcGRhdGluZy4uLiIsICJQbGVhc2Ugd2FpdCwgdGhpcyB3aWxsIG9ubHkgdGFrZSAiICsgdGltZS50b0ZpeGVkKDApICsgIiBzZWNvbmRzISIpOw0KICAgICAgICAgIGlmICh1cGRhdGVJbmZvLmZpbGVzVG9BZGQpIHsNCiAgICAgICAgICAgIHVwZGF0ZUluZm8uYWRkZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4gew0KICAgICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlKSkgcmV0dXJuOw0KICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSk7DQogICAgICAgICAgICAgIHN0cmVhbS5lbmQoKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodXBkYXRlSW5mby5maWxlc1RvRWRpdCkgew0KICAgICAgICAgICAgdXBkYXRlSW5mby5lZGl0ZWRGaWxlcy5mb3JFYWNoKGZpbGUgPT4gew0KICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZSkpIHJldHVybjsNCiAgICAgICAgICAgICAgbGV0IGRhdGEgPSAoYXRvYih1cGRhdGVJbmZvLmVkaXRTdW1tYXJ5W2ZpbGVdKSk7DQogICAgICAgICAgICAgIHZhciB3cml0ZVN0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZpbGUpOw0KICAgICAgICAgICAgICB3cml0ZVN0cmVhbS53cml0ZShkYXRhKTsNCiAgICAgICAgICAgICAgd3JpdGVTdHJlYW0uZW5kKCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgfSk7DQogICAgfQ0KICB9LCAzMDAwKTsNCiAgY29uc3QgZG9ja01lbnUgPSBNZW51LmJ1aWxkRnJvbVRlbXBsYXRlKFt7DQogICAgbGFiZWw6ICJOZXcgV2luZG93IiwNCiAgICBjbGljaygpIHsgaW5pdCgpIH0NCiAgfSwgew0KICAgICAgbGFiZWw6ICJOZXcgV2luZG93IHdpdGggU2V0dGluZ3MiLA0KICAgICAgc3VibWVudTogWw0KICAgICAgICB7IGxhYmVsOiAiQmFzaWMiIH0sDQogICAgICAgIHsgbGFiZWw6ICJQcm8iIH0NCiAgICAgIF0NCiAgICB9LA0KICAgIHsgbGFiZWw6ICJOZXcgQ29tbWFuZC4uLiIgfQ0KICBdKTsNCiAgYXBwLmRvY2suc2V0TWVudShkb2NrTWVudSk7DQogIG1haW5XaW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdyh7DQogICAgc2hvdzogZmFsc2UsDQogICAgd2lkdGg6IDEyODAsDQogICAgaGVpZ2h0OiA4MDAsDQogICAgaGFzU2hhZG93OiBmYWxzZSwNCiAgICBpY29uOiBfX2Rpcm5hbWUgKyAiL2ljb24uaWNucyIsDQogICAgY2VudGVyOiB0cnVlDQogIH0pOw0KICBTZW5kZXIuYXBwZW5kKG1haW5XaW5kb3cpOw0KICBTZW5kZXIucmVjZWl2ZShtYWluV2luZG93LCAiY2hhbmdlVmVyc2lvbiIsICh2ZXJzaW9uKSA9PiB7DQogICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oInZlcnNpb24iLCB2ZXJzaW9uLnRyaW0oKSk7DQogICAgYXBwLnJlbGF1bmNoKCk7DQogICAgYXBwLnF1aXQoKTsNCiAgfSk7DQogIFNlbmRlci5yZWNlaXZlKG1haW5XaW5kb3csICJjYWNoZUNvbnRlbnQiLCAoZGF0YSkgPT4gew0KICAgIGxldCBvbGRDYWNoZSA9IGNhY2hlIHx8ICIiOw0KICAgIGxldCB1cmwgPSBtYWluV2luZG93LndlYkNvbnRlbnRzLmdldFVSTCgpOw0KICAgIGxldCBjb250ZW50ID0gb2xkQ2FjaGU7DQogICAgY29udGVudFt1cmxdID0gZGF0YTsNCiAgICBsZXQgbmV3Q2FjaGUgPSBidG9hKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjYWNoZSkpKTsNCiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY2FjaGUiLCBuZXdDYWNoZSk7DQogICAgY2FjaGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY2FjaGUiKSA/IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNhY2hlIikpKSkgOiBudWxsOw0KICB9KTsNCiAgbWFpbldpbmRvdy53ZWJDb250ZW50cy5vbigiZGlkLWZpbmlzaC1sb2FkIiwgKCkgPT4gew0KICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYA0KICAgIFNlbmRlci5zZW5kKCJjYWNoZUNvbnRlbnQiLCBbYnRvYShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MKV0pOw0KICAgIGApOw0KICB9KTsNCiAgbWFpbldpbmRvdy5sb2FkRmlsZSgiYmxhbmsiKTsNCiAgZnMuZXhpc3RzU3luYygiL1VzZXJzLyIgKyB1c2VySW5mbygpLnVzZXJuYW1lICsgIi9BcHBsaWNhdGlvbnMvUGFya2luZyBNYXN0ZXIgMi4wLmFwcCIpIHx8IG1vdmVUb0FwcGxpY2F0aW9ucyhmdW5jdGlvbihlcnIsIG1vdmVkKSB7DQogICAgaWYgKGVycikgew0KICAgICAgbm90aWZ5KCIiLCBlcnIsIG1haW5XaW5kb3cpOw0KICAgIH0NCiAgICBpZiAoIW1vdmVkKSB7DQogICAgICBub3RpZnkoIiIsIG1vdmVkLCBtYWluV2luZG93KTsNCiAgICB9DQogIH0pOw0KICBsZXQgY2xvc2VldnQgPSAoZXZlbnQpID0+IHsNCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOzsNCiAgICBsZXQgb3BhYyA9IDEuMDsNCiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7DQogICAgICBpZiAob3BhYyA8PSAwLjApIHsNCiAgICAgICAgcmV0dXJuIGZvcmNlUXVpdCgpOw0KICAgICAgfQ0KICAgICAgb3BhYyAtPSAuMTsNCiAgICAgIG1haW5XaW5kb3cuc2V0T3BhY2l0eShvcGFjKTsNCiAgICB9LCAxKTsNCiAgfQ0KICBmdW5jdGlvbiBmb3JjZVF1aXQoKSB7DQogICAgY2xvc2VldnQgPSB1bmRlZmluZWQ7DQogICAgbWFpbldpbmRvdy5jbG9zZSgpOw0KICB9DQogIG1haW5XaW5kb3cub24oImNsb3NlIiwgKGUpID0+IGNsb3NlZXZ0KGUpKTsNCiAgZ2V0UG9pbnRzKCk7DQogIGZ1bmN0aW9uIHJlbmRlclByb2Nlc3NFeGVjdXRpb25zKHByb2Nlc3Nfd2luZG93LCBoYW5kbGVyLCBjYWxsYmFjaykgew0KICAgIHByb2Nlc3Nfd2luZG93LndlYkNvbnRlbnRzLm9uKCJjb25zb2xlLW1lc3NhZ2UiLCBmdW5jdGlvbihyLCBlLCBpKSB7DQogICAgICBpZiAoaS5zcGxpdCgiWyIpWzBdID09ICgiI0VsZWN0cm9uOiIgKyBoYW5kbGVyLnRyaW0oKSArICIgIikpIHsNCiAgICAgICAgY2FsbGJhY2soaS5zcGxpdCgiWyIpWzFdLnNwbGl0KCIiKS5yZXZlcnNlKCkuc3BsaWNlKDEpLnJldmVyc2UoKS5qb2luKCIiKSk7DQogICAgICB9DQogICAgfSk7DQogIH0NCiAgZnVuY3Rpb24gZ2V0UG9pbnRzKCkgew0KICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoYGNvbnNvbGUubG9nKCIjRWxlY3Ryb246cmV0dXJuX3BvaW50cyBbIiArIGxvY2FsU3RvcmFnZVsicG9pbnRzIl0gKyAiXSIpYCkNCiAgICByZW5kZXJQcm9jZXNzRXhlY3V0aW9ucyhtYWluV2luZG93LCAicmV0dXJuX3BvaW50cyIsIChwdHMpID0+IHsNCiAgICAgIG5vdGlmeSgiUGFya2luZyBNYXN0ZXIgMi4wIiwgIldlbGNvbWUgYmFjayEgWW91IGN1cnJlbnRseSBoYXZlICIgKyBwdHMgKyAiIGF2YWlsYWJsZSBwb2ludHMiLCBtYWluV2luZG93KTsNCiAgICB9KTsNCiAgfQ0KICByZW5kZXJQcm9jZXNzRXhlY3V0aW9ucyhtYWluV2luZG93LCAiZGlhbG9nX2JveCIsIChtc2cpID0+IHsNCiAgICBjb25zdCBkaWFsb2cgPSBuZXcgQnJvd3NlcldpbmRvdyh7DQogICAgICBmcmFtZTogZmFsc2UsDQogICAgICBoYXNTaGFkb3c6IGZhbHNlLA0KICAgICAgdGl0bGU6ICJXYXJuaW5nIiwNCiAgICAgIHRpdGxlQmFyU3R5bGU6ICJoaWRkZW4iLA0KICAgICAgYmFja2dyb3VuZENvbG9yOiAiI2ZmZiIsDQogICAgICB3aWR0aDogNDAwLA0KICAgICAgaGVpZ2h0OiAyNTAsDQogICAgICBhbHdheXNPblRvcDogdHJ1ZSwNCiAgICAgIHBhcmVudDogbWFpbldpbmRvdywNCiAgICAgIGNsb3NhYmxlOiBmYWxzZSwNCiAgICAgIG1pbmltaXphYmxlOiBmYWxzZSwNCiAgICAgIG1heGltaXphYmxlOiBmYWxzZSwNCiAgICAgIG1vdmFibGU6IGZhbHNlLA0KICAgICAgc2hvdzogZmFsc2UNCiAgICB9KTsNCiAgICBkaWFsb2cubG9hZEZpbGUoImJsYW5rIik7DQogICAgZGlhbG9nLndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGBkb2N1bWVudC5ib2R5LnN0eWxlID0gIm1hcmdpbjogMDsgcGFkZGluZzogLTJweDsgYm9yZGVyLXJhZGl1czogMTBweDsgcG9zaXRpb246IGFic29sdXRlOyBib3JkZXI6IDJweCBzb2xpZCAjZGRkOyB3aWR0aDogOTklOyBoZWlnaHQ6IDk4LjQlOyI7IGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IFxgDQogICAgPGgxIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojZGRkOyI+V2FybmluZzwvaDE+DQogICAgXGA7YCk7DQogICAgZGlhbG9nLndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBcYA0KICAgIDxicj4NCiAgICA8cCBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I2RkZDsiPiR7ZGVjb2RlVVJJQ29tcG9uZW50KG1zZyl9PC9wPg0KICAgIFxgO2ApOw0KICAgIGRpYWxvZy53ZWJDb250ZW50cy5leGVjdXRlSmF2YVNjcmlwdChgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gXGANCiAgICA8YnI+DQogICAgPGJ1dHRvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMi41JTtiYWNrZ3JvdW5kOiNkZGQ7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzo0cHggNXB4O2JvcmRlci1yYWRpdXM6M3B4O21hcmdpbjo1cHg7YWxpZ246cmlnaHQ7IiBhbGlnbj0icmlnaHQiIG9uY2xpY2s9IndpbmRvdy5jbG9zZSgpIj5DYW5jZWw8L2J1dHRvbj4NCiAgICA8YnV0dG9uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMyLjUlO2JhY2tncm91bmQ6I2RkZDtjb2xvcjojZmZmO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtwYWRkaW5nOjRweCA1cHg7Ym9yZGVyLXJhZGl1czozcHg7bWFyZ2luOjVweDthbGlnbjpyaWdodDsiIGFsaWduPSJyaWdodCIgb25jbGljaz0iY29uc29sZS5sb2coIiNFbGVjdHJvbjpjbG9zZV9hbGxfd2luZG93cyBbXSIpIj5Db25maXJtPC9idXR0b24+DQogICAgXGA7YCk7DQogICAgcmVuZGVyUHJvY2Vzc0V4ZWN1dGlvbnMoZGlhbG9nLCAiY2xvc2VfYWxsX3dpbmRvd3MiLCAoKSA9PiB7DQogICAgICBsZXQgb3BhYyA9IDE7DQogICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsNCiAgICAgICAgaWYgKG9wYWMgPiAwKSB7DQogICAgICAgICAgb3BhYyArPSAtLjE7DQogICAgICAgICAgbWFpbldpbmRvdy5zZXRPcGFjaXR5KG9wYWMpOw0KICAgICAgICAgIGRpYWxvZy5zZXRPcGFjaXR5KG9wYWMpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGFwcC5xdWl0KCk7DQogICAgICAgICAgZGlhbG9nLmJsdXIoKTsNCiAgICAgICAgICBtYWluV2luZG93LmJsdXIoKTsNCiAgICAgICAgICBkaWFsb2cuY2xvc2UoKTsNCiAgICAgICAgICBtYWluV2luZG93LmNsb3NlKCk7DQogICAgICAgIH0NCiAgICAgIH0sIDMuNSk7DQogICAgfSk7DQogICAgZGlhbG9nLnNob3coKTsNCiAgfSk7DQogIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoIiF3aW5kb3cubmF2aWdhdG9yLm9uTGluZSAmJiBjb25zb2xlLmxvZygnI0VsZWN0cm9uOm9mZmxpbmVfbmV0d29ya19yZXBvcnQgW10nKSIpOw0KICBtYWluV2luZG93LmxvYWRVUkwoImh0dHBzOi8vcGFya2luZ21hc3Rlci5tbC9pbmRleC5odG1sIik7DQogIHJlbmRlclByb2Nlc3NFeGVjdXRpb25zKG1haW5XaW5kb3csICJvZmZsaW5lX25ldHdvcmtfcmVwb3J0IiwgKCkgPT4gew0KICAgIGxldCB1cmwgPSBtYWluV2luZG93LndlYkNvbnRlbnRzLmdldFVSTCgpOw0KICAgIGlmIChjYWNoZSAmJiBjYWNoZVt1cmxdKSB7DQogICAgICBsZXQgY29udGVudCA9IGF0b2IoY2FjaGVbdXJsXSk7DQogICAgICBtYWluV2luZG93LndlYkNvbnRlbnRzLmV4ZWN1dGVKYXZhU2NyaXB0KGANCiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUwgPSBhdG9iKCIke2J0b2EoY29udGVudCl9Iik7DQogICAgICBgKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQogICAgbWFpbldpbmRvdy5sb2FkRmlsZSgiZXJyL29mZmxpbmUvaW5kZXguaHRtbCIpOw0KICB9KTsNCiAgbWFpbldpbmRvdy5zaG93KCk7DQogIHJlcXVpcmUoImNoaWxkX3Byb2Nlc3MiKS5leGVjKGANCiAgaWYgWyAtZiAibG9jYWxTdG9yYWdlLmpzb24iXTsgdGhlbg0KICAgIGVjaG8gInRydWUiDQogIGVsc2UNCiAgICBlY2hvICJmYWxzZSINCiAgZmkNCiAgYCwgKGVyciwgcmVzKSA9PiB7DQogICAgaWYgKHJlcy50cmltKCkgPT0gInRydWUiKSB7DQogICAgICBmcy5yZWFkRmlsZShfX2Rpcm5hbWUgKyAiL2xvY2FsU3RvcmFnZS5qc29uIiwgInV0ZjgiLCAoZXJyLCBkYXRhKSA9PiB7DQogICAgICAgIG1haW5XaW5kb3cud2ViQ29udGVudHMuZXhlY3V0ZUphdmFTY3JpcHQoImxvY2FsU3RvcmFnZSA9ICIgKyBkYXRhKTsNCiAgICAgIH0pOw0KICAgIH0NCiAgfSk7DQp9DQphcHAub24oInJlYWR5IiwgaW5pdCk7"
}
}
}