├── .gitignore
├── LICENSE
├── README.md
├── builds
└── app.build
├── controllers
└── default.js
├── index.js
├── modules
└── builder.js
├── package.json
├── public
├── css
│ ├── default.css
│ └── ui.css
├── favicon.ico
├── forms
│ ├── card.html
│ ├── detail.html
│ ├── labels.html
│ ├── project.html
│ ├── projects.html
│ ├── settings.html
│ ├── stats.html
│ ├── user.html
│ └── users.html
└── js
│ ├── default.js
│ └── ui.js
└── views
├── index.html
└── login.html
/.gitignore:
--------------------------------------------------------------------------------
1 | /index.js.json
2 | /tmp/
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021-2023 Total.js
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Hello
2 |
3 | A simple Trello alternative written in Node.js / Total.js framework without any dependencies and built on NoSQL embedded database.
4 |
5 | - [Join Total.js Telegram](https://t.me/totaljs)
6 | - [Support](https://www.totaljs.com/support/)
7 |
8 | __Requirements__:
9 |
10 | - Node.js v14
11 | - Total.js v4
12 |
13 | 
14 |
15 | ## Install instructions
16 |
17 | - download source-code
18 | - run `npm install`
19 | - and then run app `$ node index.js`
20 | - __enter your e-mail address (you will be logged into the app)__
21 | - set up settings via "cog" icon
22 | - you will need Total API token due
23 |
24 | ## Server-side implementation
25 |
26 | - open Total.js API builder
--------------------------------------------------------------------------------
/builds/app.build:
--------------------------------------------------------------------------------
1 | {"design":"base64 JTdCJTIyYm9keSUyMiUzQSU3QiUyMnNramw5eDlnMiUyMiUzQSU3QiUyMmlkJTIyJTNBJTIyc2tqbDl4OWcyJTIyJTJDJTIyaWNvbiUyMiUzQSUyMmZhJTIwZmEtYWRqdXN0JTIyJTJDJTIybmFtZSUyMiUzQSUyMkNhcmRzJTIyJTJDJTIydHlwZSUyMiUzQSUyMnNjaGVtYSUyMiUyQyUyMm5vdGUlMjIlM0ElMjJUaGlzJTIwc2NoZW1hJTIwY3JlYXRlcyUyMGElMjBuZXclMjBjYXJkJTIyJTJDJTIyY29sb3IlMjIlM0ElMjIlMjM1NTk5RjglMjIlMkMlMjJmaWVsZHMlMjIlM0ElNUIlN0IlMjJuYW1lJTIyJTNBJTIycHJvamVjdGlkJTIyJTJDJTIydHlwZSUyMiUzQSUyMnVpZCUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBZmFsc2UlN0QlMkMlN0IlMjJuYW1lJTIyJTNBJTIyc29sdmVyaWQlMjIlMkMlMjJ0eXBlJTIyJTNBJTIydWlkJTIyJTJDJTIycmVxdWlyZWQlMjIlM0FmYWxzZSU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJuYW1lJTIyJTJDJTIydHlwZSUyMiUzQSUyMnN0cmluZyUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBdHJ1ZSU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJ0YXNrcyUyMiUyQyUyMnR5cGUlMjIlM0ElMjIlNUJDYXJkcyUyRlRhc2slNUQlMjIlMkMlMjJyZXF1aXJlZCUyMiUzQWZhbHNlJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMnVzZXJzJTIyJTJDJTIydHlwZSUyMiUzQSUyMiU1QnVpZCU1RCUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBZmFsc2UlN0QlMkMlN0IlMjJuYW1lJTIyJTNBJTIyZGVhZGxpbmUlMjIlMkMlMjJ0eXBlJTIyJTNBJTIyZGF0ZSUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBZmFsc2UlN0QlMkMlN0IlMjJuYW1lJTIyJTNBJTIybGFiZWxzJTIyJTJDJTIydHlwZSUyMiUzQSUyMiU1QnVpZCU1RCUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBZmFsc2UlN0QlMkMlN0IlMjJuYW1lJTIyJTNBJTIyZXN0aW1hdGUlMjIlMkMlMjJ0eXBlJTIyJTNBJTIybnVtYmVyJTIyJTJDJTIycmVxdWlyZWQlMjIlM0FmYWxzZSU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJzb3J0c29sdmVyJTIyJTJDJTIydHlwZSUyMiUzQSUyMm51bWJlciUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBZmFsc2UlN0QlMkMlN0IlMjJuYW1lJTIyJTNBJTIyc29ydHVzZXIlMjIlMkMlMjJ0eXBlJTIyJTNBJTIybnVtYmVyJTIyJTJDJTIycmVxdWlyZWQlMjIlM0FmYWxzZSU3RCU1RCUyQyUyMm9wZXJhdGlvbnMlMjIlM0ElNUIlN0IlMjJuYW1lJTIyJTNBJTIycXVlcnklMjIlMkMlMjJib2R5JTIyJTNBJTIyJTJGJTJGJTIwJTI0JTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTVDbiUyRiUyRiUyMHBhcmFtcyUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlNUNuJTVDbk5PU1FMKCdjYXJkcycpLmZpbmQoKS53aGVyZSgnbGlzdCclMkMlMjAnJTNDJTNFJyUyQyUyMCdkb25lJykub3IoZnVuY3Rpb24oYnVpbGRlciklMjAlN0IlNUNuJTVDdGJ1aWxkZXIud2hlcmUoJ3VzZXJpZCclMkMlMjB1c2VyLmlkKSUzQiU1Q24lNUN0YnVpbGRlci53aGVyZSgnc29sdmVyaWQnJTJDJTIwdXNlci5pZCklM0IlNUNuJTdEKS5jYWxsYmFjayhmdW5jdGlvbihlcnIlMkMlMjByZXNwb25zZSUyQyUyMG1ldGEpJTIwJTdCJTVDbiU1Q3ROT1NRTCgnY2FyZHMnKS5maW5kMigpLndoZXJlKCdsaXN0JyUyQyUyMCdkb25lJykudGFrZSgxNSkub3IoZnVuY3Rpb24oYnVpbGRlciklMjAlN0IlNUNuJTVDdCU1Q3RidWlsZGVyLndoZXJlKCd1c2VyaWQnJTJDJTIwdXNlci5pZCklM0IlNUNuJTVDdCU1Q3RidWlsZGVyLndoZXJlKCdzb2x2ZXJpZCclMkMlMjB1c2VyLmlkKSUzQiU1Q24lNUN0JTdEKS5jYWxsYmFjayhmdW5jdGlvbihlcnIlMkMlMjBjb21wbGV0ZSklMjAlN0IlNUNuJTVDdCU1Q3Rjb21wbGV0ZS5sZW5ndGglMjAlMjYlMjYlMjByZXNwb25zZS5wdXNoLmFwcGx5KHJlc3BvbnNlJTJDJTIwY29tcGxldGUpJTNCJTVDbiU1Q3QlNUN0JTI0LmNhbGxiYWNrKHJlc3BvbnNlKSUzQiU1Q24lNUN0JTdEKSUzQiU1Q24lN0QpJTNCJTIyJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMm1vdmUlMjIlMkMlMjJib2R5JTIyJTNBJTIyJTJGJTJGJTIwJTI0JTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTVDbiUyRiUyRiUyMHBhcmFtcyUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlNUNuJTVDbmlmJTIwKCFNQUlOLmxpc3RzJTVCcXVlcnkudG9saXN0JTVEJTIwJTdDJTdDJTIwIU1BSU4ubGlzdHMlNUJxdWVyeS5mcm9tbGlzdCU1RCklMjAlN0IlNUNuJTVDdCUyNC5pbnZhbGlkKDQwMCklM0IlNUNuJTVDdHJldHVybiUzQiU1Q24lN0QlNUNuJTVDbk5PU1FMKCdjYXJkcycpLm9uZSgpLndoZXJlKCdsaXN0JyUyQyUyMHF1ZXJ5LmZyb21saXN0KS5pZChpZCkub3IoZnVuY3Rpb24oYnVpbGRlciklMjAlN0IlNUNuJTVDdGJ1aWxkZXIud2hlcmUoJ3VzZXJpZCclMkMlMjB1c2VyLmlkKSUzQiU1Q24lNUN0YnVpbGRlci53aGVyZSgnc29sdmVyaWQnJTJDJTIwdXNlci5pZCklM0IlNUNuJTdEKS5lcnJvcig0MDQpLmRvbmUoJTI0JTJDJTIwZnVuY3Rpb24ocmVzcG9uc2UpJTIwJTdCJTVDbiU1Q24lNUN0dmFyJTIwZGF0YSUyMCUzRCUyMCU3QiU3RCUzQiU1Q24lNUN0dmFyJTIwaW5kZXglMjAlM0QlMjAlMkIocXVlcnkuaW5kZXglMjAlN0MlN0MlMjAnMCcpJTNCJTVDbiU1Q24lNUN0ZGF0YS5saXN0JTIwJTNEJTIwcXVlcnkudG9saXN0JTNCJTVDbiU1Q3RkYXRhLmR0bW92ZWQlMjAlM0QlMjBOT1clM0IlNUNuJTVDbiU1Q3RpZiUyMChyZXNwb25zZS51c2VyaWQlMjAlM0QlM0QlM0QlMjB1c2VyLmlkKSU1Q24lNUN0JTVDdGRhdGEuc29ydHVzZXIlMjAlM0QlMjBpbmRleCUzQiU1Q24lNUN0ZWxzZSU1Q24lNUN0JTVDdGRhdGEuc29ydHNvbHZlciUyMCUzRCUyMGluZGV4JTNCJTVDbiU1Q24lNUN0aWYlMjAocXVlcnkuZnJvbWxpc3QlMjAlM0QlM0QlM0QlMjAnaW5wcm9ncmVzcyclMjAlMjYlMjYlMjByZXNwb25zZS5kdG1vdmVkKSUyMCU3QiU1Q24lNUN0JTVDdHZhciUyMGRpZmYlMjAlM0QlMjBNYXRoLmNlaWwoKE5PVyUyMC0lMjByZXNwb25zZS5kdG1vdmVkKSUyMCUyRiUyMDEwMDAlMjAlMkYlMjA2MCklM0IlNUNuJTVDdCU1Q3RpZiUyMChkaWZmJTIwJTNFJTIwMCklMjAlN0IlNUNuJTVDdCU1Q3QlNUN0dmFyJTIwbG9nJTIwJTNEJTIwJTdCJTdEJTNCJTVDbiU1Q3QlNUN0JTVDdGxvZy5pZCUyMCUzRCUyMHJlc3BvbnNlLmlkJTNCJTVDbiU1Q3QlNUN0JTVDdGxvZy5uYW1lJTIwJTNEJTIwcmVzcG9uc2UubmFtZSUzQiU1Q24lNUN0JTVDdCU1Q3Rsb2cucHJvamVjdGlkJTIwJTNEJTIwcmVzcG9uc2UucHJvamVjdGlkJTNCJTVDbiU1Q3QlNUN0JTVDdGxvZy51c2VyaWQlMjAlM0QlMjB1c2VyLmlkJTNCJTVDbiU1Q3QlNUN0JTVDdGxvZy51c2VybmFtZSUyMCUzRCUyMHVzZXIubmFtZSUzQiU1Q24lNUN0JTVDdCU1Q3Rsb2cubWludXRlcyUyMCUzRCUyMGRpZmYlM0IlNUNuJTVDdCU1Q3QlNUN0bG9nLndlZWslMjAlM0QlMjAlMkJOT1cuZm9ybWF0KCd3JyklM0IlNUNuJTVDdCU1Q3QlNUN0bG9nLndlZWtseSUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3l5eXl3dycpJTNCJTVDbiU1Q3QlNUN0JTVDdGxvZy5kYWlseSUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3l5eXlNTWRkJyklM0IlNUNuJTVDdCU1Q3QlNUN0bG9nLm1vbnRobHklMjAlM0QlMjAlMkJOT1cuZm9ybWF0KCd5eXl5TU0nKSUzQiU1Q24lNUN0JTVDdCU1Q3Rsb2cueWVhcmx5JTIwJTNEJTIwJTJCTk9XLmZvcm1hdCgneXl5eScpJTNCJTVDbiU1Q3QlNUN0JTVDdGxvZy5kdGNyZWF0ZWQlMjAlM0QlMjBOT1clM0IlNUNuJTVDdCU1Q3QlNUN0ZGF0YS5taW51dGVzJTIwJTNEJTIwcmVzcG9uc2UubWludXRlcyUyMCUyQiUyMGRpZmYlM0IlNUNuJTVDdCU1Q3QlNUN0Tk9TUUwoJ2xvZ3dvcmsnKS5pbnNlcnQobG9nKSUzQiU1Q24lNUN0JTVDdCU1Q3RNQUlOLndzJTIwJTI2JTI2JTIwTUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAnY2FyZHMlMkZsb2d3b3JrJyUyQyUyMGJvZHklM0ElMjAlN0IlMjBpZCUzQSUyMGlkJTJDJTIwbWludXRlcyUzQSUyMGRhdGEubWludXRlcyUyMCU3RCU3RCUyQyUyMGNsaWVudCUyMCUzRCUzRSUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTNEJTIwcmVzcG9uc2UudXNlcmlkJTIwJTdDJTdDJTIwY2xpZW50LnVzZXIuaWQlMjAlM0QlM0QlM0QlMjByZXNwb25zZS5zb2x2ZXJpZCklM0IlNUNuJTVDdCU1Q3QlN0QlNUNuJTVDdCU3RCU1Q24lNUNuJTVDdE5PU1FMKCdjYXJkcycpLm1vZGlmeShkYXRhKS53aGVyZSgnbGlzdCclMkMlMjBxdWVyeS5mcm9tbGlzdCkuaWQoaWQpLm9yKGZ1bmN0aW9uKGJ1aWxkZXIpJTIwJTdCJTVDbiU1Q3QlNUN0YnVpbGRlci53aGVyZSgndXNlcmlkJyUyQyUyMHVzZXIuaWQpJTNCJTVDbiU1Q3QlNUN0YnVpbGRlci53aGVyZSgnc29sdmVyaWQnJTJDJTIwdXNlci5pZCklM0IlNUNuJTVDdCU3RCkuZG9uZSglMjQlMkMlMjBmdW5jdGlvbigpJTIwJTdCJTVDbiU1Q3QlNUN0TUFJTi53cyUyMCUyNiUyNiUyME1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ21vdmUnJTJDJTIwYm9keSUzQSUyMCU3QiUyMGlkJTNBJTIwaWQlMkMlMjBmcm9tbGlzdCUzQSUyMHF1ZXJ5LmZyb21saXN0JTJDJTIwdG9saXN0JTNBJTIwcXVlcnkudG9saXN0JTJDJTIwbWludXRlcyUzQSUyMGRhdGEubWludXRlcyUyQyUyMHVzZXJpZCUzQSUyMHVzZXIuaWQlMjAlN0QlN0QlMkMlMjBjbGllbnQlMjAlM0QlM0UlMjBjbGllbnQudXNlci5pZCUyMCUzRCUzRCUzRCUyMHJlc3BvbnNlLnVzZXJpZCUyMCU3QyU3QyUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTNEJTIwcmVzcG9uc2Uuc29sdmVyaWQpJTNCJTVDbiU1Q3QlNUN0JTI0LnN1Y2Nlc3MoaWQpJTNCJTVDbiU1Q3QlN0QpJTNCJTVDbiU1Q24lN0QpJTNCJTIyJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMmluc2VydCUyMiUyQyUyMmJvZHklMjIlM0ElMjIlMkYlMkYlMjAlMjQlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwbW9kZWwlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwaWQlMjAlN0JTdHJpbmclN0QlM0IlNUNuJTJGJTJGJTIwcGFyYW1zJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGZpbHRlciUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjB1c2VyJTIwJTdCTnVsbGFiZSUyME9iamVjdCU3RCUzQiU1Q24lNUNubW9kZWwuaWQlMjAlM0QlMjBVSUQoKSUzQiU1Q25tb2RlbC51c2VyaWQlMjAlM0QlMjB1c2VyLmlkJTNCJTVDbm1vZGVsLmhpc3RvcnklMjAlM0QlMjAlNUIlNUQlM0IlNUNubW9kZWwubGlzdCUyMCUzRCUyMCdvcGVuJyUzQiU1Q25tb2RlbC5kdHVwZGF0ZWQlMjAlM0QlMjBtb2RlbC5kdGNyZWF0ZWQlMjAlM0QlMjBuZXclMjBEYXRlKCklM0IlNUNubW9kZWwubWludXRlcyUyMCUzRCUyMDAlM0IlNUNubW9kZWwuc29ydHNvbHZlciUyMCUzRCUyMG1vZGVsLnNvcnR1c2VyJTIwJTNEJTIwbW9kZWwuZHRjcmVhdGVkLmdldFRpbWUoKSUzQiU1Q24lNUNuTk9TUUwoJ2NhcmRzJykuaW5zZXJ0KG1vZGVsKS5jYWxsYmFjayglMjQuZG9uZShtb2RlbC5pZCkpJTNCJTVDbk1BSU4ud3MlMjAlMjYlMjYlMjBNQUlOLndzLnNlbmQoJTdCJTIwVFlQRSUzQSUyMCdjYXJkcyUyRmNyZWF0ZSclMkMlMjBib2R5JTNBJTIwbW9kZWwlMjAlN0QlMkMlMjBjbGllbnQlMjAlM0QlM0UlMjBjbGllbnQudXNlci5pZCUyMCUzRCUzRCUyMHVzZXIuaWQlMjAlN0MlN0MlMjBjbGllbnQudXNlci5pZCUyMCUzRCUzRCUzRCUyMG1vZGVsLnNvbHZlcmlkKSUzQiUyMiU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJ1cGRhdGUlMjIlMkMlMjJib2R5JTIyJTNBJTIyJTJGJTJGJTIwJTI0JTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTVDbiUyRiUyRiUyMHBhcmFtcyUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlNUNuJTVDbm1vZGVsLmR0dXBkYXRlZCUyMCUzRCUyMG5ldyUyMERhdGUoKSUzQiU1Q24lNUNuTk9TUUwoJ2NhcmRzJykub25lKCkuaWQoaWQpLndoZXJlKCd1c2VyaWQnJTJDJTIwdXNlci5pZCkuZXJyb3IoNDA0KS5kb25lKCUyNCUyQyUyMGZ1bmN0aW9uKHJlc3BvbnNlKSUyMCU3QiU1Q24lNUNuJTVDdHZhciUyMHNvbHZlcmlkJTIwJTNEJTIwcmVzcG9uc2Uuc29sdmVyaWQlM0IlNUNuJTVDbiU1Q3ROT1NRTCgnY2FyZHMnKS5tb2RpZnkobW9kZWwpLmlkKGlkKS5jYWxsYmFjayhmdW5jdGlvbihlcnIlMkMlMjBjb3VudCklMjAlN0IlNUNuJTVDbiU1Q3QlNUN0bW9kZWwuaWQlMjAlM0QlMjBpZCUzQiU1Q24lNUN0JTVDdG1vZGVsLmR0Y3JlYXRlZCUyMCUzRCUyMHJlc3BvbnNlLmR0Y3JlYXRlZCUzQiU1Q24lNUN0JTVDdG1vZGVsLmxpc3QlMjAlM0QlMjByZXNwb25zZS5saXN0JTNCJTVDbiU1Q3QlNUN0bW9kZWwudXNlcmlkJTIwJTNEJTIwcmVzcG9uc2UudXNlcmlkJTNCJTVDbiU1Q24lNUN0JTVDdCUyNC5zdWNjZXNzKG1vZGVsLmlkKSUzQiU1Q24lNUNuJTVDdCU1Q3RpZiUyMChjb3VudCUyMCUyNiUyNiUyME1BSU4ud3MpJTIwJTdCJTVDbiU1Q3QlNUN0JTVDdE1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ2NhcmRzJTJGdXBkYXRlJyUyQyUyMGJvZHklM0ElMjBtb2RlbCUyMCU3RCUyQyUyMGNsaWVudCUyMCUzRCUzRSUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTIwdXNlci5pZCUyMCU3QyU3QyUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTNEJTIwbW9kZWwuc29sdmVyaWQpJTNCJTVDbiU1Q3QlNUN0JTVDdGlmJTIwKHNvbHZlcmlkJTIwJTI2JTI2JTIwbW9kZWwuc29sdmVyaWQlMjAhJTNEJTNEJTIwc29sdmVyaWQlMjAlMjYlMjYlMjBzb2x2ZXJpZCUyMCElM0QlM0QlMjB1c2VyLmlkKSU1Q24lNUN0JTVDdCU1Q3QlNUN0TUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAnY2FyZHMlMkZyZW1vdmUnJTJDJTIwaWQlM0ElMjBtb2RlbC5pZCUyMCU3RCUyQyUyMGNsaWVudCUyMCUzRCUzRSUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTNEJTIwc29sdmVyaWQpJTNCJTVDbiU1Q3QlNUN0JTdEJTVDbiU1Q3QlN0QpJTNCJTVDbiU1Q24lN0QpJTNCJTIyJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMnJlbW92ZSUyMiUyQyUyMmJvZHklMjIlM0ElMjIlMkYlMkYlMjAlMjQlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwbW9kZWwlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwaWQlMjAlN0JTdHJpbmclN0QlM0IlNUNuJTJGJTJGJTIwcGFyYW1zJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGZpbHRlciUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBxdWVyeSUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjB1c2VyJTIwJTdCTnVsbGFiZSUyME9iamVjdCU3RCUzQiU1Q24lNUNuTk9TUUwoJ2NhcmRzJykucmVtb3ZlKCkuaWQoaWQpLndoZXJlKCd1c2VyaWQnJTJDJTIwdXNlci5pZCkuY2FsbGJhY2soZnVuY3Rpb24oZXJyJTJDJTIwY291bnQpJTIwJTdCJTVDbiU1Q3RpZiUyMChjb3VudCklMjAlN0IlNUNuJTVDdCU1Q3ROT1NRTCgnbG9nd29yaycpLnJlbW92ZSgpLmlkKGlkKSUzQiU1Q24lNUN0JTVDdGNvdW50JTIwJTI2JTI2JTIwTUFJTi53cyUyMCUyNiUyNiUyME1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ2NhcmRzJTJGcmVtb3ZlJyUyQyUyMGlkJTNBJTIwaWQlMjAlN0QpJTNCJTVDbiU1Q3QlN0QlNUNuJTVDdCUyNC5zdWNjZXNzKGlkKSUzQiU1Q24lN0QpJTNCJTIyJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMnBvc2l0aW9uJTIyJTJDJTIyYm9keSUyMiUzQSUyMk5PU1FMKCdjYXJkcycpLm9uZSgpLmlkKGlkKS5vcihmdW5jdGlvbihidWlsZGVyKSUyMCU3QiU1Q24lNUN0YnVpbGRlci53aGVyZSgndXNlcmlkJyUyQyUyMHVzZXIuaWQpJTNCJTVDbiU1Q3RidWlsZGVyLndoZXJlKCdzb2x2ZXJpZCclMkMlMjB1c2VyLmlkKSUzQiU1Q24lN0QpLmVycm9yKDQwNCkuZG9uZSglMjQlMkMlMjBmdW5jdGlvbihyZXNwb25zZSklMjAlN0IlNUNuJTVDbiU1Q3R2YXIlMjBkYXRhJTIwJTNEJTIwJTdCJTdEJTNCJTVDbiU1Q3R2YXIlMjBpbmRleCUyMCUzRCUyMCUyQihxdWVyeS5pbmRleCUyMCU3QyU3QyUyMCcwJyklM0IlNUNuJTVDbiU1Q3RpZiUyMChyZXNwb25zZS51c2VyaWQlMjAlM0QlM0QlM0QlMjB1c2VyLmlkKSU1Q24lNUN0JTVDdGRhdGEuc29ydHVzZXIlMjAlM0QlMjBpbmRleCUzQiU1Q24lNUN0ZWxzZSU1Q24lNUN0JTVDdGRhdGEuc29ydHNvbHZlciUyMCUzRCUyMGluZGV4JTNCJTVDbiU1Q24lNUN0Tk9TUUwoJ2NhcmRzJykubW9kaWZ5KGRhdGEpLmlkKGlkKS5vcihmdW5jdGlvbihidWlsZGVyKSUyMCU3QiU1Q24lNUN0JTVDdGJ1aWxkZXIud2hlcmUoJ3VzZXJpZCclMkMlMjB1c2VyLmlkKSUzQiU1Q24lNUN0JTVDdGJ1aWxkZXIud2hlcmUoJ3NvbHZlcmlkJyUyQyUyMHVzZXIuaWQpJTNCJTVDbiU1Q3QlN0QpLmNhbGxiYWNrKCUyNC5kb25lKCkpJTNCJTVDbiU1Q24lN0QpJTNCJTIyJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMnRvZ2dsZSUyMiUyQyUyMmJvZHklMjIlM0ElMjIlMkYlMkYlMjAlMjQlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwbW9kZWwlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwaWQlMjAlN0JTdHJpbmclN0QlM0IlNUNuJTJGJTJGJTIwcGFyYW1zJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGZpbHRlciUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBxdWVyeSUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjB1c2VyJTIwJTdCTnVsbGFiZSUyME9iamVjdCU3RCUzQiU1Q24lNUNuTk9TUUwoJ2NhcmRzJykub25lKCkuaWQoaWQpLm9yKGZ1bmN0aW9uKGJ1aWxkZXIpJTIwJTdCJTVDbiU1Q3RidWlsZGVyLndoZXJlKCd1c2VyaWQnJTJDJTIwdXNlci5pZCklM0IlNUNuJTVDdGJ1aWxkZXIud2hlcmUoJ3NvbHZlcmlkJyUyQyUyMHVzZXIuaWQpJTNCJTVDbiU3RCkuZXJyb3IoNDA0KS5kb25lKCUyNCUyQyUyMGZ1bmN0aW9uKHJlc3BvbnNlKSUyMCU3QiU1Q24lNUN0dmFyJTIwdGFzayUyMCUzRCUyMHJlc3BvbnNlLnRhc2tzLmZpbmRJdGVtKCdpZCclMkMlMjBwYXJhbXMudGFza2lkKSUzQiU1Q24lNUN0aWYlMjAodGFzayklMjAlN0IlNUNuJTVDdCU1Q3R0YXNrLmlzZG9uZSUyMCUzRCUyMCF0YXNrLmlzZG9uZSUzQiU1Q24lNUN0JTVDdE5PU1FMKCdjYXJkcycpLm1vZGlmeSglN0IlMjB0YXNrcyUzQSUyMHJlc3BvbnNlLnRhc2tzJTIwJTdEKS5pZChpZCkuY2FsbGJhY2soJTI0LmRvbmUodGFzay5pc2RvbmUlMjAlM0YlMjAxJTIwJTNBJTIwMCkpJTNCJTVDbiU1Q3QlNUN0TUFJTi53cyUyMCUyNiUyNiUyME1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ2NhcmRzJTJGdG9nZ2xlJyUyQyUyMGJvZHklM0ElMjAlN0IlMjBpZCUzQSUyMGlkJTJDJTIwdGFza2lkJTNBJTIwcGFyYW1zLnRhc2tpZCUyQyUyMGlzZG9uZSUzQSUyMHRhc2suaXNkb25lJTJDJTIwdXNlcmlkJTNBJTIwdXNlci5pZCUyMCU3RCU3RCUyQyUyMGNsaWVudCUyMCUzRCUzRSUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTNEJTIwcmVzcG9uc2UudXNlcmlkJTIwJTdDJTdDJTIwY2xpZW50LnVzZXIuaWQlMjAlM0QlM0QlM0QlMjByZXNwb25zZS5zb2x2ZXJpZCklM0IlNUNuJTVDdCU3RCUyMGVsc2UlNUNuJTVDdCU1Q3QlMjQuaW52YWxpZCg0MDQpJTNCJTVDbiU3RCklM0IlMjIlN0QlNUQlMkMlMjJjb21wcmVzcyUyMiUzQXRydWUlMkMlMjJyb3V0ZXMlMjIlM0ElNUIlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIydmFsaWRhdGUlMjIlM0ElMjIlMkIlMjIlMkMlMjJhY3Rpb24lMjIlM0ElMjJjYXJkc19jcmVhdGUlMjIlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIyaW5zZXJ0JTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJpbnNlcnQlMjIlN0QlMkMlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIydmFsaWRhdGUlMjIlM0ElMjItJTIyJTJDJTIyYWN0aW9uJTIyJTNBJTIyY2FyZHNfcXVlcnklMjIlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIycXVlcnklMjIlNUQlMkMlMjJyZXNwb25zZSUyMiUzQSUyMnF1ZXJ5JTIyJTdEJTJDJTdCJTIydXJsJTIyJTNBJTIyJTJGYXBpJTJGJTIyJTJDJTIyYXV0aG9yaXplZCUyMiUzQSUyMiUyQiUyMiUyQyUyMnZhbGlkYXRlJTIyJTNBJTIyLSUyMiUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIyYWN0aW9uJTIyJTNBJTIyY2FyZHNfbW92ZSUyRiU3QmlkJTdEJTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMm1ldGhvZCUyMiUzQSUyMkFQSSUyMiUyQyUyMmFjdGlvbnMlMjIlM0ElNUIlMjJtb3ZlJTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJtb3ZlJTIyJTdEJTJDJTdCJTIydXJsJTIyJTNBJTIyJTJGYXBpJTJGJTIyJTJDJTIyYXV0aG9yaXplZCUyMiUzQSUyMiUyQiUyMiUyQyUyMnZhbGlkYXRlJTIyJTNBJTIyJTJCJTIyJTJDJTIydGltZW91dCUyMiUzQTUlMkMlMjJhY3Rpb24lMjIlM0ElMjJjYXJkc191cGRhdGUlMkYlN0JpZCU3RCUyMiUyQyUyMmxlbmd0aCUyMiUzQTMlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIydXBkYXRlJTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJ1cGRhdGUlMjIlN0QlMkMlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIydmFsaWRhdGUlMjIlM0ElMjItJTIyJTJDJTIyYWN0aW9uJTIyJTNBJTIyY2FyZHNfcmVtb3ZlJTJGJTdCaWQlN0QlMjIlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIycmVtb3ZlJTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJyZW1vdmUlMjIlN0QlMkMlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIydmFsaWRhdGUlMjIlM0ElMjItJTIyJTJDJTIyYWN0aW9uJTIyJTNBJTIyY2FyZHNfcG9zaXRpb24lMkYlN0JpZCU3RCUyMiUyQyUyMm1ldGhvZCUyMiUzQSUyMkFQSSUyMiUyQyUyMmFjdGlvbnMlMjIlM0ElNUIlMjJwb3NpdGlvbiUyMiU1RCUyQyUyMnJlc3BvbnNlJTIyJTNBJTIycG9zaXRpb24lMjIlN0QlMkMlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIydmFsaWRhdGUlMjIlM0ElMjItJTIyJTJDJTIyYWN0aW9uJTIyJTNBJTIyY2FyZHNfdG9nZ2xlJTJGJTdCaWQlN0QlMkYlN0J0YXNraWQlN0QlMjIlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIydG9nZ2xlJTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJ0b2dnbGUlMjIlN0QlNUQlMkMlMjJ4JTIyJTNBNTkwJTJDJTIyeSUyMiUzQTM3NSU3RCUyQyUyMmRramxiMGllMyUyMiUzQSU3QiUyMmljb24lMjIlM0ElMjJmYSUyMGZhLWtleSUyMiUyQyUyMmNvbG9yJTIyJTNBJTIyJTIzRTczMzIzJTIyJTJDJTIyaWQlMjIlM0ElMjJka2psYjBpZTMlMjIlMkMlMjJuYW1lJTIyJTNBJTIyQVVUSCUyMiUyQyUyMnR5cGUlMjIlM0ElMjJkZWZpbml0aW9uJTIyJTJDJTIybm90ZSUyMiUzQSUyMlVzZXIlMjBhdXRob3JpemF0aW9uJTIyJTJDJTIyeCUyMiUzQTY1JTJDJTIyeSUyMiUzQTcwJTJDJTIyYm9keSUyMiUzQSUyMnZhciUyMG9wdCUyMCUzRCUyMCU3QiU3RCUzQiU1Q24lNUNub3B0LnNlY3JldCUyMCUzRCUyMENPTkYuYXV0aF9zZWNyZXQlM0IlNUNub3B0LmNvb2tpZSUyMCUzRCUyMENPTkYuYXV0aF9jb29raWUlM0IlNUNub3B0LmRkb3MlMjAlM0QlMjAxMCUzQiU1Q25vcHQub3B0aW9ucyUyMCUzRCUyMCU3QiUyMHNhbWVzaXRlJTNBJTIwJ2xheCclMjAlN0QlM0IlNUNuJTVDbm9wdC5vbnJlYWQlMjAlM0QlMjBmdW5jdGlvbihtZXRhJTJDJTIwbmV4dCklMjAlN0IlNUNuJTVDdE5PU1FMKCdzZXNzaW9ucycpLm9uZSgpLmlkKG1ldGEuc2Vzc2lvbmlkKS53aGVyZSgndXNlcmlkJyUyQyUyMG1ldGEudXNlcmlkKS53aGVyZSgndWEnJTJDJTIwbWV0YS51YSkuY2FsbGJhY2soZnVuY3Rpb24oZXJyJTJDJTIwcmVzcG9uc2UpJTIwJTdCJTVDbiU1Q3QlNUN0aWYlMjAocmVzcG9uc2UpJTIwJTdCJTVDbiU1Q3QlNUN0JTVDdE5PU1FMKCd1c2VycycpLm9uZSgpLmlkKG1ldGEudXNlcmlkKS5jYWxsYmFjayhmdW5jdGlvbihlcnIlMkMlMjByZXNwb25zZSklMjAlN0IlNUNuJTVDdCU1Q3QlNUN0JTVDdGlmJTIwKHJlc3BvbnNlJTIwJTI2JTI2JTIwIXJlc3BvbnNlLmlzZGlzYWJsZWQpJTIwJTdCJTVDbiU1Q3QlNUN0JTVDdCU1Q3QlNUN0Tk9TUUwoJ3VzZXJzJykubW9kaWZ5KCU3QiUyMGlzb25saW5lJTNBJTIwdHJ1ZSUyQyUyMGR0bG9nZ2VkJTNBJTIwTk9XJTIwJTdEKS5pZChtZXRhLnVzZXJpZCklM0IlNUNuJTVDdCU1Q3QlNUN0JTVDdCU1Q3ROT1NRTCgnc2Vzc2lvbnMnKS5tb2RpZnkoJTdCJTIwaXNvbmxpbmUlM0ElMjB0cnVlJTJDJTIwZHRsb2dnZWQlM0ElMjBOT1clMjAlN0QpLmlkKG1ldGEuc2Vzc2lvbmlkKSUzQiU1Q24lNUN0JTVDdCU1Q3QlNUN0JTdEJTVDbiU1Q3QlNUN0JTVDdCU1Q3RuZXh0KG51bGwlMkMlMjByZXNwb25zZSklM0IlNUNuJTVDdCU1Q3QlNUN0JTdEKSUzQiU1Q24lNUN0JTVDdCU3RCUyMGVsc2UlNUNuJTVDdCU1Q3QlNUN0bmV4dChudWxsKSUzQiU1Q24lNUN0JTdEKSUzQiU1Q24lN0QlM0IlNUNuJTVDbm9wdC5vbmZyZWUlMjAlM0QlMjBmdW5jdGlvbihtZXRhKSUyMCU3QiU1Q24lNUN0dmFyJTIwbW9kJTIwJTNEJTIwJTdCJTIwaXNvbmxpbmUlM0ElMjBmYWxzZSUyMCU3RCUzQiU1Q24lNUN0Tk9TUUwoJ3Nlc3Npb25zJykubW9kaWZ5KG1vZCkud2hlcmUoJ2lzb25saW5lJyUyQyUyMHRydWUpLmluKCdpZCclMkMlMjBtZXRhLmV4cGlyZWQpJTNCJTVDbiU1Q3ROT1NRTCgndXNlcnMnKS5tb2RpZnkobW9kKS53aGVyZSgnaXNvbmxpbmUnJTJDJTIwdHJ1ZSkuaW4oJ2lkJyUyQyUyMG1ldGEudXNlcnMpJTNCJTVDbiU3RCUzQiU1Q24lNUNuQVVUSChvcHQpJTNCJTVDbk1BSU4uc2Vzc2lvbiUyMCUzRCUyMG9wdCUzQiU1Q24lNUNuTk9TUUwoJ3VzZXJzJykubW9kaWZ5KCU3QiUyMGlzb25saW5lJTNBJTIwZmFsc2UlMjAlN0QpLndoZXJlKCdpc29ubGluZSclMkMlMjB0cnVlKSUzQiU1Q25OT1NRTCgnc2Vzc2lvbnMnKS5tb2RpZnkoJTdCJTIwaXNvbmxpbmUlM0ElMjBmYWxzZSUyMCU3RCkud2hlcmUoJ2lzb25saW5lJyUyQyUyMHRydWUpJTNCJTIyJTdEJTJDJTIycmtqbGJnOTlnJTIyJTNBJTdCJTIyaWQlMjIlM0ElMjJya2psYmc5OWclMjIlMkMlMjJpY29uJTIyJTNBJTIyZmElMjBmYS1uZXR3b3JrLXdpcmVkJTIyJTJDJTIydHlwZSUyMiUzQSUyMnJvdXRlJTIyJTJDJTIybm90ZSUyMiUzQSUyMk5vdGlmaWNhdG9yJTIyJTJDJTIybWV0aG9kJTIyJTNBJTIyU09DS0VUJTIyJTJDJTIyY29sb3IlMjIlM0ElMjIlMjM4M0M4M0MlMjIlMkMlMjJ1cmwlMjIlM0ElMjIlMkYlMjIlMkMlMjJmbGFncyUyMiUzQSU1QiU1RCUyQyUyMmxlbmd0aCUyMiUzQTAlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIydmFsaWRhdGUlMjIlM0ElMjItJTIyJTJDJTIyeCUyMiUzQTQ1NSUyQyUyMnklMjIlM0E2MCUyQyUyMnNlcmlhbGl6YXRpb24lMjIlM0ElMjJqc29uJTIyJTJDJTIydGltZW91dCUyMiUzQTUlMkMlMjJhY3Rpb24lMjIlM0ElMjIlMjIlMkMlMjJ1cGxvYWQlMjIlM0F0cnVlJTJDJTIyYm9keSUyMiUzQSUyMk1BSU4ud3MlMjAlM0QlMjBjb250cm9sbGVyJTNCJTVDbmNvbnRyb2xsZXIuYXV0b2Rlc3Ryb3koKCklMjAlM0QlM0UlMjBNQUlOLndzJTIwJTNEJTIwbnVsbCklM0IlNUNuJTVDbmNvbnRyb2xsZXIub24oJ29wZW4nJTJDJTIwZnVuY3Rpb24oY2xpZW50KSUyMCU3QiU1Q24lNUN0JTJGJTJGJTIwWW91ciUyMGNvZGUlNUNuJTdEKSUzQiU1Q24lNUNuY29udHJvbGxlci5vbignY2xvc2UnJTJDJTIwZnVuY3Rpb24oY2xpZW50KSUyMCU3QiU1Q24lNUN0JTJGJTJGJTIwWW91ciUyMGNvZGUlNUNuJTdEKSUzQiU1Q24lNUNuY29udHJvbGxlci5vbignbWVzc2FnZSclMkMlMjBmdW5jdGlvbihjbGllbnQlMkMlMjBtZXNzYWdlKSUyMCU3QiU1Q24lNUN0JTJGJTJGJTIwWW91ciUyMGNvZGUlNUNuJTdEKSUzQiUyMiU3RCUyQyUyMmRramxjYXJvbSUyMiUzQSU3QiUyMmljb24lMjIlM0ElMjJmYSUyMGZhLWFtYnVsYW5jZSUyMiUyQyUyMmNvbG9yJTIyJTNBJTIyJTIzRUY5RDRCJTIyJTJDJTIyaWQlMjIlM0ElMjJka2psY2Fyb20lMjIlMkMlMjJuYW1lJTIyJTNBJTIySGVscGVycyUyMiUyQyUyMnR5cGUlMjIlM0ElMjJkZWZpbml0aW9uJTIyJTJDJTIybm90ZSUyMiUzQSUyMkN1c3RvbSUyMGhlbHBlcnMlMjIlMkMlMjJ4JTIyJTNBODkwJTJDJTIyeSUyMiUzQTc1JTJDJTIyYm9keSUyMiUzQSUyMk1BSU4ubGlzdHMlMjAlM0QlMjAlN0IlMjBvcGVuJTNBJTIwMSUyQyUyMHBlbmRpbmclM0ElMjAxJTJDJTIwaW5wcm9ncmVzcyUzQSUyMDElMkMlMjBkb25lJTNBJTIwMSUyMCU3RCUzQiUyMiU3RCUyQyUyMnNramxjazRmeSUyMiUzQSU3QiUyMmlkJTIyJTNBJTIyc2tqbGNrNGZ5JTIyJTJDJTIyaWNvbiUyMiUzQSUyMmZhJTIwZmEtdXNlci1mcmllbmRzJTIyJTJDJTIybmFtZSUyMiUzQSUyMlVzZXJzJTIyJTJDJTIydHlwZSUyMiUzQSUyMnNjaGVtYSUyMiUyQyUyMm5vdGUlMjIlM0ElMjJEZXNjcmlwdGlvbiUyMiUyQyUyMmNvbG9yJTIyJTNBJTIyJTIzNjFDODNCJTIyJTJDJTIyZmllbGRzJTIyJTNBJTVCJTdCJTIybmFtZSUyMiUzQSUyMm5hbWUlMjIlMkMlMjJ0eXBlJTIyJTNBJTIyc3RyaW5nJTIyJTJDJTIycmVxdWlyZWQlMjIlM0F0cnVlJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMmVtYWlsJTIyJTJDJTIydHlwZSUyMiUzQSUyMmVtYWlsJTIyJTJDJTIycmVxdWlyZWQlMjIlM0F0cnVlJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMnNhJTIyJTJDJTIydHlwZSUyMiUzQSUyMmJvb2xlYW4lMjIlMkMlMjJyZXF1aXJlZCUyMiUzQWZhbHNlJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMmlzZGlzYWJsZWQlMjIlMkMlMjJ0eXBlJTIyJTNBJTIyYm9vbGVhbiUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBZmFsc2UlN0QlNUQlMkMlMjJvcGVyYXRpb25zJTIyJTNBJTVCJTdCJTIybmFtZSUyMiUzQSUyMnF1ZXJ5JTIyJTJDJTIyYm9keSUyMiUzQSUyMk5PU1FMKCd1c2VycycpLmZpbmQoKS5maWVsZHMoJ2lkJTJDbmFtZSUyQ2VtYWlsJTJDc2ElMkNpc2Rpc2FibGVkJykuY2FsbGJhY2soJTI0LmNhbGxiYWNrKSUzQiUyMiU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJpbnNlcnQlMjIlMkMlMjJib2R5JTIyJTNBJTIyJTJGJTJGJTIwJTI0JTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTVDbiUyRiUyRiUyMHBhcmFtcyUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwcXVlcnklMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlNUNuJTVDbm1vZGVsLmlkJTIwJTNEJTIwVUlEKCklM0IlNUNubW9kZWwuZHRjcmVhdGVkJTIwJTNEJTIwTk9XJTNCJTVDbm1vZGVsLmR0dXBkYXRlZCUyMCUzRCUyME5PVyUzQiU1Q24lNUNuJTJGJTJGJTIwU2VuZCUyMGVtYWlsJTVDbk5PU1FMKCd1c2VycycpLmluc2VydChtb2RlbCkuY2FsbGJhY2soJTI0LmRvbmUobW9kZWwuaWQpKSUzQiU1Q25NQUlOLnVzZXJzY291bnQlMkIlMkIlM0IlMjIlMkMlMjJyb2xlcyUyMiUzQSUyMnNhJTIyJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMnJlbW92ZSUyMiUyQyUyMnJvbGVzJTIyJTNBJTIyc2ElMjIlMkMlMjJib2R5JTIyJTNBJTIyJTJGJTJGJTIwJTI0JTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTVDbiUyRiUyRiUyMHBhcmFtcyUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwcXVlcnklMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlNUNuJTVDbk5PU1FMKCd1c2VycycpLnJlbW92ZSgpLmlkKGlkKS5jYWxsYmFjayglMjQuZG9uZShpZCkpJTNCJTVDbk1BSU4udXNlcnNjb3VudC0tJTNCJTIyJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMnVwZGF0ZSUyMiUyQyUyMmJvZHklMjIlM0ElMjIlMkYlMkYlMjAlMjQlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwbW9kZWwlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwaWQlMjAlN0JTdHJpbmclN0QlM0IlNUNuJTJGJTJGJTIwcGFyYW1zJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGZpbHRlciUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBxdWVyeSUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjB1c2VyJTIwJTdCTnVsbGFiZSUyME9iamVjdCU3RCUzQiU1Q24lNUNubW9kZWwuZHR1cGRhdGVkJTIwJTNEJTIwTk9XJTNCJTVDbk5PU1FMKCd1c2VycycpLm1vZGlmeShtb2RlbCkuaWQoaWQpLmVycm9yKDQwNCkuZG9uZSglMjQlMkMlMjBmdW5jdGlvbihyZXNwb25zZSklMjAlN0IlNUNuJTVDdCUyNC5zdWNjZXNzKGlkKSUzQiU1Q24lNUN0TUFJTi53cyUyMCUyNiUyNiUyME1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ3VzZXJzJyUyMCU3RCklM0IlNUNuJTdEKSUzQiUyMiUyQyUyMnJvbGVzJTIyJTNBJTIyc2ElMjIlN0QlNUQlMkMlMjJjb21wcmVzcyUyMiUzQXRydWUlMkMlMjJyb3V0ZXMlMjIlM0ElNUIlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIydmFsaWRhdGUlMjIlM0ElMjIlMkIlMjIlMkMlMjJ0aW1lb3V0JTIyJTNBNSUyQyUyMmFjdGlvbiUyMiUzQSUyMnVzZXJzX2luc2VydCUyMiUyQyUyMmxlbmd0aCUyMiUzQTMlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIyaW5zZXJ0JTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJpbnNlcnQlMjIlN0QlMkMlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIydmFsaWRhdGUlMjIlM0ElMjItJTIyJTJDJTIydGltZW91dCUyMiUzQTUlMkMlMjJhY3Rpb24lMjIlM0ElMjJ1c2Vyc19xdWVyeSUyMiUyQyUyMmxlbmd0aCUyMiUzQTMlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIycXVlcnklMjIlNUQlMkMlMjJyZXNwb25zZSUyMiUzQSUyMnF1ZXJ5JTIyJTdEJTJDJTdCJTIydXJsJTIyJTNBJTIyJTJGYXBpJTJGJTIyJTJDJTIyYXV0aG9yaXplZCUyMiUzQSUyMiUyQiUyMiUyQyUyMnZhbGlkYXRlJTIyJTNBJTIyLSUyMiUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIyYWN0aW9uJTIyJTNBJTIydXNlcnNfcmVtb3ZlJTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMm1ldGhvZCUyMiUzQSUyMkFQSSUyMiUyQyUyMmFjdGlvbnMlMjIlM0ElNUIlMjJyZW1vdmUlMjIlNUQlMkMlMjJyZXNwb25zZSUyMiUzQSUyMnJlbW92ZSUyMiU3RCUyQyU3QiUyMnVybCUyMiUzQSUyMiUyRmFwaSUyRiUyMiUyQyUyMmF1dGhvcml6ZWQlMjIlM0ElMjIlMkIlMjIlMkMlMjJsZW5ndGglMjIlM0EzJTJDJTIydGltZW91dCUyMiUzQTUlMkMlMjJ2YWxpZGF0ZSUyMiUzQSUyMiUyQiUyMiUyQyUyMmFjdGlvbiUyMiUzQSUyMnVzZXJzX3VwZGF0ZSUyRiU3QmlkJTdEJTIyJTJDJTIybWV0aG9kJTIyJTNBJTIyQVBJJTIyJTJDJTIyYWN0aW9ucyUyMiUzQSU1QiUyMnVwZGF0ZSUyMiU1RCUyQyUyMnJlc3BvbnNlJTIyJTNBJTIydXBkYXRlJTIyJTdEJTVEJTJDJTIyeCUyMiUzQTQwJTJDJTIyeSUyMiUzQTI3NSUyQyUyMmVuY3J5cHQlMjIlM0FmYWxzZSU3RCUyQyUyMnNramxjcGV3YiUyMiUzQSU3QiUyMmlkJTIyJTNBJTIyc2tqbGNwZXdiJTIyJTJDJTIyaWNvbiUyMiUzQSUyMmZhJTIwZmEta2V5JTIyJTJDJTIybmFtZSUyMiUzQSUyMlVzZXJzJTJGTG9naW4lMjIlMkMlMjJ0eXBlJTIyJTNBJTIyc2NoZW1hJTIyJTJDJTIybm90ZSUyMiUzQSUyMkRlc2NyaXB0aW9uJTIyJTJDJTIyY29sb3IlMjIlM0ElMjIlMjM4M0M4M0MlMjIlMkMlMjJmaWVsZHMlMjIlM0ElNUIlN0IlMjJuYW1lJTIyJTNBJTIyZW1haWwlMjIlMkMlMjJ0eXBlJTIyJTNBJTIyc3RyaW5nJTIyJTJDJTIycmVxdWlyZWQlMjIlM0F0cnVlJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMmNvZGUlMjIlMkMlMjJ0eXBlJTIyJTNBJTIyc3RyaW5nKDYpJTIyJTJDJTIycmVxdWlyZWQlMjIlM0FmYWxzZSU3RCU1RCUyQyUyMm9wZXJhdGlvbnMlMjIlM0ElNUIlN0IlMjJuYW1lJTIyJTNBJTIyZXhlYyUyMiUyQyUyMmJvZHklMjIlM0ElMjIlMkYlMkYlMjAlMjQlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwbW9kZWwlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwaWQlMjAlN0JTdHJpbmclN0QlM0IlNUNuJTJGJTJGJTIwcGFyYW1zJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGZpbHRlciUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBxdWVyeSUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjB1c2VyJTIwJTdCTnVsbGFiZSUyME9iamVjdCU3RCUzQiU1Q24lNUNuJTJGJTJGJTIwQ3JlYXRlcyUyMGElMjBkZWZhdWx0JTIwYWNjb3VudCU1Q25pZiUyMCghTUFJTi51c2Vyc2NvdW50KSUyMCU3QiU1Q24lNUNuJTVDdHVzZXIlMjAlM0QlMjAlN0IlN0QlM0IlNUNuJTVDdHVzZXIuaWQlMjAlM0QlMjBVSUQoKSUzQiU1Q24lNUN0dXNlci5uYW1lJTIwJTNEJTIwJ1lvdXIlMjBOYW1lJyUzQiU1Q24lNUN0dXNlci5lbWFpbCUyMCUzRCUyMG1vZGVsLmVtYWlsJTNCJTVDbiU1Q3R1c2VyLnNhJTIwJTNEJTIwdHJ1ZSUzQiU1Q24lNUN0dXNlci5pc2Rpc2FibGVkJTIwJTNEJTIwZmFsc2UlM0IlNUNuJTVDdHVzZXIuZHRjcmVhdGVkJTIwJTNEJTIwTk9XJTNCJTVDbiU1Q3R1c2VyLmR0dXBkYXRlZCUyMCUzRCUyME5PVyUzQiU1Q24lNUN0Tk9TUUwoJ3VzZXJzJykuaW5zZXJ0KHVzZXIpJTNCJTVDbiU1Q3RNQUlOLnVzZXJzY291bnQlMkIlMkIlM0IlNUNuJTVDbiU1Q3R2YXIlMjBkYXRhJTIwJTNEJTIwJTdCJTdEJTNCJTVDbiU1Q3RkYXRhLmlkJTIwJTNEJTIwVUlEKCklM0IlNUNuJTVDdGRhdGEudWElMjAlM0QlMjAlMjQudWElM0IlNUNuJTVDdGRhdGEuaXAlMjAlM0QlMjAlMjQuaXAlM0IlNUNuJTVDdGRhdGEudXNlcmlkJTIwJTNEJTIwdXNlci5pZCUzQiU1Q24lNUN0ZGF0YS5kdGNyZWF0ZWQlMjAlM0QlMjBOT1clM0IlNUNuJTVDdE1BSU4uc2Vzc2lvbi5hdXRoY29va2llKCUyNCUyQyUyMGRhdGEuaWQlMkMlMjBkYXRhLnVzZXJpZCUyQyUyMCcxJTIwbW9udGgnKSUzQiU1Q24lNUN0Tk9TUUwoJ3Nlc3Npb25zJykuaW5zZXJ0KGRhdGEpLmNhbGxiYWNrKCUyNC5kb25lKCkpJTNCJTVDbiU1Q3RyZXR1cm4lM0IlNUNuJTdEJTVDbiU1Q25OT1NRTCgndXNlcnMnKS5vbmUoKS53aGVyZSgnZW1haWwnJTJDJTIwbW9kZWwuZW1haWwpLmZpZWxkcygnaWQlMkNpc2Rpc2FibGVkJTJDZHRsb2dnZWQnKS5lcnJvcig0MDQpLmRvbmUoJTI0JTJDJTIwZnVuY3Rpb24ocmVzcG9uc2UpJTIwJTdCJTVDbiU1Q24lNUN0aWYlMjAocmVzcG9uc2UuaXNkaXNhYmxlZCklMjAlN0IlNUNuJTVDdCU1Q3QlMjQuaW52YWxpZCgnZGlzYWJsZWQnKSUzQiU1Q24lNUN0JTVDdHJldHVybiUzQiU1Q24lNUN0JTdEJTVDbiU1Q24lNUN0JTJGJTJGJTIwTmV3JTIwYWNjb3VudHMlMjBjYW4lMjBzaWduJTIwd2l0aG91dCUyMGF1dGhvcml6YXRpb24lNUNuJTVDdGlmJTIwKG1vZGVsLmNvZGUlMjAlN0MlN0MlMjAhcmVzcG9uc2UuZHRsb2dnZWQpJTIwJTdCJTVDbiU1Q24lNUN0JTVDdGlmJTIwKCFyZXNwb25zZS5kdGxvZ2dlZCUyMCU3QyU3QyUyMG1vZGVsLmNvZGUlMjAlM0QlM0QlM0QlMjBURU1QJTVCbW9kZWwuZW1haWwlNUQpJTIwJTdCJTVDbiU1Q24lNUN0JTVDdCU1Q3R2YXIlMjBkYXRhJTIwJTNEJTIwJTdCJTdEJTNCJTVDbiU1Q3QlNUN0JTVDdGRhdGEuaWQlMjAlM0QlMjBVSUQoKSUzQiU1Q24lNUN0JTVDdCU1Q3RkYXRhLnVhJTIwJTNEJTIwJTI0LnVhJTNCJTVDbiU1Q3QlNUN0JTVDdGRhdGEuaXAlMjAlM0QlMjAlMjQuaXAlM0IlNUNuJTVDdCU1Q3QlNUN0ZGF0YS51c2VyaWQlMjAlM0QlMjByZXNwb25zZS5pZCUzQiU1Q24lNUN0JTVDdCU1Q3RkYXRhLmR0Y3JlYXRlZCUyMCUzRCUyME5PVyUzQiU1Q24lNUN0JTVDdCU1Q3RNQUlOLnNlc3Npb24uYXV0aGNvb2tpZSglMjQlMkMlMjBkYXRhLmlkJTJDJTIwZGF0YS51c2VyaWQlMkMlMjAnMSUyMG1vbnRoJyklM0IlNUNuJTVDdCU1Q3QlNUN0Tk9TUUwoJ3Nlc3Npb25zJykuaW5zZXJ0KGRhdGEpLmNhbGxiYWNrKCUyNC5kb25lKCkpJTNCJTVDbiU1Q24lNUN0JTVDdCU3RCUyMGVsc2UlNUNuJTVDdCU1Q3QlNUN0JTI0LmludmFsaWQoJ2NvZGUnKSUzQiU1Q24lNUNuJTVDdCU3RCUyMGVsc2UlMjAlN0IlNUNuJTVDbiU1Q3QlNUN0VEVNUCU1Qm1vZGVsLmVtYWlsJTVEJTIwJTNEJTIwVS5yYW5kb21fbnVtYmVyKDQpJTNCJTVDbiU1Q24lNUN0JTVDdCUyRiUyRiUyMHNlbmQlMjBjb2RlJTVDbiU1Q3QlNUN0dmFyJTIwZGF0YSUyMCUzRCUyMCU3QiU3RCUzQiU1Q24lNUN0JTVDdGRhdGEuc3ViamVjdCUyMCUzRCUyMCdWZXJpZmljYXRpb24lMjBjb2RlJyUzQiU1Q24lNUN0JTVDdGRhdGEudG8lMjAlM0QlMjAlNUJtb2RlbC5lbWFpbCU1RCUzQiU1Q24lNUN0JTVDdGRhdGEuYm9keSUyMCUzRCUyMCdZb3VyJTIwdmVyaWZpY2F0aW9uJTIwY29kZSUyMGlzJTNBJTIwJyUyMCUyQiUyMFRFTVAlNUJtb2RlbC5lbWFpbCU1RCUzQiU1Q24lNUN0JTVDdGRhdGEuZnJvbSUyMCUzRCUyMENPTkYubmFtZSUzQiU1Q24lNUN0JTVDdFRvdGFsQVBJKCdtYWlsJyUyQyUyMGRhdGElMkMlMjAlMjQuZG9uZSgnY29kZScpKSUzQiU1Q24lNUN0JTdEJTVDbiU1Q24lN0QpJTNCJTIyJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMmxvZ291dCUyMiUyQyUyMmJvZHklMjIlM0ElMjJNQUlOLnNlc3Npb24ubG9nb3V0KCUyNCklM0IlNUNuJTI0LnN1Y2Nlc3MoKSUzQiUyMiU3RCU1RCUyQyUyMmNvbXByZXNzJTIyJTNBdHJ1ZSUyQyUyMnJvdXRlcyUyMiUzQSU1QiU3QiUyMnVybCUyMiUzQSUyMiUyRmFwaSUyRiUyMiUyQyUyMmF1dGhvcml6ZWQlMjIlM0ElMjItJTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIydmFsaWRhdGUlMjIlM0ElMjIlMkIlMjIlMkMlMjJhY3Rpb24lMjIlM0ElMjJsb2dpbiUyMiUyQyUyMm1ldGhvZCUyMiUzQSUyMkFQSSUyMiUyQyUyMmFjdGlvbnMlMjIlM0ElNUIlMjJleGVjJTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJleGVjJTIyJTdEJTJDJTdCJTIydXJsJTIyJTNBJTIyJTJGYXBpJTJGJTIyJTJDJTIyYXV0aG9yaXplZCUyMiUzQSUyMiUyQiUyMiUyQyUyMnZhbGlkYXRlJTIyJTNBJTIyLSUyMiUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIyYWN0aW9uJTIyJTNBJTIybG9nb3V0JTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMm1ldGhvZCUyMiUzQSUyMkFQSSUyMiUyQyUyMmFjdGlvbnMlMjIlM0ElNUIlMjJsb2dvdXQlMjIlNUQlMkMlMjJyZXNwb25zZSUyMiUzQSUyMmxvZ291dCUyMiU3RCU1RCUyQyUyMnglMjIlM0EzNSUyQyUyMnklMjIlM0E5NjUlN0QlMkMlMjJza2psZGthbnklMjIlM0ElN0IlMjJpZCUyMiUzQSUyMnNramxka2FueSUyMiUyQyUyMmljb24lMjIlM0ElMjJmYSUyMGZhLWZvbnQlMjIlMkMlMjJuYW1lJTIyJTNBJTIyTGFiZWxzJTIyJTJDJTIydHlwZSUyMiUzQSUyMnNjaGVtYSUyMiUyQyUyMm5vdGUlMjIlM0ElMjJEZXNjcmlwdGlvbiUyMiUyQyUyMmNvbG9yJTIyJTNBJTIyJTIzQjkyRUM1JTIyJTJDJTIyZmllbGRzJTIyJTNBJTVCJTdCJTIybmFtZSUyMiUzQSUyMm5hbWUlMjIlMkMlMjJ0eXBlJTIyJTNBJTIyc3RyaW5nJTIyJTJDJTIycmVxdWlyZWQlMjIlM0F0cnVlJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMmNvbG9yJTIyJTJDJTIydHlwZSUyMiUzQSUyMnN0cmluZyg3KSUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBZmFsc2UlN0QlNUQlMkMlMjJvcGVyYXRpb25zJTIyJTNBJTVCJTdCJTIybmFtZSUyMiUzQSUyMnF1ZXJ5JTIyJTJDJTIyYm9keSUyMiUzQSUyMk5PU1FMKCdsYWJlbHMnKS5maW5kKCkuc29ydCgnZGF0ZWNyZWF0ZWRfZGVzYycpLmNhbGxiYWNrKCUyNC5jYWxsYmFjayklM0IlMjIlN0QlMkMlN0IlMjJuYW1lJTIyJTNBJTIyaW5zZXJ0JTIyJTJDJTIyYm9keSUyMiUzQSUyMm1vZGVsLmlkJTIwJTNEJTIwVUlEKCklM0IlNUNubW9kZWwuZHRjcmVhdGVkJTIwJTNEJTIwbmV3JTIwRGF0ZSgpJTNCJTVDbiU1Q25OT1NRTCgnbGFiZWxzJykuaW5zZXJ0KG1vZGVsKS5jYWxsYmFjayhmdW5jdGlvbigpJTIwJTdCJTVDbiU1Q3QlMjQuc3VjY2Vzcyhtb2RlbC5pZCklM0IlNUNuJTVDdE1BSU4ud3MlMjAlMjYlMjYlMjBNQUlOLndzLnNlbmQoJTdCJTIwVFlQRSUzQSUyMCdsYWJlbHMnJTIwJTdEKSUzQiU1Q24lN0QpJTNCJTIyJTJDJTIycm9sZXMlMjIlM0ElMjJzYSUyMiU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJwYXRjaCUyMiUyQyUyMmJvZHklMjIlM0ElMjJtb2RlbC5kdHVwZGF0ZWQlMjAlM0QlMjBuZXclMjBEYXRlKCklM0IlNUNuTk9TUUwoJ2xhYmVscycpLm1vZGlmeShtb2RlbCkuaWQoaWQpLmNhbGxiYWNrKGZ1bmN0aW9uKCklMjAlN0IlNUNuJTVDdCUyNC5zdWNjZXNzKGlkKSUzQiU1Q24lNUN0TUFJTi53cyUyMCUyNiUyNiUyME1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ2xhYmVscyclMjAlN0QpJTNCJTVDbiU3RCklM0IlMjIlMkMlMjJyb2xlcyUyMiUzQSUyMnNhJTIyJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMnJlbW92ZSUyMiUyQyUyMnJvbGVzJTIyJTNBJTIyc2ElMjIlMkMlMjJib2R5JTIyJTNBJTIyTk9TUUwoJ2xhYmVscycpLnJlbW92ZSgpLmlkKGlkKS5jYWxsYmFjayhmdW5jdGlvbihjb3VudCklMjAlN0IlNUNuJTVDdCUyNC5zdWNjZXNzKCklM0IlNUNuJTVDdGNvdW50JTIwJTI2JTI2JTIwTUFJTi53cyUyMCUyNiUyNiUyME1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ2xhYmVscyclMjAlN0QpJTNCJTVDbiU3RCklM0IlMjIlN0QlNUQlMkMlMjJjb21wcmVzcyUyMiUzQXRydWUlMkMlMjJyb3V0ZXMlMjIlM0ElNUIlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIydmFsaWRhdGUlMjIlM0ElMjItJTIyJTJDJTIydGltZW91dCUyMiUzQTUlMkMlMjJhY3Rpb24lMjIlM0ElMjJsYWJlbHNfcXVlcnklMjIlMkMlMjJsZW5ndGglMjIlM0EzJTJDJTIybWV0aG9kJTIyJTNBJTIyQVBJJTIyJTJDJTIyYWN0aW9ucyUyMiUzQSU1QiUyMnF1ZXJ5JTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJxdWVyeSUyMiU3RCUyQyU3QiUyMnVybCUyMiUzQSUyMiUyRmFwaSUyRiUyMiUyQyUyMmF1dGhvcml6ZWQlMjIlM0ElMjIlMkIlMjIlMkMlMjJ2YWxpZGF0ZSUyMiUzQSUyMiUyQiUyMiUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIyYWN0aW9uJTIyJTNBJTIybGFiZWxzX2luc2VydCUyMiUyQyUyMmxlbmd0aCUyMiUzQTMlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIyaW5zZXJ0JTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJpbnNlcnQlMjIlN0QlMkMlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIydmFsaWRhdGUlMjIlM0ElMjIlMjMlMjIlMkMlMjJ0aW1lb3V0JTIyJTNBNSUyQyUyMmFjdGlvbiUyMiUzQSUyMmxhYmVsc191cGRhdGUlMkYlN0JpZCU3RCUyMiUyQyUyMmxlbmd0aCUyMiUzQTMlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIycGF0Y2glMjIlNUQlMkMlMjJyZXNwb25zZSUyMiUzQSUyMnBhdGNoJTIyJTdEJTJDJTdCJTIydXJsJTIyJTNBJTIyJTJGYXBpJTJGJTIyJTJDJTIyYXV0aG9yaXplZCUyMiUzQSUyMiUyQiUyMiUyQyUyMnZhbGlkYXRlJTIyJTNBJTIyLSUyMiUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIyYWN0aW9uJTIyJTNBJTIybGFiZWxzX3JlbW92ZSUyRiU3QmlkJTdEJTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMm1ldGhvZCUyMiUzQSUyMkFQSSUyMiUyQyUyMmFjdGlvbnMlMjIlM0ElNUIlMjJyZW1vdmUlMjIlNUQlMkMlMjJyZXNwb25zZSUyMiUzQSUyMnJlbW92ZSUyMiU3RCU1RCUyQyUyMnglMjIlM0ExMTE1JTJDJTIyeSUyMiUzQTExNDAlN0QlMkMlMjJza2psZHN5MTclMjIlM0ElN0IlMjJpZCUyMiUzQSUyMnNramxkc3kxNyUyMiUyQyUyMmljb24lMjIlM0ElMjJmYSUyMGZhLXRhc2tzJTIyJTJDJTIybmFtZSUyMiUzQSUyMkNhcmRzJTJGVGFzayUyMiUyQyUyMnR5cGUlMjIlM0ElMjJzY2hlbWElMjIlMkMlMjJub3RlJTIyJTNBJTIyRGVzY3JpcHRpb24lMjIlMkMlMjJjb2xvciUyMiUzQSUyMiUyMzU1OTlGOCUyMiUyQyUyMmZpZWxkcyUyMiUzQSU1QiU3QiUyMm5hbWUlMjIlM0ElMjJuYW1lJTIyJTJDJTIydHlwZSUyMiUzQSUyMnN0cmluZyUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBdHJ1ZSU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJpc2RvbmUlMjIlMkMlMjJ0eXBlJTIyJTNBJTIyYm9vbGVhbiUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBZmFsc2UlN0QlMkMlN0IlMjJuYW1lJTIyJTNBJTIyaWQlMjIlMkMlMjJ0eXBlJTIyJTNBJTIyc3RyaW5nJTIyJTJDJTIycmVxdWlyZWQlMjIlM0F0cnVlJTdEJTVEJTJDJTIyb3BlcmF0aW9ucyUyMiUzQSU1QiU1RCUyQyUyMmNvbXByZXNzJTIyJTNBdHJ1ZSUyQyUyMnJvdXRlcyUyMiUzQSU1QiU1RCUyQyUyMnglMjIlM0ExMTI1JTJDJTIyeSUyMiUzQTI4NSU3RCUyQyUyMmxramxrMGZrOSUyMiUzQSU3QiUyMmlkJTIyJTNBJTIybGtqbGswZms5JTIyJTJDJTIybmFtZSUyMiUzQSUyMkNhcmRzJTIyJTJDJTIydHlwZSUyMiUzQSUyMmxhYmVsJTIyJTJDJTIyeCUyMiUzQTU4NSUyQyUyMnklMjIlM0EzMTUlN0QlMkMlMjJza2pscnN5YXolMjIlM0ElN0IlMjJpZCUyMiUzQSUyMnNramxyc3lheiUyMiUyQyUyMmljb24lMjIlM0ElMjJmYXIlMjBmYS1idWlsZGluZyUyMiUyQyUyMm5hbWUlMjIlM0ElMjJQcm9qZWN0cyUyMiUyQyUyMnR5cGUlMjIlM0ElMjJzY2hlbWElMjIlMkMlMjJub3RlJTIyJTNBJTIyRGVzY3JpcHRpb24lMjIlMkMlMjJjb2xvciUyMiUzQSUyMiUyMzJFNjdDNSUyMiUyQyUyMmZpZWxkcyUyMiUzQSU1QiU3QiUyMm5hbWUlMjIlM0ElMjJuYW1lJTIyJTJDJTIydHlwZSUyMiUzQSUyMnN0cmluZyUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBdHJ1ZSU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJjb2xvciUyMiUyQyUyMnR5cGUlMjIlM0ElMjJzdHJpbmcoNyklMjIlMkMlMjJyZXF1aXJlZCUyMiUzQWZhbHNlJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMnJhdGUlMjIlMkMlMjJ0eXBlJTIyJTNBJTIybnVtYmVyJTIyJTJDJTIycmVxdWlyZWQlMjIlM0FmYWxzZSU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJjb21wYW55JTIyJTJDJTIydHlwZSUyMiUzQSUyMnN0cmluZyUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBdHJ1ZSU3RCU1RCUyQyUyMm9wZXJhdGlvbnMlMjIlM0ElNUIlN0IlMjJuYW1lJTIyJTNBJTIycXVlcnklMjIlMkMlMjJib2R5JTIyJTNBJTIyTk9TUUwoJ3Byb2plY3RzJykuZmluZCgpLnNvcnQoJ2R0Y3JlYXRlZF9kZXNjJykuY2FsbGJhY2soJTI0LmNhbGxiYWNrKSUzQiUyMiU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJpbnNlcnQlMjIlMkMlMjJib2R5JTIyJTNBJTIybW9kZWwuaWQlMjAlM0QlMjBVSUQoKSUzQiU1Q25tb2RlbC5kdGNyZWF0ZWQlMjAlM0QlMjBuZXclMjBEYXRlKCklM0IlNUNuJTVDbk5PU1FMKCdwcm9qZWN0cycpLmluc2VydChtb2RlbCkuY2FsbGJhY2soZnVuY3Rpb24oKSUyMCU3QiU1Q24lNUN0JTI0LnN1Y2Nlc3MobW9kZWwuaWQpJTNCJTVDbiU1Q3RNQUlOLndzJTIwJTI2JTI2JTIwTUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAncHJvamVjdHMnJTIwJTdEKSUzQiU1Q24lN0QpJTNCJTIyJTJDJTIycm9sZXMlMjIlM0ElMjJzYSUyMiU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJwYXRjaCUyMiUyQyUyMmJvZHklMjIlM0ElMjJtb2RlbC5kdHVwZGF0ZWQlMjAlM0QlMjBuZXclMjBEYXRlKCklM0IlNUNuTk9TUUwoJ3Byb2plY3RzJykubW9kaWZ5KG1vZGVsKS5pZChpZCkuY2FsbGJhY2soZnVuY3Rpb24oKSUyMCU3QiU1Q24lNUN0JTI0LnN1Y2Nlc3MoaWQpJTNCJTVDbiU1Q3RNQUlOLndzJTIwJTI2JTI2JTIwTUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAncHJvamVjdHMnJTIwJTdEKSUzQiU1Q24lN0QpJTNCJTIyJTJDJTIycm9sZXMlMjIlM0ElMjJzYSUyMiU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJyZW1vdmUlMjIlMkMlMjJyb2xlcyUyMiUzQSUyMnNhJTIyJTJDJTIyYm9keSUyMiUzQSUyMk5PU1FMKCdjYXJkcycpLnJlbW92ZSgpLndoZXJlKCdwcm9qZWN0aWQnJTJDJTIwaWQpJTNCJTVDbk5PU1FMKCdwcm9qZWN0cycpLnJlbW92ZSgpLmlkKGlkKS5jYWxsYmFjayhmdW5jdGlvbihjb3VudCklMjAlN0IlNUNuJTVDdCUyNC5zdWNjZXNzKCklM0IlNUNuJTVDdGNvdW50JTIwJTI2JTI2JTIwTUFJTi53cyUyMCUyNiUyNiUyME1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ3Byb2plY3RzJyUyMCU3RCklM0IlNUNuJTdEKSUzQiUyMiU3RCU1RCUyQyUyMmNvbXByZXNzJTIyJTNBdHJ1ZSUyQyUyMnJvdXRlcyUyMiUzQSU1QiU3QiUyMnVybCUyMiUzQSUyMiUyRmFwaSUyRiUyMiUyQyUyMmF1dGhvcml6ZWQlMjIlM0ElMjIlMkIlMjIlMkMlMjJ2YWxpZGF0ZSUyMiUzQSUyMi0lMjIlMkMlMjJ0aW1lb3V0JTIyJTNBNSUyQyUyMmFjdGlvbiUyMiUzQSUyMnByb2plY3RzX3F1ZXJ5JTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMm1ldGhvZCUyMiUzQSUyMkFQSSUyMiUyQyUyMmFjdGlvbnMlMjIlM0ElNUIlMjJxdWVyeSUyMiU1RCUyQyUyMnJlc3BvbnNlJTIyJTNBJTIycXVlcnklMjIlN0QlMkMlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIydmFsaWRhdGUlMjIlM0ElMjIlMkIlMjIlMkMlMjJ0aW1lb3V0JTIyJTNBNSUyQyUyMmFjdGlvbiUyMiUzQSUyMnByb2plY3RzX2luc2VydCUyMiUyQyUyMmxlbmd0aCUyMiUzQTMlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIyaW5zZXJ0JTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJpbnNlcnQlMjIlN0QlMkMlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIydmFsaWRhdGUlMjIlM0ElMjIlMkIlMjIlMkMlMjJ0aW1lb3V0JTIyJTNBNSUyQyUyMmFjdGlvbiUyMiUzQSUyMnByb2plY3RzX3VwZGF0ZSUyRiU3QmlkJTdEJTIyJTJDJTIybGVuZ3RoJTIyJTNBMyUyQyUyMm1ldGhvZCUyMiUzQSUyMkFQSSUyMiUyQyUyMmFjdGlvbnMlMjIlM0ElNUIlMjJwYXRjaCUyMiU1RCUyQyUyMnJlc3BvbnNlJTIyJTNBJTIycGF0Y2glMjIlN0QlMkMlN0IlMjJ1cmwlMjIlM0ElMjIlMkZhcGklMkYlMjIlMkMlMjJhdXRob3JpemVkJTIyJTNBJTIyJTJCJTIyJTJDJTIydmFsaWRhdGUlMjIlM0ElMjItJTIyJTJDJTIydGltZW91dCUyMiUzQTUlMkMlMjJhY3Rpb24lMjIlM0ElMjJwcm9qZWN0c19yZW1vdmUlMkYlN0JpZCU3RCUyMiUyQyUyMmxlbmd0aCUyMiUzQTMlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIycmVtb3ZlJTIyJTVEJTJDJTIycmVzcG9uc2UlMjIlM0ElMjJyZW1vdmUlMjIlN0QlNUQlMkMlMjJ4JTIyJTNBMTYzMCUyQyUyMnklMjIlM0EyOTAlN0QlMkMlMjJja2psemlhamUlMjIlM0ElN0IlMjJjb2xvciUyMiUzQSUyMiUyMzYyQzlDQSUyMiUyQyUyMmljb24lMjIlM0ElMjJmYSUyMGZhLXdyZW5jaCUyMiUyQyUyMmlkJTIyJTNBJTIyY2tqbHppYWplJTIyJTJDJTIybmFtZSUyMiUzQSUyMkNvbmZpZ3VyYXRpb24lMjIlMkMlMjJ0eXBlJTIyJTNBJTIyY29uZmlnJTIyJTJDJTIybm90ZSUyMiUzQSUyMkRlc2NyaXB0aW9uJTIyJTJDJTIyeCUyMiUzQTU4NSUyQyUyMnklMjIlM0ExNDE1JTJDJTIyYm9keSUyMiUzQSUyMmF1dGhfc2VjcmV0JTIwJTIwJTIwJTNBJTIwYWE4OTRlNGQ3OTlhJTVDbmF1dGhfY29va2llJTIwJTIwJTIwJTNBJTIwYTYyN2FhNiUyMiU3RCUyQyUyMnNram0xZGJpYSUyMiUzQSU3QiUyMmlkJTIyJTNBJTIyc2tqbTFkYmlhJTIyJTJDJTIyaWNvbiUyMiUzQSUyMmZhJTIwZmEtY29nJTIyJTJDJTIybmFtZSUyMiUzQSUyMlNldHRpbmdzJTIyJTJDJTIydHlwZSUyMiUzQSUyMnNjaGVtYSUyMiUyQyUyMm5vdGUlMjIlM0ElMjJEZXNjcmlwdGlvbiUyMiUyQyUyMmNvbG9yJTIyJTNBJTIyJTIzNjI5NjJCJTIyJTJDJTIyZmllbGRzJTIyJTNBJTVCJTdCJTIybmFtZSUyMiUzQSUyMm5hbWUlMjIlMkMlMjJ0eXBlJTIyJTNBJTIyc3RyaW5nJTIyJTJDJTIycmVxdWlyZWQlMjIlM0FmYWxzZSU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJ0b3RhbGFwaSUyMiUyQyUyMnR5cGUlMjIlM0ElMjJzdHJpbmclMjIlMkMlMjJyZXF1aXJlZCUyMiUzQWZhbHNlJTdEJTJDJTdCJTIybmFtZSUyMiUzQSUyMmNvbG9yJTIyJTJDJTIydHlwZSUyMiUzQSUyMnN0cmluZyg3KSUyMiUyQyUyMnJlcXVpcmVkJTIyJTNBZmFsc2UlN0QlNUQlMkMlMjJvcGVyYXRpb25zJTIyJTNBJTVCJTdCJTIybmFtZSUyMiUzQSUyMnJlYWQlMjIlMkMlMjJib2R5JTIyJTNBJTIyJTI0LmNhbGxiYWNrKFBSRUYuc2V0dGluZ3MlMjAlN0MlN0MlMjAlN0IlN0QpJTNCJTIyJTJDJTIycm9sZXMlMjIlM0ElMjJzYSUyMiU3RCUyQyU3QiUyMm5hbWUlMjIlM0ElMjJzYXZlJTIyJTJDJTIycm9sZXMlMjIlM0ElMjJzYSUyMiUyQyUyMmJvZHklMjIlM0ElMjJQUkVGLnNldCgnc2V0dGluZ3MnJTJDJTIwbW9kZWwpJTNCJTVDbkNPTkYubmFtZSUyMCUzRCUyMG1vZGVsLm5hbWUlM0IlNUNuQ09ORi50b3RhbGFwaSUyMCUzRCUyMG1vZGVsLnRvdGFsYXBpJTNCJTVDbiUyNC5zdWNjZXNzKCklM0IlNUNuJTVDbk1BSU4ud3MlMjAlMjYlMjYlMjBNQUlOLndzLnNlbmQoJTdCJTIwVFlQRSUzQSUyMCdzZXR0aW5ncyclMkMlMjBib2R5JTNBJTIwbW9kZWwlMjAlN0QpJTNCJTIyJTdEJTVEJTJDJTIyY29tcHJlc3MlMjIlM0F0cnVlJTJDJTIycm91dGVzJTIyJTNBJTVCJTdCJTIydXJsJTIyJTNBJTIyJTJGYXBpJTJGJTIyJTJDJTIyYXV0aG9yaXplZCUyMiUzQSUyMiUyQiUyMiUyQyUyMnZhbGlkYXRlJTIyJTNBJTIyLSUyMiUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIyYWN0aW9uJTIyJTNBJTIyc2V0dGluZ3NfcmVhZCUyMiUyQyUyMmxlbmd0aCUyMiUzQTMlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIycmVhZCUyMiU1RCUyQyUyMnJlc3BvbnNlJTIyJTNBJTIycmVhZCUyMiU3RCUyQyU3QiUyMnVybCUyMiUzQSUyMiUyRmFwaSUyRiUyMiUyQyUyMmF1dGhvcml6ZWQlMjIlM0ElMjIlMkIlMjIlMkMlMjJ2YWxpZGF0ZSUyMiUzQSUyMiUyQiUyMiUyQyUyMnRpbWVvdXQlMjIlM0E1JTJDJTIyYWN0aW9uJTIyJTNBJTIyc2V0dGluZ3Nfc2F2ZSUyMiUyQyUyMmxlbmd0aCUyMiUzQTMlMkMlMjJtZXRob2QlMjIlM0ElMjJBUEklMjIlMkMlMjJhY3Rpb25zJTIyJTNBJTVCJTIyc2F2ZSUyMiU1RCUyQyUyMnJlc3BvbnNlJTIyJTNBJTIyc2F2ZSUyMiU3RCU1RCUyQyUyMnglMjIlM0ExNjMwJTJDJTIyeSUyMiUzQTk0MCU3RCUyQyUyMnNram11NnF0NCUyMiUzQSU3QiUyMmlkJTIyJTNBJTIyc2tqbXU2cXQ0JTIyJTJDJTIyaWNvbiUyMiUzQSUyMmZhciUyMGZhLWNsb2NrJTIyJTJDJTIybmFtZSUyMiUzQSUyMkNhcmRzJTJGTWludXRlcyUyMiUyQyUyMnR5cGUlMjIlM0ElMjJzY2hlbWElMjIlMkMlMjJub3RlJTIyJTNBJTIyRGVzY3JpcHRpb24lMjIlMkMlMjJjb2xvciUyMiUzQSUyMiUyMzU1OTlGOCUyMiUyQyUyMmZpZWxkcyUyMiUzQSU1QiU3QiUyMm5hbWUlMjIlM0ElMjJ2YWx1ZSUyMiUyQyUyMnR5cGUlMjIlM0ElMjJudW1iZXIlMjIlMkMlMjJyZXF1aXJlZCUyMiUzQWZhbHNlJTdEJTVEJTJDJTIyb3BlcmF0aW9ucyUyMiUzQSU1QiU3QiUyMm5hbWUlMjIlM0ElMjJ1cGRhdGUlMjIlMkMlMjJib2R5JTIyJTNBJTIyJTJGJTJGJTIwJTI0JTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTVDbiUyRiUyRiUyMHBhcmFtcyUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwcXVlcnklMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlNUNuJTVDbk5PU1FMKCdjYXJkcycpLm9uZSgpLmlkKGlkKS5vcihmdW5jdGlvbihidWlsZGVyKSUyMCU3QiU1Q24lNUN0YnVpbGRlci53aGVyZSgndXNlcmlkJyUyQyUyMHVzZXIuaWQpJTNCJTVDbiU1Q3RidWlsZGVyLndoZXJlKCdzb2x2ZXJpZCclMkMlMjB1c2VyLmlkKSUzQiU1Q24lN0QpLmVycm9yKDQwNCkuZG9uZSglMjQlMkMlMjBmdW5jdGlvbihyZXNwb25zZSklMjAlN0IlNUNuJTVDbiU1Q3RpZiUyMCghcmVzcG9uc2UubWludXRlcyklNUNuJTVDdCU1Q3RyZXNwb25zZS5taW51dGVzJTIwJTNEJTIwMCUzQiU1Q24lNUNuJTVDdHJlc3BvbnNlLm1pbnV0ZXMlMjAlMkIlM0QlMjBtb2RlbC52YWx1ZSUzQiU1Q24lNUNuJTVDdGlmJTIwKHJlc3BvbnNlLm1pbnV0ZXMlMjAlM0MlMjAwKSU1Q24lNUN0JTVDdHJlc3BvbnNlLm1pbnV0ZXMlMjAlM0QlMjAwJTNCJTVDbiU1Q24lNUN0Tk9TUUwoJ2NhcmRzJykubW9kaWZ5KCU3QiUyMG1pbnV0ZXMlM0ElMjByZXNwb25zZS5taW51dGVzJTIwJTdEKS5pZChpZCkuY2FsbGJhY2soJTI0LmRvbmUoKSklM0IlNUNuJTVDdE1BSU4ud3MlMjAlMjYlMjYlMjBNQUlOLndzLnNlbmQoJTdCJTIwVFlQRSUzQSUyMCdjYXJkcyUyRmxvZ3dvcmsnJTJDJTIwYm9keSUzQSUyMCU3QiUyMGlkJTNBJTIwaWQlMkMlMjBtaW51dGVzJTNBJTIwcmVzcG9uc2UubWludXRlcyUyMCU3RCU3RCUyQyUyMGNsaWVudCUyMCUzRCUzRSUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTNEJTIwcmVzcG9uc2UudXNlcmlkJTIwJTdDJTdDJTIwY2xpZW50LnVzZXIuaWQlMjAlM0QlM0QlM0QlMjByZXNwb25zZS5zb2x2ZXJpZCklM0IlNUNuJTVDbiU1Q3R2YXIlMjBsb2clMjAlM0QlMjAlN0IlN0QlM0IlNUNuJTVDdGxvZy5pZCUyMCUzRCUyMHJlc3BvbnNlLmlkJTNCJTVDbiU1Q3Rsb2cubmFtZSUyMCUzRCUyMHJlc3BvbnNlLm5hbWUlM0IlNUNuJTVDdGxvZy5wcm9qZWN0aWQlMjAlM0QlMjByZXNwb25zZS5wcm9qZWN0aWQlM0IlNUNuJTVDdGxvZy51c2VyaWQlMjAlM0QlMjB1c2VyLmlkJTNCJTVDbiU1Q3Rsb2cudXNlcm5hbWUlMjAlM0QlMjB1c2VyLm5hbWUlM0IlNUNuJTVDdGxvZy5taW51dGVzJTIwJTNEJTIwbW9kZWwudmFsdWUlM0IlNUNuJTVDdGxvZy53ZWVrJTIwJTNEJTIwJTJCTk9XLmZvcm1hdCgndycpJTNCJTVDbiU1Q3Rsb2cud2Vla2x5JTIwJTNEJTIwJTJCTk9XLmZvcm1hdCgneXl5eXd3JyklM0IlNUNuJTVDdGxvZy5kYWlseSUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3l5eXlNTWRkJyklM0IlNUNuJTVDdGxvZy5tb250aGx5JTIwJTNEJTIwJTJCTk9XLmZvcm1hdCgneXl5eU1NJyklM0IlNUNuJTVDdGxvZy55ZWFybHklMjAlM0QlMjAlMkJOT1cuZm9ybWF0KCd5eXl5JyklM0IlNUNuJTVDdGxvZy5kdGNyZWF0ZWQlMjAlM0QlMjBOT1clM0IlNUNuJTVDdE5PU1FMKCdsb2d3b3JrJykuaW5zZXJ0KGxvZyklM0IlNUNuJTVDbiU3RCklM0IlMjIlN0QlMkMlN0IlMjJuYW1lJTIyJTNBJTIyc3RhdHMlMjIlMkMlMjJib2R5JTIyJTNBJTIyJTJGJTJGJTIwJTI0JTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTVDbiUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTVDbiUyRiUyRiUyMHBhcmFtcyUyMCU3Qk9iamVjdCU3RCUzQiU1Q24lMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwcXVlcnklMjAlN0JPYmplY3QlN0QlM0IlNUNuJTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlNUNuJTVDbk5PU1FMKCdsb2d3b3JrJykuZmluZCgpLmZpZWxkcygncHJvamVjdGlkJTJDdXNlcmlkJTJDbWludXRlcyUyQ3dlZWsnKS53aGVyZSgnbW9udGhseSclMkMlMjAlMjQucXVlcnkuZGF0ZSUyMCU3QyU3QyUyME5PVy5mb3JtYXQoJ3l5eXlNTScpKS5jYWxsYmFjayglMjQuY2FsbGJhY2spJTNCJTIyJTJDJTIycm9sZXMlMjIlM0ElMjJzYSUyMiU3RCU1RCUyQyUyMmNvbXByZXNzJTIyJTNBdHJ1ZSUyQyUyMnJvdXRlcyUyMiUzQSU1QiU3QiUyMnVybCUyMiUzQSUyMiUyRmFwaSUyRiUyMiUyQyUyMmF1dGhvcml6ZWQlMjIlM0ElMjIlMkIlMjIlMkMlMjJsZW5ndGglMjIlM0EzJTJDJTIydGltZW91dCUyMiUzQTUlMkMlMjJ2YWxpZGF0ZSUyMiUzQSUyMiUyQiUyMiUyQyUyMmFjdGlvbiUyMiUzQSUyMmNhcmRzX2xvZ3dvcmslMkYlN0JpZCU3RCUyMiUyQyUyMm1ldGhvZCUyMiUzQSUyMkFQSSUyMiUyQyUyMmFjdGlvbnMlMjIlM0ElNUIlMjJ1cGRhdGUlMjIlNUQlMkMlMjJyZXNwb25zZSUyMiUzQSUyMnVwZGF0ZSUyMiU3RCU1RCUyQyUyMnglMjIlM0ExMTIwJTJDJTIyeSUyMiUzQTY5MCU3RCUyQyUyMmRram12OXhqZyUyMiUzQSU3QiUyMmljb24lMjIlM0ElMjJmYSUyMGZhLWZsYWctY2hlY2tlcmVkJTIyJTJDJTIyY29sb3IlMjIlM0ElMjIlMjNFQTcwNkIlMjIlMkMlMjJpZCUyMiUzQSUyMmRram12OXhqZyUyMiUyQyUyMm5hbWUlMjIlM0ElMjJTdGFydHVwJTIyJTJDJTIydHlwZSUyMiUzQSUyMmRlZmluaXRpb24lMjIlMkMlMjJub3RlJTIyJTNBJTIyRGVzY3JpcHRpb24lMjIlMkMlMjJ4JTIyJTNBMTIzMCUyQyUyMnklMjIlM0E3NSUyQyUyMmJvZHklMjIlM0ElMjJpZiUyMChQUkVGLnNldHRpbmdzKSUyMCU3QiU1Q24lNUN0Q09ORi5uYW1lJTIwJTNEJTIwUFJFRi5zZXR0aW5ncy5uYW1lJTNCJTVDbiU1Q3RDT05GLnRvdGFsYXBpJTIwJTNEJTIwUFJFRi5zZXR0aW5ncy50b3RhbGFwaSUzQiU1Q24lN0QlNUNuJTVDbiUyRiUyRiUyMENvdW50cyUyMHVzZXJzJTIwZHVlJTIwdG8lMjBkZWZhdWx0JTIwY3JlZGVudGlhbHMlNUNuTk9TUUwoJ3VzZXJzJykuY291bnQoKS5jYWxsYmFjayhmdW5jdGlvbihlcnIlMkMlMjByZXNwb25zZSklMjAlN0IlNUNuJTVDdE1BSU4udXNlcnNjb3VudCUyMCUzRCUyMHJlc3BvbnNlLmNvdW50JTNCJTVDbiU3RCklM0IlMjIlN0QlN0QlMkMlMjJ1cmwlMjIlM0ElMjJodHRwcyUzQSUyRiUyRnd3dy50b3RhbGpzLmNvbSUyRmhlbGxvJTJGJTIyJTJDJTIybmFtZSUyMiUzQSUyMkhlbGxvJTIwYXBwJTIyJTJDJTIyYXV0aG9yJTIyJTNBJTIyUGV0ZXIlMjBTaXJrYSUyMiUyQyUyMnZlcnNpb24lMjIlM0ElMjIxJTIyJTdE","compiled":"base64 KGZ1bmN0aW9uKCklMjAlN0IlMEElMEElMDklMkYlMkYlMjBDb25maWd1cmF0aW9uJTBBJTA5KGZ1bmN0aW9uKCklMjAlN0IlMEElMDklMDlMT0FEQ09ORklHKGRlY29kZVVSSUNvbXBvbmVudChCdWZmZXIuZnJvbSgnWVhWMGFGOXpaV055WlhRbE1qQWxNakFsTWpBbE0wRWxNakJoWVRnNU5HVTBaRGM1T1dFbE1FRmhkWFJvWDJOdmIydHBaU1V5TUNVeU1DVXlNQ1V6UVNVeU1HRTJNamRoWVRZJTNEJyUyQyUyMCdiYXNlNjQnKSkpJTNCJTBBJTA5JTdEKSgpJTNCJTBBJTBBJTA5dmFyJTIwcXVldWUlMjAlM0QlMjAlNUIlNUQlM0IlMEElMEElMDlxdWV1ZS5hc3luYyhmdW5jdGlvbigpJTIwJTdCJTBBJTBBJTA5JTA5Q09ORi5kZWZhdWx0X2Vycm9yYnVpbGRlcl9lcnJvcnMlMjAlM0QlMjB0cnVlJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTJGJTJGJTIwQ29uZmlndXJhdGlvbiUwQSUwOSUwOShmdW5jdGlvbigpJTIwJTdCJTBBJTA5JTA5JTA5TE9BRENPTkZJRyhkZWNvZGVVUklDb21wb25lbnQoQnVmZmVyLmZyb20oJ1lYVjBhRjl6WldOeVpYUWxNakFsTWpBbE1qQWxNMEVsTWpCaFlUZzVOR1UwWkRjNU9XRWxNRUZoZFhSb1gyTnZiMnRwWlNVeU1DVXlNQ1V5TUNVelFTVXlNR0UyTWpkaFlUWSUzRCclMkMlMjAnYmFzZTY0JykpKSUzQiUwQSUwOSUwOSU3RCkoKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUyRiUyRiUyMERlZmluaXRpb25zJTBBJTA5JTA5KGZ1bmN0aW9uKCklMjAlN0IlMEElMDklMDklMEElMDklMDklMDklMkYlMkYlNDBidWlsZCUyMERlZmluaXRpb24lMjAlMjJBVVRIJTIyJTBBJTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOShmdW5jdGlvbigpJTIwJTdCJTBBJTA5JTA5JTA5JTA5dmFyJTIwb3B0JTIwJTNEJTIwJTdCJTdEJTNCJTBBJTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5b3B0LnNlY3JldCUyMCUzRCUyMENPTkYuYXV0aF9zZWNyZXQlM0IlMEElMDklMDklMDklMDlvcHQuY29va2llJTIwJTNEJTIwQ09ORi5hdXRoX2Nvb2tpZSUzQiUwQSUwOSUwOSUwOSUwOW9wdC5kZG9zJTIwJTNEJTIwMTAlM0IlMEElMDklMDklMDklMDlvcHQub3B0aW9ucyUyMCUzRCUyMCU3QiUyMHNhbWVzaXRlJTNBJTIwJ2xheCclMjAlN0QlM0IlMEElMDklMDklMDklMDklMEElMDklMDklMDklMDlvcHQub25yZWFkJTIwJTNEJTIwZnVuY3Rpb24obWV0YSUyQyUyMG5leHQpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5Tk9TUUwoJ3Nlc3Npb25zJykub25lKCkuaWQobWV0YS5zZXNzaW9uaWQpLndoZXJlKCd1c2VyaWQnJTJDJTIwbWV0YS51c2VyaWQpLndoZXJlKCd1YSclMkMlMjBtZXRhLnVhKS5jYWxsYmFjayhmdW5jdGlvbihlcnIlMkMlMjByZXNwb25zZSklMjAlN0IlMEElMDklMDklMDklMDklMDklMDlpZiUyMChyZXNwb25zZSklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMDlOT1NRTCgndXNlcnMnKS5vbmUoKS5pZChtZXRhLnVzZXJpZCkuY2FsbGJhY2soZnVuY3Rpb24oZXJyJTJDJTIwcmVzcG9uc2UpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5aWYlMjAocmVzcG9uc2UlMjAlMjYlMjYlMjAhcmVzcG9uc2UuaXNkaXNhYmxlZCklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMDklMDklMDlOT1NRTCgndXNlcnMnKS5tb2RpZnkoJTdCJTIwaXNvbmxpbmUlM0ElMjB0cnVlJTJDJTIwZHRsb2dnZWQlM0ElMjBOT1clMjAlN0QpLmlkKG1ldGEudXNlcmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUwOU5PU1FMKCdzZXNzaW9ucycpLm1vZGlmeSglN0IlMjBpc29ubGluZSUzQSUyMHRydWUlMkMlMjBkdGxvZ2dlZCUzQSUyME5PVyUyMCU3RCkuaWQobWV0YS5zZXNzaW9uaWQpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5JTdEJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5bmV4dChudWxsJTJDJTIwcmVzcG9uc2UpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSU3RCUyMGVsc2UlMEElMDklMDklMDklMDklMDklMDklMDluZXh0KG51bGwpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwOSUwOSU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOW9wdC5vbmZyZWUlMjAlM0QlMjBmdW5jdGlvbihtZXRhKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMG1vZCUyMCUzRCUyMCU3QiUyMGlzb25saW5lJTNBJTIwZmFsc2UlMjAlN0QlM0IlMEElMDklMDklMDklMDklMDlOT1NRTCgnc2Vzc2lvbnMnKS5tb2RpZnkobW9kKS53aGVyZSgnaXNvbmxpbmUnJTJDJTIwdHJ1ZSkuaW4oJ2lkJyUyQyUyMG1ldGEuZXhwaXJlZCklM0IlMEElMDklMDklMDklMDklMDlOT1NRTCgndXNlcnMnKS5tb2RpZnkobW9kKS53aGVyZSgnaXNvbmxpbmUnJTJDJTIwdHJ1ZSkuaW4oJ2lkJyUyQyUyMG1ldGEudXNlcnMpJTNCJTBBJTA5JTA5JTA5JTA5JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5QVVUSChvcHQpJTNCJTBBJTA5JTA5JTA5JTA5TUFJTi5zZXNzaW9uJTIwJTNEJTIwb3B0JTNCJTBBJTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5Tk9TUUwoJ3VzZXJzJykubW9kaWZ5KCU3QiUyMGlzb25saW5lJTNBJTIwZmFsc2UlMjAlN0QpLndoZXJlKCdpc29ubGluZSclMkMlMjB0cnVlKSUzQiUwQSUwOSUwOSUwOSUwOU5PU1FMKCdzZXNzaW9ucycpLm1vZGlmeSglN0IlMjBpc29ubGluZSUzQSUyMGZhbHNlJTIwJTdEKS53aGVyZSgnaXNvbmxpbmUnJTJDJTIwdHJ1ZSklM0IlMEElMDklMDklMDklN0QpKCklM0IlMEElMDklMDklMEElMDklMDklMEElMDklMDklMDklMkYlMkYlNDBidWlsZCUyMERlZmluaXRpb24lMjAlMjJIZWxwZXJzJTIyJTBBJTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOShmdW5jdGlvbigpJTIwJTdCJTBBJTA5JTA5JTA5JTA5TUFJTi5saXN0cyUyMCUzRCUyMCU3QiUyMG9wZW4lM0ElMjAxJTJDJTIwcGVuZGluZyUzQSUyMDElMkMlMjBpbnByb2dyZXNzJTNBJTIwMSUyQyUyMGRvbmUlM0ElMjAxJTIwJTdEJTNCJTBBJTA5JTA5JTA5JTdEKSgpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTBBJTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBEZWZpbml0aW9uJTIwJTIyU3RhcnR1cCUyMiUwQSUwOSUwOSUwOSUyRiUyRiU0MGNvZGUlMEElMDklMDklMDkoZnVuY3Rpb24oKSUyMCU3QiUwQSUwOSUwOSUwOSUwOWlmJTIwKFBSRUYuc2V0dGluZ3MpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5Q09ORi5uYW1lJTIwJTNEJTIwUFJFRi5zZXR0aW5ncy5uYW1lJTNCJTBBJTA5JTA5JTA5JTA5JTA5Q09ORi50b3RhbGFwaSUyMCUzRCUyMFBSRUYuc2V0dGluZ3MudG90YWxhcGklM0IlMEElMDklMDklMDklMDklN0QlMEElMDklMDklMDklMDklMEElMDklMDklMDklMDklMkYlMkYlMjBDb3VudHMlMjB1c2VycyUyMGR1ZSUyMHRvJTIwZGVmYXVsdCUyMGNyZWRlbnRpYWxzJTBBJTA5JTA5JTA5JTA5Tk9TUUwoJ3VzZXJzJykuY291bnQoKS5jYWxsYmFjayhmdW5jdGlvbihlcnIlMkMlMjByZXNwb25zZSklMjAlN0IlMEElMDklMDklMDklMDklMDlNQUlOLnVzZXJzY291bnQlMjAlM0QlMjByZXNwb25zZS5jb3VudCUzQiUwQSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMDklN0QpKCklM0IlMEElMDklMDklMEElMDklMDklN0QpKCklM0IlMEElMDklMDklMEElMDklMDklMkYlMkYlMjBSb3V0ZXMlMEElMDklMDkoZnVuY3Rpb24oKSUyMCU3QiUwQSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwUm91dGUlMjAlMjJTT0NLRVQlMjAlMkYlMjIlMEElMDklMDklMDlST1VURSgnJTJCU09DS0VUJTIwJTJGJyUyQyUyMGZ1bmN0aW9uKCklMjAlN0IlMEElMDklMDklMDklMDl2YXIlMjBjb250cm9sbGVyJTIwJTNEJTIwdGhpcyUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGNvZGUlMEElMDklMDklMDklMDlNQUlOLndzJTIwJTNEJTIwY29udHJvbGxlciUzQiUwQSUwOSUwOSUwOSUwOWNvbnRyb2xsZXIuYXV0b2Rlc3Ryb3koKCklMjAlM0QlM0UlMjBNQUlOLndzJTIwJTNEJTIwbnVsbCklM0IlMEElMDklMDklMDklMDklMEElMDklMDklMDklMDljb250cm9sbGVyLm9uKCdvcGVuJyUyQyUyMGZ1bmN0aW9uKGNsaWVudCklMjAlN0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBZb3VyJTIwY29kZSUwQSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMDklMDklMEElMDklMDklMDklMDljb250cm9sbGVyLm9uKCdjbG9zZSclMkMlMjBmdW5jdGlvbihjbGllbnQpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwWW91ciUyMGNvZGUlMEElMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5Y29udHJvbGxlci5vbignbWVzc2FnZSclMkMlMjBmdW5jdGlvbihjbGllbnQlMkMlMjBtZXNzYWdlKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMFlvdXIlMjBjb2RlJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSU3RCUyQyUyMCU1Qidqc29uJyU1RCklM0IlMEElMDklMDklN0QpKCklM0IlMEElMDklMDklMEElMDklMDkoZnVuY3Rpb24oKSUyMCU3QiUwQSUwOSUwOSUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAlMkJjYXJkc19jcmVhdGUlMjAlMjAqQ2FyZHMlMjAtLSUzRSUyMGluc2VydCUyMChyZXNwb25zZSknKSUzQiUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAtY2FyZHNfcXVlcnklMjAlMjAqQ2FyZHMlMjAtLSUzRSUyMHF1ZXJ5JTIwKHJlc3BvbnNlKScpJTNCJTBBJTA5JTA5JTA5Uk9VVEUoJyUyQkFQSSUyMCUyMCUyRmFwaSUyRiUyMCUyMC1jYXJkc19tb3ZlJTJGJTdCaWQlN0QlMjAlMjAqQ2FyZHMlMjAtLSUzRSUyMG1vdmUlMjAocmVzcG9uc2UpJyklM0IlMEElMDklMDklMDlST1VURSgnJTJCQVBJJTIwJTIwJTJGYXBpJTJGJTIwJTIwJTJCY2FyZHNfdXBkYXRlJTJGJTdCaWQlN0QlMjAlMjAqQ2FyZHMlMjAtLSUzRSUyMHVwZGF0ZSUyMChyZXNwb25zZSknKSUzQiUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAtY2FyZHNfcmVtb3ZlJTJGJTdCaWQlN0QlMjAlMjAqQ2FyZHMlMjAtLSUzRSUyMHJlbW92ZSUyMChyZXNwb25zZSknKSUzQiUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAtY2FyZHNfcG9zaXRpb24lMkYlN0JpZCU3RCUyMCUyMCpDYXJkcyUyMC0tJTNFJTIwcG9zaXRpb24lMjAocmVzcG9uc2UpJyklM0IlMEElMDklMDklMDlST1VURSgnJTJCQVBJJTIwJTIwJTJGYXBpJTJGJTIwJTIwLWNhcmRzX3RvZ2dsZSUyRiU3QmlkJTdEJTJGJTdCdGFza2lkJTdEJTIwJTIwKkNhcmRzJTIwLS0lM0UlMjB0b2dnbGUlMjAocmVzcG9uc2UpJyklM0IlMEElMDklMDklMEElMDklMDklMDklMkYlMkYlNDBidWlsZCUyMFNjaGVtYSUyMCUyMkNhcmRzJTIyJTBBJTA5JTA5JTA5TkVXU0NIRU1BKCdDYXJkcyclMkMlMjBmdW5jdGlvbihzY2hlbWEpJTIwJTdCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5c2NoZW1hLmNvbXByZXNzKCklM0IlMEElMDklMDklMEElMDklMDklMDklMDklMkYlMkYlMjBGaWVsZHMlMEElMDklMDklMDklMDlzY2hlbWEuZGVmaW5lKCdwcm9qZWN0aWQnJTJDJTIwJ3VpZCcpJTNCJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgnc29sdmVyaWQnJTJDJTIwJ3VpZCcpJTNCJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgnbmFtZSclMkMlMjAnc3RyaW5nJyUyQyUyMHRydWUpJTNCJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgndGFza3MnJTJDJTIwJyU1QkNhcmRzJTJGVGFzayU1RCcpJTNCJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgndXNlcnMnJTJDJTIwJyU1QnVpZCU1RCcpJTNCJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgnZGVhZGxpbmUnJTJDJTIwJ2RhdGUnKSUzQiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5kZWZpbmUoJ2xhYmVscyclMkMlMjAnJTVCdWlkJTVEJyklM0IlMEElMDklMDklMDklMDlzY2hlbWEuZGVmaW5lKCdlc3RpbWF0ZSclMkMlMjAnbnVtYmVyJyklM0IlMEElMDklMDklMDklMDlzY2hlbWEuZGVmaW5lKCdzb3J0c29sdmVyJyUyQyUyMCdudW1iZXInKSUzQiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5kZWZpbmUoJ3NvcnR1c2VyJyUyQyUyMCdudW1iZXInKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyQ2FyZHMlMjAtLSUzRSUyMHF1ZXJ5JTIyJTBBJTA5JTA5JTA5JTA5c2NoZW1hLnNldFF1ZXJ5KGZ1bmN0aW9uKCUyNCUyQyUyMG1vZGVsKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMGlkJTIwJTNEJTIwJTI0LmlkJTNCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwdXNlciUyMCUzRCUyMCUyNC51c2VyJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMCUyNCUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwaWQlMjAlN0JTdHJpbmclN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBwYXJhbXMlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjB1c2VyJTIwJTdCTnVsbGFiZSUyME9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOU5PU1FMKCdjYXJkcycpLmZpbmQoKS53aGVyZSgnbGlzdCclMkMlMjAnJTNDJTNFJyUyQyUyMCdkb25lJykub3IoZnVuY3Rpb24oYnVpbGRlciklMjAlN0IlMEElMDklMDklMDklMDklMDklMDlidWlsZGVyLndoZXJlKCd1c2VyaWQnJTJDJTIwdXNlci5pZCklM0IlMEElMDklMDklMDklMDklMDklMDlidWlsZGVyLndoZXJlKCdzb2x2ZXJpZCclMkMlMjB1c2VyLmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSU3RCkuY2FsbGJhY2soZnVuY3Rpb24oZXJyJTJDJTIwcmVzcG9uc2UlMkMlMjBtZXRhKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwOU5PU1FMKCdjYXJkcycpLmZpbmQyKCkud2hlcmUoJ2xpc3QnJTJDJTIwJ2RvbmUnKS50YWtlKDE1KS5vcihmdW5jdGlvbihidWlsZGVyKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOWJ1aWxkZXIud2hlcmUoJ3VzZXJpZCclMkMlMjB1c2VyLmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOWJ1aWxkZXIud2hlcmUoJ3NvbHZlcmlkJyUyQyUyMHVzZXIuaWQpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTdEKS5jYWxsYmFjayhmdW5jdGlvbihlcnIlMkMlMjBjb21wbGV0ZSklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMDljb21wbGV0ZS5sZW5ndGglMjAlMjYlMjYlMjByZXNwb25zZS5wdXNoLmFwcGx5KHJlc3BvbnNlJTJDJTIwY29tcGxldGUpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTI0LmNhbGxiYWNrKHJlc3BvbnNlKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyQ2FyZHMlMjAtLSUzRSUyMG1vdmUlMjIlMEElMDklMDklMDklMDlzY2hlbWEuYWRkV29ya2Zsb3coJ21vdmUnJTJDJTIwZnVuY3Rpb24oJTI0JTJDJTIwbW9kZWwpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwcXVlcnklMjAlM0QlMjAlMjQucXVlcnklM0IlMEElMDklMDklMDklMDklMDl2YXIlMjBpZCUyMCUzRCUyMCUyNC5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMHVzZXIlMjAlM0QlMjAlMjQudXNlciUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiU0MGNvZGUlMEElMDklMDklMDklMDklMDklMkYlMkYlMjAlMjQlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBtb2RlbCUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwcGFyYW1zJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwZmlsdGVyJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDlpZiUyMCghTUFJTi5saXN0cyU1QnF1ZXJ5LnRvbGlzdCU1RCUyMCU3QyU3QyUyMCFNQUlOLmxpc3RzJTVCcXVlcnkuZnJvbWxpc3QlNUQpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTI0LmludmFsaWQoNDAwKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOXJldHVybiUzQiUwQSUwOSUwOSUwOSUwOSUwOSU3RCUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOU5PU1FMKCdjYXJkcycpLm9uZSgpLndoZXJlKCdsaXN0JyUyQyUyMHF1ZXJ5LmZyb21saXN0KS5pZChpZCkub3IoZnVuY3Rpb24oYnVpbGRlciklMjAlN0IlMEElMDklMDklMDklMDklMDklMDlidWlsZGVyLndoZXJlKCd1c2VyaWQnJTJDJTIwdXNlci5pZCklM0IlMEElMDklMDklMDklMDklMDklMDlidWlsZGVyLndoZXJlKCdzb2x2ZXJpZCclMkMlMjB1c2VyLmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSU3RCkuZXJyb3IoNDA0KS5kb25lKCUyNCUyQyUyMGZ1bmN0aW9uKHJlc3BvbnNlKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOXZhciUyMGRhdGElMjAlM0QlMjAlN0IlN0QlM0IlMEElMDklMDklMDklMDklMDklMDl2YXIlMjBpbmRleCUyMCUzRCUyMCUyQihxdWVyeS5pbmRleCUyMCU3QyU3QyUyMCcwJyklM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDlkYXRhLmxpc3QlMjAlM0QlMjBxdWVyeS50b2xpc3QlM0IlMEElMDklMDklMDklMDklMDklMDlkYXRhLmR0bW92ZWQlMjAlM0QlMjBOT1clM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDlpZiUyMChyZXNwb25zZS51c2VyaWQlMjAlM0QlM0QlM0QlMjB1c2VyLmlkKSUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOWRhdGEuc29ydHVzZXIlMjAlM0QlMjBpbmRleCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWVsc2UlMEElMDklMDklMDklMDklMDklMDklMDlkYXRhLnNvcnRzb2x2ZXIlMjAlM0QlMjBpbmRleCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOWlmJTIwKHF1ZXJ5LmZyb21saXN0JTIwJTNEJTNEJTNEJTIwJ2lucHJvZ3Jlc3MnJTIwJTI2JTI2JTIwcmVzcG9uc2UuZHRtb3ZlZCklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMDl2YXIlMjBkaWZmJTIwJTNEJTIwTWF0aC5jZWlsKChOT1clMjAtJTIwcmVzcG9uc2UuZHRtb3ZlZCklMjAlMkYlMjAxMDAwJTIwJTJGJTIwNjApJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5aWYlMjAoZGlmZiUyMCUzRSUyMDApJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5dmFyJTIwbG9nJTIwJTNEJTIwJTdCJTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5bG9nLmlkJTIwJTNEJTIwcmVzcG9uc2UuaWQlM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlsb2cubmFtZSUyMCUzRCUyMHJlc3BvbnNlLm5hbWUlM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlsb2cucHJvamVjdGlkJTIwJTNEJTIwcmVzcG9uc2UucHJvamVjdGlkJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5bG9nLnVzZXJpZCUyMCUzRCUyMHVzZXIuaWQlM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlsb2cudXNlcm5hbWUlMjAlM0QlMjB1c2VyLm5hbWUlM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlsb2cubWludXRlcyUyMCUzRCUyMGRpZmYlM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlsb2cud2VlayUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3cnKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUwOWxvZy53ZWVrbHklMjAlM0QlMjAlMkJOT1cuZm9ybWF0KCd5eXl5d3cnKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUwOWxvZy5kYWlseSUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3l5eXlNTWRkJyklM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlsb2cubW9udGhseSUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3l5eXlNTScpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5bG9nLnllYXJseSUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3l5eXknKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUwOWxvZy5kdGNyZWF0ZWQlMjAlM0QlMjBOT1clM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlkYXRhLm1pbnV0ZXMlMjAlM0QlMjByZXNwb25zZS5taW51dGVzJTIwJTJCJTIwZGlmZiUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUwOU5PU1FMKCdsb2d3b3JrJykuaW5zZXJ0KGxvZyklM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlNQUlOLndzJTIwJTI2JTI2JTIwTUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAnY2FyZHMlMkZsb2d3b3JrJyUyQyUyMGJvZHklM0ElMjAlN0IlMjBpZCUzQSUyMGlkJTJDJTIwbWludXRlcyUzQSUyMGRhdGEubWludXRlcyUyMCU3RCU3RCUyQyUyMGNsaWVudCUyMCUzRCUzRSUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTNEJTIwcmVzcG9uc2UudXNlcmlkJTIwJTdDJTdDJTIwY2xpZW50LnVzZXIuaWQlMjAlM0QlM0QlM0QlMjByZXNwb25zZS5zb2x2ZXJpZCklM0IlMEElMDklMDklMDklMDklMDklMDklMDklN0QlMEElMDklMDklMDklMDklMDklMDklN0QlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDlOT1NRTCgnY2FyZHMnKS5tb2RpZnkoZGF0YSkud2hlcmUoJ2xpc3QnJTJDJTIwcXVlcnkuZnJvbWxpc3QpLmlkKGlkKS5vcihmdW5jdGlvbihidWlsZGVyKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOWJ1aWxkZXIud2hlcmUoJ3VzZXJpZCclMkMlMjB1c2VyLmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOWJ1aWxkZXIud2hlcmUoJ3NvbHZlcmlkJyUyQyUyMHVzZXIuaWQpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTdEKS5kb25lKCUyNCUyQyUyMGZ1bmN0aW9uKCklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMDlNQUlOLndzJTIwJTI2JTI2JTIwTUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAnbW92ZSclMkMlMjBib2R5JTNBJTIwJTdCJTIwaWQlM0ElMjBpZCUyQyUyMGZyb21saXN0JTNBJTIwcXVlcnkuZnJvbWxpc3QlMkMlMjB0b2xpc3QlM0ElMjBxdWVyeS50b2xpc3QlMkMlMjBtaW51dGVzJTNBJTIwZGF0YS5taW51dGVzJTJDJTIwdXNlcmlkJTNBJTIwdXNlci5pZCUyMCU3RCU3RCUyQyUyMGNsaWVudCUyMCUzRCUzRSUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTNEJTIwcmVzcG9uc2UudXNlcmlkJTIwJTdDJTdDJTIwY2xpZW50LnVzZXIuaWQlMjAlM0QlM0QlM0QlMjByZXNwb25zZS5zb2x2ZXJpZCklM0IlMEElMDklMDklMDklMDklMDklMDklMDklMjQuc3VjY2VzcyhpZCklM0IlMEElMDklMDklMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMEElMDklMDklMDklMDklMkYlMkYlNDBidWlsZCUyMFNjaGVtYSUyMCUyMkNhcmRzJTIwLS0lM0UlMjBpbnNlcnQlMjIlMEElMDklMDklMDklMDlzY2hlbWEuc2V0SW5zZXJ0KGZ1bmN0aW9uKCUyNCUyQyUyMG1vZGVsKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMGlkJTIwJTNEJTIwJTI0LmlkJTNCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwdXNlciUyMCUzRCUyMCUyNC51c2VyJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMCUyNCUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwaWQlMjAlN0JTdHJpbmclN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBwYXJhbXMlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjB1c2VyJTIwJTdCTnVsbGFiZSUyME9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOW1vZGVsLmlkJTIwJTNEJTIwVUlEKCklM0IlMEElMDklMDklMDklMDklMDltb2RlbC51c2VyaWQlMjAlM0QlMjB1c2VyLmlkJTNCJTBBJTA5JTA5JTA5JTA5JTA5bW9kZWwuaGlzdG9yeSUyMCUzRCUyMCU1QiU1RCUzQiUwQSUwOSUwOSUwOSUwOSUwOW1vZGVsLmxpc3QlMjAlM0QlMjAnb3BlbiclM0IlMEElMDklMDklMDklMDklMDltb2RlbC5kdHVwZGF0ZWQlMjAlM0QlMjBtb2RlbC5kdGNyZWF0ZWQlMjAlM0QlMjBuZXclMjBEYXRlKCklM0IlMEElMDklMDklMDklMDklMDltb2RlbC5taW51dGVzJTIwJTNEJTIwMCUzQiUwQSUwOSUwOSUwOSUwOSUwOW1vZGVsLnNvcnRzb2x2ZXIlMjAlM0QlMjBtb2RlbC5zb3J0dXNlciUyMCUzRCUyMG1vZGVsLmR0Y3JlYXRlZC5nZXRUaW1lKCklM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDlOT1NRTCgnY2FyZHMnKS5pbnNlcnQobW9kZWwpLmNhbGxiYWNrKCUyNC5kb25lKG1vZGVsLmlkKSklM0IlMEElMDklMDklMDklMDklMDlNQUlOLndzJTIwJTI2JTI2JTIwTUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAnY2FyZHMlMkZjcmVhdGUnJTJDJTIwYm9keSUzQSUyMG1vZGVsJTIwJTdEJTJDJTIwY2xpZW50JTIwJTNEJTNFJTIwY2xpZW50LnVzZXIuaWQlMjAlM0QlM0QlMjB1c2VyLmlkJTIwJTdDJTdDJTIwY2xpZW50LnVzZXIuaWQlMjAlM0QlM0QlM0QlMjBtb2RlbC5zb2x2ZXJpZCklM0IlMEElMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBTY2hlbWElMjAlMjJDYXJkcyUyMC0tJTNFJTIwdXBkYXRlJTIyJTBBJTA5JTA5JTA5JTA5c2NoZW1hLnNldFVwZGF0ZShmdW5jdGlvbiglMjQlMkMlMjBtb2RlbCklMjAlN0IlMEElMDklMDklMDklMDklMDl2YXIlMjBpZCUyMCUzRCUyMCUyNC5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMHVzZXIlMjAlM0QlMjAlMjQudXNlciUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiU0MGNvZGUlMEElMDklMDklMDklMDklMDklMkYlMkYlMjAlMjQlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBtb2RlbCUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwcGFyYW1zJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwZmlsdGVyJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDltb2RlbC5kdHVwZGF0ZWQlMjAlM0QlMjBuZXclMjBEYXRlKCklM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDlOT1NRTCgnY2FyZHMnKS5vbmUoKS5pZChpZCkud2hlcmUoJ3VzZXJpZCclMkMlMjB1c2VyLmlkKS5lcnJvcig0MDQpLmRvbmUoJTI0JTJDJTIwZnVuY3Rpb24ocmVzcG9uc2UpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5JTA5dmFyJTIwc29sdmVyaWQlMjAlM0QlMjByZXNwb25zZS5zb2x2ZXJpZCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOU5PU1FMKCdjYXJkcycpLm1vZGlmeShtb2RlbCkuaWQoaWQpLmNhbGxiYWNrKGZ1bmN0aW9uKGVyciUyQyUyMGNvdW50KSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOW1vZGVsLmlkJTIwJTNEJTIwaWQlM0IlMEElMDklMDklMDklMDklMDklMDklMDltb2RlbC5kdGNyZWF0ZWQlMjAlM0QlMjByZXNwb25zZS5kdGNyZWF0ZWQlM0IlMEElMDklMDklMDklMDklMDklMDklMDltb2RlbC5saXN0JTIwJTNEJTIwcmVzcG9uc2UubGlzdCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOW1vZGVsLnVzZXJpZCUyMCUzRCUyMHJlc3BvbnNlLnVzZXJpZCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUyNC5zdWNjZXNzKG1vZGVsLmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOWlmJTIwKGNvdW50JTIwJTI2JTI2JTIwTUFJTi53cyklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlNQUlOLndzLnNlbmQoJTdCJTIwVFlQRSUzQSUyMCdjYXJkcyUyRnVwZGF0ZSclMkMlMjBib2R5JTNBJTIwbW9kZWwlMjAlN0QlMkMlMjBjbGllbnQlMjAlM0QlM0UlMjBjbGllbnQudXNlci5pZCUyMCUzRCUzRCUyMHVzZXIuaWQlMjAlN0MlN0MlMjBjbGllbnQudXNlci5pZCUyMCUzRCUzRCUzRCUyMG1vZGVsLnNvbHZlcmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUwOWlmJTIwKHNvbHZlcmlkJTIwJTI2JTI2JTIwbW9kZWwuc29sdmVyaWQlMjAhJTNEJTNEJTIwc29sdmVyaWQlMjAlMjYlMjYlMjBzb2x2ZXJpZCUyMCElM0QlM0QlMjB1c2VyLmlkKSUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUwOU1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ2NhcmRzJTJGcmVtb3ZlJyUyQyUyMGlkJTNBJTIwbW9kZWwuaWQlMjAlN0QlMkMlMjBjbGllbnQlMjAlM0QlM0UlMjBjbGllbnQudXNlci5pZCUyMCUzRCUzRCUzRCUyMHNvbHZlcmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSU3RCUwQSUwOSUwOSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyQ2FyZHMlMjAtLSUzRSUyMHJlbW92ZSUyMiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5zZXRSZW1vdmUoZnVuY3Rpb24oJTI0JTJDJTIwbW9kZWwpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwaWQlMjAlM0QlMjAlMjQuaWQlM0IlMEElMDklMDklMDklMDklMDl2YXIlMjB1c2VyJTIwJTNEJTIwJTI0LnVzZXIlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlNDBjb2RlJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwJTI0JTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwbW9kZWwlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBpZCUyMCU3QlN0cmluZyU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMHBhcmFtcyUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMGZpbHRlciUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMHF1ZXJ5JTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDlOT1NRTCgnY2FyZHMnKS5yZW1vdmUoKS5pZChpZCkud2hlcmUoJ3VzZXJpZCclMkMlMjB1c2VyLmlkKS5jYWxsYmFjayhmdW5jdGlvbihlcnIlMkMlMjBjb3VudCklMjAlN0IlMEElMDklMDklMDklMDklMDklMDlpZiUyMChjb3VudCklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMDlOT1NRTCgnbG9nd29yaycpLnJlbW92ZSgpLmlkKGlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOWNvdW50JTIwJTI2JTI2JTIwTUFJTi53cyUyMCUyNiUyNiUyME1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ2NhcmRzJTJGcmVtb3ZlJyUyQyUyMGlkJTNBJTIwaWQlMjAlN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTdEJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTI0LnN1Y2Nlc3MoaWQpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMEElMDklMDklMDklMDklMkYlMkYlNDBidWlsZCUyMFNjaGVtYSUyMCUyMkNhcmRzJTIwLS0lM0UlMjBwb3NpdGlvbiUyMiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5hZGRXb3JrZmxvdygncG9zaXRpb24nJTJDJTIwZnVuY3Rpb24oJTI0JTJDJTIwbW9kZWwpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwcXVlcnklMjAlM0QlMjAlMjQucXVlcnklM0IlMEElMDklMDklMDklMDklMDl2YXIlMjBpZCUyMCUzRCUyMCUyNC5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMHVzZXIlMjAlM0QlMjAlMjQudXNlciUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiU0MGNvZGUlMEElMDklMDklMDklMDklMDlOT1NRTCgnY2FyZHMnKS5vbmUoKS5pZChpZCkub3IoZnVuY3Rpb24oYnVpbGRlciklMjAlN0IlMEElMDklMDklMDklMDklMDklMDlidWlsZGVyLndoZXJlKCd1c2VyaWQnJTJDJTIwdXNlci5pZCklM0IlMEElMDklMDklMDklMDklMDklMDlidWlsZGVyLndoZXJlKCdzb2x2ZXJpZCclMkMlMjB1c2VyLmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSU3RCkuZXJyb3IoNDA0KS5kb25lKCUyNCUyQyUyMGZ1bmN0aW9uKHJlc3BvbnNlKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOXZhciUyMGRhdGElMjAlM0QlMjAlN0IlN0QlM0IlMEElMDklMDklMDklMDklMDklMDl2YXIlMjBpbmRleCUyMCUzRCUyMCUyQihxdWVyeS5pbmRleCUyMCU3QyU3QyUyMCcwJyklM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDlpZiUyMChyZXNwb25zZS51c2VyaWQlMjAlM0QlM0QlM0QlMjB1c2VyLmlkKSUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOWRhdGEuc29ydHVzZXIlMjAlM0QlMjBpbmRleCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWVsc2UlMEElMDklMDklMDklMDklMDklMDklMDlkYXRhLnNvcnRzb2x2ZXIlMjAlM0QlMjBpbmRleCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOU5PU1FMKCdjYXJkcycpLm1vZGlmeShkYXRhKS5pZChpZCkub3IoZnVuY3Rpb24oYnVpbGRlciklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMDlidWlsZGVyLndoZXJlKCd1c2VyaWQnJTJDJTIwdXNlci5pZCklM0IlMEElMDklMDklMDklMDklMDklMDklMDlidWlsZGVyLndoZXJlKCdzb2x2ZXJpZCclMkMlMjB1c2VyLmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSU3RCkuY2FsbGJhY2soJTI0LmRvbmUoKSklM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyQ2FyZHMlMjAtLSUzRSUyMHRvZ2dsZSUyMiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5hZGRXb3JrZmxvdygndG9nZ2xlJyUyQyUyMGZ1bmN0aW9uKCUyNCUyQyUyMG1vZGVsKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMHBhcmFtcyUyMCUzRCUyMCUyNC5wYXJhbXMlM0IlMEElMDklMDklMDklMDklMDl2YXIlMjBpZCUyMCUzRCUyMCUyNC5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMHVzZXIlMjAlM0QlMjAlMjQudXNlciUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiU0MGNvZGUlMEElMDklMDklMDklMDklMDklMkYlMkYlMjAlMjQlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBtb2RlbCUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwcGFyYW1zJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwZmlsdGVyJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwcXVlcnklMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjB1c2VyJTIwJTdCTnVsbGFiZSUyME9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOU5PU1FMKCdjYXJkcycpLm9uZSgpLmlkKGlkKS5vcihmdW5jdGlvbihidWlsZGVyKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwOWJ1aWxkZXIud2hlcmUoJ3VzZXJpZCclMkMlMjB1c2VyLmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWJ1aWxkZXIud2hlcmUoJ3NvbHZlcmlkJyUyQyUyMHVzZXIuaWQpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTdEKS5lcnJvcig0MDQpLmRvbmUoJTI0JTJDJTIwZnVuY3Rpb24ocmVzcG9uc2UpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTA5dmFyJTIwdGFzayUyMCUzRCUyMHJlc3BvbnNlLnRhc2tzLmZpbmRJdGVtKCdpZCclMkMlMjBwYXJhbXMudGFza2lkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWlmJTIwKHRhc2spJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5dGFzay5pc2RvbmUlMjAlM0QlMjAhdGFzay5pc2RvbmUlM0IlMEElMDklMDklMDklMDklMDklMDklMDlOT1NRTCgnY2FyZHMnKS5tb2RpZnkoJTdCJTIwdGFza3MlM0ElMjByZXNwb25zZS50YXNrcyUyMCU3RCkuaWQoaWQpLmNhbGxiYWNrKCUyNC5kb25lKHRhc2suaXNkb25lJTIwJTNGJTIwMSUyMCUzQSUyMDApKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOU1BSU4ud3MlMjAlMjYlMjYlMjBNQUlOLndzLnNlbmQoJTdCJTIwVFlQRSUzQSUyMCdjYXJkcyUyRnRvZ2dsZSclMkMlMjBib2R5JTNBJTIwJTdCJTIwaWQlM0ElMjBpZCUyQyUyMHRhc2tpZCUzQSUyMHBhcmFtcy50YXNraWQlMkMlMjBpc2RvbmUlM0ElMjB0YXNrLmlzZG9uZSUyQyUyMHVzZXJpZCUzQSUyMHVzZXIuaWQlMjAlN0QlN0QlMkMlMjBjbGllbnQlMjAlM0QlM0UlMjBjbGllbnQudXNlci5pZCUyMCUzRCUzRCUzRCUyMHJlc3BvbnNlLnVzZXJpZCUyMCU3QyU3QyUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTNEJTIwcmVzcG9uc2Uuc29sdmVyaWQpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTdEJTIwZWxzZSUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUyNC5pbnZhbGlkKDQwNCklM0IlMEElMDklMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMEElMDklMDklN0QpKCklM0IlMEElMDklMDklMEElMDklMDklMEElMDklMDkoZnVuY3Rpb24oKSUyMCU3QiUwQSUwOSUwOSUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAlMkJ1c2Vyc19pbnNlcnQlMjAlMjAqVXNlcnMlMjAtLSUzRSUyMGluc2VydCUyMChyZXNwb25zZSknKSUzQiUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAtdXNlcnNfcXVlcnklMjAlMjAqVXNlcnMlMjAtLSUzRSUyMHF1ZXJ5JTIwKHJlc3BvbnNlKScpJTNCJTBBJTA5JTA5JTA5Uk9VVEUoJyUyQkFQSSUyMCUyMCUyRmFwaSUyRiUyMCUyMC11c2Vyc19yZW1vdmUlMjAlMjAqVXNlcnMlMjAtLSUzRSUyMHJlbW92ZSUyMChyZXNwb25zZSknKSUzQiUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAlMkJ1c2Vyc191cGRhdGUlMkYlN0JpZCU3RCUyMCUyMCpVc2VycyUyMC0tJTNFJTIwdXBkYXRlJTIwKHJlc3BvbnNlKScpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBTY2hlbWElMjAlMjJVc2VycyUyMiUwQSUwOSUwOSUwOU5FV1NDSEVNQSgnVXNlcnMnJTJDJTIwZnVuY3Rpb24oc2NoZW1hKSUyMCU3QiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOXNjaGVtYS5jb21wcmVzcygpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTIwRmllbGRzJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgnbmFtZSclMkMlMjAnc3RyaW5nJyUyQyUyMHRydWUpJTNCJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgnZW1haWwnJTJDJTIwJ2VtYWlsJyUyQyUyMHRydWUpJTNCJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgnc2EnJTJDJTIwJ2Jvb2xlYW4nKSUzQiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5kZWZpbmUoJ2lzZGlzYWJsZWQnJTJDJTIwJ2Jvb2xlYW4nKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyVXNlcnMlMjAtLSUzRSUyMHF1ZXJ5JTIyJTBBJTA5JTA5JTA5JTA5c2NoZW1hLnNldFF1ZXJ5KGZ1bmN0aW9uKCUyNCUyQyUyMG1vZGVsKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMGlkJTIwJTNEJTIwJTI0LmlkJTNCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwdXNlciUyMCUzRCUyMCUyNC51c2VyJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOSUwOSUwOU5PU1FMKCd1c2VycycpLmZpbmQoKS5maWVsZHMoJ2lkJTJDbmFtZSUyQ2VtYWlsJTJDc2ElMkNpc2Rpc2FibGVkJykuY2FsbGJhY2soJTI0LmNhbGxiYWNrKSUzQiUwQSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMEElMDklMDklMDklMDklMkYlMkYlNDBidWlsZCUyMFNjaGVtYSUyMCUyMlVzZXJzJTIwLS0lM0UlMjBpbnNlcnQlMjIlMEElMDklMDklMDklMDlzY2hlbWEuc2V0SW5zZXJ0KGZ1bmN0aW9uKCUyNCUyQyUyMG1vZGVsKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMGlkJTIwJTNEJTIwJTI0LmlkJTNCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwdXNlciUyMCUzRCUyMCUyNC51c2VyJTNCJTBBJTA5JTA5JTA5JTA5JTA5aWYlMjAoVU5BVVRIT1JJWkVEKCUyNCUyQyUyMCdzYScpKSUwQSUwOSUwOSUwOSUwOSUwOSUwOXJldHVybiUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiU0MGNvZGUlMEElMDklMDklMDklMDklMDklMkYlMkYlMjAlMjQlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBtb2RlbCUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMGlkJTIwJTdCU3RyaW5nJTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwcGFyYW1zJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwZmlsdGVyJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwcXVlcnklMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjB1c2VyJTIwJTdCTnVsbGFiZSUyME9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOW1vZGVsLmlkJTIwJTNEJTIwVUlEKCklM0IlMEElMDklMDklMDklMDklMDltb2RlbC5kdGNyZWF0ZWQlMjAlM0QlMjBOT1clM0IlMEElMDklMDklMDklMDklMDltb2RlbC5kdHVwZGF0ZWQlMjAlM0QlMjBOT1clM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMkYlMkYlMjBTZW5kJTIwZW1haWwlMEElMDklMDklMDklMDklMDlOT1NRTCgndXNlcnMnKS5pbnNlcnQobW9kZWwpLmNhbGxiYWNrKCUyNC5kb25lKG1vZGVsLmlkKSklM0IlMEElMDklMDklMDklMDklMDlNQUlOLnVzZXJzY291bnQlMkIlMkIlM0IlMEElMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBTY2hlbWElMjAlMjJVc2VycyUyMC0tJTNFJTIwcmVtb3ZlJTIyJTBBJTA5JTA5JTA5JTA5c2NoZW1hLnNldFJlbW92ZShmdW5jdGlvbiglMjQlMkMlMjBtb2RlbCklMjAlN0IlMEElMDklMDklMDklMDklMDl2YXIlMjBpZCUyMCUzRCUyMCUyNC5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMHVzZXIlMjAlM0QlMjAlMjQudXNlciUzQiUwQSUwOSUwOSUwOSUwOSUwOWlmJTIwKFVOQVVUSE9SSVpFRCglMjQlMkMlMjAnc2EnKSklMEElMDklMDklMDklMDklMDklMDlyZXR1cm4lM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlNDBjb2RlJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwJTI0JTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwbW9kZWwlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBpZCUyMCU3QlN0cmluZyU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMHBhcmFtcyUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMGZpbHRlciUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMHF1ZXJ5JTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDlOT1NRTCgndXNlcnMnKS5yZW1vdmUoKS5pZChpZCkuY2FsbGJhY2soJTI0LmRvbmUoaWQpKSUzQiUwQSUwOSUwOSUwOSUwOSUwOU1BSU4udXNlcnNjb3VudC0tJTNCJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyVXNlcnMlMjAtLSUzRSUyMHVwZGF0ZSUyMiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5zZXRVcGRhdGUoZnVuY3Rpb24oJTI0JTJDJTIwbW9kZWwpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwaWQlMjAlM0QlMjAlMjQuaWQlM0IlMEElMDklMDklMDklMDklMDl2YXIlMjB1c2VyJTIwJTNEJTIwJTI0LnVzZXIlM0IlMEElMDklMDklMDklMDklMDlpZiUyMChVTkFVVEhPUklaRUQoJTI0JTJDJTIwJ3NhJykpJTBBJTA5JTA5JTA5JTA5JTA5JTA5cmV0dXJuJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMCUyNCUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwaWQlMjAlN0JTdHJpbmclN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBwYXJhbXMlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBxdWVyeSUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMHVzZXIlMjAlN0JOdWxsYWJlJTIwT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5bW9kZWwuZHR1cGRhdGVkJTIwJTNEJTIwTk9XJTNCJTBBJTA5JTA5JTA5JTA5JTA5Tk9TUUwoJ3VzZXJzJykubW9kaWZ5KG1vZGVsKS5pZChpZCkuZXJyb3IoNDA0KS5kb25lKCUyNCUyQyUyMGZ1bmN0aW9uKHJlc3BvbnNlKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUyNC5zdWNjZXNzKGlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOU1BSU4ud3MlMjAlMjYlMjYlMjBNQUlOLndzLnNlbmQoJTdCJTIwVFlQRSUzQSUyMCd1c2VycyclMjAlN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMEElMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTdEKSgpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTBBJTA5JTA5KGZ1bmN0aW9uKCklMjAlN0IlMEElMDklMDklMEElMDklMDklMDlST1VURSgnLUFQSSUyMCUyMCUyRmFwaSUyRiUyMCUyMCUyQmxvZ2luJTIwJTIwKlVzZXJzJTJGTG9naW4lMjAtLSUzRSUyMGV4ZWMlMjAocmVzcG9uc2UpJyklM0IlMEElMDklMDklMDlST1VURSgnJTJCQVBJJTIwJTIwJTJGYXBpJTJGJTIwJTIwLWxvZ291dCUyMCUyMCpVc2VycyUyRkxvZ2luJTIwLS0lM0UlMjBsb2dvdXQlMjAocmVzcG9uc2UpJyklM0IlMEElMDklMDklMEElMDklMDklMDklMkYlMkYlNDBidWlsZCUyMFNjaGVtYSUyMCUyMlVzZXJzJTJGTG9naW4lMjIlMEElMDklMDklMDlORVdTQ0hFTUEoJ1VzZXJzJTJGTG9naW4nJTJDJTIwZnVuY3Rpb24oc2NoZW1hKSUyMCU3QiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOXNjaGVtYS5jb21wcmVzcygpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTIwRmllbGRzJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgnZW1haWwnJTJDJTIwJ3N0cmluZyclMkMlMjB0cnVlKSUzQiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5kZWZpbmUoJ2NvZGUnJTJDJTIwJ3N0cmluZyg2KScpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBTY2hlbWElMjAlMjJVc2VycyUyRkxvZ2luJTIwLS0lM0UlMjBleGVjJTIyJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmFkZFdvcmtmbG93KCdleGVjJyUyQyUyMGZ1bmN0aW9uKCUyNCUyQyUyMG1vZGVsKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMGlkJTIwJTNEJTIwJTI0LmlkJTNCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwdXNlciUyMCUzRCUyMCUyNC51c2VyJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMCUyNCUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwaWQlMjAlN0JTdHJpbmclN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBwYXJhbXMlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBxdWVyeSUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMHVzZXIlMjAlN0JOdWxsYWJlJTIwT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwQ3JlYXRlcyUyMGElMjBkZWZhdWx0JTIwYWNjb3VudCUwQSUwOSUwOSUwOSUwOSUwOWlmJTIwKCFNQUlOLnVzZXJzY291bnQpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5JTA5dXNlciUyMCUzRCUyMCU3QiU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOXVzZXIuaWQlMjAlM0QlMjBVSUQoKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOXVzZXIubmFtZSUyMCUzRCUyMCdZb3VyJTIwTmFtZSclM0IlMEElMDklMDklMDklMDklMDklMDl1c2VyLmVtYWlsJTIwJTNEJTIwbW9kZWwuZW1haWwlM0IlMEElMDklMDklMDklMDklMDklMDl1c2VyLnNhJTIwJTNEJTIwdHJ1ZSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOXVzZXIuaXNkaXNhYmxlZCUyMCUzRCUyMGZhbHNlJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5dXNlci5kdGNyZWF0ZWQlMjAlM0QlMjBOT1clM0IlMEElMDklMDklMDklMDklMDklMDl1c2VyLmR0dXBkYXRlZCUyMCUzRCUyME5PVyUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOU5PU1FMKCd1c2VycycpLmluc2VydCh1c2VyKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOU1BSU4udXNlcnNjb3VudCUyQiUyQiUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOXZhciUyMGRhdGElMjAlM0QlMjAlN0IlN0QlM0IlMEElMDklMDklMDklMDklMDklMDlkYXRhLmlkJTIwJTNEJTIwVUlEKCklM0IlMEElMDklMDklMDklMDklMDklMDlkYXRhLnVhJTIwJTNEJTIwJTI0LnVhJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5ZGF0YS5pcCUyMCUzRCUyMCUyNC5pcCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWRhdGEudXNlcmlkJTIwJTNEJTIwdXNlci5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWRhdGEuZHRjcmVhdGVkJTIwJTNEJTIwTk9XJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5TUFJTi5zZXNzaW9uLmF1dGhjb29raWUoJTI0JTJDJTIwZGF0YS5pZCUyQyUyMGRhdGEudXNlcmlkJTJDJTIwJzElMjBtb250aCcpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5Tk9TUUwoJ3Nlc3Npb25zJykuaW5zZXJ0KGRhdGEpLmNhbGxiYWNrKCUyNC5kb25lKCkpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5cmV0dXJuJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTdEJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5Tk9TUUwoJ3VzZXJzJykub25lKCkud2hlcmUoJ2VtYWlsJyUyQyUyMG1vZGVsLmVtYWlsKS5maWVsZHMoJ2lkJTJDaXNkaXNhYmxlZCUyQ2R0bG9nZ2VkJykuZXJyb3IoNDA0KS5kb25lKCUyNCUyQyUyMGZ1bmN0aW9uKHJlc3BvbnNlKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOWlmJTIwKHJlc3BvbnNlLmlzZGlzYWJsZWQpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTI0LmludmFsaWQoJ2Rpc2FibGVkJyklM0IlMEElMDklMDklMDklMDklMDklMDklMDlyZXR1cm4lM0IlMEElMDklMDklMDklMDklMDklMDklN0QlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDklMkYlMkYlMjBOZXclMjBhY2NvdW50cyUyMGNhbiUyMHNpZ24lMjB3aXRob3V0JTIwYXV0aG9yaXphdGlvbiUwQSUwOSUwOSUwOSUwOSUwOSUwOWlmJTIwKG1vZGVsLmNvZGUlMjAlN0MlN0MlMjAhcmVzcG9uc2UuZHRsb2dnZWQpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5aWYlMjAoIXJlc3BvbnNlLmR0bG9nZ2VkJTIwJTdDJTdDJTIwbW9kZWwuY29kZSUyMCUzRCUzRCUzRCUyMFRFTVAlNUJtb2RlbC5lbWFpbCU1RCklMjAlN0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDklMDklMDl2YXIlMjBkYXRhJTIwJTNEJTIwJTdCJTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5ZGF0YS5pZCUyMCUzRCUyMFVJRCgpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5ZGF0YS51YSUyMCUzRCUyMCUyNC51YSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOSUwOWRhdGEuaXAlMjAlM0QlMjAlMjQuaXAlM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlkYXRhLnVzZXJpZCUyMCUzRCUyMHJlc3BvbnNlLmlkJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5ZGF0YS5kdGNyZWF0ZWQlMjAlM0QlMjBOT1clM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlNQUlOLnNlc3Npb24uYXV0aGNvb2tpZSglMjQlMkMlMjBkYXRhLmlkJTJDJTIwZGF0YS51c2VyaWQlMkMlMjAnMSUyMG1vbnRoJyklM0IlMEElMDklMDklMDklMDklMDklMDklMDklMDlOT1NRTCgnc2Vzc2lvbnMnKS5pbnNlcnQoZGF0YSkuY2FsbGJhY2soJTI0LmRvbmUoKSklM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDklMDklN0QlMjBlbHNlJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5JTA5JTI0LmludmFsaWQoJ2NvZGUnKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOSU3RCUyMGVsc2UlMjAlN0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDklMDlURU1QJTVCbW9kZWwuZW1haWwlNUQlMjAlM0QlMjBVLnJhbmRvbV9udW1iZXIoNCklM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDklMDklMkYlMkYlMjBzZW5kJTIwY29kZSUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOXZhciUyMGRhdGElMjAlM0QlMjAlN0IlN0QlM0IlMEElMDklMDklMDklMDklMDklMDklMDlkYXRhLnN1YmplY3QlMjAlM0QlMjAnVmVyaWZpY2F0aW9uJTIwY29kZSclM0IlMEElMDklMDklMDklMDklMDklMDklMDlkYXRhLnRvJTIwJTNEJTIwJTVCbW9kZWwuZW1haWwlNUQlM0IlMEElMDklMDklMDklMDklMDklMDklMDlkYXRhLmJvZHklMjAlM0QlMjAnWW91ciUyMHZlcmlmaWNhdGlvbiUyMGNvZGUlMjBpcyUzQSUyMCclMjAlMkIlMjBURU1QJTVCbW9kZWwuZW1haWwlNUQlM0IlMEElMDklMDklMDklMDklMDklMDklMDlkYXRhLmZyb20lMjAlM0QlMjBDT05GLm5hbWUlM0IlMEElMDklMDklMDklMDklMDklMDklMDlUb3RhbEFQSSgnbWFpbCclMkMlMjBkYXRhJTJDJTIwJTI0LmRvbmUoJ2NvZGUnKSklM0IlMEElMDklMDklMDklMDklMDklMDklN0QlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyVXNlcnMlMkZMb2dpbiUyMC0tJTNFJTIwbG9nb3V0JTIyJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmFkZFdvcmtmbG93KCdsb2dvdXQnJTJDJTIwZnVuY3Rpb24oJTI0JTJDJTIwbW9kZWwpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOSUwOSUwOU1BSU4uc2Vzc2lvbi5sb2dvdXQoJTI0KSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyNC5zdWNjZXNzKCklM0IlMEElMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSU3RCkoKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwQSUwOSUwOShmdW5jdGlvbigpJTIwJTdCJTBBJTA5JTA5JTBBJTA5JTA5JTA5Uk9VVEUoJyUyQkFQSSUyMCUyMCUyRmFwaSUyRiUyMCUyMC1sYWJlbHNfcXVlcnklMjAlMjAqTGFiZWxzJTIwLS0lM0UlMjBxdWVyeSUyMChyZXNwb25zZSknKSUzQiUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAlMkJsYWJlbHNfaW5zZXJ0JTIwJTIwKkxhYmVscyUyMC0tJTNFJTIwaW5zZXJ0JTIwKHJlc3BvbnNlKScpJTNCJTBBJTA5JTA5JTA5Uk9VVEUoJyUyQkFQSSUyMCUyMCUyRmFwaSUyRiUyMCUyMCUyM2xhYmVsc191cGRhdGUlMkYlN0JpZCU3RCUyMCUyMCpMYWJlbHMlMjAtLSUzRSUyMHBhdGNoJTIwKHJlc3BvbnNlKScpJTNCJTBBJTA5JTA5JTA5Uk9VVEUoJyUyQkFQSSUyMCUyMCUyRmFwaSUyRiUyMCUyMC1sYWJlbHNfcmVtb3ZlJTJGJTdCaWQlN0QlMjAlMjAqTGFiZWxzJTIwLS0lM0UlMjByZW1vdmUlMjAocmVzcG9uc2UpJyklM0IlMEElMDklMDklMEElMDklMDklMDklMkYlMkYlNDBidWlsZCUyMFNjaGVtYSUyMCUyMkxhYmVscyUyMiUwQSUwOSUwOSUwOU5FV1NDSEVNQSgnTGFiZWxzJyUyQyUyMGZ1bmN0aW9uKHNjaGVtYSklMjAlN0IlMEElMDklMDklMEElMDklMDklMDklMDlzY2hlbWEuY29tcHJlc3MoKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiUyMEZpZWxkcyUwQSUwOSUwOSUwOSUwOXNjaGVtYS5kZWZpbmUoJ25hbWUnJTJDJTIwJ3N0cmluZyclMkMlMjB0cnVlKSUzQiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5kZWZpbmUoJ2NvbG9yJyUyQyUyMCdzdHJpbmcoNyknKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyTGFiZWxzJTIwLS0lM0UlMjBxdWVyeSUyMiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5zZXRRdWVyeShmdW5jdGlvbiglMjQlMkMlMjBtb2RlbCklMjAlN0IlMEElMDklMDklMDklMDklMDklMkYlMkYlNDBjb2RlJTBBJTA5JTA5JTA5JTA5JTA5Tk9TUUwoJ2xhYmVscycpLmZpbmQoKS5zb3J0KCdkYXRlY3JlYXRlZF9kZXNjJykuY2FsbGJhY2soJTI0LmNhbGxiYWNrKSUzQiUwQSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMEElMDklMDklMDklMDklMkYlMkYlNDBidWlsZCUyMFNjaGVtYSUyMCUyMkxhYmVscyUyMC0tJTNFJTIwaW5zZXJ0JTIyJTBBJTA5JTA5JTA5JTA5c2NoZW1hLnNldEluc2VydChmdW5jdGlvbiglMjQlMkMlMjBtb2RlbCklMjAlN0IlMEElMDklMDklMDklMDklMDl2YXIlMjBpZCUyMCUzRCUyMCUyNC5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOWlmJTIwKFVOQVVUSE9SSVpFRCglMjQlMkMlMjAnc2EnKSklMEElMDklMDklMDklMDklMDklMDlyZXR1cm4lM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlNDBjb2RlJTBBJTA5JTA5JTA5JTA5JTA5bW9kZWwuaWQlMjAlM0QlMjBVSUQoKSUzQiUwQSUwOSUwOSUwOSUwOSUwOW1vZGVsLmR0Y3JlYXRlZCUyMCUzRCUyMG5ldyUyMERhdGUoKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOU5PU1FMKCdsYWJlbHMnKS5pbnNlcnQobW9kZWwpLmNhbGxiYWNrKGZ1bmN0aW9uKCklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMjQuc3VjY2Vzcyhtb2RlbC5pZCklM0IlMEElMDklMDklMDklMDklMDklMDlNQUlOLndzJTIwJTI2JTI2JTIwTUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAnbGFiZWxzJyUyMCU3RCklM0IlMEElMDklMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyTGFiZWxzJTIwLS0lM0UlMjBwYXRjaCUyMiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5zZXRQYXRjaChmdW5jdGlvbiglMjQlMkMlMjBtb2RlbCklMjAlN0IlMEElMDklMDklMDklMDklMDl2YXIlMjBpZCUyMCUzRCUyMCUyNC5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOWlmJTIwKFVOQVVUSE9SSVpFRCglMjQlMkMlMjAnc2EnKSklMEElMDklMDklMDklMDklMDklMDlyZXR1cm4lM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlNDBjb2RlJTBBJTA5JTA5JTA5JTA5JTA5bW9kZWwuZHR1cGRhdGVkJTIwJTNEJTIwbmV3JTIwRGF0ZSgpJTNCJTBBJTA5JTA5JTA5JTA5JTA5Tk9TUUwoJ2xhYmVscycpLm1vZGlmeShtb2RlbCkuaWQoaWQpLmNhbGxiYWNrKGZ1bmN0aW9uKCklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMjQuc3VjY2VzcyhpZCklM0IlMEElMDklMDklMDklMDklMDklMDlNQUlOLndzJTIwJTI2JTI2JTIwTUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAnbGFiZWxzJyUyMCU3RCklM0IlMEElMDklMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyTGFiZWxzJTIwLS0lM0UlMjByZW1vdmUlMjIlMEElMDklMDklMDklMDlzY2hlbWEuc2V0UmVtb3ZlKGZ1bmN0aW9uKCUyNCUyQyUyMG1vZGVsKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMGlkJTIwJTNEJTIwJTI0LmlkJTNCJTBBJTA5JTA5JTA5JTA5JTA5aWYlMjAoVU5BVVRIT1JJWkVEKCUyNCUyQyUyMCdzYScpKSUwQSUwOSUwOSUwOSUwOSUwOSUwOXJldHVybiUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiU0MGNvZGUlMEElMDklMDklMDklMDklMDlOT1NRTCgnbGFiZWxzJykucmVtb3ZlKCkuaWQoaWQpLmNhbGxiYWNrKGZ1bmN0aW9uKGNvdW50KSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwOSUyNC5zdWNjZXNzKCklM0IlMEElMDklMDklMDklMDklMDklMDljb3VudCUyMCUyNiUyNiUyME1BSU4ud3MlMjAlMjYlMjYlMjBNQUlOLndzLnNlbmQoJTdCJTIwVFlQRSUzQSUyMCdsYWJlbHMnJTIwJTdEKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSU3RCkoKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwQSUwOSUwOShmdW5jdGlvbigpJTIwJTdCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBTY2hlbWElMjAlMjJDYXJkcyUyRlRhc2slMjIlMEElMDklMDklMDlORVdTQ0hFTUEoJ0NhcmRzJTJGVGFzayclMkMlMjBmdW5jdGlvbihzY2hlbWEpJTIwJTdCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5c2NoZW1hLmNvbXByZXNzKCklM0IlMEElMDklMDklMEElMDklMDklMDklMDklMkYlMkYlMjBGaWVsZHMlMEElMDklMDklMDklMDlzY2hlbWEuZGVmaW5lKCduYW1lJyUyQyUyMCdzdHJpbmcnJTJDJTIwdHJ1ZSklM0IlMEElMDklMDklMDklMDlzY2hlbWEuZGVmaW5lKCdpc2RvbmUnJTJDJTIwJ2Jvb2xlYW4nKSUzQiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5kZWZpbmUoJ2lkJyUyQyUyMCdzdHJpbmcnJTJDJTIwdHJ1ZSklM0IlMEElMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTdEKSgpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTBBJTA5JTA5KGZ1bmN0aW9uKCklMjAlN0IlMEElMDklMDklMEElMDklMDklMDlST1VURSgnJTJCQVBJJTIwJTIwJTJGYXBpJTJGJTIwJTIwLXByb2plY3RzX3F1ZXJ5JTIwJTIwKlByb2plY3RzJTIwLS0lM0UlMjBxdWVyeSUyMChyZXNwb25zZSknKSUzQiUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAlMkJwcm9qZWN0c19pbnNlcnQlMjAlMjAqUHJvamVjdHMlMjAtLSUzRSUyMGluc2VydCUyMChyZXNwb25zZSknKSUzQiUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAlMkJwcm9qZWN0c191cGRhdGUlMkYlN0JpZCU3RCUyMCUyMCpQcm9qZWN0cyUyMC0tJTNFJTIwcGF0Y2glMjAocmVzcG9uc2UpJyklM0IlMEElMDklMDklMDlST1VURSgnJTJCQVBJJTIwJTIwJTJGYXBpJTJGJTIwJTIwLXByb2plY3RzX3JlbW92ZSUyRiU3QmlkJTdEJTIwJTIwKlByb2plY3RzJTIwLS0lM0UlMjByZW1vdmUlMjAocmVzcG9uc2UpJyklM0IlMEElMDklMDklMEElMDklMDklMDklMkYlMkYlNDBidWlsZCUyMFNjaGVtYSUyMCUyMlByb2plY3RzJTIyJTBBJTA5JTA5JTA5TkVXU0NIRU1BKCdQcm9qZWN0cyclMkMlMjBmdW5jdGlvbihzY2hlbWEpJTIwJTdCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5c2NoZW1hLmNvbXByZXNzKCklM0IlMEElMDklMDklMEElMDklMDklMDklMDklMkYlMkYlMjBGaWVsZHMlMEElMDklMDklMDklMDlzY2hlbWEuZGVmaW5lKCduYW1lJyUyQyUyMCdzdHJpbmcnJTJDJTIwdHJ1ZSklM0IlMEElMDklMDklMDklMDlzY2hlbWEuZGVmaW5lKCdjb2xvciclMkMlMjAnc3RyaW5nKDcpJyklM0IlMEElMDklMDklMDklMDlzY2hlbWEuZGVmaW5lKCdyYXRlJyUyQyUyMCdudW1iZXInKSUzQiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5kZWZpbmUoJ2NvbXBhbnknJTJDJTIwJ3N0cmluZyclMkMlMjB0cnVlKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyUHJvamVjdHMlMjAtLSUzRSUyMHF1ZXJ5JTIyJTBBJTA5JTA5JTA5JTA5c2NoZW1hLnNldFF1ZXJ5KGZ1bmN0aW9uKCUyNCUyQyUyMG1vZGVsKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiU0MGNvZGUlMEElMDklMDklMDklMDklMDlOT1NRTCgncHJvamVjdHMnKS5maW5kKCkuc29ydCgnZHRjcmVhdGVkX2Rlc2MnKS5jYWxsYmFjayglMjQuY2FsbGJhY2spJTNCJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyUHJvamVjdHMlMjAtLSUzRSUyMGluc2VydCUyMiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5zZXRJbnNlcnQoZnVuY3Rpb24oJTI0JTJDJTIwbW9kZWwpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwaWQlMjAlM0QlMjAlMjQuaWQlM0IlMEElMDklMDklMDklMDklMDlpZiUyMChVTkFVVEhPUklaRUQoJTI0JTJDJTIwJ3NhJykpJTBBJTA5JTA5JTA5JTA5JTA5JTA5cmV0dXJuJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOSUwOSUwOW1vZGVsLmlkJTIwJTNEJTIwVUlEKCklM0IlMEElMDklMDklMDklMDklMDltb2RlbC5kdGNyZWF0ZWQlMjAlM0QlMjBuZXclMjBEYXRlKCklM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDlOT1NRTCgncHJvamVjdHMnKS5pbnNlcnQobW9kZWwpLmNhbGxiYWNrKGZ1bmN0aW9uKCklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMjQuc3VjY2Vzcyhtb2RlbC5pZCklM0IlMEElMDklMDklMDklMDklMDklMDlNQUlOLndzJTIwJTI2JTI2JTIwTUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAncHJvamVjdHMnJTIwJTdEKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBTY2hlbWElMjAlMjJQcm9qZWN0cyUyMC0tJTNFJTIwcGF0Y2glMjIlMEElMDklMDklMDklMDlzY2hlbWEuc2V0UGF0Y2goZnVuY3Rpb24oJTI0JTJDJTIwbW9kZWwpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwaWQlMjAlM0QlMjAlMjQuaWQlM0IlMEElMDklMDklMDklMDklMDlpZiUyMChVTkFVVEhPUklaRUQoJTI0JTJDJTIwJ3NhJykpJTBBJTA5JTA5JTA5JTA5JTA5JTA5cmV0dXJuJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOSUwOSUwOW1vZGVsLmR0dXBkYXRlZCUyMCUzRCUyMG5ldyUyMERhdGUoKSUzQiUwQSUwOSUwOSUwOSUwOSUwOU5PU1FMKCdwcm9qZWN0cycpLm1vZGlmeShtb2RlbCkuaWQoaWQpLmNhbGxiYWNrKGZ1bmN0aW9uKCklMjAlN0IlMEElMDklMDklMDklMDklMDklMDklMjQuc3VjY2VzcyhpZCklM0IlMEElMDklMDklMDklMDklMDklMDlNQUlOLndzJTIwJTI2JTI2JTIwTUFJTi53cy5zZW5kKCU3QiUyMFRZUEUlM0ElMjAncHJvamVjdHMnJTIwJTdEKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBTY2hlbWElMjAlMjJQcm9qZWN0cyUyMC0tJTNFJTIwcmVtb3ZlJTIyJTBBJTA5JTA5JTA5JTA5c2NoZW1hLnNldFJlbW92ZShmdW5jdGlvbiglMjQlMkMlMjBtb2RlbCklMjAlN0IlMEElMDklMDklMDklMDklMDl2YXIlMjBpZCUyMCUzRCUyMCUyNC5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOWlmJTIwKFVOQVVUSE9SSVpFRCglMjQlMkMlMjAnc2EnKSklMEElMDklMDklMDklMDklMDklMDlyZXR1cm4lM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlNDBjb2RlJTBBJTA5JTA5JTA5JTA5JTA5Tk9TUUwoJ2NhcmRzJykucmVtb3ZlKCkud2hlcmUoJ3Byb2plY3RpZCclMkMlMjBpZCklM0IlMEElMDklMDklMDklMDklMDlOT1NRTCgncHJvamVjdHMnKS5yZW1vdmUoKS5pZChpZCkuY2FsbGJhY2soZnVuY3Rpb24oY291bnQpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTI0LnN1Y2Nlc3MoKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWNvdW50JTIwJTI2JTI2JTIwTUFJTi53cyUyMCUyNiUyNiUyME1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ3Byb2plY3RzJyUyMCU3RCklM0IlMEElMDklMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMEElMDklMDklN0QpKCklM0IlMEElMDklMDklMEElMDklMDklMEElMDklMDkoZnVuY3Rpb24oKSUyMCU3QiUwQSUwOSUwOSUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAtc2V0dGluZ3NfcmVhZCUyMCUyMCpTZXR0aW5ncyUyMC0tJTNFJTIwcmVhZCUyMChyZXNwb25zZSknKSUzQiUwQSUwOSUwOSUwOVJPVVRFKCclMkJBUEklMjAlMjAlMkZhcGklMkYlMjAlMjAlMkJzZXR0aW5nc19zYXZlJTIwJTIwKlNldHRpbmdzJTIwLS0lM0UlMjBzYXZlJTIwKHJlc3BvbnNlKScpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBTY2hlbWElMjAlMjJTZXR0aW5ncyUyMiUwQSUwOSUwOSUwOU5FV1NDSEVNQSgnU2V0dGluZ3MnJTJDJTIwZnVuY3Rpb24oc2NoZW1hKSUyMCU3QiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOXNjaGVtYS5jb21wcmVzcygpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTIwRmllbGRzJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgnbmFtZSclMkMlMjAnc3RyaW5nJyklM0IlMEElMDklMDklMDklMDlzY2hlbWEuZGVmaW5lKCd0b3RhbGFwaSclMkMlMjAnc3RyaW5nJyklM0IlMEElMDklMDklMDklMDlzY2hlbWEuZGVmaW5lKCdjb2xvciclMkMlMjAnc3RyaW5nKDcpJyklM0IlMEElMDklMDklMEElMDklMDklMDklMDklMkYlMkYlNDBidWlsZCUyMFNjaGVtYSUyMCUyMlNldHRpbmdzJTIwLS0lM0UlMjByZWFkJTIyJTBBJTA5JTA5JTA5JTA5c2NoZW1hLnNldFJlYWQoZnVuY3Rpb24oJTI0JTJDJTIwbW9kZWwpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5aWYlMjAoVU5BVVRIT1JJWkVEKCUyNCUyQyUyMCdzYScpKSUwQSUwOSUwOSUwOSUwOSUwOSUwOXJldHVybiUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiU0MGNvZGUlMEElMDklMDklMDklMDklMDklMjQuY2FsbGJhY2soUFJFRi5zZXR0aW5ncyUyMCU3QyU3QyUyMCU3QiU3RCklM0IlMEElMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBTY2hlbWElMjAlMjJTZXR0aW5ncyUyMC0tJTNFJTIwc2F2ZSUyMiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5zZXRTYXZlKGZ1bmN0aW9uKCUyNCUyQyUyMG1vZGVsKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOWlmJTIwKFVOQVVUSE9SSVpFRCglMjQlMkMlMjAnc2EnKSklMEElMDklMDklMDklMDklMDklMDlyZXR1cm4lM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlNDBjb2RlJTBBJTA5JTA5JTA5JTA5JTA5UFJFRi5zZXQoJ3NldHRpbmdzJyUyQyUyMG1vZGVsKSUzQiUwQSUwOSUwOSUwOSUwOSUwOUNPTkYubmFtZSUyMCUzRCUyMG1vZGVsLm5hbWUlM0IlMEElMDklMDklMDklMDklMDlDT05GLnRvdGFsYXBpJTIwJTNEJTIwbW9kZWwudG90YWxhcGklM0IlMEElMDklMDklMDklMDklMDklMjQuc3VjY2VzcygpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5TUFJTi53cyUyMCUyNiUyNiUyME1BSU4ud3Muc2VuZCglN0IlMjBUWVBFJTNBJTIwJ3NldHRpbmdzJyUyQyUyMGJvZHklM0ElMjBtb2RlbCUyMCU3RCklM0IlMEElMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSU3RCkoKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwQSUwOSUwOShmdW5jdGlvbigpJTIwJTdCJTBBJTA5JTA5JTBBJTA5JTA5JTA5Uk9VVEUoJyUyQkFQSSUyMCUyMCUyRmFwaSUyRiUyMCUyMCUyQmNhcmRzX2xvZ3dvcmslMkYlN0JpZCU3RCUyMCUyMCpDYXJkcyUyRk1pbnV0ZXMlMjAtLSUzRSUyMHVwZGF0ZSUyMChyZXNwb25zZSknKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUyRiUyRiU0MGJ1aWxkJTIwU2NoZW1hJTIwJTIyQ2FyZHMlMkZNaW51dGVzJTIyJTBBJTA5JTA5JTA5TkVXU0NIRU1BKCdDYXJkcyUyRk1pbnV0ZXMnJTJDJTIwZnVuY3Rpb24oc2NoZW1hKSUyMCU3QiUwQSUwOSUwOSUwQSUwOSUwOSUwOSUwOXNjaGVtYS5jb21wcmVzcygpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTIwRmllbGRzJTBBJTA5JTA5JTA5JTA5c2NoZW1hLmRlZmluZSgndmFsdWUnJTJDJTIwJ251bWJlcicpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTA5JTJGJTJGJTQwYnVpbGQlMjBTY2hlbWElMjAlMjJDYXJkcyUyRk1pbnV0ZXMlMjAtLSUzRSUyMHVwZGF0ZSUyMiUwQSUwOSUwOSUwOSUwOXNjaGVtYS5zZXRVcGRhdGUoZnVuY3Rpb24oJTI0JTJDJTIwbW9kZWwpJTIwJTdCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwaWQlMjAlM0QlMjAlMjQuaWQlM0IlMEElMDklMDklMDklMDklMDl2YXIlMjB1c2VyJTIwJTNEJTIwJTI0LnVzZXIlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlNDBjb2RlJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwJTI0JTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwbW9kZWwlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBpZCUyMCU3QlN0cmluZyU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMHBhcmFtcyUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMGZpbHRlciUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMHF1ZXJ5JTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwdXNlciUyMCU3Qk51bGxhYmUlMjBPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDlOT1NRTCgnY2FyZHMnKS5vbmUoKS5pZChpZCkub3IoZnVuY3Rpb24oYnVpbGRlciklMjAlN0IlMEElMDklMDklMDklMDklMDklMDlidWlsZGVyLndoZXJlKCd1c2VyaWQnJTJDJTIwdXNlci5pZCklM0IlMEElMDklMDklMDklMDklMDklMDlidWlsZGVyLndoZXJlKCdzb2x2ZXJpZCclMkMlMjB1c2VyLmlkKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSU3RCkuZXJyb3IoNDA0KS5kb25lKCUyNCUyQyUyMGZ1bmN0aW9uKHJlc3BvbnNlKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOSUwQSUwOSUwOSUwOSUwOSUwOSUwOWlmJTIwKCFyZXNwb25zZS5taW51dGVzKSUwQSUwOSUwOSUwOSUwOSUwOSUwOSUwOXJlc3BvbnNlLm1pbnV0ZXMlMjAlM0QlMjAwJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5JTA5cmVzcG9uc2UubWludXRlcyUyMCUyQiUzRCUyMG1vZGVsLnZhbHVlJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5JTA5aWYlMjAocmVzcG9uc2UubWludXRlcyUyMCUzQyUyMDApJTBBJTA5JTA5JTA5JTA5JTA5JTA5JTA5cmVzcG9uc2UubWludXRlcyUyMCUzRCUyMDAlM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDlOT1NRTCgnY2FyZHMnKS5tb2RpZnkoJTdCJTIwbWludXRlcyUzQSUyMHJlc3BvbnNlLm1pbnV0ZXMlMjAlN0QpLmlkKGlkKS5jYWxsYmFjayglMjQuZG9uZSgpKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOU1BSU4ud3MlMjAlMjYlMjYlMjBNQUlOLndzLnNlbmQoJTdCJTIwVFlQRSUzQSUyMCdjYXJkcyUyRmxvZ3dvcmsnJTJDJTIwYm9keSUzQSUyMCU3QiUyMGlkJTNBJTIwaWQlMkMlMjBtaW51dGVzJTNBJTIwcmVzcG9uc2UubWludXRlcyUyMCU3RCU3RCUyQyUyMGNsaWVudCUyMCUzRCUzRSUyMGNsaWVudC51c2VyLmlkJTIwJTNEJTNEJTNEJTIwcmVzcG9uc2UudXNlcmlkJTIwJTdDJTdDJTIwY2xpZW50LnVzZXIuaWQlMjAlM0QlM0QlM0QlMjByZXNwb25zZS5zb2x2ZXJpZCklM0IlMEElMDklMDklMDklMDklMDklMEElMDklMDklMDklMDklMDklMDl2YXIlMjBsb2clMjAlM0QlMjAlN0IlN0QlM0IlMEElMDklMDklMDklMDklMDklMDlsb2cuaWQlMjAlM0QlMjByZXNwb25zZS5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWxvZy5uYW1lJTIwJTNEJTIwcmVzcG9uc2UubmFtZSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWxvZy5wcm9qZWN0aWQlMjAlM0QlMjByZXNwb25zZS5wcm9qZWN0aWQlM0IlMEElMDklMDklMDklMDklMDklMDlsb2cudXNlcmlkJTIwJTNEJTIwdXNlci5pZCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWxvZy51c2VybmFtZSUyMCUzRCUyMHVzZXIubmFtZSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWxvZy5taW51dGVzJTIwJTNEJTIwbW9kZWwudmFsdWUlM0IlMEElMDklMDklMDklMDklMDklMDlsb2cud2VlayUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3cnKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWxvZy53ZWVrbHklMjAlM0QlMjAlMkJOT1cuZm9ybWF0KCd5eXl5d3cnKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWxvZy5kYWlseSUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3l5eXlNTWRkJyklM0IlMEElMDklMDklMDklMDklMDklMDlsb2cubW9udGhseSUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3l5eXlNTScpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTA5bG9nLnllYXJseSUyMCUzRCUyMCUyQk5PVy5mb3JtYXQoJ3l5eXknKSUzQiUwQSUwOSUwOSUwOSUwOSUwOSUwOWxvZy5kdGNyZWF0ZWQlMjAlM0QlMjBOT1clM0IlMEElMDklMDklMDklMDklMDklMDlOT1NRTCgnbG9nd29yaycpLmluc2VydChsb2cpJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwOSUwOSU3RCklM0IlMEElMDklMDklMEElMDklMDklMDklMDklMkYlMkYlNDBidWlsZCUyMFNjaGVtYSUyMCUyMkNhcmRzJTJGTWludXRlcyUyMC0tJTNFJTIwc3RhdHMlMjIlMEElMDklMDklMDklMDlzY2hlbWEuYWRkV29ya2Zsb3coJ3N0YXRzJyUyQyUyMGZ1bmN0aW9uKCUyNCUyQyUyMG1vZGVsKSUyMCU3QiUwQSUwOSUwOSUwOSUwOSUwOXZhciUyMHF1ZXJ5JTIwJTNEJTIwJTI0LnF1ZXJ5JTNCJTBBJTA5JTA5JTA5JTA5JTA5dmFyJTIwaWQlMjAlM0QlMjAlMjQuaWQlM0IlMEElMDklMDklMDklMDklMDl2YXIlMjB1c2VyJTIwJTNEJTIwJTI0LnVzZXIlM0IlMEElMDklMDklMDklMDklMDlpZiUyMChVTkFVVEhPUklaRUQoJTI0JTJDJTIwJ3NhJykpJTBBJTA5JTA5JTA5JTA5JTA5JTA5cmV0dXJuJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTQwY29kZSUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMCUyNCUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMG1vZGVsJTIwJTdCT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTJGJTJGJTIwaWQlMjAlN0JTdHJpbmclN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBwYXJhbXMlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBmaWx0ZXIlMjAlN0JPYmplY3QlN0QlM0IlMEElMDklMDklMDklMDklMDklMkYlMkYlMjBxdWVyeSUyMCU3Qk9iamVjdCU3RCUzQiUwQSUwOSUwOSUwOSUwOSUwOSUyRiUyRiUyMHVzZXIlMjAlN0JOdWxsYWJlJTIwT2JqZWN0JTdEJTNCJTBBJTA5JTA5JTA5JTA5JTA5JTBBJTA5JTA5JTA5JTA5JTA5Tk9TUUwoJ2xvZ3dvcmsnKS5maW5kKCkuZmllbGRzKCdwcm9qZWN0aWQlMkN1c2VyaWQlMkNtaW51dGVzJTJDd2VlaycpLndoZXJlKCdtb250aGx5JyUyQyUyMCUyNC5xdWVyeS5kYXRlJTIwJTdDJTdDJTIwTk9XLmZvcm1hdCgneXl5eU1NJykpLmNhbGxiYWNrKCUyNC5jYWxsYmFjayklM0IlMEElMDklMDklMDklMDklN0QpJTNCJTBBJTA5JTA5JTBBJTA5JTA5JTA5JTdEKSUzQiUwQSUwOSUwOSUwQSUwOSUwOSU3RCkoKSUzQiUwQSUwQSUwOSU3RCklM0IlMEElN0QpKCklM0I="}
--------------------------------------------------------------------------------
/controllers/default.js:
--------------------------------------------------------------------------------
1 | exports.install = function() {
2 | ROUTE('+GET /*');
3 | ROUTE('-GET /*', 'login');
4 | };
5 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | // ===================================================
2 | // Total.js start script
3 | // https://www.totaljs.com
4 | // ===================================================
5 |
6 | const options = {};
7 |
8 | // options.ip = '127.0.0.1';
9 | // options.port = parseInt(process.argv[2]);
10 | // options.unixsocket = require('path').join(require('os').tmpdir(), 'app_name');
11 | // options.unixsocket777 = true;
12 | // options.config = { name: 'Total.js' };
13 | // options.sleep = 3000;
14 | // options.inspector = 9229;
15 | // options.watch = ['private'];
16 | // options.livereload = 'https://yourhostname';
17 |
18 | // Enables cluster:
19 | // options.cluster = 'auto';
20 | // options.cluster_limit = 10; // max 10. threads (works only with "auto" scaling)
21 |
22 | // Enables threads:
23 | // options.cluster = 'auto';
24 | // options.cluster_limit = 10; // max 10. threads (works only with "auto" scaling)
25 | // options.timeout = 5000;
26 | // options.threads = '/api/';
27 | // options.logs = 'isolated';
28 |
29 | var type = process.argv.indexOf('--release', 1) !== -1 || process.argv.indexOf('release', 1) !== -1 ? 'release' : 'debug';
30 | require('total4/' + type)(options);
--------------------------------------------------------------------------------
/modules/builder.js:
--------------------------------------------------------------------------------
1 | exports.install = function() {
2 | if (DEBUG) {
3 | ROUTE('GET /_build/', function() {
4 | this.file('~' + PATH.builds('app.build'), null, { 'content-type': 'application/json' });
5 | });
6 | ROUTE('POST /_build/', function() {
7 | require('fs').writeFile(PATH.builds('app.build'), this.body, this.done());
8 | }, ['raw'], 1024);
9 | ROUTE('GET /builder/', function() {
10 | this.proxy('https://cdn.totaljs.com/appbuilder.html');
11 | });
12 | }
13 | };
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hello",
3 | "description": "A simple Trello alternative",
4 | "version": "1.0.0",
5 | "main": "index.js",
6 | "dependencies": {
7 | "total4": "latest"
8 | },
9 | "scripts": {
10 | "test": "echo \"Error: no test specified\" && exit 1"
11 | },
12 | "keywords": ["trello", "node.js"],
13 | "author": "Peter Širka",
14 | "license": "MIT"
15 | }
--------------------------------------------------------------------------------
/public/css/default.css:
--------------------------------------------------------------------------------
1 | /*auto*/
2 |
3 | $monospace : Menlo, Consolas, monospace;
4 |
5 | :root {
6 | --color: #61C83B;
7 | }
8 |
9 | html,body { padding: 0; margin: 0; overflow: hidden; background-color: var(--color); }
10 |
11 | header { height: 40px; padding: 10px 0 0 15px; }
12 | header .user { float: right; padding: 2px 20px 0 0; color: rgba(255,255,255,0.8); font-size: 12px; }
13 | header .user > div { position: relative; display: inline-block; margin-left: 7px; }
14 | header .user .initials { width: 30px; height: 30px; line-height: 30px; font-size: 12px; position: relative; display: inline-block; }
15 | header .sounds { float: right; }
16 | header .sounds .fa-volume { color: #FFF; }
17 | header button { float: left; width: 35px; height: 35px; background-color: transparent; border: 0; margin: 0 10px 0; font-size: 16px; color: rgba(255,255,255,0.6); margin-left: 1px; border-radius: 100px; }
18 | header button.highlight { color: #FFF; }
19 | header button:hover { background-color: rgba(0,0,0,0.1); color: #FFF; }
20 |
21 | .header { height: 55px; padding: 15px 20px; border-radius: 5px 5px 0 0; background-color: rgba(0,0,0,0.1); border-bottom: 1px solid rgba(0,0,0,0.1); }
22 | .header .name { font-size: 16px; font-weight: bold; color: #FFF; }
23 | .header .name span { width: 16px; margin-right: 8px; float: left; }
24 | .header .search { margin: 2px 0 0 25px; }
25 | .header .search input { border: 0; width: 100%; outline: 0; background-color: transparent; padding: 0; }
26 |
27 | .caption { font-size: 12px; font-weight: bold; margin-bottom: 5px; }
28 | .caption i { margin-right: 5px; }
29 | .caption span { float: right; cursor: pointer; color: #777; }
30 | .caption span:hover { text-decoration: underline; color: #000; }
31 |
32 | .EXuser:first-child { margin-left: -10px; }
33 | .EXuser:last-child { margin-right: -10px; }
34 | .EXuser { position: relative; display: inline-block; width: 20%; margin: 0; cursor: pointer; font-size: 11px; text-align: center; padding: 10px 0; }
35 | .EXuser > div { margin: 0 10px 10px 10px; border-radius: 5px; background-color: #F0F0F0; padding: 25px 5px; }
36 | .EXuser .initials { margin: 0 auto 10px; cursor: pointer; }
37 | .selected.EXuser > div { background-color: var(--color); color: #FFF; }
38 |
39 | .EXlabel:first-child { margin-left: -10px; }
40 | .EXlabel:last-child { margin-right: -10px; }
41 | .EXlabel { position: relative; display: inline-block; width: 20%; margin: 0; cursor: pointer; font-size: 11px; text-align: center; padding: 10px 0; }
42 | .EXlabel > div { margin: 0 10px 10px 10px; border-radius: 5px; background-color: #F0F0F0; padding: 15px 10px 10px; }
43 | .EXlabel span { display: block; height: 10px; border-radius: 5px; margin-bottom: 5px; }
44 | .selected.EXlabel > div { background-color: var(--color); color: #FFF; }
45 |
46 | .inlinetask { height: 28px; border-top: 1px solid #E0E0E0; }
47 | .inlinetask:first-child { border-top: 0; }
48 | .inlinetask > span i { visibility: hidden; }
49 | .inlinetask > span { margin: 5px 0 0; float: left; width: 16px; height: 16px; line-height: 12px; text-align: center; border: 2px solid #E0E0E0; font-size: 10px; color: #FFF; cursor: pointer; border-radius: 5px; }
50 | .inlinetask.checked span { background-color: var(--color); border-color: var(--color); }
51 | .inlinetask.checked span i { visibility: visible; }
52 | .inlinetask > div { margin-left: 26px; padding: 5px 0 0; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; font-size: 13px; }
53 | .inlinetask > i { float: right; margin: 8px 0 0; font-size: 11px; color: #A0A0A0; cursor: pointer; }
54 | .inlinetask > i:hover { color: red; }
55 |
56 | .projectsform .item { height: 30px; border-bottom: 1px solid #E0E0E0; line-height: 29px; font-size: 13px; }
57 | .projectsform .item .remove, .projectsform .item .update { float: right; width: 30px; cursor: pointer; text-align: center; }
58 | .projectsform .item .remove:hover { color: red; }
59 | .projectsform .item .update:hover { color: var(--color); }
60 | .projectsform .item .name { margin-right: 340px; font-weight: bold; }
61 | .projectsform .item .company { width: 190px; float: right; color: #777; }
62 | .projectsform .item .rate { width: 120px; float: right; text-align: right; padding-right: 15px; font-size: 12px; }
63 |
64 | .ui-scrollbar-shadow-top { background:linear-gradient(#000000a4,transparent); }
65 | .ui-scrollbar-shadow-bottom { background:linear-gradient(transparent,#000000a4); }
66 |
67 | .usersform { padding: 0 5px; }
68 | .usersform .item { width: 25%; position: relative; display: inline-block; vertical-align: top; }
69 | .usersform .item > div { margin: 10px; border: 1px solid #E0E0E0; border-radius: 5px; padding: 10px; text-align: center; cursor: pointer; }
70 | .usersform .disabled > div { background-color: #F0F0F0; color: #777; }
71 | .usersform .item > div:hover { background-color: #F0F0F0; }
72 | .usersform .item .admin { float: left; color: red; }
73 | .usersform .item .remove { float: right; width: 30px; cursor: pointer; text-align: right; }
74 | .usersform .item .remove:hover { color: red; }
75 | .usersform .item .initials { width: 40px; height: 40px; line-height: 40px; font-size: 16px; margin: 10px auto; }
76 | .usersform .item .name { font-weight: bold; font-size: 12px; }
77 | .usersform .item .email { font-size: 11px; color: #777; }
78 |
79 | .labelsform .item { height: 30px; border-bottom: 1px solid #E0E0E0; line-height: 29px; font-size: 13px; }
80 | .labelsform .item .remove { float: right; width: 30px; cursor: pointer; text-align: center; }
81 | .labelsform .item .remove:hover { color: red; }
82 | .labelsform .item .color { float: left; width: 30px; height: 10px; border-radius: 5px; margin: 8px 10px 0 0; }
83 | .labelsform .item .name { margin-right: 340px; font-weight: bold; }
84 |
85 | .togglebuttons { list-style: none; display: inline-block; margin: 0; padding: 0; border-radius: 5px; border: 1px solid #e0e0e0; font-size: 12px; }
86 | .togglebuttons.small { font-size: 11px; }
87 | .togglebuttons.small li { line-height: 24px; padding: 0 5px; }
88 | .togglebuttons li { min-width: 90px; text-align: center; cursor: pointer; float: left; border-right: 1px solid #e0e0e0; line-height: 32px; background-color: white; padding: 0 10px; }
89 | .togglebuttons li:first-child { border-top-left-radius: 5px; border-bottom-left-radius: 5px; }
90 | .togglebuttons li:last-child { border-right: 0; border-top-right-radius: 5px; border-bottom-right-radius: 5px; }
91 | .togglebuttons li:hover { background-color: #fffad7; }
92 | .togglebuttons li i { margin-right: 5px; }
93 | .togglebuttons li.selected { background-color: #4285F4; color: white; }
94 |
95 | .ui-dark .togglebuttons { border-color: #404040; }
96 | .ui-dark .togglebuttons li { border-right-color: #404040; background-color: white; }
97 | .ui-dark .togglebuttons li:hover { background-color: #505050; }
98 | .ui-dark .togglebuttons li.selected { background-color: #4285F4; color: white; }
99 |
100 | .ui-form-container, .ui-largeform-container, .ui-miniform-container { background-color: rgba(0,0,0,0.8) !important; }
--------------------------------------------------------------------------------
/public/css/ui.css:
--------------------------------------------------------------------------------
1 | /*auto*/
2 |
3 | $monospace : Menlo, Consolas, monospace;
4 |
5 | .initials { width: 37px; height: 37px; line-height: 37px; text-align: center; color: #FFF; display: block; font-weight: bold; border-radius: 5px; cursor: default; }
6 |
7 | .ui-kanban { position: relative; }
8 | .ui-kanban-container { position: relative; }
9 | .ui-kanban-group { float: left; width: 25%; }
10 | .ui-kanban-group-body { margin: 10px; overflow: hidden; border-radius: 5px; background-color: rgba(0,0,0,0.1); }
11 | .ui-kanban-group-scrollbar { height: 100%; }
12 | .ui-kanban-body { padding: 10px; }
13 | .ui-kanban figure { padding: 0; cursor: grab; margin: 18px; background-color: #FFF; box-shadow: 1px 5px 5px rgba(0,0,0,0.1); border-radius: 5px; }
14 | .ui-kanban figure:first-child { border-top: 0; }
15 | .ui-kanban figure .padding { padding: 7px 12px 0; }
16 | .ui-kanban figure.owner { background-color: #F6F4DA; }
17 | .ui-kanban figure.target { background-color: #FCEDED; }
18 | .ui-kanban figure .html { font-size: 13px; line-height: 18px; margin: 5px 0 10px; padding: 5px 0; cursor: default; }
19 | .ui-kanban figure .project-color { width: 20px; height: 20px; border-radius: 5px; float: left; margin-right: 8px; }
20 | .ui-kanban figure .project { font-size: 15px; font-weight: bold; margin: 5px 0; padding-bottom: 5px; }
21 | .ui-kanban figure .project span { float: right; color: #777; font-weight: normal; font-size: 12px; margin: 4px 0 0; }
22 | .ui-kanban figure .labels { line-height: 15px; margin: 10px 0 0; }
23 | .ui-kanban figure .labels span { font-size: 11px; position: relative; display: inline-block; vertical-align: top; padding: 5px 10px; line-height: 14px; color: #FFF; font-weight: bold; }
24 | .ui-kanban figure .labels span:first-child { border-top-left-radius: 5px; border-bottom-left-radius: 5px; }
25 | .ui-kanban figure .labels span:last-child { border-top-right-radius: 5px; border-bottom-right-radius: 5px; }
26 | .ui-kanban figure .progress { font-size: 11px; height: 16px; padding: 5px 0 0; }
27 | .ui-kanban figure .progress > div { background-color: #F0F0F0; border-radius: 5px; margin: 0 42px 0 0; }
28 | .ui-kanban figure .progress > span { float: right; width: 42px; text-align: right; margin: -5px 0 0; color: #777; }
29 | .ui-kanban figure .progress > div > div { height: 4px; background-color: #68B25B; border-radius: 5px; }
30 | .ui-kanban figure .moved { font-size: 11px; color: #999; float: right; }
31 | .ui-kanban figure .date { font-size: 11px; color: #999; }
32 | .ui-kanban figure .date i { margin-right: 4px; }
33 | .ui-kanban figure .meta { height: 40px; margin-top: 5px; background-color: #F8F8F8; border-radius: 0 0 5px 5px; padding: 0 10px; }
34 | .ui-kanban figure .meta .tasks { float: left; font-size: 12px; margin: 5px 5px 0 0; color: #333; }
35 | .ui-kanban figure .meta .tasks i { margin-right: 3px; }
36 | .ui-kanban figure .meta .deadline { float: right; font-size: 12px; margin: 8px 5px 0 0; padding: 3px 5px; color: #000; font-family: $monospace; border-radius: 5px; }
37 | .ui-kanban figure .meta .deadline.expired { color: red; font-weight: bold; }
38 | .ui-kanban figure .meta .deadline i { margin-right: 5px; }
39 | .ui-kanban figure .meta .logwork { float: left; font-size: 12px; margin: 8px 0 0; border-radius: 5px; padding: 3px 5px; cursor: pointer; color: #999; }
40 | .ui-kanban figure .meta .logwork i { margin-right: 5px; }
41 | .ui-kanban figure .meta .logwork:hover { background-color: #FFF; }
42 | .ui-kanban figure .html code { font-family: Menlo, Consolas, monospace; color: #000; font-size: 13px; background-color: #F0F0F0; padding: 0 3px; border-radius: var(--radius); }
43 |
44 | .ui-kanban figure .meta .user { float: right; margin: 8px 0 0; }
45 | .ui-kanban figure .initials { width: 24px; height: 24px; line-height: 24px; font-size: 11px; position: relative; display: inline-block; margin: 0 0 5px 5px; }
46 |
47 | .ui-kanban-group-done .deadline { display: none; }
48 |
49 | .ui-enterbox { border: 1px solid #E0E0E0; border-radius: 3px; padding: 0 1px; background-color: #FFF; }
50 | .ui-enterbox-input input { width: 100%; border: 0; background: #FFF; outline: 0; font-size: 14px; line-height: 32px; }
51 | .ui-enterbox-input { margin-right: 40px; padding: 0 10px 0; height: 34px; }
52 | .ui-enterbox-button { float: right; width: 40px; border-left: 1px solid #E0E0E0; }
53 | .ui-enterbox-button button { width: 100%; background-color: #FFF; outline: 0; border: 0; font-size: 16px; height: 34px; cursor: pointer; }
54 | .ui-enterbox-button button:hover { background-color: #F8F8F8; }
55 |
56 | .ui-inlineform-container { z-index: 100 !important; }
57 |
58 | .ui-miniform-noscroll, .ui-miniform-noscroll body { overflow: hidden; }
59 | .ui-miniform-container { width: 100%; position: fixed; left: 0; top: 0; bottom: 0; right: 0; background-color: rgba(230,233,237,0.8); z-index: 5; overflow-y: scroll; transform-style: preserve-3d; overflow-scrolling: touch; padding: 15px; }
60 | .ui-miniform-container-table { display: table; width: 100%; height: 100%; }
61 | .ui-miniform-container-cell { display: table-cell; width: 100%; height: 100%; vertical-align: middle; text-align: center; }
62 | .ui-miniform { background-color: #FFF; border-radius: 5px; box-shadow: 0 10px 30px rgba(0,0,0,0.1); transform: scale(0); transition: all 0.15s; opacity: 0; text-align: left; position: relative; margin: 0 auto; }
63 | .ui-miniform .padding { padding: 15px; }
64 | .ui-miniform-animate { transform: scale(1); opacity: 1; }
65 | .ui-miniform-title { padding: 18px 15px; font-size: 18px; user-select: none; color: #000; border-bottom: 1px solid #E0E0E0; height: 58px; }
66 | .ui-miniform-title .ui-miniform-button-close { float: right; cursor: pointer; font-size: 18px; margin: 1px 0 0; transition: all 0.2s; background: none; border: 0; outline: 0; height: auto; color: red; text-align: right !important; width: 20px; padding: 0; }
67 | .ui-miniform-title .ui-miniform-button-close:hover { transform: scale(1.1); }
68 | .ui-miniform-title > span { font-weight: bold; }
69 | .ui-miniform-title i { margin-right: 7px; }
70 | .ui-miniform > nav { padding: 0 15px 0; border-top: 1px solid #E0E0E0; background-color: #FFF; border-radius: 0 0 5px 5px; line-height: 65px; height: 65px; display: block; float: none; position: relative; }
71 | .ui-miniform > nav button { border: 0; margin: 15px 0 0; background-color: #F0F0F0; height: 34px; padding: 0 15px; color: #000; cursor: pointer; font-family: Arial; line-height: 34px; vertical-align: middle; outline: 0; font-size: 14px; text-decoration: none; transition: all 0.3s; float: left; width: 50%; }
72 | .ui-miniform > nav button i { width: 15px; text-align: center; margin-right: 5px; }
73 | .ui-miniform > nav button:hover { opacity: 0.9; }
74 | .ui-miniform > nav button:active { background-color: #D0D0D0; }
75 | .ui-miniform > nav button:disabled { background-color: #F5F5F5 !important; border-color: #E0E0E0 !important; color: silver !important; cursor: not-allowed; box-shadow: none; }
76 | .ui-miniform > nav button:first-child { border-top-left-radius: 5px; border-bottom-left-radius: 5px; }
77 | .ui-miniform > nav button:last-child { border-top-right-radius: 5px; border-bottom-right-radius: 5px; }
78 | .ui-miniform > nav button[name='submit'] { font-weight: bold; background-color: var(--color); color: #FFF; font-size: 14px; }
79 |
80 | .ui-loading { position: fixed; width: 100%; height: 100%; background-color: rgba(255,255,255,0.8); left: 0; top: 0; z-index: 1000; }
81 | .ui-loading-1 > div { background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzgiIGhlaWdodD0iMzgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IHgxPSI4LjA0MiUiIHkxPSIwJSIgeDI9IjY1LjY4MiUiIHkyPSIyMy44NjUlIiBpZD0iYSI+PHN0b3Agc3RvcC1jb2xvcj0iI0EwQTBBMCIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0EwQTBBMCIgc3RvcC1vcGFjaXR5PSIuNjMxIiBvZmZzZXQ9IjYzLjE0NiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQTBBMEEwIiBvZmZzZXQ9IjEwMCUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxIDEpIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zNiAxOGMwLTkuOTQtOC4wNi0xOC0xOC0xOCIgc3Ryb2tlPSJ1cmwoI2EpIiBzdHJva2Utd2lkdGg9IjIiPjxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0icm90YXRlIiBmcm9tPSIwIDE4IDE4IiB0bz0iMzYwIDE4IDE4IiBkdXI9IjAuOXMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIi8+PC9wYXRoPjxjaXJjbGUgZmlsbD0iI0EwQTBBMCIgY3g9IjM2IiBjeT0iMTgiIHI9IjEiPjxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0icm90YXRlIiBmcm9tPSIwIDE4IDE4IiB0bz0iMzYwIDE4IDE4IiBkdXI9IjAuOXMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIi8+PC9jaXJjbGU+PC9nPjwvc3ZnPg==) no-repeat 50% 50%; background-size: 80px 80px; width: 80px; height: 80px; position: absolute; left: 50%; top: 50%; margin: -40px 0 0 -40px; }
82 | .ui-loading-2 > div { min-height: 5px; background-color: var(--color); width: 0; position: absolute; z-index: 1; animation: loadinganimation 5s infinite; }
83 | .ui-loading-1 .ui-loading-text { position: absolute; width: 250px; text-align: center; margin: 90px 0 0 -125px; left: 50%; font-size: 12px; color: #000000; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
84 | .ui-loading-2 .ui-loading-text { font-size: 11px; padding: 0 5px; }
85 | .ui-loading-text i { margin-right: 5px; }
86 |
87 | @keyframes loadinganimation {
88 | 0% { left: 0; }
89 | 60% { left: 0; width: 100%; }
90 | 70% { left: 70%; width: 30%; }
91 | 90% { left: 100%; width: 30%; }
92 | 100% { left: 0; width: 0; }
93 | }
94 |
95 | .ui-message { background-color: rgba(255,255,255,0.9); position: fixed; left: 0; right: 0; bottom: 0; top: 0; z-index: 1010; width: 100%; display: table; height: 100%; transition: 0.3s all; opacity: 0; }
96 | .ui-message > div { display: table-cell; vertical-align: middle; text-align: center; padding: 15px; }
97 | .ui-message-body { padding: 30px 25px 20px; position: relative; display: inline-block; color: #000000; border-radius: 4px; max-width: 500px; text-align: left; transform: scale(1.5); transition: 0.2s all; box-shadow: 0 5px 20px rgba(0,0,0,0.1); background-color: #FFF; border-width: 3px; border-style: solid; }
98 | .ui-message-warning .ui-message-body { border-color: #DA4453; min-width: 300px; }
99 | .ui-message-success .ui-message-body { border-color: #8CC152; min-width: 300px; }
100 | .ui-message-info .ui-message-body { border-color: #3BAFDA; min-width: 300px; }
101 | .ui-message button { display: block; min-width: 100px; margin: 20px auto 0; cursor: pointer; outline: 0; background-color: #FFF; border: 1px solid #E0E0E0; border-radius: 3px; color: #000000; padding: 0 20px; height: 34px; font-weight: bold; }
102 | .ui-message button:hover { background-color: #F0F0F0; }
103 | .ui-message button:active { border-color: #D0D0D0; }
104 | .ui-message-icon { border-radius: 100px; width: 60px; height: 60px; padding: 0; line-height: 54px; font-size: 30px; text-align: center; position: absolute; left: 50%; border: 4px solid #3BAFDA; margin-left: -30px; z-index: 5; background-color: #FFF; color: #3BAFDA; margin-top: -40px; transform: scale(2); transition: all 0.3s; }
105 | .ui-message-icon-animate { transform: scale(1); }
106 | .ui-message-success .ui-message-icon { border-color: #8CC152; color: #8CC152; }
107 | .ui-message-warning .ui-message-icon { border-color: #DA4453; color: #DA4453; }
108 | .ui-message-error i { margin-right: 5px; color: red; }
109 | .ui-message-visible { opacity: 1; }
110 | .ui-message-visible .ui-message-body { transform: scale(1); }
111 | .ui-message2 { background-color: rgba(220,220,220,0.9); }
112 | .ui-message2 .ui-message-body { padding: 110px 0 0; border-width: 0; border-radius: 2px; max-width: 400px; }
113 | .ui-message2 .ui-message-text { padding: 0 20px 30px; text-align: center; }
114 | .ui-message2 hr { display: none; }
115 | .ui-message2 button { width: 100%; border: 0 !important; color: #FFF; border-radius: 0 0 2px 2px; height: 40px; margin: 0; }
116 | .ui-message2 button:hover { opacity: 0.9; }
117 | .ui-message2.ui-message-success button { background-color: #8CC152; }
118 | .ui-message2.ui-message-warning button { background-color: #DA4453; }
119 | .ui-message2 .ui-message-icon { margin-top: 30px; border-radius: 0; border: 0; background: transparent !important; font-size: 50px; }
120 |
121 | .ui-largeform-noscroll, .ui-largeform-noscroll body { overflow: hidden; }
122 | .ui-largeform-container { width: 100%; position: fixed; left: 0; top: 0; bottom: 0; right: 0; background-color: rgba(230,233,237,0.8); z-index: 5; overflow: hidden; transform-style: preserve-3d; padding: 0 30px; }
123 | .ui-largeform { background-color: #FFF; border-radius: 3px; box-shadow: 0 10px 30px rgba(0,0,0,0.1); transform: scale(0); transition: all 0.15s; opacity: 0; text-align: left; position: relative; margin: 0 auto; }
124 | .ui-largeform .padding { padding: 15px; }
125 | .ui-largeform-animate { transform: scale(1); opacity: 1; }
126 | .ui-largeform-title { padding: 0 15px; line-height: 57px; font-size: 18px; user-select: none; color: #000; background-color: #FFF; border-bottom: 1px solid #E0E0E0; height: 58px; border-radius: 3px 3px 0 0; }
127 | .ui-largeform-title .ui-largeform-button-close { float: right; cursor: pointer; font-size: 18px; margin: 1px 0 0; transition: all 0.2s; background: none; border: 0; outline: 0; height: auto; color: red; text-align: right !important; width: 20px; padding: 0; }
128 | .ui-largeform-title .ui-largeform-button-close:hover { transform: scale(1.1); }
129 | .ui-largeform-title > span { font-weight: bold; }
130 | .ui-largeform-title i { margin-right: 7px; }
131 | .ui-largeform > nav { padding: 0 15px 0; border-top: 1px solid #E0E0E0; background-color: #FFF; border-radius: 0 0 3px 3px; line-height: 65px; height: 65px; display: block; float: none; width: 100%; }
132 | .ui-largeform > nav button { border: 0; margin: 15px 0 0; background-color: #F0F0F0; height: 34px; padding: 0 20px; color: #000; cursor: pointer; font-family: Arial; line-height: 34px; vertical-align: middle; outline: 0; font-size: 14px; text-decoration: none; transition: all 0.3s; float: left; width: 50%; }
133 | .ui-largeform > nav button i { width: 15px; text-align: center; margin-right: 5px; }
134 | .ui-largeform > nav button:hover { opacity: 0.9; }
135 | .ui-largeform > nav button:active { background-color: #D0D0D0; }
136 | .ui-largeform > nav button:disabled { background-color: #F5F5F5 !important; border-color: #E0E0E0 !important; color: silver !important; cursor: not-allowed; box-shadow: none; }
137 | .ui-largeform > nav button:disabled i { color: silver !important; }
138 | .ui-largeform > nav button:first-child { border-top-left-radius: 5px; border-bottom-left-radius: 5px; }
139 | .ui-largeform > nav button:last-child { border-top-right-radius: 5px; border-bottom-right-radius: 5px; }
140 | .ui-largeform > nav button[name='submit'] { font-weight: bold; background-color: var(--color); color: #FFF; font-size: 14px; }
141 | .ui-largeform-style-2 .ui-largeform { border-bottom-right-radius: 0; border-bottom-left-radius: 0; }
142 |
143 | .ui-dark .ui-largeform { background-color: #202020; }
144 | .ui-dark .ui-largeform-container { background-color: rgba(50,50,50,0.9); }
145 | .ui-dark .ui-largeform-title { background-color: #202020; border-bottom-color: #303030; color: #FFF; }
146 | .ui-dark .ui-largeform > nav { background-color: #202020; border-top-color: #303030; }
147 | .ui-dark .ui-largeform > nav button { border-color: #202020; background-color: #505050; color: #E0E0E0; }
148 | .ui-dark .ui-largeform > nav button[name='submit'] { background-color: var(--color); }
149 | .ui-dark .ui-largeform > nav button:active { background-color: #404040; }
150 | .ui-dark .ui-largeform > nav button:disabled i { color: #606060 !important; }
151 | .ui-dark .ui-largeform > nav button:disabled { background-color: #303030 !important; color: #606060 !important; border-color: #202020 !important; }
152 |
153 | @media(max-width: 768px) {
154 | .ui-largeform-container { background: none; padding: 0; }
155 | .ui-largeform { border-radius: 0; }
156 | }
157 |
158 | .ui-checkbox { margin-bottom: 5px; line-height: 10px; font-size: 12px; }
159 | .ui-checkbox span { cursor: pointer; vertical-align: middle; }
160 | .ui-checkbox div { position: relative; display: inline-block; width: 16px; height: 16px; border: 1px solid #D0D0D0; margin-right: 6px; vertical-align: middle; cursor: pointer; color: #FFF; font-size: 11px; text-align: center; padding: 0 0 0 1px; background-color: #FFF; border-radius: 2px; }
161 | .ui-checkbox div .fa { display: none; }
162 | .ui-checkbox-checked div { background-color: var(--color); border-color: var(--color); }
163 | .ui-checkbox-checked div .fa { display: block !important; line-height: 15px; }
164 | .ui-checkbox.ui-disabled div { background-color: #F0F0F0 !important; border-color: #E0E0E0 !important; color: gray !important; }
165 |
166 | .ui-large .ui-checkbox { font-size: 16px; }
167 | .ui-large .ui-checkbox div { width: 20px; height: 20px; font-size: 14px; }
168 | .ui-large .ui-checkbox div .fa { line-height: 19px; }
169 |
170 | .ui-input { position: relative; font-size: 13px; }
171 | .ui-input-required .ui-input-control { border-color: #D0D0D0; }
172 | .ui-input-label { margin-bottom: 3px; font-size: 12px; }
173 | .ui-input-label i { margin-right: 4px; }
174 | .ui-input-required .ui-input-label:before { content: '***'; color: red; margin-right: 3px; }
175 | .ui-input-control { border: 1px solid #E0E0E0; border-radius: 3px; height: 32px; background-color: #FFF; }
176 | .ui-input-input { padding: 6px 2px 0 6px; position: relative; line-height: 20px; }
177 | .ui-input-placeholder { position: absolute; color: gray; margin: 0; user-select: none; cursor: text; width: 100%; text-align: left; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
178 | .ui-input-control input { border: 0; outline: 0; background-color: #FFF; width: 100%; padding: 0; margin: 0; line-height: 16px; font-size: 13px; color: #000000; font-family: Arial; }
179 | .ui-input-control .ui-input-value { line-height: 19px; height: 18px; cursor: pointer; border-radius: 2px; outline: 0; }
180 | .ui-input-control input::-ms-expand { display: none; }
181 | .ui-input-icon-left { width: 32px; height: 30px; line-height: 32px; float: left; text-align: center; border-right: 1px solid #E0E0E0; }
182 | .ui-input-icon-right { width: 32px; height: 30px; line-height: 32px; float: right; border-left: 1px solid #E0E0E0; text-align: center; }
183 | .ui-input-required .ui-input-icon-left { border-color: #D0D0D0; }
184 | .ui-input-required .ui-input-icon-right { border-color: #D0D0D0; }
185 | .ui-input-ricon .ui-input-input { margin-right: 35px; }
186 | .ui-input-licon .ui-input-input { margin-left: 32px; }
187 | .ui-input-ricon .fa-times, .ui-input-licon .fa-times { color: red; }
188 | .ui-input-value { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; }
189 | .ui-input-click { cursor: pointer; }
190 | .ui-input-error { margin-top: 7px; font-size: 11px; color: red; }
191 | .ui-input .right input, .ui-input .right .ui-input-placeholder { text-align: right; }
192 | .ui-input .center input, .ui-input .center .ui-input-placeholder { text-align: center; }
193 | .ui-input-dropdown, .ui-input-dropdown input, .ui-input-dropdown .ui-input-placeholder { cursor: pointer; }
194 | .ui-input-invalid .ui-input-control, .ui-input-invalid .ui-input-icon-left, .ui-input-invalid .ui-input-icon-right { border-color: red; }
195 | .ui-input.ui-disabled .ui-input-control { background-color: #F0F0F0; }
196 | .ui-input.ui-disabled input { background-color: #F0F0F0; color: #A0A0A0; }
197 | .ui-input.ui-disabled .ui-input-placeholder { color: #A0A0A0; }
198 | .ui-input.ui-disabled .ui-input-icon-left, .ui-input.ui-disabled .ui-input-icon-right { color: gray; }
199 | .ui-input-increment { padding: 5px 0 0; }
200 | .ui-input-increment i { display: block; line-height: 10px; font-size: 15px; cursor: pointer; }
201 | .ui-input-inner { line-height: 17px; }
202 | .ui-input-inner .ui-input-label { position: absolute; z-index: 1; margin: 11px 0 0 7px; font-size: 13px; }
203 | .ui-input-inner.ui-input-binded .ui-input-label { font-size: 11px; margin-top: 3px; color: gray; }
204 | .ui-input-inner .ui-input-input { padding-top: 9px; }
205 | .ui-input-binded.ui-input-inner .ui-input-input { padding-top: 15px; }
206 | .ui-input-inner .ui-input-control { height: 38px; }
207 | .ui-input-inner .ui-input-icon-left, .ui-input-inner .ui-input-icon-right { height: 37px; line-height: 37px; }
208 | .ui-input-inner.ui-input-required .ui-input-label:before { content: '*'; }
209 | .ui-input-inner .ui-input-increment { padding: 8px 0 0; }
210 | .ui-input-inner .ui-input-increment i { line-height: 10px; }
211 | .ui-input-masked input { letter-spacing: 1px; font-family: Menlo,Consolas,monospace; }
212 | .ui-input-monospace input { font-family: Menlo,Consolas,monospace; }
213 | .ui-input-icon-custom { font-size: 11px; }
214 | .ui-input-inner .ui-input-value { line-height: 13px; height: 14px; margin-top: 3px; font-size: 13px !important; }
215 | .ui-input-type-icon .ui-input-value, .ui-input-type-emoji .ui-input-value { font-size: 15px; }
216 | .ui-input-type-icon .ui-input-control, .ui-input-type-color .ui-input-control, .ui-input-type-color .ui-input-emoji { cursor: pointer; }
217 |
218 | .ui-menu { position: absolute; z-index: 100; transform-origin: top left; }
219 | .ui-menu-items { background-color: #FFF; padding: 5px 0; border-radius: 3px; box-shadow: 2px 5px 10px rgba(0,0,0,0.05); border: 1px solid #E0E0E0; position: relative; }
220 | .ui-menu-submenu { position: absolute; z-index: 101; background-color: #FFF; padding: 5px 0; border-radius: 3px; box-shadow: 2px 5px 10px rgba(0,0,0,0.05); border: 1px solid #E0E0E0; }
221 | .ui-menu-visible {}
222 | .ui-menu ul { margin: 0; padding: 0; }
223 | .ui-menu li { margin: 0; padding: 5px; list-style-type: none; font-size: 12px; cursor: pointer; max-width: 220px; }
224 | .ui-menu-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding-right: 15px; }
225 | .ui-menu-note { font-size: 10px; margin: 0 10px 3px 35px; color: #A0A0A0; line-height: 11px; }
226 | .ui-menu-nofa .ui-menu-note { margin-left: 0; }
227 | .ui-menu-selected { background-color: #F5F5F5; }
228 | .ui-menu li:hover { background-color: #F0F0F0; }
229 | .ui-menu-nofa { padding-left: 12px !important; }
230 | .ui-menu .pull-right { margin: 1px 5px 0 0; width: 20px; text-align: right; font-size: 10px; }
231 | .ui-menu-name i { width: 30px; margin: 0 5px 0 0; text-align: center; color: #000; }
232 | .ui-menu-name b { position: absolute; right: 10px; font-size: 11px; color: gray; margin: 1px 5px 0; }
233 | .ui-menu-divider { padding: 0 !important; background: transparent !important; cursor: default !important; color: gray; font-size: 11px !important; }
234 | .ui-menu-divider span { display: block; margin: 5px 12px; }
235 | .ui-menu-divider hr { margin: 5px 0; border-color: #E0E0E0; }
236 | .ui-menu li.ui-menu-disabled { color: #a0a0a0; background-color: #FFF; cursor: not-allowed; }
237 | .ui-menu li.ui-menu-disabled i { color: #c5c5c5; }
238 |
239 | .ui-menu-style-2 .ui-menu-items { border-radius: 5px; }
240 | .ui-menu-style-2 li { margin: 2px 10px; padding: 7px 2px; border-radius: 5px; font-size: 13px; }
241 | .ui-menu-style-2 .pull-right { margin-top: 3px; }
242 | .ui-menu-style-2 .ui-menu-submenu { border-radius: 5px; }
243 | .ui-menu-style-2 .ui-menu-divider { margin: 7px 0; }
244 | .ui-menu-style-2 .ui-menu-divider span { padding-left: 10px; }
245 |
246 | .ui-large .ui-menu-divider { font-size: 14px !important; }
247 | .ui-large .ui-menu li { font-size: 14px; padding: 7px 15px; }
248 | .ui-large.ui-menu li { font-size: 14px; padding: 7px 15px; }
249 | .ui-large .ui-menu-note { font-size: 13px; }
250 |
251 | .ui-checkboxlistexpert { color: #000000; font-size: 14px; vertical-align: baseline; position: relative; }
252 | .ui-checkboxlistexpert-label { margin-bottom: 5px; font-size: 12px; text-align: left; }
253 | .ui-checkboxlistexpert-label-required:before { color: red; content: '***'; margin-right: 5px; }
254 | .ui-large .ui-checkboxlistexpert-label { font-size: 14px; }
255 | .ui-checkboxlistexpert-container { }
256 |
257 | .ui-radiobuttonexpert { color: #000000; font-size: 14px; vertical-align: baseline; position: relative; }
258 | .ui-radiobuttonexpert-label { margin-bottom: 5px; font-size: 12px; text-align: left; }
259 | .ui-radiobuttonexpert-label-required:before { color: red; content: '***'; margin-right: 5px; }
260 | .ui-large .ui-radiobuttonexpert-label { font-size: 14px; }
261 | .ui-radiobuttonexpert-container { }
262 |
263 | .ui-colorselector { margin: 0; padding: 0; list-style-type: none; }
264 | .ui-colorselector li { position: relative; display: inline-block; width: 10%; margin: 10px 0; height: 20px; vertical-align: middle; cursor: pointer; }
265 | .ui-colorselector li:first-child { border-top-left-radius: 2px; border-bottom-left-radius: 2px; }
266 | .ui-colorselector li:last-child { border-top-right-radius: 2px; border-bottom-right-radius: 2px; }
267 | .ui-colorselector .selected { margin: 0; height: 30px; }
268 | .ui-colorselector-label { font-size: 12px; color: #656D78; }
269 | .ui-colorselector.ui-disabled li { cursor: not-allowed; opacity: 0.9; }
270 |
271 | .ui-form-noscroll, .ui-form-noscroll body { overflow: hidden; }
272 | .ui-form-container { width: 100%; position: fixed; left: 0; top: 0; bottom: 0; right: 0; background-color: rgba(230,233,237,0.8); z-index: 5; overflow-y: scroll; transform-style: preserve-3d; overflow-scrolling: touch; }
273 | .ui-form { background-color: #FFF; margin: 0 auto 30px; border-radius: 3px; box-shadow: 0 0 30px rgba(0,0,0,0.05); transform: translate(0, -500px); transition: all 0.2s; opacity: 0; }
274 | .ui-form-animate { transform: skewX(0deg); opacity: 1; }
275 | .ui-form .padding { padding: 15px; }
276 | .ui-form-title { padding: 18px 15px 18px 15px; font-size: 16px; user-select: none; color: #000; background-color: #FFF; border-bottom: 1px solid #E0E0E0; height: 58px; }
277 | .ui-form-title .ui-form-button-close { float: right; cursor: pointer; font-size: 18px; margin: -2px 0 0 0; transition: all 0.2s; background: none; border: 0; outline: 0; height: auto; color: red; text-align: right !important; width: 20px; padding: 0; }
278 | .ui-form-title .ui-form-button-close:hover { transform: scale(1.2); }
279 | .ui-form-title > span { font-weight: bold; }
280 | .ui-form-title > i { margin-right: 7px; }
281 | .ui-form > nav { padding: 0 15px 0; border-top: 1px solid #E0E0E0; background-color: #FFF; border-radius: 0 0 2px 2px; line-height: 65px; height: 65px; display: block; float: none; position: relative; }
282 | .ui-form > nav button { border: 0; margin: 15px 0 0; background-color: #F0F0F0; height: 34px; padding: 0 20px; color: #000; cursor: pointer; font-family: Arial; line-height: 34px; vertical-align: middle; outline: 0; font-size: 14px; text-decoration: none; transition: all 0.3s; float: left; width: 50%; }
283 | .ui-form > nav button i { width: 15px; text-align: center; margin-right: 5px; }
284 | .ui-form > nav button:hover { opacity: 0.9; }
285 | .ui-form > nav button:active { background-color: #D0D0D0; }
286 | .ui-form > nav button:disabled { background-color: #F5F5F5 !important; border-color: #E0E0E0 !important; color: silver !important; cursor: not-allowed; box-shadow: none; }
287 | .ui-form > nav button:first-child { border-top-left-radius: 5px; border-bottom-left-radius: 5px; }
288 | .ui-form > nav button:last-child { border-top-right-radius: 5px; border-bottom-right-radius: 5px; }
289 | .ui-form > nav button[name='submit'] { font-weight: bold; background-color: var(--color); color: #FFF; font-size: 14px; }
290 |
291 | @media(max-width: 767px) {
292 | .ui-form-container-padding { padding: 0; }
293 | .ui-form > nav button[name='submit'] { max-width: 180px; }
294 | }
295 |
296 | @media(max-width: 350px) {
297 | .ui-form-container-padding { padding: 0; }
298 | .ui-form > nav button[name='submit'] { max-width: 150px; }
299 | }
300 |
301 | .ui-floatinginput { position: absolute; opacity: 0; transition: 0.25s transform cubic-bezier(0.23, 1, 0.32, 1); left: -100; top: -100; z-index: 100; box-shadow: 0 1px 20px rgba(0,0,0,0.1); background-color: #FFF; border-radius: 3px; border: 1px solid #E0E0E0; overflow: hidden; transition: all 0.2s; }
302 | .ui-floatinginput-input { height: 38px; background: #FFF; border-radius: 3px 3px 0 0; line-height: 22px; }
303 | .ui-floatinginput-input input { width: 100%; background-color: #FFF; border: 0; font-size: 12px; outline: 0; padding: 0; margin: 0; line-height: 16px; outline: 0; }
304 | .ui-floatinginput-input > div { margin: 0 30px 0 35px; padding: 6px 10px 0 0; line-height: 24px; }
305 | .ui-floatinginput-input > span { float: left; width: 16px; text-align: center; padding: 8px 0 0 12px; font-size: 12px; }
306 | .ui-floatinginput-add { float: right !important; padding-left: 0 !important; color: #83c83c; text-align: left !important; font-size: 11px !important; cursor: pointer; width: 22px !important; }
307 | .ui-floatinginput-visible { opacity: 1; }
308 | .ui-floatinginput-summary { font-size: 11px; color: gray; border-bottom: 1px solid #E0E0E0; padding: 5px 10px 8px; line-height: 14px; }
309 | .ui-floatinginput-summary code { background-color: #F8F8F8; padding: 1px 2px; border-radius: 2px; }
310 | .ui-floatinginput-monospace input { font-family: Menlo,Consolas,monospace; }
311 |
312 | .ui-pin-input { width: 44px; border: 2px solid #000000; position: relative; display: inline-block; margin: 0 8px 8px 0; border-radius: 4px; padding: 8px 2px; background-color: #FFF; }
313 | .ui-pin-input input { width: 100%; border: 0; background-color: #FFF; outline: 0; font-size: 20px; text-align: center; font-weight: bold; border-radius: 0; appearance: none; color: #000000; }
314 | .ui-pin-invalid .ui-pin-input, .ui-pin-invalid input { background-color: #FFF3F3; }
315 | .ui-disabled .ui-pin-input { background-color: #F0F0F0; border-color: #D0D0D0; }
316 | .ui-disabled .ui-pin-input input { background-color: #F0F0F0; cursor: not-allowed; color: gray; }
317 |
318 | .animation { visibility: hidden; }
319 | .ui-animation-1-init { transition: all 0.2s; opacity: 0; }
320 | .ui-animation-1-run { opacity: 1; }
321 | .ui-animation-2-init { transition: all 0.2s; transform: scale(1.5); }
322 | .ui-animation-2-run { transform: scale(1); }
323 | .ui-animation-3-init { transition: all 0.2s; transform: scale(0.5); }
324 | .ui-animation-3-run { transform: scale(1); }
325 | .ui-animation-4-init { transition: all 0.2s; transform: rotateY(-90deg); }
326 | .ui-animation-4-run { transform: rotateY(-1deg); }
327 | .ui-animation-5-init { transition: all 0.2s; transform: translate(-100px); opacity: 0; }
328 | .ui-animation-5-run { transform: translate(0); opacity: 1; }
329 | .ui-animation-6-init { transition: all 0.2s; transform: translate(0, -100px); opacity: 0; }
330 | .ui-animation-6-run { transform: translate(0, 0); opacity: 1; }
331 |
332 | .ui-contenteditable { outline: 0; background-color: #FFF; color: #000; font-size: 16px; border: 1px solid #E0E0E0; padding: 15px; border-radius: 5px; }
333 | .ui-contenteditable-invalid { background-color: #FFF3F3; }
334 |
335 | .ui-approve-noscroll, .ui-approve-noscroll body { overflow: hidden; }
336 | .ui-approve { background-color: rgba(0,0,0,0.8); position: fixed; left: 0; right: 0; bottom: 0; top: 0; z-index: 100; width: 100%; display: table; height: 100%; transition: 0.5s all; opacity: 0; }
337 | .ui-approve > div { display: table-cell; vertical-align: middle; text-align: center; color: #FFFFFF; padding: 15px; }
338 | .ui-approve-body { color: #000000; padding: 0; position: relative; display: inline-block; max-width: 300px; text-align: left; transform: scale(0.8); transition: 0.15s all; border: 0; background-color: #FFFFFF; box-shadow: 0 0 30px rgba(0,0,0,0.1);}
339 | .ui-approve-content { padding: 50px 30px; text-align: center; }
340 | .ui-approve-content > i { font-size: 50px; display: block; margin-bottom: 10px; }
341 | .ui-approve-buttons { height: 40px; }
342 | .ui-approve button { font-size: 12px; float: left; cursor: pointer; outline: 0; background-color: #E0E0E0; border: 0; border-radius: 0; color: gray; padding: 0; width: 50%; height: 40px; font-weight: normal; margin: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
343 | .ui-approve button i { margin-right: 5px; }
344 | .ui-approve button:hover { opacity: 0.9; }
345 | .ui-approve-close { position: absolute; color: #C0C0C0; font-size: 11px; right: 8px; top: 5px; cursor: pointer; }
346 | .ui-approve-close:hover { color: #A0A0A0; }
347 | .ui-approve-visible { opacity: 1; }
348 | .ui-approve-visible .ui-approve-body { -webkit-transform: scale(1); transform: scale(1); }
349 | .ui-approve-click { transform: scale(1.07) !important; }
350 |
351 | .ui-approve button[data-index='0'] { color: #FFFFFF; font-weight: bold; font-weight: bold; background-color: #EC2C28; }
352 |
353 | @media(max-width: 340px) {
354 | .ui-approve button { display: block; margin: 8px 0 0; display: block; width: 100%; height: 34px; font-size: 13px; }
355 | }
356 |
357 | .ui-wysiwyg-toolbar { border-radius: var(--radius) var(--radius) 0 0; border: 1px solid #E0E0E0; height: 45px; padding-left: 10px; }
358 | .ui-wysiwyg-toolbar button { float: left; width: 24px; height: 24px; line-height: 24px; outline: 0; text-align: center; border: 0; background-color: #FFF; margin: 10px 5px 0 0; font-size: 12px; border-radius: var(--radius); }
359 | .ui-wysiwyg-toolbar button:hover, .ui-wysiwyg-toolbar button.selected { background-color: #F0F0F0; }
360 | .ui-wysiwyg-body { outline: 0; background-color: #FFF; color: #000; border: 1px solid #E0E0E0; border-top: 0; padding: 15px 10px; border-radius: 0 0 var(--radius) var(--radius); position: relative; display: inline-block; width: 100%; }
361 | .ui-wysiwyg-placeholder { position: absolute; margin: 15px 0 0 15px; color: #A0A0A0; cursor: text; z-index: 1; }
362 | .ui-wysiwyg .marked { background-color: rgba(0,0,0,0.1); padding: 0 2px; border-radius: var(--radius); }
363 | .ui-wysiwyg code { font-family: Menlo, Consolas, monospace; color: #000; font-size: 13px; background-color: #F0F0F0; padding: 0 3px; border-radius: var(--radius); }
364 |
365 | .ui-directory { position: absolute; opacity: 0; transition: 0.25s transform cubic-bezier(0.23, 1, 0.32, 1); left: -100; top: -100; z-index: 100; box-shadow: 0 1px 20px rgba(0,0,0,0.1); background-color: #FFF; border-radius: var(--radius); border: 1px solid #E0E0E0; overflow: hidden; transition: all 0.2s; }
366 | .ui-directory-search { height: 38px; background: #FFF; border-radius: var(--radius) var(--radius) 0 0; border-bottom: 1px solid #E0E0E0; line-height: 22px; }
367 | .ui-directory-search input { width: 100%; background-color: #FFF; border: 0; font-size: 12px; outline: 0; padding: 0; margin: 0; line-height: 16px; outline: 0; }
368 | .ui-directory-search > div { margin: 0 30px 0 35px; padding: 6px 10px 0 0; line-height: 24px; }
369 | .ui-directory-search > span { float: left; width: 16px; text-align: center; padding: 8px 0 0 12px; font-size: 12px; }
370 | .ui-directory-add { float: right !important; padding-left: 0 !important; color: #83c83c; text-align: left !important; font-size: 11px !important; cursor: pointer; width: 22px !important; }
371 | .ui-directory-search .fa-times { color: red; cursor: pointer; }
372 | .ui-directory-visible { opacity: 1; }
373 | .ui-directory-container { height: 150px; overflow-x: hidden; overflow-y: auto; overflow-scrolling: touch; margin: 0 30px 0 0; padding: 0; }
374 | .ui-directory ul { list-style-type: none; margin: 0; padding: 0; }
375 | .ui-directory .selected { background-color: #F8F8F8; color: #000; }
376 | .ui-directory .current { background-color: #F2F2F2; color: #000; }
377 | .ui-directory-default li { padding: 0 40px 0 10px; height: 26px; line-height: 26px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
378 | .ui-directory li { border-bottom: 1px solid #F0F0F0; font-size: 12px; background-color: #FFF; cursor: pointer; margin: 0; }
379 | .ui-directory-checkbox { width: 16px; height: 16px; float: left; border: 1px solid #D0D0D0; border-radius: var(--radius); font-size: 10px; line-height: 16px; margin: 4px 6px 0 0; text-align: center; background-color: #FFF; }
380 | .ui-directory-checkbox i { visibility: hidden; }
381 | .ui-directory .selected .ui-directory-checkbox { background-color: #4285F4; border-color: #4285F4; color: #FFF; }
382 | .ui-directory .selected .ui-directory-checkbox i { visibility: visible; }
383 | .ui-directory li:last-child { border-bottom: 0; }
384 | .ui-directory-search-hidden .ui-directory-search { height: 0; overflow: hidden; opacity: 0; }
385 |
386 | .ui-datepicker-container { position: absolute; left: 0; right: 0; bottom: 0; top: 0; z-index: 99; }
387 | .ui-datepicker { font-size: 12px; width: 247px; height: 300px; position: absolute; background-color: #FFF; border: 1px solid #E0E0E0; left: 100px; top: 100px; border-radius: var(--radius); z-index: 100; color: gray; box-shadow: 0 5px 25px rgba(0,0,0,0.1); opacity: 0; transform: scale(0.6); transition: all 0.2s; }
388 | .ui-datepicker-visible { transform: scale(1); opacity: 1; }
389 | .ui-datepicker-disabled { color: silver !important; cursor: pointer; }
390 | .ui-datepicker-body, .ui-datepicker-months, .ui-datepicker-years { height: 235px; }
391 | .ui-datepicker-footer { height: 28px; border-top: 1px solid #E0E0E0; font-size: 11px; padding: 0 8px; line-height: 26px; background-color: #F8F8F8; display: flex; justify-content: space-between; }
392 | .ui-datepicker-footer > span:hover { text-decoration: underline; }
393 | .ui-datepicker-now, .ui-datepicker-clear { color: #000; cursor: pointer; }
394 | .ui-datepicker-today div { background-color: #F0F0F0; font-weight: bold; }
395 | .ui-datepicker-selected div { background-color: #F8F7DA; font-weight: bold; color: #000; }
396 | .ui-datepicker-date i { position: absolute; left: 15px; top: 26px; font-size: 6px; color: red; }
397 | .ui-datepicker-months > div { width: 61px; height: 78px; line-height: 76px; position: relative; display: inline-block; text-align: center; cursor: pointer; text-transform: uppercase; font-weight: bold; }
398 | .ui-datepicker-months > div > div { width: 50px; height: 50px; line-height: 46px; position: relative; display: inline-block; border-radius: 100%; border: 2px solid transparent; }
399 | .ui-datepicker-months > div:hover > div { border-color: #E0E0E0; color: #000; }
400 | .ui-datepicker-years { padding: 5px 0 0; }
401 | .ui-datepicker-years > div { width: 49px; height: 46px; line-height: 44px; position: relative; display: inline-block; text-align: center; cursor: pointer; }
402 | .ui-datepicker-years > div > div { width: 40px; height: 40px; line-height: 36px; position: relative; display: inline-block; border-radius: 100%; border: 2px solid transparent; }
403 | .ui-datepicker-years > div:hover > div { border-color: #E0E0E0; color: #000;}
404 | .ui-datepicker-header { height: 35px; border-bottom: 1px solid #E0E0E0; text-align: center; font-size: 14px; }
405 | .ui-datepicker-prev { float: left; line-height: 34px; width: 34px; color: #000; cursor: pointer; }
406 | .ui-datepicker-next { float: right; line-height: 34px; width: 34px; color: #000; cursor: pointer; }
407 | .ui-datepicker-prev:hover, .ui-datepicker-next:hover { background-color: #F0F0F0; }
408 | .ui-datepicker-info { margin: 0 34px; line-height: 34px; }
409 | .ui-datepicker-info > span { cursor: pointer; }
410 | .ui-datepicker-info > span:hover { color: #000; }
411 | .ui-datepicker-info .ui-datepicker-year { margin-left: 5px; }
412 | .ui-datepicker-week > div, .ui-datepicker-days > div { width: 35px; height: 35px; line-height: 35px; position: relative; display: inline-block; vertical-align: middle; text-align: center; }
413 | .ui-datepicker-week > div { height: 25px; line-height: 25px; font-weight: bold; color: #000; border-bottom: 1px solid #E0E0E0; }
414 | .ui-datepicker-days > div { font-size: 11px; cursor: pointer; }
415 | .ui-datepicker-date:hover > div { border-color: #E0E0E0; color: #000; }
416 | .ui-datepicker-days > div > div { width: 28px; height: 28px; line-height: 24px; border-radius: 100%; margin: 0 auto; position: relative; display: inline-block; border: 2px solid transparent; }
417 |
418 | .ui-colorpicker-container { position: absolute; z-index: 109; }
419 | .ui-colorpicker { border: 1px solid #E0E0E0; font-size: 14px; color: #000; width: 254px; background-color: #FFF; box-shadow: 0 5px 10px rgba(0,0,0,0.08); border-radius: var(--radius); overflow: hidden; margin: 0; padding: 7px 0 3px; }
420 | .ui-colorpicker-body { text-align: center; }
421 | .ui-colorpicker-body div:nth-child(1) { margin-bottom: 0; }
422 | .ui-colorpicker-body div:nth-child(2) { margin-bottom: 8px; padding-bottom: 2px; border-bottom: 1px solid #E0E0E0; }
423 | .ui-colorpicker-cell { cursor: pointer; width: 20px; height: 16px; display: inline-block; vertical-align: top; }
424 | .ui-colorpicker-cell span { display: block; height: 16px; margin: 0 2px; border-radius: 2px; border: 1px solid rgba(0,0,0,0.1); font-size: 9px; line-height: 15px; color: red; }
425 | .ui-colorpicker-body span:hover { border-color: rgba(0,0,0,0.3); }
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/totaljs/hello/ebec022a9df626008b7b1a1fec6ad595ff8dd300/public/favicon.ico
--------------------------------------------------------------------------------
/public/forms/card.html:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
21 |
@(Who will be solver?)
22 |
23 |
24 |
32 |
33 |
34 |
@(Labels)
35 |
36 |
37 |
45 |
46 |
47 |
@(Tasks)
48 |
60 |
61 |
62 |
63 |
64 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/public/forms/detail.html:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/public/forms/labels.html:
--------------------------------------------------------------------------------
1 |
2 |
25 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/public/forms/project.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
@(Name)
4 |
@(Company)
5 |
13 |
14 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/public/forms/projects.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
13 |
24 |
25 |
26 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/public/forms/settings.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
@(Name)
4 |
@(Total.js API key)
5 |
6 |
7 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/public/forms/stats.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Coming soon.
4 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/public/forms/user.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
@(Name)
4 |
@(E-mail address)
5 |
@(Administrator)
6 |
@(Disabled)
7 |
8 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/public/forms/users.html:
--------------------------------------------------------------------------------
1 |
2 |
28 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/public/js/default.js:
--------------------------------------------------------------------------------
1 | var TTIC = ['#1abc9c','#2ecc71','#3498db','#9b59b6','#34495e','#16a085','#2980b9','#8e44ad','#2c3e50','#f1c40f','#e67e22','#e74c3c','#d35400','#c0392b'];
2 |
3 | Thelpers.initials = function(value, fullname) {
4 |
5 | var initials;
6 |
7 | if (fullname) {
8 | initials = value;
9 | } else {
10 | var index = value.indexOf('.');
11 | var arr = value.substring(index + 1).replace(/\s{2,}/g, ' ').trim().split(' ');
12 | initials = ((arr[0].substring(0, 1) + (arr[1] || '').substring(0, 1))).toUpperCase();
13 | }
14 |
15 | var sum = 0;
16 | for (var i = 0; i < value.length; i++)
17 | sum += value.charCodeAt(i);
18 |
19 | return '{0}'.format(initials, TTIC[sum % TTIC.length], value);
20 | };
21 |
22 | Thelpers.color = function(value) {
23 | var hash = HASH(value, true);
24 | var color = '#';
25 | for (var i = 0; i < 3; i++) {
26 | var value = (hash >> (i * 8)) & 0xFF;
27 | color += ('00' + value.toString(16)).substr(-2);
28 | }
29 | return color;
30 | };
31 |
--------------------------------------------------------------------------------
/views/index.html:
--------------------------------------------------------------------------------
1 | @{layout('')}
2 | @{title('Hello')}
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | @{import('meta', 'head', 'default.js + ui.js', 'default.css + ui.css', 'favicon.ico')}
15 | @{if PREF.settings && PREF.settings.color}
16 |
21 | @{fi}
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
44 |
45 |
46 |
47 | @{if user.sa}
48 |
49 |
50 |
51 |
52 |
53 | @{fi}
54 |
55 |
56 |
57 |
58 |
59 |
60 |
67 |
68 |
96 |
97 |
98 |
99 |
100 | @{json(user, 'userdata')}
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
641 |
642 |
643 |
--------------------------------------------------------------------------------
/views/login.html:
--------------------------------------------------------------------------------
1 | @{layout('')}
2 | @{title('Hello')}
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | @{import('meta', 'head', 'default.css + ui.css', 'default.js + ui.js', 'favicon.ico')}
15 | @{if PREF.settings && PREF.settings.color}
16 |
21 | @{fi}
22 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
@(Hello)
36 |
@(Email address)
37 |
38 |
@(Please enter the code which you will receive on your e-mail address.)
39 |
@(Code)
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
66 |
67 |
68 |
--------------------------------------------------------------------------------