├── .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 | ![Hello app](http://cdn.totaljs.com/images/hello.png) 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 | 69 | 70 | -------------------------------------------------------------------------------- /public/forms/detail.html: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /public/forms/labels.html: -------------------------------------------------------------------------------- 1 | 29 | 30 | -------------------------------------------------------------------------------- /public/forms/project.html: -------------------------------------------------------------------------------- 1 | 19 | 20 | -------------------------------------------------------------------------------- /public/forms/projects.html: -------------------------------------------------------------------------------- 1 | 30 | 31 |
32 | 33 | -------------------------------------------------------------------------------- /public/forms/settings.html: -------------------------------------------------------------------------------- 1 | 12 | 13 | -------------------------------------------------------------------------------- /public/forms/stats.html: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /public/forms/user.html: -------------------------------------------------------------------------------- 1 | 13 | 14 | -------------------------------------------------------------------------------- /public/forms/users.html: -------------------------------------------------------------------------------- 1 | 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 | 41 |
42 | 43 |
44 |
45 |
46 |
47 | 48 | 66 | 67 | 68 | --------------------------------------------------------------------------------