Shield Security for WordPress - Version 9.1.0

Version Description

Download this release

Release Info

Developer paultgoodchild
Plugin Icon 128x128 Shield Security for WordPress
Version 9.1.0
Comparing to
See all releases

Code changes from version 9.0.4 to 9.1.0

Files changed (101) hide show
  1. icwp-wpsf.php +1 -1
  2. plugin-spec.php +28 -22
  3. readme.txt +21 -38
  4. resources/css/bootstrap4.css +128 -74
  5. resources/css/bootstrap4.min.css +4 -4
  6. resources/css/plugin.css +4 -0
  7. resources/js/bootstrap4.bundle.js +515 -616
  8. resources/js/bootstrap4.bundle.min.js +3 -3
  9. resources/js/bootstrap4.js +516 -617
  10. resources/js/bootstrap4.min.js +3 -3
  11. resources/js/global-plugin.js +1 -1
  12. resources/js/shield-scans.js +0 -2
  13. resources/js/shield-u2f-admin.js +67 -0
  14. resources/js/shield-userprofile.js +21 -0
  15. resources/js/u2f-bundle.js +830 -0
  16. resources/js/u2f-frontend.js +42 -0
  17. src/config/feature-admin_access_restriction.php +10 -7
  18. src/config/feature-comments_filter.php +3 -3
  19. src/config/feature-email.php +3 -0
  20. src/config/feature-events.php +3 -0
  21. src/config/feature-firewall.php +5 -1
  22. src/config/feature-hack_protect.php +4 -1
  23. src/config/feature-insights.php +3 -0
  24. src/config/feature-login_protect.php +21 -9
  25. src/config/feature-plugin.php +13 -1
  26. src/config/feature-sessions.php +3 -0
  27. src/features/admin_access_restriction.php +25 -6
  28. src/features/base.php +75 -11
  29. src/features/base_wpsf.php +5 -36
  30. src/features/firewall.php +0 -26
  31. src/features/hack_protect.php +0 -61
  32. src/features/insights.php +1 -1
  33. src/features/login_protect.php +0 -68
  34. src/features/plugin.php +1 -25
  35. src/features/traffic.php +0 -24
  36. src/features/user_management.php +0 -9
  37. src/lib/custom/U2F/Yubico/U2F.php +572 -0
  38. src/lib/src/Controller/Controller.php +31 -14
  39. src/lib/src/Controller/Utilities/Upgrade.php +26 -0
  40. src/lib/src/Databases/Base/Handler.php +53 -1
  41. src/lib/src/Databases/IPs/Handler.php +12 -16
  42. src/lib/src/License/EddLicenseVO.php +2 -1
  43. src/lib/src/Modules/AuditTrail/AjaxHandler.php +1 -1
  44. src/lib/src/Modules/AuditTrail/Options.php +0 -8
  45. src/lib/src/Modules/AuditTrail/WpCli.php +18 -0
  46. src/lib/src/Modules/AuditTrail/WpCli/Display.php +75 -0
  47. src/lib/src/Modules/Autoupdates/Options.php +0 -25
  48. src/lib/src/Modules/Base/Options.php +78 -53
  49. src/lib/src/Modules/Base/Options/OptValueSanitize.php +92 -0
  50. src/lib/src/Modules/Base/Strings.php +10 -6
  51. src/lib/src/Modules/Base/Upgrade.php +8 -20
  52. src/lib/src/Modules/Base/WpCli.php +39 -0
  53. src/lib/src/Modules/Base/WpCli/BaseWpCliCmd.php +130 -0
  54. src/lib/src/Modules/Base/WpCli/ModuleStandard.php +201 -0
  55. src/lib/src/Modules/BaseShield/ShieldProcessor.php +0 -46
  56. src/lib/src/Modules/CommentsFilter/Scan/Human.php +0 -2
  57. src/lib/src/Modules/CommentsFilter/Upgrade.php +13 -0
  58. src/lib/src/Modules/Events/Strings.php +2 -2
  59. src/lib/src/Modules/HackGuard/AjaxHandler.php +16 -9
  60. src/lib/src/Modules/HackGuard/Lib/FileLocker/File.php +1 -1
  61. src/lib/src/Modules/HackGuard/Lib/FileLocker/FileLockerController.php +13 -6
  62. src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/Accept.php +1 -0
  63. src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/CreateFileLocks.php +0 -1
  64. src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/Diff.php +76 -0
  65. src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/LoadFileLocks.php +6 -5
  66. src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/PerformAction.php +3 -27
  67. src/lib/src/Modules/HackGuard/Options.php +0 -84
  68. src/lib/src/Modules/HackGuard/Strings.php +2 -1
  69. src/lib/src/Modules/IPs/AjaxHandler.php +1 -1
  70. src/lib/src/Modules/IPs/Lib/Ops/AddIp.php +8 -3
  71. src/lib/src/Modules/IPs/Upgrade.php +19 -0
  72. src/lib/src/Modules/IPs/WpCli.php +20 -0
  73. src/lib/src/Modules/IPs/WpCli/Add.php +55 -0
  74. src/lib/src/Modules/IPs/WpCli/BaseAddRemove.php +32 -0
  75. src/lib/src/Modules/IPs/WpCli/Enumerate.php +54 -0
  76. src/lib/src/Modules/IPs/WpCli/Remove.php +45 -0
  77. src/lib/src/Modules/License/WpCli.php +18 -0
  78. src/lib/src/Modules/License/WpCli/License.php +123 -0
  79. src/lib/src/Modules/LoginGuard/AjaxHandler.php +44 -0
  80. src/lib/src/Modules/LoginGuard/Lib/AntiBot/IncludeJs.php +0 -25
  81. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentPage.php +22 -10
  82. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php +24 -34
  83. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaSkip.php +67 -0
  84. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Backup.php +1 -0
  85. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BaseProvider.php +22 -4
  86. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php +35 -22
  87. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php +1 -2
  88. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php +377 -0
  89. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php +24 -6
  90. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/UserProfile.php +9 -1
  91. src/lib/src/Modules/LoginGuard/Options.php +9 -0
  92. src/lib/src/Modules/LoginGuard/Strings.php +23 -7
  93. src/lib/src/Modules/Plugin/AjaxHandler.php +10 -4
  94. src/lib/src/Modules/Plugin/Components/PluginBadge.php +15 -6
  95. src/lib/src/Modules/Plugin/Lib/ImportExport/Export.php +10 -3
  96. src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php +106 -96
  97. src/lib/src/Modules/Plugin/Lib/Ops/ResetPlugin.php +23 -0
  98. src/lib/src/Modules/Plugin/Options.php +8 -1
  99. src/lib/src/Modules/Plugin/Strings.php +20 -4
  100. src/lib/src/Modules/Plugin/WpCli.php +21 -0
  101. src/lib/src/Modules/Plugin/WpCli/Export.php +25 -0
icwp-wpsf.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Shield Security
4
  * Plugin URI: https://shsec.io/2f
5
  * Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
6
- * Version: 9.0.4
7
  * Text Domain: wp-simple-firewall
8
  * Domain Path: /languages
9
  * Author: Shield Security
3
  * Plugin Name: Shield Security
4
  * Plugin URI: https://shsec.io/2f
5
  * Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
6
+ * Version: 9.1.0
7
  * Text Domain: wp-simple-firewall
8
  * Domain Path: /languages
9
  * Author: Shield Security
plugin-spec.php CHANGED
@@ -1,8 +1,8 @@
1
  {
2
- "properties": {
3
- "version": "9.0.4",
4
- "release_timestamp": 1591349642,
5
- "build": "202006.0501",
6
  "slug_parent": "icwp",
7
  "slug_plugin": "wpsf",
8
  "human_name": "Shield",
@@ -18,11 +18,11 @@
18
  "options_encoding": "json",
19
  "enable_premium": true
20
  },
21
- "requirements": {
22
  "php": "5.4.0",
23
  "wordpress": "3.5.2"
24
  },
25
- "upgrade_reqs": {
26
  "7.0": {
27
  "php": "5.4",
28
  "wp": "3.5.2"
@@ -32,16 +32,17 @@
32
  "wp": "3.5.2"
33
  }
34
  },
35
- "paths": {
36
- "source": "src",
37
- "autoload": "lib/vendor/autoload.php",
38
- "assets": "resources",
39
- "languages": "languages",
40
- "templates": "templates",
41
- "flags": "flags",
42
- "cache": "shield"
 
43
  },
44
- "includes": {
45
  "admin": {
46
  "css": [
47
  "global-plugin"
@@ -75,7 +76,7 @@
75
  "css": null
76
  }
77
  },
78
- "menu": {
79
  "show": true,
80
  "title": "Shield Security",
81
  "top_level": true,
@@ -84,7 +85,7 @@
84
  "icon_image": "pluginlogo_16x16.png",
85
  "has_submenu": true
86
  },
87
- "labels": {
88
  "Name": "Shield",
89
  "Description": "Ultimate WP Security Protection - Scans, 2FA, Firewall, SPAM, Audit Trail, Security Admin, and so much more.",
90
  "Title": "Shield Security",
@@ -96,18 +97,23 @@
96
  "icon_url_32x32": "pluginlogo_32x32.png",
97
  "icon_url_128x128": "pluginlogo_128x128.png"
98
  },
99
- "meta": {
100
- "url_repo_home": "https://shsec.io/eh",
101
  "announcekit_changelog_id": "3ObUvS",
102
- "privacy_policy_href": "https://shsec.io/shieldprivacypolicy"
103
  },
104
- "plugin_meta": [
105
  {
106
  "name": "5✩ Rate This Plugin",
107
  "href": "https://shsec.io/wpsf29"
108
  }
109
  ],
110
- "action_links": {
 
 
 
 
 
111
  "remove": null,
112
  "add": [
113
  {
1
  {
2
+ "properties": {
3
+ "version": "9.1.0",
4
+ "release_timestamp": 1592902029,
5
+ "build": "202006.2301",
6
  "slug_parent": "icwp",
7
  "slug_plugin": "wpsf",
8
  "human_name": "Shield",
18
  "options_encoding": "json",
19
  "enable_premium": true
20
  },
21
+ "requirements": {
22
  "php": "5.4.0",
23
  "wordpress": "3.5.2"
24
  },
25
+ "upgrade_reqs": {
26
  "7.0": {
27
  "php": "5.4",
28
  "wp": "3.5.2"
32
  "wp": "3.5.2"
33
  }
34
  },
35
+ "paths": {
36
+ "source": "src",
37
+ "autoload": "lib/vendor/autoload.php",
38
+ "assets": "resources",
39
+ "languages": "languages",
40
+ "templates": "templates",
41
+ "custom_templates": "shield_templates",
42
+ "flags": "flags",
43
+ "cache": "shield"
44
  },
45
+ "includes": {
46
  "admin": {
47
  "css": [
48
  "global-plugin"
76
  "css": null
77
  }
78
  },
79
+ "menu": {
80
  "show": true,
81
  "title": "Shield Security",
82
  "top_level": true,
85
  "icon_image": "pluginlogo_16x16.png",
86
  "has_submenu": true
87
  },
88
+ "labels": {
89
  "Name": "Shield",
90
  "Description": "Ultimate WP Security Protection - Scans, 2FA, Firewall, SPAM, Audit Trail, Security Admin, and so much more.",
91
  "Title": "Shield Security",
97
  "icon_url_32x32": "pluginlogo_32x32.png",
98
  "icon_url_128x128": "pluginlogo_128x128.png"
99
  },
100
+ "meta": {
101
+ "url_repo_home": "https://shsec.io/eh",
102
  "announcekit_changelog_id": "3ObUvS",
103
+ "privacy_policy_href": "https://shsec.io/shieldprivacypolicy"
104
  },
105
+ "plugin_meta": [
106
  {
107
  "name": "5✩ Rate This Plugin",
108
  "href": "https://shsec.io/wpsf29"
109
  }
110
  ],
111
+ "version_upgrades": [
112
+ "9.0.0",
113
+ "9.0.3",
114
+ "9.0.5"
115
+ ],
116
+ "action_links": {
117
  "remove": null,
118
  "add": [
119
  {
readme.txt CHANGED
@@ -7,8 +7,8 @@ Tags: scan, malware, firewall, two factor authentication, login protection
7
  Requires at least: 3.5.2
8
  Requires PHP: 5.4.0
9
  Recommended PHP: 7.0
10
- Tested up to: 5.4
11
- Stable tag: 9.0.4
12
 
13
  Smarter security protection from hackers through automation. Powerful scanners, 2-Factor Auth, limit logins, auto IP blocks & more.
14
 
@@ -370,41 +370,24 @@ You will always be able to use Shield Security and its free features in-full.
370
 
371
  [Go Pro for just $1/month](https://shsec.io/aa).
372
 
373
- #### 9.0 Series
374
- *Released: 5th April 2020* - [Release Announcement](https://shsec.io/hq)
375
-
376
  **Important**: The 9.0 Series is the last major version to support PHP 5.x. Shield 10+ will require a minimum of PHP 7.0.
377
 
378
- ##### [Please review the full Shield 9.0 Upgrade Guide here](https://shsec.io/shieldupgradeguide90).
379
-
380
- * **(.4) FIX**: Timing error in some cases attempting to access database table when it hasn't been created.
381
- * **(.3) IMPROVED**: Scanning for SPAM email registrations is improved with more signals.
382
- * **(.3) IMPROVED**: Better recovery from errors during certain scans.
383
- * **(.3) IMPROVED**: WPHashes Token Retrieval.
384
- * **(.3) FIX**: Plugins were sometimes disabled when updates applied via Scan UI.
385
- * **(.3) FIX**: Audit Trail more correctly reflects "repair/delete" activity from the Unrecognised File Scanner.
386
- * **(.3) FIX**: Yubikeys weren't always registered correctly.
387
- * **(.3) FIX**: Support MemberPress Password Reset that has an Auto-Login.
388
- * **(.2) IMPROVED**: Plugin/Theme Guard only scans certain types of files based on their extension. I.e. ignoring readme.txt, for example.
389
- * **(.2) IMPROVED**: Some minor improvements to encoding special characters in the email subject/from name.
390
- * **(.2) IMPROVED**: [WPHashes.com](https://shsec.io/hs) API token update is more reliable.
391
- * **(.2) FIXED**: Applying a plugin update from within the Vulnerabilities scanner no longer disables that plugin.
392
- * **(.1) FIXED**: Javascript for Anti-Bot Login Protection not loading in all cases.
393
- * **(.1) FIXED**: MemberPress Registration protection PHP error.
394
- * **(.0) NEW**: [*PRO*] [Critical File Locker](https://shsec.io/h4) to protect `wp-config.php` files.
395
- * **(.0) NEW**: [*PRO*] [Selective Sync](https://shsec.io/hl) - Support for excluding individual options from import and export.
396
- * **(.0) NEW**: [Support for hCaptcha](https://shsec.io/h5) in-place of Google reCAPTCHA.
397
- * **(.0) NEW**: Reporting Module - streamline notifications and alerts and provide regular statistics updates.
398
- * **(.0) NEW**: Integrated Help desk widget for searching documentation.
399
- * **(.0) NEW**: Debug page to show summary and important information for debugging.
400
- * **(.0) IMPROVED**: Hourly and Daily crons set to specific run times.
401
- * **(.0) IMPROVED**: Automatic file repair for WordPress, plugins, and themes is much more reliable.
402
- * **(.0) IMPROVED**: Major refactoring and improvements to Bot protection on login, register and lost password forms.
403
- * **(.0) IMPROVED**: Simplification of many options and plugin configuration.
404
- * **(.0) IMPROVED**: Where an IP address gets repeatedly blocked - consolidates Audit Trail entries over a 24hr period.
405
- * **(.0) IMPROVED**: Tweaks and changes to UI.
406
- * **(.0) FIXED**: Minor issues with the MFA page.
407
- * **(.0) FIXED**: Older Twig Library compatibility with PHP 7.4.
408
- * **(.0) REMOVED**: Several unused/useless options, including "Mask WordPress Version".
409
-
410
- ##### [Full Shield Security Changelog](https://shsec.io/shieldwporgfullchangelog)
7
  Requires at least: 3.5.2
8
  Requires PHP: 5.4.0
9
  Recommended PHP: 7.0
10
+ Tested up to: 5.5
11
+ Stable tag: 9.1.0
12
 
13
  Smarter security protection from hackers through automation. Powerful scanners, 2-Factor Auth, limit logins, auto IP blocks & more.
14
 
370
 
371
  [Go Pro for just $1/month](https://shsec.io/aa).
372
 
 
 
 
373
  **Important**: The 9.0 Series is the last major version to support PHP 5.x. Shield 10+ will require a minimum of PHP 7.0.
374
 
375
+ #### 9.1 Series
376
+ *Released: 23rd April 2020* - [Release Announcement](https://shsec.io/shieldrelease91)
377
+
378
+ ##### [Please review the full Shield 9.1 Upgrade Guide here](https://shsec.io/shieldupgradeguide91).
379
+
380
+ * **(.0) NEW**: [*PRO*] [WP-CLI](https://shsec.io/hw) Support for WP-CLI (beta).
381
+ * **(.0) NEW**: [*PRO*] [U2F Login](https://shsec.io/hv) - Support for registration and use of U2F keys for 2-factor authentication.
382
+ * **(.0) NEW**: [*PRO*] [Custom Email Templates](https://shsec.io/hy) - Support for custom email templates, starting with 2FA.
383
+ * **(.0) NEW**: [*PRO*] [Affiliate Rewards](https://shsec.io/hz) - We now offer affiliate rewards with ShieldPRO.
384
+ * **(.0) IMPROVED**: WP-Config File Locker protection now correctly display the file diff for empty lines.
385
+ * **(.0) IMPROVED**: 2-Factor Authentication "Remember Me" now uses the visitor IP address as a factor.
386
+ * **(.0) IMPROVED**: Restored the option search but turned it into a modal dialog.
387
+ * **(.0) IMPROVED**: Plugin upgrade handling.
388
+ * **(.0) CHANGED**: To avoid confusion, "Security Admin Key" has been renamed to "Security Admin PIN" throughout.
389
+ * **(.0) FIXED**: Adding IPv6 address ranges didn't work in all cases.
390
+ * **(.0) FIXED**: Errors while trying to access an uninitialised database.
391
+ * **(.0) FIXED**: Upgrade Carbon PHP library to latest available (v1.39).
392
+
393
+ ##### [Entire Shield Security Changelog](https://shsec.io/shieldwporgfullchangelog)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
resources/css/bootstrap4.css CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * Bootstrap v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors
4
- * Copyright 2011-2019 Twitter, Inc.
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6
  */
7
  :root {
@@ -185,6 +185,7 @@ pre {
185
  margin-top: 0;
186
  margin-bottom: 1rem;
187
  overflow: auto;
 
188
  }
189
 
190
  figure {
@@ -252,6 +253,10 @@ select {
252
  text-transform: none;
253
  }
254
 
 
 
 
 
255
  select {
256
  word-wrap: normal;
257
  }
@@ -284,13 +289,6 @@ input[type="checkbox"] {
284
  padding: 0;
285
  }
286
 
287
- input[type="date"],
288
- input[type="time"],
289
- input[type="datetime-local"],
290
- input[type="month"] {
291
- -webkit-appearance: listbox;
292
- }
293
-
294
  textarea {
295
  overflow: auto;
296
  resize: vertical;
@@ -642,6 +640,7 @@ pre code {
642
  flex-basis: 0;
643
  -ms-flex-positive: 1;
644
  flex-grow: 1;
 
645
  max-width: 100%;
646
  }
647
 
@@ -885,6 +884,7 @@ pre code {
885
  flex-basis: 0;
886
  -ms-flex-positive: 1;
887
  flex-grow: 1;
 
888
  max-width: 100%;
889
  }
890
  .row-cols-sm-1 > * {
@@ -1087,6 +1087,7 @@ pre code {
1087
  flex-basis: 0;
1088
  -ms-flex-positive: 1;
1089
  flex-grow: 1;
 
1090
  max-width: 100%;
1091
  }
1092
  .row-cols-md-1 > * {
@@ -1289,6 +1290,7 @@ pre code {
1289
  flex-basis: 0;
1290
  -ms-flex-positive: 1;
1291
  flex-grow: 1;
 
1292
  max-width: 100%;
1293
  }
1294
  .row-cols-lg-1 > * {
@@ -1491,6 +1493,7 @@ pre code {
1491
  flex-basis: 0;
1492
  -ms-flex-positive: 1;
1493
  flex-grow: 1;
 
1494
  max-width: 100%;
1495
  }
1496
  .row-cols-xl-1 > * {
@@ -2100,6 +2103,15 @@ pre code {
2100
  opacity: 1;
2101
  }
2102
 
 
 
 
 
 
 
 
 
 
2103
  select.form-control:focus::-ms-value {
2104
  color: #495057;
2105
  background-color: #fff;
@@ -2517,7 +2529,6 @@ textarea.form-control {
2517
  color: #212529;
2518
  text-align: center;
2519
  vertical-align: middle;
2520
- cursor: pointer;
2521
  -webkit-user-select: none;
2522
  -moz-user-select: none;
2523
  -ms-user-select: none;
@@ -2551,6 +2562,10 @@ textarea.form-control {
2551
  opacity: 0.65;
2552
  }
2553
 
 
 
 
 
2554
  a.btn.disabled,
2555
  fieldset:disabled a.btn {
2556
  pointer-events: none;
@@ -3121,7 +3136,6 @@ fieldset:disabled a.btn {
3121
 
3122
  .btn-link:focus, .btn-link.focus {
3123
  text-decoration: underline;
3124
- box-shadow: none;
3125
  }
3126
 
3127
  .btn-link:disabled, .btn-link.disabled {
@@ -3580,8 +3594,9 @@ input[type="button"].btn-block {
3580
  .input-group > .custom-select,
3581
  .input-group > .custom-file {
3582
  position: relative;
3583
- -ms-flex: 1 1 0%;
3584
- flex: 1 1 0%;
 
3585
  min-width: 0;
3586
  margin-bottom: 0;
3587
  }
@@ -4661,7 +4676,7 @@ input[type="button"].btn-block {
4661
  }
4662
 
4663
  .navbar-light .navbar-toggler-icon {
4664
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
4665
  }
4666
 
4667
  .navbar-light .navbar-text {
@@ -4709,7 +4724,7 @@ input[type="button"].btn-block {
4709
  }
4710
 
4711
  .navbar-dark .navbar-toggler-icon {
4712
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
4713
  }
4714
 
4715
  .navbar-dark .navbar-text {
@@ -4743,14 +4758,21 @@ input[type="button"].btn-block {
4743
  margin-left: 0;
4744
  }
4745
 
4746
- .card > .list-group:first-child .list-group-item:first-child {
4747
- border-top-left-radius: 0.25rem;
4748
- border-top-right-radius: 0.25rem;
4749
  }
4750
 
4751
- .card > .list-group:last-child .list-group-item:last-child {
4752
- border-bottom-right-radius: 0.25rem;
4753
- border-bottom-left-radius: 0.25rem;
 
 
 
 
 
 
 
4754
  }
4755
 
4756
  .card-body {
@@ -4968,6 +4990,11 @@ input[type="button"].btn-block {
4968
  border-radius: 0.25rem;
4969
  }
4970
 
 
 
 
 
 
4971
  .breadcrumb-item + .breadcrumb-item {
4972
  padding-left: 0.5rem;
4973
  }
@@ -5422,6 +5449,7 @@ a.badge-dark:focus, a.badge-dark.focus {
5422
  display: flex;
5423
  height: 1rem;
5424
  overflow: hidden;
 
5425
  font-size: 0.75rem;
5426
  background-color: #e9ecef;
5427
  border-radius: 0.25rem;
@@ -5484,6 +5512,7 @@ a.badge-dark:focus, a.badge-dark.focus {
5484
  flex-direction: column;
5485
  padding-left: 0;
5486
  margin-bottom: 0;
 
5487
  }
5488
 
5489
  .list-group-item-action {
@@ -5513,13 +5542,13 @@ a.badge-dark:focus, a.badge-dark.focus {
5513
  }
5514
 
5515
  .list-group-item:first-child {
5516
- border-top-left-radius: 0.25rem;
5517
- border-top-right-radius: 0.25rem;
5518
  }
5519
 
5520
  .list-group-item:last-child {
5521
- border-bottom-right-radius: 0.25rem;
5522
- border-bottom-left-radius: 0.25rem;
5523
  }
5524
 
5525
  .list-group-item.disabled, .list-group-item:disabled {
@@ -5549,26 +5578,26 @@ a.badge-dark:focus, a.badge-dark.focus {
5549
  flex-direction: row;
5550
  }
5551
 
5552
- .list-group-horizontal .list-group-item:first-child {
5553
  border-bottom-left-radius: 0.25rem;
5554
  border-top-right-radius: 0;
5555
  }
5556
 
5557
- .list-group-horizontal .list-group-item:last-child {
5558
  border-top-right-radius: 0.25rem;
5559
  border-bottom-left-radius: 0;
5560
  }
5561
 
5562
- .list-group-horizontal .list-group-item.active {
5563
  margin-top: 0;
5564
  }
5565
 
5566
- .list-group-horizontal .list-group-item + .list-group-item {
5567
  border-top-width: 1px;
5568
  border-left-width: 0;
5569
  }
5570
 
5571
- .list-group-horizontal .list-group-item + .list-group-item.active {
5572
  margin-left: -1px;
5573
  border-left-width: 1px;
5574
  }
@@ -5578,22 +5607,22 @@ a.badge-dark:focus, a.badge-dark.focus {
5578
  -ms-flex-direction: row;
5579
  flex-direction: row;
5580
  }
5581
- .list-group-horizontal-sm .list-group-item:first-child {
5582
  border-bottom-left-radius: 0.25rem;
5583
  border-top-right-radius: 0;
5584
  }
5585
- .list-group-horizontal-sm .list-group-item:last-child {
5586
  border-top-right-radius: 0.25rem;
5587
  border-bottom-left-radius: 0;
5588
  }
5589
- .list-group-horizontal-sm .list-group-item.active {
5590
  margin-top: 0;
5591
  }
5592
- .list-group-horizontal-sm .list-group-item + .list-group-item {
5593
  border-top-width: 1px;
5594
  border-left-width: 0;
5595
  }
5596
- .list-group-horizontal-sm .list-group-item + .list-group-item.active {
5597
  margin-left: -1px;
5598
  border-left-width: 1px;
5599
  }
@@ -5604,22 +5633,22 @@ a.badge-dark:focus, a.badge-dark.focus {
5604
  -ms-flex-direction: row;
5605
  flex-direction: row;
5606
  }
5607
- .list-group-horizontal-md .list-group-item:first-child {
5608
  border-bottom-left-radius: 0.25rem;
5609
  border-top-right-radius: 0;
5610
  }
5611
- .list-group-horizontal-md .list-group-item:last-child {
5612
  border-top-right-radius: 0.25rem;
5613
  border-bottom-left-radius: 0;
5614
  }
5615
- .list-group-horizontal-md .list-group-item.active {
5616
  margin-top: 0;
5617
  }
5618
- .list-group-horizontal-md .list-group-item + .list-group-item {
5619
  border-top-width: 1px;
5620
  border-left-width: 0;
5621
  }
5622
- .list-group-horizontal-md .list-group-item + .list-group-item.active {
5623
  margin-left: -1px;
5624
  border-left-width: 1px;
5625
  }
@@ -5630,22 +5659,22 @@ a.badge-dark:focus, a.badge-dark.focus {
5630
  -ms-flex-direction: row;
5631
  flex-direction: row;
5632
  }
5633
- .list-group-horizontal-lg .list-group-item:first-child {
5634
  border-bottom-left-radius: 0.25rem;
5635
  border-top-right-radius: 0;
5636
  }
5637
- .list-group-horizontal-lg .list-group-item:last-child {
5638
  border-top-right-radius: 0.25rem;
5639
  border-bottom-left-radius: 0;
5640
  }
5641
- .list-group-horizontal-lg .list-group-item.active {
5642
  margin-top: 0;
5643
  }
5644
- .list-group-horizontal-lg .list-group-item + .list-group-item {
5645
  border-top-width: 1px;
5646
  border-left-width: 0;
5647
  }
5648
- .list-group-horizontal-lg .list-group-item + .list-group-item.active {
5649
  margin-left: -1px;
5650
  border-left-width: 1px;
5651
  }
@@ -5656,38 +5685,36 @@ a.badge-dark:focus, a.badge-dark.focus {
5656
  -ms-flex-direction: row;
5657
  flex-direction: row;
5658
  }
5659
- .list-group-horizontal-xl .list-group-item:first-child {
5660
  border-bottom-left-radius: 0.25rem;
5661
  border-top-right-radius: 0;
5662
  }
5663
- .list-group-horizontal-xl .list-group-item:last-child {
5664
  border-top-right-radius: 0.25rem;
5665
  border-bottom-left-radius: 0;
5666
  }
5667
- .list-group-horizontal-xl .list-group-item.active {
5668
  margin-top: 0;
5669
  }
5670
- .list-group-horizontal-xl .list-group-item + .list-group-item {
5671
  border-top-width: 1px;
5672
  border-left-width: 0;
5673
  }
5674
- .list-group-horizontal-xl .list-group-item + .list-group-item.active {
5675
  margin-left: -1px;
5676
  border-left-width: 1px;
5677
  }
5678
  }
5679
 
5680
- .list-group-flush .list-group-item {
5681
- border-right-width: 0;
5682
- border-left-width: 0;
5683
  border-radius: 0;
5684
  }
5685
 
5686
- .list-group-flush .list-group-item:first-child {
5687
- border-top-width: 0;
5688
  }
5689
 
5690
- .list-group-flush:last-child .list-group-item:last-child {
5691
  border-bottom-width: 0;
5692
  }
5693
 
@@ -5842,9 +5869,6 @@ button.close {
5842
  padding: 0;
5843
  background-color: transparent;
5844
  border: 0;
5845
- -webkit-appearance: none;
5846
- -moz-appearance: none;
5847
- appearance: none;
5848
  }
5849
 
5850
  a.close.disabled {
@@ -5982,6 +6006,9 @@ a.close.disabled {
5982
  .modal-dialog-centered::before {
5983
  display: block;
5984
  height: calc(100vh - 1rem);
 
 
 
5985
  content: "";
5986
  }
5987
 
@@ -6107,6 +6134,9 @@ a.close.disabled {
6107
  }
6108
  .modal-dialog-centered::before {
6109
  height: calc(100vh - 3.5rem);
 
 
 
6110
  }
6111
  .modal-sm {
6112
  max-width: 300px;
@@ -6638,6 +6668,8 @@ a.close.disabled {
6638
  }
6639
  50% {
6640
  opacity: 1;
 
 
6641
  }
6642
  }
6643
 
@@ -6648,6 +6680,8 @@ a.close.disabled {
6648
  }
6649
  50% {
6650
  opacity: 1;
 
 
6651
  }
6652
  }
6653
 
@@ -7933,6 +7967,27 @@ button.bg-dark:focus {
7933
  }
7934
  }
7935
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7936
  .overflow-auto {
7937
  overflow: auto !important;
7938
  }
@@ -8088,18 +8143,6 @@ button.bg-dark:focus {
8088
  height: 100vh !important;
8089
  }
8090
 
8091
- .stretched-link::after {
8092
- position: absolute;
8093
- top: 0;
8094
- right: 0;
8095
- bottom: 0;
8096
- left: 0;
8097
- z-index: 1;
8098
- pointer-events: auto;
8099
- content: "";
8100
- background-color: rgba(0, 0, 0, 0);
8101
- }
8102
-
8103
  .m-0 {
8104
  margin: 0 !important;
8105
  }
@@ -9912,6 +9955,18 @@ button.bg-dark:focus {
9912
  }
9913
  }
9914
 
 
 
 
 
 
 
 
 
 
 
 
 
9915
  .text-monospace {
9916
  font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
9917
  }
@@ -10127,8 +10182,7 @@ a.text-dark:hover, a.text-dark:focus {
10127
  }
10128
 
10129
  .text-break {
10130
- word-break: break-word !important;
10131
- overflow-wrap: break-word !important;
10132
  }
10133
 
10134
  .text-reset {
1
  /*!
2
+ * Bootstrap v4.5.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2020 The Bootstrap Authors
4
+ * Copyright 2011-2020 Twitter, Inc.
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6
  */
7
  :root {
185
  margin-top: 0;
186
  margin-bottom: 1rem;
187
  overflow: auto;
188
+ -ms-overflow-style: scrollbar;
189
  }
190
 
191
  figure {
253
  text-transform: none;
254
  }
255
 
256
+ [role="button"] {
257
+ cursor: pointer;
258
+ }
259
+
260
  select {
261
  word-wrap: normal;
262
  }
289
  padding: 0;
290
  }
291
 
 
 
 
 
 
 
 
292
  textarea {
293
  overflow: auto;
294
  resize: vertical;
640
  flex-basis: 0;
641
  -ms-flex-positive: 1;
642
  flex-grow: 1;
643
+ min-width: 0;
644
  max-width: 100%;
645
  }
646
 
884
  flex-basis: 0;
885
  -ms-flex-positive: 1;
886
  flex-grow: 1;
887
+ min-width: 0;
888
  max-width: 100%;
889
  }
890
  .row-cols-sm-1 > * {
1087
  flex-basis: 0;
1088
  -ms-flex-positive: 1;
1089
  flex-grow: 1;
1090
+ min-width: 0;
1091
  max-width: 100%;
1092
  }
1093
  .row-cols-md-1 > * {
1290
  flex-basis: 0;
1291
  -ms-flex-positive: 1;
1292
  flex-grow: 1;
1293
+ min-width: 0;
1294
  max-width: 100%;
1295
  }
1296
  .row-cols-lg-1 > * {
1493
  flex-basis: 0;
1494
  -ms-flex-positive: 1;
1495
  flex-grow: 1;
1496
+ min-width: 0;
1497
  max-width: 100%;
1498
  }
1499
  .row-cols-xl-1 > * {
2103
  opacity: 1;
2104
  }
2105
 
2106
+ input[type="date"].form-control,
2107
+ input[type="time"].form-control,
2108
+ input[type="datetime-local"].form-control,
2109
+ input[type="month"].form-control {
2110
+ -webkit-appearance: none;
2111
+ -moz-appearance: none;
2112
+ appearance: none;
2113
+ }
2114
+
2115
  select.form-control:focus::-ms-value {
2116
  color: #495057;
2117
  background-color: #fff;
2529
  color: #212529;
2530
  text-align: center;
2531
  vertical-align: middle;
 
2532
  -webkit-user-select: none;
2533
  -moz-user-select: none;
2534
  -ms-user-select: none;
2562
  opacity: 0.65;
2563
  }
2564
 
2565
+ .btn:not(:disabled):not(.disabled) {
2566
+ cursor: pointer;
2567
+ }
2568
+
2569
  a.btn.disabled,
2570
  fieldset:disabled a.btn {
2571
  pointer-events: none;
3136
 
3137
  .btn-link:focus, .btn-link.focus {
3138
  text-decoration: underline;
 
3139
  }
3140
 
3141
  .btn-link:disabled, .btn-link.disabled {
3594
  .input-group > .custom-select,
3595
  .input-group > .custom-file {
3596
  position: relative;
3597
+ -ms-flex: 1 1 auto;
3598
+ flex: 1 1 auto;
3599
+ width: 1%;
3600
  min-width: 0;
3601
  margin-bottom: 0;
3602
  }
4676
  }
4677
 
4678
  .navbar-light .navbar-toggler-icon {
4679
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
4680
  }
4681
 
4682
  .navbar-light .navbar-text {
4724
  }
4725
 
4726
  .navbar-dark .navbar-toggler-icon {
4727
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
4728
  }
4729
 
4730
  .navbar-dark .navbar-text {
4758
  margin-left: 0;
4759
  }
4760
 
4761
+ .card > .list-group {
4762
+ border-top: inherit;
4763
+ border-bottom: inherit;
4764
  }
4765
 
4766
+ .card > .list-group:first-child {
4767
+ border-top-width: 0;
4768
+ border-top-left-radius: calc(0.25rem - 1px);
4769
+ border-top-right-radius: calc(0.25rem - 1px);
4770
+ }
4771
+
4772
+ .card > .list-group:last-child {
4773
+ border-bottom-width: 0;
4774
+ border-bottom-right-radius: calc(0.25rem - 1px);
4775
+ border-bottom-left-radius: calc(0.25rem - 1px);
4776
  }
4777
 
4778
  .card-body {
4990
  border-radius: 0.25rem;
4991
  }
4992
 
4993
+ .breadcrumb-item {
4994
+ display: -ms-flexbox;
4995
+ display: flex;
4996
+ }
4997
+
4998
  .breadcrumb-item + .breadcrumb-item {
4999
  padding-left: 0.5rem;
5000
  }
5449
  display: flex;
5450
  height: 1rem;
5451
  overflow: hidden;
5452
+ line-height: 0;
5453
  font-size: 0.75rem;
5454
  background-color: #e9ecef;
5455
  border-radius: 0.25rem;
5512
  flex-direction: column;
5513
  padding-left: 0;
5514
  margin-bottom: 0;
5515
+ border-radius: 0.25rem;
5516
  }
5517
 
5518
  .list-group-item-action {
5542
  }
5543
 
5544
  .list-group-item:first-child {
5545
+ border-top-left-radius: inherit;
5546
+ border-top-right-radius: inherit;
5547
  }
5548
 
5549
  .list-group-item:last-child {
5550
+ border-bottom-right-radius: inherit;
5551
+ border-bottom-left-radius: inherit;
5552
  }
5553
 
5554
  .list-group-item.disabled, .list-group-item:disabled {
5578
  flex-direction: row;
5579
  }
5580
 
5581
+ .list-group-horizontal > .list-group-item:first-child {
5582
  border-bottom-left-radius: 0.25rem;
5583
  border-top-right-radius: 0;
5584
  }
5585
 
5586
+ .list-group-horizontal > .list-group-item:last-child {
5587
  border-top-right-radius: 0.25rem;
5588
  border-bottom-left-radius: 0;
5589
  }
5590
 
5591
+ .list-group-horizontal > .list-group-item.active {
5592
  margin-top: 0;
5593
  }
5594
 
5595
+ .list-group-horizontal > .list-group-item + .list-group-item {
5596
  border-top-width: 1px;
5597
  border-left-width: 0;
5598
  }
5599
 
5600
+ .list-group-horizontal > .list-group-item + .list-group-item.active {
5601
  margin-left: -1px;
5602
  border-left-width: 1px;
5603
  }
5607
  -ms-flex-direction: row;
5608
  flex-direction: row;
5609
  }
5610
+ .list-group-horizontal-sm > .list-group-item:first-child {
5611
  border-bottom-left-radius: 0.25rem;
5612
  border-top-right-radius: 0;
5613
  }
5614
+ .list-group-horizontal-sm > .list-group-item:last-child {
5615
  border-top-right-radius: 0.25rem;
5616
  border-bottom-left-radius: 0;
5617
  }
5618
+ .list-group-horizontal-sm > .list-group-item.active {
5619
  margin-top: 0;
5620
  }
5621
+ .list-group-horizontal-sm > .list-group-item + .list-group-item {
5622
  border-top-width: 1px;
5623
  border-left-width: 0;
5624
  }
5625
+ .list-group-horizontal-sm > .list-group-item + .list-group-item.active {
5626
  margin-left: -1px;
5627
  border-left-width: 1px;
5628
  }
5633
  -ms-flex-direction: row;
5634
  flex-direction: row;
5635
  }
5636
+ .list-group-horizontal-md > .list-group-item:first-child {
5637
  border-bottom-left-radius: 0.25rem;
5638
  border-top-right-radius: 0;
5639
  }
5640
+ .list-group-horizontal-md > .list-group-item:last-child {
5641
  border-top-right-radius: 0.25rem;
5642
  border-bottom-left-radius: 0;
5643
  }
5644
+ .list-group-horizontal-md > .list-group-item.active {
5645
  margin-top: 0;
5646
  }
5647
+ .list-group-horizontal-md > .list-group-item + .list-group-item {
5648
  border-top-width: 1px;
5649
  border-left-width: 0;
5650
  }
5651
+ .list-group-horizontal-md > .list-group-item + .list-group-item.active {
5652
  margin-left: -1px;
5653
  border-left-width: 1px;
5654
  }
5659
  -ms-flex-direction: row;
5660
  flex-direction: row;
5661
  }
5662
+ .list-group-horizontal-lg > .list-group-item:first-child {
5663
  border-bottom-left-radius: 0.25rem;
5664
  border-top-right-radius: 0;
5665
  }
5666
+ .list-group-horizontal-lg > .list-group-item:last-child {
5667
  border-top-right-radius: 0.25rem;
5668
  border-bottom-left-radius: 0;
5669
  }
5670
+ .list-group-horizontal-lg > .list-group-item.active {
5671
  margin-top: 0;
5672
  }
5673
+ .list-group-horizontal-lg > .list-group-item + .list-group-item {
5674
  border-top-width: 1px;
5675
  border-left-width: 0;
5676
  }
5677
+ .list-group-horizontal-lg > .list-group-item + .list-group-item.active {
5678
  margin-left: -1px;
5679
  border-left-width: 1px;
5680
  }
5685
  -ms-flex-direction: row;
5686
  flex-direction: row;
5687
  }
5688
+ .list-group-horizontal-xl > .list-group-item:first-child {
5689
  border-bottom-left-radius: 0.25rem;
5690
  border-top-right-radius: 0;
5691
  }
5692
+ .list-group-horizontal-xl > .list-group-item:last-child {
5693
  border-top-right-radius: 0.25rem;
5694
  border-bottom-left-radius: 0;
5695
  }
5696
+ .list-group-horizontal-xl > .list-group-item.active {
5697
  margin-top: 0;
5698
  }
5699
+ .list-group-horizontal-xl > .list-group-item + .list-group-item {
5700
  border-top-width: 1px;
5701
  border-left-width: 0;
5702
  }
5703
+ .list-group-horizontal-xl > .list-group-item + .list-group-item.active {
5704
  margin-left: -1px;
5705
  border-left-width: 1px;
5706
  }
5707
  }
5708
 
5709
+ .list-group-flush {
 
 
5710
  border-radius: 0;
5711
  }
5712
 
5713
+ .list-group-flush > .list-group-item {
5714
+ border-width: 0 0 1px;
5715
  }
5716
 
5717
+ .list-group-flush > .list-group-item:last-child {
5718
  border-bottom-width: 0;
5719
  }
5720
 
5869
  padding: 0;
5870
  background-color: transparent;
5871
  border: 0;
 
 
 
5872
  }
5873
 
5874
  a.close.disabled {
6006
  .modal-dialog-centered::before {
6007
  display: block;
6008
  height: calc(100vh - 1rem);
6009
+ height: -webkit-min-content;
6010
+ height: -moz-min-content;
6011
+ height: min-content;
6012
  content: "";
6013
  }
6014
 
6134
  }
6135
  .modal-dialog-centered::before {
6136
  height: calc(100vh - 3.5rem);
6137
+ height: -webkit-min-content;
6138
+ height: -moz-min-content;
6139
+ height: min-content;
6140
  }
6141
  .modal-sm {
6142
  max-width: 300px;
6668
  }
6669
  50% {
6670
  opacity: 1;
6671
+ -webkit-transform: none;
6672
+ transform: none;
6673
  }
6674
  }
6675
 
6680
  }
6681
  50% {
6682
  opacity: 1;
6683
+ -webkit-transform: none;
6684
+ transform: none;
6685
  }
6686
  }
6687
 
7967
  }
7968
  }
7969
 
7970
+ .user-select-all {
7971
+ -webkit-user-select: all !important;
7972
+ -moz-user-select: all !important;
7973
+ -ms-user-select: all !important;
7974
+ user-select: all !important;
7975
+ }
7976
+
7977
+ .user-select-auto {
7978
+ -webkit-user-select: auto !important;
7979
+ -moz-user-select: auto !important;
7980
+ -ms-user-select: auto !important;
7981
+ user-select: auto !important;
7982
+ }
7983
+
7984
+ .user-select-none {
7985
+ -webkit-user-select: none !important;
7986
+ -moz-user-select: none !important;
7987
+ -ms-user-select: none !important;
7988
+ user-select: none !important;
7989
+ }
7990
+
7991
  .overflow-auto {
7992
  overflow: auto !important;
7993
  }
8143
  height: 100vh !important;
8144
  }
8145
 
 
 
 
 
 
 
 
 
 
 
 
 
8146
  .m-0 {
8147
  margin: 0 !important;
8148
  }
9955
  }
9956
  }
9957
 
9958
+ .stretched-link::after {
9959
+ position: absolute;
9960
+ top: 0;
9961
+ right: 0;
9962
+ bottom: 0;
9963
+ left: 0;
9964
+ z-index: 1;
9965
+ pointer-events: auto;
9966
+ content: "";
9967
+ background-color: rgba(0, 0, 0, 0);
9968
+ }
9969
+
9970
  .text-monospace {
9971
  font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
9972
  }
10182
  }
10183
 
10184
  .text-break {
10185
+ word-wrap: break-word !important;
 
10186
  }
10187
 
10188
  .text-reset {
resources/css/bootstrap4.min.css CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * Bootstrap v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors
4
- * Copyright 2011-2019 Twitter, Inc.
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6
- */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 0%;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
7
  /*# sourceMappingURL=bootstrap.min.css.map */
1
  /*!
2
+ * Bootstrap v4.5.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2020 The Bootstrap Authors
4
+ * Copyright 2011-2020 Twitter, Inc.
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
7
  /*# sourceMappingURL=bootstrap.min.css.map */
resources/css/plugin.css CHANGED
@@ -357,6 +357,10 @@ label input[type=checkbox] {
357
  .module-icon-support:before {
358
  content: "\f525";
359
  }
 
 
 
 
360
  .dropdown-item .module-icon:before {
361
  font-size: 1.6rem;
362
  }
357
  .module-icon-support:before {
358
  content: "\f525";
359
  }
360
+ #NavItem-SearchOptionsLaunch > a {
361
+ width: 35px;
362
+ content: "\f179";
363
+ }
364
  .dropdown-item .module-icon:before {
365
  font-size: 1.6rem;
366
  }
resources/js/bootstrap4.bundle.js CHANGED
@@ -1,6 +1,6 @@
1
  /*!
2
- * Bootstrap v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
  (function (global, factory) {
@@ -9,7 +9,7 @@
9
  (global = global || self, factory(global.bootstrap = {}, global.jQuery));
10
  }(this, (function (exports, $) { 'use strict';
11
 
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
 
14
  function _defineProperties(target, props) {
15
  for (var i = 0; i < props.length; i++) {
@@ -84,7 +84,7 @@
84
 
85
  /**
86
  * --------------------------------------------------------------------------
87
- * Bootstrap (v4.4.1): util.js
88
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
89
  * --------------------------------------------------------------------------
90
  */
@@ -99,6 +99,10 @@
99
  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
100
 
101
  function toType(obj) {
 
 
 
 
102
  return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
103
  }
104
 
@@ -111,7 +115,7 @@
111
  return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
112
  }
113
 
114
- return undefined; // eslint-disable-line no-undefined
115
  }
116
  };
117
  }
@@ -261,33 +265,25 @@
261
  */
262
 
263
  var NAME = 'alert';
264
- var VERSION = '4.4.1';
265
  var DATA_KEY = 'bs.alert';
266
  var EVENT_KEY = "." + DATA_KEY;
267
  var DATA_API_KEY = '.data-api';
268
  var JQUERY_NO_CONFLICT = $.fn[NAME];
269
- var Selector = {
270
- DISMISS: '[data-dismiss="alert"]'
271
- };
272
- var Event = {
273
- CLOSE: "close" + EVENT_KEY,
274
- CLOSED: "closed" + EVENT_KEY,
275
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
276
- };
277
- var ClassName = {
278
- ALERT: 'alert',
279
- FADE: 'fade',
280
- SHOW: 'show'
281
- };
282
  /**
283
  * ------------------------------------------------------------------------
284
  * Class Definition
285
  * ------------------------------------------------------------------------
286
  */
287
 
288
- var Alert =
289
- /*#__PURE__*/
290
- function () {
291
  function Alert(element) {
292
  this._element = element;
293
  } // Getters
@@ -327,14 +323,14 @@
327
  }
328
 
329
  if (!parent) {
330
- parent = $(element).closest("." + ClassName.ALERT)[0];
331
  }
332
 
333
  return parent;
334
  };
335
 
336
  _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
337
- var closeEvent = $.Event(Event.CLOSE);
338
  $(element).trigger(closeEvent);
339
  return closeEvent;
340
  };
@@ -342,9 +338,9 @@
342
  _proto._removeElement = function _removeElement(element) {
343
  var _this = this;
344
 
345
- $(element).removeClass(ClassName.SHOW);
346
 
347
- if (!$(element).hasClass(ClassName.FADE)) {
348
  this._destroyElement(element);
349
 
350
  return;
@@ -357,7 +353,7 @@
357
  };
358
 
359
  _proto._destroyElement = function _destroyElement(element) {
360
- $(element).detach().trigger(Event.CLOSED).remove();
361
  } // Static
362
  ;
363
 
@@ -403,7 +399,7 @@
403
  */
404
 
405
 
406
- $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
407
  /**
408
  * ------------------------------------------------------------------------
409
  * jQuery
@@ -425,39 +421,31 @@
425
  */
426
 
427
  var NAME$1 = 'button';
428
- var VERSION$1 = '4.4.1';
429
  var DATA_KEY$1 = 'bs.button';
430
  var EVENT_KEY$1 = "." + DATA_KEY$1;
431
  var DATA_API_KEY$1 = '.data-api';
432
  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
433
- var ClassName$1 = {
434
- ACTIVE: 'active',
435
- BUTTON: 'btn',
436
- FOCUS: 'focus'
437
- };
438
- var Selector$1 = {
439
- DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
440
- DATA_TOGGLES: '[data-toggle="buttons"]',
441
- DATA_TOGGLE: '[data-toggle="button"]',
442
- DATA_TOGGLES_BUTTONS: '[data-toggle="buttons"] .btn',
443
- INPUT: 'input:not([type="hidden"])',
444
- ACTIVE: '.active',
445
- BUTTON: '.btn'
446
- };
447
- var Event$1 = {
448
- CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1,
449
- FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1),
450
- LOAD_DATA_API: "load" + EVENT_KEY$1 + DATA_API_KEY$1
451
- };
452
  /**
453
  * ------------------------------------------------------------------------
454
  * Class Definition
455
  * ------------------------------------------------------------------------
456
  */
457
 
458
- var Button =
459
- /*#__PURE__*/
460
- function () {
461
  function Button(element) {
462
  this._element = element;
463
  } // Getters
@@ -469,33 +457,30 @@
469
  _proto.toggle = function toggle() {
470
  var triggerChangeEvent = true;
471
  var addAriaPressed = true;
472
- var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLES)[0];
473
 
474
  if (rootElement) {
475
- var input = this._element.querySelector(Selector$1.INPUT);
476
 
477
  if (input) {
478
  if (input.type === 'radio') {
479
- if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {
480
  triggerChangeEvent = false;
481
  } else {
482
- var activeElement = rootElement.querySelector(Selector$1.ACTIVE);
483
 
484
  if (activeElement) {
485
- $(activeElement).removeClass(ClassName$1.ACTIVE);
486
  }
487
  }
488
- } else if (input.type === 'checkbox') {
489
- if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName$1.ACTIVE)) {
490
- triggerChangeEvent = false;
491
- }
492
- } else {
493
- // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
494
- triggerChangeEvent = false;
495
  }
496
 
497
  if (triggerChangeEvent) {
498
- input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);
 
 
 
 
499
  $(input).trigger('change');
500
  }
501
 
@@ -506,11 +491,11 @@
506
 
507
  if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
508
  if (addAriaPressed) {
509
- this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));
510
  }
511
 
512
  if (triggerChangeEvent) {
513
- $(this._element).toggleClass(ClassName$1.ACTIVE);
514
  }
515
  }
516
  };
@@ -552,17 +537,18 @@
552
  */
553
 
554
 
555
- $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {
556
  var button = event.target;
 
557
 
558
- if (!$(button).hasClass(ClassName$1.BUTTON)) {
559
- button = $(button).closest(Selector$1.BUTTON)[0];
560
  }
561
 
562
  if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
563
  event.preventDefault(); // work around Firefox bug #1540995
564
  } else {
565
- var inputBtn = button.querySelector(Selector$1.INPUT);
566
 
567
  if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
568
  event.preventDefault(); // work around Firefox bug #1540995
@@ -570,38 +556,42 @@
570
  return;
571
  }
572
 
 
 
 
 
573
  Button._jQueryInterface.call($(button), 'toggle');
574
  }
575
- }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {
576
- var button = $(event.target).closest(Selector$1.BUTTON)[0];
577
- $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));
578
  });
579
- $(window).on(Event$1.LOAD_DATA_API, function () {
580
  // ensure correct active class is set to match the controls' actual values/states
581
  // find all checkboxes/readio buttons inside data-toggle groups
582
- var buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLES_BUTTONS));
583
 
584
  for (var i = 0, len = buttons.length; i < len; i++) {
585
  var button = buttons[i];
586
- var input = button.querySelector(Selector$1.INPUT);
587
 
588
  if (input.checked || input.hasAttribute('checked')) {
589
- button.classList.add(ClassName$1.ACTIVE);
590
  } else {
591
- button.classList.remove(ClassName$1.ACTIVE);
592
  }
593
  } // find all button toggles
594
 
595
 
596
- buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLE));
597
 
598
  for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
599
  var _button = buttons[_i];
600
 
601
  if (_button.getAttribute('aria-pressed') === 'true') {
602
- _button.classList.add(ClassName$1.ACTIVE);
603
  } else {
604
- _button.classList.remove(ClassName$1.ACTIVE);
605
  }
606
  }
607
  });
@@ -626,7 +616,7 @@
626
  */
627
 
628
  var NAME$2 = 'carousel';
629
- var VERSION$2 = '4.4.1';
630
  var DATA_KEY$2 = 'bs.carousel';
631
  var EVENT_KEY$2 = "." + DATA_KEY$2;
632
  var DATA_API_KEY$2 = '.data-api';
@@ -654,48 +644,39 @@
654
  wrap: 'boolean',
655
  touch: 'boolean'
656
  };
657
- var Direction = {
658
- NEXT: 'next',
659
- PREV: 'prev',
660
- LEFT: 'left',
661
- RIGHT: 'right'
662
- };
663
- var Event$2 = {
664
- SLIDE: "slide" + EVENT_KEY$2,
665
- SLID: "slid" + EVENT_KEY$2,
666
- KEYDOWN: "keydown" + EVENT_KEY$2,
667
- MOUSEENTER: "mouseenter" + EVENT_KEY$2,
668
- MOUSELEAVE: "mouseleave" + EVENT_KEY$2,
669
- TOUCHSTART: "touchstart" + EVENT_KEY$2,
670
- TOUCHMOVE: "touchmove" + EVENT_KEY$2,
671
- TOUCHEND: "touchend" + EVENT_KEY$2,
672
- POINTERDOWN: "pointerdown" + EVENT_KEY$2,
673
- POINTERUP: "pointerup" + EVENT_KEY$2,
674
- DRAG_START: "dragstart" + EVENT_KEY$2,
675
- LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2,
676
- CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2
677
- };
678
- var ClassName$2 = {
679
- CAROUSEL: 'carousel',
680
- ACTIVE: 'active',
681
- SLIDE: 'slide',
682
- RIGHT: 'carousel-item-right',
683
- LEFT: 'carousel-item-left',
684
- NEXT: 'carousel-item-next',
685
- PREV: 'carousel-item-prev',
686
- ITEM: 'carousel-item',
687
- POINTER_EVENT: 'pointer-event'
688
- };
689
- var Selector$2 = {
690
- ACTIVE: '.active',
691
- ACTIVE_ITEM: '.active.carousel-item',
692
- ITEM: '.carousel-item',
693
- ITEM_IMG: '.carousel-item img',
694
- NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
695
- INDICATORS: '.carousel-indicators',
696
- DATA_SLIDE: '[data-slide], [data-slide-to]',
697
- DATA_RIDE: '[data-ride="carousel"]'
698
- };
699
  var PointerType = {
700
  TOUCH: 'touch',
701
  PEN: 'pen'
@@ -706,9 +687,7 @@
706
  * ------------------------------------------------------------------------
707
  */
708
 
709
- var Carousel =
710
- /*#__PURE__*/
711
- function () {
712
  function Carousel(element, config) {
713
  this._items = null;
714
  this._interval = null;
@@ -720,7 +699,7 @@
720
  this.touchDeltaX = 0;
721
  this._config = this._getConfig(config);
722
  this._element = element;
723
- this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);
724
  this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
725
  this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
726
 
@@ -733,7 +712,7 @@
733
  // Public
734
  _proto.next = function next() {
735
  if (!this._isSliding) {
736
- this._slide(Direction.NEXT);
737
  }
738
  };
739
 
@@ -747,7 +726,7 @@
747
 
748
  _proto.prev = function prev() {
749
  if (!this._isSliding) {
750
- this._slide(Direction.PREV);
751
  }
752
  };
753
 
@@ -756,7 +735,7 @@
756
  this._isPaused = true;
757
  }
758
 
759
- if (this._element.querySelector(Selector$2.NEXT_PREV)) {
760
  Util.triggerTransitionEnd(this._element);
761
  this.cycle(true);
762
  }
@@ -783,7 +762,7 @@
783
  _proto.to = function to(index) {
784
  var _this = this;
785
 
786
- this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);
787
 
788
  var activeIndex = this._getItemIndex(this._activeElement);
789
 
@@ -792,7 +771,7 @@
792
  }
793
 
794
  if (this._isSliding) {
795
- $(this._element).one(Event$2.SLID, function () {
796
  return _this.to(index);
797
  });
798
  return;
@@ -804,7 +783,7 @@
804
  return;
805
  }
806
 
807
- var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;
808
 
809
  this._slide(direction, this._items[index]);
810
  };
@@ -824,7 +803,7 @@
824
  ;
825
 
826
  _proto._getConfig = function _getConfig(config) {
827
- config = _objectSpread2({}, Default, {}, config);
828
  Util.typeCheckConfig(NAME$2, config, DefaultType);
829
  return config;
830
  };
@@ -853,15 +832,15 @@
853
  var _this2 = this;
854
 
855
  if (this._config.keyboard) {
856
- $(this._element).on(Event$2.KEYDOWN, function (event) {
857
  return _this2._keydown(event);
858
  });
859
  }
860
 
861
  if (this._config.pause === 'hover') {
862
- $(this._element).on(Event$2.MOUSEENTER, function (event) {
863
  return _this2.pause(event);
864
- }).on(Event$2.MOUSELEAVE, function (event) {
865
  return _this2.cycle(event);
866
  });
867
  }
@@ -922,27 +901,27 @@
922
  }
923
  };
924
 
925
- $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {
926
  return e.preventDefault();
927
  });
928
 
929
  if (this._pointerEvent) {
930
- $(this._element).on(Event$2.POINTERDOWN, function (event) {
931
  return start(event);
932
  });
933
- $(this._element).on(Event$2.POINTERUP, function (event) {
934
  return end(event);
935
  });
936
 
937
- this._element.classList.add(ClassName$2.POINTER_EVENT);
938
  } else {
939
- $(this._element).on(Event$2.TOUCHSTART, function (event) {
940
  return start(event);
941
  });
942
- $(this._element).on(Event$2.TOUCHMOVE, function (event) {
943
  return move(event);
944
  });
945
- $(this._element).on(Event$2.TOUCHEND, function (event) {
946
  return end(event);
947
  });
948
  }
@@ -967,13 +946,13 @@
967
  };
968
 
969
  _proto._getItemIndex = function _getItemIndex(element) {
970
- this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];
971
  return this._items.indexOf(element);
972
  };
973
 
974
  _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
975
- var isNextDirection = direction === Direction.NEXT;
976
- var isPrevDirection = direction === Direction.PREV;
977
 
978
  var activeIndex = this._getItemIndex(activeElement);
979
 
@@ -984,7 +963,7 @@
984
  return activeElement;
985
  }
986
 
987
- var delta = direction === Direction.PREV ? -1 : 1;
988
  var itemIndex = (activeIndex + delta) % this._items.length;
989
  return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
990
  };
@@ -992,9 +971,9 @@
992
  _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
993
  var targetIndex = this._getItemIndex(relatedTarget);
994
 
995
- var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));
996
 
997
- var slideEvent = $.Event(Event$2.SLIDE, {
998
  relatedTarget: relatedTarget,
999
  direction: eventDirectionName,
1000
  from: fromIndex,
@@ -1006,13 +985,13 @@
1006
 
1007
  _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
1008
  if (this._indicatorsElement) {
1009
- var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));
1010
- $(indicators).removeClass(ClassName$2.ACTIVE);
1011
 
1012
  var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
1013
 
1014
  if (nextIndicator) {
1015
- $(nextIndicator).addClass(ClassName$2.ACTIVE);
1016
  }
1017
  }
1018
  };
@@ -1020,7 +999,7 @@
1020
  _proto._slide = function _slide(direction, element) {
1021
  var _this4 = this;
1022
 
1023
- var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);
1024
 
1025
  var activeElementIndex = this._getItemIndex(activeElement);
1026
 
@@ -1033,17 +1012,17 @@
1033
  var orderClassName;
1034
  var eventDirectionName;
1035
 
1036
- if (direction === Direction.NEXT) {
1037
- directionalClassName = ClassName$2.LEFT;
1038
- orderClassName = ClassName$2.NEXT;
1039
- eventDirectionName = Direction.LEFT;
1040
  } else {
1041
- directionalClassName = ClassName$2.RIGHT;
1042
- orderClassName = ClassName$2.PREV;
1043
- eventDirectionName = Direction.RIGHT;
1044
  }
1045
 
1046
- if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {
1047
  this._isSliding = false;
1048
  return;
1049
  }
@@ -1067,14 +1046,14 @@
1067
 
1068
  this._setActiveIndicatorElement(nextElement);
1069
 
1070
- var slidEvent = $.Event(Event$2.SLID, {
1071
  relatedTarget: nextElement,
1072
  direction: eventDirectionName,
1073
  from: activeElementIndex,
1074
  to: nextElementIndex
1075
  });
1076
 
1077
- if ($(this._element).hasClass(ClassName$2.SLIDE)) {
1078
  $(nextElement).addClass(orderClassName);
1079
  Util.reflow(nextElement);
1080
  $(activeElement).addClass(directionalClassName);
@@ -1090,16 +1069,16 @@
1090
 
1091
  var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
1092
  $(activeElement).one(Util.TRANSITION_END, function () {
1093
- $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE);
1094
- $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName);
1095
  _this4._isSliding = false;
1096
  setTimeout(function () {
1097
  return $(_this4._element).trigger(slidEvent);
1098
  }, 0);
1099
  }).emulateTransitionEnd(transitionDuration);
1100
  } else {
1101
- $(activeElement).removeClass(ClassName$2.ACTIVE);
1102
- $(nextElement).addClass(ClassName$2.ACTIVE);
1103
  this._isSliding = false;
1104
  $(this._element).trigger(slidEvent);
1105
  }
@@ -1114,10 +1093,10 @@
1114
  return this.each(function () {
1115
  var data = $(this).data(DATA_KEY$2);
1116
 
1117
- var _config = _objectSpread2({}, Default, {}, $(this).data());
1118
 
1119
  if (typeof config === 'object') {
1120
- _config = _objectSpread2({}, _config, {}, config);
1121
  }
1122
 
1123
  var action = typeof config === 'string' ? config : _config.slide;
@@ -1151,11 +1130,11 @@
1151
 
1152
  var target = $(selector)[0];
1153
 
1154
- if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {
1155
  return;
1156
  }
1157
 
1158
- var config = _objectSpread2({}, $(target).data(), {}, $(this).data());
1159
 
1160
  var slideIndex = this.getAttribute('data-slide-to');
1161
 
@@ -1193,9 +1172,9 @@
1193
  */
1194
 
1195
 
1196
- $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);
1197
- $(window).on(Event$2.LOAD_DATA_API, function () {
1198
- var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));
1199
 
1200
  for (var i = 0, len = carousels.length; i < len; i++) {
1201
  var $carousel = $(carousels[i]);
@@ -1224,7 +1203,7 @@
1224
  */
1225
 
1226
  var NAME$3 = 'collapse';
1227
- var VERSION$3 = '4.4.1';
1228
  var DATA_KEY$3 = 'bs.collapse';
1229
  var EVENT_KEY$3 = "." + DATA_KEY$3;
1230
  var DATA_API_KEY$3 = '.data-api';
@@ -1237,42 +1216,32 @@
1237
  toggle: 'boolean',
1238
  parent: '(string|element)'
1239
  };
1240
- var Event$3 = {
1241
- SHOW: "show" + EVENT_KEY$3,
1242
- SHOWN: "shown" + EVENT_KEY$3,
1243
- HIDE: "hide" + EVENT_KEY$3,
1244
- HIDDEN: "hidden" + EVENT_KEY$3,
1245
- CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3
1246
- };
1247
- var ClassName$3 = {
1248
- SHOW: 'show',
1249
- COLLAPSE: 'collapse',
1250
- COLLAPSING: 'collapsing',
1251
- COLLAPSED: 'collapsed'
1252
- };
1253
- var Dimension = {
1254
- WIDTH: 'width',
1255
- HEIGHT: 'height'
1256
- };
1257
- var Selector$3 = {
1258
- ACTIVES: '.show, .collapsing',
1259
- DATA_TOGGLE: '[data-toggle="collapse"]'
1260
- };
1261
  /**
1262
  * ------------------------------------------------------------------------
1263
  * Class Definition
1264
  * ------------------------------------------------------------------------
1265
  */
1266
 
1267
- var Collapse =
1268
- /*#__PURE__*/
1269
- function () {
1270
  function Collapse(element, config) {
1271
  this._isTransitioning = false;
1272
  this._element = element;
1273
  this._config = this._getConfig(config);
1274
  this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
1275
- var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));
1276
 
1277
  for (var i = 0, len = toggleList.length; i < len; i++) {
1278
  var elem = toggleList[i];
@@ -1304,7 +1273,7 @@
1304
 
1305
  // Public
1306
  _proto.toggle = function toggle() {
1307
- if ($(this._element).hasClass(ClassName$3.SHOW)) {
1308
  this.hide();
1309
  } else {
1310
  this.show();
@@ -1314,7 +1283,7 @@
1314
  _proto.show = function show() {
1315
  var _this = this;
1316
 
1317
- if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {
1318
  return;
1319
  }
1320
 
@@ -1322,12 +1291,12 @@
1322
  var activesData;
1323
 
1324
  if (this._parent) {
1325
- actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {
1326
  if (typeof _this._config.parent === 'string') {
1327
  return elem.getAttribute('data-parent') === _this._config.parent;
1328
  }
1329
 
1330
- return elem.classList.contains(ClassName$3.COLLAPSE);
1331
  });
1332
 
1333
  if (actives.length === 0) {
@@ -1343,7 +1312,7 @@
1343
  }
1344
  }
1345
 
1346
- var startEvent = $.Event(Event$3.SHOW);
1347
  $(this._element).trigger(startEvent);
1348
 
1349
  if (startEvent.isDefaultPrevented()) {
@@ -1360,22 +1329,22 @@
1360
 
1361
  var dimension = this._getDimension();
1362
 
1363
- $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);
1364
  this._element.style[dimension] = 0;
1365
 
1366
  if (this._triggerArray.length) {
1367
- $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);
1368
  }
1369
 
1370
  this.setTransitioning(true);
1371
 
1372
  var complete = function complete() {
1373
- $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);
1374
  _this._element.style[dimension] = '';
1375
 
1376
  _this.setTransitioning(false);
1377
 
1378
- $(_this._element).trigger(Event$3.SHOWN);
1379
  };
1380
 
1381
  var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
@@ -1388,11 +1357,11 @@
1388
  _proto.hide = function hide() {
1389
  var _this2 = this;
1390
 
1391
- if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {
1392
  return;
1393
  }
1394
 
1395
- var startEvent = $.Event(Event$3.HIDE);
1396
  $(this._element).trigger(startEvent);
1397
 
1398
  if (startEvent.isDefaultPrevented()) {
@@ -1403,7 +1372,7 @@
1403
 
1404
  this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
1405
  Util.reflow(this._element);
1406
- $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);
1407
  var triggerArrayLength = this._triggerArray.length;
1408
 
1409
  if (triggerArrayLength > 0) {
@@ -1414,8 +1383,8 @@
1414
  if (selector !== null) {
1415
  var $elem = $([].slice.call(document.querySelectorAll(selector)));
1416
 
1417
- if (!$elem.hasClass(ClassName$3.SHOW)) {
1418
- $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);
1419
  }
1420
  }
1421
  }
@@ -1426,7 +1395,7 @@
1426
  var complete = function complete() {
1427
  _this2.setTransitioning(false);
1428
 
1429
- $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);
1430
  };
1431
 
1432
  this._element.style[dimension] = '';
@@ -1449,7 +1418,7 @@
1449
  ;
1450
 
1451
  _proto._getConfig = function _getConfig(config) {
1452
- config = _objectSpread2({}, Default$1, {}, config);
1453
  config.toggle = Boolean(config.toggle); // Coerce string values
1454
 
1455
  Util.typeCheckConfig(NAME$3, config, DefaultType$1);
@@ -1457,8 +1426,8 @@
1457
  };
1458
 
1459
  _proto._getDimension = function _getDimension() {
1460
- var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
1461
- return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
1462
  };
1463
 
1464
  _proto._getParent = function _getParent() {
@@ -1485,10 +1454,10 @@
1485
  };
1486
 
1487
  _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
1488
- var isOpen = $(element).hasClass(ClassName$3.SHOW);
1489
 
1490
  if (triggerArray.length) {
1491
- $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1492
  }
1493
  } // Static
1494
  ;
@@ -1503,9 +1472,9 @@
1503
  var $this = $(this);
1504
  var data = $this.data(DATA_KEY$3);
1505
 
1506
- var _config = _objectSpread2({}, Default$1, {}, $this.data(), {}, typeof config === 'object' && config ? config : {});
1507
 
1508
- if (!data && _config.toggle && /show|hide/.test(config)) {
1509
  _config.toggle = false;
1510
  }
1511
 
@@ -1545,7 +1514,7 @@
1545
  */
1546
 
1547
 
1548
- $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {
1549
  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
1550
  if (event.currentTarget.tagName === 'A') {
1551
  event.preventDefault();
@@ -4197,7 +4166,7 @@
4197
  */
4198
 
4199
  var NAME$4 = 'dropdown';
4200
- var VERSION$4 = '4.4.1';
4201
  var DATA_KEY$4 = 'bs.dropdown';
4202
  var EVENT_KEY$4 = "." + DATA_KEY$4;
4203
  var DATA_API_KEY$4 = '.data-api';
@@ -4215,43 +4184,32 @@
4215
  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
4216
 
4217
  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
4218
- var Event$4 = {
4219
- HIDE: "hide" + EVENT_KEY$4,
4220
- HIDDEN: "hidden" + EVENT_KEY$4,
4221
- SHOW: "show" + EVENT_KEY$4,
4222
- SHOWN: "shown" + EVENT_KEY$4,
4223
- CLICK: "click" + EVENT_KEY$4,
4224
- CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4,
4225
- KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4,
4226
- KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4
4227
- };
4228
- var ClassName$4 = {
4229
- DISABLED: 'disabled',
4230
- SHOW: 'show',
4231
- DROPUP: 'dropup',
4232
- DROPRIGHT: 'dropright',
4233
- DROPLEFT: 'dropleft',
4234
- MENURIGHT: 'dropdown-menu-right',
4235
- MENULEFT: 'dropdown-menu-left',
4236
- POSITION_STATIC: 'position-static'
4237
- };
4238
- var Selector$4 = {
4239
- DATA_TOGGLE: '[data-toggle="dropdown"]',
4240
- FORM_CHILD: '.dropdown form',
4241
- MENU: '.dropdown-menu',
4242
- NAVBAR_NAV: '.navbar-nav',
4243
- VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
4244
- };
4245
- var AttachmentMap = {
4246
- TOP: 'top-start',
4247
- TOPEND: 'top-end',
4248
- BOTTOM: 'bottom-start',
4249
- BOTTOMEND: 'bottom-end',
4250
- RIGHT: 'right-start',
4251
- RIGHTEND: 'right-end',
4252
- LEFT: 'left-start',
4253
- LEFTEND: 'left-end'
4254
- };
4255
  var Default$2 = {
4256
  offset: 0,
4257
  flip: true,
@@ -4274,9 +4232,7 @@
4274
  * ------------------------------------------------------------------------
4275
  */
4276
 
4277
- var Dropdown =
4278
- /*#__PURE__*/
4279
- function () {
4280
  function Dropdown(element, config) {
4281
  this._element = element;
4282
  this._popper = null;
@@ -4292,11 +4248,11 @@
4292
 
4293
  // Public
4294
  _proto.toggle = function toggle() {
4295
- if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {
4296
  return;
4297
  }
4298
 
4299
- var isActive = $(this._menu).hasClass(ClassName$4.SHOW);
4300
 
4301
  Dropdown._clearMenus();
4302
 
@@ -4312,14 +4268,14 @@
4312
  usePopper = false;
4313
  }
4314
 
4315
- if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {
4316
  return;
4317
  }
4318
 
4319
  var relatedTarget = {
4320
  relatedTarget: this._element
4321
  };
4322
- var showEvent = $.Event(Event$4.SHOW, relatedTarget);
4323
 
4324
  var parent = Dropdown._getParentFromElement(this._element);
4325
 
@@ -4355,7 +4311,7 @@
4355
 
4356
 
4357
  if (this._config.boundary !== 'scrollParent') {
4358
- $(parent).addClass(ClassName$4.POSITION_STATIC);
4359
  }
4360
 
4361
  this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
@@ -4365,7 +4321,7 @@
4365
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
4366
 
4367
 
4368
- if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {
4369
  $(document.body).children().on('mouseover', null, $.noop);
4370
  }
4371
 
@@ -4373,19 +4329,19 @@
4373
 
4374
  this._element.setAttribute('aria-expanded', true);
4375
 
4376
- $(this._menu).toggleClass(ClassName$4.SHOW);
4377
- $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));
4378
  };
4379
 
4380
  _proto.hide = function hide() {
4381
- if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {
4382
  return;
4383
  }
4384
 
4385
  var relatedTarget = {
4386
  relatedTarget: this._element
4387
  };
4388
- var hideEvent = $.Event(Event$4.HIDE, relatedTarget);
4389
 
4390
  var parent = Dropdown._getParentFromElement(this._element);
4391
 
@@ -4399,8 +4355,8 @@
4399
  this._popper.destroy();
4400
  }
4401
 
4402
- $(this._menu).toggleClass(ClassName$4.SHOW);
4403
- $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));
4404
  };
4405
 
4406
  _proto.dispose = function dispose() {
@@ -4428,7 +4384,7 @@
4428
  _proto._addEventListeners = function _addEventListeners() {
4429
  var _this = this;
4430
 
4431
- $(this._element).on(Event$4.CLICK, function (event) {
4432
  event.preventDefault();
4433
  event.stopPropagation();
4434
 
@@ -4437,7 +4393,7 @@
4437
  };
4438
 
4439
  _proto._getConfig = function _getConfig(config) {
4440
- config = _objectSpread2({}, this.constructor.Default, {}, $(this._element).data(), {}, config);
4441
  Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
4442
  return config;
4443
  };
@@ -4447,7 +4403,7 @@
4447
  var parent = Dropdown._getParentFromElement(this._element);
4448
 
4449
  if (parent) {
4450
- this._menu = parent.querySelector(Selector$4.MENU);
4451
  }
4452
  }
4453
 
@@ -4456,20 +4412,16 @@
4456
 
4457
  _proto._getPlacement = function _getPlacement() {
4458
  var $parentDropdown = $(this._element.parentNode);
4459
- var placement = AttachmentMap.BOTTOM; // Handle dropup
4460
-
4461
- if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {
4462
- placement = AttachmentMap.TOP;
4463
 
4464
- if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {
4465
- placement = AttachmentMap.TOPEND;
4466
- }
4467
- } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {
4468
- placement = AttachmentMap.RIGHT;
4469
- } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {
4470
- placement = AttachmentMap.LEFT;
4471
- } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {
4472
- placement = AttachmentMap.BOTTOMEND;
4473
  }
4474
 
4475
  return placement;
@@ -4486,7 +4438,7 @@
4486
 
4487
  if (typeof this._config.offset === 'function') {
4488
  offset.fn = function (data) {
4489
- data.offsets = _objectSpread2({}, data.offsets, {}, _this2._config.offset(data.offsets, _this2._element) || {});
4490
  return data;
4491
  };
4492
  } else {
@@ -4516,7 +4468,7 @@
4516
  };
4517
  }
4518
 
4519
- return _objectSpread2({}, popperConfig, {}, this._config.popperConfig);
4520
  } // Static
4521
  ;
4522
 
@@ -4546,7 +4498,7 @@
4546
  return;
4547
  }
4548
 
4549
- var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));
4550
 
4551
  for (var i = 0, len = toggles.length; i < len; i++) {
4552
  var parent = Dropdown._getParentFromElement(toggles[i]);
@@ -4566,7 +4518,7 @@
4566
 
4567
  var dropdownMenu = context._menu;
4568
 
4569
- if (!$(parent).hasClass(ClassName$4.SHOW)) {
4570
  continue;
4571
  }
4572
 
@@ -4574,7 +4526,7 @@
4574
  continue;
4575
  }
4576
 
4577
- var hideEvent = $.Event(Event$4.HIDE, relatedTarget);
4578
  $(parent).trigger(hideEvent);
4579
 
4580
  if (hideEvent.isDefaultPrevented()) {
@@ -4593,8 +4545,8 @@
4593
  context._popper.destroy();
4594
  }
4595
 
4596
- $(dropdownMenu).removeClass(ClassName$4.SHOW);
4597
- $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));
4598
  }
4599
  };
4600
 
@@ -4618,36 +4570,35 @@
4618
  // - If key is other than escape
4619
  // - If key is not up or down => not a dropdown command
4620
  // - If trigger inside the menu => not a dropdown command
4621
- if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
4622
  return;
4623
  }
4624
 
4625
- event.preventDefault();
4626
- event.stopPropagation();
4627
-
4628
- if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {
4629
  return;
4630
  }
4631
 
4632
  var parent = Dropdown._getParentFromElement(this);
4633
 
4634
- var isActive = $(parent).hasClass(ClassName$4.SHOW);
4635
 
4636
  if (!isActive && event.which === ESCAPE_KEYCODE) {
4637
  return;
4638
  }
4639
 
 
 
 
4640
  if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
4641
  if (event.which === ESCAPE_KEYCODE) {
4642
- var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);
4643
- $(toggle).trigger('focus');
4644
  }
4645
 
4646
  $(this).trigger('click');
4647
  return;
4648
  }
4649
 
4650
- var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)).filter(function (item) {
4651
  return $(item).is(':visible');
4652
  });
4653
 
@@ -4700,12 +4651,12 @@
4700
  */
4701
 
4702
 
4703
- $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {
4704
  event.preventDefault();
4705
  event.stopPropagation();
4706
 
4707
  Dropdown._jQueryInterface.call($(this), 'toggle');
4708
- }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {
4709
  e.stopPropagation();
4710
  });
4711
  /**
@@ -4729,7 +4680,7 @@
4729
  */
4730
 
4731
  var NAME$5 = 'modal';
4732
- var VERSION$5 = '4.4.1';
4733
  var DATA_KEY$5 = 'bs.modal';
4734
  var EVENT_KEY$5 = "." + DATA_KEY$5;
4735
  var DATA_API_KEY$5 = '.data-api';
@@ -4748,50 +4699,42 @@
4748
  focus: 'boolean',
4749
  show: 'boolean'
4750
  };
4751
- var Event$5 = {
4752
- HIDE: "hide" + EVENT_KEY$5,
4753
- HIDE_PREVENTED: "hidePrevented" + EVENT_KEY$5,
4754
- HIDDEN: "hidden" + EVENT_KEY$5,
4755
- SHOW: "show" + EVENT_KEY$5,
4756
- SHOWN: "shown" + EVENT_KEY$5,
4757
- FOCUSIN: "focusin" + EVENT_KEY$5,
4758
- RESIZE: "resize" + EVENT_KEY$5,
4759
- CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5,
4760
- KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5,
4761
- MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5,
4762
- MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5,
4763
- CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
4764
- };
4765
- var ClassName$5 = {
4766
- SCROLLABLE: 'modal-dialog-scrollable',
4767
- SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
4768
- BACKDROP: 'modal-backdrop',
4769
- OPEN: 'modal-open',
4770
- FADE: 'fade',
4771
- SHOW: 'show',
4772
- STATIC: 'modal-static'
4773
- };
4774
- var Selector$5 = {
4775
- DIALOG: '.modal-dialog',
4776
- MODAL_BODY: '.modal-body',
4777
- DATA_TOGGLE: '[data-toggle="modal"]',
4778
- DATA_DISMISS: '[data-dismiss="modal"]',
4779
- FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
4780
- STICKY_CONTENT: '.sticky-top'
4781
- };
4782
  /**
4783
  * ------------------------------------------------------------------------
4784
  * Class Definition
4785
  * ------------------------------------------------------------------------
4786
  */
4787
 
4788
- var Modal =
4789
- /*#__PURE__*/
4790
- function () {
4791
  function Modal(element, config) {
4792
  this._config = this._getConfig(config);
4793
  this._element = element;
4794
- this._dialog = element.querySelector(Selector$5.DIALOG);
4795
  this._backdrop = null;
4796
  this._isShown = false;
4797
  this._isBodyOverflowing = false;
@@ -4815,11 +4758,11 @@
4815
  return;
4816
  }
4817
 
4818
- if ($(this._element).hasClass(ClassName$5.FADE)) {
4819
  this._isTransitioning = true;
4820
  }
4821
 
4822
- var showEvent = $.Event(Event$5.SHOW, {
4823
  relatedTarget: relatedTarget
4824
  });
4825
  $(this._element).trigger(showEvent);
@@ -4840,11 +4783,11 @@
4840
 
4841
  this._setResizeEvent();
4842
 
4843
- $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {
4844
  return _this.hide(event);
4845
  });
4846
- $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {
4847
- $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {
4848
  if ($(event.target).is(_this._element)) {
4849
  _this._ignoreBackdropClick = true;
4850
  }
@@ -4867,7 +4810,7 @@
4867
  return;
4868
  }
4869
 
4870
- var hideEvent = $.Event(Event$5.HIDE);
4871
  $(this._element).trigger(hideEvent);
4872
 
4873
  if (!this._isShown || hideEvent.isDefaultPrevented()) {
@@ -4875,7 +4818,7 @@
4875
  }
4876
 
4877
  this._isShown = false;
4878
- var transition = $(this._element).hasClass(ClassName$5.FADE);
4879
 
4880
  if (transition) {
4881
  this._isTransitioning = true;
@@ -4885,10 +4828,10 @@
4885
 
4886
  this._setResizeEvent();
4887
 
4888
- $(document).off(Event$5.FOCUSIN);
4889
- $(this._element).removeClass(ClassName$5.SHOW);
4890
- $(this._element).off(Event$5.CLICK_DISMISS);
4891
- $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);
4892
 
4893
  if (transition) {
4894
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
@@ -4905,12 +4848,12 @@
4905
  return $(htmlElement).off(EVENT_KEY$5);
4906
  });
4907
  /**
4908
- * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
4909
  * Do not move `document` in `htmlElements` array
4910
- * It will remove `Event.CLICK_DATA_API` event that should remain
4911
  */
4912
 
4913
- $(document).off(Event$5.FOCUSIN);
4914
  $.removeData(this._element, DATA_KEY$5);
4915
  this._config = null;
4916
  this._element = null;
@@ -4929,7 +4872,7 @@
4929
  ;
4930
 
4931
  _proto._getConfig = function _getConfig(config) {
4932
- config = _objectSpread2({}, Default$3, {}, config);
4933
  Util.typeCheckConfig(NAME$5, config, DefaultType$3);
4934
  return config;
4935
  };
@@ -4938,18 +4881,18 @@
4938
  var _this3 = this;
4939
 
4940
  if (this._config.backdrop === 'static') {
4941
- var hideEventPrevented = $.Event(Event$5.HIDE_PREVENTED);
4942
  $(this._element).trigger(hideEventPrevented);
4943
 
4944
  if (hideEventPrevented.defaultPrevented) {
4945
  return;
4946
  }
4947
 
4948
- this._element.classList.add(ClassName$5.STATIC);
4949
 
4950
  var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);
4951
  $(this._element).one(Util.TRANSITION_END, function () {
4952
- _this3._element.classList.remove(ClassName$5.STATIC);
4953
  }).emulateTransitionEnd(modalTransitionDuration);
4954
 
4955
  this._element.focus();
@@ -4961,8 +4904,8 @@
4961
  _proto._showElement = function _showElement(relatedTarget) {
4962
  var _this4 = this;
4963
 
4964
- var transition = $(this._element).hasClass(ClassName$5.FADE);
4965
- var modalBody = this._dialog ? this._dialog.querySelector(Selector$5.MODAL_BODY) : null;
4966
 
4967
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
4968
  // Don't move modal's DOM position
@@ -4975,7 +4918,7 @@
4975
 
4976
  this._element.setAttribute('aria-modal', true);
4977
 
4978
- if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE) && modalBody) {
4979
  modalBody.scrollTop = 0;
4980
  } else {
4981
  this._element.scrollTop = 0;
@@ -4985,13 +4928,13 @@
4985
  Util.reflow(this._element);
4986
  }
4987
 
4988
- $(this._element).addClass(ClassName$5.SHOW);
4989
 
4990
  if (this._config.focus) {
4991
  this._enforceFocus();
4992
  }
4993
 
4994
- var shownEvent = $.Event(Event$5.SHOWN, {
4995
  relatedTarget: relatedTarget
4996
  });
4997
 
@@ -5015,8 +4958,8 @@
5015
  _proto._enforceFocus = function _enforceFocus() {
5016
  var _this5 = this;
5017
 
5018
- $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop
5019
- .on(Event$5.FOCUSIN, function (event) {
5020
  if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {
5021
  _this5._element.focus();
5022
  }
@@ -5026,14 +4969,18 @@
5026
  _proto._setEscapeEvent = function _setEscapeEvent() {
5027
  var _this6 = this;
5028
 
5029
- if (this._isShown && this._config.keyboard) {
5030
- $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {
5031
- if (event.which === ESCAPE_KEYCODE$1) {
 
 
 
 
5032
  _this6._triggerBackdropTransition();
5033
  }
5034
  });
5035
  } else if (!this._isShown) {
5036
- $(this._element).off(Event$5.KEYDOWN_DISMISS);
5037
  }
5038
  };
5039
 
@@ -5041,11 +4988,11 @@
5041
  var _this7 = this;
5042
 
5043
  if (this._isShown) {
5044
- $(window).on(Event$5.RESIZE, function (event) {
5045
  return _this7.handleUpdate(event);
5046
  });
5047
  } else {
5048
- $(window).off(Event$5.RESIZE);
5049
  }
5050
  };
5051
 
@@ -5061,13 +5008,13 @@
5061
  this._isTransitioning = false;
5062
 
5063
  this._showBackdrop(function () {
5064
- $(document.body).removeClass(ClassName$5.OPEN);
5065
 
5066
  _this8._resetAdjustments();
5067
 
5068
  _this8._resetScrollbar();
5069
 
5070
- $(_this8._element).trigger(Event$5.HIDDEN);
5071
  });
5072
  };
5073
 
@@ -5081,18 +5028,18 @@
5081
  _proto._showBackdrop = function _showBackdrop(callback) {
5082
  var _this9 = this;
5083
 
5084
- var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';
5085
 
5086
  if (this._isShown && this._config.backdrop) {
5087
  this._backdrop = document.createElement('div');
5088
- this._backdrop.className = ClassName$5.BACKDROP;
5089
 
5090
  if (animate) {
5091
  this._backdrop.classList.add(animate);
5092
  }
5093
 
5094
  $(this._backdrop).appendTo(document.body);
5095
- $(this._element).on(Event$5.CLICK_DISMISS, function (event) {
5096
  if (_this9._ignoreBackdropClick) {
5097
  _this9._ignoreBackdropClick = false;
5098
  return;
@@ -5109,7 +5056,7 @@
5109
  Util.reflow(this._backdrop);
5110
  }
5111
 
5112
- $(this._backdrop).addClass(ClassName$5.SHOW);
5113
 
5114
  if (!callback) {
5115
  return;
@@ -5123,7 +5070,7 @@
5123
  var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
5124
  $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
5125
  } else if (!this._isShown && this._backdrop) {
5126
- $(this._backdrop).removeClass(ClassName$5.SHOW);
5127
 
5128
  var callbackRemove = function callbackRemove() {
5129
  _this9._removeBackdrop();
@@ -5133,7 +5080,7 @@
5133
  }
5134
  };
5135
 
5136
- if ($(this._element).hasClass(ClassName$5.FADE)) {
5137
  var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
5138
 
5139
  $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
@@ -5168,7 +5115,7 @@
5168
 
5169
  _proto._checkScrollbar = function _checkScrollbar() {
5170
  var rect = document.body.getBoundingClientRect();
5171
- this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
5172
  this._scrollbarWidth = this._getScrollbarWidth();
5173
  };
5174
 
@@ -5178,8 +5125,8 @@
5178
  if (this._isBodyOverflowing) {
5179
  // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
5180
  // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
5181
- var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));
5182
- var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding
5183
 
5184
  $(fixedContent).each(function (index, element) {
5185
  var actualPadding = element.style.paddingRight;
@@ -5198,19 +5145,19 @@
5198
  $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
5199
  }
5200
 
5201
- $(document.body).addClass(ClassName$5.OPEN);
5202
  };
5203
 
5204
  _proto._resetScrollbar = function _resetScrollbar() {
5205
  // Restore fixed content padding
5206
- var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));
5207
  $(fixedContent).each(function (index, element) {
5208
  var padding = $(element).data('padding-right');
5209
  $(element).removeData('padding-right');
5210
  element.style.paddingRight = padding ? padding : '';
5211
  }); // Restore sticky content
5212
 
5213
- var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT));
5214
  $(elements).each(function (index, element) {
5215
  var margin = $(element).data('margin-right');
5216
 
@@ -5227,7 +5174,7 @@
5227
  _proto._getScrollbarWidth = function _getScrollbarWidth() {
5228
  // thx d.walsh
5229
  var scrollDiv = document.createElement('div');
5230
- scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;
5231
  document.body.appendChild(scrollDiv);
5232
  var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
5233
  document.body.removeChild(scrollDiv);
@@ -5239,7 +5186,7 @@
5239
  return this.each(function () {
5240
  var data = $(this).data(DATA_KEY$5);
5241
 
5242
- var _config = _objectSpread2({}, Default$3, {}, $(this).data(), {}, typeof config === 'object' && config ? config : {});
5243
 
5244
  if (!data) {
5245
  data = new Modal(this, _config);
@@ -5279,7 +5226,7 @@
5279
  */
5280
 
5281
 
5282
- $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {
5283
  var _this11 = this;
5284
 
5285
  var target;
@@ -5289,19 +5236,19 @@
5289
  target = document.querySelector(selector);
5290
  }
5291
 
5292
- var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2({}, $(target).data(), {}, $(this).data());
5293
 
5294
  if (this.tagName === 'A' || this.tagName === 'AREA') {
5295
  event.preventDefault();
5296
  }
5297
 
5298
- var $target = $(target).one(Event$5.SHOW, function (showEvent) {
5299
  if (showEvent.isDefaultPrevented()) {
5300
  // Only register focus restorer if modal will actually get shown
5301
  return;
5302
  }
5303
 
5304
- $target.one(Event$5.HIDDEN, function () {
5305
  if ($(_this11).is(':visible')) {
5306
  _this11.focus();
5307
  }
@@ -5326,7 +5273,7 @@
5326
 
5327
  /**
5328
  * --------------------------------------------------------------------------
5329
- * Bootstrap (v4.4.1): tools/sanitizer.js
5330
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5331
  * --------------------------------------------------------------------------
5332
  */
@@ -5351,7 +5298,7 @@
5351
  h5: [],
5352
  h6: [],
5353
  i: [],
5354
- img: ['src', 'alt', 'title', 'width', 'height'],
5355
  li: [],
5356
  ol: [],
5357
  p: [],
@@ -5371,14 +5318,14 @@
5371
  * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
5372
  */
5373
 
5374
- var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
5375
  /**
5376
  * A pattern that matches safe data URLs. Only matches image, video and audio types.
5377
  *
5378
  * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
5379
  */
5380
 
5381
- var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
5382
 
5383
  function allowedAttribute(attr, allowedAttributeList) {
5384
  var attrName = attr.nodeName.toLowerCase();
@@ -5395,7 +5342,7 @@
5395
  return attrRegex instanceof RegExp;
5396
  }); // Check if a regular expression validates the attribute.
5397
 
5398
- for (var i = 0, l = regExp.length; i < l; i++) {
5399
  if (attrName.match(regExp[i])) {
5400
  return true;
5401
  }
@@ -5452,7 +5399,7 @@
5452
  */
5453
 
5454
  var NAME$6 = 'tooltip';
5455
- var VERSION$6 = '4.4.1';
5456
  var DATA_KEY$6 = 'bs.tooltip';
5457
  var EVENT_KEY$6 = "." + DATA_KEY$6;
5458
  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
@@ -5477,7 +5424,7 @@
5477
  whiteList: 'object',
5478
  popperConfig: '(null|object)'
5479
  };
5480
- var AttachmentMap$1 = {
5481
  AUTO: 'auto',
5482
  TOP: 'top',
5483
  RIGHT: 'right',
@@ -5502,11 +5449,9 @@
5502
  whiteList: DefaultWhitelist,
5503
  popperConfig: null
5504
  };
5505
- var HoverState = {
5506
- SHOW: 'show',
5507
- OUT: 'out'
5508
- };
5509
- var Event$6 = {
5510
  HIDE: "hide" + EVENT_KEY$6,
5511
  HIDDEN: "hidden" + EVENT_KEY$6,
5512
  SHOW: "show" + EVENT_KEY$6,
@@ -5518,30 +5463,21 @@
5518
  MOUSEENTER: "mouseenter" + EVENT_KEY$6,
5519
  MOUSELEAVE: "mouseleave" + EVENT_KEY$6
5520
  };
5521
- var ClassName$6 = {
5522
- FADE: 'fade',
5523
- SHOW: 'show'
5524
- };
5525
- var Selector$6 = {
5526
- TOOLTIP: '.tooltip',
5527
- TOOLTIP_INNER: '.tooltip-inner',
5528
- ARROW: '.arrow'
5529
- };
5530
- var Trigger = {
5531
- HOVER: 'hover',
5532
- FOCUS: 'focus',
5533
- CLICK: 'click',
5534
- MANUAL: 'manual'
5535
- };
5536
  /**
5537
  * ------------------------------------------------------------------------
5538
  * Class Definition
5539
  * ------------------------------------------------------------------------
5540
  */
5541
 
5542
- var Tooltip =
5543
- /*#__PURE__*/
5544
- function () {
5545
  function Tooltip(element, config) {
5546
  if (typeof Popper === 'undefined') {
5547
  throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
@@ -5599,7 +5535,7 @@
5599
  context._leave(null, context);
5600
  }
5601
  } else {
5602
- if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {
5603
  this._leave(null, this);
5604
 
5605
  return;
@@ -5659,7 +5595,7 @@
5659
  this.setContent();
5660
 
5661
  if (this.config.animation) {
5662
- $(tip).addClass(ClassName$6.FADE);
5663
  }
5664
 
5665
  var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
@@ -5678,7 +5614,7 @@
5678
 
5679
  $(this.element).trigger(this.constructor.Event.INSERTED);
5680
  this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));
5681
- $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra
5682
  // empty mouseover listeners to the body's immediate children;
5683
  // only needed because of broken event delegation on iOS
5684
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
@@ -5696,12 +5632,12 @@
5696
  _this._hoverState = null;
5697
  $(_this.element).trigger(_this.constructor.Event.SHOWN);
5698
 
5699
- if (prevHoverState === HoverState.OUT) {
5700
  _this._leave(null, _this);
5701
  }
5702
  };
5703
 
5704
- if ($(this.tip).hasClass(ClassName$6.FADE)) {
5705
  var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
5706
  $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5707
  } else {
@@ -5717,7 +5653,7 @@
5717
  var hideEvent = $.Event(this.constructor.Event.HIDE);
5718
 
5719
  var complete = function complete() {
5720
- if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
5721
  tip.parentNode.removeChild(tip);
5722
  }
5723
 
@@ -5742,18 +5678,18 @@
5742
  return;
5743
  }
5744
 
5745
- $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra
5746
  // empty mouseover listeners we added for iOS support
5747
 
5748
  if ('ontouchstart' in document.documentElement) {
5749
  $(document.body).children().off('mouseover', null, $.noop);
5750
  }
5751
 
5752
- this._activeTrigger[Trigger.CLICK] = false;
5753
- this._activeTrigger[Trigger.FOCUS] = false;
5754
- this._activeTrigger[Trigger.HOVER] = false;
5755
 
5756
- if ($(this.tip).hasClass(ClassName$6.FADE)) {
5757
  var transitionDuration = Util.getTransitionDurationFromElement(tip);
5758
  $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5759
  } else {
@@ -5785,8 +5721,8 @@
5785
 
5786
  _proto.setContent = function setContent() {
5787
  var tip = this.getTipElement();
5788
- this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());
5789
- $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW);
5790
  };
5791
 
5792
  _proto.setElementContent = function setElementContent($element, content) {
@@ -5836,7 +5772,7 @@
5836
  behavior: this.config.fallbackPlacement
5837
  },
5838
  arrow: {
5839
- element: Selector$6.ARROW
5840
  },
5841
  preventOverflow: {
5842
  boundariesElement: this.config.boundary
@@ -5851,7 +5787,7 @@
5851
  return _this3._handlePopperPlacementChange(data);
5852
  }
5853
  };
5854
- return _objectSpread2({}, defaultBsConfig, {}, this.config.popperConfig);
5855
  };
5856
 
5857
  _proto._getOffset = function _getOffset() {
@@ -5861,7 +5797,7 @@
5861
 
5862
  if (typeof this.config.offset === 'function') {
5863
  offset.fn = function (data) {
5864
- data.offsets = _objectSpread2({}, data.offsets, {}, _this4.config.offset(data.offsets, _this4.element) || {});
5865
  return data;
5866
  };
5867
  } else {
@@ -5884,7 +5820,7 @@
5884
  };
5885
 
5886
  _proto._getAttachment = function _getAttachment(placement) {
5887
- return AttachmentMap$1[placement.toUpperCase()];
5888
  };
5889
 
5890
  _proto._setListeners = function _setListeners() {
@@ -5896,9 +5832,9 @@
5896
  $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
5897
  return _this5.toggle(event);
5898
  });
5899
- } else if (trigger !== Trigger.MANUAL) {
5900
- var eventIn = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
5901
- var eventOut = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
5902
  $(_this5.element).on(eventIn, _this5.config.selector, function (event) {
5903
  return _this5._enter(event);
5904
  }).on(eventOut, _this5.config.selector, function (event) {
@@ -5916,7 +5852,7 @@
5916
  $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
5917
 
5918
  if (this.config.selector) {
5919
- this.config = _objectSpread2({}, this.config, {
5920
  trigger: 'manual',
5921
  selector: ''
5922
  });
@@ -5944,16 +5880,16 @@
5944
  }
5945
 
5946
  if (event) {
5947
- context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
5948
  }
5949
 
5950
- if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {
5951
- context._hoverState = HoverState.SHOW;
5952
  return;
5953
  }
5954
 
5955
  clearTimeout(context._timeout);
5956
- context._hoverState = HoverState.SHOW;
5957
 
5958
  if (!context.config.delay || !context.config.delay.show) {
5959
  context.show();
@@ -5961,7 +5897,7 @@
5961
  }
5962
 
5963
  context._timeout = setTimeout(function () {
5964
- if (context._hoverState === HoverState.SHOW) {
5965
  context.show();
5966
  }
5967
  }, context.config.delay.show);
@@ -5977,7 +5913,7 @@
5977
  }
5978
 
5979
  if (event) {
5980
- context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
5981
  }
5982
 
5983
  if (context._isWithActiveTrigger()) {
@@ -5985,7 +5921,7 @@
5985
  }
5986
 
5987
  clearTimeout(context._timeout);
5988
- context._hoverState = HoverState.OUT;
5989
 
5990
  if (!context.config.delay || !context.config.delay.hide) {
5991
  context.hide();
@@ -5993,7 +5929,7 @@
5993
  }
5994
 
5995
  context._timeout = setTimeout(function () {
5996
- if (context._hoverState === HoverState.OUT) {
5997
  context.hide();
5998
  }
5999
  }, context.config.delay.hide);
@@ -6016,7 +5952,7 @@
6016
  delete dataAttributes[dataAttr];
6017
  }
6018
  });
6019
- config = _objectSpread2({}, this.constructor.Default, {}, dataAttributes, {}, typeof config === 'object' && config ? config : {});
6020
 
6021
  if (typeof config.delay === 'number') {
6022
  config.delay = {
@@ -6066,8 +6002,7 @@
6066
  };
6067
 
6068
  _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
6069
- var popperInstance = popperData.instance;
6070
- this.tip = popperInstance.popper;
6071
 
6072
  this._cleanTipClass();
6073
 
@@ -6082,7 +6017,7 @@
6082
  return;
6083
  }
6084
 
6085
- $(tip).removeClass(ClassName$6.FADE);
6086
  this.config.animation = false;
6087
  this.hide();
6088
  this.show();
@@ -6138,7 +6073,7 @@
6138
  }, {
6139
  key: "Event",
6140
  get: function get() {
6141
- return Event$6;
6142
  }
6143
  }, {
6144
  key: "EVENT_KEY",
@@ -6176,33 +6111,29 @@
6176
  */
6177
 
6178
  var NAME$7 = 'popover';
6179
- var VERSION$7 = '4.4.1';
6180
  var DATA_KEY$7 = 'bs.popover';
6181
  var EVENT_KEY$7 = "." + DATA_KEY$7;
6182
  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
6183
  var CLASS_PREFIX$1 = 'bs-popover';
6184
  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
6185
 
6186
- var Default$5 = _objectSpread2({}, Tooltip.Default, {
6187
  placement: 'right',
6188
  trigger: 'click',
6189
  content: '',
6190
  template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
6191
  });
6192
 
6193
- var DefaultType$5 = _objectSpread2({}, Tooltip.DefaultType, {
6194
  content: '(string|element|function)'
6195
  });
6196
 
6197
- var ClassName$7 = {
6198
- FADE: 'fade',
6199
- SHOW: 'show'
6200
- };
6201
- var Selector$7 = {
6202
- TITLE: '.popover-header',
6203
- CONTENT: '.popover-body'
6204
- };
6205
- var Event$7 = {
6206
  HIDE: "hide" + EVENT_KEY$7,
6207
  HIDDEN: "hidden" + EVENT_KEY$7,
6208
  SHOW: "show" + EVENT_KEY$7,
@@ -6220,9 +6151,7 @@
6220
  * ------------------------------------------------------------------------
6221
  */
6222
 
6223
- var Popover =
6224
- /*#__PURE__*/
6225
- function (_Tooltip) {
6226
  _inheritsLoose(Popover, _Tooltip);
6227
 
6228
  function Popover() {
@@ -6248,7 +6177,7 @@
6248
  _proto.setContent = function setContent() {
6249
  var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
6250
 
6251
- this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());
6252
 
6253
  var content = this._getContent();
6254
 
@@ -6256,8 +6185,8 @@
6256
  content = content.call(this.element);
6257
  }
6258
 
6259
- this.setElementContent($tip.find(Selector$7.CONTENT), content);
6260
- $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
6261
  } // Private
6262
  ;
6263
 
@@ -6324,7 +6253,7 @@
6324
  }, {
6325
  key: "Event",
6326
  get: function get() {
6327
- return Event$7;
6328
  }
6329
  }, {
6330
  key: "EVENT_KEY",
@@ -6362,7 +6291,7 @@
6362
  */
6363
 
6364
  var NAME$8 = 'scrollspy';
6365
- var VERSION$8 = '4.4.1';
6366
  var DATA_KEY$8 = 'bs.scrollspy';
6367
  var EVENT_KEY$8 = "." + DATA_KEY$8;
6368
  var DATA_API_KEY$6 = '.data-api';
@@ -6377,52 +6306,40 @@
6377
  method: 'string',
6378
  target: '(string|element)'
6379
  };
6380
- var Event$8 = {
6381
- ACTIVATE: "activate" + EVENT_KEY$8,
6382
- SCROLL: "scroll" + EVENT_KEY$8,
6383
- LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6
6384
- };
6385
- var ClassName$8 = {
6386
- DROPDOWN_ITEM: 'dropdown-item',
6387
- DROPDOWN_MENU: 'dropdown-menu',
6388
- ACTIVE: 'active'
6389
- };
6390
- var Selector$8 = {
6391
- DATA_SPY: '[data-spy="scroll"]',
6392
- ACTIVE: '.active',
6393
- NAV_LIST_GROUP: '.nav, .list-group',
6394
- NAV_LINKS: '.nav-link',
6395
- NAV_ITEMS: '.nav-item',
6396
- LIST_ITEMS: '.list-group-item',
6397
- DROPDOWN: '.dropdown',
6398
- DROPDOWN_ITEMS: '.dropdown-item',
6399
- DROPDOWN_TOGGLE: '.dropdown-toggle'
6400
- };
6401
- var OffsetMethod = {
6402
- OFFSET: 'offset',
6403
- POSITION: 'position'
6404
- };
6405
  /**
6406
  * ------------------------------------------------------------------------
6407
  * Class Definition
6408
  * ------------------------------------------------------------------------
6409
  */
6410
 
6411
- var ScrollSpy =
6412
- /*#__PURE__*/
6413
- function () {
6414
  function ScrollSpy(element, config) {
6415
  var _this = this;
6416
 
6417
  this._element = element;
6418
  this._scrollElement = element.tagName === 'BODY' ? window : element;
6419
  this._config = this._getConfig(config);
6420
- this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS);
6421
  this._offsets = [];
6422
  this._targets = [];
6423
  this._activeTarget = null;
6424
  this._scrollHeight = 0;
6425
- $(this._scrollElement).on(Event$8.SCROLL, function (event) {
6426
  return _this._process(event);
6427
  });
6428
  this.refresh();
@@ -6437,9 +6354,9 @@
6437
  _proto.refresh = function refresh() {
6438
  var _this2 = this;
6439
 
6440
- var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
6441
  var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
6442
- var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
6443
  this._offsets = [];
6444
  this._targets = [];
6445
  this._scrollHeight = this._getScrollHeight();
@@ -6488,9 +6405,9 @@
6488
  ;
6489
 
6490
  _proto._getConfig = function _getConfig(config) {
6491
- config = _objectSpread2({}, Default$6, {}, typeof config === 'object' && config ? config : {});
6492
 
6493
- if (typeof config.target !== 'string') {
6494
  var id = $(config.target).attr('id');
6495
 
6496
  if (!id) {
@@ -6546,9 +6463,7 @@
6546
  return;
6547
  }
6548
 
6549
- var offsetLength = this._offsets.length;
6550
-
6551
- for (var i = offsetLength; i--;) {
6552
  var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
6553
 
6554
  if (isActiveTarget) {
@@ -6568,29 +6483,29 @@
6568
 
6569
  var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
6570
 
6571
- if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {
6572
- $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);
6573
- $link.addClass(ClassName$8.ACTIVE);
6574
  } else {
6575
  // Set triggered link as active
6576
- $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active
6577
  // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
6578
 
6579
- $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + ", " + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item
6580
 
6581
- $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);
6582
  }
6583
 
6584
- $(this._scrollElement).trigger(Event$8.ACTIVATE, {
6585
  relatedTarget: target
6586
  });
6587
  };
6588
 
6589
  _proto._clear = function _clear() {
6590
  [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
6591
- return node.classList.contains(ClassName$8.ACTIVE);
6592
  }).forEach(function (node) {
6593
- return node.classList.remove(ClassName$8.ACTIVE);
6594
  });
6595
  } // Static
6596
  ;
@@ -6637,8 +6552,8 @@
6637
  */
6638
 
6639
 
6640
- $(window).on(Event$8.LOAD_DATA_API, function () {
6641
- var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));
6642
  var scrollSpysLength = scrollSpys.length;
6643
 
6644
  for (var i = scrollSpysLength; i--;) {
@@ -6668,43 +6583,35 @@
6668
  */
6669
 
6670
  var NAME$9 = 'tab';
6671
- var VERSION$9 = '4.4.1';
6672
  var DATA_KEY$9 = 'bs.tab';
6673
  var EVENT_KEY$9 = "." + DATA_KEY$9;
6674
  var DATA_API_KEY$7 = '.data-api';
6675
  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
6676
- var Event$9 = {
6677
- HIDE: "hide" + EVENT_KEY$9,
6678
- HIDDEN: "hidden" + EVENT_KEY$9,
6679
- SHOW: "show" + EVENT_KEY$9,
6680
- SHOWN: "shown" + EVENT_KEY$9,
6681
- CLICK_DATA_API: "click" + EVENT_KEY$9 + DATA_API_KEY$7
6682
- };
6683
- var ClassName$9 = {
6684
- DROPDOWN_MENU: 'dropdown-menu',
6685
- ACTIVE: 'active',
6686
- DISABLED: 'disabled',
6687
- FADE: 'fade',
6688
- SHOW: 'show'
6689
- };
6690
- var Selector$9 = {
6691
- DROPDOWN: '.dropdown',
6692
- NAV_LIST_GROUP: '.nav, .list-group',
6693
- ACTIVE: '.active',
6694
- ACTIVE_UL: '> li > .active',
6695
- DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
6696
- DROPDOWN_TOGGLE: '.dropdown-toggle',
6697
- DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
6698
- };
6699
  /**
6700
  * ------------------------------------------------------------------------
6701
  * Class Definition
6702
  * ------------------------------------------------------------------------
6703
  */
6704
 
6705
- var Tab =
6706
- /*#__PURE__*/
6707
- function () {
6708
  function Tab(element) {
6709
  this._element = element;
6710
  } // Getters
@@ -6716,25 +6623,25 @@
6716
  _proto.show = function show() {
6717
  var _this = this;
6718
 
6719
- if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {
6720
  return;
6721
  }
6722
 
6723
  var target;
6724
  var previous;
6725
- var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];
6726
  var selector = Util.getSelectorFromElement(this._element);
6727
 
6728
  if (listElement) {
6729
- var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;
6730
  previous = $.makeArray($(listElement).find(itemSelector));
6731
  previous = previous[previous.length - 1];
6732
  }
6733
 
6734
- var hideEvent = $.Event(Event$9.HIDE, {
6735
  relatedTarget: this._element
6736
  });
6737
- var showEvent = $.Event(Event$9.SHOW, {
6738
  relatedTarget: previous
6739
  });
6740
 
@@ -6755,10 +6662,10 @@
6755
  this._activate(this._element, listElement);
6756
 
6757
  var complete = function complete() {
6758
- var hiddenEvent = $.Event(Event$9.HIDDEN, {
6759
  relatedTarget: _this._element
6760
  });
6761
- var shownEvent = $.Event(Event$9.SHOWN, {
6762
  relatedTarget: previous
6763
  });
6764
  $(previous).trigger(hiddenEvent);
@@ -6781,9 +6688,9 @@
6781
  _proto._activate = function _activate(element, container, callback) {
6782
  var _this2 = this;
6783
 
6784
- var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);
6785
  var active = activeElements[0];
6786
- var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);
6787
 
6788
  var complete = function complete() {
6789
  return _this2._transitionComplete(element, active, callback);
@@ -6791,7 +6698,7 @@
6791
 
6792
  if (active && isTransitioning) {
6793
  var transitionDuration = Util.getTransitionDurationFromElement(active);
6794
- $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6795
  } else {
6796
  complete();
6797
  }
@@ -6799,11 +6706,11 @@
6799
 
6800
  _proto._transitionComplete = function _transitionComplete(element, active, callback) {
6801
  if (active) {
6802
- $(active).removeClass(ClassName$9.ACTIVE);
6803
- var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];
6804
 
6805
  if (dropdownChild) {
6806
- $(dropdownChild).removeClass(ClassName$9.ACTIVE);
6807
  }
6808
 
6809
  if (active.getAttribute('role') === 'tab') {
@@ -6811,7 +6718,7 @@
6811
  }
6812
  }
6813
 
6814
- $(element).addClass(ClassName$9.ACTIVE);
6815
 
6816
  if (element.getAttribute('role') === 'tab') {
6817
  element.setAttribute('aria-selected', true);
@@ -6819,16 +6726,16 @@
6819
 
6820
  Util.reflow(element);
6821
 
6822
- if (element.classList.contains(ClassName$9.FADE)) {
6823
- element.classList.add(ClassName$9.SHOW);
6824
  }
6825
 
6826
- if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
6827
- var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
6828
 
6829
  if (dropdownElement) {
6830
- var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));
6831
- $(dropdownToggleList).addClass(ClassName$9.ACTIVE);
6832
  }
6833
 
6834
  element.setAttribute('aria-expanded', true);
@@ -6876,7 +6783,7 @@
6876
  */
6877
 
6878
 
6879
- $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {
6880
  event.preventDefault();
6881
 
6882
  Tab._jQueryInterface.call($(this), 'show');
@@ -6902,23 +6809,19 @@
6902
  */
6903
 
6904
  var NAME$a = 'toast';
6905
- var VERSION$a = '4.4.1';
6906
  var DATA_KEY$a = 'bs.toast';
6907
  var EVENT_KEY$a = "." + DATA_KEY$a;
6908
  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
6909
- var Event$a = {
6910
- CLICK_DISMISS: "click.dismiss" + EVENT_KEY$a,
6911
- HIDE: "hide" + EVENT_KEY$a,
6912
- HIDDEN: "hidden" + EVENT_KEY$a,
6913
- SHOW: "show" + EVENT_KEY$a,
6914
- SHOWN: "shown" + EVENT_KEY$a
6915
- };
6916
- var ClassName$a = {
6917
- FADE: 'fade',
6918
- HIDE: 'hide',
6919
- SHOW: 'show',
6920
- SHOWING: 'showing'
6921
- };
6922
  var DefaultType$7 = {
6923
  animation: 'boolean',
6924
  autohide: 'boolean',
@@ -6929,18 +6832,14 @@
6929
  autohide: true,
6930
  delay: 500
6931
  };
6932
- var Selector$a = {
6933
- DATA_DISMISS: '[data-dismiss="toast"]'
6934
- };
6935
  /**
6936
  * ------------------------------------------------------------------------
6937
  * Class Definition
6938
  * ------------------------------------------------------------------------
6939
  */
6940
 
6941
- var Toast =
6942
- /*#__PURE__*/
6943
- function () {
6944
  function Toast(element, config) {
6945
  this._element = element;
6946
  this._config = this._getConfig(config);
@@ -6956,7 +6855,7 @@
6956
  _proto.show = function show() {
6957
  var _this = this;
6958
 
6959
- var showEvent = $.Event(Event$a.SHOW);
6960
  $(this._element).trigger(showEvent);
6961
 
6962
  if (showEvent.isDefaultPrevented()) {
@@ -6964,15 +6863,15 @@
6964
  }
6965
 
6966
  if (this._config.animation) {
6967
- this._element.classList.add(ClassName$a.FADE);
6968
  }
6969
 
6970
  var complete = function complete() {
6971
- _this._element.classList.remove(ClassName$a.SHOWING);
6972
 
6973
- _this._element.classList.add(ClassName$a.SHOW);
6974
 
6975
- $(_this._element).trigger(Event$a.SHOWN);
6976
 
6977
  if (_this._config.autohide) {
6978
  _this._timeout = setTimeout(function () {
@@ -6981,11 +6880,11 @@
6981
  }
6982
  };
6983
 
6984
- this._element.classList.remove(ClassName$a.HIDE);
6985
 
6986
  Util.reflow(this._element);
6987
 
6988
- this._element.classList.add(ClassName$a.SHOWING);
6989
 
6990
  if (this._config.animation) {
6991
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
@@ -6996,11 +6895,11 @@
6996
  };
6997
 
6998
  _proto.hide = function hide() {
6999
- if (!this._element.classList.contains(ClassName$a.SHOW)) {
7000
  return;
7001
  }
7002
 
7003
- var hideEvent = $.Event(Event$a.HIDE);
7004
  $(this._element).trigger(hideEvent);
7005
 
7006
  if (hideEvent.isDefaultPrevented()) {
@@ -7014,11 +6913,11 @@
7014
  clearTimeout(this._timeout);
7015
  this._timeout = null;
7016
 
7017
- if (this._element.classList.contains(ClassName$a.SHOW)) {
7018
- this._element.classList.remove(ClassName$a.SHOW);
7019
  }
7020
 
7021
- $(this._element).off(Event$a.CLICK_DISMISS);
7022
  $.removeData(this._element, DATA_KEY$a);
7023
  this._element = null;
7024
  this._config = null;
@@ -7026,7 +6925,7 @@
7026
  ;
7027
 
7028
  _proto._getConfig = function _getConfig(config) {
7029
- config = _objectSpread2({}, Default$7, {}, $(this._element).data(), {}, typeof config === 'object' && config ? config : {});
7030
  Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
7031
  return config;
7032
  };
@@ -7034,7 +6933,7 @@
7034
  _proto._setListeners = function _setListeners() {
7035
  var _this2 = this;
7036
 
7037
- $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {
7038
  return _this2.hide();
7039
  });
7040
  };
@@ -7043,12 +6942,12 @@
7043
  var _this3 = this;
7044
 
7045
  var complete = function complete() {
7046
- _this3._element.classList.add(ClassName$a.HIDE);
7047
 
7048
- $(_this3._element).trigger(Event$a.HIDDEN);
7049
  };
7050
 
7051
- this._element.classList.remove(ClassName$a.SHOW);
7052
 
7053
  if (this._config.animation) {
7054
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
1
  /*!
2
+ * Bootstrap v4.5.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
  (function (global, factory) {
9
  (global = global || self, factory(global.bootstrap = {}, global.jQuery));
10
  }(this, (function (exports, $) { 'use strict';
11
 
12
+ $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;
13
 
14
  function _defineProperties(target, props) {
15
  for (var i = 0; i < props.length; i++) {
84
 
85
  /**
86
  * --------------------------------------------------------------------------
87
+ * Bootstrap (v4.5.0): util.js
88
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
89
  * --------------------------------------------------------------------------
90
  */
99
  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
100
 
101
  function toType(obj) {
102
+ if (obj === null || typeof obj === 'undefined') {
103
+ return "" + obj;
104
+ }
105
+
106
  return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
107
  }
108
 
115
  return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
116
  }
117
 
118
+ return undefined;
119
  }
120
  };
121
  }
265
  */
266
 
267
  var NAME = 'alert';
268
+ var VERSION = '4.5.0';
269
  var DATA_KEY = 'bs.alert';
270
  var EVENT_KEY = "." + DATA_KEY;
271
  var DATA_API_KEY = '.data-api';
272
  var JQUERY_NO_CONFLICT = $.fn[NAME];
273
+ var SELECTOR_DISMISS = '[data-dismiss="alert"]';
274
+ var EVENT_CLOSE = "close" + EVENT_KEY;
275
+ var EVENT_CLOSED = "closed" + EVENT_KEY;
276
+ var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
277
+ var CLASS_NAME_ALERT = 'alert';
278
+ var CLASS_NAME_FADE = 'fade';
279
+ var CLASS_NAME_SHOW = 'show';
 
 
 
 
 
 
280
  /**
281
  * ------------------------------------------------------------------------
282
  * Class Definition
283
  * ------------------------------------------------------------------------
284
  */
285
 
286
+ var Alert = /*#__PURE__*/function () {
 
 
287
  function Alert(element) {
288
  this._element = element;
289
  } // Getters
323
  }
324
 
325
  if (!parent) {
326
+ parent = $(element).closest("." + CLASS_NAME_ALERT)[0];
327
  }
328
 
329
  return parent;
330
  };
331
 
332
  _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
333
+ var closeEvent = $.Event(EVENT_CLOSE);
334
  $(element).trigger(closeEvent);
335
  return closeEvent;
336
  };
338
  _proto._removeElement = function _removeElement(element) {
339
  var _this = this;
340
 
341
+ $(element).removeClass(CLASS_NAME_SHOW);
342
 
343
+ if (!$(element).hasClass(CLASS_NAME_FADE)) {
344
  this._destroyElement(element);
345
 
346
  return;
353
  };
354
 
355
  _proto._destroyElement = function _destroyElement(element) {
356
+ $(element).detach().trigger(EVENT_CLOSED).remove();
357
  } // Static
358
  ;
359
 
399
  */
400
 
401
 
402
+ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
403
  /**
404
  * ------------------------------------------------------------------------
405
  * jQuery
421
  */
422
 
423
  var NAME$1 = 'button';
424
+ var VERSION$1 = '4.5.0';
425
  var DATA_KEY$1 = 'bs.button';
426
  var EVENT_KEY$1 = "." + DATA_KEY$1;
427
  var DATA_API_KEY$1 = '.data-api';
428
  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
429
+ var CLASS_NAME_ACTIVE = 'active';
430
+ var CLASS_NAME_BUTTON = 'btn';
431
+ var CLASS_NAME_FOCUS = 'focus';
432
+ var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
433
+ var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
434
+ var SELECTOR_DATA_TOGGLE = '[data-toggle="button"]';
435
+ var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
436
+ var SELECTOR_INPUT = 'input:not([type="hidden"])';
437
+ var SELECTOR_ACTIVE = '.active';
438
+ var SELECTOR_BUTTON = '.btn';
439
+ var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$1 + DATA_API_KEY$1;
440
+ var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1);
441
+ var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$1 + DATA_API_KEY$1;
 
 
 
 
 
 
442
  /**
443
  * ------------------------------------------------------------------------
444
  * Class Definition
445
  * ------------------------------------------------------------------------
446
  */
447
 
448
+ var Button = /*#__PURE__*/function () {
 
 
449
  function Button(element) {
450
  this._element = element;
451
  } // Getters
457
  _proto.toggle = function toggle() {
458
  var triggerChangeEvent = true;
459
  var addAriaPressed = true;
460
+ var rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0];
461
 
462
  if (rootElement) {
463
+ var input = this._element.querySelector(SELECTOR_INPUT);
464
 
465
  if (input) {
466
  if (input.type === 'radio') {
467
+ if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
468
  triggerChangeEvent = false;
469
  } else {
470
+ var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);
471
 
472
  if (activeElement) {
473
+ $(activeElement).removeClass(CLASS_NAME_ACTIVE);
474
  }
475
  }
 
 
 
 
 
 
 
476
  }
477
 
478
  if (triggerChangeEvent) {
479
+ // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
480
+ if (input.type === 'checkbox' || input.type === 'radio') {
481
+ input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);
482
+ }
483
+
484
  $(input).trigger('change');
485
  }
486
 
491
 
492
  if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
493
  if (addAriaPressed) {
494
+ this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE));
495
  }
496
 
497
  if (triggerChangeEvent) {
498
+ $(this._element).toggleClass(CLASS_NAME_ACTIVE);
499
  }
500
  }
501
  };
537
  */
538
 
539
 
540
+ $(document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
541
  var button = event.target;
542
+ var initialButton = button;
543
 
544
+ if (!$(button).hasClass(CLASS_NAME_BUTTON)) {
545
+ button = $(button).closest(SELECTOR_BUTTON)[0];
546
  }
547
 
548
  if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
549
  event.preventDefault(); // work around Firefox bug #1540995
550
  } else {
551
+ var inputBtn = button.querySelector(SELECTOR_INPUT);
552
 
553
  if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
554
  event.preventDefault(); // work around Firefox bug #1540995
556
  return;
557
  }
558
 
559
+ if (initialButton.tagName === 'LABEL' && inputBtn && inputBtn.type === 'checkbox') {
560
+ event.preventDefault(); // work around event sent to label and input
561
+ }
562
+
563
  Button._jQueryInterface.call($(button), 'toggle');
564
  }
565
+ }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
566
+ var button = $(event.target).closest(SELECTOR_BUTTON)[0];
567
+ $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
568
  });
569
+ $(window).on(EVENT_LOAD_DATA_API, function () {
570
  // ensure correct active class is set to match the controls' actual values/states
571
  // find all checkboxes/readio buttons inside data-toggle groups
572
+ var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
573
 
574
  for (var i = 0, len = buttons.length; i < len; i++) {
575
  var button = buttons[i];
576
+ var input = button.querySelector(SELECTOR_INPUT);
577
 
578
  if (input.checked || input.hasAttribute('checked')) {
579
+ button.classList.add(CLASS_NAME_ACTIVE);
580
  } else {
581
+ button.classList.remove(CLASS_NAME_ACTIVE);
582
  }
583
  } // find all button toggles
584
 
585
 
586
+ buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
587
 
588
  for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
589
  var _button = buttons[_i];
590
 
591
  if (_button.getAttribute('aria-pressed') === 'true') {
592
+ _button.classList.add(CLASS_NAME_ACTIVE);
593
  } else {
594
+ _button.classList.remove(CLASS_NAME_ACTIVE);
595
  }
596
  }
597
  });
616
  */
617
 
618
  var NAME$2 = 'carousel';
619
+ var VERSION$2 = '4.5.0';
620
  var DATA_KEY$2 = 'bs.carousel';
621
  var EVENT_KEY$2 = "." + DATA_KEY$2;
622
  var DATA_API_KEY$2 = '.data-api';
644
  wrap: 'boolean',
645
  touch: 'boolean'
646
  };
647
+ var DIRECTION_NEXT = 'next';
648
+ var DIRECTION_PREV = 'prev';
649
+ var DIRECTION_LEFT = 'left';
650
+ var DIRECTION_RIGHT = 'right';
651
+ var EVENT_SLIDE = "slide" + EVENT_KEY$2;
652
+ var EVENT_SLID = "slid" + EVENT_KEY$2;
653
+ var EVENT_KEYDOWN = "keydown" + EVENT_KEY$2;
654
+ var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$2;
655
+ var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$2;
656
+ var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$2;
657
+ var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$2;
658
+ var EVENT_TOUCHEND = "touchend" + EVENT_KEY$2;
659
+ var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$2;
660
+ var EVENT_POINTERUP = "pointerup" + EVENT_KEY$2;
661
+ var EVENT_DRAG_START = "dragstart" + EVENT_KEY$2;
662
+ var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$2 + DATA_API_KEY$2;
663
+ var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$2 + DATA_API_KEY$2;
664
+ var CLASS_NAME_CAROUSEL = 'carousel';
665
+ var CLASS_NAME_ACTIVE$1 = 'active';
666
+ var CLASS_NAME_SLIDE = 'slide';
667
+ var CLASS_NAME_RIGHT = 'carousel-item-right';
668
+ var CLASS_NAME_LEFT = 'carousel-item-left';
669
+ var CLASS_NAME_NEXT = 'carousel-item-next';
670
+ var CLASS_NAME_PREV = 'carousel-item-prev';
671
+ var CLASS_NAME_POINTER_EVENT = 'pointer-event';
672
+ var SELECTOR_ACTIVE$1 = '.active';
673
+ var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
674
+ var SELECTOR_ITEM = '.carousel-item';
675
+ var SELECTOR_ITEM_IMG = '.carousel-item img';
676
+ var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
677
+ var SELECTOR_INDICATORS = '.carousel-indicators';
678
+ var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
679
+ var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
 
 
 
 
 
 
 
 
 
680
  var PointerType = {
681
  TOUCH: 'touch',
682
  PEN: 'pen'
687
  * ------------------------------------------------------------------------
688
  */
689
 
690
+ var Carousel = /*#__PURE__*/function () {
 
 
691
  function Carousel(element, config) {
692
  this._items = null;
693
  this._interval = null;
699
  this.touchDeltaX = 0;
700
  this._config = this._getConfig(config);
701
  this._element = element;
702
+ this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);
703
  this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
704
  this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
705
 
712
  // Public
713
  _proto.next = function next() {
714
  if (!this._isSliding) {
715
+ this._slide(DIRECTION_NEXT);
716
  }
717
  };
718
 
726
 
727
  _proto.prev = function prev() {
728
  if (!this._isSliding) {
729
+ this._slide(DIRECTION_PREV);
730
  }
731
  };
732
 
735
  this._isPaused = true;
736
  }
737
 
738
+ if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
739
  Util.triggerTransitionEnd(this._element);
740
  this.cycle(true);
741
  }
762
  _proto.to = function to(index) {
763
  var _this = this;
764
 
765
+ this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
766
 
767
  var activeIndex = this._getItemIndex(this._activeElement);
768
 
771
  }
772
 
773
  if (this._isSliding) {
774
+ $(this._element).one(EVENT_SLID, function () {
775
  return _this.to(index);
776
  });
777
  return;
783
  return;
784
  }
785
 
786
+ var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
787
 
788
  this._slide(direction, this._items[index]);
789
  };
803
  ;
804
 
805
  _proto._getConfig = function _getConfig(config) {
806
+ config = _objectSpread2(_objectSpread2({}, Default), config);
807
  Util.typeCheckConfig(NAME$2, config, DefaultType);
808
  return config;
809
  };
832
  var _this2 = this;
833
 
834
  if (this._config.keyboard) {
835
+ $(this._element).on(EVENT_KEYDOWN, function (event) {
836
  return _this2._keydown(event);
837
  });
838
  }
839
 
840
  if (this._config.pause === 'hover') {
841
+ $(this._element).on(EVENT_MOUSEENTER, function (event) {
842
  return _this2.pause(event);
843
+ }).on(EVENT_MOUSELEAVE, function (event) {
844
  return _this2.cycle(event);
845
  });
846
  }
901
  }
902
  };
903
 
904
+ $(this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
905
  return e.preventDefault();
906
  });
907
 
908
  if (this._pointerEvent) {
909
+ $(this._element).on(EVENT_POINTERDOWN, function (event) {
910
  return start(event);
911
  });
912
+ $(this._element).on(EVENT_POINTERUP, function (event) {
913
  return end(event);
914
  });
915
 
916
+ this._element.classList.add(CLASS_NAME_POINTER_EVENT);
917
  } else {
918
+ $(this._element).on(EVENT_TOUCHSTART, function (event) {
919
  return start(event);
920
  });
921
+ $(this._element).on(EVENT_TOUCHMOVE, function (event) {
922
  return move(event);
923
  });
924
+ $(this._element).on(EVENT_TOUCHEND, function (event) {
925
  return end(event);
926
  });
927
  }
946
  };
947
 
948
  _proto._getItemIndex = function _getItemIndex(element) {
949
+ this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];
950
  return this._items.indexOf(element);
951
  };
952
 
953
  _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
954
+ var isNextDirection = direction === DIRECTION_NEXT;
955
+ var isPrevDirection = direction === DIRECTION_PREV;
956
 
957
  var activeIndex = this._getItemIndex(activeElement);
958
 
963
  return activeElement;
964
  }
965
 
966
+ var delta = direction === DIRECTION_PREV ? -1 : 1;
967
  var itemIndex = (activeIndex + delta) % this._items.length;
968
  return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
969
  };
971
  _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
972
  var targetIndex = this._getItemIndex(relatedTarget);
973
 
974
+ var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
975
 
976
+ var slideEvent = $.Event(EVENT_SLIDE, {
977
  relatedTarget: relatedTarget,
978
  direction: eventDirectionName,
979
  from: fromIndex,
985
 
986
  _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
987
  if (this._indicatorsElement) {
988
+ var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
989
+ $(indicators).removeClass(CLASS_NAME_ACTIVE$1);
990
 
991
  var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
992
 
993
  if (nextIndicator) {
994
+ $(nextIndicator).addClass(CLASS_NAME_ACTIVE$1);
995
  }
996
  }
997
  };
999
  _proto._slide = function _slide(direction, element) {
1000
  var _this4 = this;
1001
 
1002
+ var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
1003
 
1004
  var activeElementIndex = this._getItemIndex(activeElement);
1005
 
1012
  var orderClassName;
1013
  var eventDirectionName;
1014
 
1015
+ if (direction === DIRECTION_NEXT) {
1016
+ directionalClassName = CLASS_NAME_LEFT;
1017
+ orderClassName = CLASS_NAME_NEXT;
1018
+ eventDirectionName = DIRECTION_LEFT;
1019
  } else {
1020
+ directionalClassName = CLASS_NAME_RIGHT;
1021
+ orderClassName = CLASS_NAME_PREV;
1022
+ eventDirectionName = DIRECTION_RIGHT;
1023
  }
1024
 
1025
+ if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE$1)) {
1026
  this._isSliding = false;
1027
  return;
1028
  }
1046
 
1047
  this._setActiveIndicatorElement(nextElement);
1048
 
1049
+ var slidEvent = $.Event(EVENT_SLID, {
1050
  relatedTarget: nextElement,
1051
  direction: eventDirectionName,
1052
  from: activeElementIndex,
1053
  to: nextElementIndex
1054
  });
1055
 
1056
+ if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {
1057
  $(nextElement).addClass(orderClassName);
1058
  Util.reflow(nextElement);
1059
  $(activeElement).addClass(directionalClassName);
1069
 
1070
  var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
1071
  $(activeElement).one(Util.TRANSITION_END, function () {
1072
+ $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$1);
1073
+ $(activeElement).removeClass(CLASS_NAME_ACTIVE$1 + " " + orderClassName + " " + directionalClassName);
1074
  _this4._isSliding = false;
1075
  setTimeout(function () {
1076
  return $(_this4._element).trigger(slidEvent);
1077
  }, 0);
1078
  }).emulateTransitionEnd(transitionDuration);
1079
  } else {
1080
+ $(activeElement).removeClass(CLASS_NAME_ACTIVE$1);
1081
+ $(nextElement).addClass(CLASS_NAME_ACTIVE$1);
1082
  this._isSliding = false;
1083
  $(this._element).trigger(slidEvent);
1084
  }
1093
  return this.each(function () {
1094
  var data = $(this).data(DATA_KEY$2);
1095
 
1096
+ var _config = _objectSpread2(_objectSpread2({}, Default), $(this).data());
1097
 
1098
  if (typeof config === 'object') {
1099
+ _config = _objectSpread2(_objectSpread2({}, _config), config);
1100
  }
1101
 
1102
  var action = typeof config === 'string' ? config : _config.slide;
1130
 
1131
  var target = $(selector)[0];
1132
 
1133
+ if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {
1134
  return;
1135
  }
1136
 
1137
+ var config = _objectSpread2(_objectSpread2({}, $(target).data()), $(this).data());
1138
 
1139
  var slideIndex = this.getAttribute('data-slide-to');
1140
 
1172
  */
1173
 
1174
 
1175
+ $(document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
1176
+ $(window).on(EVENT_LOAD_DATA_API$1, function () {
1177
+ var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
1178
 
1179
  for (var i = 0, len = carousels.length; i < len; i++) {
1180
  var $carousel = $(carousels[i]);
1203
  */
1204
 
1205
  var NAME$3 = 'collapse';
1206
+ var VERSION$3 = '4.5.0';
1207
  var DATA_KEY$3 = 'bs.collapse';
1208
  var EVENT_KEY$3 = "." + DATA_KEY$3;
1209
  var DATA_API_KEY$3 = '.data-api';
1216
  toggle: 'boolean',
1217
  parent: '(string|element)'
1218
  };
1219
+ var EVENT_SHOW = "show" + EVENT_KEY$3;
1220
+ var EVENT_SHOWN = "shown" + EVENT_KEY$3;
1221
+ var EVENT_HIDE = "hide" + EVENT_KEY$3;
1222
+ var EVENT_HIDDEN = "hidden" + EVENT_KEY$3;
1223
+ var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$3 + DATA_API_KEY$3;
1224
+ var CLASS_NAME_SHOW$1 = 'show';
1225
+ var CLASS_NAME_COLLAPSE = 'collapse';
1226
+ var CLASS_NAME_COLLAPSING = 'collapsing';
1227
+ var CLASS_NAME_COLLAPSED = 'collapsed';
1228
+ var DIMENSION_WIDTH = 'width';
1229
+ var DIMENSION_HEIGHT = 'height';
1230
+ var SELECTOR_ACTIVES = '.show, .collapsing';
1231
+ var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="collapse"]';
 
 
 
 
 
 
 
 
1232
  /**
1233
  * ------------------------------------------------------------------------
1234
  * Class Definition
1235
  * ------------------------------------------------------------------------
1236
  */
1237
 
1238
+ var Collapse = /*#__PURE__*/function () {
 
 
1239
  function Collapse(element, config) {
1240
  this._isTransitioning = false;
1241
  this._element = element;
1242
  this._config = this._getConfig(config);
1243
  this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
1244
+ var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$1));
1245
 
1246
  for (var i = 0, len = toggleList.length; i < len; i++) {
1247
  var elem = toggleList[i];
1273
 
1274
  // Public
1275
  _proto.toggle = function toggle() {
1276
+ if ($(this._element).hasClass(CLASS_NAME_SHOW$1)) {
1277
  this.hide();
1278
  } else {
1279
  this.show();
1283
  _proto.show = function show() {
1284
  var _this = this;
1285
 
1286
+ if (this._isTransitioning || $(this._element).hasClass(CLASS_NAME_SHOW$1)) {
1287
  return;
1288
  }
1289
 
1291
  var activesData;
1292
 
1293
  if (this._parent) {
1294
+ actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {
1295
  if (typeof _this._config.parent === 'string') {
1296
  return elem.getAttribute('data-parent') === _this._config.parent;
1297
  }
1298
 
1299
+ return elem.classList.contains(CLASS_NAME_COLLAPSE);
1300
  });
1301
 
1302
  if (actives.length === 0) {
1312
  }
1313
  }
1314
 
1315
+ var startEvent = $.Event(EVENT_SHOW);
1316
  $(this._element).trigger(startEvent);
1317
 
1318
  if (startEvent.isDefaultPrevented()) {
1329
 
1330
  var dimension = this._getDimension();
1331
 
1332
+ $(this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
1333
  this._element.style[dimension] = 0;
1334
 
1335
  if (this._triggerArray.length) {
1336
+ $(this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
1337
  }
1338
 
1339
  this.setTransitioning(true);
1340
 
1341
  var complete = function complete() {
1342
+ $(_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
1343
  _this._element.style[dimension] = '';
1344
 
1345
  _this.setTransitioning(false);
1346
 
1347
+ $(_this._element).trigger(EVENT_SHOWN);
1348
  };
1349
 
1350
  var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
1357
  _proto.hide = function hide() {
1358
  var _this2 = this;
1359
 
1360
+ if (this._isTransitioning || !$(this._element).hasClass(CLASS_NAME_SHOW$1)) {
1361
  return;
1362
  }
1363
 
1364
+ var startEvent = $.Event(EVENT_HIDE);
1365
  $(this._element).trigger(startEvent);
1366
 
1367
  if (startEvent.isDefaultPrevented()) {
1372
 
1373
  this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
1374
  Util.reflow(this._element);
1375
+ $(this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
1376
  var triggerArrayLength = this._triggerArray.length;
1377
 
1378
  if (triggerArrayLength > 0) {
1383
  if (selector !== null) {
1384
  var $elem = $([].slice.call(document.querySelectorAll(selector)));
1385
 
1386
+ if (!$elem.hasClass(CLASS_NAME_SHOW$1)) {
1387
+ $(trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
1388
  }
1389
  }
1390
  }
1395
  var complete = function complete() {
1396
  _this2.setTransitioning(false);
1397
 
1398
+ $(_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);
1399
  };
1400
 
1401
  this._element.style[dimension] = '';
1418
  ;
1419
 
1420
  _proto._getConfig = function _getConfig(config) {
1421
+ config = _objectSpread2(_objectSpread2({}, Default$1), config);
1422
  config.toggle = Boolean(config.toggle); // Coerce string values
1423
 
1424
  Util.typeCheckConfig(NAME$3, config, DefaultType$1);
1426
  };
1427
 
1428
  _proto._getDimension = function _getDimension() {
1429
+ var hasWidth = $(this._element).hasClass(DIMENSION_WIDTH);
1430
+ return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
1431
  };
1432
 
1433
  _proto._getParent = function _getParent() {
1454
  };
1455
 
1456
  _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
1457
+ var isOpen = $(element).hasClass(CLASS_NAME_SHOW$1);
1458
 
1459
  if (triggerArray.length) {
1460
+ $(triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1461
  }
1462
  } // Static
1463
  ;
1472
  var $this = $(this);
1473
  var data = $this.data(DATA_KEY$3);
1474
 
1475
+ var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$1), $this.data()), typeof config === 'object' && config ? config : {});
1476
 
1477
+ if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
1478
  _config.toggle = false;
1479
  }
1480
 
1514
  */
1515
 
1516
 
1517
+ $(document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event) {
1518
  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
1519
  if (event.currentTarget.tagName === 'A') {
1520
  event.preventDefault();
4166
  */
4167
 
4168
  var NAME$4 = 'dropdown';
4169
+ var VERSION$4 = '4.5.0';
4170
  var DATA_KEY$4 = 'bs.dropdown';
4171
  var EVENT_KEY$4 = "." + DATA_KEY$4;
4172
  var DATA_API_KEY$4 = '.data-api';
4184
  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
4185
 
4186
  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
4187
+ var EVENT_HIDE$1 = "hide" + EVENT_KEY$4;
4188
+ var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$4;
4189
+ var EVENT_SHOW$1 = "show" + EVENT_KEY$4;
4190
+ var EVENT_SHOWN$1 = "shown" + EVENT_KEY$4;
4191
+ var EVENT_CLICK = "click" + EVENT_KEY$4;
4192
+ var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$4 + DATA_API_KEY$4;
4193
+ var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$4 + DATA_API_KEY$4;
4194
+ var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$4 + DATA_API_KEY$4;
4195
+ var CLASS_NAME_DISABLED = 'disabled';
4196
+ var CLASS_NAME_SHOW$2 = 'show';
4197
+ var CLASS_NAME_DROPUP = 'dropup';
4198
+ var CLASS_NAME_DROPRIGHT = 'dropright';
4199
+ var CLASS_NAME_DROPLEFT = 'dropleft';
4200
+ var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
4201
+ var CLASS_NAME_POSITION_STATIC = 'position-static';
4202
+ var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
4203
+ var SELECTOR_FORM_CHILD = '.dropdown form';
4204
+ var SELECTOR_MENU = '.dropdown-menu';
4205
+ var SELECTOR_NAVBAR_NAV = '.navbar-nav';
4206
+ var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
4207
+ var PLACEMENT_TOP = 'top-start';
4208
+ var PLACEMENT_TOPEND = 'top-end';
4209
+ var PLACEMENT_BOTTOM = 'bottom-start';
4210
+ var PLACEMENT_BOTTOMEND = 'bottom-end';
4211
+ var PLACEMENT_RIGHT = 'right-start';
4212
+ var PLACEMENT_LEFT = 'left-start';
 
 
 
 
 
 
 
 
 
 
 
4213
  var Default$2 = {
4214
  offset: 0,
4215
  flip: true,
4232
  * ------------------------------------------------------------------------
4233
  */
4234
 
4235
+ var Dropdown = /*#__PURE__*/function () {
 
 
4236
  function Dropdown(element, config) {
4237
  this._element = element;
4238
  this._popper = null;
4248
 
4249
  // Public
4250
  _proto.toggle = function toggle() {
4251
+ if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {
4252
  return;
4253
  }
4254
 
4255
+ var isActive = $(this._menu).hasClass(CLASS_NAME_SHOW$2);
4256
 
4257
  Dropdown._clearMenus();
4258
 
4268
  usePopper = false;
4269
  }
4270
 
4271
+ if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW$2)) {
4272
  return;
4273
  }
4274
 
4275
  var relatedTarget = {
4276
  relatedTarget: this._element
4277
  };
4278
+ var showEvent = $.Event(EVENT_SHOW$1, relatedTarget);
4279
 
4280
  var parent = Dropdown._getParentFromElement(this._element);
4281
 
4311
 
4312
 
4313
  if (this._config.boundary !== 'scrollParent') {
4314
+ $(parent).addClass(CLASS_NAME_POSITION_STATIC);
4315
  }
4316
 
4317
  this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
4321
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
4322
 
4323
 
4324
+ if ('ontouchstart' in document.documentElement && $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
4325
  $(document.body).children().on('mouseover', null, $.noop);
4326
  }
4327
 
4329
 
4330
  this._element.setAttribute('aria-expanded', true);
4331
 
4332
+ $(this._menu).toggleClass(CLASS_NAME_SHOW$2);
4333
+ $(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_SHOWN$1, relatedTarget));
4334
  };
4335
 
4336
  _proto.hide = function hide() {
4337
+ if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW$2)) {
4338
  return;
4339
  }
4340
 
4341
  var relatedTarget = {
4342
  relatedTarget: this._element
4343
  };
4344
+ var hideEvent = $.Event(EVENT_HIDE$1, relatedTarget);
4345
 
4346
  var parent = Dropdown._getParentFromElement(this._element);
4347
 
4355
  this._popper.destroy();
4356
  }
4357
 
4358
+ $(this._menu).toggleClass(CLASS_NAME_SHOW$2);
4359
+ $(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget));
4360
  };
4361
 
4362
  _proto.dispose = function dispose() {
4384
  _proto._addEventListeners = function _addEventListeners() {
4385
  var _this = this;
4386
 
4387
+ $(this._element).on(EVENT_CLICK, function (event) {
4388
  event.preventDefault();
4389
  event.stopPropagation();
4390
 
4393
  };
4394
 
4395
  _proto._getConfig = function _getConfig(config) {
4396
+ config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), $(this._element).data()), config);
4397
  Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
4398
  return config;
4399
  };
4403
  var parent = Dropdown._getParentFromElement(this._element);
4404
 
4405
  if (parent) {
4406
+ this._menu = parent.querySelector(SELECTOR_MENU);
4407
  }
4408
  }
4409
 
4412
 
4413
  _proto._getPlacement = function _getPlacement() {
4414
  var $parentDropdown = $(this._element.parentNode);
4415
+ var placement = PLACEMENT_BOTTOM; // Handle dropup
 
 
 
4416
 
4417
+ if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
4418
+ placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
4419
+ } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
4420
+ placement = PLACEMENT_RIGHT;
4421
+ } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
4422
+ placement = PLACEMENT_LEFT;
4423
+ } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
4424
+ placement = PLACEMENT_BOTTOMEND;
 
4425
  }
4426
 
4427
  return placement;
4438
 
4439
  if (typeof this._config.offset === 'function') {
4440
  offset.fn = function (data) {
4441
+ data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this2._config.offset(data.offsets, _this2._element) || {});
4442
  return data;
4443
  };
4444
  } else {
4468
  };
4469
  }
4470
 
4471
+ return _objectSpread2(_objectSpread2({}, popperConfig), this._config.popperConfig);
4472
  } // Static
4473
  ;
4474
 
4498
  return;
4499
  }
4500
 
4501
+ var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
4502
 
4503
  for (var i = 0, len = toggles.length; i < len; i++) {
4504
  var parent = Dropdown._getParentFromElement(toggles[i]);
4518
 
4519
  var dropdownMenu = context._menu;
4520
 
4521
+ if (!$(parent).hasClass(CLASS_NAME_SHOW$2)) {
4522
  continue;
4523
  }
4524
 
4526
  continue;
4527
  }
4528
 
4529
+ var hideEvent = $.Event(EVENT_HIDE$1, relatedTarget);
4530
  $(parent).trigger(hideEvent);
4531
 
4532
  if (hideEvent.isDefaultPrevented()) {
4545
  context._popper.destroy();
4546
  }
4547
 
4548
+ $(dropdownMenu).removeClass(CLASS_NAME_SHOW$2);
4549
+ $(parent).removeClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget));
4550
  }
4551
  };
4552
 
4570
  // - If key is other than escape
4571
  // - If key is not up or down => not a dropdown command
4572
  // - If trigger inside the menu => not a dropdown command
4573
+ if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
4574
  return;
4575
  }
4576
 
4577
+ if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {
 
 
 
4578
  return;
4579
  }
4580
 
4581
  var parent = Dropdown._getParentFromElement(this);
4582
 
4583
+ var isActive = $(parent).hasClass(CLASS_NAME_SHOW$2);
4584
 
4585
  if (!isActive && event.which === ESCAPE_KEYCODE) {
4586
  return;
4587
  }
4588
 
4589
+ event.preventDefault();
4590
+ event.stopPropagation();
4591
+
4592
  if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
4593
  if (event.which === ESCAPE_KEYCODE) {
4594
+ $(parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');
 
4595
  }
4596
 
4597
  $(this).trigger('click');
4598
  return;
4599
  }
4600
 
4601
+ var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
4602
  return $(item).is(':visible');
4603
  });
4604
 
4651
  */
4652
 
4653
 
4654
+ $(document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {
4655
  event.preventDefault();
4656
  event.stopPropagation();
4657
 
4658
  Dropdown._jQueryInterface.call($(this), 'toggle');
4659
+ }).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {
4660
  e.stopPropagation();
4661
  });
4662
  /**
4680
  */
4681
 
4682
  var NAME$5 = 'modal';
4683
+ var VERSION$5 = '4.5.0';
4684
  var DATA_KEY$5 = 'bs.modal';
4685
  var EVENT_KEY$5 = "." + DATA_KEY$5;
4686
  var DATA_API_KEY$5 = '.data-api';
4699
  focus: 'boolean',
4700
  show: 'boolean'
4701
  };
4702
+ var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
4703
+ var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
4704
+ var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
4705
+ var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
4706
+ var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
4707
+ var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
4708
+ var EVENT_RESIZE = "resize" + EVENT_KEY$5;
4709
+ var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY$5;
4710
+ var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
4711
+ var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
4712
+ var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
4713
+ var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$5 + DATA_API_KEY$5;
4714
+ var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
4715
+ var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
4716
+ var CLASS_NAME_BACKDROP = 'modal-backdrop';
4717
+ var CLASS_NAME_OPEN = 'modal-open';
4718
+ var CLASS_NAME_FADE$1 = 'fade';
4719
+ var CLASS_NAME_SHOW$3 = 'show';
4720
+ var CLASS_NAME_STATIC = 'modal-static';
4721
+ var SELECTOR_DIALOG = '.modal-dialog';
4722
+ var SELECTOR_MODAL_BODY = '.modal-body';
4723
+ var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="modal"]';
4724
+ var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
4725
+ var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
4726
+ var SELECTOR_STICKY_CONTENT = '.sticky-top';
 
 
 
 
 
 
4727
  /**
4728
  * ------------------------------------------------------------------------
4729
  * Class Definition
4730
  * ------------------------------------------------------------------------
4731
  */
4732
 
4733
+ var Modal = /*#__PURE__*/function () {
 
 
4734
  function Modal(element, config) {
4735
  this._config = this._getConfig(config);
4736
  this._element = element;
4737
+ this._dialog = element.querySelector(SELECTOR_DIALOG);
4738
  this._backdrop = null;
4739
  this._isShown = false;
4740
  this._isBodyOverflowing = false;
4758
  return;
4759
  }
4760
 
4761
+ if ($(this._element).hasClass(CLASS_NAME_FADE$1)) {
4762
  this._isTransitioning = true;
4763
  }
4764
 
4765
+ var showEvent = $.Event(EVENT_SHOW$2, {
4766
  relatedTarget: relatedTarget
4767
  });
4768
  $(this._element).trigger(showEvent);
4783
 
4784
  this._setResizeEvent();
4785
 
4786
+ $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
4787
  return _this.hide(event);
4788
  });
4789
+ $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
4790
+ $(_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
4791
  if ($(event.target).is(_this._element)) {
4792
  _this._ignoreBackdropClick = true;
4793
  }
4810
  return;
4811
  }
4812
 
4813
+ var hideEvent = $.Event(EVENT_HIDE$2);
4814
  $(this._element).trigger(hideEvent);
4815
 
4816
  if (!this._isShown || hideEvent.isDefaultPrevented()) {
4818
  }
4819
 
4820
  this._isShown = false;
4821
+ var transition = $(this._element).hasClass(CLASS_NAME_FADE$1);
4822
 
4823
  if (transition) {
4824
  this._isTransitioning = true;
4828
 
4829
  this._setResizeEvent();
4830
 
4831
+ $(document).off(EVENT_FOCUSIN);
4832
+ $(this._element).removeClass(CLASS_NAME_SHOW$3);
4833
+ $(this._element).off(EVENT_CLICK_DISMISS);
4834
+ $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
4835
 
4836
  if (transition) {
4837
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
4848
  return $(htmlElement).off(EVENT_KEY$5);
4849
  });
4850
  /**
4851
+ * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
4852
  * Do not move `document` in `htmlElements` array
4853
+ * It will remove `EVENT_CLICK_DATA_API` event that should remain
4854
  */
4855
 
4856
+ $(document).off(EVENT_FOCUSIN);
4857
  $.removeData(this._element, DATA_KEY$5);
4858
  this._config = null;
4859
  this._element = null;
4872
  ;
4873
 
4874
  _proto._getConfig = function _getConfig(config) {
4875
+ config = _objectSpread2(_objectSpread2({}, Default$3), config);
4876
  Util.typeCheckConfig(NAME$5, config, DefaultType$3);
4877
  return config;
4878
  };
4881
  var _this3 = this;
4882
 
4883
  if (this._config.backdrop === 'static') {
4884
+ var hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED);
4885
  $(this._element).trigger(hideEventPrevented);
4886
 
4887
  if (hideEventPrevented.defaultPrevented) {
4888
  return;
4889
  }
4890
 
4891
+ this._element.classList.add(CLASS_NAME_STATIC);
4892
 
4893
  var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);
4894
  $(this._element).one(Util.TRANSITION_END, function () {
4895
+ _this3._element.classList.remove(CLASS_NAME_STATIC);
4896
  }).emulateTransitionEnd(modalTransitionDuration);
4897
 
4898
  this._element.focus();
4904
  _proto._showElement = function _showElement(relatedTarget) {
4905
  var _this4 = this;
4906
 
4907
+ var transition = $(this._element).hasClass(CLASS_NAME_FADE$1);
4908
+ var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
4909
 
4910
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
4911
  // Don't move modal's DOM position
4918
 
4919
  this._element.setAttribute('aria-modal', true);
4920
 
4921
+ if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
4922
  modalBody.scrollTop = 0;
4923
  } else {
4924
  this._element.scrollTop = 0;
4928
  Util.reflow(this._element);
4929
  }
4930
 
4931
+ $(this._element).addClass(CLASS_NAME_SHOW$3);
4932
 
4933
  if (this._config.focus) {
4934
  this._enforceFocus();
4935
  }
4936
 
4937
+ var shownEvent = $.Event(EVENT_SHOWN$2, {
4938
  relatedTarget: relatedTarget
4939
  });
4940
 
4958
  _proto._enforceFocus = function _enforceFocus() {
4959
  var _this5 = this;
4960
 
4961
+ $(document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
4962
+ .on(EVENT_FOCUSIN, function (event) {
4963
  if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {
4964
  _this5._element.focus();
4965
  }
4969
  _proto._setEscapeEvent = function _setEscapeEvent() {
4970
  var _this6 = this;
4971
 
4972
+ if (this._isShown) {
4973
+ $(this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
4974
+ if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
4975
+ event.preventDefault();
4976
+
4977
+ _this6.hide();
4978
+ } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
4979
  _this6._triggerBackdropTransition();
4980
  }
4981
  });
4982
  } else if (!this._isShown) {
4983
+ $(this._element).off(EVENT_KEYDOWN_DISMISS);
4984
  }
4985
  };
4986
 
4988
  var _this7 = this;
4989
 
4990
  if (this._isShown) {
4991
+ $(window).on(EVENT_RESIZE, function (event) {
4992
  return _this7.handleUpdate(event);
4993
  });
4994
  } else {
4995
+ $(window).off(EVENT_RESIZE);
4996
  }
4997
  };
4998
 
5008
  this._isTransitioning = false;
5009
 
5010
  this._showBackdrop(function () {
5011
+ $(document.body).removeClass(CLASS_NAME_OPEN);
5012
 
5013
  _this8._resetAdjustments();
5014
 
5015
  _this8._resetScrollbar();
5016
 
5017
+ $(_this8._element).trigger(EVENT_HIDDEN$2);
5018
  });
5019
  };
5020
 
5028
  _proto._showBackdrop = function _showBackdrop(callback) {
5029
  var _this9 = this;
5030
 
5031
+ var animate = $(this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : '';
5032
 
5033
  if (this._isShown && this._config.backdrop) {
5034
  this._backdrop = document.createElement('div');
5035
+ this._backdrop.className = CLASS_NAME_BACKDROP;
5036
 
5037
  if (animate) {
5038
  this._backdrop.classList.add(animate);
5039
  }
5040
 
5041
  $(this._backdrop).appendTo(document.body);
5042
+ $(this._element).on(EVENT_CLICK_DISMISS, function (event) {
5043
  if (_this9._ignoreBackdropClick) {
5044
  _this9._ignoreBackdropClick = false;
5045
  return;
5056
  Util.reflow(this._backdrop);
5057
  }
5058
 
5059
+ $(this._backdrop).addClass(CLASS_NAME_SHOW$3);
5060
 
5061
  if (!callback) {
5062
  return;
5070
  var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
5071
  $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
5072
  } else if (!this._isShown && this._backdrop) {
5073
+ $(this._backdrop).removeClass(CLASS_NAME_SHOW$3);
5074
 
5075
  var callbackRemove = function callbackRemove() {
5076
  _this9._removeBackdrop();
5080
  }
5081
  };
5082
 
5083
+ if ($(this._element).hasClass(CLASS_NAME_FADE$1)) {
5084
  var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
5085
 
5086
  $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
5115
 
5116
  _proto._checkScrollbar = function _checkScrollbar() {
5117
  var rect = document.body.getBoundingClientRect();
5118
+ this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
5119
  this._scrollbarWidth = this._getScrollbarWidth();
5120
  };
5121
 
5125
  if (this._isBodyOverflowing) {
5126
  // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
5127
  // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
5128
+ var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
5129
+ var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
5130
 
5131
  $(fixedContent).each(function (index, element) {
5132
  var actualPadding = element.style.paddingRight;
5145
  $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
5146
  }
5147
 
5148
+ $(document.body).addClass(CLASS_NAME_OPEN);
5149
  };
5150
 
5151
  _proto._resetScrollbar = function _resetScrollbar() {
5152
  // Restore fixed content padding
5153
+ var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
5154
  $(fixedContent).each(function (index, element) {
5155
  var padding = $(element).data('padding-right');
5156
  $(element).removeData('padding-right');
5157
  element.style.paddingRight = padding ? padding : '';
5158
  }); // Restore sticky content
5159
 
5160
+ var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
5161
  $(elements).each(function (index, element) {
5162
  var margin = $(element).data('margin-right');
5163
 
5174
  _proto._getScrollbarWidth = function _getScrollbarWidth() {
5175
  // thx d.walsh
5176
  var scrollDiv = document.createElement('div');
5177
+ scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
5178
  document.body.appendChild(scrollDiv);
5179
  var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
5180
  document.body.removeChild(scrollDiv);
5186
  return this.each(function () {
5187
  var data = $(this).data(DATA_KEY$5);
5188
 
5189
+ var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$3), $(this).data()), typeof config === 'object' && config ? config : {});
5190
 
5191
  if (!data) {
5192
  data = new Modal(this, _config);
5226
  */
5227
 
5228
 
5229
+ $(document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function (event) {
5230
  var _this11 = this;
5231
 
5232
  var target;
5236
  target = document.querySelector(selector);
5237
  }
5238
 
5239
+ var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2(_objectSpread2({}, $(target).data()), $(this).data());
5240
 
5241
  if (this.tagName === 'A' || this.tagName === 'AREA') {
5242
  event.preventDefault();
5243
  }
5244
 
5245
+ var $target = $(target).one(EVENT_SHOW$2, function (showEvent) {
5246
  if (showEvent.isDefaultPrevented()) {
5247
  // Only register focus restorer if modal will actually get shown
5248
  return;
5249
  }
5250
 
5251
+ $target.one(EVENT_HIDDEN$2, function () {
5252
  if ($(_this11).is(':visible')) {
5253
  _this11.focus();
5254
  }
5273
 
5274
  /**
5275
  * --------------------------------------------------------------------------
5276
+ * Bootstrap (v4.5.0): tools/sanitizer.js
5277
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5278
  * --------------------------------------------------------------------------
5279
  */
5298
  h5: [],
5299
  h6: [],
5300
  i: [],
5301
+ img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
5302
  li: [],
5303
  ol: [],
5304
  p: [],
5318
  * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
5319
  */
5320
 
5321
+ var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;
5322
  /**
5323
  * A pattern that matches safe data URLs. Only matches image, video and audio types.
5324
  *
5325
  * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
5326
  */
5327
 
5328
+ var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
5329
 
5330
  function allowedAttribute(attr, allowedAttributeList) {
5331
  var attrName = attr.nodeName.toLowerCase();
5342
  return attrRegex instanceof RegExp;
5343
  }); // Check if a regular expression validates the attribute.
5344
 
5345
+ for (var i = 0, len = regExp.length; i < len; i++) {
5346
  if (attrName.match(regExp[i])) {
5347
  return true;
5348
  }
5399
  */
5400
 
5401
  var NAME$6 = 'tooltip';
5402
+ var VERSION$6 = '4.5.0';
5403
  var DATA_KEY$6 = 'bs.tooltip';
5404
  var EVENT_KEY$6 = "." + DATA_KEY$6;
5405
  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
5424
  whiteList: 'object',
5425
  popperConfig: '(null|object)'
5426
  };
5427
+ var AttachmentMap = {
5428
  AUTO: 'auto',
5429
  TOP: 'top',
5430
  RIGHT: 'right',
5449
  whiteList: DefaultWhitelist,
5450
  popperConfig: null
5451
  };
5452
+ var HOVER_STATE_SHOW = 'show';
5453
+ var HOVER_STATE_OUT = 'out';
5454
+ var Event = {
 
 
5455
  HIDE: "hide" + EVENT_KEY$6,
5456
  HIDDEN: "hidden" + EVENT_KEY$6,
5457
  SHOW: "show" + EVENT_KEY$6,
5463
  MOUSEENTER: "mouseenter" + EVENT_KEY$6,
5464
  MOUSELEAVE: "mouseleave" + EVENT_KEY$6
5465
  };
5466
+ var CLASS_NAME_FADE$2 = 'fade';
5467
+ var CLASS_NAME_SHOW$4 = 'show';
5468
+ var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
5469
+ var SELECTOR_ARROW = '.arrow';
5470
+ var TRIGGER_HOVER = 'hover';
5471
+ var TRIGGER_FOCUS = 'focus';
5472
+ var TRIGGER_CLICK = 'click';
5473
+ var TRIGGER_MANUAL = 'manual';
 
 
 
 
 
 
 
5474
  /**
5475
  * ------------------------------------------------------------------------
5476
  * Class Definition
5477
  * ------------------------------------------------------------------------
5478
  */
5479
 
5480
+ var Tooltip = /*#__PURE__*/function () {
 
 
5481
  function Tooltip(element, config) {
5482
  if (typeof Popper === 'undefined') {
5483
  throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
5535
  context._leave(null, context);
5536
  }
5537
  } else {
5538
+ if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)) {
5539
  this._leave(null, this);
5540
 
5541
  return;
5595
  this.setContent();
5596
 
5597
  if (this.config.animation) {
5598
+ $(tip).addClass(CLASS_NAME_FADE$2);
5599
  }
5600
 
5601
  var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
5614
 
5615
  $(this.element).trigger(this.constructor.Event.INSERTED);
5616
  this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));
5617
+ $(tip).addClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we add extra
5618
  // empty mouseover listeners to the body's immediate children;
5619
  // only needed because of broken event delegation on iOS
5620
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
5632
  _this._hoverState = null;
5633
  $(_this.element).trigger(_this.constructor.Event.SHOWN);
5634
 
5635
+ if (prevHoverState === HOVER_STATE_OUT) {
5636
  _this._leave(null, _this);
5637
  }
5638
  };
5639
 
5640
+ if ($(this.tip).hasClass(CLASS_NAME_FADE$2)) {
5641
  var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
5642
  $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5643
  } else {
5653
  var hideEvent = $.Event(this.constructor.Event.HIDE);
5654
 
5655
  var complete = function complete() {
5656
+ if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
5657
  tip.parentNode.removeChild(tip);
5658
  }
5659
 
5678
  return;
5679
  }
5680
 
5681
+ $(tip).removeClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra
5682
  // empty mouseover listeners we added for iOS support
5683
 
5684
  if ('ontouchstart' in document.documentElement) {
5685
  $(document.body).children().off('mouseover', null, $.noop);
5686
  }
5687
 
5688
+ this._activeTrigger[TRIGGER_CLICK] = false;
5689
+ this._activeTrigger[TRIGGER_FOCUS] = false;
5690
+ this._activeTrigger[TRIGGER_HOVER] = false;
5691
 
5692
+ if ($(this.tip).hasClass(CLASS_NAME_FADE$2)) {
5693
  var transitionDuration = Util.getTransitionDurationFromElement(tip);
5694
  $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5695
  } else {
5721
 
5722
  _proto.setContent = function setContent() {
5723
  var tip = this.getTipElement();
5724
+ this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
5725
+ $(tip).removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$4);
5726
  };
5727
 
5728
  _proto.setElementContent = function setElementContent($element, content) {
5772
  behavior: this.config.fallbackPlacement
5773
  },
5774
  arrow: {
5775
+ element: SELECTOR_ARROW
5776
  },
5777
  preventOverflow: {
5778
  boundariesElement: this.config.boundary
5787
  return _this3._handlePopperPlacementChange(data);
5788
  }
5789
  };
5790
+ return _objectSpread2(_objectSpread2({}, defaultBsConfig), this.config.popperConfig);
5791
  };
5792
 
5793
  _proto._getOffset = function _getOffset() {
5797
 
5798
  if (typeof this.config.offset === 'function') {
5799
  offset.fn = function (data) {
5800
+ data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this4.config.offset(data.offsets, _this4.element) || {});
5801
  return data;
5802
  };
5803
  } else {
5820
  };
5821
 
5822
  _proto._getAttachment = function _getAttachment(placement) {
5823
+ return AttachmentMap[placement.toUpperCase()];
5824
  };
5825
 
5826
  _proto._setListeners = function _setListeners() {
5832
  $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
5833
  return _this5.toggle(event);
5834
  });
5835
+ } else if (trigger !== TRIGGER_MANUAL) {
5836
+ var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
5837
+ var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
5838
  $(_this5.element).on(eventIn, _this5.config.selector, function (event) {
5839
  return _this5._enter(event);
5840
  }).on(eventOut, _this5.config.selector, function (event) {
5852
  $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
5853
 
5854
  if (this.config.selector) {
5855
+ this.config = _objectSpread2(_objectSpread2({}, this.config), {}, {
5856
  trigger: 'manual',
5857
  selector: ''
5858
  });
5880
  }
5881
 
5882
  if (event) {
5883
+ context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
5884
  }
5885
 
5886
+ if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {
5887
+ context._hoverState = HOVER_STATE_SHOW;
5888
  return;
5889
  }
5890
 
5891
  clearTimeout(context._timeout);
5892
+ context._hoverState = HOVER_STATE_SHOW;
5893
 
5894
  if (!context.config.delay || !context.config.delay.show) {
5895
  context.show();
5897
  }
5898
 
5899
  context._timeout = setTimeout(function () {
5900
+ if (context._hoverState === HOVER_STATE_SHOW) {
5901
  context.show();
5902
  }
5903
  }, context.config.delay.show);
5913
  }
5914
 
5915
  if (event) {
5916
+ context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
5917
  }
5918
 
5919
  if (context._isWithActiveTrigger()) {
5921
  }
5922
 
5923
  clearTimeout(context._timeout);
5924
+ context._hoverState = HOVER_STATE_OUT;
5925
 
5926
  if (!context.config.delay || !context.config.delay.hide) {
5927
  context.hide();
5929
  }
5930
 
5931
  context._timeout = setTimeout(function () {
5932
+ if (context._hoverState === HOVER_STATE_OUT) {
5933
  context.hide();
5934
  }
5935
  }, context.config.delay.hide);
5952
  delete dataAttributes[dataAttr];
5953
  }
5954
  });
5955
+ config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), dataAttributes), typeof config === 'object' && config ? config : {});
5956
 
5957
  if (typeof config.delay === 'number') {
5958
  config.delay = {
6002
  };
6003
 
6004
  _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
6005
+ this.tip = popperData.instance.popper;
 
6006
 
6007
  this._cleanTipClass();
6008
 
6017
  return;
6018
  }
6019
 
6020
+ $(tip).removeClass(CLASS_NAME_FADE$2);
6021
  this.config.animation = false;
6022
  this.hide();
6023
  this.show();
6073
  }, {
6074
  key: "Event",
6075
  get: function get() {
6076
+ return Event;
6077
  }
6078
  }, {
6079
  key: "EVENT_KEY",
6111
  */
6112
 
6113
  var NAME$7 = 'popover';
6114
+ var VERSION$7 = '4.5.0';
6115
  var DATA_KEY$7 = 'bs.popover';
6116
  var EVENT_KEY$7 = "." + DATA_KEY$7;
6117
  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
6118
  var CLASS_PREFIX$1 = 'bs-popover';
6119
  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
6120
 
6121
+ var Default$5 = _objectSpread2(_objectSpread2({}, Tooltip.Default), {}, {
6122
  placement: 'right',
6123
  trigger: 'click',
6124
  content: '',
6125
  template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
6126
  });
6127
 
6128
+ var DefaultType$5 = _objectSpread2(_objectSpread2({}, Tooltip.DefaultType), {}, {
6129
  content: '(string|element|function)'
6130
  });
6131
 
6132
+ var CLASS_NAME_FADE$3 = 'fade';
6133
+ var CLASS_NAME_SHOW$5 = 'show';
6134
+ var SELECTOR_TITLE = '.popover-header';
6135
+ var SELECTOR_CONTENT = '.popover-body';
6136
+ var Event$1 = {
 
 
 
 
6137
  HIDE: "hide" + EVENT_KEY$7,
6138
  HIDDEN: "hidden" + EVENT_KEY$7,
6139
  SHOW: "show" + EVENT_KEY$7,
6151
  * ------------------------------------------------------------------------
6152
  */
6153
 
6154
+ var Popover = /*#__PURE__*/function (_Tooltip) {
 
 
6155
  _inheritsLoose(Popover, _Tooltip);
6156
 
6157
  function Popover() {
6177
  _proto.setContent = function setContent() {
6178
  var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
6179
 
6180
+ this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
6181
 
6182
  var content = this._getContent();
6183
 
6185
  content = content.call(this.element);
6186
  }
6187
 
6188
+ this.setElementContent($tip.find(SELECTOR_CONTENT), content);
6189
+ $tip.removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$5);
6190
  } // Private
6191
  ;
6192
 
6253
  }, {
6254
  key: "Event",
6255
  get: function get() {
6256
+ return Event$1;
6257
  }
6258
  }, {
6259
  key: "EVENT_KEY",
6291
  */
6292
 
6293
  var NAME$8 = 'scrollspy';
6294
+ var VERSION$8 = '4.5.0';
6295
  var DATA_KEY$8 = 'bs.scrollspy';
6296
  var EVENT_KEY$8 = "." + DATA_KEY$8;
6297
  var DATA_API_KEY$6 = '.data-api';
6306
  method: 'string',
6307
  target: '(string|element)'
6308
  };
6309
+ var EVENT_ACTIVATE = "activate" + EVENT_KEY$8;
6310
+ var EVENT_SCROLL = "scroll" + EVENT_KEY$8;
6311
+ var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$8 + DATA_API_KEY$6;
6312
+ var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
6313
+ var CLASS_NAME_ACTIVE$2 = 'active';
6314
+ var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
6315
+ var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
6316
+ var SELECTOR_NAV_LINKS = '.nav-link';
6317
+ var SELECTOR_NAV_ITEMS = '.nav-item';
6318
+ var SELECTOR_LIST_ITEMS = '.list-group-item';
6319
+ var SELECTOR_DROPDOWN = '.dropdown';
6320
+ var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
6321
+ var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
6322
+ var METHOD_OFFSET = 'offset';
6323
+ var METHOD_POSITION = 'position';
 
 
 
 
 
 
 
 
 
 
6324
  /**
6325
  * ------------------------------------------------------------------------
6326
  * Class Definition
6327
  * ------------------------------------------------------------------------
6328
  */
6329
 
6330
+ var ScrollSpy = /*#__PURE__*/function () {
 
 
6331
  function ScrollSpy(element, config) {
6332
  var _this = this;
6333
 
6334
  this._element = element;
6335
  this._scrollElement = element.tagName === 'BODY' ? window : element;
6336
  this._config = this._getConfig(config);
6337
+ this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
6338
  this._offsets = [];
6339
  this._targets = [];
6340
  this._activeTarget = null;
6341
  this._scrollHeight = 0;
6342
+ $(this._scrollElement).on(EVENT_SCROLL, function (event) {
6343
  return _this._process(event);
6344
  });
6345
  this.refresh();
6354
  _proto.refresh = function refresh() {
6355
  var _this2 = this;
6356
 
6357
+ var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
6358
  var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
6359
+ var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
6360
  this._offsets = [];
6361
  this._targets = [];
6362
  this._scrollHeight = this._getScrollHeight();
6405
  ;
6406
 
6407
  _proto._getConfig = function _getConfig(config) {
6408
+ config = _objectSpread2(_objectSpread2({}, Default$6), typeof config === 'object' && config ? config : {});
6409
 
6410
+ if (typeof config.target !== 'string' && Util.isElement(config.target)) {
6411
  var id = $(config.target).attr('id');
6412
 
6413
  if (!id) {
6463
  return;
6464
  }
6465
 
6466
+ for (var i = this._offsets.length; i--;) {
 
 
6467
  var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
6468
 
6469
  if (isActiveTarget) {
6483
 
6484
  var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
6485
 
6486
+ if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
6487
+ $link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2);
6488
+ $link.addClass(CLASS_NAME_ACTIVE$2);
6489
  } else {
6490
  // Set triggered link as active
6491
+ $link.addClass(CLASS_NAME_ACTIVE$2); // Set triggered links parents as active
6492
  // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
6493
 
6494
+ $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$2); // Handle special case when .nav-link is inside .nav-item
6495
 
6496
+ $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$2);
6497
  }
6498
 
6499
+ $(this._scrollElement).trigger(EVENT_ACTIVATE, {
6500
  relatedTarget: target
6501
  });
6502
  };
6503
 
6504
  _proto._clear = function _clear() {
6505
  [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
6506
+ return node.classList.contains(CLASS_NAME_ACTIVE$2);
6507
  }).forEach(function (node) {
6508
+ return node.classList.remove(CLASS_NAME_ACTIVE$2);
6509
  });
6510
  } // Static
6511
  ;
6552
  */
6553
 
6554
 
6555
+ $(window).on(EVENT_LOAD_DATA_API$2, function () {
6556
+ var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
6557
  var scrollSpysLength = scrollSpys.length;
6558
 
6559
  for (var i = scrollSpysLength; i--;) {
6583
  */
6584
 
6585
  var NAME$9 = 'tab';
6586
+ var VERSION$9 = '4.5.0';
6587
  var DATA_KEY$9 = 'bs.tab';
6588
  var EVENT_KEY$9 = "." + DATA_KEY$9;
6589
  var DATA_API_KEY$7 = '.data-api';
6590
  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
6591
+ var EVENT_HIDE$3 = "hide" + EVENT_KEY$9;
6592
+ var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$9;
6593
+ var EVENT_SHOW$3 = "show" + EVENT_KEY$9;
6594
+ var EVENT_SHOWN$3 = "shown" + EVENT_KEY$9;
6595
+ var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$9 + DATA_API_KEY$7;
6596
+ var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
6597
+ var CLASS_NAME_ACTIVE$3 = 'active';
6598
+ var CLASS_NAME_DISABLED$1 = 'disabled';
6599
+ var CLASS_NAME_FADE$4 = 'fade';
6600
+ var CLASS_NAME_SHOW$6 = 'show';
6601
+ var SELECTOR_DROPDOWN$1 = '.dropdown';
6602
+ var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
6603
+ var SELECTOR_ACTIVE$2 = '.active';
6604
+ var SELECTOR_ACTIVE_UL = '> li > .active';
6605
+ var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
6606
+ var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
6607
+ var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
 
 
 
 
 
 
6608
  /**
6609
  * ------------------------------------------------------------------------
6610
  * Class Definition
6611
  * ------------------------------------------------------------------------
6612
  */
6613
 
6614
+ var Tab = /*#__PURE__*/function () {
 
 
6615
  function Tab(element) {
6616
  this._element = element;
6617
  } // Getters
6623
  _proto.show = function show() {
6624
  var _this = this;
6625
 
6626
+ if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(CLASS_NAME_ACTIVE$3) || $(this._element).hasClass(CLASS_NAME_DISABLED$1)) {
6627
  return;
6628
  }
6629
 
6630
  var target;
6631
  var previous;
6632
+ var listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP$1)[0];
6633
  var selector = Util.getSelectorFromElement(this._element);
6634
 
6635
  if (listElement) {
6636
+ var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE$2;
6637
  previous = $.makeArray($(listElement).find(itemSelector));
6638
  previous = previous[previous.length - 1];
6639
  }
6640
 
6641
+ var hideEvent = $.Event(EVENT_HIDE$3, {
6642
  relatedTarget: this._element
6643
  });
6644
+ var showEvent = $.Event(EVENT_SHOW$3, {
6645
  relatedTarget: previous
6646
  });
6647
 
6662
  this._activate(this._element, listElement);
6663
 
6664
  var complete = function complete() {
6665
+ var hiddenEvent = $.Event(EVENT_HIDDEN$3, {
6666
  relatedTarget: _this._element
6667
  });
6668
+ var shownEvent = $.Event(EVENT_SHOWN$3, {
6669
  relatedTarget: previous
6670
  });
6671
  $(previous).trigger(hiddenEvent);
6688
  _proto._activate = function _activate(element, container, callback) {
6689
  var _this2 = this;
6690
 
6691
+ var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(SELECTOR_ACTIVE_UL) : $(container).children(SELECTOR_ACTIVE$2);
6692
  var active = activeElements[0];
6693
+ var isTransitioning = callback && active && $(active).hasClass(CLASS_NAME_FADE$4);
6694
 
6695
  var complete = function complete() {
6696
  return _this2._transitionComplete(element, active, callback);
6698
 
6699
  if (active && isTransitioning) {
6700
  var transitionDuration = Util.getTransitionDurationFromElement(active);
6701
+ $(active).removeClass(CLASS_NAME_SHOW$6).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6702
  } else {
6703
  complete();
6704
  }
6706
 
6707
  _proto._transitionComplete = function _transitionComplete(element, active, callback) {
6708
  if (active) {
6709
+ $(active).removeClass(CLASS_NAME_ACTIVE$3);
6710
+ var dropdownChild = $(active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
6711
 
6712
  if (dropdownChild) {
6713
+ $(dropdownChild).removeClass(CLASS_NAME_ACTIVE$3);
6714
  }
6715
 
6716
  if (active.getAttribute('role') === 'tab') {
6718
  }
6719
  }
6720
 
6721
+ $(element).addClass(CLASS_NAME_ACTIVE$3);
6722
 
6723
  if (element.getAttribute('role') === 'tab') {
6724
  element.setAttribute('aria-selected', true);
6726
 
6727
  Util.reflow(element);
6728
 
6729
+ if (element.classList.contains(CLASS_NAME_FADE$4)) {
6730
+ element.classList.add(CLASS_NAME_SHOW$6);
6731
  }
6732
 
6733
+ if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
6734
+ var dropdownElement = $(element).closest(SELECTOR_DROPDOWN$1)[0];
6735
 
6736
  if (dropdownElement) {
6737
+ var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE$1));
6738
+ $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE$3);
6739
  }
6740
 
6741
  element.setAttribute('aria-expanded', true);
6783
  */
6784
 
6785
 
6786
+ $(document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function (event) {
6787
  event.preventDefault();
6788
 
6789
  Tab._jQueryInterface.call($(this), 'show');
6809
  */
6810
 
6811
  var NAME$a = 'toast';
6812
+ var VERSION$a = '4.5.0';
6813
  var DATA_KEY$a = 'bs.toast';
6814
  var EVENT_KEY$a = "." + DATA_KEY$a;
6815
  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
6816
+ var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$a;
6817
+ var EVENT_HIDE$4 = "hide" + EVENT_KEY$a;
6818
+ var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$a;
6819
+ var EVENT_SHOW$4 = "show" + EVENT_KEY$a;
6820
+ var EVENT_SHOWN$4 = "shown" + EVENT_KEY$a;
6821
+ var CLASS_NAME_FADE$5 = 'fade';
6822
+ var CLASS_NAME_HIDE = 'hide';
6823
+ var CLASS_NAME_SHOW$7 = 'show';
6824
+ var CLASS_NAME_SHOWING = 'showing';
 
 
 
 
6825
  var DefaultType$7 = {
6826
  animation: 'boolean',
6827
  autohide: 'boolean',
6832
  autohide: true,
6833
  delay: 500
6834
  };
6835
+ var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="toast"]';
 
 
6836
  /**
6837
  * ------------------------------------------------------------------------
6838
  * Class Definition
6839
  * ------------------------------------------------------------------------
6840
  */
6841
 
6842
+ var Toast = /*#__PURE__*/function () {
 
 
6843
  function Toast(element, config) {
6844
  this._element = element;
6845
  this._config = this._getConfig(config);
6855
  _proto.show = function show() {
6856
  var _this = this;
6857
 
6858
+ var showEvent = $.Event(EVENT_SHOW$4);
6859
  $(this._element).trigger(showEvent);
6860
 
6861
  if (showEvent.isDefaultPrevented()) {
6863
  }
6864
 
6865
  if (this._config.animation) {
6866
+ this._element.classList.add(CLASS_NAME_FADE$5);
6867
  }
6868
 
6869
  var complete = function complete() {
6870
+ _this._element.classList.remove(CLASS_NAME_SHOWING);
6871
 
6872
+ _this._element.classList.add(CLASS_NAME_SHOW$7);
6873
 
6874
+ $(_this._element).trigger(EVENT_SHOWN$4);
6875
 
6876
  if (_this._config.autohide) {
6877
  _this._timeout = setTimeout(function () {
6880
  }
6881
  };
6882
 
6883
+ this._element.classList.remove(CLASS_NAME_HIDE);
6884
 
6885
  Util.reflow(this._element);
6886
 
6887
+ this._element.classList.add(CLASS_NAME_SHOWING);
6888
 
6889
  if (this._config.animation) {
6890
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
6895
  };
6896
 
6897
  _proto.hide = function hide() {
6898
+ if (!this._element.classList.contains(CLASS_NAME_SHOW$7)) {
6899
  return;
6900
  }
6901
 
6902
+ var hideEvent = $.Event(EVENT_HIDE$4);
6903
  $(this._element).trigger(hideEvent);
6904
 
6905
  if (hideEvent.isDefaultPrevented()) {
6913
  clearTimeout(this._timeout);
6914
  this._timeout = null;
6915
 
6916
+ if (this._element.classList.contains(CLASS_NAME_SHOW$7)) {
6917
+ this._element.classList.remove(CLASS_NAME_SHOW$7);
6918
  }
6919
 
6920
+ $(this._element).off(EVENT_CLICK_DISMISS$1);
6921
  $.removeData(this._element, DATA_KEY$a);
6922
  this._element = null;
6923
  this._config = null;
6925
  ;
6926
 
6927
  _proto._getConfig = function _getConfig(config) {
6928
+ config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$7), $(this._element).data()), typeof config === 'object' && config ? config : {});
6929
  Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
6930
  return config;
6931
  };
6933
  _proto._setListeners = function _setListeners() {
6934
  var _this2 = this;
6935
 
6936
+ $(this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function () {
6937
  return _this2.hide();
6938
  });
6939
  };
6942
  var _this3 = this;
6943
 
6944
  var complete = function complete() {
6945
+ _this3._element.classList.add(CLASS_NAME_HIDE);
6946
 
6947
+ $(_this3._element).trigger(EVENT_HIDDEN$4);
6948
  };
6949
 
6950
+ this._element.classList.remove(CLASS_NAME_SHOW$7);
6951
 
6952
  if (this._config.animation) {
6953
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
resources/js/bootstrap4.bundle.min.js CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * Bootstrap v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],t):t((e=e||self).bootstrap={},e.jQuery)}(this,function(e,p){"use strict";function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function s(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,i)}return n}function l(o){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?t(Object(r),!0).forEach(function(e){var t,n,i;t=o,i=r[n=e],n in t?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach(function(e){Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(r,e))})}return o}p=p&&p.hasOwnProperty("default")?p.default:p;var n="transitionend";function o(e){var t=this,n=!1;return p(this).one(m.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||m.triggerTransitionEnd(t)},e),this}var m={TRANSITION_END:"bsTransitionEnd",getUID:function(e){for(;e+=~~(1e6*Math.random()),document.getElementById(e););return e},getSelectorFromElement:function(e){var t=e.getAttribute("data-target");if(!t||"#"===t){var n=e.getAttribute("href");t=n&&"#"!==n?n.trim():""}try{return document.querySelector(t)?t:null}catch(e){return null}},getTransitionDurationFromElement:function(e){if(!e)return 0;var t=p(e).css("transition-duration"),n=p(e).css("transition-delay"),i=parseFloat(t),o=parseFloat(n);return i||o?(t=t.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(t)+parseFloat(n))):0},reflow:function(e){return e.offsetHeight},triggerTransitionEnd:function(e){p(e).trigger(n)},supportsTransitionEnd:function(){return Boolean(n)},isElement:function(e){return(e[0]||e).nodeType},typeCheckConfig:function(e,t,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=t[i],s=r&&m.isElement(r)?"element":(a=r,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(o).test(s))throw new Error(e.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(e){if(!document.documentElement.attachShadow)return null;if("function"!=typeof e.getRootNode)return e instanceof ShadowRoot?e:e.parentNode?m.findShadowRoot(e.parentNode):null;var t=e.getRootNode();return t instanceof ShadowRoot?t:null},jQueryDetection:function(){if("undefined"==typeof p)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=p.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||4<=e[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};m.jQueryDetection(),p.fn.emulateTransitionEnd=o,p.event.special[m.TRANSITION_END]={bindType:n,delegateType:n,handle:function(e){if(p(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}};var r="alert",a="bs.alert",c="."+a,h=p.fn[r],u={CLOSE:"close"+c,CLOSED:"closed"+c,CLICK_DATA_API:"click"+c+".data-api"},f="alert",d="fade",g="show",_=function(){function i(e){this._element=e}var e=i.prototype;return e.close=function(e){var t=this._element;e&&(t=this._getRootElement(e)),this._triggerCloseEvent(t).isDefaultPrevented()||this._removeElement(t)},e.dispose=function(){p.removeData(this._element,a),this._element=null},e._getRootElement=function(e){var t=m.getSelectorFromElement(e),n=!1;return t&&(n=document.querySelector(t)),n=n||p(e).closest("."+f)[0]},e._triggerCloseEvent=function(e){var t=p.Event(u.CLOSE);return p(e).trigger(t),t},e._removeElement=function(t){var n=this;if(p(t).removeClass(g),p(t).hasClass(d)){var e=m.getTransitionDurationFromElement(t);p(t).one(m.TRANSITION_END,function(e){return n._destroyElement(t,e)}).emulateTransitionEnd(e)}else this._destroyElement(t)},e._destroyElement=function(e){p(e).detach().trigger(u.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(a);t||(t=new i(this),e.data(a,t)),"close"===n&&t[n](this)})},i._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();p(document).on(u.CLICK_DATA_API,'[data-dismiss="alert"]',_._handleDismiss(new _)),p.fn[r]=_._jQueryInterface,p.fn[r].Constructor=_,p.fn[r].noConflict=function(){return p.fn[r]=h,_._jQueryInterface};var v="button",y="bs.button",E="."+y,b=".data-api",w=p.fn[v],T="active",C="btn",S="focus",D='[data-toggle^="button"]',I='[data-toggle="buttons"]',A='[data-toggle="button"]',O='[data-toggle="buttons"] .btn',N='input:not([type="hidden"])',k=".active",L=".btn",P={CLICK_DATA_API:"click"+E+b,FOCUS_BLUR_DATA_API:"focus"+E+b+" blur"+E+b,LOAD_DATA_API:"load"+E+b},x=function(){function n(e){this._element=e}var e=n.prototype;return e.toggle=function(){var e=!0,t=!0,n=p(this._element).closest(I)[0];if(n){var i=this._element.querySelector(N);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(T))e=!1;else{var o=n.querySelector(k);o&&p(o).removeClass(T)}else"checkbox"===i.type?"LABEL"===this._element.tagName&&i.checked===this._element.classList.contains(T)&&(e=!1):e=!1;e&&(i.checked=!this._element.classList.contains(T),p(i).trigger("change")),i.focus(),t=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(t&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(T)),e&&p(this._element).toggleClass(T))},e.dispose=function(){p.removeData(this._element,y),this._element=null},n._jQueryInterface=function(t){return this.each(function(){var e=p(this).data(y);e||(e=new n(this),p(this).data(y,e)),"toggle"===t&&e[t]()})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),n}();p(document).on(P.CLICK_DATA_API,D,function(e){var t=e.target;if(p(t).hasClass(C)||(t=p(t).closest(L)[0]),!t||t.hasAttribute("disabled")||t.classList.contains("disabled"))e.preventDefault();else{var n=t.querySelector(N);if(n&&(n.hasAttribute("disabled")||n.classList.contains("disabled")))return void e.preventDefault();x._jQueryInterface.call(p(t),"toggle")}}).on(P.FOCUS_BLUR_DATA_API,D,function(e){var t=p(e.target).closest(L)[0];p(t).toggleClass(S,/^focus(in)?$/.test(e.type))}),p(window).on(P.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(O)),t=0,n=e.length;t<n;t++){var i=e[t],o=i.querySelector(N);o.checked||o.hasAttribute("checked")?i.classList.add(T):i.classList.remove(T)}for(var r=0,s=(e=[].slice.call(document.querySelectorAll(A))).length;r<s;r++){var a=e[r];"true"===a.getAttribute("aria-pressed")?a.classList.add(T):a.classList.remove(T)}}),p.fn[v]=x._jQueryInterface,p.fn[v].Constructor=x,p.fn[v].noConflict=function(){return p.fn[v]=w,x._jQueryInterface};var j="carousel",H="bs.carousel",R="."+H,F=".data-api",M=p.fn[j],W={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},U={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},B="next",q="prev",K="left",Q="right",V={SLIDE:"slide"+R,SLID:"slid"+R,KEYDOWN:"keydown"+R,MOUSEENTER:"mouseenter"+R,MOUSELEAVE:"mouseleave"+R,TOUCHSTART:"touchstart"+R,TOUCHMOVE:"touchmove"+R,TOUCHEND:"touchend"+R,POINTERDOWN:"pointerdown"+R,POINTERUP:"pointerup"+R,DRAG_START:"dragstart"+R,LOAD_DATA_API:"load"+R+F,CLICK_DATA_API:"click"+R+F},Y="carousel",z="active",X="slide",G="carousel-item-right",$="carousel-item-left",J="carousel-item-next",Z="carousel-item-prev",ee="pointer-event",te=".active",ne=".active.carousel-item",ie=".carousel-item",oe=".carousel-item img",re=".carousel-item-next, .carousel-item-prev",se=".carousel-indicators",ae="[data-slide], [data-slide-to]",le='[data-ride="carousel"]',ce={TOUCH:"touch",PEN:"pen"},he=function(){function r(e,t){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(t),this._element=e,this._indicatorsElement=this._element.querySelector(se),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=r.prototype;return e.next=function(){this._isSliding||this._slide(B)},e.nextWhenVisible=function(){!document.hidden&&p(this._element).is(":visible")&&"hidden"!==p(this._element).css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide(q)},e.pause=function(e){e||(this._isPaused=!0),this._element.querySelector(re)&&(m.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(e){e||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(e){var t=this;this._activeElement=this._element.querySelector(ne);var n=this._getItemIndex(this._activeElement);if(!(e>this._items.length-1||e<0))if(this._isSliding)p(this._element).one(V.SLID,function(){return t.to(e)});else{if(n===e)return this.pause(),void this.cycle();var i=n<e?B:q;this._slide(i,this._items[e])}},e.dispose=function(){p(this._element).off(R),p.removeData(this._element,H),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(e){return e=l({},W,{},e),m.typeCheckConfig(j,e,U),e},e._handleSwipe=function(){var e=Math.abs(this.touchDeltaX);if(!(e<=40)){var t=e/this.touchDeltaX;(this.touchDeltaX=0)<t&&this.prev(),t<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&p(this._element).on(V.KEYDOWN,function(e){return t._keydown(e)}),"hover"===this._config.pause&&p(this._element).on(V.MOUSEENTER,function(e){return t.pause(e)}).on(V.MOUSELEAVE,function(e){return t.cycle(e)}),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&ce[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&ce[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout(function(e){return t.cycle(e)},500+t._config.interval))};p(this._element.querySelectorAll(oe)).on(V.DRAG_START,function(e){return e.preventDefault()}),this._pointerEvent?(p(this._element).on(V.POINTERDOWN,function(e){return n(e)}),p(this._element).on(V.POINTERUP,function(e){return i(e)}),this._element.classList.add(ee)):(p(this._element).on(V.TOUCHSTART,function(e){return n(e)}),p(this._element).on(V.TOUCHMOVE,function(e){return function(e){e.originalEvent.touches&&1<e.originalEvent.touches.length?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)}),p(this._element).on(V.TOUCHEND,function(e){return i(e)}))}},e._keydown=function(e){if(!/input|textarea/i.test(e.target.tagName))switch(e.which){case 37:e.preventDefault(),this.prev();break;case 39:e.preventDefault(),this.next()}},e._getItemIndex=function(e){return this._items=e&&e.parentNode?[].slice.call(e.parentNode.querySelectorAll(ie)):[],this._items.indexOf(e)},e._getItemByDirection=function(e,t){var n=e===B,i=e===q,o=this._getItemIndex(t),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return t;var s=(o+(e===q?-1:1))%this._items.length;return-1==s?this._items[this._items.length-1]:this._items[s]},e._triggerSlideEvent=function(e,t){var n=this._getItemIndex(e),i=this._getItemIndex(this._element.querySelector(ne)),o=p.Event(V.SLIDE,{relatedTarget:e,direction:t,from:i,to:n});return p(this._element).trigger(o),o},e._setActiveIndicatorElement=function(e){if(this._indicatorsElement){var t=[].slice.call(this._indicatorsElement.querySelectorAll(te));p(t).removeClass(z);var n=this._indicatorsElement.children[this._getItemIndex(e)];n&&p(n).addClass(z)}},e._slide=function(e,t){var n,i,o,r=this,s=this._element.querySelector(ne),a=this._getItemIndex(s),l=t||s&&this._getItemByDirection(e,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=e===B?(n=$,i=J,K):(n=G,i=Z,Q),l&&p(l).hasClass(z))this._isSliding=!1;else if(!this._triggerSlideEvent(l,o).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=p.Event(V.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(p(this._element).hasClass(X)){p(l).addClass(i),m.reflow(l),p(s).addClass(n),p(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=f):this._config.interval=this._config.defaultInterval||this._config.interval;var d=m.getTransitionDurationFromElement(s);p(s).one(m.TRANSITION_END,function(){p(l).removeClass(n+" "+i).addClass(z),p(s).removeClass(z+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return p(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else p(s).removeClass(z),p(l).addClass(z),this._isSliding=!1,p(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var e=p(this).data(H),t=l({},W,{},p(this).data());"object"==typeof i&&(t=l({},t,{},i));var n="string"==typeof i?i:t.slide;if(e||(e=new r(this,t),p(this).data(H,e)),"number"==typeof i)e.to(i);else if("string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}else t.interval&&t.ride&&(e.pause(),e.cycle())})},r._dataApiClickHandler=function(e){var t=m.getSelectorFromElement(this);if(t){var n=p(t)[0];if(n&&p(n).hasClass(Y)){var i=l({},p(n).data(),{},p(this).data()),o=this.getAttribute("data-slide-to");o&&(i.interval=!1),r._jQueryInterface.call(p(n),i),o&&p(n).data(H).to(o),e.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return W}}]),r}();p(document).on(V.CLICK_DATA_API,ae,he._dataApiClickHandler),p(window).on(V.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(le)),t=0,n=e.length;t<n;t++){var i=p(e[t]);he._jQueryInterface.call(i,i.data())}}),p.fn[j]=he._jQueryInterface,p.fn[j].Constructor=he,p.fn[j].noConflict=function(){return p.fn[j]=M,he._jQueryInterface};var ue="collapse",fe="bs.collapse",de="."+fe,pe=p.fn[ue],me={toggle:!0,parent:""},ge={toggle:"boolean",parent:"(string|element)"},_e={SHOW:"show"+de,SHOWN:"shown"+de,HIDE:"hide"+de,HIDDEN:"hidden"+de,CLICK_DATA_API:"click"+de+".data-api"},ve="show",ye="collapse",Ee="collapsing",be="collapsed",we="width",Te="height",Ce=".show, .collapsing",Se='[data-toggle="collapse"]',De=function(){function a(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(Se)),i=0,o=n.length;i<o;i++){var r=n[i],s=m.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter(function(e){return e===t});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=a.prototype;return e.toggle=function(){p(this._element).hasClass(ve)?this.hide():this.show()},e.show=function(){var e,t,n=this;if(!this._isTransitioning&&!p(this._element).hasClass(ve)&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(Ce)).filter(function(e){return"string"==typeof n._config.parent?e.getAttribute("data-parent")===n._config.parent:e.classList.contains(ye)})).length&&(e=null),!(e&&(t=p(e).not(this._selector).data(fe))&&t._isTransitioning))){var i=p.Event(_e.SHOW);if(p(this._element).trigger(i),!i.isDefaultPrevented()){e&&(a._jQueryInterface.call(p(e).not(this._selector),"hide"),t||p(e).data(fe,null));var o=this._getDimension();p(this._element).removeClass(ye).addClass(Ee),this._element.style[o]=0,this._triggerArray.length&&p(this._triggerArray).removeClass(be).attr("aria-expanded",!0),this.setTransitioning(!0);var r="scroll"+(o[0].toUpperCase()+o.slice(1)),s=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){p(n._element).removeClass(Ee).addClass(ye).addClass(ve),n._element.style[o]="",n.setTransitioning(!1),p(n._element).trigger(_e.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},e.hide=function(){var e=this;if(!this._isTransitioning&&p(this._element).hasClass(ve)){var t=p.Event(_e.HIDE);if(p(this._element).trigger(t),!t.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",m.reflow(this._element),p(this._element).addClass(Ee).removeClass(ye).removeClass(ve);var i=this._triggerArray.length;if(0<i)for(var o=0;o<i;o++){var r=this._triggerArray[o],s=m.getSelectorFromElement(r);if(null!==s)p([].slice.call(document.querySelectorAll(s))).hasClass(ve)||p(r).addClass(be).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){e.setTransitioning(!1),p(e._element).removeClass(Ee).addClass(ye).trigger(_e.HIDDEN)}).emulateTransitionEnd(a)}}},e.setTransitioning=function(e){this._isTransitioning=e},e.dispose=function(){p.removeData(this._element,fe),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(e){return(e=l({},me,{},e)).toggle=Boolean(e.toggle),m.typeCheckConfig(ue,e,ge),e},e._getDimension=function(){return p(this._element).hasClass(we)?we:Te},e._getParent=function(){var e,n=this;m.isElement(this._config.parent)?(e=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(e=this._config.parent[0])):e=document.querySelector(this._config.parent);var t='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(e.querySelectorAll(t));return p(i).each(function(e,t){n._addAriaAndCollapsedClass(a._getTargetFromElement(t),[t])}),e},e._addAriaAndCollapsedClass=function(e,t){var n=p(e).hasClass(ve);t.length&&p(t).toggleClass(be,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(e){var t=m.getSelectorFromElement(e);return t?document.querySelector(t):null},a._jQueryInterface=function(i){return this.each(function(){var e=p(this),t=e.data(fe),n=l({},me,{},e.data(),{},"object"==typeof i&&i?i:{});if(!t&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),t||(t=new a(this,n),e.data(fe,t)),"string"==typeof i){if("undefined"==typeof t[i])throw new TypeError('No method named "'+i+'"');t[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return me}}]),a}();p(document).on(_e.CLICK_DATA_API,Se,function(e){"A"===e.currentTarget.tagName&&e.preventDefault();var n=p(this),t=m.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(t));p(i).each(function(){var e=p(this),t=e.data(fe)?"toggle":n.data();De._jQueryInterface.call(e,t)})}),p.fn[ue]=De._jQueryInterface,p.fn[ue].Constructor=De,p.fn[ue].noConflict=function(){return p.fn[ue]=pe,De._jQueryInterface};var Ie="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,Ae=function(){for(var e=["Edge","Trident","Firefox"],t=0;t<e.length;t+=1)if(Ie&&0<=navigator.userAgent.indexOf(e[t]))return 1;return 0}();var Oe=Ie&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},Ae))}};function Ne(e){return e&&"[object Function]"==={}.toString.call(e)}function ke(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function Le(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function Pe(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=ke(e),n=t.overflow,i=t.overflowX,o=t.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?e:Pe(Le(e))}function xe(e){return e&&e.referenceNode?e.referenceNode:e}var je=Ie&&!(!window.MSInputMethodContext||!document.documentMode),He=Ie&&/MSIE 10/.test(navigator.userAgent);function Re(e){return 11===e?je:10===e?He:je||He}function Fe(e){if(!e)return document.documentElement;for(var t=Re(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===ke(n,"position")?Fe(n):n:e?e.ownerDocument.documentElement:document.documentElement}function Me(e){return null!==e.parentNode?Me(e.parentNode):e}function We(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?e:t,o=n?t:e,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var s=r.commonAncestorContainer;if(e!==s&&t!==s||i.contains(o))return function(e){var t=e.nodeName;return"BODY"!==t&&("HTML"===t||Fe(e.firstElementChild)===e)}(s)?s:Fe(s);var a=Me(e);return a.host?We(a.host,t):We(e,Me(t).host)}function Ue(e,t){var n="top"===(1<arguments.length&&void 0!==t?t:"top")?"scrollTop":"scrollLeft",i=e.nodeName;if("BODY"!==i&&"HTML"!==i)return e[n];var o=e.ownerDocument.documentElement;return(e.ownerDocument.scrollingElement||o)[n]}function Be(e,t){var n="x"===t?"Left":"Top",i="Left"==n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"],10)+parseFloat(e["border"+i+"Width"],10)}function qe(e,t,n,i){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],Re(10)?parseInt(n["offset"+e])+parseInt(i["margin"+("Height"===e?"Top":"Left")])+parseInt(i["margin"+("Height"===e?"Bottom":"Right")]):0)}function Ke(e){var t=e.body,n=e.documentElement,i=Re(10)&&getComputedStyle(n);return{height:qe("Height",t,n,i),width:qe("Width",t,n,i)}}var Qe=function(e,t,n){return t&&Ve(e.prototype,t),n&&Ve(e,n),e};function Ve(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function Ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ze=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};function Xe(e){return ze({},e,{right:e.left+e.width,bottom:e.top+e.height})}function Ge(e){var t={};try{if(Re(10)){t=e.getBoundingClientRect();var n=Ue(e,"top"),i=Ue(e,"left");t.top+=n,t.left+=i,t.bottom+=n,t.right+=i}else t=e.getBoundingClientRect()}catch(e){}var o={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},r="HTML"===e.nodeName?Ke(e.ownerDocument):{},s=r.width||e.clientWidth||o.width,a=r.height||e.clientHeight||o.height,l=e.offsetWidth-s,c=e.offsetHeight-a;if(l||c){var h=ke(e);l-=Be(h,"x"),c-=Be(h,"y"),o.width-=l,o.height-=c}return Xe(o)}function $e(e,t,n){var i=2<arguments.length&&void 0!==n&&n,o=Re(10),r="HTML"===t.nodeName,s=Ge(e),a=Ge(t),l=Pe(e),c=ke(t),h=parseFloat(c.borderTopWidth,10),u=parseFloat(c.borderLeftWidth,10);i&&r&&(a.top=Math.max(a.top,0),a.left=Math.max(a.left,0));var f=Xe({top:s.top-a.top-h,left:s.left-a.left-u,width:s.width,height:s.height});if(f.marginTop=0,f.marginLeft=0,!o&&r){var d=parseFloat(c.marginTop,10),p=parseFloat(c.marginLeft,10);f.top-=h-d,f.bottom-=h-d,f.left-=u-p,f.right-=u-p,f.marginTop=d,f.marginLeft=p}return(o&&!i?t.contains(l):t===l&&"BODY"!==l.nodeName)&&(f=function(e,t,n){var i=2<arguments.length&&void 0!==n&&n,o=Ue(t,"top"),r=Ue(t,"left"),s=i?-1:1;return e.top+=o*s,e.bottom+=o*s,e.left+=r*s,e.right+=r*s,e}(f,t)),f}function Je(e){if(!e||!e.parentElement||Re())return document.documentElement;for(var t=e.parentElement;t&&"none"===ke(t,"transform");)t=t.parentElement;return t||document.documentElement}function Ze(e,t,n,i,o){var r=4<arguments.length&&void 0!==o&&o,s={top:0,left:0},a=r?Je(e):We(e,xe(t));if("viewport"===i)s=function(e,t){var n=1<arguments.length&&void 0!==t&&t,i=e.ownerDocument.documentElement,o=$e(e,i),r=Math.max(i.clientWidth,window.innerWidth||0),s=Math.max(i.clientHeight,window.innerHeight||0),a=n?0:Ue(i),l=n?0:Ue(i,"left");return Xe({top:a-o.top+o.marginTop,left:l-o.left+o.marginLeft,width:r,height:s})}(a,r);else{var l=void 0;"scrollParent"===i?"BODY"===(l=Pe(Le(t))).nodeName&&(l=e.ownerDocument.documentElement):l="window"===i?e.ownerDocument.documentElement:i;var c=$e(l,a,r);if("HTML"!==l.nodeName||function e(t){var n=t.nodeName;if("BODY"===n||"HTML"===n)return!1;if("fixed"===ke(t,"position"))return!0;var i=Le(t);return!!i&&e(i)}(a))s=c;else{var h=Ke(e.ownerDocument),u=h.height,f=h.width;s.top+=c.top-c.marginTop,s.bottom=u+c.top,s.left+=c.left-c.marginLeft,s.right=f+c.left}}var d="number"==typeof(n=n||0);return s.left+=d?n:n.left||0,s.top+=d?n:n.top||0,s.right-=d?n:n.right||0,s.bottom-=d?n:n.bottom||0,s}function et(e,t,i,n,o,r){var s=5<arguments.length&&void 0!==r?r:0;if(-1===e.indexOf("auto"))return e;var a=Ze(i,n,s,o),l={top:{width:a.width,height:t.top-a.top},right:{width:a.right-t.right,height:a.height},bottom:{width:a.width,height:a.bottom-t.bottom},left:{width:t.left-a.left,height:a.height}},c=Object.keys(l).map(function(e){return ze({key:e},l[e],{area:function(e){return e.width*e.height}(l[e])})}).sort(function(e,t){return t.area-e.area}),h=c.filter(function(e){var t=e.width,n=e.height;return t>=i.clientWidth&&n>=i.clientHeight}),u=0<h.length?h[0].key:c[0].key,f=e.split("-")[1];return u+(f?"-"+f:"")}function tt(e,t,n,i){var o=3<arguments.length&&void 0!==i?i:null;return $e(n,o?Je(t):We(t,xe(n)),o)}function nt(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),i=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+i,height:e.offsetHeight+n}}function it(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function ot(e,t,n){n=n.split("-")[0];var i=nt(e),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),s=r?"top":"left",a=r?"left":"top",l=r?"height":"width",c=r?"width":"height";return o[s]=t[s]+t[l]/2-i[l]/2,o[a]=n===a?t[a]-i[c]:t[it(a)],o}function rt(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function st(e,n,t){return(void 0===t?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===n});var i=rt(e,function(e){return e[t]===n});return e.indexOf(i)}(e,"name",t))).forEach(function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var t=e.function||e.fn;e.enabled&&Ne(t)&&(n.offsets.popper=Xe(n.offsets.popper),n.offsets.reference=Xe(n.offsets.reference),n=t(n,e))}),n}function at(e,n){return e.some(function(e){var t=e.name;return e.enabled&&t===n})}function lt(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),i=0;i<t.length;i++){var o=t[i],r=o?""+o+n:e;if("undefined"!=typeof document.body.style[r])return r}return null}function ct(e){var t=e.ownerDocument;return t?t.defaultView:window}function ht(e,t,n,i){n.updateBound=i,ct(e).addEventListener("resize",n.updateBound,{passive:!0});var o=Pe(e);return function e(t,n,i,o){var r="BODY"===t.nodeName,s=r?t.ownerDocument.defaultView:t;s.addEventListener(n,i,{passive:!0}),r||e(Pe(s.parentNode),n,i,o),o.push(s)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function ut(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=function(e,t){return ct(e).removeEventListener("resize",t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener("scroll",t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}(this.reference,this.state))}function ft(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function dt(n,i){Object.keys(i).forEach(function(e){var t="";-1!==["width","height","top","right","bottom","left"].indexOf(e)&&ft(i[e])&&(t="px"),n.style[e]=i[e]+t})}function pt(e,t){function n(e){return e}var i=e.offsets,o=i.popper,r=i.reference,s=Math.round,a=Math.floor,l=s(r.width),c=s(o.width),h=-1!==["left","right"].indexOf(e.placement),u=-1!==e.placement.indexOf("-"),f=t?h||u||l%2==c%2?s:a:n,d=t?s:n;return{left:f(l%2==1&&c%2==1&&!u&&t?o.left-1:o.left),top:d(o.top),bottom:d(o.bottom),right:f(o.right)}}var mt=Ie&&/Firefox/i.test(navigator.userAgent);function gt(e,t,n){var i=rt(e,function(e){return e.name===t}),o=!!i&&e.some(function(e){return e.name===n&&e.enabled&&e.order<i.order});if(!o){var r="`"+t+"`",s="`"+n+"`";console.warn(s+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var _t=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],vt=_t.slice(3);function yt(e,t){var n=1<arguments.length&&void 0!==t&&t,i=vt.indexOf(e),o=vt.slice(i+1).concat(vt.slice(0,i));return n?o.reverse():o}var Et="flip",bt="clockwise",wt="counterclockwise";function Tt(e,o,r,t){var s=[0,0],a=-1!==["right","left"].indexOf(t),n=e.split(/(\+|\-)/).map(function(e){return e.trim()}),i=n.indexOf(rt(n,function(e){return-1!==e.search(/,|\s/)}));n[i]&&-1===n[i].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==i?[n.slice(0,i).concat([n[i].split(l)[0]]),[n[i].split(l)[1]].concat(n.slice(i+1))]:[n];return(c=c.map(function(e,t){var n=(1===t?!a:a)?"height":"width",i=!1;return e.reduce(function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,i=!0,e):i?(e[e.length-1]+=t,i=!1,e):e.concat(t)},[]).map(function(e){return function(e,t,n,i){var o=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],s=o[2];if(!r)return e;if(0!==s.indexOf("%"))return"vh"!==s&&"vw"!==s?r:("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r;var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=i}return Xe(a)[t]/100*r}(e,n,o,r)})})).forEach(function(n,i){n.forEach(function(e,t){ft(e)&&(s[i]+=e*("-"===n[t-1]?-1:1))})}),s}var Ct={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],i=t.split("-")[1];if(i){var o=e.offsets,r=o.reference,s=o.popper,a=-1!==["bottom","top"].indexOf(n),l=a?"left":"top",c=a?"width":"height",h={start:Ye({},l,r[l]),end:Ye({},l,r[l]+r[c]-s[c])};e.offsets.popper=ze({},s,h[i])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,i=e.placement,o=e.offsets,r=o.popper,s=o.reference,a=i.split("-")[0],l=void 0;return l=ft(+n)?[+n,0]:Tt(n,r,s,a),"left"===a?(r.top+=l[0],r.left-=l[1]):"right"===a?(r.top+=l[0],r.left+=l[1]):"top"===a?(r.left+=l[0],r.top-=l[1]):"bottom"===a&&(r.left+=l[0],r.top+=l[1]),e.popper=r,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,i){var t=i.boundariesElement||Fe(e.instance.popper);e.instance.reference===t&&(t=Fe(t));var n=lt("transform"),o=e.instance.popper.style,r=o.top,s=o.left,a=o[n];o.top="",o.left="",o[n]="";var l=Ze(e.instance.popper,e.instance.reference,i.padding,t,e.positionFixed);o.top=r,o.left=s,o[n]=a,i.boundaries=l;var c=i.priority,h=e.offsets.popper,u={primary:function(e){var t=h[e];return h[e]<l[e]&&!i.escapeWithReference&&(t=Math.max(h[e],l[e])),Ye({},e,t)},secondary:function(e){var t="right"===e?"left":"top",n=h[t];return h[e]>l[e]&&!i.escapeWithReference&&(n=Math.min(h[t],l[e]-("right"===e?h.width:h.height))),Ye({},t,n)}};return c.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";h=ze({},h,u[t](e))}),e.offsets.popper=h,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,i=t.reference,o=e.placement.split("-")[0],r=Math.floor,s=-1!==["top","bottom"].indexOf(o),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]<r(i[l])&&(e.offsets.popper[l]=r(i[l])-n[c]),n[l]>r(i[a])&&(e.offsets.popper[l]=r(i[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!gt(e.instance.modifiers,"arrow","keepTogether"))return e;var i=t.element;if("string"==typeof i){if(!(i=e.instance.popper.querySelector(i)))return e}else if(!e.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var o=e.placement.split("-")[0],r=e.offsets,s=r.popper,a=r.reference,l=-1!==["left","right"].indexOf(o),c=l?"height":"width",h=l?"Top":"Left",u=h.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=nt(i)[c];a[d]-p<s[u]&&(e.offsets.popper[u]-=s[u]-(a[d]-p)),a[u]+p>s[d]&&(e.offsets.popper[u]+=a[u]+p-s[d]),e.offsets.popper=Xe(e.offsets.popper);var m=a[u]+a[c]/2-p/2,g=ke(e.instance.popper),_=parseFloat(g["margin"+h],10),v=parseFloat(g["border"+h+"Width"],10),y=m-e.offsets.popper[u]-_-v;return y=Math.max(Math.min(s[c]-p,y),0),e.arrowElement=i,e.offsets.arrow=(Ye(n={},u,Math.round(y)),Ye(n,f,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(m,g){if(at(m.instance.modifiers,"inner"))return m;if(m.flipped&&m.placement===m.originalPlacement)return m;var _=Ze(m.instance.popper,m.instance.reference,g.padding,g.boundariesElement,m.positionFixed),v=m.placement.split("-")[0],y=it(v),E=m.placement.split("-")[1]||"",b=[];switch(g.behavior){case Et:b=[v,y];break;case bt:b=yt(v);break;case wt:b=yt(v,!0);break;default:b=g.behavior}return b.forEach(function(e,t){if(v!==e||b.length===t+1)return m;v=m.placement.split("-")[0],y=it(v);var n=m.offsets.popper,i=m.offsets.reference,o=Math.floor,r="left"===v&&o(n.right)>o(i.left)||"right"===v&&o(n.left)<o(i.right)||"top"===v&&o(n.bottom)>o(i.top)||"bottom"===v&&o(n.top)<o(i.bottom),s=o(n.left)<o(_.left),a=o(n.right)>o(_.right),l=o(n.top)<o(_.top),c=o(n.bottom)>o(_.bottom),h="left"===v&&s||"right"===v&&a||"top"===v&&l||"bottom"===v&&c,u=-1!==["top","bottom"].indexOf(v),f=!!g.flipVariations&&(u&&"start"===E&&s||u&&"end"===E&&a||!u&&"start"===E&&l||!u&&"end"===E&&c),d=!!g.flipVariationsByContent&&(u&&"start"===E&&a||u&&"end"===E&&s||!u&&"start"===E&&c||!u&&"end"===E&&l),p=f||d;(r||h||p)&&(m.flipped=!0,(r||h)&&(v=b[t+1]),p&&(E=function(e){return"end"===e?"start":"start"===e?"end":e}(E)),m.placement=v+(E?"-"+E:""),m.offsets.popper=ze({},m.offsets.popper,ot(m.instance.popper,m.offsets.reference,m.placement)),m=st(m.instance.modifiers,m,"flip"))}),m},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],i=e.offsets,o=i.popper,r=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return o[s?"left":"top"]=r[n]-(a?o[s?"width":"height"]:0),e.placement=it(t),e.offsets.popper=Xe(o),e}},hide:{order:800,enabled:!0,fn:function(e){if(!gt(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=rt(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottom<n.top||t.left>n.right||t.top>n.bottom||t.right<n.left){if(!0===e.hide)return e;e.hide=!0,e.attributes["x-out-of-boundaries"]=""}else{if(!1===e.hide)return e;e.hide=!1,e.attributes["x-out-of-boundaries"]=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var n=t.x,i=t.y,o=e.offsets.popper,r=rt(e.instance.modifiers,function(e){return"applyStyle"===e.name}).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var s=void 0!==r?r:t.gpuAcceleration,a=Fe(e.instance.popper),l=Ge(a),c={position:o.position},h=pt(e,window.devicePixelRatio<2||!mt),u="bottom"===n?"top":"bottom",f="right"===i?"left":"right",d=lt("transform"),p=void 0,m=void 0;if(m="bottom"==u?"HTML"===a.nodeName?-a.clientHeight+h.bottom:-l.height+h.bottom:h.top,p="right"==f?"HTML"===a.nodeName?-a.clientWidth+h.right:-l.width+h.right:h.left,s&&d)c[d]="translate3d("+p+"px, "+m+"px, 0)",c[u]=0,c[f]=0,c.willChange="transform";else{var g="bottom"==u?-1:1,_="right"==f?-1:1;c[u]=m*g,c[f]=p*_,c.willChange=u+", "+f}var v={"x-placement":e.placement};return e.attributes=ze({},v,e.attributes),e.styles=ze({},c,e.styles),e.arrowStyles=ze({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(e){return dt(e.instance.popper,e.styles),function(t,n){Object.keys(n).forEach(function(e){!1!==n[e]?t.setAttribute(e,n[e]):t.removeAttribute(e)})}(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&dt(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,n,i,o){var r=tt(o,t,e,n.positionFixed),s=et(n.placement,r,t,e,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return t.setAttribute("x-placement",s),dt(t,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},St=(Qe(Dt,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=tt(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=et(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=ot(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=st(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,at(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[lt("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}.call(this)}},{key:"enableEventListeners",value:function(){return function(){this.state.eventsEnabled||(this.state=ht(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return ut.call(this)}}]),Dt);function Dt(e,t){var n=this,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Dt),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=Oe(this.update.bind(this)),this.options=ze({},Dt.Defaults,i),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=t&&t.jquery?t[0]:t,this.options.modifiers={},Object.keys(ze({},Dt.Defaults.modifiers,i.modifiers)).forEach(function(e){n.options.modifiers[e]=ze({},Dt.Defaults.modifiers[e]||{},i.modifiers?i.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return ze({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(e){e.enabled&&Ne(e.onLoad)&&e.onLoad(n.reference,n.popper,n.options,e,n.state)}),this.update();var o=this.options.eventsEnabled;o&&this.enableEventListeners(),this.state.eventsEnabled=o}St.Utils=("undefined"!=typeof window?window:global).PopperUtils,St.placements=_t,St.Defaults=Ct;var It="dropdown",At="bs.dropdown",Ot="."+At,Nt=".data-api",kt=p.fn[It],Lt=new RegExp("38|40|27"),Pt={HIDE:"hide"+Ot,HIDDEN:"hidden"+Ot,SHOW:"show"+Ot,SHOWN:"shown"+Ot,CLICK:"click"+Ot,CLICK_DATA_API:"click"+Ot+Nt,KEYDOWN_DATA_API:"keydown"+Ot+Nt,KEYUP_DATA_API:"keyup"+Ot+Nt},xt="disabled",jt="show",Ht="dropup",Rt="dropright",Ft="dropleft",Mt="dropdown-menu-right",Wt="position-static",Ut='[data-toggle="dropdown"]',Bt=".dropdown form",qt=".dropdown-menu",Kt=".navbar-nav",Qt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Vt="top-start",Yt="top-end",zt="bottom-start",Xt="bottom-end",Gt="right-start",$t="left-start",Jt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},Zt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},en=function(){function c(e,t){this._element=e,this._popper=null,this._config=this._getConfig(t),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var e=c.prototype;return e.toggle=function(){if(!this._element.disabled&&!p(this._element).hasClass(xt)){var e=p(this._menu).hasClass(jt);c._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||p(this._element).hasClass(xt)||p(this._menu).hasClass(jt))){var t={relatedTarget:this._element},n=p.Event(Pt.SHOW,t),i=c._getParentFromElement(this._element);if(p(i).trigger(n),!n.isDefaultPrevented()){if(!this._inNavbar&&e){if("undefined"==typeof St)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=i:m.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&p(i).addClass(Wt),this._popper=new St(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===p(i).closest(Kt).length&&p(document.body).children().on("mouseover",null,p.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),p(this._menu).toggleClass(jt),p(i).toggleClass(jt).trigger(p.Event(Pt.SHOWN,t))}}},e.hide=function(){if(!this._element.disabled&&!p(this._element).hasClass(xt)&&p(this._menu).hasClass(jt)){var e={relatedTarget:this._element},t=p.Event(Pt.HIDE,e),n=c._getParentFromElement(this._element);p(n).trigger(t),t.isDefaultPrevented()||(this._popper&&this._popper.destroy(),p(this._menu).toggleClass(jt),p(n).toggleClass(jt).trigger(p.Event(Pt.HIDDEN,e)))}},e.dispose=function(){p.removeData(this._element,At),p(this._element).off(Ot),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},e.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},e._addEventListeners=function(){var t=this;p(this._element).on(Pt.CLICK,function(e){e.preventDefault(),e.stopPropagation(),t.toggle()})},e._getConfig=function(e){return e=l({},this.constructor.Default,{},p(this._element).data(),{},e),m.typeCheckConfig(It,e,this.constructor.DefaultType),e},e._getMenuElement=function(){if(!this._menu){var e=c._getParentFromElement(this._element);e&&(this._menu=e.querySelector(qt))}return this._menu},e._getPlacement=function(){var e=p(this._element.parentNode),t=zt;return e.hasClass(Ht)?(t=Vt,p(this._menu).hasClass(Mt)&&(t=Yt)):e.hasClass(Rt)?t=Gt:e.hasClass(Ft)?t=$t:p(this._menu).hasClass(Mt)&&(t=Xt),t},e._detectNavbar=function(){return 0<p(this._element).closest(".navbar").length},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,{},t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var e={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(e.modifiers.applyStyle={enabled:!1}),l({},e,{},this._config.popperConfig)},c._jQueryInterface=function(t){return this.each(function(){var e=p(this).data(At);if(e||(e=new c(this,"object"==typeof t?t:null),p(this).data(At,e)),"string"==typeof t){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}})},c._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var t=[].slice.call(document.querySelectorAll(Ut)),n=0,i=t.length;n<i;n++){var o=c._getParentFromElement(t[n]),r=p(t[n]).data(At),s={relatedTarget:t[n]};if(e&&"click"===e.type&&(s.clickEvent=e),r){var a=r._menu;if(p(o).hasClass(jt)&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&p.contains(o,e.target))){var l=p.Event(Pt.HIDE,s);p(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),t[n].setAttribute("aria-expanded","false"),r._popper&&r._popper.destroy(),p(a).removeClass(jt),p(o).removeClass(jt).trigger(p.Event(Pt.HIDDEN,s)))}}}},c._getParentFromElement=function(e){var t,n=m.getSelectorFromElement(e);return n&&(t=document.querySelector(n)),t||e.parentNode},c._dataApiKeydownHandler=function(e){if((/input|textarea/i.test(e.target.tagName)?!(32===e.which||27!==e.which&&(40!==e.which&&38!==e.which||p(e.target).closest(qt).length)):Lt.test(e.which))&&(e.preventDefault(),e.stopPropagation(),!this.disabled&&!p(this).hasClass(xt))){var t=c._getParentFromElement(this),n=p(t).hasClass(jt);if(n||27!==e.which)if(n&&(!n||27!==e.which&&32!==e.which)){var i=[].slice.call(t.querySelectorAll(Qt)).filter(function(e){return p(e).is(":visible")});if(0!==i.length){var o=i.indexOf(e.target);38===e.which&&0<o&&o--,40===e.which&&o<i.length-1&&o++,o<0&&(o=0),i[o].focus()}}else{if(27===e.which){var r=t.querySelector(Ut);p(r).trigger("focus")}p(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return Jt}},{key:"DefaultType",get:function(){return Zt}}]),c}();p(document).on(Pt.KEYDOWN_DATA_API,Ut,en._dataApiKeydownHandler).on(Pt.KEYDOWN_DATA_API,qt,en._dataApiKeydownHandler).on(Pt.CLICK_DATA_API+" "+Pt.KEYUP_DATA_API,en._clearMenus).on(Pt.CLICK_DATA_API,Ut,function(e){e.preventDefault(),e.stopPropagation(),en._jQueryInterface.call(p(this),"toggle")}).on(Pt.CLICK_DATA_API,Bt,function(e){e.stopPropagation()}),p.fn[It]=en._jQueryInterface,p.fn[It].Constructor=en,p.fn[It].noConflict=function(){return p.fn[It]=kt,en._jQueryInterface};var tn="modal",nn="bs.modal",on="."+nn,rn=p.fn[tn],sn={backdrop:!0,keyboard:!0,focus:!0,show:!0},an={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},ln={HIDE:"hide"+on,HIDE_PREVENTED:"hidePrevented"+on,HIDDEN:"hidden"+on,SHOW:"show"+on,SHOWN:"shown"+on,FOCUSIN:"focusin"+on,RESIZE:"resize"+on,CLICK_DISMISS:"click.dismiss"+on,KEYDOWN_DISMISS:"keydown.dismiss"+on,MOUSEUP_DISMISS:"mouseup.dismiss"+on,MOUSEDOWN_DISMISS:"mousedown.dismiss"+on,CLICK_DATA_API:"click"+on+".data-api"},cn="modal-dialog-scrollable",hn="modal-scrollbar-measure",un="modal-backdrop",fn="modal-open",dn="fade",pn="show",mn="modal-static",gn=".modal-dialog",_n=".modal-body",vn='[data-toggle="modal"]',yn='[data-dismiss="modal"]',En=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",bn=".sticky-top",wn=function(){function o(e,t){this._config=this._getConfig(t),this._element=e,this._dialog=e.querySelector(gn),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var e=o.prototype;return e.toggle=function(e){return this._isShown?this.hide():this.show(e)},e.show=function(e){var t=this;if(!this._isShown&&!this._isTransitioning){p(this._element).hasClass(dn)&&(this._isTransitioning=!0);var n=p.Event(ln.SHOW,{relatedTarget:e});p(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),p(this._element).on(ln.CLICK_DISMISS,yn,function(e){return t.hide(e)}),p(this._dialog).on(ln.MOUSEDOWN_DISMISS,function(){p(t._element).one(ln.MOUSEUP_DISMISS,function(e){p(e.target).is(t._element)&&(t._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return t._showElement(e)}))}},e.hide=function(e){var t=this;if(e&&e.preventDefault(),this._isShown&&!this._isTransitioning){var n=p.Event(ln.HIDE);if(p(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=p(this._element).hasClass(dn);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),p(document).off(ln.FOCUSIN),p(this._element).removeClass(pn),p(this._element).off(ln.CLICK_DISMISS),p(this._dialog).off(ln.MOUSEDOWN_DISMISS),i){var o=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(e){return t._hideModal(e)}).emulateTransitionEnd(o)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach(function(e){return p(e).off(on)}),p(document).off(ln.FOCUSIN),p.removeData(this._element,nn),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(e){return e=l({},sn,{},e),m.typeCheckConfig(tn,e,an),e},e._triggerBackdropTransition=function(){var e=this;if("static"===this._config.backdrop){var t=p.Event(ln.HIDE_PREVENTED);if(p(this._element).trigger(t),t.defaultPrevented)return;this._element.classList.add(mn);var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,function(){e._element.classList.remove(mn)}).emulateTransitionEnd(n),this._element.focus()}else this.hide()},e._showElement=function(e){var t=this,n=p(this._element).hasClass(dn),i=this._dialog?this._dialog.querySelector(_n):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),p(this._dialog).hasClass(cn)&&i?i.scrollTop=0:this._element.scrollTop=0,n&&m.reflow(this._element),p(this._element).addClass(pn),this._config.focus&&this._enforceFocus();function o(){t._config.focus&&t._element.focus(),t._isTransitioning=!1,p(t._element).trigger(r)}var r=p.Event(ln.SHOWN,{relatedTarget:e});if(n){var s=m.getTransitionDurationFromElement(this._dialog);p(this._dialog).one(m.TRANSITION_END,o).emulateTransitionEnd(s)}else o()},e._enforceFocus=function(){var t=this;p(document).off(ln.FOCUSIN).on(ln.FOCUSIN,function(e){document!==e.target&&t._element!==e.target&&0===p(t._element).has(e.target).length&&t._element.focus()})},e._setEscapeEvent=function(){var t=this;this._isShown&&this._config.keyboard?p(this._element).on(ln.KEYDOWN_DISMISS,function(e){27===e.which&&t._triggerBackdropTransition()}):this._isShown||p(this._element).off(ln.KEYDOWN_DISMISS)},e._setResizeEvent=function(){var t=this;this._isShown?p(window).on(ln.RESIZE,function(e){return t.handleUpdate(e)}):p(window).off(ln.RESIZE)},e._hideModal=function(){var e=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop(function(){p(document.body).removeClass(fn),e._resetAdjustments(),e._resetScrollbar(),p(e._element).trigger(ln.HIDDEN)})},e._removeBackdrop=function(){this._backdrop&&(p(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(e){var t=this,n=p(this._element).hasClass(dn)?dn:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=un,n&&this._backdrop.classList.add(n),p(this._backdrop).appendTo(document.body),p(this._element).on(ln.CLICK_DISMISS,function(e){t._ignoreBackdropClick?t._ignoreBackdropClick=!1:e.target===e.currentTarget&&t._triggerBackdropTransition()}),n&&m.reflow(this._backdrop),p(this._backdrop).addClass(pn),!e)return;if(!n)return void e();var i=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,e).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){p(this._backdrop).removeClass(pn);var o=function(){t._removeBackdrop(),e&&e()};if(p(this._element).hasClass(dn)){var r=m.getTransitionDurationFromElement(this._backdrop);p(this._backdrop).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o()}else e&&e()},e._adjustDialog=function(){var e=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&e&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!e&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var e=document.body.getBoundingClientRect();this._isBodyOverflowing=e.left+e.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},e._setScrollbar=function(){var o=this;if(this._isBodyOverflowing){var e=[].slice.call(document.querySelectorAll(En)),t=[].slice.call(document.querySelectorAll(bn));p(e).each(function(e,t){var n=t.style.paddingRight,i=p(t).css("padding-right");p(t).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),p(t).each(function(e,t){var n=t.style.marginRight,i=p(t).css("margin-right");p(t).data("margin-right",n).css("margin-right",parseFloat(i)-o._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=p(document.body).css("padding-right");p(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}p(document.body).addClass(fn)},e._resetScrollbar=function(){var e=[].slice.call(document.querySelectorAll(En));p(e).each(function(e,t){var n=p(t).data("padding-right");p(t).removeData("padding-right"),t.style.paddingRight=n||""});var t=[].slice.call(document.querySelectorAll(""+bn));p(t).each(function(e,t){var n=p(t).data("margin-right");"undefined"!=typeof n&&p(t).css("margin-right",n).removeData("margin-right")});var n=p(document.body).data("padding-right");p(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},e._getScrollbarWidth=function(){var e=document.createElement("div");e.className=hn,document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t},o._jQueryInterface=function(n,i){return this.each(function(){var e=p(this).data(nn),t=l({},sn,{},p(this).data(),{},"object"==typeof n&&n?n:{});if(e||(e=new o(this,t),p(this).data(nn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](i)}else t.show&&e.show(i)})},s(o,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return sn}}]),o}();p(document).on(ln.CLICK_DATA_API,vn,function(e){var t,n=this,i=m.getSelectorFromElement(this);i&&(t=document.querySelector(i));var o=p(t).data(nn)?"toggle":l({},p(t).data(),{},p(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||e.preventDefault();var r=p(t).one(ln.SHOW,function(e){e.isDefaultPrevented()||r.one(ln.HIDDEN,function(){p(n).is(":visible")&&n.focus()})});wn._jQueryInterface.call(p(t),o,this)}),p.fn[tn]=wn._jQueryInterface,p.fn[tn].Constructor=wn,p.fn[tn].noConflict=function(){return p.fn[tn]=rn,wn._jQueryInterface};var Tn=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Cn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Sn=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,Dn=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function In(e,r,t){if(0===e.length)return e;if(t&&"function"==typeof t)return t(e);for(var n=(new window.DOMParser).parseFromString(e,"text/html"),s=Object.keys(r),a=[].slice.call(n.body.querySelectorAll("*")),i=function(e){var t=a[e],n=t.nodeName.toLowerCase();if(-1===s.indexOf(t.nodeName.toLowerCase()))return t.parentNode.removeChild(t),"continue";var i=[].slice.call(t.attributes),o=[].concat(r["*"]||[],r[n]||[]);i.forEach(function(e){!function(e,t){var n=e.nodeName.toLowerCase();if(-1!==t.indexOf(n))return-1===Tn.indexOf(n)||Boolean(e.nodeValue.match(Sn)||e.nodeValue.match(Dn));for(var i=t.filter(function(e){return e instanceof RegExp}),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1}(e,o)&&t.removeAttribute(e.nodeName)})},o=0,l=a.length;o<l;o++)i(o);return n.body.innerHTML}var An="tooltip",On="bs.tooltip",Nn="."+On,kn=p.fn[An],Ln="bs-tooltip",Pn=new RegExp("(^|\\s)"+Ln+"\\S+","g"),xn=["sanitize","whiteList","sanitizeFn"],jn={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Hn={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Rn={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Cn,popperConfig:null},Fn="show",Mn="out",Wn={HIDE:"hide"+Nn,HIDDEN:"hidden"+Nn,SHOW:"show"+Nn,SHOWN:"shown"+Nn,INSERTED:"inserted"+Nn,CLICK:"click"+Nn,FOCUSIN:"focusin"+Nn,FOCUSOUT:"focusout"+Nn,MOUSEENTER:"mouseenter"+Nn,MOUSELEAVE:"mouseleave"+Nn},Un="fade",Bn="show",qn=".tooltip-inner",Kn=".arrow",Qn="hover",Vn="focus",Yn="click",zn="manual",Xn=function(){function i(e,t){if("undefined"==typeof St)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}var e=i.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(e){if(this._isEnabled)if(e){var t=this.constructor.DATA_KEY,n=p(e.currentTarget).data(t);n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(t,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(Bn))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),p.removeData(this.element,this.constructor.DATA_KEY),p(this.element).off(this.constructor.EVENT_KEY),p(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&p(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var e=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(e);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=m.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&p(o).addClass(Un);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();p(o).data(this.constructor.DATA_KEY,this),p.contains(this.element.ownerDocument.documentElement,this.tip)||p(o).appendTo(l),p(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new St(this.element,o,this._getPopperConfig(a)),p(o).addClass(Bn),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,p(t.element).trigger(t.constructor.Event.SHOWN),e===Mn&&t._leave(null,t)};if(p(this.tip).hasClass(Un)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.hide=function(e){function t(){n._hoverState!==Fn&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),p(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),e&&e()}var n=this,i=this.getTipElement(),o=p.Event(this.constructor.Event.HIDE);if(p(this.element).trigger(o),!o.isDefaultPrevented()){if(p(i).removeClass(Bn),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Yn]=!1,this._activeTrigger[Vn]=!1,this._activeTrigger[Qn]=!1,p(this.tip).hasClass(Un)){var r=m.getTransitionDurationFromElement(i);p(i).one(m.TRANSITION_END,t).emulateTransitionEnd(r)}else t();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(e){p(this.getTipElement()).addClass(Ln+"-"+e)},e.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},e.setContent=function(){var e=this.getTipElement();this.setElementContent(p(e.querySelectorAll(qn)),this.getTitle()),p(e).removeClass(Un+" "+Bn)},e.setElementContent=function(e,t){"object"!=typeof t||!t.nodeType&&!t.jquery?this.config.html?(this.config.sanitize&&(t=In(t,this.config.whiteList,this.config.sanitizeFn)),e.html(t)):e.text(t):this.config.html?p(t).parent().is(e)||e.empty().append(t):e.text(p(t).text())},e.getTitle=function(){var e=this.element.getAttribute("data-original-title");return e=e||("function"==typeof this.config.title?this.config.title.call(this.element):this.config.title)},e._getPopperConfig=function(e){var t=this;return l({},{placement:e,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Kn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){return t._handlePopperPlacementChange(e)}},{},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,{},t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},e._getAttachment=function(e){return Hn[e.toUpperCase()]},e._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(e){if("click"===e)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(e){return i.toggle(e)});else if(e!==zn){var t=e===Qn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=e===Qn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(t,i.config.selector,function(e){return i._enter(e)}).on(n,i.config.selector,function(e){return i._leave(e)})}}),this._hideModalHandler=function(){i.element&&i.hide()},p(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var e=typeof this.element.getAttribute("data-original-title");!this.element.getAttribute("title")&&"string"==e||(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusin"===e.type?Vn:Qn]=!0),p(t.getTipElement()).hasClass(Bn)||t._hoverState===Fn?t._hoverState=Fn:(clearTimeout(t._timeout),t._hoverState=Fn,t.config.delay&&t.config.delay.show?t._timeout=setTimeout(function(){t._hoverState===Fn&&t.show()},t.config.delay.show):t.show())},e._leave=function(e,t){var n=this.constructor.DATA_KEY;(t=t||p(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),p(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusout"===e.type?Vn:Qn]=!1),t._isWithActiveTrigger()||(clearTimeout(t._timeout),t._hoverState=Mn,t.config.delay&&t.config.delay.hide?t._timeout=setTimeout(function(){t._hoverState===Mn&&t.hide()},t.config.delay.hide):t.hide())},e._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},e._getConfig=function(e){var t=p(this.element).data();return Object.keys(t).forEach(function(e){-1!==xn.indexOf(e)&&delete t[e]}),"number"==typeof(e=l({},this.constructor.Default,{},t,{},"object"==typeof e&&e?e:{})).delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),m.typeCheckConfig(An,e,this.constructor.DefaultType),e.sanitize&&(e.template=In(e.template,e.whiteList,e.sanitizeFn)),e},e._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},e._cleanTipClass=function(){var e=p(this.getTipElement()),t=e.attr("class").match(Pn);null!==t&&t.length&&e.removeClass(t.join(""))},e._handlePopperPlacementChange=function(e){var t=e.instance;this.tip=t.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},e._fixTransition=function(){var e=this.getTipElement(),t=this.config.animation;null===e.getAttribute("x-placement")&&(p(e).removeClass(Un),this.config.animation=!1,this.hide(),this.show(),this.config.animation=t)},i._jQueryInterface=function(n){return this.each(function(){var e=p(this).data(On),t="object"==typeof n&&n;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),p(this).data(On,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return Rn}},{key:"NAME",get:function(){return An}},{key:"DATA_KEY",get:function(){return On}},{key:"Event",get:function(){return Wn}},{key:"EVENT_KEY",get:function(){return Nn}},{key:"DefaultType",get:function(){return jn}}]),i}();p.fn[An]=Xn._jQueryInterface,p.fn[An].Constructor=Xn,p.fn[An].noConflict=function(){return p.fn[An]=kn,Xn._jQueryInterface};var Gn="popover",$n="bs.popover",Jn="."+$n,Zn=p.fn[Gn],ei="bs-popover",ti=new RegExp("(^|\\s)"+ei+"\\S+","g"),ni=l({},Xn.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),ii=l({},Xn.DefaultType,{content:"(string|element|function)"}),oi="fade",ri="show",si=".popover-header",ai=".popover-body",li={HIDE:"hide"+Jn,HIDDEN:"hidden"+Jn,SHOW:"show"+Jn,SHOWN:"shown"+Jn,INSERTED:"inserted"+Jn,CLICK:"click"+Jn,FOCUSIN:"focusin"+Jn,FOCUSOUT:"focusout"+Jn,MOUSEENTER:"mouseenter"+Jn,MOUSELEAVE:"mouseleave"+Jn},ci=function(e){function i(){return e.apply(this,arguments)||this}!function(e,t){e.prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t}(i,e);var t=i.prototype;return t.isWithContent=function(){return this.getTitle()||this._getContent()},t.addAttachmentClass=function(e){p(this.getTipElement()).addClass(ei+"-"+e)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var e=p(this.getTipElement());this.setElementContent(e.find(si),this.getTitle());var t=this._getContent();"function"==typeof t&&(t=t.call(this.element)),this.setElementContent(e.find(ai),t),e.removeClass(oi+" "+ri)},t._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},t._cleanTipClass=function(){var e=p(this.getTipElement()),t=e.attr("class").match(ti);null!==t&&0<t.length&&e.removeClass(t.join(""))},i._jQueryInterface=function(n){return this.each(function(){var e=p(this).data($n),t="object"==typeof n?n:null;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),p(this).data($n,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return ni}},{key:"NAME",get:function(){return Gn}},{key:"DATA_KEY",get:function(){return $n}},{key:"Event",get:function(){return li}},{key:"EVENT_KEY",get:function(){return Jn}},{key:"DefaultType",get:function(){return ii}}]),i}(Xn);p.fn[Gn]=ci._jQueryInterface,p.fn[Gn].Constructor=ci,p.fn[Gn].noConflict=function(){return p.fn[Gn]=Zn,ci._jQueryInterface};var hi="scrollspy",ui="bs.scrollspy",fi="."+ui,di=p.fn[hi],pi={offset:10,method:"auto",target:""},mi={offset:"number",method:"string",target:"(string|element)"},gi={ACTIVATE:"activate"+fi,SCROLL:"scroll"+fi,LOAD_DATA_API:"load"+fi+".data-api"},_i="dropdown-item",vi="active",yi='[data-spy="scroll"]',Ei=".nav, .list-group",bi=".nav-link",wi=".nav-item",Ti=".list-group-item",Ci=".dropdown",Si=".dropdown-item",Di=".dropdown-toggle",Ii="offset",Ai="position",Oi=function(){function n(e,t){var n=this;this._element=e,this._scrollElement="BODY"===e.tagName?window:e,this._config=this._getConfig(t),this._selector=this._config.target+" "+bi+","+this._config.target+" "+Ti+","+this._config.target+" "+Si,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,p(this._scrollElement).on(gi.SCROLL,function(e){return n._process(e)}),this.refresh(),this._process()}var e=n.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?Ii:Ai,o="auto"===this._config.method?e:this._config.method,r=o===Ai?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(e){var t,n=m.getSelectorFromElement(e);if(n&&(t=document.querySelector(n)),t){var i=t.getBoundingClientRect();if(i.width||i.height)return[p(t)[o]().top+r,n]}return null}).filter(function(e){return e}).sort(function(e,t){return e[0]-t[0]}).forEach(function(e){t._offsets.push(e[0]),t._targets.push(e[1])})},e.dispose=function(){p.removeData(this._element,ui),p(this._scrollElement).off(fi),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(e){if("string"!=typeof(e=l({},pi,{},"object"==typeof e&&e?e:{})).target){var t=p(e.target).attr("id");t||(t=m.getUID(hi),p(e.target).attr("id",t)),e.target="#"+t}return m.typeCheckConfig(hi,e,mi),e},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var e=this._getScrollTop()+this._config.offset,t=this._getScrollHeight(),n=this._config.offset+t-this._getOffsetHeight();if(this._scrollHeight!==t&&this.refresh(),n<=e){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&e<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&e>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||e<this._offsets[o+1])&&this._activate(this._targets[o])}}},e._activate=function(t){this._activeTarget=t,this._clear();var e=this._selector.split(",").map(function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'}),n=p([].slice.call(document.querySelectorAll(e.join(","))));n.hasClass(_i)?(n.closest(Ci).find(Di).addClass(vi),n.addClass(vi)):(n.addClass(vi),n.parents(Ei).prev(bi+", "+Ti).addClass(vi),n.parents(Ei).prev(wi).children(bi).addClass(vi)),p(this._scrollElement).trigger(gi.ACTIVATE,{relatedTarget:t})},e._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(e){return e.classList.contains(vi)}).forEach(function(e){return e.classList.remove(vi)})},n._jQueryInterface=function(t){return this.each(function(){var e=p(this).data(ui);if(e||(e=new n(this,"object"==typeof t&&t),p(this).data(ui,e)),"string"==typeof t){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return pi}}]),n}();p(window).on(gi.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(yi)),t=e.length;t--;){var n=p(e[t]);Oi._jQueryInterface.call(n,n.data())}}),p.fn[hi]=Oi._jQueryInterface,p.fn[hi].Constructor=Oi,p.fn[hi].noConflict=function(){return p.fn[hi]=di,Oi._jQueryInterface};var Ni="bs.tab",ki="."+Ni,Li=p.fn.tab,Pi={HIDE:"hide"+ki,HIDDEN:"hidden"+ki,SHOW:"show"+ki,SHOWN:"shown"+ki,CLICK_DATA_API:"click"+ki+".data-api"},xi="dropdown-menu",ji="active",Hi="disabled",Ri="fade",Fi="show",Mi=".dropdown",Wi=".nav, .list-group",Ui=".active",Bi="> li > .active",qi='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Ki=".dropdown-toggle",Qi="> .dropdown-menu .active",Vi=function(){function i(e){this._element=e}var e=i.prototype;return e.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&p(this._element).hasClass(ji)||p(this._element).hasClass(Hi))){var e,i,t=p(this._element).closest(Wi)[0],o=m.getSelectorFromElement(this._element);if(t){var r="UL"===t.nodeName||"OL"===t.nodeName?Bi:Ui;i=(i=p.makeArray(p(t).find(r)))[i.length-1]}var s=p.Event(Pi.HIDE,{relatedTarget:this._element}),a=p.Event(Pi.SHOW,{relatedTarget:i});if(i&&p(i).trigger(s),p(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(e=document.querySelector(o)),this._activate(this._element,t);var l=function(){var e=p.Event(Pi.HIDDEN,{relatedTarget:n._element}),t=p.Event(Pi.SHOWN,{relatedTarget:i});p(i).trigger(e),p(n._element).trigger(t)};e?this._activate(e,e.parentNode,l):l()}}},e.dispose=function(){p.removeData(this._element,Ni),this._element=null},e._activate=function(e,t,n){function i(){return o._transitionComplete(e,r,n)}var o=this,r=(!t||"UL"!==t.nodeName&&"OL"!==t.nodeName?p(t).children(Ui):p(t).find(Bi))[0],s=n&&r&&p(r).hasClass(Ri);if(r&&s){var a=m.getTransitionDurationFromElement(r);p(r).removeClass(Fi).one(m.TRANSITION_END,i).emulateTransitionEnd(a)}else i()},e._transitionComplete=function(e,t,n){if(t){p(t).removeClass(ji);var i=p(t.parentNode).find(Qi)[0];i&&p(i).removeClass(ji),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!1)}if(p(e).addClass(ji),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!0),m.reflow(e),e.classList.contains(Ri)&&e.classList.add(Fi),e.parentNode&&p(e.parentNode).hasClass(xi)){var o=p(e).closest(Mi)[0];if(o){var r=[].slice.call(o.querySelectorAll(Ki));p(r).addClass(ji)}e.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(Ni);if(t||(t=new i(this),e.data(Ni,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();p(document).on(Pi.CLICK_DATA_API,qi,function(e){e.preventDefault(),Vi._jQueryInterface.call(p(this),"show")}),p.fn.tab=Vi._jQueryInterface,p.fn.tab.Constructor=Vi,p.fn.tab.noConflict=function(){return p.fn.tab=Li,Vi._jQueryInterface};var Yi="toast",zi="bs.toast",Xi="."+zi,Gi=p.fn[Yi],$i={CLICK_DISMISS:"click.dismiss"+Xi,HIDE:"hide"+Xi,HIDDEN:"hidden"+Xi,SHOW:"show"+Xi,SHOWN:"shown"+Xi},Ji="fade",Zi="hide",eo="show",to="showing",no={animation:"boolean",autohide:"boolean",delay:"number"},io={animation:!0,autohide:!0,delay:500},oo='[data-dismiss="toast"]',ro=function(){function i(e,t){this._element=e,this._config=this._getConfig(t),this._timeout=null,this._setListeners()}var e=i.prototype;return e.show=function(){var e=this,t=p.Event($i.SHOW);if(p(this._element).trigger(t),!t.isDefaultPrevented()){this._config.animation&&this._element.classList.add(Ji);var n=function(){e._element.classList.remove(to),e._element.classList.add(eo),p(e._element).trigger($i.SHOWN),e._config.autohide&&(e._timeout=setTimeout(function(){e.hide()},e._config.delay))};if(this._element.classList.remove(Zi),m.reflow(this._element),this._element.classList.add(to),this._config.animation){var i=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},e.hide=function(){if(this._element.classList.contains(eo)){var e=p.Event($i.HIDE);p(this._element).trigger(e),e.isDefaultPrevented()||this._close()}},e.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(eo)&&this._element.classList.remove(eo),p(this._element).off($i.CLICK_DISMISS),p.removeData(this._element,zi),this._element=null,this._config=null},e._getConfig=function(e){return e=l({},io,{},p(this._element).data(),{},"object"==typeof e&&e?e:{}),m.typeCheckConfig(Yi,e,this.constructor.DefaultType),e},e._setListeners=function(){var e=this;p(this._element).on($i.CLICK_DISMISS,oo,function(){return e.hide()})},e._close=function(){function e(){t._element.classList.add(Zi),p(t._element).trigger($i.HIDDEN)}var t=this;if(this._element.classList.remove(eo),this._config.animation){var n=m.getTransitionDurationFromElement(this._element);p(this._element).one(m.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},i._jQueryInterface=function(n){return this.each(function(){var e=p(this),t=e.data(zi);if(t||(t=new i(this,"object"==typeof n&&n),e.data(zi,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"DefaultType",get:function(){return no}},{key:"Default",get:function(){return io}}]),i}();p.fn[Yi]=ro._jQueryInterface,p.fn[Yi].Constructor=ro,p.fn[Yi].noConflict=function(){return p.fn[Yi]=Gi,ro._jQueryInterface},e.Alert=_,e.Button=x,e.Carousel=he,e.Collapse=De,e.Dropdown=en,e.Modal=wn,e.Popover=ci,e.Scrollspy=Oi,e.Tab=Vi,e.Toast=ro,e.Tooltip=Xn,e.Util=m,Object.defineProperty(e,"__esModule",{value:!0})});
7
  //# sourceMappingURL=bootstrap.bundle.min.js.map
1
  /*!
2
+ * Bootstrap v4.5.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],e):e((t=t||self).bootstrap={},t.jQuery)}(this,(function(t,e){"use strict";function n(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function i(t,e,i){return e&&n(t.prototype,e),i&&n(t,i),t}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function s(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(e){o(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e;function a(t){var n=this,i=!1;return e(this).one(l.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||l.triggerTransitionEnd(n)}),t),this}var l={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css("transition-duration"),i=e(t).css("transition-delay"),o=parseFloat(n),r=parseFloat(i);return o||r?(n=n.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(n)+parseFloat(i))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],s=r&&l.isElement(r)?"element":null===(a=r)||"undefined"==typeof a?""+a:{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?l.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};l.jQueryDetection(),e.fn.emulateTransitionEnd=a,e.event.special[l.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var c="alert",u=e.fn[c],h=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=l.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=l.getTransitionDurationFromElement(t);e(t).one(l.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),e.fn[c]=h._jQueryInterface,e.fn[c].Constructor=h,e.fn[c].noConflict=function(){return e.fn[c]=u,h._jQueryInterface};var f=e.fn.button,d=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var r=i.querySelector(".active");r&&e(r).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"LABEL"===i.tagName&&o&&"checkbox"===o.type&&t.preventDefault(),d._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var r=0,s=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;r<s;r++){var a=t[r];"true"===a.getAttribute("aria-pressed")?a.classList.add("active"):a.classList.remove("active")}})),e.fn.button=d._jQueryInterface,e.fn.button.Constructor=d,e.fn.button.noConflict=function(){return e.fn.button=f,d._jQueryInterface};var p="carousel",m=".bs.carousel",g=e.fn[p],v={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},b={TOUCH:"touch",PEN:"pen"},y=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(l.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(m),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=s(s({},v),t),l.typeCheckConfig(p,t,_),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+("prev"===t?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),r=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(r),r},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,r,s=this,a=this._element.querySelector(".active.carousel-item"),c=this._getItemIndex(a),u=n||a&&this._getItemByDirection(t,a),h=this._getItemIndex(u),f=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",r="left"):(i="carousel-item-right",o="carousel-item-prev",r="right"),u&&e(u).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(u,r).isDefaultPrevented()&&a&&u){this._isSliding=!0,f&&this.pause(),this._setActiveIndicatorElement(u);var d=e.Event("slid.bs.carousel",{relatedTarget:u,direction:r,from:c,to:h});if(e(this._element).hasClass("slide")){e(u).addClass(o),l.reflow(u),e(a).addClass(i),e(u).addClass(i);var p=parseInt(u.getAttribute("data-interval"),10);p?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=p):this._config.interval=this._config.defaultInterval||this._config.interval;var m=l.getTransitionDurationFromElement(a);e(a).one(l.TRANSITION_END,(function(){e(u).removeClass(i+" "+o).addClass("active"),e(a).removeClass("active "+o+" "+i),s._isSliding=!1,setTimeout((function(){return e(s._element).trigger(d)}),0)})).emulateTransitionEnd(m)}else e(a).removeClass("active"),e(u).addClass("active"),this._isSliding=!1,e(this._element).trigger(d);f&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=s(s({},v),e(this).data());"object"==typeof n&&(o=s(s({},o),n));var r="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof r){if("undefined"==typeof i[r])throw new TypeError('No method named "'+r+'"');i[r]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=l.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var r=s(s({},e(o).data()),e(this).data()),a=this.getAttribute("data-slide-to");a&&(r.interval=!1),t._jQueryInterface.call(e(o),r),a&&e(o).data("bs.carousel").to(a),n.preventDefault()}}},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return v}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",y._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n<i;n++){var o=e(t[n]);y._jQueryInterface.call(o,o.data())}})),e.fn[p]=y._jQueryInterface,e.fn[p].Constructor=y,e.fn[p].noConflict=function(){return e.fn[p]=g,y._jQueryInterface};var w="collapse",E=e.fn[w],T={toggle:!0,parent:""},C={toggle:"boolean",parent:"(string|element)"},S=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var r=n[i],s=l.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter((function(e){return e===t}));null!==s&&a.length>0&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var r=e.Event("show.bs.collapse");if(e(this._element).trigger(r),!r.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var s=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[s]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var a="scroll"+(s[0].toUpperCase()+s.slice(1)),c=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[s]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(c),this._element.style[s]=this._element[a]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",l.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var r=0;r<o;r++){var s=this._triggerArray[r],a=l.getSelectorFromElement(s);if(null!==a)e([].slice.call(document.querySelectorAll(a))).hasClass("show")||e(s).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[i]="";var c=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(){t.setTransitioning(!1),e(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(c)}}},n.setTransitioning=function(t){this._isTransitioning=t},n.dispose=function(){e.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},n._getConfig=function(t){return(t=s(s({},T),t)).toggle=Boolean(t.toggle),l.typeCheckConfig(w,t,C),t},n._getDimension=function(){return e(this._element).hasClass("width")?"width":"height"},n._getParent=function(){var n,i=this;l.isElement(this._config.parent)?(n=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(n=this._config.parent[0])):n=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',r=[].slice.call(n.querySelectorAll(o));return e(r).each((function(e,n){i._addAriaAndCollapsedClass(t._getTargetFromElement(n),[n])})),n},n._addAriaAndCollapsedClass=function(t,n){var i=e(t).hasClass("show");n.length&&e(n).toggleClass("collapsed",!i).attr("aria-expanded",i)},t._getTargetFromElement=function(t){var e=l.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.collapse"),r=s(s(s({},T),i.data()),"object"==typeof n&&n?n:{});if(!o&&r.toggle&&"string"==typeof n&&/show|hide/.test(n)&&(r.toggle=!1),o||(o=new t(this,r),i.data("bs.collapse",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return T}}]),t}();e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=e(this),i=l.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(i));e(o).each((function(){var t=e(this),i=t.data("bs.collapse")?"toggle":n.data();S._jQueryInterface.call(t,i)}))})),e.fn[w]=S._jQueryInterface,e.fn[w].Constructor=S,e.fn[w].noConflict=function(){return e.fn[w]=E,S._jQueryInterface};var D="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,k=function(){for(var t=["Edge","Trident","Firefox"],e=0;e<t.length;e+=1)if(D&&navigator.userAgent.indexOf(t[e])>=0)return 1;return 0}();var N=D&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),k))}};function O(t){return t&&"[object Function]"==={}.toString.call(t)}function A(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function I(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function x(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=A(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:x(I(t))}function j(t){return t&&t.referenceNode?t.referenceNode:t}var L=D&&!(!window.MSInputMethodContext||!document.documentMode),P=D&&/MSIE 10/.test(navigator.userAgent);function F(t){return 11===t?L:10===t?P:L||P}function R(t){if(!t)return document.documentElement;for(var e=F(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===A(n,"position")?R(n):n:t?t.ownerDocument.documentElement:document.documentElement}function M(t){return null!==t.parentNode?M(t.parentNode):t}function B(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var s,a,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(a=(s=l).nodeName)||"HTML"!==a&&R(s.firstElementChild)!==s?R(l):l;var c=M(t);return c.host?B(c.host,e):B(t,M(e).host)}function q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===e?"scrollTop":"scrollLeft",i=t.nodeName;if("BODY"===i||"HTML"===i){var o=t.ownerDocument.documentElement,r=t.ownerDocument.scrollingElement||o;return r[n]}return t[n]}function H(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=q(e,"top"),o=q(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}function Q(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"],10)+parseFloat(t["border"+i+"Width"],10)}function W(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],F(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function U(t){var e=t.body,n=t.documentElement,i=F(10)&&getComputedStyle(n);return{height:W("Height",e,n,i),width:W("Width",e,n,i)}}var V=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},Y=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),z=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},X=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t};function K(t){return X({},t,{right:t.left+t.width,bottom:t.top+t.height})}function G(t){var e={};try{if(F(10)){e=t.getBoundingClientRect();var n=q(t,"top"),i=q(t,"left");e.top+=n,e.left+=i,e.bottom+=n,e.right+=i}else e=t.getBoundingClientRect()}catch(t){}var o={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},r="HTML"===t.nodeName?U(t.ownerDocument):{},s=r.width||t.clientWidth||o.width,a=r.height||t.clientHeight||o.height,l=t.offsetWidth-s,c=t.offsetHeight-a;if(l||c){var u=A(t);l-=Q(u,"x"),c-=Q(u,"y"),o.width-=l,o.height-=c}return K(o)}function $(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=F(10),o="HTML"===e.nodeName,r=G(t),s=G(e),a=x(t),l=A(e),c=parseFloat(l.borderTopWidth,10),u=parseFloat(l.borderLeftWidth,10);n&&o&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var h=K({top:r.top-s.top-c,left:r.left-s.left-u,width:r.width,height:r.height});if(h.marginTop=0,h.marginLeft=0,!i&&o){var f=parseFloat(l.marginTop,10),d=parseFloat(l.marginLeft,10);h.top-=c-f,h.bottom-=c-f,h.left-=u-d,h.right-=u-d,h.marginTop=f,h.marginLeft=d}return(i&&!n?e.contains(a):e===a&&"BODY"!==a.nodeName)&&(h=H(h,e)),h}function J(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=$(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),s=e?0:q(n),a=e?0:q(n,"left"),l={top:s-i.top+i.marginTop,left:a-i.left+i.marginLeft,width:o,height:r};return K(l)}function Z(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===A(t,"position"))return!0;var n=I(t);return!!n&&Z(n)}function tt(t){if(!t||!t.parentElement||F())return document.documentElement;for(var e=t.parentElement;e&&"none"===A(e,"transform");)e=e.parentElement;return e||document.documentElement}function et(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},s=o?tt(t):B(t,j(e));if("viewport"===i)r=J(s,o);else{var a=void 0;"scrollParent"===i?"BODY"===(a=x(I(e))).nodeName&&(a=t.ownerDocument.documentElement):a="window"===i?t.ownerDocument.documentElement:i;var l=$(a,s,o);if("HTML"!==a.nodeName||Z(s))r=l;else{var c=U(t.ownerDocument),u=c.height,h=c.width;r.top+=l.top-l.marginTop,r.bottom=u+l.top,r.left+=l.left-l.marginLeft,r.right=h+l.left}}var f="number"==typeof(n=n||0);return r.left+=f?n:n.left||0,r.top+=f?n:n.top||0,r.right-=f?n:n.right||0,r.bottom-=f?n:n.bottom||0,r}function nt(t){return t.width*t.height}function it(t,e,n,i,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var s=et(n,i,r,o),a={top:{width:s.width,height:e.top-s.top},right:{width:s.right-e.right,height:s.height},bottom:{width:s.width,height:s.bottom-e.bottom},left:{width:e.left-s.left,height:s.height}},l=Object.keys(a).map((function(t){return X({key:t},a[t],{area:nt(a[t])})})).sort((function(t,e){return e.area-t.area})),c=l.filter((function(t){var e=t.width,i=t.height;return e>=n.clientWidth&&i>=n.clientHeight})),u=c.length>0?c[0].key:l[0].key,h=t.split("-")[1];return u+(h?"-"+h:"")}function ot(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=i?tt(e):B(e,j(n));return $(n,o,i)}function rt(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function st(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function at(t,e,n){n=n.split("-")[0];var i=rt(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),s=r?"top":"left",a=r?"left":"top",l=r?"height":"width",c=r?"width":"height";return o[s]=e[s]+e[l]/2-i[l]/2,o[a]=n===a?e[a]-i[c]:e[st(a)],o}function lt(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ct(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===n}));var i=lt(t,(function(t){return t[e]===n}));return t.indexOf(i)}(t,"name",n))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=t.function||t.fn;t.enabled&&O(n)&&(e.offsets.popper=K(e.offsets.popper),e.offsets.reference=K(e.offsets.reference),e=n(e,t))})),e}function ut(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=ot(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=it(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=at(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ct(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function ht(t,e){return t.some((function(t){var n=t.name;return t.enabled&&n===e}))}function ft(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i<e.length;i++){var o=e[i],r=o?""+o+n:t;if("undefined"!=typeof document.body.style[r])return r}return null}function dt(){return this.state.isDestroyed=!0,ht(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[ft("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function pt(t){var e=t.ownerDocument;return e?e.defaultView:window}function mt(t,e,n,i){n.updateBound=i,pt(t).addEventListener("resize",n.updateBound,{passive:!0});var o=x(t);return function t(e,n,i,o){var r="BODY"===e.nodeName,s=r?e.ownerDocument.defaultView:e;s.addEventListener(n,i,{passive:!0}),r||t(x(s.parentNode),n,i,o),o.push(s)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function gt(){this.state.eventsEnabled||(this.state=mt(this.reference,this.options,this.state,this.scheduleUpdate))}function vt(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,pt(t).removeEventListener("resize",e.updateBound),e.scrollParents.forEach((function(t){t.removeEventListener("scroll",e.updateBound)})),e.updateBound=null,e.scrollParents=[],e.scrollElement=null,e.eventsEnabled=!1,e))}function _t(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function bt(t,e){Object.keys(e).forEach((function(n){var i="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&_t(e[n])&&(i="px"),t.style[n]=e[n]+i}))}var yt=D&&/Firefox/i.test(navigator.userAgent);function wt(t,e,n){var i=lt(t,(function(t){return t.name===e})),o=!!i&&t.some((function(t){return t.name===n&&t.enabled&&t.order<i.order}));if(!o){var r="`"+e+"`",s="`"+n+"`";console.warn(s+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var Et=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],Tt=Et.slice(3);function Ct(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Tt.indexOf(t),i=Tt.slice(n+1).concat(Tt.slice(0,n));return e?i.reverse():i}var St="flip",Dt="clockwise",kt="counterclockwise";function Nt(t,e,n,i){var o=[0,0],r=-1!==["right","left"].indexOf(i),s=t.split(/(\+|\-)/).map((function(t){return t.trim()})),a=s.indexOf(lt(s,(function(t){return-1!==t.search(/,|\s/)})));s[a]&&-1===s[a].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==a?[s.slice(0,a).concat([s[a].split(l)[0]]),[s[a].split(l)[1]].concat(s.slice(a+1))]:[s];return(c=c.map((function(t,i){var o=(1===i?!r:r)?"height":"width",s=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,s=!0,t):s?(t[t.length-1]+=e,s=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],s=o[2];if(!r)return t;if(0===s.indexOf("%")){var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=i}return K(a)[e]/100*r}if("vh"===s||"vw"===s){return("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r}return r}(t,o,e,n)}))}))).forEach((function(t,e){t.forEach((function(n,i){_t(n)&&(o[e]+=n*("-"===t[i-1]?-1:1))}))})),o}var Ot={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,s=o.popper,a=-1!==["bottom","top"].indexOf(n),l=a?"left":"top",c=a?"width":"height",u={start:z({},l,r[l]),end:z({},l,r[l]+r[c]-s[c])};t.offsets.popper=X({},s,u[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,s=o.reference,a=i.split("-")[0],l=void 0;return l=_t(+n)?[+n,0]:Nt(n,r,s,a),"left"===a?(r.top+=l[0],r.left-=l[1]):"right"===a?(r.top+=l[0],r.left+=l[1]):"top"===a?(r.left+=l[0],r.top-=l[1]):"bottom"===a&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var n=e.boundariesElement||R(t.instance.popper);t.instance.reference===n&&(n=R(n));var i=ft("transform"),o=t.instance.popper.style,r=o.top,s=o.left,a=o[i];o.top="",o.left="",o[i]="";var l=et(t.instance.popper,t.instance.reference,e.padding,n,t.positionFixed);o.top=r,o.left=s,o[i]=a,e.boundaries=l;var c=e.priority,u=t.offsets.popper,h={primary:function(t){var n=u[t];return u[t]<l[t]&&!e.escapeWithReference&&(n=Math.max(u[t],l[t])),z({},t,n)},secondary:function(t){var n="right"===t?"left":"top",i=u[n];return u[t]>l[t]&&!e.escapeWithReference&&(i=Math.min(u[n],l[t]-("right"===t?u.width:u.height))),z({},n,i)}};return c.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";u=X({},u,h[e](t))})),t.offsets.popper=u,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,s=-1!==["top","bottom"].indexOf(o),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]<r(i[l])&&(t.offsets.popper[l]=r(i[l])-n[c]),n[l]>r(i[a])&&(t.offsets.popper[l]=r(i[a])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!wt(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,s=r.popper,a=r.reference,l=-1!==["left","right"].indexOf(o),c=l?"height":"width",u=l?"Top":"Left",h=u.toLowerCase(),f=l?"left":"top",d=l?"bottom":"right",p=rt(i)[c];a[d]-p<s[h]&&(t.offsets.popper[h]-=s[h]-(a[d]-p)),a[h]+p>s[d]&&(t.offsets.popper[h]+=a[h]+p-s[d]),t.offsets.popper=K(t.offsets.popper);var m=a[h]+a[c]/2-p/2,g=A(t.instance.popper),v=parseFloat(g["margin"+u],10),_=parseFloat(g["border"+u+"Width"],10),b=m-t.offsets.popper[h]-v-_;return b=Math.max(Math.min(s[c]-p,b),0),t.arrowElement=i,t.offsets.arrow=(z(n={},h,Math.round(b)),z(n,f,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(ht(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var n=et(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),i=t.placement.split("-")[0],o=st(i),r=t.placement.split("-")[1]||"",s=[];switch(e.behavior){case St:s=[i,o];break;case Dt:s=Ct(i);break;case kt:s=Ct(i,!0);break;default:s=e.behavior}return s.forEach((function(a,l){if(i!==a||s.length===l+1)return t;i=t.placement.split("-")[0],o=st(i);var c=t.offsets.popper,u=t.offsets.reference,h=Math.floor,f="left"===i&&h(c.right)>h(u.left)||"right"===i&&h(c.left)<h(u.right)||"top"===i&&h(c.bottom)>h(u.top)||"bottom"===i&&h(c.top)<h(u.bottom),d=h(c.left)<h(n.left),p=h(c.right)>h(n.right),m=h(c.top)<h(n.top),g=h(c.bottom)>h(n.bottom),v="left"===i&&d||"right"===i&&p||"top"===i&&m||"bottom"===i&&g,_=-1!==["top","bottom"].indexOf(i),b=!!e.flipVariations&&(_&&"start"===r&&d||_&&"end"===r&&p||!_&&"start"===r&&m||!_&&"end"===r&&g),y=!!e.flipVariationsByContent&&(_&&"start"===r&&p||_&&"end"===r&&d||!_&&"start"===r&&g||!_&&"end"===r&&m),w=b||y;(f||v||w)&&(t.flipped=!0,(f||v)&&(i=s[l+1]),w&&(r=function(t){return"end"===t?"start":"start"===t?"end":t}(r)),t.placement=i+(r?"-"+r:""),t.offsets.popper=X({},t.offsets.popper,at(t.instance.popper,t.offsets.reference,t.placement)),t=ct(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return o[s?"left":"top"]=r[n]-(a?o[s?"width":"height"]:0),t.placement=st(e),t.offsets.popper=K(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!wt(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=lt(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottom<n.top||e.left>n.right||e.top>n.bottom||e.right<n.left){if(!0===t.hide)return t;t.hide=!0,t.attributes["x-out-of-boundaries"]=""}else{if(!1===t.hide)return t;t.hide=!1,t.attributes["x-out-of-boundaries"]=!1}return t}},computeStyle:{order:850,enabled:!0,fn:function(t,e){var n=e.x,i=e.y,o=t.offsets.popper,r=lt(t.instance.modifiers,(function(t){return"applyStyle"===t.name})).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var s=void 0!==r?r:e.gpuAcceleration,a=R(t.instance.popper),l=G(a),c={position:o.position},u=function(t,e){var n=t.offsets,i=n.popper,o=n.reference,r=Math.round,s=Math.floor,a=function(t){return t},l=r(o.width),c=r(i.width),u=-1!==["left","right"].indexOf(t.placement),h=-1!==t.placement.indexOf("-"),f=e?u||h||l%2==c%2?r:s:a,d=e?r:a;return{left:f(l%2==1&&c%2==1&&!h&&e?i.left-1:i.left),top:d(i.top),bottom:d(i.bottom),right:f(i.right)}}(t,window.devicePixelRatio<2||!yt),h="bottom"===n?"top":"bottom",f="right"===i?"left":"right",d=ft("transform"),p=void 0,m=void 0;if(m="bottom"===h?"HTML"===a.nodeName?-a.clientHeight+u.bottom:-l.height+u.bottom:u.top,p="right"===f?"HTML"===a.nodeName?-a.clientWidth+u.right:-l.width+u.right:u.left,s&&d)c[d]="translate3d("+p+"px, "+m+"px, 0)",c[h]=0,c[f]=0,c.willChange="transform";else{var g="bottom"===h?-1:1,v="right"===f?-1:1;c[h]=m*g,c[f]=p*v,c.willChange=h+", "+f}var _={"x-placement":t.placement};return t.attributes=X({},_,t.attributes),t.styles=X({},c,t.styles),t.arrowStyles=X({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return bt(t.instance.popper,t.styles),e=t.instance.popper,n=t.attributes,Object.keys(n).forEach((function(t){!1!==n[t]?e.setAttribute(t,n[t]):e.removeAttribute(t)})),t.arrowElement&&Object.keys(t.arrowStyles).length&&bt(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=ot(o,e,t,n.positionFixed),s=it(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",s),bt(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},At=function(){function t(e,n){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};V(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=N(this.update.bind(this)),this.options=X({},t.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(X({},t.Defaults.modifiers,o.modifiers)).forEach((function(e){i.options.modifiers[e]=X({},t.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return X({name:t},i.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&O(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)})),this.update();var r=this.options.eventsEnabled;r&&this.enableEventListeners(),this.state.eventsEnabled=r}return Y(t,[{key:"update",value:function(){return ut.call(this)}},{key:"destroy",value:function(){return dt.call(this)}},{key:"enableEventListeners",value:function(){return gt.call(this)}},{key:"disableEventListeners",value:function(){return vt.call(this)}}]),t}();At.Utils=("undefined"!=typeof window?window:global).PopperUtils,At.placements=Et,At.Defaults=Ot;var It="dropdown",xt=e.fn[It],jt=new RegExp("38|40|27"),Lt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},Pt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},Ft=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var n=t.prototype;return n.toggle=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")){var n=e(this._menu).hasClass("show");t._clearMenus(),n||this.show(!0)}},n.show=function(n){if(void 0===n&&(n=!1),!(this._element.disabled||e(this._element).hasClass("disabled")||e(this._menu).hasClass("show"))){var i={relatedTarget:this._element},o=e.Event("show.bs.dropdown",i),r=t._getParentFromElement(this._element);if(e(r).trigger(o),!o.isDefaultPrevented()){if(!this._inNavbar&&n){if("undefined"==typeof At)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var s=this._element;"parent"===this._config.reference?s=r:l.isElement(this._config.reference)&&(s=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(s=this._config.reference[0])),"scrollParent"!==this._config.boundary&&e(r).addClass("position-static"),this._popper=new At(s,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===e(r).closest(".navbar-nav").length&&e(document.body).children().on("mouseover",null,e.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),e(this._menu).toggleClass("show"),e(r).toggleClass("show").trigger(e.Event("shown.bs.dropdown",i))}}},n.hide=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")&&e(this._menu).hasClass("show")){var n={relatedTarget:this._element},i=e.Event("hide.bs.dropdown",n),o=t._getParentFromElement(this._element);e(o).trigger(i),i.isDefaultPrevented()||(this._popper&&this._popper.destroy(),e(this._menu).toggleClass("show"),e(o).toggleClass("show").trigger(e.Event("hidden.bs.dropdown",n)))}},n.dispose=function(){e.removeData(this._element,"bs.dropdown"),e(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},n.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},n._addEventListeners=function(){var t=this;e(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},n._getConfig=function(t){return t=s(s(s({},this.constructor.Default),e(this._element).data()),t),l.typeCheckConfig(It,t,this.constructor.DefaultType),t},n._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},n._getPlacement=function(){var t=e(this._element.parentNode),n="bottom-start";return t.hasClass("dropup")?n=e(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?n="right-start":t.hasClass("dropleft")?n="left-start":e(this._menu).hasClass("dropdown-menu-right")&&(n="bottom-end"),n},n._detectNavbar=function(){return e(this._element).closest(".navbar").length>0},n._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=s(s({},e.offsets),t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},n._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),s(s({},t),this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,r=i.length;o<r;o++){var s=t._getParentFromElement(i[o]),a=e(i[o]).data("bs.dropdown"),l={relatedTarget:i[o]};if(n&&"click"===n.type&&(l.clickEvent=n),a){var c=a._menu;if(e(s).hasClass("show")&&!(n&&("click"===n.type&&/input|textarea/i.test(n.target.tagName)||"keyup"===n.type&&9===n.which)&&e.contains(s,n.target))){var u=e.Event("hide.bs.dropdown",l);e(s).trigger(u),u.isDefaultPrevented()||("ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),i[o].setAttribute("aria-expanded","false"),a._popper&&a._popper.destroy(),e(c).removeClass("show"),e(s).removeClass("show").trigger(e.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=l.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(n){if(!(/input|textarea/i.test(n.target.tagName)?32===n.which||27!==n.which&&(40!==n.which&&38!==n.which||e(n.target).closest(".dropdown-menu").length):!jt.test(n.which))&&!this.disabled&&!e(this).hasClass("disabled")){var i=t._getParentFromElement(this),o=e(i).hasClass("show");if(o||27!==n.which){if(n.preventDefault(),n.stopPropagation(),!o||o&&(27===n.which||32===n.which))return 27===n.which&&e(i.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void e(this).trigger("click");var r=[].slice.call(i.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return e(t).is(":visible")}));if(0!==r.length){var s=r.indexOf(n.target);38===n.which&&s>0&&s--,40===n.which&&s<r.length-1&&s++,s<0&&(s=0),r[s].focus()}}}},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return Lt}},{key:"DefaultType",get:function(){return Pt}}]),t}();e(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',Ft._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",Ft._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",Ft._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),Ft._jQueryInterface.call(e(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),e.fn[It]=Ft._jQueryInterface,e.fn[It].Constructor=Ft,e.fn[It].noConflict=function(){return e.fn[It]=xt,Ft._jQueryInterface};var Rt=e.fn.modal,Mt={backdrop:!0,keyboard:!0,focus:!0,show:!0},Bt={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},qt=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var n=t.prototype;return n.toggle=function(t){return this._isShown?this.hide():this.show(t)},n.show=function(t){var n=this;if(!this._isShown&&!this._isTransitioning){e(this._element).hasClass("fade")&&(this._isTransitioning=!0);var i=e.Event("show.bs.modal",{relatedTarget:t});e(this._element).trigger(i),this._isShown||i.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),e(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return n.hide(t)})),e(this._dialog).on("mousedown.dismiss.bs.modal",(function(){e(n._element).one("mouseup.dismiss.bs.modal",(function(t){e(t.target).is(n._element)&&(n._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return n._showElement(t)})))}},n.hide=function(t){var n=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var i=e.Event("hide.bs.modal");if(e(this._element).trigger(i),this._isShown&&!i.isDefaultPrevented()){this._isShown=!1;var o=e(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),e(document).off("focusin.bs.modal"),e(this._element).removeClass("show"),e(this._element).off("click.dismiss.bs.modal"),e(this._dialog).off("mousedown.dismiss.bs.modal"),o){var r=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(t){return n._hideModal(t)})).emulateTransitionEnd(r)}else this._hideModal()}}},n.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return e(t).off(".bs.modal")})),e(document).off("focusin.bs.modal"),e.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},n.handleUpdate=function(){this._adjustDialog()},n._getConfig=function(t){return t=s(s({},Mt),t),l.typeCheckConfig("modal",t,Bt),t},n._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var n=e.Event("hidePrevented.bs.modal");if(e(this._element).trigger(n),n.defaultPrevented)return;this._element.classList.add("modal-static");var i=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,(function(){t._element.classList.remove("modal-static")})).emulateTransitionEnd(i),this._element.focus()}else this.hide()},n._showElement=function(t){var n=this,i=e(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),e(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,i&&l.reflow(this._element),e(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var r=e.Event("shown.bs.modal",{relatedTarget:t}),s=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(r)};if(i){var a=l.getTransitionDurationFromElement(this._dialog);e(this._dialog).one(l.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},n._enforceFocus=function(){var t=this;e(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()}))},n._setEscapeEvent=function(){var t=this;this._isShown?e(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||e(this._element).off("keydown.dismiss.bs.modal")},n._setResizeEvent=function(){var t=this;this._isShown?e(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):e(window).off("resize.bs.modal")},n._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop((function(){e(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger("hidden.bs.modal")}))},n._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},n._showBackdrop=function(t){var n=this,i=e(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add(i),e(this._backdrop).appendTo(document.body),e(this._element).on("click.dismiss.bs.modal",(function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&n._triggerBackdropTransition()})),i&&l.reflow(this._backdrop),e(this._backdrop).addClass("show"),!t)return;if(!i)return void t();var o=l.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(l.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass("show");var r=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass("fade")){var s=l.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(l.TRANSITION_END,r).emulateTransitionEnd(s)}else r()}else t&&t()},n._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},n._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var n=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),i=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(n,i){var o=i.style.paddingRight,r=e(i).css("padding-right");e(i).data("padding-right",o).css("padding-right",parseFloat(r)+t._scrollbarWidth+"px")})),e(i).each((function(n,i){var o=i.style.marginRight,r=e(i).css("margin-right");e(i).data("margin-right",o).css("margin-right",parseFloat(r)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,r=e(document.body).css("padding-right");e(document.body).data("padding-right",o).css("padding-right",parseFloat(r)+this._scrollbarWidth+"px")}e(document.body).addClass("modal-open")},n._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));e(t).each((function(t,n){var i=e(n).data("padding-right");e(n).removeData("padding-right"),n.style.paddingRight=i||""}));var n=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(t,n){var i=e(n).data("margin-right");"undefined"!=typeof i&&e(n).css("margin-right",i).removeData("margin-right")}));var i=e(document.body).data("padding-right");e(document.body).removeData("padding-right"),document.body.style.paddingRight=i||""},n._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(n,i){return this.each((function(){var o=e(this).data("bs.modal"),r=s(s(s({},Mt),e(this).data()),"object"==typeof n&&n?n:{});if(o||(o=new t(this,r),e(this).data("bs.modal",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](i)}else r.show&&o.show(i)}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return Mt}}]),t}();e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var n,i=this,o=l.getSelectorFromElement(this);o&&(n=document.querySelector(o));var r=e(n).data("bs.modal")?"toggle":s(s({},e(n).data()),e(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var a=e(n).one("show.bs.modal",(function(t){t.isDefaultPrevented()||a.one("hidden.bs.modal",(function(){e(i).is(":visible")&&i.focus()}))}));qt._jQueryInterface.call(e(n),r,this)})),e.fn.modal=qt._jQueryInterface,e.fn.modal.Constructor=qt,e.fn.modal.noConflict=function(){return e.fn.modal=Rt,qt._jQueryInterface};var Ht=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Qt={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Wt=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,Ut=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function Vt(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),r=[].slice.call(i.body.querySelectorAll("*")),s=function(t,n){var i=r[t],s=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var a=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[s]||[]);a.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===Ht.indexOf(n)||Boolean(t.nodeValue.match(Wt)||t.nodeValue.match(Ut));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},a=0,l=r.length;a<l;a++)s(a);return i.body.innerHTML}var Yt="tooltip",zt=e.fn[Yt],Xt=new RegExp("(^|\\s)bs-tooltip\\S+","g"),Kt=["sanitize","whiteList","sanitizeFn"],Gt={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},$t={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Jt={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Qt,popperConfig:null},Zt={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},te=function(){function t(t,e){if("undefined"==typeof At)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var n=t.prototype;return n.enable=function(){this._isEnabled=!0},n.disable=function(){this._isEnabled=!1},n.toggleEnabled=function(){this._isEnabled=!this._isEnabled},n.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},n.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},n.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var n=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(n);var i=l.findShadowRoot(this.element),o=e.contains(null!==i?i:this.element.ownerDocument.documentElement,this.element);if(n.isDefaultPrevented()||!o)return;var r=this.getTipElement(),s=l.getUID(this.constructor.NAME);r.setAttribute("id",s),this.element.setAttribute("aria-describedby",s),this.setContent(),this.config.animation&&e(r).addClass("fade");var a="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,c=this._getAttachment(a);this.addAttachmentClass(c);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new At(this.element,r,this._getPopperConfig(c)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var h=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=l.getTransitionDurationFromElement(this.tip);e(this.tip).one(l.TRANSITION_END,h).emulateTransitionEnd(f)}else h()}},n.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),r=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var s=l.getTransitionDurationFromElement(i);e(i).one(l.TRANSITION_END,r).emulateTransitionEnd(s)}else r();this._hoverState=""}},n.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},n.isWithContent=function(){return Boolean(this.getTitle())},n.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},n.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},n.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},n.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=Vt(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},n.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},n._getPopperConfig=function(t){var e=this;return s(s({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),this.config.popperConfig)},n._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=s(s({},e.offsets),t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},n._getContainer=function(){return!1===this.config.container?document.body:l.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},n._getAttachment=function(t){return $t[t.toUpperCase()]},n._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=s(s({},this.config),{},{trigger:"manual",selector:""}):this._fixTitle()},n._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},n._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},n._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},n._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},n._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==Kt.indexOf(t)&&delete n[t]})),"number"==typeof(t=s(s(s({},this.constructor.Default),n),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),l.typeCheckConfig(Yt,t,this.constructor.DefaultType),t.sanitize&&(t.template=Vt(t.template,t.whiteList,t.sanitizeFn)),t},n._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},n._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(Xt);null!==n&&n.length&&t.removeClass(n.join(""))},n._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},n._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return Jt}},{key:"NAME",get:function(){return Yt}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Zt}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return Gt}}]),t}();e.fn[Yt]=te._jQueryInterface,e.fn[Yt].Constructor=te,e.fn[Yt].noConflict=function(){return e.fn[Yt]=zt,te._jQueryInterface};var ee="popover",ne=e.fn[ee],ie=new RegExp("(^|\\s)bs-popover\\S+","g"),oe=s(s({},te.Default),{},{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),re=s(s({},te.DefaultType),{},{content:"(string|element|function)"}),se={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},ae=function(t){var n,o;function r(){return t.apply(this,arguments)||this}o=t,(n=r).prototype=Object.create(o.prototype),n.prototype.constructor=n,n.__proto__=o;var s=r.prototype;return s.isWithContent=function(){return this.getTitle()||this._getContent()},s.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},s.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},s.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},s._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},s._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(ie);null!==n&&n.length>0&&t.removeClass(n.join(""))},r._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new r(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},i(r,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return oe}},{key:"NAME",get:function(){return ee}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return se}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return re}}]),r}(te);e.fn[ee]=ae._jQueryInterface,e.fn[ee].Constructor=ae,e.fn[ee].noConflict=function(){return e.fn[ee]=ne,ae._jQueryInterface};var le="scrollspy",ce=e.fn[le],ue={offset:10,method:"auto",target:""},he={offset:"number",method:"string",target:"(string|element)"},fe=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,r=l.getSelectorFromElement(t);if(r&&(n=document.querySelector(r)),n){var s=n.getBoundingClientRect();if(s.width||s.height)return[e(n)[i]().top+o,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=s(s({},ue),"object"==typeof t&&t?t:{})).target&&l.isElement(t.target)){var n=e(t.target).attr("id");n||(n=l.getUID(le),e(t.target).attr("id",n)),t.target="#"+n}return l.typeCheckConfig(le,t,he),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},n._activate=function(t){this._activeTarget=t,this._clear();var n=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),i=e([].slice.call(document.querySelectorAll(n.join(","))));i.hasClass("dropdown-item")?(i.closest(".dropdown").find(".dropdown-toggle").addClass("active"),i.addClass("active")):(i.addClass("active"),i.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),i.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),e(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},n._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.scrollspy");if(i||(i=new t(this,"object"==typeof n&&n),e(this).data("bs.scrollspy",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return ue}}]),t}();e(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),n=t.length;n--;){var i=e(t[n]);fe._jQueryInterface.call(i,i.data())}})),e.fn[le]=fe._jQueryInterface,e.fn[le].Constructor=fe,e.fn[le].noConflict=function(){return e.fn[le]=ce,fe._jQueryInterface};var de=e.fn.tab,pe=function(){function t(t){this._element=t}var n=t.prototype;return n.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass("active")||e(this._element).hasClass("disabled"))){var n,i,o=e(this._element).closest(".nav, .list-group")[0],r=l.getSelectorFromElement(this._element);if(o){var s="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";i=(i=e.makeArray(e(o).find(s)))[i.length-1]}var a=e.Event("hide.bs.tab",{relatedTarget:this._element}),c=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(a),e(this._element).trigger(c),!c.isDefaultPrevented()&&!a.isDefaultPrevented()){r&&(n=document.querySelector(r)),this._activate(this._element,o);var u=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,u):u()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,r=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],s=i&&r&&e(r).hasClass("fade"),a=function(){return o._transitionComplete(t,r,i)};if(r&&s){var c=l.getTransitionDurationFromElement(r);e(r).removeClass("show").one(l.TRANSITION_END,a).emulateTransitionEnd(c)}else a()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),l.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var r=e(t).closest(".dropdown")[0];if(r){var s=[].slice.call(r.querySelectorAll(".dropdown-toggle"));e(s).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),pe._jQueryInterface.call(e(this),"show")})),e.fn.tab=pe._jQueryInterface,e.fn.tab.Constructor=pe,e.fn.tab.noConflict=function(){return e.fn.tab=de,pe._jQueryInterface};var me=e.fn.toast,ge={animation:"boolean",autohide:"boolean",delay:"number"},ve={animation:!0,autohide:!0,delay:500},_e=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),l.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=s(s(s({},ve),e(this._element).data()),"object"==typeof t&&t?t:{}),l.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"DefaultType",get:function(){return ge}},{key:"Default",get:function(){return ve}}]),t}();e.fn.toast=_e._jQueryInterface,e.fn.toast.Constructor=_e,e.fn.toast.noConflict=function(){return e.fn.toast=me,_e._jQueryInterface},t.Alert=h,t.Button=d,t.Carousel=y,t.Collapse=S,t.Dropdown=Ft,t.Modal=qt,t.Popover=ae,t.Scrollspy=fe,t.Tab=pe,t.Toast=_e,t.Tooltip=te,t.Util=l,Object.defineProperty(t,"__esModule",{value:!0})}));
7
  //# sourceMappingURL=bootstrap.bundle.min.js.map
resources/js/bootstrap4.js CHANGED
@@ -1,6 +1,6 @@
1
  /*!
2
- * Bootstrap v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
  (function (global, factory) {
@@ -9,8 +9,8 @@
9
  (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
10
  }(this, (function (exports, $, Popper) { 'use strict';
11
 
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
14
 
15
  function _defineProperties(target, props) {
16
  for (var i = 0; i < props.length; i++) {
@@ -85,7 +85,7 @@
85
 
86
  /**
87
  * --------------------------------------------------------------------------
88
- * Bootstrap (v4.4.1): util.js
89
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
90
  * --------------------------------------------------------------------------
91
  */
@@ -100,6 +100,10 @@
100
  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
101
 
102
  function toType(obj) {
 
 
 
 
103
  return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
104
  }
105
 
@@ -112,7 +116,7 @@
112
  return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
113
  }
114
 
115
- return undefined; // eslint-disable-line no-undefined
116
  }
117
  };
118
  }
@@ -262,33 +266,25 @@
262
  */
263
 
264
  var NAME = 'alert';
265
- var VERSION = '4.4.1';
266
  var DATA_KEY = 'bs.alert';
267
  var EVENT_KEY = "." + DATA_KEY;
268
  var DATA_API_KEY = '.data-api';
269
  var JQUERY_NO_CONFLICT = $.fn[NAME];
270
- var Selector = {
271
- DISMISS: '[data-dismiss="alert"]'
272
- };
273
- var Event = {
274
- CLOSE: "close" + EVENT_KEY,
275
- CLOSED: "closed" + EVENT_KEY,
276
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
277
- };
278
- var ClassName = {
279
- ALERT: 'alert',
280
- FADE: 'fade',
281
- SHOW: 'show'
282
- };
283
  /**
284
  * ------------------------------------------------------------------------
285
  * Class Definition
286
  * ------------------------------------------------------------------------
287
  */
288
 
289
- var Alert =
290
- /*#__PURE__*/
291
- function () {
292
  function Alert(element) {
293
  this._element = element;
294
  } // Getters
@@ -328,14 +324,14 @@
328
  }
329
 
330
  if (!parent) {
331
- parent = $(element).closest("." + ClassName.ALERT)[0];
332
  }
333
 
334
  return parent;
335
  };
336
 
337
  _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
338
- var closeEvent = $.Event(Event.CLOSE);
339
  $(element).trigger(closeEvent);
340
  return closeEvent;
341
  };
@@ -343,9 +339,9 @@
343
  _proto._removeElement = function _removeElement(element) {
344
  var _this = this;
345
 
346
- $(element).removeClass(ClassName.SHOW);
347
 
348
- if (!$(element).hasClass(ClassName.FADE)) {
349
  this._destroyElement(element);
350
 
351
  return;
@@ -358,7 +354,7 @@
358
  };
359
 
360
  _proto._destroyElement = function _destroyElement(element) {
361
- $(element).detach().trigger(Event.CLOSED).remove();
362
  } // Static
363
  ;
364
 
@@ -404,7 +400,7 @@
404
  */
405
 
406
 
407
- $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
408
  /**
409
  * ------------------------------------------------------------------------
410
  * jQuery
@@ -426,39 +422,31 @@
426
  */
427
 
428
  var NAME$1 = 'button';
429
- var VERSION$1 = '4.4.1';
430
  var DATA_KEY$1 = 'bs.button';
431
  var EVENT_KEY$1 = "." + DATA_KEY$1;
432
  var DATA_API_KEY$1 = '.data-api';
433
  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
434
- var ClassName$1 = {
435
- ACTIVE: 'active',
436
- BUTTON: 'btn',
437
- FOCUS: 'focus'
438
- };
439
- var Selector$1 = {
440
- DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
441
- DATA_TOGGLES: '[data-toggle="buttons"]',
442
- DATA_TOGGLE: '[data-toggle="button"]',
443
- DATA_TOGGLES_BUTTONS: '[data-toggle="buttons"] .btn',
444
- INPUT: 'input:not([type="hidden"])',
445
- ACTIVE: '.active',
446
- BUTTON: '.btn'
447
- };
448
- var Event$1 = {
449
- CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1,
450
- FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1),
451
- LOAD_DATA_API: "load" + EVENT_KEY$1 + DATA_API_KEY$1
452
- };
453
  /**
454
  * ------------------------------------------------------------------------
455
  * Class Definition
456
  * ------------------------------------------------------------------------
457
  */
458
 
459
- var Button =
460
- /*#__PURE__*/
461
- function () {
462
  function Button(element) {
463
  this._element = element;
464
  } // Getters
@@ -470,33 +458,30 @@
470
  _proto.toggle = function toggle() {
471
  var triggerChangeEvent = true;
472
  var addAriaPressed = true;
473
- var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLES)[0];
474
 
475
  if (rootElement) {
476
- var input = this._element.querySelector(Selector$1.INPUT);
477
 
478
  if (input) {
479
  if (input.type === 'radio') {
480
- if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {
481
  triggerChangeEvent = false;
482
  } else {
483
- var activeElement = rootElement.querySelector(Selector$1.ACTIVE);
484
 
485
  if (activeElement) {
486
- $(activeElement).removeClass(ClassName$1.ACTIVE);
487
  }
488
  }
489
- } else if (input.type === 'checkbox') {
490
- if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName$1.ACTIVE)) {
491
- triggerChangeEvent = false;
492
- }
493
- } else {
494
- // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
495
- triggerChangeEvent = false;
496
  }
497
 
498
  if (triggerChangeEvent) {
499
- input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);
 
 
 
 
500
  $(input).trigger('change');
501
  }
502
 
@@ -507,11 +492,11 @@
507
 
508
  if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
509
  if (addAriaPressed) {
510
- this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));
511
  }
512
 
513
  if (triggerChangeEvent) {
514
- $(this._element).toggleClass(ClassName$1.ACTIVE);
515
  }
516
  }
517
  };
@@ -553,17 +538,18 @@
553
  */
554
 
555
 
556
- $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {
557
  var button = event.target;
 
558
 
559
- if (!$(button).hasClass(ClassName$1.BUTTON)) {
560
- button = $(button).closest(Selector$1.BUTTON)[0];
561
  }
562
 
563
  if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
564
  event.preventDefault(); // work around Firefox bug #1540995
565
  } else {
566
- var inputBtn = button.querySelector(Selector$1.INPUT);
567
 
568
  if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
569
  event.preventDefault(); // work around Firefox bug #1540995
@@ -571,38 +557,42 @@
571
  return;
572
  }
573
 
 
 
 
 
574
  Button._jQueryInterface.call($(button), 'toggle');
575
  }
576
- }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {
577
- var button = $(event.target).closest(Selector$1.BUTTON)[0];
578
- $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));
579
  });
580
- $(window).on(Event$1.LOAD_DATA_API, function () {
581
  // ensure correct active class is set to match the controls' actual values/states
582
  // find all checkboxes/readio buttons inside data-toggle groups
583
- var buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLES_BUTTONS));
584
 
585
  for (var i = 0, len = buttons.length; i < len; i++) {
586
  var button = buttons[i];
587
- var input = button.querySelector(Selector$1.INPUT);
588
 
589
  if (input.checked || input.hasAttribute('checked')) {
590
- button.classList.add(ClassName$1.ACTIVE);
591
  } else {
592
- button.classList.remove(ClassName$1.ACTIVE);
593
  }
594
  } // find all button toggles
595
 
596
 
597
- buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLE));
598
 
599
  for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
600
  var _button = buttons[_i];
601
 
602
  if (_button.getAttribute('aria-pressed') === 'true') {
603
- _button.classList.add(ClassName$1.ACTIVE);
604
  } else {
605
- _button.classList.remove(ClassName$1.ACTIVE);
606
  }
607
  }
608
  });
@@ -627,7 +617,7 @@
627
  */
628
 
629
  var NAME$2 = 'carousel';
630
- var VERSION$2 = '4.4.1';
631
  var DATA_KEY$2 = 'bs.carousel';
632
  var EVENT_KEY$2 = "." + DATA_KEY$2;
633
  var DATA_API_KEY$2 = '.data-api';
@@ -655,48 +645,39 @@
655
  wrap: 'boolean',
656
  touch: 'boolean'
657
  };
658
- var Direction = {
659
- NEXT: 'next',
660
- PREV: 'prev',
661
- LEFT: 'left',
662
- RIGHT: 'right'
663
- };
664
- var Event$2 = {
665
- SLIDE: "slide" + EVENT_KEY$2,
666
- SLID: "slid" + EVENT_KEY$2,
667
- KEYDOWN: "keydown" + EVENT_KEY$2,
668
- MOUSEENTER: "mouseenter" + EVENT_KEY$2,
669
- MOUSELEAVE: "mouseleave" + EVENT_KEY$2,
670
- TOUCHSTART: "touchstart" + EVENT_KEY$2,
671
- TOUCHMOVE: "touchmove" + EVENT_KEY$2,
672
- TOUCHEND: "touchend" + EVENT_KEY$2,
673
- POINTERDOWN: "pointerdown" + EVENT_KEY$2,
674
- POINTERUP: "pointerup" + EVENT_KEY$2,
675
- DRAG_START: "dragstart" + EVENT_KEY$2,
676
- LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2,
677
- CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2
678
- };
679
- var ClassName$2 = {
680
- CAROUSEL: 'carousel',
681
- ACTIVE: 'active',
682
- SLIDE: 'slide',
683
- RIGHT: 'carousel-item-right',
684
- LEFT: 'carousel-item-left',
685
- NEXT: 'carousel-item-next',
686
- PREV: 'carousel-item-prev',
687
- ITEM: 'carousel-item',
688
- POINTER_EVENT: 'pointer-event'
689
- };
690
- var Selector$2 = {
691
- ACTIVE: '.active',
692
- ACTIVE_ITEM: '.active.carousel-item',
693
- ITEM: '.carousel-item',
694
- ITEM_IMG: '.carousel-item img',
695
- NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
696
- INDICATORS: '.carousel-indicators',
697
- DATA_SLIDE: '[data-slide], [data-slide-to]',
698
- DATA_RIDE: '[data-ride="carousel"]'
699
- };
700
  var PointerType = {
701
  TOUCH: 'touch',
702
  PEN: 'pen'
@@ -707,9 +688,7 @@
707
  * ------------------------------------------------------------------------
708
  */
709
 
710
- var Carousel =
711
- /*#__PURE__*/
712
- function () {
713
  function Carousel(element, config) {
714
  this._items = null;
715
  this._interval = null;
@@ -721,7 +700,7 @@
721
  this.touchDeltaX = 0;
722
  this._config = this._getConfig(config);
723
  this._element = element;
724
- this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);
725
  this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
726
  this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
727
 
@@ -734,7 +713,7 @@
734
  // Public
735
  _proto.next = function next() {
736
  if (!this._isSliding) {
737
- this._slide(Direction.NEXT);
738
  }
739
  };
740
 
@@ -748,7 +727,7 @@
748
 
749
  _proto.prev = function prev() {
750
  if (!this._isSliding) {
751
- this._slide(Direction.PREV);
752
  }
753
  };
754
 
@@ -757,7 +736,7 @@
757
  this._isPaused = true;
758
  }
759
 
760
- if (this._element.querySelector(Selector$2.NEXT_PREV)) {
761
  Util.triggerTransitionEnd(this._element);
762
  this.cycle(true);
763
  }
@@ -784,7 +763,7 @@
784
  _proto.to = function to(index) {
785
  var _this = this;
786
 
787
- this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);
788
 
789
  var activeIndex = this._getItemIndex(this._activeElement);
790
 
@@ -793,7 +772,7 @@
793
  }
794
 
795
  if (this._isSliding) {
796
- $(this._element).one(Event$2.SLID, function () {
797
  return _this.to(index);
798
  });
799
  return;
@@ -805,7 +784,7 @@
805
  return;
806
  }
807
 
808
- var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;
809
 
810
  this._slide(direction, this._items[index]);
811
  };
@@ -825,7 +804,7 @@
825
  ;
826
 
827
  _proto._getConfig = function _getConfig(config) {
828
- config = _objectSpread2({}, Default, {}, config);
829
  Util.typeCheckConfig(NAME$2, config, DefaultType);
830
  return config;
831
  };
@@ -854,15 +833,15 @@
854
  var _this2 = this;
855
 
856
  if (this._config.keyboard) {
857
- $(this._element).on(Event$2.KEYDOWN, function (event) {
858
  return _this2._keydown(event);
859
  });
860
  }
861
 
862
  if (this._config.pause === 'hover') {
863
- $(this._element).on(Event$2.MOUSEENTER, function (event) {
864
  return _this2.pause(event);
865
- }).on(Event$2.MOUSELEAVE, function (event) {
866
  return _this2.cycle(event);
867
  });
868
  }
@@ -923,27 +902,27 @@
923
  }
924
  };
925
 
926
- $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {
927
  return e.preventDefault();
928
  });
929
 
930
  if (this._pointerEvent) {
931
- $(this._element).on(Event$2.POINTERDOWN, function (event) {
932
  return start(event);
933
  });
934
- $(this._element).on(Event$2.POINTERUP, function (event) {
935
  return end(event);
936
  });
937
 
938
- this._element.classList.add(ClassName$2.POINTER_EVENT);
939
  } else {
940
- $(this._element).on(Event$2.TOUCHSTART, function (event) {
941
  return start(event);
942
  });
943
- $(this._element).on(Event$2.TOUCHMOVE, function (event) {
944
  return move(event);
945
  });
946
- $(this._element).on(Event$2.TOUCHEND, function (event) {
947
  return end(event);
948
  });
949
  }
@@ -968,13 +947,13 @@
968
  };
969
 
970
  _proto._getItemIndex = function _getItemIndex(element) {
971
- this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];
972
  return this._items.indexOf(element);
973
  };
974
 
975
  _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
976
- var isNextDirection = direction === Direction.NEXT;
977
- var isPrevDirection = direction === Direction.PREV;
978
 
979
  var activeIndex = this._getItemIndex(activeElement);
980
 
@@ -985,7 +964,7 @@
985
  return activeElement;
986
  }
987
 
988
- var delta = direction === Direction.PREV ? -1 : 1;
989
  var itemIndex = (activeIndex + delta) % this._items.length;
990
  return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
991
  };
@@ -993,9 +972,9 @@
993
  _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
994
  var targetIndex = this._getItemIndex(relatedTarget);
995
 
996
- var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));
997
 
998
- var slideEvent = $.Event(Event$2.SLIDE, {
999
  relatedTarget: relatedTarget,
1000
  direction: eventDirectionName,
1001
  from: fromIndex,
@@ -1007,13 +986,13 @@
1007
 
1008
  _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
1009
  if (this._indicatorsElement) {
1010
- var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));
1011
- $(indicators).removeClass(ClassName$2.ACTIVE);
1012
 
1013
  var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
1014
 
1015
  if (nextIndicator) {
1016
- $(nextIndicator).addClass(ClassName$2.ACTIVE);
1017
  }
1018
  }
1019
  };
@@ -1021,7 +1000,7 @@
1021
  _proto._slide = function _slide(direction, element) {
1022
  var _this4 = this;
1023
 
1024
- var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);
1025
 
1026
  var activeElementIndex = this._getItemIndex(activeElement);
1027
 
@@ -1034,17 +1013,17 @@
1034
  var orderClassName;
1035
  var eventDirectionName;
1036
 
1037
- if (direction === Direction.NEXT) {
1038
- directionalClassName = ClassName$2.LEFT;
1039
- orderClassName = ClassName$2.NEXT;
1040
- eventDirectionName = Direction.LEFT;
1041
  } else {
1042
- directionalClassName = ClassName$2.RIGHT;
1043
- orderClassName = ClassName$2.PREV;
1044
- eventDirectionName = Direction.RIGHT;
1045
  }
1046
 
1047
- if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {
1048
  this._isSliding = false;
1049
  return;
1050
  }
@@ -1068,14 +1047,14 @@
1068
 
1069
  this._setActiveIndicatorElement(nextElement);
1070
 
1071
- var slidEvent = $.Event(Event$2.SLID, {
1072
  relatedTarget: nextElement,
1073
  direction: eventDirectionName,
1074
  from: activeElementIndex,
1075
  to: nextElementIndex
1076
  });
1077
 
1078
- if ($(this._element).hasClass(ClassName$2.SLIDE)) {
1079
  $(nextElement).addClass(orderClassName);
1080
  Util.reflow(nextElement);
1081
  $(activeElement).addClass(directionalClassName);
@@ -1091,16 +1070,16 @@
1091
 
1092
  var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
1093
  $(activeElement).one(Util.TRANSITION_END, function () {
1094
- $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE);
1095
- $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName);
1096
  _this4._isSliding = false;
1097
  setTimeout(function () {
1098
  return $(_this4._element).trigger(slidEvent);
1099
  }, 0);
1100
  }).emulateTransitionEnd(transitionDuration);
1101
  } else {
1102
- $(activeElement).removeClass(ClassName$2.ACTIVE);
1103
- $(nextElement).addClass(ClassName$2.ACTIVE);
1104
  this._isSliding = false;
1105
  $(this._element).trigger(slidEvent);
1106
  }
@@ -1115,10 +1094,10 @@
1115
  return this.each(function () {
1116
  var data = $(this).data(DATA_KEY$2);
1117
 
1118
- var _config = _objectSpread2({}, Default, {}, $(this).data());
1119
 
1120
  if (typeof config === 'object') {
1121
- _config = _objectSpread2({}, _config, {}, config);
1122
  }
1123
 
1124
  var action = typeof config === 'string' ? config : _config.slide;
@@ -1152,11 +1131,11 @@
1152
 
1153
  var target = $(selector)[0];
1154
 
1155
- if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {
1156
  return;
1157
  }
1158
 
1159
- var config = _objectSpread2({}, $(target).data(), {}, $(this).data());
1160
 
1161
  var slideIndex = this.getAttribute('data-slide-to');
1162
 
@@ -1194,9 +1173,9 @@
1194
  */
1195
 
1196
 
1197
- $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);
1198
- $(window).on(Event$2.LOAD_DATA_API, function () {
1199
- var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));
1200
 
1201
  for (var i = 0, len = carousels.length; i < len; i++) {
1202
  var $carousel = $(carousels[i]);
@@ -1225,7 +1204,7 @@
1225
  */
1226
 
1227
  var NAME$3 = 'collapse';
1228
- var VERSION$3 = '4.4.1';
1229
  var DATA_KEY$3 = 'bs.collapse';
1230
  var EVENT_KEY$3 = "." + DATA_KEY$3;
1231
  var DATA_API_KEY$3 = '.data-api';
@@ -1238,42 +1217,32 @@
1238
  toggle: 'boolean',
1239
  parent: '(string|element)'
1240
  };
1241
- var Event$3 = {
1242
- SHOW: "show" + EVENT_KEY$3,
1243
- SHOWN: "shown" + EVENT_KEY$3,
1244
- HIDE: "hide" + EVENT_KEY$3,
1245
- HIDDEN: "hidden" + EVENT_KEY$3,
1246
- CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3
1247
- };
1248
- var ClassName$3 = {
1249
- SHOW: 'show',
1250
- COLLAPSE: 'collapse',
1251
- COLLAPSING: 'collapsing',
1252
- COLLAPSED: 'collapsed'
1253
- };
1254
- var Dimension = {
1255
- WIDTH: 'width',
1256
- HEIGHT: 'height'
1257
- };
1258
- var Selector$3 = {
1259
- ACTIVES: '.show, .collapsing',
1260
- DATA_TOGGLE: '[data-toggle="collapse"]'
1261
- };
1262
  /**
1263
  * ------------------------------------------------------------------------
1264
  * Class Definition
1265
  * ------------------------------------------------------------------------
1266
  */
1267
 
1268
- var Collapse =
1269
- /*#__PURE__*/
1270
- function () {
1271
  function Collapse(element, config) {
1272
  this._isTransitioning = false;
1273
  this._element = element;
1274
  this._config = this._getConfig(config);
1275
  this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
1276
- var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));
1277
 
1278
  for (var i = 0, len = toggleList.length; i < len; i++) {
1279
  var elem = toggleList[i];
@@ -1305,7 +1274,7 @@
1305
 
1306
  // Public
1307
  _proto.toggle = function toggle() {
1308
- if ($(this._element).hasClass(ClassName$3.SHOW)) {
1309
  this.hide();
1310
  } else {
1311
  this.show();
@@ -1315,7 +1284,7 @@
1315
  _proto.show = function show() {
1316
  var _this = this;
1317
 
1318
- if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {
1319
  return;
1320
  }
1321
 
@@ -1323,12 +1292,12 @@
1323
  var activesData;
1324
 
1325
  if (this._parent) {
1326
- actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {
1327
  if (typeof _this._config.parent === 'string') {
1328
  return elem.getAttribute('data-parent') === _this._config.parent;
1329
  }
1330
 
1331
- return elem.classList.contains(ClassName$3.COLLAPSE);
1332
  });
1333
 
1334
  if (actives.length === 0) {
@@ -1344,7 +1313,7 @@
1344
  }
1345
  }
1346
 
1347
- var startEvent = $.Event(Event$3.SHOW);
1348
  $(this._element).trigger(startEvent);
1349
 
1350
  if (startEvent.isDefaultPrevented()) {
@@ -1361,22 +1330,22 @@
1361
 
1362
  var dimension = this._getDimension();
1363
 
1364
- $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);
1365
  this._element.style[dimension] = 0;
1366
 
1367
  if (this._triggerArray.length) {
1368
- $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);
1369
  }
1370
 
1371
  this.setTransitioning(true);
1372
 
1373
  var complete = function complete() {
1374
- $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);
1375
  _this._element.style[dimension] = '';
1376
 
1377
  _this.setTransitioning(false);
1378
 
1379
- $(_this._element).trigger(Event$3.SHOWN);
1380
  };
1381
 
1382
  var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
@@ -1389,11 +1358,11 @@
1389
  _proto.hide = function hide() {
1390
  var _this2 = this;
1391
 
1392
- if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {
1393
  return;
1394
  }
1395
 
1396
- var startEvent = $.Event(Event$3.HIDE);
1397
  $(this._element).trigger(startEvent);
1398
 
1399
  if (startEvent.isDefaultPrevented()) {
@@ -1404,7 +1373,7 @@
1404
 
1405
  this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
1406
  Util.reflow(this._element);
1407
- $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);
1408
  var triggerArrayLength = this._triggerArray.length;
1409
 
1410
  if (triggerArrayLength > 0) {
@@ -1415,8 +1384,8 @@
1415
  if (selector !== null) {
1416
  var $elem = $([].slice.call(document.querySelectorAll(selector)));
1417
 
1418
- if (!$elem.hasClass(ClassName$3.SHOW)) {
1419
- $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);
1420
  }
1421
  }
1422
  }
@@ -1427,7 +1396,7 @@
1427
  var complete = function complete() {
1428
  _this2.setTransitioning(false);
1429
 
1430
- $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);
1431
  };
1432
 
1433
  this._element.style[dimension] = '';
@@ -1450,7 +1419,7 @@
1450
  ;
1451
 
1452
  _proto._getConfig = function _getConfig(config) {
1453
- config = _objectSpread2({}, Default$1, {}, config);
1454
  config.toggle = Boolean(config.toggle); // Coerce string values
1455
 
1456
  Util.typeCheckConfig(NAME$3, config, DefaultType$1);
@@ -1458,8 +1427,8 @@
1458
  };
1459
 
1460
  _proto._getDimension = function _getDimension() {
1461
- var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
1462
- return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
1463
  };
1464
 
1465
  _proto._getParent = function _getParent() {
@@ -1486,10 +1455,10 @@
1486
  };
1487
 
1488
  _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
1489
- var isOpen = $(element).hasClass(ClassName$3.SHOW);
1490
 
1491
  if (triggerArray.length) {
1492
- $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1493
  }
1494
  } // Static
1495
  ;
@@ -1504,9 +1473,9 @@
1504
  var $this = $(this);
1505
  var data = $this.data(DATA_KEY$3);
1506
 
1507
- var _config = _objectSpread2({}, Default$1, {}, $this.data(), {}, typeof config === 'object' && config ? config : {});
1508
 
1509
- if (!data && _config.toggle && /show|hide/.test(config)) {
1510
  _config.toggle = false;
1511
  }
1512
 
@@ -1546,7 +1515,7 @@
1546
  */
1547
 
1548
 
1549
- $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {
1550
  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
1551
  if (event.currentTarget.tagName === 'A') {
1552
  event.preventDefault();
@@ -1584,7 +1553,7 @@
1584
  */
1585
 
1586
  var NAME$4 = 'dropdown';
1587
- var VERSION$4 = '4.4.1';
1588
  var DATA_KEY$4 = 'bs.dropdown';
1589
  var EVENT_KEY$4 = "." + DATA_KEY$4;
1590
  var DATA_API_KEY$4 = '.data-api';
@@ -1602,43 +1571,32 @@
1602
  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
1603
 
1604
  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
1605
- var Event$4 = {
1606
- HIDE: "hide" + EVENT_KEY$4,
1607
- HIDDEN: "hidden" + EVENT_KEY$4,
1608
- SHOW: "show" + EVENT_KEY$4,
1609
- SHOWN: "shown" + EVENT_KEY$4,
1610
- CLICK: "click" + EVENT_KEY$4,
1611
- CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4,
1612
- KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4,
1613
- KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4
1614
- };
1615
- var ClassName$4 = {
1616
- DISABLED: 'disabled',
1617
- SHOW: 'show',
1618
- DROPUP: 'dropup',
1619
- DROPRIGHT: 'dropright',
1620
- DROPLEFT: 'dropleft',
1621
- MENURIGHT: 'dropdown-menu-right',
1622
- MENULEFT: 'dropdown-menu-left',
1623
- POSITION_STATIC: 'position-static'
1624
- };
1625
- var Selector$4 = {
1626
- DATA_TOGGLE: '[data-toggle="dropdown"]',
1627
- FORM_CHILD: '.dropdown form',
1628
- MENU: '.dropdown-menu',
1629
- NAVBAR_NAV: '.navbar-nav',
1630
- VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
1631
- };
1632
- var AttachmentMap = {
1633
- TOP: 'top-start',
1634
- TOPEND: 'top-end',
1635
- BOTTOM: 'bottom-start',
1636
- BOTTOMEND: 'bottom-end',
1637
- RIGHT: 'right-start',
1638
- RIGHTEND: 'right-end',
1639
- LEFT: 'left-start',
1640
- LEFTEND: 'left-end'
1641
- };
1642
  var Default$2 = {
1643
  offset: 0,
1644
  flip: true,
@@ -1661,9 +1619,7 @@
1661
  * ------------------------------------------------------------------------
1662
  */
1663
 
1664
- var Dropdown =
1665
- /*#__PURE__*/
1666
- function () {
1667
  function Dropdown(element, config) {
1668
  this._element = element;
1669
  this._popper = null;
@@ -1679,11 +1635,11 @@
1679
 
1680
  // Public
1681
  _proto.toggle = function toggle() {
1682
- if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {
1683
  return;
1684
  }
1685
 
1686
- var isActive = $(this._menu).hasClass(ClassName$4.SHOW);
1687
 
1688
  Dropdown._clearMenus();
1689
 
@@ -1699,14 +1655,14 @@
1699
  usePopper = false;
1700
  }
1701
 
1702
- if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {
1703
  return;
1704
  }
1705
 
1706
  var relatedTarget = {
1707
  relatedTarget: this._element
1708
  };
1709
- var showEvent = $.Event(Event$4.SHOW, relatedTarget);
1710
 
1711
  var parent = Dropdown._getParentFromElement(this._element);
1712
 
@@ -1742,7 +1698,7 @@
1742
 
1743
 
1744
  if (this._config.boundary !== 'scrollParent') {
1745
- $(parent).addClass(ClassName$4.POSITION_STATIC);
1746
  }
1747
 
1748
  this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
@@ -1752,7 +1708,7 @@
1752
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
1753
 
1754
 
1755
- if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {
1756
  $(document.body).children().on('mouseover', null, $.noop);
1757
  }
1758
 
@@ -1760,19 +1716,19 @@
1760
 
1761
  this._element.setAttribute('aria-expanded', true);
1762
 
1763
- $(this._menu).toggleClass(ClassName$4.SHOW);
1764
- $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));
1765
  };
1766
 
1767
  _proto.hide = function hide() {
1768
- if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {
1769
  return;
1770
  }
1771
 
1772
  var relatedTarget = {
1773
  relatedTarget: this._element
1774
  };
1775
- var hideEvent = $.Event(Event$4.HIDE, relatedTarget);
1776
 
1777
  var parent = Dropdown._getParentFromElement(this._element);
1778
 
@@ -1786,8 +1742,8 @@
1786
  this._popper.destroy();
1787
  }
1788
 
1789
- $(this._menu).toggleClass(ClassName$4.SHOW);
1790
- $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));
1791
  };
1792
 
1793
  _proto.dispose = function dispose() {
@@ -1815,7 +1771,7 @@
1815
  _proto._addEventListeners = function _addEventListeners() {
1816
  var _this = this;
1817
 
1818
- $(this._element).on(Event$4.CLICK, function (event) {
1819
  event.preventDefault();
1820
  event.stopPropagation();
1821
 
@@ -1824,7 +1780,7 @@
1824
  };
1825
 
1826
  _proto._getConfig = function _getConfig(config) {
1827
- config = _objectSpread2({}, this.constructor.Default, {}, $(this._element).data(), {}, config);
1828
  Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
1829
  return config;
1830
  };
@@ -1834,7 +1790,7 @@
1834
  var parent = Dropdown._getParentFromElement(this._element);
1835
 
1836
  if (parent) {
1837
- this._menu = parent.querySelector(Selector$4.MENU);
1838
  }
1839
  }
1840
 
@@ -1843,20 +1799,16 @@
1843
 
1844
  _proto._getPlacement = function _getPlacement() {
1845
  var $parentDropdown = $(this._element.parentNode);
1846
- var placement = AttachmentMap.BOTTOM; // Handle dropup
1847
-
1848
- if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {
1849
- placement = AttachmentMap.TOP;
1850
 
1851
- if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {
1852
- placement = AttachmentMap.TOPEND;
1853
- }
1854
- } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {
1855
- placement = AttachmentMap.RIGHT;
1856
- } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {
1857
- placement = AttachmentMap.LEFT;
1858
- } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {
1859
- placement = AttachmentMap.BOTTOMEND;
1860
  }
1861
 
1862
  return placement;
@@ -1873,7 +1825,7 @@
1873
 
1874
  if (typeof this._config.offset === 'function') {
1875
  offset.fn = function (data) {
1876
- data.offsets = _objectSpread2({}, data.offsets, {}, _this2._config.offset(data.offsets, _this2._element) || {});
1877
  return data;
1878
  };
1879
  } else {
@@ -1903,7 +1855,7 @@
1903
  };
1904
  }
1905
 
1906
- return _objectSpread2({}, popperConfig, {}, this._config.popperConfig);
1907
  } // Static
1908
  ;
1909
 
@@ -1933,7 +1885,7 @@
1933
  return;
1934
  }
1935
 
1936
- var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));
1937
 
1938
  for (var i = 0, len = toggles.length; i < len; i++) {
1939
  var parent = Dropdown._getParentFromElement(toggles[i]);
@@ -1953,7 +1905,7 @@
1953
 
1954
  var dropdownMenu = context._menu;
1955
 
1956
- if (!$(parent).hasClass(ClassName$4.SHOW)) {
1957
  continue;
1958
  }
1959
 
@@ -1961,7 +1913,7 @@
1961
  continue;
1962
  }
1963
 
1964
- var hideEvent = $.Event(Event$4.HIDE, relatedTarget);
1965
  $(parent).trigger(hideEvent);
1966
 
1967
  if (hideEvent.isDefaultPrevented()) {
@@ -1980,8 +1932,8 @@
1980
  context._popper.destroy();
1981
  }
1982
 
1983
- $(dropdownMenu).removeClass(ClassName$4.SHOW);
1984
- $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));
1985
  }
1986
  };
1987
 
@@ -2005,36 +1957,35 @@
2005
  // - If key is other than escape
2006
  // - If key is not up or down => not a dropdown command
2007
  // - If trigger inside the menu => not a dropdown command
2008
- if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
2009
  return;
2010
  }
2011
 
2012
- event.preventDefault();
2013
- event.stopPropagation();
2014
-
2015
- if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {
2016
  return;
2017
  }
2018
 
2019
  var parent = Dropdown._getParentFromElement(this);
2020
 
2021
- var isActive = $(parent).hasClass(ClassName$4.SHOW);
2022
 
2023
  if (!isActive && event.which === ESCAPE_KEYCODE) {
2024
  return;
2025
  }
2026
 
 
 
 
2027
  if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
2028
  if (event.which === ESCAPE_KEYCODE) {
2029
- var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);
2030
- $(toggle).trigger('focus');
2031
  }
2032
 
2033
  $(this).trigger('click');
2034
  return;
2035
  }
2036
 
2037
- var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)).filter(function (item) {
2038
  return $(item).is(':visible');
2039
  });
2040
 
@@ -2087,12 +2038,12 @@
2087
  */
2088
 
2089
 
2090
- $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {
2091
  event.preventDefault();
2092
  event.stopPropagation();
2093
 
2094
  Dropdown._jQueryInterface.call($(this), 'toggle');
2095
- }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {
2096
  e.stopPropagation();
2097
  });
2098
  /**
@@ -2116,7 +2067,7 @@
2116
  */
2117
 
2118
  var NAME$5 = 'modal';
2119
- var VERSION$5 = '4.4.1';
2120
  var DATA_KEY$5 = 'bs.modal';
2121
  var EVENT_KEY$5 = "." + DATA_KEY$5;
2122
  var DATA_API_KEY$5 = '.data-api';
@@ -2135,50 +2086,42 @@
2135
  focus: 'boolean',
2136
  show: 'boolean'
2137
  };
2138
- var Event$5 = {
2139
- HIDE: "hide" + EVENT_KEY$5,
2140
- HIDE_PREVENTED: "hidePrevented" + EVENT_KEY$5,
2141
- HIDDEN: "hidden" + EVENT_KEY$5,
2142
- SHOW: "show" + EVENT_KEY$5,
2143
- SHOWN: "shown" + EVENT_KEY$5,
2144
- FOCUSIN: "focusin" + EVENT_KEY$5,
2145
- RESIZE: "resize" + EVENT_KEY$5,
2146
- CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5,
2147
- KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5,
2148
- MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5,
2149
- MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5,
2150
- CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
2151
- };
2152
- var ClassName$5 = {
2153
- SCROLLABLE: 'modal-dialog-scrollable',
2154
- SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
2155
- BACKDROP: 'modal-backdrop',
2156
- OPEN: 'modal-open',
2157
- FADE: 'fade',
2158
- SHOW: 'show',
2159
- STATIC: 'modal-static'
2160
- };
2161
- var Selector$5 = {
2162
- DIALOG: '.modal-dialog',
2163
- MODAL_BODY: '.modal-body',
2164
- DATA_TOGGLE: '[data-toggle="modal"]',
2165
- DATA_DISMISS: '[data-dismiss="modal"]',
2166
- FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
2167
- STICKY_CONTENT: '.sticky-top'
2168
- };
2169
  /**
2170
  * ------------------------------------------------------------------------
2171
  * Class Definition
2172
  * ------------------------------------------------------------------------
2173
  */
2174
 
2175
- var Modal =
2176
- /*#__PURE__*/
2177
- function () {
2178
  function Modal(element, config) {
2179
  this._config = this._getConfig(config);
2180
  this._element = element;
2181
- this._dialog = element.querySelector(Selector$5.DIALOG);
2182
  this._backdrop = null;
2183
  this._isShown = false;
2184
  this._isBodyOverflowing = false;
@@ -2202,11 +2145,11 @@
2202
  return;
2203
  }
2204
 
2205
- if ($(this._element).hasClass(ClassName$5.FADE)) {
2206
  this._isTransitioning = true;
2207
  }
2208
 
2209
- var showEvent = $.Event(Event$5.SHOW, {
2210
  relatedTarget: relatedTarget
2211
  });
2212
  $(this._element).trigger(showEvent);
@@ -2227,11 +2170,11 @@
2227
 
2228
  this._setResizeEvent();
2229
 
2230
- $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {
2231
  return _this.hide(event);
2232
  });
2233
- $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {
2234
- $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {
2235
  if ($(event.target).is(_this._element)) {
2236
  _this._ignoreBackdropClick = true;
2237
  }
@@ -2254,7 +2197,7 @@
2254
  return;
2255
  }
2256
 
2257
- var hideEvent = $.Event(Event$5.HIDE);
2258
  $(this._element).trigger(hideEvent);
2259
 
2260
  if (!this._isShown || hideEvent.isDefaultPrevented()) {
@@ -2262,7 +2205,7 @@
2262
  }
2263
 
2264
  this._isShown = false;
2265
- var transition = $(this._element).hasClass(ClassName$5.FADE);
2266
 
2267
  if (transition) {
2268
  this._isTransitioning = true;
@@ -2272,10 +2215,10 @@
2272
 
2273
  this._setResizeEvent();
2274
 
2275
- $(document).off(Event$5.FOCUSIN);
2276
- $(this._element).removeClass(ClassName$5.SHOW);
2277
- $(this._element).off(Event$5.CLICK_DISMISS);
2278
- $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);
2279
 
2280
  if (transition) {
2281
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
@@ -2292,12 +2235,12 @@
2292
  return $(htmlElement).off(EVENT_KEY$5);
2293
  });
2294
  /**
2295
- * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
2296
  * Do not move `document` in `htmlElements` array
2297
- * It will remove `Event.CLICK_DATA_API` event that should remain
2298
  */
2299
 
2300
- $(document).off(Event$5.FOCUSIN);
2301
  $.removeData(this._element, DATA_KEY$5);
2302
  this._config = null;
2303
  this._element = null;
@@ -2316,7 +2259,7 @@
2316
  ;
2317
 
2318
  _proto._getConfig = function _getConfig(config) {
2319
- config = _objectSpread2({}, Default$3, {}, config);
2320
  Util.typeCheckConfig(NAME$5, config, DefaultType$3);
2321
  return config;
2322
  };
@@ -2325,18 +2268,18 @@
2325
  var _this3 = this;
2326
 
2327
  if (this._config.backdrop === 'static') {
2328
- var hideEventPrevented = $.Event(Event$5.HIDE_PREVENTED);
2329
  $(this._element).trigger(hideEventPrevented);
2330
 
2331
  if (hideEventPrevented.defaultPrevented) {
2332
  return;
2333
  }
2334
 
2335
- this._element.classList.add(ClassName$5.STATIC);
2336
 
2337
  var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);
2338
  $(this._element).one(Util.TRANSITION_END, function () {
2339
- _this3._element.classList.remove(ClassName$5.STATIC);
2340
  }).emulateTransitionEnd(modalTransitionDuration);
2341
 
2342
  this._element.focus();
@@ -2348,8 +2291,8 @@
2348
  _proto._showElement = function _showElement(relatedTarget) {
2349
  var _this4 = this;
2350
 
2351
- var transition = $(this._element).hasClass(ClassName$5.FADE);
2352
- var modalBody = this._dialog ? this._dialog.querySelector(Selector$5.MODAL_BODY) : null;
2353
 
2354
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
2355
  // Don't move modal's DOM position
@@ -2362,7 +2305,7 @@
2362
 
2363
  this._element.setAttribute('aria-modal', true);
2364
 
2365
- if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE) && modalBody) {
2366
  modalBody.scrollTop = 0;
2367
  } else {
2368
  this._element.scrollTop = 0;
@@ -2372,13 +2315,13 @@
2372
  Util.reflow(this._element);
2373
  }
2374
 
2375
- $(this._element).addClass(ClassName$5.SHOW);
2376
 
2377
  if (this._config.focus) {
2378
  this._enforceFocus();
2379
  }
2380
 
2381
- var shownEvent = $.Event(Event$5.SHOWN, {
2382
  relatedTarget: relatedTarget
2383
  });
2384
 
@@ -2402,8 +2345,8 @@
2402
  _proto._enforceFocus = function _enforceFocus() {
2403
  var _this5 = this;
2404
 
2405
- $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop
2406
- .on(Event$5.FOCUSIN, function (event) {
2407
  if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {
2408
  _this5._element.focus();
2409
  }
@@ -2413,14 +2356,18 @@
2413
  _proto._setEscapeEvent = function _setEscapeEvent() {
2414
  var _this6 = this;
2415
 
2416
- if (this._isShown && this._config.keyboard) {
2417
- $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {
2418
- if (event.which === ESCAPE_KEYCODE$1) {
 
 
 
 
2419
  _this6._triggerBackdropTransition();
2420
  }
2421
  });
2422
  } else if (!this._isShown) {
2423
- $(this._element).off(Event$5.KEYDOWN_DISMISS);
2424
  }
2425
  };
2426
 
@@ -2428,11 +2375,11 @@
2428
  var _this7 = this;
2429
 
2430
  if (this._isShown) {
2431
- $(window).on(Event$5.RESIZE, function (event) {
2432
  return _this7.handleUpdate(event);
2433
  });
2434
  } else {
2435
- $(window).off(Event$5.RESIZE);
2436
  }
2437
  };
2438
 
@@ -2448,13 +2395,13 @@
2448
  this._isTransitioning = false;
2449
 
2450
  this._showBackdrop(function () {
2451
- $(document.body).removeClass(ClassName$5.OPEN);
2452
 
2453
  _this8._resetAdjustments();
2454
 
2455
  _this8._resetScrollbar();
2456
 
2457
- $(_this8._element).trigger(Event$5.HIDDEN);
2458
  });
2459
  };
2460
 
@@ -2468,18 +2415,18 @@
2468
  _proto._showBackdrop = function _showBackdrop(callback) {
2469
  var _this9 = this;
2470
 
2471
- var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';
2472
 
2473
  if (this._isShown && this._config.backdrop) {
2474
  this._backdrop = document.createElement('div');
2475
- this._backdrop.className = ClassName$5.BACKDROP;
2476
 
2477
  if (animate) {
2478
  this._backdrop.classList.add(animate);
2479
  }
2480
 
2481
  $(this._backdrop).appendTo(document.body);
2482
- $(this._element).on(Event$5.CLICK_DISMISS, function (event) {
2483
  if (_this9._ignoreBackdropClick) {
2484
  _this9._ignoreBackdropClick = false;
2485
  return;
@@ -2496,7 +2443,7 @@
2496
  Util.reflow(this._backdrop);
2497
  }
2498
 
2499
- $(this._backdrop).addClass(ClassName$5.SHOW);
2500
 
2501
  if (!callback) {
2502
  return;
@@ -2510,7 +2457,7 @@
2510
  var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
2511
  $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
2512
  } else if (!this._isShown && this._backdrop) {
2513
- $(this._backdrop).removeClass(ClassName$5.SHOW);
2514
 
2515
  var callbackRemove = function callbackRemove() {
2516
  _this9._removeBackdrop();
@@ -2520,7 +2467,7 @@
2520
  }
2521
  };
2522
 
2523
- if ($(this._element).hasClass(ClassName$5.FADE)) {
2524
  var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
2525
 
2526
  $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
@@ -2555,7 +2502,7 @@
2555
 
2556
  _proto._checkScrollbar = function _checkScrollbar() {
2557
  var rect = document.body.getBoundingClientRect();
2558
- this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
2559
  this._scrollbarWidth = this._getScrollbarWidth();
2560
  };
2561
 
@@ -2565,8 +2512,8 @@
2565
  if (this._isBodyOverflowing) {
2566
  // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
2567
  // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
2568
- var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));
2569
- var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding
2570
 
2571
  $(fixedContent).each(function (index, element) {
2572
  var actualPadding = element.style.paddingRight;
@@ -2585,19 +2532,19 @@
2585
  $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
2586
  }
2587
 
2588
- $(document.body).addClass(ClassName$5.OPEN);
2589
  };
2590
 
2591
  _proto._resetScrollbar = function _resetScrollbar() {
2592
  // Restore fixed content padding
2593
- var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));
2594
  $(fixedContent).each(function (index, element) {
2595
  var padding = $(element).data('padding-right');
2596
  $(element).removeData('padding-right');
2597
  element.style.paddingRight = padding ? padding : '';
2598
  }); // Restore sticky content
2599
 
2600
- var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT));
2601
  $(elements).each(function (index, element) {
2602
  var margin = $(element).data('margin-right');
2603
 
@@ -2614,7 +2561,7 @@
2614
  _proto._getScrollbarWidth = function _getScrollbarWidth() {
2615
  // thx d.walsh
2616
  var scrollDiv = document.createElement('div');
2617
- scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;
2618
  document.body.appendChild(scrollDiv);
2619
  var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
2620
  document.body.removeChild(scrollDiv);
@@ -2626,7 +2573,7 @@
2626
  return this.each(function () {
2627
  var data = $(this).data(DATA_KEY$5);
2628
 
2629
- var _config = _objectSpread2({}, Default$3, {}, $(this).data(), {}, typeof config === 'object' && config ? config : {});
2630
 
2631
  if (!data) {
2632
  data = new Modal(this, _config);
@@ -2666,7 +2613,7 @@
2666
  */
2667
 
2668
 
2669
- $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {
2670
  var _this11 = this;
2671
 
2672
  var target;
@@ -2676,19 +2623,19 @@
2676
  target = document.querySelector(selector);
2677
  }
2678
 
2679
- var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2({}, $(target).data(), {}, $(this).data());
2680
 
2681
  if (this.tagName === 'A' || this.tagName === 'AREA') {
2682
  event.preventDefault();
2683
  }
2684
 
2685
- var $target = $(target).one(Event$5.SHOW, function (showEvent) {
2686
  if (showEvent.isDefaultPrevented()) {
2687
  // Only register focus restorer if modal will actually get shown
2688
  return;
2689
  }
2690
 
2691
- $target.one(Event$5.HIDDEN, function () {
2692
  if ($(_this11).is(':visible')) {
2693
  _this11.focus();
2694
  }
@@ -2713,7 +2660,7 @@
2713
 
2714
  /**
2715
  * --------------------------------------------------------------------------
2716
- * Bootstrap (v4.4.1): tools/sanitizer.js
2717
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2718
  * --------------------------------------------------------------------------
2719
  */
@@ -2738,7 +2685,7 @@
2738
  h5: [],
2739
  h6: [],
2740
  i: [],
2741
- img: ['src', 'alt', 'title', 'width', 'height'],
2742
  li: [],
2743
  ol: [],
2744
  p: [],
@@ -2758,14 +2705,14 @@
2758
  * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
2759
  */
2760
 
2761
- var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
2762
  /**
2763
  * A pattern that matches safe data URLs. Only matches image, video and audio types.
2764
  *
2765
  * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
2766
  */
2767
 
2768
- var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
2769
 
2770
  function allowedAttribute(attr, allowedAttributeList) {
2771
  var attrName = attr.nodeName.toLowerCase();
@@ -2782,7 +2729,7 @@
2782
  return attrRegex instanceof RegExp;
2783
  }); // Check if a regular expression validates the attribute.
2784
 
2785
- for (var i = 0, l = regExp.length; i < l; i++) {
2786
  if (attrName.match(regExp[i])) {
2787
  return true;
2788
  }
@@ -2839,7 +2786,7 @@
2839
  */
2840
 
2841
  var NAME$6 = 'tooltip';
2842
- var VERSION$6 = '4.4.1';
2843
  var DATA_KEY$6 = 'bs.tooltip';
2844
  var EVENT_KEY$6 = "." + DATA_KEY$6;
2845
  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
@@ -2864,7 +2811,7 @@
2864
  whiteList: 'object',
2865
  popperConfig: '(null|object)'
2866
  };
2867
- var AttachmentMap$1 = {
2868
  AUTO: 'auto',
2869
  TOP: 'top',
2870
  RIGHT: 'right',
@@ -2889,11 +2836,9 @@
2889
  whiteList: DefaultWhitelist,
2890
  popperConfig: null
2891
  };
2892
- var HoverState = {
2893
- SHOW: 'show',
2894
- OUT: 'out'
2895
- };
2896
- var Event$6 = {
2897
  HIDE: "hide" + EVENT_KEY$6,
2898
  HIDDEN: "hidden" + EVENT_KEY$6,
2899
  SHOW: "show" + EVENT_KEY$6,
@@ -2905,30 +2850,21 @@
2905
  MOUSEENTER: "mouseenter" + EVENT_KEY$6,
2906
  MOUSELEAVE: "mouseleave" + EVENT_KEY$6
2907
  };
2908
- var ClassName$6 = {
2909
- FADE: 'fade',
2910
- SHOW: 'show'
2911
- };
2912
- var Selector$6 = {
2913
- TOOLTIP: '.tooltip',
2914
- TOOLTIP_INNER: '.tooltip-inner',
2915
- ARROW: '.arrow'
2916
- };
2917
- var Trigger = {
2918
- HOVER: 'hover',
2919
- FOCUS: 'focus',
2920
- CLICK: 'click',
2921
- MANUAL: 'manual'
2922
- };
2923
  /**
2924
  * ------------------------------------------------------------------------
2925
  * Class Definition
2926
  * ------------------------------------------------------------------------
2927
  */
2928
 
2929
- var Tooltip =
2930
- /*#__PURE__*/
2931
- function () {
2932
  function Tooltip(element, config) {
2933
  if (typeof Popper === 'undefined') {
2934
  throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
@@ -2986,7 +2922,7 @@
2986
  context._leave(null, context);
2987
  }
2988
  } else {
2989
- if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {
2990
  this._leave(null, this);
2991
 
2992
  return;
@@ -3046,7 +2982,7 @@
3046
  this.setContent();
3047
 
3048
  if (this.config.animation) {
3049
- $(tip).addClass(ClassName$6.FADE);
3050
  }
3051
 
3052
  var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
@@ -3065,7 +3001,7 @@
3065
 
3066
  $(this.element).trigger(this.constructor.Event.INSERTED);
3067
  this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));
3068
- $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra
3069
  // empty mouseover listeners to the body's immediate children;
3070
  // only needed because of broken event delegation on iOS
3071
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
@@ -3083,12 +3019,12 @@
3083
  _this._hoverState = null;
3084
  $(_this.element).trigger(_this.constructor.Event.SHOWN);
3085
 
3086
- if (prevHoverState === HoverState.OUT) {
3087
  _this._leave(null, _this);
3088
  }
3089
  };
3090
 
3091
- if ($(this.tip).hasClass(ClassName$6.FADE)) {
3092
  var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
3093
  $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
3094
  } else {
@@ -3104,7 +3040,7 @@
3104
  var hideEvent = $.Event(this.constructor.Event.HIDE);
3105
 
3106
  var complete = function complete() {
3107
- if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
3108
  tip.parentNode.removeChild(tip);
3109
  }
3110
 
@@ -3129,18 +3065,18 @@
3129
  return;
3130
  }
3131
 
3132
- $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra
3133
  // empty mouseover listeners we added for iOS support
3134
 
3135
  if ('ontouchstart' in document.documentElement) {
3136
  $(document.body).children().off('mouseover', null, $.noop);
3137
  }
3138
 
3139
- this._activeTrigger[Trigger.CLICK] = false;
3140
- this._activeTrigger[Trigger.FOCUS] = false;
3141
- this._activeTrigger[Trigger.HOVER] = false;
3142
 
3143
- if ($(this.tip).hasClass(ClassName$6.FADE)) {
3144
  var transitionDuration = Util.getTransitionDurationFromElement(tip);
3145
  $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
3146
  } else {
@@ -3172,8 +3108,8 @@
3172
 
3173
  _proto.setContent = function setContent() {
3174
  var tip = this.getTipElement();
3175
- this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());
3176
- $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW);
3177
  };
3178
 
3179
  _proto.setElementContent = function setElementContent($element, content) {
@@ -3223,7 +3159,7 @@
3223
  behavior: this.config.fallbackPlacement
3224
  },
3225
  arrow: {
3226
- element: Selector$6.ARROW
3227
  },
3228
  preventOverflow: {
3229
  boundariesElement: this.config.boundary
@@ -3238,7 +3174,7 @@
3238
  return _this3._handlePopperPlacementChange(data);
3239
  }
3240
  };
3241
- return _objectSpread2({}, defaultBsConfig, {}, this.config.popperConfig);
3242
  };
3243
 
3244
  _proto._getOffset = function _getOffset() {
@@ -3248,7 +3184,7 @@
3248
 
3249
  if (typeof this.config.offset === 'function') {
3250
  offset.fn = function (data) {
3251
- data.offsets = _objectSpread2({}, data.offsets, {}, _this4.config.offset(data.offsets, _this4.element) || {});
3252
  return data;
3253
  };
3254
  } else {
@@ -3271,7 +3207,7 @@
3271
  };
3272
 
3273
  _proto._getAttachment = function _getAttachment(placement) {
3274
- return AttachmentMap$1[placement.toUpperCase()];
3275
  };
3276
 
3277
  _proto._setListeners = function _setListeners() {
@@ -3283,9 +3219,9 @@
3283
  $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
3284
  return _this5.toggle(event);
3285
  });
3286
- } else if (trigger !== Trigger.MANUAL) {
3287
- var eventIn = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
3288
- var eventOut = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
3289
  $(_this5.element).on(eventIn, _this5.config.selector, function (event) {
3290
  return _this5._enter(event);
3291
  }).on(eventOut, _this5.config.selector, function (event) {
@@ -3303,7 +3239,7 @@
3303
  $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
3304
 
3305
  if (this.config.selector) {
3306
- this.config = _objectSpread2({}, this.config, {
3307
  trigger: 'manual',
3308
  selector: ''
3309
  });
@@ -3331,16 +3267,16 @@
3331
  }
3332
 
3333
  if (event) {
3334
- context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
3335
  }
3336
 
3337
- if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {
3338
- context._hoverState = HoverState.SHOW;
3339
  return;
3340
  }
3341
 
3342
  clearTimeout(context._timeout);
3343
- context._hoverState = HoverState.SHOW;
3344
 
3345
  if (!context.config.delay || !context.config.delay.show) {
3346
  context.show();
@@ -3348,7 +3284,7 @@
3348
  }
3349
 
3350
  context._timeout = setTimeout(function () {
3351
- if (context._hoverState === HoverState.SHOW) {
3352
  context.show();
3353
  }
3354
  }, context.config.delay.show);
@@ -3364,7 +3300,7 @@
3364
  }
3365
 
3366
  if (event) {
3367
- context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
3368
  }
3369
 
3370
  if (context._isWithActiveTrigger()) {
@@ -3372,7 +3308,7 @@
3372
  }
3373
 
3374
  clearTimeout(context._timeout);
3375
- context._hoverState = HoverState.OUT;
3376
 
3377
  if (!context.config.delay || !context.config.delay.hide) {
3378
  context.hide();
@@ -3380,7 +3316,7 @@
3380
  }
3381
 
3382
  context._timeout = setTimeout(function () {
3383
- if (context._hoverState === HoverState.OUT) {
3384
  context.hide();
3385
  }
3386
  }, context.config.delay.hide);
@@ -3403,7 +3339,7 @@
3403
  delete dataAttributes[dataAttr];
3404
  }
3405
  });
3406
- config = _objectSpread2({}, this.constructor.Default, {}, dataAttributes, {}, typeof config === 'object' && config ? config : {});
3407
 
3408
  if (typeof config.delay === 'number') {
3409
  config.delay = {
@@ -3453,8 +3389,7 @@
3453
  };
3454
 
3455
  _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
3456
- var popperInstance = popperData.instance;
3457
- this.tip = popperInstance.popper;
3458
 
3459
  this._cleanTipClass();
3460
 
@@ -3469,7 +3404,7 @@
3469
  return;
3470
  }
3471
 
3472
- $(tip).removeClass(ClassName$6.FADE);
3473
  this.config.animation = false;
3474
  this.hide();
3475
  this.show();
@@ -3525,7 +3460,7 @@
3525
  }, {
3526
  key: "Event",
3527
  get: function get() {
3528
- return Event$6;
3529
  }
3530
  }, {
3531
  key: "EVENT_KEY",
@@ -3563,33 +3498,29 @@
3563
  */
3564
 
3565
  var NAME$7 = 'popover';
3566
- var VERSION$7 = '4.4.1';
3567
  var DATA_KEY$7 = 'bs.popover';
3568
  var EVENT_KEY$7 = "." + DATA_KEY$7;
3569
  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
3570
  var CLASS_PREFIX$1 = 'bs-popover';
3571
  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
3572
 
3573
- var Default$5 = _objectSpread2({}, Tooltip.Default, {
3574
  placement: 'right',
3575
  trigger: 'click',
3576
  content: '',
3577
  template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
3578
  });
3579
 
3580
- var DefaultType$5 = _objectSpread2({}, Tooltip.DefaultType, {
3581
  content: '(string|element|function)'
3582
  });
3583
 
3584
- var ClassName$7 = {
3585
- FADE: 'fade',
3586
- SHOW: 'show'
3587
- };
3588
- var Selector$7 = {
3589
- TITLE: '.popover-header',
3590
- CONTENT: '.popover-body'
3591
- };
3592
- var Event$7 = {
3593
  HIDE: "hide" + EVENT_KEY$7,
3594
  HIDDEN: "hidden" + EVENT_KEY$7,
3595
  SHOW: "show" + EVENT_KEY$7,
@@ -3607,9 +3538,7 @@
3607
  * ------------------------------------------------------------------------
3608
  */
3609
 
3610
- var Popover =
3611
- /*#__PURE__*/
3612
- function (_Tooltip) {
3613
  _inheritsLoose(Popover, _Tooltip);
3614
 
3615
  function Popover() {
@@ -3635,7 +3564,7 @@
3635
  _proto.setContent = function setContent() {
3636
  var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
3637
 
3638
- this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());
3639
 
3640
  var content = this._getContent();
3641
 
@@ -3643,8 +3572,8 @@
3643
  content = content.call(this.element);
3644
  }
3645
 
3646
- this.setElementContent($tip.find(Selector$7.CONTENT), content);
3647
- $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
3648
  } // Private
3649
  ;
3650
 
@@ -3711,7 +3640,7 @@
3711
  }, {
3712
  key: "Event",
3713
  get: function get() {
3714
- return Event$7;
3715
  }
3716
  }, {
3717
  key: "EVENT_KEY",
@@ -3749,7 +3678,7 @@
3749
  */
3750
 
3751
  var NAME$8 = 'scrollspy';
3752
- var VERSION$8 = '4.4.1';
3753
  var DATA_KEY$8 = 'bs.scrollspy';
3754
  var EVENT_KEY$8 = "." + DATA_KEY$8;
3755
  var DATA_API_KEY$6 = '.data-api';
@@ -3764,52 +3693,40 @@
3764
  method: 'string',
3765
  target: '(string|element)'
3766
  };
3767
- var Event$8 = {
3768
- ACTIVATE: "activate" + EVENT_KEY$8,
3769
- SCROLL: "scroll" + EVENT_KEY$8,
3770
- LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6
3771
- };
3772
- var ClassName$8 = {
3773
- DROPDOWN_ITEM: 'dropdown-item',
3774
- DROPDOWN_MENU: 'dropdown-menu',
3775
- ACTIVE: 'active'
3776
- };
3777
- var Selector$8 = {
3778
- DATA_SPY: '[data-spy="scroll"]',
3779
- ACTIVE: '.active',
3780
- NAV_LIST_GROUP: '.nav, .list-group',
3781
- NAV_LINKS: '.nav-link',
3782
- NAV_ITEMS: '.nav-item',
3783
- LIST_ITEMS: '.list-group-item',
3784
- DROPDOWN: '.dropdown',
3785
- DROPDOWN_ITEMS: '.dropdown-item',
3786
- DROPDOWN_TOGGLE: '.dropdown-toggle'
3787
- };
3788
- var OffsetMethod = {
3789
- OFFSET: 'offset',
3790
- POSITION: 'position'
3791
- };
3792
  /**
3793
  * ------------------------------------------------------------------------
3794
  * Class Definition
3795
  * ------------------------------------------------------------------------
3796
  */
3797
 
3798
- var ScrollSpy =
3799
- /*#__PURE__*/
3800
- function () {
3801
  function ScrollSpy(element, config) {
3802
  var _this = this;
3803
 
3804
  this._element = element;
3805
  this._scrollElement = element.tagName === 'BODY' ? window : element;
3806
  this._config = this._getConfig(config);
3807
- this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS);
3808
  this._offsets = [];
3809
  this._targets = [];
3810
  this._activeTarget = null;
3811
  this._scrollHeight = 0;
3812
- $(this._scrollElement).on(Event$8.SCROLL, function (event) {
3813
  return _this._process(event);
3814
  });
3815
  this.refresh();
@@ -3824,9 +3741,9 @@
3824
  _proto.refresh = function refresh() {
3825
  var _this2 = this;
3826
 
3827
- var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
3828
  var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
3829
- var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
3830
  this._offsets = [];
3831
  this._targets = [];
3832
  this._scrollHeight = this._getScrollHeight();
@@ -3875,9 +3792,9 @@
3875
  ;
3876
 
3877
  _proto._getConfig = function _getConfig(config) {
3878
- config = _objectSpread2({}, Default$6, {}, typeof config === 'object' && config ? config : {});
3879
 
3880
- if (typeof config.target !== 'string') {
3881
  var id = $(config.target).attr('id');
3882
 
3883
  if (!id) {
@@ -3933,9 +3850,7 @@
3933
  return;
3934
  }
3935
 
3936
- var offsetLength = this._offsets.length;
3937
-
3938
- for (var i = offsetLength; i--;) {
3939
  var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
3940
 
3941
  if (isActiveTarget) {
@@ -3955,29 +3870,29 @@
3955
 
3956
  var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
3957
 
3958
- if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {
3959
- $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);
3960
- $link.addClass(ClassName$8.ACTIVE);
3961
  } else {
3962
  // Set triggered link as active
3963
- $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active
3964
  // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
3965
 
3966
- $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + ", " + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item
3967
 
3968
- $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);
3969
  }
3970
 
3971
- $(this._scrollElement).trigger(Event$8.ACTIVATE, {
3972
  relatedTarget: target
3973
  });
3974
  };
3975
 
3976
  _proto._clear = function _clear() {
3977
  [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
3978
- return node.classList.contains(ClassName$8.ACTIVE);
3979
  }).forEach(function (node) {
3980
- return node.classList.remove(ClassName$8.ACTIVE);
3981
  });
3982
  } // Static
3983
  ;
@@ -4024,8 +3939,8 @@
4024
  */
4025
 
4026
 
4027
- $(window).on(Event$8.LOAD_DATA_API, function () {
4028
- var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));
4029
  var scrollSpysLength = scrollSpys.length;
4030
 
4031
  for (var i = scrollSpysLength; i--;) {
@@ -4055,43 +3970,35 @@
4055
  */
4056
 
4057
  var NAME$9 = 'tab';
4058
- var VERSION$9 = '4.4.1';
4059
  var DATA_KEY$9 = 'bs.tab';
4060
  var EVENT_KEY$9 = "." + DATA_KEY$9;
4061
  var DATA_API_KEY$7 = '.data-api';
4062
  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
4063
- var Event$9 = {
4064
- HIDE: "hide" + EVENT_KEY$9,
4065
- HIDDEN: "hidden" + EVENT_KEY$9,
4066
- SHOW: "show" + EVENT_KEY$9,
4067
- SHOWN: "shown" + EVENT_KEY$9,
4068
- CLICK_DATA_API: "click" + EVENT_KEY$9 + DATA_API_KEY$7
4069
- };
4070
- var ClassName$9 = {
4071
- DROPDOWN_MENU: 'dropdown-menu',
4072
- ACTIVE: 'active',
4073
- DISABLED: 'disabled',
4074
- FADE: 'fade',
4075
- SHOW: 'show'
4076
- };
4077
- var Selector$9 = {
4078
- DROPDOWN: '.dropdown',
4079
- NAV_LIST_GROUP: '.nav, .list-group',
4080
- ACTIVE: '.active',
4081
- ACTIVE_UL: '> li > .active',
4082
- DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
4083
- DROPDOWN_TOGGLE: '.dropdown-toggle',
4084
- DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
4085
- };
4086
  /**
4087
  * ------------------------------------------------------------------------
4088
  * Class Definition
4089
  * ------------------------------------------------------------------------
4090
  */
4091
 
4092
- var Tab =
4093
- /*#__PURE__*/
4094
- function () {
4095
  function Tab(element) {
4096
  this._element = element;
4097
  } // Getters
@@ -4103,25 +4010,25 @@
4103
  _proto.show = function show() {
4104
  var _this = this;
4105
 
4106
- if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {
4107
  return;
4108
  }
4109
 
4110
  var target;
4111
  var previous;
4112
- var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];
4113
  var selector = Util.getSelectorFromElement(this._element);
4114
 
4115
  if (listElement) {
4116
- var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;
4117
  previous = $.makeArray($(listElement).find(itemSelector));
4118
  previous = previous[previous.length - 1];
4119
  }
4120
 
4121
- var hideEvent = $.Event(Event$9.HIDE, {
4122
  relatedTarget: this._element
4123
  });
4124
- var showEvent = $.Event(Event$9.SHOW, {
4125
  relatedTarget: previous
4126
  });
4127
 
@@ -4142,10 +4049,10 @@
4142
  this._activate(this._element, listElement);
4143
 
4144
  var complete = function complete() {
4145
- var hiddenEvent = $.Event(Event$9.HIDDEN, {
4146
  relatedTarget: _this._element
4147
  });
4148
- var shownEvent = $.Event(Event$9.SHOWN, {
4149
  relatedTarget: previous
4150
  });
4151
  $(previous).trigger(hiddenEvent);
@@ -4168,9 +4075,9 @@
4168
  _proto._activate = function _activate(element, container, callback) {
4169
  var _this2 = this;
4170
 
4171
- var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);
4172
  var active = activeElements[0];
4173
- var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);
4174
 
4175
  var complete = function complete() {
4176
  return _this2._transitionComplete(element, active, callback);
@@ -4178,7 +4085,7 @@
4178
 
4179
  if (active && isTransitioning) {
4180
  var transitionDuration = Util.getTransitionDurationFromElement(active);
4181
- $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
4182
  } else {
4183
  complete();
4184
  }
@@ -4186,11 +4093,11 @@
4186
 
4187
  _proto._transitionComplete = function _transitionComplete(element, active, callback) {
4188
  if (active) {
4189
- $(active).removeClass(ClassName$9.ACTIVE);
4190
- var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];
4191
 
4192
  if (dropdownChild) {
4193
- $(dropdownChild).removeClass(ClassName$9.ACTIVE);
4194
  }
4195
 
4196
  if (active.getAttribute('role') === 'tab') {
@@ -4198,7 +4105,7 @@
4198
  }
4199
  }
4200
 
4201
- $(element).addClass(ClassName$9.ACTIVE);
4202
 
4203
  if (element.getAttribute('role') === 'tab') {
4204
  element.setAttribute('aria-selected', true);
@@ -4206,16 +4113,16 @@
4206
 
4207
  Util.reflow(element);
4208
 
4209
- if (element.classList.contains(ClassName$9.FADE)) {
4210
- element.classList.add(ClassName$9.SHOW);
4211
  }
4212
 
4213
- if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
4214
- var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
4215
 
4216
  if (dropdownElement) {
4217
- var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));
4218
- $(dropdownToggleList).addClass(ClassName$9.ACTIVE);
4219
  }
4220
 
4221
  element.setAttribute('aria-expanded', true);
@@ -4263,7 +4170,7 @@
4263
  */
4264
 
4265
 
4266
- $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {
4267
  event.preventDefault();
4268
 
4269
  Tab._jQueryInterface.call($(this), 'show');
@@ -4289,23 +4196,19 @@
4289
  */
4290
 
4291
  var NAME$a = 'toast';
4292
- var VERSION$a = '4.4.1';
4293
  var DATA_KEY$a = 'bs.toast';
4294
  var EVENT_KEY$a = "." + DATA_KEY$a;
4295
  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
4296
- var Event$a = {
4297
- CLICK_DISMISS: "click.dismiss" + EVENT_KEY$a,
4298
- HIDE: "hide" + EVENT_KEY$a,
4299
- HIDDEN: "hidden" + EVENT_KEY$a,
4300
- SHOW: "show" + EVENT_KEY$a,
4301
- SHOWN: "shown" + EVENT_KEY$a
4302
- };
4303
- var ClassName$a = {
4304
- FADE: 'fade',
4305
- HIDE: 'hide',
4306
- SHOW: 'show',
4307
- SHOWING: 'showing'
4308
- };
4309
  var DefaultType$7 = {
4310
  animation: 'boolean',
4311
  autohide: 'boolean',
@@ -4316,18 +4219,14 @@
4316
  autohide: true,
4317
  delay: 500
4318
  };
4319
- var Selector$a = {
4320
- DATA_DISMISS: '[data-dismiss="toast"]'
4321
- };
4322
  /**
4323
  * ------------------------------------------------------------------------
4324
  * Class Definition
4325
  * ------------------------------------------------------------------------
4326
  */
4327
 
4328
- var Toast =
4329
- /*#__PURE__*/
4330
- function () {
4331
  function Toast(element, config) {
4332
  this._element = element;
4333
  this._config = this._getConfig(config);
@@ -4343,7 +4242,7 @@
4343
  _proto.show = function show() {
4344
  var _this = this;
4345
 
4346
- var showEvent = $.Event(Event$a.SHOW);
4347
  $(this._element).trigger(showEvent);
4348
 
4349
  if (showEvent.isDefaultPrevented()) {
@@ -4351,15 +4250,15 @@
4351
  }
4352
 
4353
  if (this._config.animation) {
4354
- this._element.classList.add(ClassName$a.FADE);
4355
  }
4356
 
4357
  var complete = function complete() {
4358
- _this._element.classList.remove(ClassName$a.SHOWING);
4359
 
4360
- _this._element.classList.add(ClassName$a.SHOW);
4361
 
4362
- $(_this._element).trigger(Event$a.SHOWN);
4363
 
4364
  if (_this._config.autohide) {
4365
  _this._timeout = setTimeout(function () {
@@ -4368,11 +4267,11 @@
4368
  }
4369
  };
4370
 
4371
- this._element.classList.remove(ClassName$a.HIDE);
4372
 
4373
  Util.reflow(this._element);
4374
 
4375
- this._element.classList.add(ClassName$a.SHOWING);
4376
 
4377
  if (this._config.animation) {
4378
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
@@ -4383,11 +4282,11 @@
4383
  };
4384
 
4385
  _proto.hide = function hide() {
4386
- if (!this._element.classList.contains(ClassName$a.SHOW)) {
4387
  return;
4388
  }
4389
 
4390
- var hideEvent = $.Event(Event$a.HIDE);
4391
  $(this._element).trigger(hideEvent);
4392
 
4393
  if (hideEvent.isDefaultPrevented()) {
@@ -4401,11 +4300,11 @@
4401
  clearTimeout(this._timeout);
4402
  this._timeout = null;
4403
 
4404
- if (this._element.classList.contains(ClassName$a.SHOW)) {
4405
- this._element.classList.remove(ClassName$a.SHOW);
4406
  }
4407
 
4408
- $(this._element).off(Event$a.CLICK_DISMISS);
4409
  $.removeData(this._element, DATA_KEY$a);
4410
  this._element = null;
4411
  this._config = null;
@@ -4413,7 +4312,7 @@
4413
  ;
4414
 
4415
  _proto._getConfig = function _getConfig(config) {
4416
- config = _objectSpread2({}, Default$7, {}, $(this._element).data(), {}, typeof config === 'object' && config ? config : {});
4417
  Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
4418
  return config;
4419
  };
@@ -4421,7 +4320,7 @@
4421
  _proto._setListeners = function _setListeners() {
4422
  var _this2 = this;
4423
 
4424
- $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {
4425
  return _this2.hide();
4426
  });
4427
  };
@@ -4430,12 +4329,12 @@
4430
  var _this3 = this;
4431
 
4432
  var complete = function complete() {
4433
- _this3._element.classList.add(ClassName$a.HIDE);
4434
 
4435
- $(_this3._element).trigger(Event$a.HIDDEN);
4436
  };
4437
 
4438
- this._element.classList.remove(ClassName$a.SHOW);
4439
 
4440
  if (this._config.animation) {
4441
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
1
  /*!
2
+ * Bootstrap v4.5.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
  (function (global, factory) {
9
  (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
10
  }(this, (function (exports, $, Popper) { 'use strict';
11
 
12
+ $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;
13
+ Popper = Popper && Object.prototype.hasOwnProperty.call(Popper, 'default') ? Popper['default'] : Popper;
14
 
15
  function _defineProperties(target, props) {
16
  for (var i = 0; i < props.length; i++) {
85
 
86
  /**
87
  * --------------------------------------------------------------------------
88
+ * Bootstrap (v4.5.0): util.js
89
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
90
  * --------------------------------------------------------------------------
91
  */
100
  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
101
 
102
  function toType(obj) {
103
+ if (obj === null || typeof obj === 'undefined') {
104
+ return "" + obj;
105
+ }
106
+
107
  return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
108
  }
109
 
116
  return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
117
  }
118
 
119
+ return undefined;
120
  }
121
  };
122
  }
266
  */
267
 
268
  var NAME = 'alert';
269
+ var VERSION = '4.5.0';
270
  var DATA_KEY = 'bs.alert';
271
  var EVENT_KEY = "." + DATA_KEY;
272
  var DATA_API_KEY = '.data-api';
273
  var JQUERY_NO_CONFLICT = $.fn[NAME];
274
+ var SELECTOR_DISMISS = '[data-dismiss="alert"]';
275
+ var EVENT_CLOSE = "close" + EVENT_KEY;
276
+ var EVENT_CLOSED = "closed" + EVENT_KEY;
277
+ var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
278
+ var CLASS_NAME_ALERT = 'alert';
279
+ var CLASS_NAME_FADE = 'fade';
280
+ var CLASS_NAME_SHOW = 'show';
 
 
 
 
 
 
281
  /**
282
  * ------------------------------------------------------------------------
283
  * Class Definition
284
  * ------------------------------------------------------------------------
285
  */
286
 
287
+ var Alert = /*#__PURE__*/function () {
 
 
288
  function Alert(element) {
289
  this._element = element;
290
  } // Getters
324
  }
325
 
326
  if (!parent) {
327
+ parent = $(element).closest("." + CLASS_NAME_ALERT)[0];
328
  }
329
 
330
  return parent;
331
  };
332
 
333
  _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
334
+ var closeEvent = $.Event(EVENT_CLOSE);
335
  $(element).trigger(closeEvent);
336
  return closeEvent;
337
  };
339
  _proto._removeElement = function _removeElement(element) {
340
  var _this = this;
341
 
342
+ $(element).removeClass(CLASS_NAME_SHOW);
343
 
344
+ if (!$(element).hasClass(CLASS_NAME_FADE)) {
345
  this._destroyElement(element);
346
 
347
  return;
354
  };
355
 
356
  _proto._destroyElement = function _destroyElement(element) {
357
+ $(element).detach().trigger(EVENT_CLOSED).remove();
358
  } // Static
359
  ;
360
 
400
  */
401
 
402
 
403
+ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
404
  /**
405
  * ------------------------------------------------------------------------
406
  * jQuery
422
  */
423
 
424
  var NAME$1 = 'button';
425
+ var VERSION$1 = '4.5.0';
426
  var DATA_KEY$1 = 'bs.button';
427
  var EVENT_KEY$1 = "." + DATA_KEY$1;
428
  var DATA_API_KEY$1 = '.data-api';
429
  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];
430
+ var CLASS_NAME_ACTIVE = 'active';
431
+ var CLASS_NAME_BUTTON = 'btn';
432
+ var CLASS_NAME_FOCUS = 'focus';
433
+ var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
434
+ var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
435
+ var SELECTOR_DATA_TOGGLE = '[data-toggle="button"]';
436
+ var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
437
+ var SELECTOR_INPUT = 'input:not([type="hidden"])';
438
+ var SELECTOR_ACTIVE = '.active';
439
+ var SELECTOR_BUTTON = '.btn';
440
+ var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$1 + DATA_API_KEY$1;
441
+ var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1);
442
+ var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$1 + DATA_API_KEY$1;
 
 
 
 
 
 
443
  /**
444
  * ------------------------------------------------------------------------
445
  * Class Definition
446
  * ------------------------------------------------------------------------
447
  */
448
 
449
+ var Button = /*#__PURE__*/function () {
 
 
450
  function Button(element) {
451
  this._element = element;
452
  } // Getters
458
  _proto.toggle = function toggle() {
459
  var triggerChangeEvent = true;
460
  var addAriaPressed = true;
461
+ var rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0];
462
 
463
  if (rootElement) {
464
+ var input = this._element.querySelector(SELECTOR_INPUT);
465
 
466
  if (input) {
467
  if (input.type === 'radio') {
468
+ if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
469
  triggerChangeEvent = false;
470
  } else {
471
+ var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);
472
 
473
  if (activeElement) {
474
+ $(activeElement).removeClass(CLASS_NAME_ACTIVE);
475
  }
476
  }
 
 
 
 
 
 
 
477
  }
478
 
479
  if (triggerChangeEvent) {
480
+ // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
481
+ if (input.type === 'checkbox' || input.type === 'radio') {
482
+ input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);
483
+ }
484
+
485
  $(input).trigger('change');
486
  }
487
 
492
 
493
  if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
494
  if (addAriaPressed) {
495
+ this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE));
496
  }
497
 
498
  if (triggerChangeEvent) {
499
+ $(this._element).toggleClass(CLASS_NAME_ACTIVE);
500
  }
501
  }
502
  };
538
  */
539
 
540
 
541
+ $(document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
542
  var button = event.target;
543
+ var initialButton = button;
544
 
545
+ if (!$(button).hasClass(CLASS_NAME_BUTTON)) {
546
+ button = $(button).closest(SELECTOR_BUTTON)[0];
547
  }
548
 
549
  if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
550
  event.preventDefault(); // work around Firefox bug #1540995
551
  } else {
552
+ var inputBtn = button.querySelector(SELECTOR_INPUT);
553
 
554
  if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
555
  event.preventDefault(); // work around Firefox bug #1540995
557
  return;
558
  }
559
 
560
+ if (initialButton.tagName === 'LABEL' && inputBtn && inputBtn.type === 'checkbox') {
561
+ event.preventDefault(); // work around event sent to label and input
562
+ }
563
+
564
  Button._jQueryInterface.call($(button), 'toggle');
565
  }
566
+ }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
567
+ var button = $(event.target).closest(SELECTOR_BUTTON)[0];
568
+ $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
569
  });
570
+ $(window).on(EVENT_LOAD_DATA_API, function () {
571
  // ensure correct active class is set to match the controls' actual values/states
572
  // find all checkboxes/readio buttons inside data-toggle groups
573
+ var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
574
 
575
  for (var i = 0, len = buttons.length; i < len; i++) {
576
  var button = buttons[i];
577
+ var input = button.querySelector(SELECTOR_INPUT);
578
 
579
  if (input.checked || input.hasAttribute('checked')) {
580
+ button.classList.add(CLASS_NAME_ACTIVE);
581
  } else {
582
+ button.classList.remove(CLASS_NAME_ACTIVE);
583
  }
584
  } // find all button toggles
585
 
586
 
587
+ buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
588
 
589
  for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
590
  var _button = buttons[_i];
591
 
592
  if (_button.getAttribute('aria-pressed') === 'true') {
593
+ _button.classList.add(CLASS_NAME_ACTIVE);
594
  } else {
595
+ _button.classList.remove(CLASS_NAME_ACTIVE);
596
  }
597
  }
598
  });
617
  */
618
 
619
  var NAME$2 = 'carousel';
620
+ var VERSION$2 = '4.5.0';
621
  var DATA_KEY$2 = 'bs.carousel';
622
  var EVENT_KEY$2 = "." + DATA_KEY$2;
623
  var DATA_API_KEY$2 = '.data-api';
645
  wrap: 'boolean',
646
  touch: 'boolean'
647
  };
648
+ var DIRECTION_NEXT = 'next';
649
+ var DIRECTION_PREV = 'prev';
650
+ var DIRECTION_LEFT = 'left';
651
+ var DIRECTION_RIGHT = 'right';
652
+ var EVENT_SLIDE = "slide" + EVENT_KEY$2;
653
+ var EVENT_SLID = "slid" + EVENT_KEY$2;
654
+ var EVENT_KEYDOWN = "keydown" + EVENT_KEY$2;
655
+ var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$2;
656
+ var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$2;
657
+ var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$2;
658
+ var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$2;
659
+ var EVENT_TOUCHEND = "touchend" + EVENT_KEY$2;
660
+ var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$2;
661
+ var EVENT_POINTERUP = "pointerup" + EVENT_KEY$2;
662
+ var EVENT_DRAG_START = "dragstart" + EVENT_KEY$2;
663
+ var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$2 + DATA_API_KEY$2;
664
+ var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$2 + DATA_API_KEY$2;
665
+ var CLASS_NAME_CAROUSEL = 'carousel';
666
+ var CLASS_NAME_ACTIVE$1 = 'active';
667
+ var CLASS_NAME_SLIDE = 'slide';
668
+ var CLASS_NAME_RIGHT = 'carousel-item-right';
669
+ var CLASS_NAME_LEFT = 'carousel-item-left';
670
+ var CLASS_NAME_NEXT = 'carousel-item-next';
671
+ var CLASS_NAME_PREV = 'carousel-item-prev';
672
+ var CLASS_NAME_POINTER_EVENT = 'pointer-event';
673
+ var SELECTOR_ACTIVE$1 = '.active';
674
+ var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
675
+ var SELECTOR_ITEM = '.carousel-item';
676
+ var SELECTOR_ITEM_IMG = '.carousel-item img';
677
+ var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
678
+ var SELECTOR_INDICATORS = '.carousel-indicators';
679
+ var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
680
+ var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
 
 
 
 
 
 
 
 
 
681
  var PointerType = {
682
  TOUCH: 'touch',
683
  PEN: 'pen'
688
  * ------------------------------------------------------------------------
689
  */
690
 
691
+ var Carousel = /*#__PURE__*/function () {
 
 
692
  function Carousel(element, config) {
693
  this._items = null;
694
  this._interval = null;
700
  this.touchDeltaX = 0;
701
  this._config = this._getConfig(config);
702
  this._element = element;
703
+ this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);
704
  this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
705
  this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
706
 
713
  // Public
714
  _proto.next = function next() {
715
  if (!this._isSliding) {
716
+ this._slide(DIRECTION_NEXT);
717
  }
718
  };
719
 
727
 
728
  _proto.prev = function prev() {
729
  if (!this._isSliding) {
730
+ this._slide(DIRECTION_PREV);
731
  }
732
  };
733
 
736
  this._isPaused = true;
737
  }
738
 
739
+ if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
740
  Util.triggerTransitionEnd(this._element);
741
  this.cycle(true);
742
  }
763
  _proto.to = function to(index) {
764
  var _this = this;
765
 
766
+ this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
767
 
768
  var activeIndex = this._getItemIndex(this._activeElement);
769
 
772
  }
773
 
774
  if (this._isSliding) {
775
+ $(this._element).one(EVENT_SLID, function () {
776
  return _this.to(index);
777
  });
778
  return;
784
  return;
785
  }
786
 
787
+ var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
788
 
789
  this._slide(direction, this._items[index]);
790
  };
804
  ;
805
 
806
  _proto._getConfig = function _getConfig(config) {
807
+ config = _objectSpread2(_objectSpread2({}, Default), config);
808
  Util.typeCheckConfig(NAME$2, config, DefaultType);
809
  return config;
810
  };
833
  var _this2 = this;
834
 
835
  if (this._config.keyboard) {
836
+ $(this._element).on(EVENT_KEYDOWN, function (event) {
837
  return _this2._keydown(event);
838
  });
839
  }
840
 
841
  if (this._config.pause === 'hover') {
842
+ $(this._element).on(EVENT_MOUSEENTER, function (event) {
843
  return _this2.pause(event);
844
+ }).on(EVENT_MOUSELEAVE, function (event) {
845
  return _this2.cycle(event);
846
  });
847
  }
902
  }
903
  };
904
 
905
+ $(this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
906
  return e.preventDefault();
907
  });
908
 
909
  if (this._pointerEvent) {
910
+ $(this._element).on(EVENT_POINTERDOWN, function (event) {
911
  return start(event);
912
  });
913
+ $(this._element).on(EVENT_POINTERUP, function (event) {
914
  return end(event);
915
  });
916
 
917
+ this._element.classList.add(CLASS_NAME_POINTER_EVENT);
918
  } else {
919
+ $(this._element).on(EVENT_TOUCHSTART, function (event) {
920
  return start(event);
921
  });
922
+ $(this._element).on(EVENT_TOUCHMOVE, function (event) {
923
  return move(event);
924
  });
925
+ $(this._element).on(EVENT_TOUCHEND, function (event) {
926
  return end(event);
927
  });
928
  }
947
  };
948
 
949
  _proto._getItemIndex = function _getItemIndex(element) {
950
+ this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];
951
  return this._items.indexOf(element);
952
  };
953
 
954
  _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
955
+ var isNextDirection = direction === DIRECTION_NEXT;
956
+ var isPrevDirection = direction === DIRECTION_PREV;
957
 
958
  var activeIndex = this._getItemIndex(activeElement);
959
 
964
  return activeElement;
965
  }
966
 
967
+ var delta = direction === DIRECTION_PREV ? -1 : 1;
968
  var itemIndex = (activeIndex + delta) % this._items.length;
969
  return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
970
  };
972
  _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
973
  var targetIndex = this._getItemIndex(relatedTarget);
974
 
975
+ var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
976
 
977
+ var slideEvent = $.Event(EVENT_SLIDE, {
978
  relatedTarget: relatedTarget,
979
  direction: eventDirectionName,
980
  from: fromIndex,
986
 
987
  _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
988
  if (this._indicatorsElement) {
989
+ var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
990
+ $(indicators).removeClass(CLASS_NAME_ACTIVE$1);
991
 
992
  var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
993
 
994
  if (nextIndicator) {
995
+ $(nextIndicator).addClass(CLASS_NAME_ACTIVE$1);
996
  }
997
  }
998
  };
1000
  _proto._slide = function _slide(direction, element) {
1001
  var _this4 = this;
1002
 
1003
+ var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
1004
 
1005
  var activeElementIndex = this._getItemIndex(activeElement);
1006
 
1013
  var orderClassName;
1014
  var eventDirectionName;
1015
 
1016
+ if (direction === DIRECTION_NEXT) {
1017
+ directionalClassName = CLASS_NAME_LEFT;
1018
+ orderClassName = CLASS_NAME_NEXT;
1019
+ eventDirectionName = DIRECTION_LEFT;
1020
  } else {
1021
+ directionalClassName = CLASS_NAME_RIGHT;
1022
+ orderClassName = CLASS_NAME_PREV;
1023
+ eventDirectionName = DIRECTION_RIGHT;
1024
  }
1025
 
1026
+ if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE$1)) {
1027
  this._isSliding = false;
1028
  return;
1029
  }
1047
 
1048
  this._setActiveIndicatorElement(nextElement);
1049
 
1050
+ var slidEvent = $.Event(EVENT_SLID, {
1051
  relatedTarget: nextElement,
1052
  direction: eventDirectionName,
1053
  from: activeElementIndex,
1054
  to: nextElementIndex
1055
  });
1056
 
1057
+ if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {
1058
  $(nextElement).addClass(orderClassName);
1059
  Util.reflow(nextElement);
1060
  $(activeElement).addClass(directionalClassName);
1070
 
1071
  var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
1072
  $(activeElement).one(Util.TRANSITION_END, function () {
1073
+ $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$1);
1074
+ $(activeElement).removeClass(CLASS_NAME_ACTIVE$1 + " " + orderClassName + " " + directionalClassName);
1075
  _this4._isSliding = false;
1076
  setTimeout(function () {
1077
  return $(_this4._element).trigger(slidEvent);
1078
  }, 0);
1079
  }).emulateTransitionEnd(transitionDuration);
1080
  } else {
1081
+ $(activeElement).removeClass(CLASS_NAME_ACTIVE$1);
1082
+ $(nextElement).addClass(CLASS_NAME_ACTIVE$1);
1083
  this._isSliding = false;
1084
  $(this._element).trigger(slidEvent);
1085
  }
1094
  return this.each(function () {
1095
  var data = $(this).data(DATA_KEY$2);
1096
 
1097
+ var _config = _objectSpread2(_objectSpread2({}, Default), $(this).data());
1098
 
1099
  if (typeof config === 'object') {
1100
+ _config = _objectSpread2(_objectSpread2({}, _config), config);
1101
  }
1102
 
1103
  var action = typeof config === 'string' ? config : _config.slide;
1131
 
1132
  var target = $(selector)[0];
1133
 
1134
+ if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {
1135
  return;
1136
  }
1137
 
1138
+ var config = _objectSpread2(_objectSpread2({}, $(target).data()), $(this).data());
1139
 
1140
  var slideIndex = this.getAttribute('data-slide-to');
1141
 
1173
  */
1174
 
1175
 
1176
+ $(document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
1177
+ $(window).on(EVENT_LOAD_DATA_API$1, function () {
1178
+ var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
1179
 
1180
  for (var i = 0, len = carousels.length; i < len; i++) {
1181
  var $carousel = $(carousels[i]);
1204
  */
1205
 
1206
  var NAME$3 = 'collapse';
1207
+ var VERSION$3 = '4.5.0';
1208
  var DATA_KEY$3 = 'bs.collapse';
1209
  var EVENT_KEY$3 = "." + DATA_KEY$3;
1210
  var DATA_API_KEY$3 = '.data-api';
1217
  toggle: 'boolean',
1218
  parent: '(string|element)'
1219
  };
1220
+ var EVENT_SHOW = "show" + EVENT_KEY$3;
1221
+ var EVENT_SHOWN = "shown" + EVENT_KEY$3;
1222
+ var EVENT_HIDE = "hide" + EVENT_KEY$3;
1223
+ var EVENT_HIDDEN = "hidden" + EVENT_KEY$3;
1224
+ var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$3 + DATA_API_KEY$3;
1225
+ var CLASS_NAME_SHOW$1 = 'show';
1226
+ var CLASS_NAME_COLLAPSE = 'collapse';
1227
+ var CLASS_NAME_COLLAPSING = 'collapsing';
1228
+ var CLASS_NAME_COLLAPSED = 'collapsed';
1229
+ var DIMENSION_WIDTH = 'width';
1230
+ var DIMENSION_HEIGHT = 'height';
1231
+ var SELECTOR_ACTIVES = '.show, .collapsing';
1232
+ var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="collapse"]';
 
 
 
 
 
 
 
 
1233
  /**
1234
  * ------------------------------------------------------------------------
1235
  * Class Definition
1236
  * ------------------------------------------------------------------------
1237
  */
1238
 
1239
+ var Collapse = /*#__PURE__*/function () {
 
 
1240
  function Collapse(element, config) {
1241
  this._isTransitioning = false;
1242
  this._element = element;
1243
  this._config = this._getConfig(config);
1244
  this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
1245
+ var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$1));
1246
 
1247
  for (var i = 0, len = toggleList.length; i < len; i++) {
1248
  var elem = toggleList[i];
1274
 
1275
  // Public
1276
  _proto.toggle = function toggle() {
1277
+ if ($(this._element).hasClass(CLASS_NAME_SHOW$1)) {
1278
  this.hide();
1279
  } else {
1280
  this.show();
1284
  _proto.show = function show() {
1285
  var _this = this;
1286
 
1287
+ if (this._isTransitioning || $(this._element).hasClass(CLASS_NAME_SHOW$1)) {
1288
  return;
1289
  }
1290
 
1292
  var activesData;
1293
 
1294
  if (this._parent) {
1295
+ actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {
1296
  if (typeof _this._config.parent === 'string') {
1297
  return elem.getAttribute('data-parent') === _this._config.parent;
1298
  }
1299
 
1300
+ return elem.classList.contains(CLASS_NAME_COLLAPSE);
1301
  });
1302
 
1303
  if (actives.length === 0) {
1313
  }
1314
  }
1315
 
1316
+ var startEvent = $.Event(EVENT_SHOW);
1317
  $(this._element).trigger(startEvent);
1318
 
1319
  if (startEvent.isDefaultPrevented()) {
1330
 
1331
  var dimension = this._getDimension();
1332
 
1333
+ $(this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
1334
  this._element.style[dimension] = 0;
1335
 
1336
  if (this._triggerArray.length) {
1337
+ $(this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
1338
  }
1339
 
1340
  this.setTransitioning(true);
1341
 
1342
  var complete = function complete() {
1343
+ $(_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
1344
  _this._element.style[dimension] = '';
1345
 
1346
  _this.setTransitioning(false);
1347
 
1348
+ $(_this._element).trigger(EVENT_SHOWN);
1349
  };
1350
 
1351
  var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
1358
  _proto.hide = function hide() {
1359
  var _this2 = this;
1360
 
1361
+ if (this._isTransitioning || !$(this._element).hasClass(CLASS_NAME_SHOW$1)) {
1362
  return;
1363
  }
1364
 
1365
+ var startEvent = $.Event(EVENT_HIDE);
1366
  $(this._element).trigger(startEvent);
1367
 
1368
  if (startEvent.isDefaultPrevented()) {
1373
 
1374
  this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
1375
  Util.reflow(this._element);
1376
+ $(this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
1377
  var triggerArrayLength = this._triggerArray.length;
1378
 
1379
  if (triggerArrayLength > 0) {
1384
  if (selector !== null) {
1385
  var $elem = $([].slice.call(document.querySelectorAll(selector)));
1386
 
1387
+ if (!$elem.hasClass(CLASS_NAME_SHOW$1)) {
1388
+ $(trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
1389
  }
1390
  }
1391
  }
1396
  var complete = function complete() {
1397
  _this2.setTransitioning(false);
1398
 
1399
+ $(_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);
1400
  };
1401
 
1402
  this._element.style[dimension] = '';
1419
  ;
1420
 
1421
  _proto._getConfig = function _getConfig(config) {
1422
+ config = _objectSpread2(_objectSpread2({}, Default$1), config);
1423
  config.toggle = Boolean(config.toggle); // Coerce string values
1424
 
1425
  Util.typeCheckConfig(NAME$3, config, DefaultType$1);
1427
  };
1428
 
1429
  _proto._getDimension = function _getDimension() {
1430
+ var hasWidth = $(this._element).hasClass(DIMENSION_WIDTH);
1431
+ return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
1432
  };
1433
 
1434
  _proto._getParent = function _getParent() {
1455
  };
1456
 
1457
  _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
1458
+ var isOpen = $(element).hasClass(CLASS_NAME_SHOW$1);
1459
 
1460
  if (triggerArray.length) {
1461
+ $(triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1462
  }
1463
  } // Static
1464
  ;
1473
  var $this = $(this);
1474
  var data = $this.data(DATA_KEY$3);
1475
 
1476
+ var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$1), $this.data()), typeof config === 'object' && config ? config : {});
1477
 
1478
+ if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
1479
  _config.toggle = false;
1480
  }
1481
 
1515
  */
1516
 
1517
 
1518
+ $(document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event) {
1519
  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
1520
  if (event.currentTarget.tagName === 'A') {
1521
  event.preventDefault();
1553
  */
1554
 
1555
  var NAME$4 = 'dropdown';
1556
+ var VERSION$4 = '4.5.0';
1557
  var DATA_KEY$4 = 'bs.dropdown';
1558
  var EVENT_KEY$4 = "." + DATA_KEY$4;
1559
  var DATA_API_KEY$4 = '.data-api';
1571
  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
1572
 
1573
  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
1574
+ var EVENT_HIDE$1 = "hide" + EVENT_KEY$4;
1575
+ var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$4;
1576
+ var EVENT_SHOW$1 = "show" + EVENT_KEY$4;
1577
+ var EVENT_SHOWN$1 = "shown" + EVENT_KEY$4;
1578
+ var EVENT_CLICK = "click" + EVENT_KEY$4;
1579
+ var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$4 + DATA_API_KEY$4;
1580
+ var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$4 + DATA_API_KEY$4;
1581
+ var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$4 + DATA_API_KEY$4;
1582
+ var CLASS_NAME_DISABLED = 'disabled';
1583
+ var CLASS_NAME_SHOW$2 = 'show';
1584
+ var CLASS_NAME_DROPUP = 'dropup';
1585
+ var CLASS_NAME_DROPRIGHT = 'dropright';
1586
+ var CLASS_NAME_DROPLEFT = 'dropleft';
1587
+ var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
1588
+ var CLASS_NAME_POSITION_STATIC = 'position-static';
1589
+ var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
1590
+ var SELECTOR_FORM_CHILD = '.dropdown form';
1591
+ var SELECTOR_MENU = '.dropdown-menu';
1592
+ var SELECTOR_NAVBAR_NAV = '.navbar-nav';
1593
+ var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
1594
+ var PLACEMENT_TOP = 'top-start';
1595
+ var PLACEMENT_TOPEND = 'top-end';
1596
+ var PLACEMENT_BOTTOM = 'bottom-start';
1597
+ var PLACEMENT_BOTTOMEND = 'bottom-end';
1598
+ var PLACEMENT_RIGHT = 'right-start';
1599
+ var PLACEMENT_LEFT = 'left-start';
 
 
 
 
 
 
 
 
 
 
 
1600
  var Default$2 = {
1601
  offset: 0,
1602
  flip: true,
1619
  * ------------------------------------------------------------------------
1620
  */
1621
 
1622
+ var Dropdown = /*#__PURE__*/function () {
 
 
1623
  function Dropdown(element, config) {
1624
  this._element = element;
1625
  this._popper = null;
1635
 
1636
  // Public
1637
  _proto.toggle = function toggle() {
1638
+ if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {
1639
  return;
1640
  }
1641
 
1642
+ var isActive = $(this._menu).hasClass(CLASS_NAME_SHOW$2);
1643
 
1644
  Dropdown._clearMenus();
1645
 
1655
  usePopper = false;
1656
  }
1657
 
1658
+ if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW$2)) {
1659
  return;
1660
  }
1661
 
1662
  var relatedTarget = {
1663
  relatedTarget: this._element
1664
  };
1665
+ var showEvent = $.Event(EVENT_SHOW$1, relatedTarget);
1666
 
1667
  var parent = Dropdown._getParentFromElement(this._element);
1668
 
1698
 
1699
 
1700
  if (this._config.boundary !== 'scrollParent') {
1701
+ $(parent).addClass(CLASS_NAME_POSITION_STATIC);
1702
  }
1703
 
1704
  this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
1708
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
1709
 
1710
 
1711
+ if ('ontouchstart' in document.documentElement && $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
1712
  $(document.body).children().on('mouseover', null, $.noop);
1713
  }
1714
 
1716
 
1717
  this._element.setAttribute('aria-expanded', true);
1718
 
1719
+ $(this._menu).toggleClass(CLASS_NAME_SHOW$2);
1720
+ $(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_SHOWN$1, relatedTarget));
1721
  };
1722
 
1723
  _proto.hide = function hide() {
1724
+ if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW$2)) {
1725
  return;
1726
  }
1727
 
1728
  var relatedTarget = {
1729
  relatedTarget: this._element
1730
  };
1731
+ var hideEvent = $.Event(EVENT_HIDE$1, relatedTarget);
1732
 
1733
  var parent = Dropdown._getParentFromElement(this._element);
1734
 
1742
  this._popper.destroy();
1743
  }
1744
 
1745
+ $(this._menu).toggleClass(CLASS_NAME_SHOW$2);
1746
+ $(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget));
1747
  };
1748
 
1749
  _proto.dispose = function dispose() {
1771
  _proto._addEventListeners = function _addEventListeners() {
1772
  var _this = this;
1773
 
1774
+ $(this._element).on(EVENT_CLICK, function (event) {
1775
  event.preventDefault();
1776
  event.stopPropagation();
1777
 
1780
  };
1781
 
1782
  _proto._getConfig = function _getConfig(config) {
1783
+ config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), $(this._element).data()), config);
1784
  Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
1785
  return config;
1786
  };
1790
  var parent = Dropdown._getParentFromElement(this._element);
1791
 
1792
  if (parent) {
1793
+ this._menu = parent.querySelector(SELECTOR_MENU);
1794
  }
1795
  }
1796
 
1799
 
1800
  _proto._getPlacement = function _getPlacement() {
1801
  var $parentDropdown = $(this._element.parentNode);
1802
+ var placement = PLACEMENT_BOTTOM; // Handle dropup
 
 
 
1803
 
1804
+ if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
1805
+ placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
1806
+ } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
1807
+ placement = PLACEMENT_RIGHT;
1808
+ } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
1809
+ placement = PLACEMENT_LEFT;
1810
+ } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
1811
+ placement = PLACEMENT_BOTTOMEND;
 
1812
  }
1813
 
1814
  return placement;
1825
 
1826
  if (typeof this._config.offset === 'function') {
1827
  offset.fn = function (data) {
1828
+ data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this2._config.offset(data.offsets, _this2._element) || {});
1829
  return data;
1830
  };
1831
  } else {
1855
  };
1856
  }
1857
 
1858
+ return _objectSpread2(_objectSpread2({}, popperConfig), this._config.popperConfig);
1859
  } // Static
1860
  ;
1861
 
1885
  return;
1886
  }
1887
 
1888
+ var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
1889
 
1890
  for (var i = 0, len = toggles.length; i < len; i++) {
1891
  var parent = Dropdown._getParentFromElement(toggles[i]);
1905
 
1906
  var dropdownMenu = context._menu;
1907
 
1908
+ if (!$(parent).hasClass(CLASS_NAME_SHOW$2)) {
1909
  continue;
1910
  }
1911
 
1913
  continue;
1914
  }
1915
 
1916
+ var hideEvent = $.Event(EVENT_HIDE$1, relatedTarget);
1917
  $(parent).trigger(hideEvent);
1918
 
1919
  if (hideEvent.isDefaultPrevented()) {
1932
  context._popper.destroy();
1933
  }
1934
 
1935
+ $(dropdownMenu).removeClass(CLASS_NAME_SHOW$2);
1936
+ $(parent).removeClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget));
1937
  }
1938
  };
1939
 
1957
  // - If key is other than escape
1958
  // - If key is not up or down => not a dropdown command
1959
  // - If trigger inside the menu => not a dropdown command
1960
+ if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
1961
  return;
1962
  }
1963
 
1964
+ if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {
 
 
 
1965
  return;
1966
  }
1967
 
1968
  var parent = Dropdown._getParentFromElement(this);
1969
 
1970
+ var isActive = $(parent).hasClass(CLASS_NAME_SHOW$2);
1971
 
1972
  if (!isActive && event.which === ESCAPE_KEYCODE) {
1973
  return;
1974
  }
1975
 
1976
+ event.preventDefault();
1977
+ event.stopPropagation();
1978
+
1979
  if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
1980
  if (event.which === ESCAPE_KEYCODE) {
1981
+ $(parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');
 
1982
  }
1983
 
1984
  $(this).trigger('click');
1985
  return;
1986
  }
1987
 
1988
+ var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
1989
  return $(item).is(':visible');
1990
  });
1991
 
2038
  */
2039
 
2040
 
2041
+ $(document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {
2042
  event.preventDefault();
2043
  event.stopPropagation();
2044
 
2045
  Dropdown._jQueryInterface.call($(this), 'toggle');
2046
+ }).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {
2047
  e.stopPropagation();
2048
  });
2049
  /**
2067
  */
2068
 
2069
  var NAME$5 = 'modal';
2070
+ var VERSION$5 = '4.5.0';
2071
  var DATA_KEY$5 = 'bs.modal';
2072
  var EVENT_KEY$5 = "." + DATA_KEY$5;
2073
  var DATA_API_KEY$5 = '.data-api';
2086
  focus: 'boolean',
2087
  show: 'boolean'
2088
  };
2089
+ var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
2090
+ var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
2091
+ var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
2092
+ var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
2093
+ var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
2094
+ var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
2095
+ var EVENT_RESIZE = "resize" + EVENT_KEY$5;
2096
+ var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY$5;
2097
+ var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
2098
+ var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
2099
+ var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
2100
+ var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$5 + DATA_API_KEY$5;
2101
+ var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
2102
+ var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
2103
+ var CLASS_NAME_BACKDROP = 'modal-backdrop';
2104
+ var CLASS_NAME_OPEN = 'modal-open';
2105
+ var CLASS_NAME_FADE$1 = 'fade';
2106
+ var CLASS_NAME_SHOW$3 = 'show';
2107
+ var CLASS_NAME_STATIC = 'modal-static';
2108
+ var SELECTOR_DIALOG = '.modal-dialog';
2109
+ var SELECTOR_MODAL_BODY = '.modal-body';
2110
+ var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="modal"]';
2111
+ var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
2112
+ var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
2113
+ var SELECTOR_STICKY_CONTENT = '.sticky-top';
 
 
 
 
 
 
2114
  /**
2115
  * ------------------------------------------------------------------------
2116
  * Class Definition
2117
  * ------------------------------------------------------------------------
2118
  */
2119
 
2120
+ var Modal = /*#__PURE__*/function () {
 
 
2121
  function Modal(element, config) {
2122
  this._config = this._getConfig(config);
2123
  this._element = element;
2124
+ this._dialog = element.querySelector(SELECTOR_DIALOG);
2125
  this._backdrop = null;
2126
  this._isShown = false;
2127
  this._isBodyOverflowing = false;
2145
  return;
2146
  }
2147
 
2148
+ if ($(this._element).hasClass(CLASS_NAME_FADE$1)) {
2149
  this._isTransitioning = true;
2150
  }
2151
 
2152
+ var showEvent = $.Event(EVENT_SHOW$2, {
2153
  relatedTarget: relatedTarget
2154
  });
2155
  $(this._element).trigger(showEvent);
2170
 
2171
  this._setResizeEvent();
2172
 
2173
+ $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
2174
  return _this.hide(event);
2175
  });
2176
+ $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
2177
+ $(_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
2178
  if ($(event.target).is(_this._element)) {
2179
  _this._ignoreBackdropClick = true;
2180
  }
2197
  return;
2198
  }
2199
 
2200
+ var hideEvent = $.Event(EVENT_HIDE$2);
2201
  $(this._element).trigger(hideEvent);
2202
 
2203
  if (!this._isShown || hideEvent.isDefaultPrevented()) {
2205
  }
2206
 
2207
  this._isShown = false;
2208
+ var transition = $(this._element).hasClass(CLASS_NAME_FADE$1);
2209
 
2210
  if (transition) {
2211
  this._isTransitioning = true;
2215
 
2216
  this._setResizeEvent();
2217
 
2218
+ $(document).off(EVENT_FOCUSIN);
2219
+ $(this._element).removeClass(CLASS_NAME_SHOW$3);
2220
+ $(this._element).off(EVENT_CLICK_DISMISS);
2221
+ $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
2222
 
2223
  if (transition) {
2224
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
2235
  return $(htmlElement).off(EVENT_KEY$5);
2236
  });
2237
  /**
2238
+ * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
2239
  * Do not move `document` in `htmlElements` array
2240
+ * It will remove `EVENT_CLICK_DATA_API` event that should remain
2241
  */
2242
 
2243
+ $(document).off(EVENT_FOCUSIN);
2244
  $.removeData(this._element, DATA_KEY$5);
2245
  this._config = null;
2246
  this._element = null;
2259
  ;
2260
 
2261
  _proto._getConfig = function _getConfig(config) {
2262
+ config = _objectSpread2(_objectSpread2({}, Default$3), config);
2263
  Util.typeCheckConfig(NAME$5, config, DefaultType$3);
2264
  return config;
2265
  };
2268
  var _this3 = this;
2269
 
2270
  if (this._config.backdrop === 'static') {
2271
+ var hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED);
2272
  $(this._element).trigger(hideEventPrevented);
2273
 
2274
  if (hideEventPrevented.defaultPrevented) {
2275
  return;
2276
  }
2277
 
2278
+ this._element.classList.add(CLASS_NAME_STATIC);
2279
 
2280
  var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);
2281
  $(this._element).one(Util.TRANSITION_END, function () {
2282
+ _this3._element.classList.remove(CLASS_NAME_STATIC);
2283
  }).emulateTransitionEnd(modalTransitionDuration);
2284
 
2285
  this._element.focus();
2291
  _proto._showElement = function _showElement(relatedTarget) {
2292
  var _this4 = this;
2293
 
2294
+ var transition = $(this._element).hasClass(CLASS_NAME_FADE$1);
2295
+ var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
2296
 
2297
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
2298
  // Don't move modal's DOM position
2305
 
2306
  this._element.setAttribute('aria-modal', true);
2307
 
2308
+ if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
2309
  modalBody.scrollTop = 0;
2310
  } else {
2311
  this._element.scrollTop = 0;
2315
  Util.reflow(this._element);
2316
  }
2317
 
2318
+ $(this._element).addClass(CLASS_NAME_SHOW$3);
2319
 
2320
  if (this._config.focus) {
2321
  this._enforceFocus();
2322
  }
2323
 
2324
+ var shownEvent = $.Event(EVENT_SHOWN$2, {
2325
  relatedTarget: relatedTarget
2326
  });
2327
 
2345
  _proto._enforceFocus = function _enforceFocus() {
2346
  var _this5 = this;
2347
 
2348
+ $(document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
2349
+ .on(EVENT_FOCUSIN, function (event) {
2350
  if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {
2351
  _this5._element.focus();
2352
  }
2356
  _proto._setEscapeEvent = function _setEscapeEvent() {
2357
  var _this6 = this;
2358
 
2359
+ if (this._isShown) {
2360
+ $(this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
2361
+ if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
2362
+ event.preventDefault();
2363
+
2364
+ _this6.hide();
2365
+ } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
2366
  _this6._triggerBackdropTransition();
2367
  }
2368
  });
2369
  } else if (!this._isShown) {
2370
+ $(this._element).off(EVENT_KEYDOWN_DISMISS);
2371
  }
2372
  };
2373
 
2375
  var _this7 = this;
2376
 
2377
  if (this._isShown) {
2378
+ $(window).on(EVENT_RESIZE, function (event) {
2379
  return _this7.handleUpdate(event);
2380
  });
2381
  } else {
2382
+ $(window).off(EVENT_RESIZE);
2383
  }
2384
  };
2385
 
2395
  this._isTransitioning = false;
2396
 
2397
  this._showBackdrop(function () {
2398
+ $(document.body).removeClass(CLASS_NAME_OPEN);
2399
 
2400
  _this8._resetAdjustments();
2401
 
2402
  _this8._resetScrollbar();
2403
 
2404
+ $(_this8._element).trigger(EVENT_HIDDEN$2);
2405
  });
2406
  };
2407
 
2415
  _proto._showBackdrop = function _showBackdrop(callback) {
2416
  var _this9 = this;
2417
 
2418
+ var animate = $(this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : '';
2419
 
2420
  if (this._isShown && this._config.backdrop) {
2421
  this._backdrop = document.createElement('div');
2422
+ this._backdrop.className = CLASS_NAME_BACKDROP;
2423
 
2424
  if (animate) {
2425
  this._backdrop.classList.add(animate);
2426
  }
2427
 
2428
  $(this._backdrop).appendTo(document.body);
2429
+ $(this._element).on(EVENT_CLICK_DISMISS, function (event) {
2430
  if (_this9._ignoreBackdropClick) {
2431
  _this9._ignoreBackdropClick = false;
2432
  return;
2443
  Util.reflow(this._backdrop);
2444
  }
2445
 
2446
+ $(this._backdrop).addClass(CLASS_NAME_SHOW$3);
2447
 
2448
  if (!callback) {
2449
  return;
2457
  var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
2458
  $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
2459
  } else if (!this._isShown && this._backdrop) {
2460
+ $(this._backdrop).removeClass(CLASS_NAME_SHOW$3);
2461
 
2462
  var callbackRemove = function callbackRemove() {
2463
  _this9._removeBackdrop();
2467
  }
2468
  };
2469
 
2470
+ if ($(this._element).hasClass(CLASS_NAME_FADE$1)) {
2471
  var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
2472
 
2473
  $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
2502
 
2503
  _proto._checkScrollbar = function _checkScrollbar() {
2504
  var rect = document.body.getBoundingClientRect();
2505
+ this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
2506
  this._scrollbarWidth = this._getScrollbarWidth();
2507
  };
2508
 
2512
  if (this._isBodyOverflowing) {
2513
  // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
2514
  // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
2515
+ var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
2516
+ var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
2517
 
2518
  $(fixedContent).each(function (index, element) {
2519
  var actualPadding = element.style.paddingRight;
2532
  $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
2533
  }
2534
 
2535
+ $(document.body).addClass(CLASS_NAME_OPEN);
2536
  };
2537
 
2538
  _proto._resetScrollbar = function _resetScrollbar() {
2539
  // Restore fixed content padding
2540
+ var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
2541
  $(fixedContent).each(function (index, element) {
2542
  var padding = $(element).data('padding-right');
2543
  $(element).removeData('padding-right');
2544
  element.style.paddingRight = padding ? padding : '';
2545
  }); // Restore sticky content
2546
 
2547
+ var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
2548
  $(elements).each(function (index, element) {
2549
  var margin = $(element).data('margin-right');
2550
 
2561
  _proto._getScrollbarWidth = function _getScrollbarWidth() {
2562
  // thx d.walsh
2563
  var scrollDiv = document.createElement('div');
2564
+ scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
2565
  document.body.appendChild(scrollDiv);
2566
  var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
2567
  document.body.removeChild(scrollDiv);
2573
  return this.each(function () {
2574
  var data = $(this).data(DATA_KEY$5);
2575
 
2576
+ var _config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$3), $(this).data()), typeof config === 'object' && config ? config : {});
2577
 
2578
  if (!data) {
2579
  data = new Modal(this, _config);
2613
  */
2614
 
2615
 
2616
+ $(document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function (event) {
2617
  var _this11 = this;
2618
 
2619
  var target;
2623
  target = document.querySelector(selector);
2624
  }
2625
 
2626
+ var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2(_objectSpread2({}, $(target).data()), $(this).data());
2627
 
2628
  if (this.tagName === 'A' || this.tagName === 'AREA') {
2629
  event.preventDefault();
2630
  }
2631
 
2632
+ var $target = $(target).one(EVENT_SHOW$2, function (showEvent) {
2633
  if (showEvent.isDefaultPrevented()) {
2634
  // Only register focus restorer if modal will actually get shown
2635
  return;
2636
  }
2637
 
2638
+ $target.one(EVENT_HIDDEN$2, function () {
2639
  if ($(_this11).is(':visible')) {
2640
  _this11.focus();
2641
  }
2660
 
2661
  /**
2662
  * --------------------------------------------------------------------------
2663
+ * Bootstrap (v4.5.0): tools/sanitizer.js
2664
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2665
  * --------------------------------------------------------------------------
2666
  */
2685
  h5: [],
2686
  h6: [],
2687
  i: [],
2688
+ img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
2689
  li: [],
2690
  ol: [],
2691
  p: [],
2705
  * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
2706
  */
2707
 
2708
+ var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;
2709
  /**
2710
  * A pattern that matches safe data URLs. Only matches image, video and audio types.
2711
  *
2712
  * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
2713
  */
2714
 
2715
+ var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
2716
 
2717
  function allowedAttribute(attr, allowedAttributeList) {
2718
  var attrName = attr.nodeName.toLowerCase();
2729
  return attrRegex instanceof RegExp;
2730
  }); // Check if a regular expression validates the attribute.
2731
 
2732
+ for (var i = 0, len = regExp.length; i < len; i++) {
2733
  if (attrName.match(regExp[i])) {
2734
  return true;
2735
  }
2786
  */
2787
 
2788
  var NAME$6 = 'tooltip';
2789
+ var VERSION$6 = '4.5.0';
2790
  var DATA_KEY$6 = 'bs.tooltip';
2791
  var EVENT_KEY$6 = "." + DATA_KEY$6;
2792
  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
2811
  whiteList: 'object',
2812
  popperConfig: '(null|object)'
2813
  };
2814
+ var AttachmentMap = {
2815
  AUTO: 'auto',
2816
  TOP: 'top',
2817
  RIGHT: 'right',
2836
  whiteList: DefaultWhitelist,
2837
  popperConfig: null
2838
  };
2839
+ var HOVER_STATE_SHOW = 'show';
2840
+ var HOVER_STATE_OUT = 'out';
2841
+ var Event = {
 
 
2842
  HIDE: "hide" + EVENT_KEY$6,
2843
  HIDDEN: "hidden" + EVENT_KEY$6,
2844
  SHOW: "show" + EVENT_KEY$6,
2850
  MOUSEENTER: "mouseenter" + EVENT_KEY$6,
2851
  MOUSELEAVE: "mouseleave" + EVENT_KEY$6
2852
  };
2853
+ var CLASS_NAME_FADE$2 = 'fade';
2854
+ var CLASS_NAME_SHOW$4 = 'show';
2855
+ var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
2856
+ var SELECTOR_ARROW = '.arrow';
2857
+ var TRIGGER_HOVER = 'hover';
2858
+ var TRIGGER_FOCUS = 'focus';
2859
+ var TRIGGER_CLICK = 'click';
2860
+ var TRIGGER_MANUAL = 'manual';
 
 
 
 
 
 
 
2861
  /**
2862
  * ------------------------------------------------------------------------
2863
  * Class Definition
2864
  * ------------------------------------------------------------------------
2865
  */
2866
 
2867
+ var Tooltip = /*#__PURE__*/function () {
 
 
2868
  function Tooltip(element, config) {
2869
  if (typeof Popper === 'undefined') {
2870
  throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
2922
  context._leave(null, context);
2923
  }
2924
  } else {
2925
+ if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)) {
2926
  this._leave(null, this);
2927
 
2928
  return;
2982
  this.setContent();
2983
 
2984
  if (this.config.animation) {
2985
+ $(tip).addClass(CLASS_NAME_FADE$2);
2986
  }
2987
 
2988
  var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
3001
 
3002
  $(this.element).trigger(this.constructor.Event.INSERTED);
3003
  this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));
3004
+ $(tip).addClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we add extra
3005
  // empty mouseover listeners to the body's immediate children;
3006
  // only needed because of broken event delegation on iOS
3007
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
3019
  _this._hoverState = null;
3020
  $(_this.element).trigger(_this.constructor.Event.SHOWN);
3021
 
3022
+ if (prevHoverState === HOVER_STATE_OUT) {
3023
  _this._leave(null, _this);
3024
  }
3025
  };
3026
 
3027
+ if ($(this.tip).hasClass(CLASS_NAME_FADE$2)) {
3028
  var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
3029
  $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
3030
  } else {
3040
  var hideEvent = $.Event(this.constructor.Event.HIDE);
3041
 
3042
  var complete = function complete() {
3043
+ if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
3044
  tip.parentNode.removeChild(tip);
3045
  }
3046
 
3065
  return;
3066
  }
3067
 
3068
+ $(tip).removeClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra
3069
  // empty mouseover listeners we added for iOS support
3070
 
3071
  if ('ontouchstart' in document.documentElement) {
3072
  $(document.body).children().off('mouseover', null, $.noop);
3073
  }
3074
 
3075
+ this._activeTrigger[TRIGGER_CLICK] = false;
3076
+ this._activeTrigger[TRIGGER_FOCUS] = false;
3077
+ this._activeTrigger[TRIGGER_HOVER] = false;
3078
 
3079
+ if ($(this.tip).hasClass(CLASS_NAME_FADE$2)) {
3080
  var transitionDuration = Util.getTransitionDurationFromElement(tip);
3081
  $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
3082
  } else {
3108
 
3109
  _proto.setContent = function setContent() {
3110
  var tip = this.getTipElement();
3111
+ this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
3112
+ $(tip).removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$4);
3113
  };
3114
 
3115
  _proto.setElementContent = function setElementContent($element, content) {
3159
  behavior: this.config.fallbackPlacement
3160
  },
3161
  arrow: {
3162
+ element: SELECTOR_ARROW
3163
  },
3164
  preventOverflow: {
3165
  boundariesElement: this.config.boundary
3174
  return _this3._handlePopperPlacementChange(data);
3175
  }
3176
  };
3177
+ return _objectSpread2(_objectSpread2({}, defaultBsConfig), this.config.popperConfig);
3178
  };
3179
 
3180
  _proto._getOffset = function _getOffset() {
3184
 
3185
  if (typeof this.config.offset === 'function') {
3186
  offset.fn = function (data) {
3187
+ data.offsets = _objectSpread2(_objectSpread2({}, data.offsets), _this4.config.offset(data.offsets, _this4.element) || {});
3188
  return data;
3189
  };
3190
  } else {
3207
  };
3208
 
3209
  _proto._getAttachment = function _getAttachment(placement) {
3210
+ return AttachmentMap[placement.toUpperCase()];
3211
  };
3212
 
3213
  _proto._setListeners = function _setListeners() {
3219
  $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
3220
  return _this5.toggle(event);
3221
  });
3222
+ } else if (trigger !== TRIGGER_MANUAL) {
3223
+ var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
3224
+ var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
3225
  $(_this5.element).on(eventIn, _this5.config.selector, function (event) {
3226
  return _this5._enter(event);
3227
  }).on(eventOut, _this5.config.selector, function (event) {
3239
  $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
3240
 
3241
  if (this.config.selector) {
3242
+ this.config = _objectSpread2(_objectSpread2({}, this.config), {}, {
3243
  trigger: 'manual',
3244
  selector: ''
3245
  });
3267
  }
3268
 
3269
  if (event) {
3270
+ context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
3271
  }
3272
 
3273
+ if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {
3274
+ context._hoverState = HOVER_STATE_SHOW;
3275
  return;
3276
  }
3277
 
3278
  clearTimeout(context._timeout);
3279
+ context._hoverState = HOVER_STATE_SHOW;
3280
 
3281
  if (!context.config.delay || !context.config.delay.show) {
3282
  context.show();
3284
  }
3285
 
3286
  context._timeout = setTimeout(function () {
3287
+ if (context._hoverState === HOVER_STATE_SHOW) {
3288
  context.show();
3289
  }
3290
  }, context.config.delay.show);
3300
  }
3301
 
3302
  if (event) {
3303
+ context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
3304
  }
3305
 
3306
  if (context._isWithActiveTrigger()) {
3308
  }
3309
 
3310
  clearTimeout(context._timeout);
3311
+ context._hoverState = HOVER_STATE_OUT;
3312
 
3313
  if (!context.config.delay || !context.config.delay.hide) {
3314
  context.hide();
3316
  }
3317
 
3318
  context._timeout = setTimeout(function () {
3319
+ if (context._hoverState === HOVER_STATE_OUT) {
3320
  context.hide();
3321
  }
3322
  }, context.config.delay.hide);
3339
  delete dataAttributes[dataAttr];
3340
  }
3341
  });
3342
+ config = _objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), dataAttributes), typeof config === 'object' && config ? config : {});
3343
 
3344
  if (typeof config.delay === 'number') {
3345
  config.delay = {
3389
  };
3390
 
3391
  _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
3392
+ this.tip = popperData.instance.popper;
 
3393
 
3394
  this._cleanTipClass();
3395
 
3404
  return;
3405
  }
3406
 
3407
+ $(tip).removeClass(CLASS_NAME_FADE$2);
3408
  this.config.animation = false;
3409
  this.hide();
3410
  this.show();
3460
  }, {
3461
  key: "Event",
3462
  get: function get() {
3463
+ return Event;
3464
  }
3465
  }, {
3466
  key: "EVENT_KEY",
3498
  */
3499
 
3500
  var NAME$7 = 'popover';
3501
+ var VERSION$7 = '4.5.0';
3502
  var DATA_KEY$7 = 'bs.popover';
3503
  var EVENT_KEY$7 = "." + DATA_KEY$7;
3504
  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
3505
  var CLASS_PREFIX$1 = 'bs-popover';
3506
  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
3507
 
3508
+ var Default$5 = _objectSpread2(_objectSpread2({}, Tooltip.Default), {}, {
3509
  placement: 'right',
3510
  trigger: 'click',
3511
  content: '',
3512
  template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
3513
  });
3514
 
3515
+ var DefaultType$5 = _objectSpread2(_objectSpread2({}, Tooltip.DefaultType), {}, {
3516
  content: '(string|element|function)'
3517
  });
3518
 
3519
+ var CLASS_NAME_FADE$3 = 'fade';
3520
+ var CLASS_NAME_SHOW$5 = 'show';
3521
+ var SELECTOR_TITLE = '.popover-header';
3522
+ var SELECTOR_CONTENT = '.popover-body';
3523
+ var Event$1 = {
 
 
 
 
3524
  HIDE: "hide" + EVENT_KEY$7,
3525
  HIDDEN: "hidden" + EVENT_KEY$7,
3526
  SHOW: "show" + EVENT_KEY$7,
3538
  * ------------------------------------------------------------------------
3539
  */
3540
 
3541
+ var Popover = /*#__PURE__*/function (_Tooltip) {
 
 
3542
  _inheritsLoose(Popover, _Tooltip);
3543
 
3544
  function Popover() {
3564
  _proto.setContent = function setContent() {
3565
  var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
3566
 
3567
+ this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
3568
 
3569
  var content = this._getContent();
3570
 
3572
  content = content.call(this.element);
3573
  }
3574
 
3575
+ this.setElementContent($tip.find(SELECTOR_CONTENT), content);
3576
+ $tip.removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$5);
3577
  } // Private
3578
  ;
3579
 
3640
  }, {
3641
  key: "Event",
3642
  get: function get() {
3643
+ return Event$1;
3644
  }
3645
  }, {
3646
  key: "EVENT_KEY",
3678
  */
3679
 
3680
  var NAME$8 = 'scrollspy';
3681
+ var VERSION$8 = '4.5.0';
3682
  var DATA_KEY$8 = 'bs.scrollspy';
3683
  var EVENT_KEY$8 = "." + DATA_KEY$8;
3684
  var DATA_API_KEY$6 = '.data-api';
3693
  method: 'string',
3694
  target: '(string|element)'
3695
  };
3696
+ var EVENT_ACTIVATE = "activate" + EVENT_KEY$8;
3697
+ var EVENT_SCROLL = "scroll" + EVENT_KEY$8;
3698
+ var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$8 + DATA_API_KEY$6;
3699
+ var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
3700
+ var CLASS_NAME_ACTIVE$2 = 'active';
3701
+ var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
3702
+ var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
3703
+ var SELECTOR_NAV_LINKS = '.nav-link';
3704
+ var SELECTOR_NAV_ITEMS = '.nav-item';
3705
+ var SELECTOR_LIST_ITEMS = '.list-group-item';
3706
+ var SELECTOR_DROPDOWN = '.dropdown';
3707
+ var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
3708
+ var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
3709
+ var METHOD_OFFSET = 'offset';
3710
+ var METHOD_POSITION = 'position';
 
 
 
 
 
 
 
 
 
 
3711
  /**
3712
  * ------------------------------------------------------------------------
3713
  * Class Definition
3714
  * ------------------------------------------------------------------------
3715
  */
3716
 
3717
+ var ScrollSpy = /*#__PURE__*/function () {
 
 
3718
  function ScrollSpy(element, config) {
3719
  var _this = this;
3720
 
3721
  this._element = element;
3722
  this._scrollElement = element.tagName === 'BODY' ? window : element;
3723
  this._config = this._getConfig(config);
3724
+ this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
3725
  this._offsets = [];
3726
  this._targets = [];
3727
  this._activeTarget = null;
3728
  this._scrollHeight = 0;
3729
+ $(this._scrollElement).on(EVENT_SCROLL, function (event) {
3730
  return _this._process(event);
3731
  });
3732
  this.refresh();
3741
  _proto.refresh = function refresh() {
3742
  var _this2 = this;
3743
 
3744
+ var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
3745
  var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
3746
+ var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
3747
  this._offsets = [];
3748
  this._targets = [];
3749
  this._scrollHeight = this._getScrollHeight();
3792
  ;
3793
 
3794
  _proto._getConfig = function _getConfig(config) {
3795
+ config = _objectSpread2(_objectSpread2({}, Default$6), typeof config === 'object' && config ? config : {});
3796
 
3797
+ if (typeof config.target !== 'string' && Util.isElement(config.target)) {
3798
  var id = $(config.target).attr('id');
3799
 
3800
  if (!id) {
3850
  return;
3851
  }
3852
 
3853
+ for (var i = this._offsets.length; i--;) {
 
 
3854
  var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
3855
 
3856
  if (isActiveTarget) {
3870
 
3871
  var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
3872
 
3873
+ if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
3874
+ $link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2);
3875
+ $link.addClass(CLASS_NAME_ACTIVE$2);
3876
  } else {
3877
  // Set triggered link as active
3878
+ $link.addClass(CLASS_NAME_ACTIVE$2); // Set triggered links parents as active
3879
  // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
3880
 
3881
+ $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$2); // Handle special case when .nav-link is inside .nav-item
3882
 
3883
+ $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$2);
3884
  }
3885
 
3886
+ $(this._scrollElement).trigger(EVENT_ACTIVATE, {
3887
  relatedTarget: target
3888
  });
3889
  };
3890
 
3891
  _proto._clear = function _clear() {
3892
  [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
3893
+ return node.classList.contains(CLASS_NAME_ACTIVE$2);
3894
  }).forEach(function (node) {
3895
+ return node.classList.remove(CLASS_NAME_ACTIVE$2);
3896
  });
3897
  } // Static
3898
  ;
3939
  */
3940
 
3941
 
3942
+ $(window).on(EVENT_LOAD_DATA_API$2, function () {
3943
+ var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
3944
  var scrollSpysLength = scrollSpys.length;
3945
 
3946
  for (var i = scrollSpysLength; i--;) {
3970
  */
3971
 
3972
  var NAME$9 = 'tab';
3973
+ var VERSION$9 = '4.5.0';
3974
  var DATA_KEY$9 = 'bs.tab';
3975
  var EVENT_KEY$9 = "." + DATA_KEY$9;
3976
  var DATA_API_KEY$7 = '.data-api';
3977
  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];
3978
+ var EVENT_HIDE$3 = "hide" + EVENT_KEY$9;
3979
+ var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$9;
3980
+ var EVENT_SHOW$3 = "show" + EVENT_KEY$9;
3981
+ var EVENT_SHOWN$3 = "shown" + EVENT_KEY$9;
3982
+ var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$9 + DATA_API_KEY$7;
3983
+ var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
3984
+ var CLASS_NAME_ACTIVE$3 = 'active';
3985
+ var CLASS_NAME_DISABLED$1 = 'disabled';
3986
+ var CLASS_NAME_FADE$4 = 'fade';
3987
+ var CLASS_NAME_SHOW$6 = 'show';
3988
+ var SELECTOR_DROPDOWN$1 = '.dropdown';
3989
+ var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
3990
+ var SELECTOR_ACTIVE$2 = '.active';
3991
+ var SELECTOR_ACTIVE_UL = '> li > .active';
3992
+ var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
3993
+ var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
3994
+ var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
 
 
 
 
 
 
3995
  /**
3996
  * ------------------------------------------------------------------------
3997
  * Class Definition
3998
  * ------------------------------------------------------------------------
3999
  */
4000
 
4001
+ var Tab = /*#__PURE__*/function () {
 
 
4002
  function Tab(element) {
4003
  this._element = element;
4004
  } // Getters
4010
  _proto.show = function show() {
4011
  var _this = this;
4012
 
4013
+ if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(CLASS_NAME_ACTIVE$3) || $(this._element).hasClass(CLASS_NAME_DISABLED$1)) {
4014
  return;
4015
  }
4016
 
4017
  var target;
4018
  var previous;
4019
+ var listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP$1)[0];
4020
  var selector = Util.getSelectorFromElement(this._element);
4021
 
4022
  if (listElement) {
4023
+ var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE$2;
4024
  previous = $.makeArray($(listElement).find(itemSelector));
4025
  previous = previous[previous.length - 1];
4026
  }
4027
 
4028
+ var hideEvent = $.Event(EVENT_HIDE$3, {
4029
  relatedTarget: this._element
4030
  });
4031
+ var showEvent = $.Event(EVENT_SHOW$3, {
4032
  relatedTarget: previous
4033
  });
4034
 
4049
  this._activate(this._element, listElement);
4050
 
4051
  var complete = function complete() {
4052
+ var hiddenEvent = $.Event(EVENT_HIDDEN$3, {
4053
  relatedTarget: _this._element
4054
  });
4055
+ var shownEvent = $.Event(EVENT_SHOWN$3, {
4056
  relatedTarget: previous
4057
  });
4058
  $(previous).trigger(hiddenEvent);
4075
  _proto._activate = function _activate(element, container, callback) {
4076
  var _this2 = this;
4077
 
4078
+ var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(SELECTOR_ACTIVE_UL) : $(container).children(SELECTOR_ACTIVE$2);
4079
  var active = activeElements[0];
4080
+ var isTransitioning = callback && active && $(active).hasClass(CLASS_NAME_FADE$4);
4081
 
4082
  var complete = function complete() {
4083
  return _this2._transitionComplete(element, active, callback);
4085
 
4086
  if (active && isTransitioning) {
4087
  var transitionDuration = Util.getTransitionDurationFromElement(active);
4088
+ $(active).removeClass(CLASS_NAME_SHOW$6).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
4089
  } else {
4090
  complete();
4091
  }
4093
 
4094
  _proto._transitionComplete = function _transitionComplete(element, active, callback) {
4095
  if (active) {
4096
+ $(active).removeClass(CLASS_NAME_ACTIVE$3);
4097
+ var dropdownChild = $(active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
4098
 
4099
  if (dropdownChild) {
4100
+ $(dropdownChild).removeClass(CLASS_NAME_ACTIVE$3);
4101
  }
4102
 
4103
  if (active.getAttribute('role') === 'tab') {
4105
  }
4106
  }
4107
 
4108
+ $(element).addClass(CLASS_NAME_ACTIVE$3);
4109
 
4110
  if (element.getAttribute('role') === 'tab') {
4111
  element.setAttribute('aria-selected', true);
4113
 
4114
  Util.reflow(element);
4115
 
4116
+ if (element.classList.contains(CLASS_NAME_FADE$4)) {
4117
+ element.classList.add(CLASS_NAME_SHOW$6);
4118
  }
4119
 
4120
+ if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
4121
+ var dropdownElement = $(element).closest(SELECTOR_DROPDOWN$1)[0];
4122
 
4123
  if (dropdownElement) {
4124
+ var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE$1));
4125
+ $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE$3);
4126
  }
4127
 
4128
  element.setAttribute('aria-expanded', true);
4170
  */
4171
 
4172
 
4173
+ $(document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function (event) {
4174
  event.preventDefault();
4175
 
4176
  Tab._jQueryInterface.call($(this), 'show');
4196
  */
4197
 
4198
  var NAME$a = 'toast';
4199
+ var VERSION$a = '4.5.0';
4200
  var DATA_KEY$a = 'bs.toast';
4201
  var EVENT_KEY$a = "." + DATA_KEY$a;
4202
  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
4203
+ var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$a;
4204
+ var EVENT_HIDE$4 = "hide" + EVENT_KEY$a;
4205
+ var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$a;
4206
+ var EVENT_SHOW$4 = "show" + EVENT_KEY$a;
4207
+ var EVENT_SHOWN$4 = "shown" + EVENT_KEY$a;
4208
+ var CLASS_NAME_FADE$5 = 'fade';
4209
+ var CLASS_NAME_HIDE = 'hide';
4210
+ var CLASS_NAME_SHOW$7 = 'show';
4211
+ var CLASS_NAME_SHOWING = 'showing';
 
 
 
 
4212
  var DefaultType$7 = {
4213
  animation: 'boolean',
4214
  autohide: 'boolean',
4219
  autohide: true,
4220
  delay: 500
4221
  };
4222
+ var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="toast"]';
 
 
4223
  /**
4224
  * ------------------------------------------------------------------------
4225
  * Class Definition
4226
  * ------------------------------------------------------------------------
4227
  */
4228
 
4229
+ var Toast = /*#__PURE__*/function () {
 
 
4230
  function Toast(element, config) {
4231
  this._element = element;
4232
  this._config = this._getConfig(config);
4242
  _proto.show = function show() {
4243
  var _this = this;
4244
 
4245
+ var showEvent = $.Event(EVENT_SHOW$4);
4246
  $(this._element).trigger(showEvent);
4247
 
4248
  if (showEvent.isDefaultPrevented()) {
4250
  }
4251
 
4252
  if (this._config.animation) {
4253
+ this._element.classList.add(CLASS_NAME_FADE$5);
4254
  }
4255
 
4256
  var complete = function complete() {
4257
+ _this._element.classList.remove(CLASS_NAME_SHOWING);
4258
 
4259
+ _this._element.classList.add(CLASS_NAME_SHOW$7);
4260
 
4261
+ $(_this._element).trigger(EVENT_SHOWN$4);
4262
 
4263
  if (_this._config.autohide) {
4264
  _this._timeout = setTimeout(function () {
4267
  }
4268
  };
4269
 
4270
+ this._element.classList.remove(CLASS_NAME_HIDE);
4271
 
4272
  Util.reflow(this._element);
4273
 
4274
+ this._element.classList.add(CLASS_NAME_SHOWING);
4275
 
4276
  if (this._config.animation) {
4277
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
4282
  };
4283
 
4284
  _proto.hide = function hide() {
4285
+ if (!this._element.classList.contains(CLASS_NAME_SHOW$7)) {
4286
  return;
4287
  }
4288
 
4289
+ var hideEvent = $.Event(EVENT_HIDE$4);
4290
  $(this._element).trigger(hideEvent);
4291
 
4292
  if (hideEvent.isDefaultPrevented()) {
4300
  clearTimeout(this._timeout);
4301
  this._timeout = null;
4302
 
4303
+ if (this._element.classList.contains(CLASS_NAME_SHOW$7)) {
4304
+ this._element.classList.remove(CLASS_NAME_SHOW$7);
4305
  }
4306
 
4307
+ $(this._element).off(EVENT_CLICK_DISMISS$1);
4308
  $.removeData(this._element, DATA_KEY$a);
4309
  this._element = null;
4310
  this._config = null;
4312
  ;
4313
 
4314
  _proto._getConfig = function _getConfig(config) {
4315
+ config = _objectSpread2(_objectSpread2(_objectSpread2({}, Default$7), $(this._element).data()), typeof config === 'object' && config ? config : {});
4316
  Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
4317
  return config;
4318
  };
4320
  _proto._setListeners = function _setListeners() {
4321
  var _this2 = this;
4322
 
4323
+ $(this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function () {
4324
  return _this2.hide();
4325
  });
4326
  };
4329
  var _this3 = this;
4330
 
4331
  var complete = function complete() {
4332
+ _this3._element.classList.add(CLASS_NAME_HIDE);
4333
 
4334
+ $(_this3._element).trigger(EVENT_HIDDEN$4);
4335
  };
4336
 
4337
+ this._element.classList.remove(CLASS_NAME_SHOW$7);
4338
 
4339
  if (this._config.animation) {
4340
  var transitionDuration = Util.getTransitionDurationFromElement(this._element);
resources/js/bootstrap4.min.js CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * Bootstrap v4.4.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,function(t,g,u){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function s(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,i)}return n}function l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?e(Object(r),!0).forEach(function(t){var e,n,i;e=o,i=r[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach(function(t){Object.defineProperty(o,t,Object.getOwnPropertyDescriptor(r,t))})}return o}g=g&&g.hasOwnProperty("default")?g.default:g,u=u&&u.hasOwnProperty("default")?u.default:u;var n="transitionend";function o(t){var e=this,n=!1;return g(this).one(_.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||_.triggerTransitionEnd(e)},t),this}var _={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=g(t).css("transition-duration"),n=g(t).css("transition-delay"),i=parseFloat(e),o=parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){g(t).trigger(n)},supportsTransitionEnd:function(){return Boolean(n)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],r=e[i],s=r&&_.isElement(r)?"element":(a=r,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"!=typeof t.getRootNode)return t instanceof ShadowRoot?t:t.parentNode?_.findShadowRoot(t.parentNode):null;var e=t.getRootNode();return e instanceof ShadowRoot?e:null},jQueryDetection:function(){if("undefined"==typeof g)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=g.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||4<=t[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};_.jQueryDetection(),g.fn.emulateTransitionEnd=o,g.event.special[_.TRANSITION_END]={bindType:n,delegateType:n,handle:function(t){if(g(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var r="alert",a="bs.alert",c="."+a,h=g.fn[r],f={CLOSE:"close"+c,CLOSED:"closed"+c,CLICK_DATA_API:"click"+c+".data-api"},d="alert",m="fade",p="show",v=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){g.removeData(this._element,a),this._element=null},t._getRootElement=function(t){var e=_.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n=n||g(t).closest("."+d)[0]},t._triggerCloseEvent=function(t){var e=g.Event(f.CLOSE);return g(t).trigger(e),e},t._removeElement=function(e){var n=this;if(g(e).removeClass(p),g(e).hasClass(m)){var t=_.getTransitionDurationFromElement(e);g(e).one(_.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){g(t).detach().trigger(f.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(a);e||(e=new i(this),t.data(a,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();g(document).on(f.CLICK_DATA_API,'[data-dismiss="alert"]',v._handleDismiss(new v)),g.fn[r]=v._jQueryInterface,g.fn[r].Constructor=v,g.fn[r].noConflict=function(){return g.fn[r]=h,v._jQueryInterface};var y="button",E="bs.button",C="."+E,T=".data-api",b=g.fn[y],S="active",D="btn",I="focus",w='[data-toggle^="button"]',A='[data-toggle="buttons"]',N='[data-toggle="button"]',O='[data-toggle="buttons"] .btn',k='input:not([type="hidden"])',P=".active",L=".btn",j={CLICK_DATA_API:"click"+C+T,FOCUS_BLUR_DATA_API:"focus"+C+T+" blur"+C+T,LOAD_DATA_API:"load"+C+T},H=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=g(this._element).closest(A)[0];if(n){var i=this._element.querySelector(k);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(S))t=!1;else{var o=n.querySelector(P);o&&g(o).removeClass(S)}else"checkbox"===i.type?"LABEL"===this._element.tagName&&i.checked===this._element.classList.contains(S)&&(t=!1):t=!1;t&&(i.checked=!this._element.classList.contains(S),g(i).trigger("change")),i.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(S)),t&&g(this._element).toggleClass(S))},t.dispose=function(){g.removeData(this._element,E),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(E);t||(t=new n(this),g(this).data(E,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),n}();g(document).on(j.CLICK_DATA_API,w,function(t){var e=t.target;if(g(e).hasClass(D)||(e=g(e).closest(L)[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var n=e.querySelector(k);if(n&&(n.hasAttribute("disabled")||n.classList.contains("disabled")))return void t.preventDefault();H._jQueryInterface.call(g(e),"toggle")}}).on(j.FOCUS_BLUR_DATA_API,w,function(t){var e=g(t.target).closest(L)[0];g(e).toggleClass(I,/^focus(in)?$/.test(t.type))}),g(window).on(j.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(O)),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector(k);o.checked||o.hasAttribute("checked")?i.classList.add(S):i.classList.remove(S)}for(var r=0,s=(t=[].slice.call(document.querySelectorAll(N))).length;r<s;r++){var a=t[r];"true"===a.getAttribute("aria-pressed")?a.classList.add(S):a.classList.remove(S)}}),g.fn[y]=H._jQueryInterface,g.fn[y].Constructor=H,g.fn[y].noConflict=function(){return g.fn[y]=b,H._jQueryInterface};var R="carousel",x="bs.carousel",F="."+x,U=".data-api",W=g.fn[R],q={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},M={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},K="next",Q="prev",B="left",V="right",Y={SLIDE:"slide"+F,SLID:"slid"+F,KEYDOWN:"keydown"+F,MOUSEENTER:"mouseenter"+F,MOUSELEAVE:"mouseleave"+F,TOUCHSTART:"touchstart"+F,TOUCHMOVE:"touchmove"+F,TOUCHEND:"touchend"+F,POINTERDOWN:"pointerdown"+F,POINTERUP:"pointerup"+F,DRAG_START:"dragstart"+F,LOAD_DATA_API:"load"+F+U,CLICK_DATA_API:"click"+F+U},z="carousel",X="active",$="slide",G="carousel-item-right",J="carousel-item-left",Z="carousel-item-next",tt="carousel-item-prev",et="pointer-event",nt=".active",it=".active.carousel-item",ot=".carousel-item",rt=".carousel-item img",st=".carousel-item-next, .carousel-item-prev",at=".carousel-indicators",lt="[data-slide], [data-slide-to]",ct='[data-ride="carousel"]',ht={TOUCH:"touch",PEN:"pen"},ut=function(){function r(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(at),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var t=r.prototype;return t.next=function(){this._isSliding||this._slide(K)},t.nextWhenVisible=function(){!document.hidden&&g(this._element).is(":visible")&&"hidden"!==g(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(Q)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(st)&&(_.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=this._element.querySelector(it);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)g(this._element).one(Y.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?K:Q;this._slide(i,this._items[t])}},t.dispose=function(){g(this._element).off(F),g.removeData(this._element,x),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=l({},q,{},t),_.typeCheckConfig(R,t,M),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;(this.touchDeltaX=0)<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&g(this._element).on(Y.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&g(this._element).on(Y.MOUSEENTER,function(t){return e.pause(t)}).on(Y.MOUSELEAVE,function(t){return e.cycle(t)}),this._config.touch&&this._addTouchEventListeners()},t._addTouchEventListeners=function(){var e=this;if(this._touchSupported){var n=function(t){e._pointerEvent&&ht[t.originalEvent.pointerType.toUpperCase()]?e.touchStartX=t.originalEvent.clientX:e._pointerEvent||(e.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){e._pointerEvent&&ht[t.originalEvent.pointerType.toUpperCase()]&&(e.touchDeltaX=t.originalEvent.clientX-e.touchStartX),e._handleSwipe(),"hover"===e._config.pause&&(e.pause(),e.touchTimeout&&clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout(function(t){return e.cycle(t)},500+e._config.interval))};g(this._element.querySelectorAll(rt)).on(Y.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(g(this._element).on(Y.POINTERDOWN,function(t){return n(t)}),g(this._element).on(Y.POINTERUP,function(t){return i(t)}),this._element.classList.add(et)):(g(this._element).on(Y.TOUCHSTART,function(t){return n(t)}),g(this._element).on(Y.TOUCHMOVE,function(t){return function(t){t.originalEvent.touches&&1<t.originalEvent.touches.length?e.touchDeltaX=0:e.touchDeltaX=t.originalEvent.touches[0].clientX-e.touchStartX}(t)}),g(this._element).on(Y.TOUCHEND,function(t){return i(t)}))}},t._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},t._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(ot)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===K,i=t===Q,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+(t===Q?-1:1))%this._items.length;return-1==s?this._items[this._items.length-1]:this._items[s]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(it)),o=g.Event(Y.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return g(this._element).trigger(o),o},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(nt));g(e).removeClass(X);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&g(n).addClass(X)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector(it),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===K?(n=J,i=Z,B):(n=G,i=tt,V),l&&g(l).hasClass(X))this._isSliding=!1;else if(!this._triggerSlideEvent(l,o).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=g.Event(Y.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(g(this._element).hasClass($)){g(l).addClass(i),_.reflow(l),g(s).addClass(n),g(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=f):this._config.interval=this._config.defaultInterval||this._config.interval;var d=_.getTransitionDurationFromElement(s);g(s).one(_.TRANSITION_END,function(){g(l).removeClass(n+" "+i).addClass(X),g(s).removeClass(X+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return g(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else g(s).removeClass(X),g(l).addClass(X),this._isSliding=!1,g(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=g(this).data(x),e=l({},q,{},g(this).data());"object"==typeof i&&(e=l({},e,{},i));var n="string"==typeof i?i:e.slide;if(t||(t=new r(this,e),g(this).data(x,t)),"number"==typeof i)t.to(i);else if("string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}else e.interval&&e.ride&&(t.pause(),t.cycle())})},r._dataApiClickHandler=function(t){var e=_.getSelectorFromElement(this);if(e){var n=g(e)[0];if(n&&g(n).hasClass(z)){var i=l({},g(n).data(),{},g(this).data()),o=this.getAttribute("data-slide-to");o&&(i.interval=!1),r._jQueryInterface.call(g(n),i),o&&g(n).data(x).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return q}}]),r}();g(document).on(Y.CLICK_DATA_API,lt,ut._dataApiClickHandler),g(window).on(Y.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(ct)),e=0,n=t.length;e<n;e++){var i=g(t[e]);ut._jQueryInterface.call(i,i.data())}}),g.fn[R]=ut._jQueryInterface,g.fn[R].Constructor=ut,g.fn[R].noConflict=function(){return g.fn[R]=W,ut._jQueryInterface};var ft="collapse",dt="bs.collapse",gt="."+dt,_t=g.fn[ft],mt={toggle:!0,parent:""},pt={toggle:"boolean",parent:"(string|element)"},vt={SHOW:"show"+gt,SHOWN:"shown"+gt,HIDE:"hide"+gt,HIDDEN:"hidden"+gt,CLICK_DATA_API:"click"+gt+".data-api"},yt="show",Et="collapse",Ct="collapsing",Tt="collapsed",bt="width",St="height",Dt=".show, .collapsing",It='[data-toggle="collapse"]',wt=function(){function a(e,t){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(t),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(It)),i=0,o=n.length;i<o;i++){var r=n[i],s=_.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter(function(t){return t===e});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=a.prototype;return t.toggle=function(){g(this._element).hasClass(yt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!g(this._element).hasClass(yt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(Dt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(Et)})).length&&(t=null),!(t&&(e=g(t).not(this._selector).data(dt))&&e._isTransitioning))){var i=g.Event(vt.SHOW);if(g(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(g(t).not(this._selector),"hide"),e||g(t).data(dt,null));var o=this._getDimension();g(this._element).removeClass(Et).addClass(Ct),this._element.style[o]=0,this._triggerArray.length&&g(this._triggerArray).removeClass(Tt).attr("aria-expanded",!0),this.setTransitioning(!0);var r="scroll"+(o[0].toUpperCase()+o.slice(1)),s=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){g(n._element).removeClass(Ct).addClass(Et).addClass(yt),n._element.style[o]="",n.setTransitioning(!1),g(n._element).trigger(vt.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&g(this._element).hasClass(yt)){var e=g.Event(vt.HIDE);if(g(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",_.reflow(this._element),g(this._element).addClass(Ct).removeClass(Et).removeClass(yt);var i=this._triggerArray.length;if(0<i)for(var o=0;o<i;o++){var r=this._triggerArray[o],s=_.getSelectorFromElement(r);if(null!==s)g([].slice.call(document.querySelectorAll(s))).hasClass(yt)||g(r).addClass(Tt).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){t.setTransitioning(!1),g(t._element).removeClass(Ct).addClass(Et).trigger(vt.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){g.removeData(this._element,dt),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},mt,{},t)).toggle=Boolean(t.toggle),_.typeCheckConfig(ft,t,pt),t},t._getDimension=function(){return g(this._element).hasClass(bt)?bt:St},t._getParent=function(){var t,n=this;_.isElement(this._config.parent)?(t=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(t=this._config.parent[0])):t=document.querySelector(this._config.parent);var e='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(t.querySelectorAll(e));return g(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){var n=g(t).hasClass(yt);e.length&&g(e).toggleClass(Tt,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(t){var e=_.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=g(this),e=t.data(dt),n=l({},mt,{},t.data(),{},"object"==typeof i&&i?i:{});if(!e&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),e||(e=new a(this,n),t.data(dt,e)),"string"==typeof i){if("undefined"==typeof e[i])throw new TypeError('No method named "'+i+'"');e[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return mt}}]),a}();g(document).on(vt.CLICK_DATA_API,It,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=g(this),e=_.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));g(i).each(function(){var t=g(this),e=t.data(dt)?"toggle":n.data();wt._jQueryInterface.call(t,e)})}),g.fn[ft]=wt._jQueryInterface,g.fn[ft].Constructor=wt,g.fn[ft].noConflict=function(){return g.fn[ft]=_t,wt._jQueryInterface};var At="dropdown",Nt="bs.dropdown",Ot="."+Nt,kt=".data-api",Pt=g.fn[At],Lt=new RegExp("38|40|27"),jt={HIDE:"hide"+Ot,HIDDEN:"hidden"+Ot,SHOW:"show"+Ot,SHOWN:"shown"+Ot,CLICK:"click"+Ot,CLICK_DATA_API:"click"+Ot+kt,KEYDOWN_DATA_API:"keydown"+Ot+kt,KEYUP_DATA_API:"keyup"+Ot+kt},Ht="disabled",Rt="show",xt="dropup",Ft="dropright",Ut="dropleft",Wt="dropdown-menu-right",qt="position-static",Mt='[data-toggle="dropdown"]',Kt=".dropdown form",Qt=".dropdown-menu",Bt=".navbar-nav",Vt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Yt="top-start",zt="top-end",Xt="bottom-start",$t="bottom-end",Gt="right-start",Jt="left-start",Zt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},te={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},ee=function(){function c(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=c.prototype;return t.toggle=function(){if(!this._element.disabled&&!g(this._element).hasClass(Ht)){var t=g(this._menu).hasClass(Rt);c._clearMenus(),t||this.show(!0)}},t.show=function(t){if(void 0===t&&(t=!1),!(this._element.disabled||g(this._element).hasClass(Ht)||g(this._menu).hasClass(Rt))){var e={relatedTarget:this._element},n=g.Event(jt.SHOW,e),i=c._getParentFromElement(this._element);if(g(i).trigger(n),!n.isDefaultPrevented()){if(!this._inNavbar&&t){if("undefined"==typeof u)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=i:_.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&g(i).addClass(qt),this._popper=new u(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===g(i).closest(Bt).length&&g(document.body).children().on("mouseover",null,g.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),g(this._menu).toggleClass(Rt),g(i).toggleClass(Rt).trigger(g.Event(jt.SHOWN,e))}}},t.hide=function(){if(!this._element.disabled&&!g(this._element).hasClass(Ht)&&g(this._menu).hasClass(Rt)){var t={relatedTarget:this._element},e=g.Event(jt.HIDE,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(this._popper&&this._popper.destroy(),g(this._menu).toggleClass(Rt),g(n).toggleClass(Rt).trigger(g.Event(jt.HIDDEN,t)))}},t.dispose=function(){g.removeData(this._element,Nt),g(this._element).off(Ot),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;g(this._element).on(jt.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,{},g(this._element).data(),{},t),_.typeCheckConfig(At,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(Qt))}return this._menu},t._getPlacement=function(){var t=g(this._element.parentNode),e=Xt;return t.hasClass(xt)?(e=Yt,g(this._menu).hasClass(Wt)&&(e=zt)):t.hasClass(Ft)?e=Gt:t.hasClass(Ut)?e=Jt:g(this._menu).hasClass(Wt)&&(e=$t),e},t._detectNavbar=function(){return 0<g(this._element).closest(".navbar").length},t._getOffset=function(){var e=this,t={};return"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,{},e._config.offset(t.offsets,e._element)||{}),t}:t.offset=this._config.offset,t},t._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),l({},t,{},this._config.popperConfig)},c._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(Nt);if(t||(t=new c(this,"object"==typeof e?e:null),g(this).data(Nt,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},c._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var e=[].slice.call(document.querySelectorAll(Mt)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=g(e[n]).data(Nt),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(g(o).hasClass(Rt)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&g.contains(o,t.target))){var l=g.Event(jt.HIDE,s);g(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),e[n].setAttribute("aria-expanded","false"),r._popper&&r._popper.destroy(),g(a).removeClass(Rt),g(o).removeClass(Rt).trigger(g.Event(jt.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=_.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},c._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||g(t.target).closest(Qt).length)):Lt.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!g(this).hasClass(Ht))){var e=c._getParentFromElement(this),n=g(e).hasClass(Rt);if(n||27!==t.which)if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(Vt)).filter(function(t){return g(t).is(":visible")});if(0!==i.length){var o=i.indexOf(t.target);38===t.which&&0<o&&o--,40===t.which&&o<i.length-1&&o++,o<0&&(o=0),i[o].focus()}}else{if(27===t.which){var r=e.querySelector(Mt);g(r).trigger("focus")}g(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return Zt}},{key:"DefaultType",get:function(){return te}}]),c}();g(document).on(jt.KEYDOWN_DATA_API,Mt,ee._dataApiKeydownHandler).on(jt.KEYDOWN_DATA_API,Qt,ee._dataApiKeydownHandler).on(jt.CLICK_DATA_API+" "+jt.KEYUP_DATA_API,ee._clearMenus).on(jt.CLICK_DATA_API,Mt,function(t){t.preventDefault(),t.stopPropagation(),ee._jQueryInterface.call(g(this),"toggle")}).on(jt.CLICK_DATA_API,Kt,function(t){t.stopPropagation()}),g.fn[At]=ee._jQueryInterface,g.fn[At].Constructor=ee,g.fn[At].noConflict=function(){return g.fn[At]=Pt,ee._jQueryInterface};var ne="modal",ie="bs.modal",oe="."+ie,re=g.fn[ne],se={backdrop:!0,keyboard:!0,focus:!0,show:!0},ae={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},le={HIDE:"hide"+oe,HIDE_PREVENTED:"hidePrevented"+oe,HIDDEN:"hidden"+oe,SHOW:"show"+oe,SHOWN:"shown"+oe,FOCUSIN:"focusin"+oe,RESIZE:"resize"+oe,CLICK_DISMISS:"click.dismiss"+oe,KEYDOWN_DISMISS:"keydown.dismiss"+oe,MOUSEUP_DISMISS:"mouseup.dismiss"+oe,MOUSEDOWN_DISMISS:"mousedown.dismiss"+oe,CLICK_DATA_API:"click"+oe+".data-api"},ce="modal-dialog-scrollable",he="modal-scrollbar-measure",ue="modal-backdrop",fe="modal-open",de="fade",ge="show",_e="modal-static",me=".modal-dialog",pe=".modal-body",ve='[data-toggle="modal"]',ye='[data-dismiss="modal"]',Ee=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Ce=".sticky-top",Te=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(me),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var t=o.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){g(this._element).hasClass(de)&&(this._isTransitioning=!0);var n=g.Event(le.SHOW,{relatedTarget:t});g(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),g(this._element).on(le.CLICK_DISMISS,ye,function(t){return e.hide(t)}),g(this._dialog).on(le.MOUSEDOWN_DISMISS,function(){g(e._element).one(le.MOUSEUP_DISMISS,function(t){g(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=g.Event(le.HIDE);if(g(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=g(this._element).hasClass(de);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),g(document).off(le.FOCUSIN),g(this._element).removeClass(ge),g(this._element).off(le.CLICK_DISMISS),g(this._dialog).off(le.MOUSEDOWN_DISMISS),i){var o=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(o)}else this._hideModal()}}},t.dispose=function(){[window,this._element,this._dialog].forEach(function(t){return g(t).off(oe)}),g(document).off(le.FOCUSIN),g.removeData(this._element,ie),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=l({},se,{},t),_.typeCheckConfig(ne,t,ae),t},t._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var e=g.Event(le.HIDE_PREVENTED);if(g(this._element).trigger(e),e.defaultPrevented)return;this._element.classList.add(_e);var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){t._element.classList.remove(_e)}).emulateTransitionEnd(n),this._element.focus()}else this.hide()},t._showElement=function(t){var e=this,n=g(this._element).hasClass(de),i=this._dialog?this._dialog.querySelector(pe):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),g(this._dialog).hasClass(ce)&&i?i.scrollTop=0:this._element.scrollTop=0,n&&_.reflow(this._element),g(this._element).addClass(ge),this._config.focus&&this._enforceFocus();function o(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,g(e._element).trigger(r)}var r=g.Event(le.SHOWN,{relatedTarget:t});if(n){var s=_.getTransitionDurationFromElement(this._dialog);g(this._dialog).one(_.TRANSITION_END,o).emulateTransitionEnd(s)}else o()},t._enforceFocus=function(){var e=this;g(document).off(le.FOCUSIN).on(le.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===g(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?g(this._element).on(le.KEYDOWN_DISMISS,function(t){27===t.which&&e._triggerBackdropTransition()}):this._isShown||g(this._element).off(le.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?g(window).on(le.RESIZE,function(t){return e.handleUpdate(t)}):g(window).off(le.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop(function(){g(document.body).removeClass(fe),t._resetAdjustments(),t._resetScrollbar(),g(t._element).trigger(le.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&(g(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=g(this._element).hasClass(de)?de:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=ue,n&&this._backdrop.classList.add(n),g(this._backdrop).appendTo(document.body),g(this._element).on(le.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&e._triggerBackdropTransition()}),n&&_.reflow(this._backdrop),g(this._backdrop).addClass(ge),!t)return;if(!n)return void t();var i=_.getTransitionDurationFromElement(this._backdrop);g(this._backdrop).one(_.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){g(this._backdrop).removeClass(ge);var o=function(){e._removeBackdrop(),t&&t()};if(g(this._element).hasClass(de)){var r=_.getTransitionDurationFromElement(this._backdrop);g(this._backdrop).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o()}else t&&t()},t._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var o=this;if(this._isBodyOverflowing){var t=[].slice.call(document.querySelectorAll(Ee)),e=[].slice.call(document.querySelectorAll(Ce));g(t).each(function(t,e){var n=e.style.paddingRight,i=g(e).css("padding-right");g(e).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),g(e).each(function(t,e){var n=e.style.marginRight,i=g(e).css("margin-right");g(e).data("margin-right",n).css("margin-right",parseFloat(i)-o._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=g(document.body).css("padding-right");g(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}g(document.body).addClass(fe)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(Ee));g(t).each(function(t,e){var n=g(e).data("padding-right");g(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+Ce));g(e).each(function(t,e){var n=g(e).data("margin-right");"undefined"!=typeof n&&g(e).css("margin-right",n).removeData("margin-right")});var n=g(document.body).data("padding-right");g(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=he,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},o._jQueryInterface=function(n,i){return this.each(function(){var t=g(this).data(ie),e=l({},se,{},g(this).data(),{},"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),g(this).data(ie,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](i)}else e.show&&t.show(i)})},s(o,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return se}}]),o}();g(document).on(le.CLICK_DATA_API,ve,function(t){var e,n=this,i=_.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=g(e).data(ie)?"toggle":l({},g(e).data(),{},g(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=g(e).one(le.SHOW,function(t){t.isDefaultPrevented()||r.one(le.HIDDEN,function(){g(n).is(":visible")&&n.focus()})});Te._jQueryInterface.call(g(e),o,this)}),g.fn[ne]=Te._jQueryInterface,g.fn[ne].Constructor=Te,g.fn[ne].noConflict=function(){return g.fn[ne]=re,Te._jQueryInterface};var be=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Se={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},De=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,Ie=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function we(t,r,e){if(0===t.length)return t;if(e&&"function"==typeof e)return e(t);for(var n=(new window.DOMParser).parseFromString(t,"text/html"),s=Object.keys(r),a=[].slice.call(n.body.querySelectorAll("*")),i=function(t){var e=a[t],n=e.nodeName.toLowerCase();if(-1===s.indexOf(e.nodeName.toLowerCase()))return e.parentNode.removeChild(e),"continue";var i=[].slice.call(e.attributes),o=[].concat(r["*"]||[],r[n]||[]);i.forEach(function(t){!function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===be.indexOf(n)||Boolean(t.nodeValue.match(De)||t.nodeValue.match(Ie));for(var i=e.filter(function(t){return t instanceof RegExp}),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1}(t,o)&&e.removeAttribute(t.nodeName)})},o=0,l=a.length;o<l;o++)i(o);return n.body.innerHTML}var Ae="tooltip",Ne="bs.tooltip",Oe="."+Ne,ke=g.fn[Ae],Pe="bs-tooltip",Le=new RegExp("(^|\\s)"+Pe+"\\S+","g"),je=["sanitize","whiteList","sanitizeFn"],He={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Re={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},xe={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Se,popperConfig:null},Fe="show",Ue="out",We={HIDE:"hide"+Oe,HIDDEN:"hidden"+Oe,SHOW:"show"+Oe,SHOWN:"shown"+Oe,INSERTED:"inserted"+Oe,CLICK:"click"+Oe,FOCUSIN:"focusin"+Oe,FOCUSOUT:"focusout"+Oe,MOUSEENTER:"mouseenter"+Oe,MOUSELEAVE:"mouseleave"+Oe},qe="fade",Me="show",Ke=".tooltip-inner",Qe=".arrow",Be="hover",Ve="focus",Ye="click",ze="manual",Xe=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Me))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&g(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(qe);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,this._getPopperConfig(a)),g(o).addClass(Me),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===Ue&&e._leave(null,e)};if(g(this.tip).hasClass(qe)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){function e(){n._hoverState!==Fe&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),g(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()}var n=this,i=this.getTipElement(),o=g.Event(this.constructor.Event.HIDE);if(g(this.element).trigger(o),!o.isDefaultPrevented()){if(g(i).removeClass(Me),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[Ye]=!1,this._activeTrigger[Ve]=!1,this._activeTrigger[Be]=!1,g(this.tip).hasClass(qe)){var r=_.getTransitionDurationFromElement(i);g(i).one(_.TRANSITION_END,e).emulateTransitionEnd(r)}else e();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Pe+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(Ke)),this.getTitle()),g(t).removeClass(qe+" "+Me)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=we(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t=t||("function"==typeof this.config.title?this.config.title.call(this.element):this.config.title)},t._getPopperConfig=function(t){var e=this;return l({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Qe},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},{},this.config.popperConfig)},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,{},e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return Re[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==ze){var e=t===Be?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Be?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),this._hideModalHandler=function(){i.element&&i.hide()},g(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");!this.element.getAttribute("title")&&"string"==t||(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Ve:Be]=!0),g(e.getTipElement()).hasClass(Me)||e._hoverState===Fe?e._hoverState=Fe:(clearTimeout(e._timeout),e._hoverState=Fe,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Fe&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Ve:Be]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=Ue,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===Ue&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=g(this.element).data();return Object.keys(e).forEach(function(t){-1!==je.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,{},e,{},"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),_.typeCheckConfig(Ae,t,this.constructor.DefaultType),t.sanitize&&(t.template=we(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Le);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(qe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ne),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ne,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return xe}},{key:"NAME",get:function(){return Ae}},{key:"DATA_KEY",get:function(){return Ne}},{key:"Event",get:function(){return We}},{key:"EVENT_KEY",get:function(){return Oe}},{key:"DefaultType",get:function(){return He}}]),i}();g.fn[Ae]=Xe._jQueryInterface,g.fn[Ae].Constructor=Xe,g.fn[Ae].noConflict=function(){return g.fn[Ae]=ke,Xe._jQueryInterface};var $e="popover",Ge="bs.popover",Je="."+Ge,Ze=g.fn[$e],tn="bs-popover",en=new RegExp("(^|\\s)"+tn+"\\S+","g"),nn=l({},Xe.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),on=l({},Xe.DefaultType,{content:"(string|element|function)"}),rn="fade",sn="show",an=".popover-header",ln=".popover-body",cn={HIDE:"hide"+Je,HIDDEN:"hidden"+Je,SHOW:"show"+Je,SHOWN:"shown"+Je,INSERTED:"inserted"+Je,CLICK:"click"+Je,FOCUSIN:"focusin"+Je,FOCUSOUT:"focusout"+Je,MOUSEENTER:"mouseenter"+Je,MOUSELEAVE:"mouseleave"+Je},hn=function(t){function i(){return t.apply(this,arguments)||this}!function(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}(i,t);var e=i.prototype;return e.isWithContent=function(){return this.getTitle()||this._getContent()},e.addAttachmentClass=function(t){g(this.getTipElement()).addClass(tn+"-"+t)},e.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},e.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(an),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ln),e),t.removeClass(rn+" "+sn)},e._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},e._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(en);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(Ge),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(Ge,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return nn}},{key:"NAME",get:function(){return $e}},{key:"DATA_KEY",get:function(){return Ge}},{key:"Event",get:function(){return cn}},{key:"EVENT_KEY",get:function(){return Je}},{key:"DefaultType",get:function(){return on}}]),i}(Xe);g.fn[$e]=hn._jQueryInterface,g.fn[$e].Constructor=hn,g.fn[$e].noConflict=function(){return g.fn[$e]=Ze,hn._jQueryInterface};var un="scrollspy",fn="bs.scrollspy",dn="."+fn,gn=g.fn[un],_n={offset:10,method:"auto",target:""},mn={offset:"number",method:"string",target:"(string|element)"},pn={ACTIVATE:"activate"+dn,SCROLL:"scroll"+dn,LOAD_DATA_API:"load"+dn+".data-api"},vn="dropdown-item",yn="active",En='[data-spy="scroll"]',Cn=".nav, .list-group",Tn=".nav-link",bn=".nav-item",Sn=".list-group-item",Dn=".dropdown",In=".dropdown-item",wn=".dropdown-toggle",An="offset",Nn="position",On=function(){function n(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" "+Tn+","+this._config.target+" "+Sn+","+this._config.target+" "+In,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,g(this._scrollElement).on(pn.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var t=n.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?An:Nn,o="auto"===this._config.method?t:this._config.method,r=o===Nn?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=_.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[g(e)[o]().top+r,n]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},t.dispose=function(){g.removeData(this._element,fn),g(this._scrollElement).off(dn),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(t){if("string"!=typeof(t=l({},_n,{},"object"==typeof t&&t?t:{})).target){var e=g(t.target).attr("id");e||(e=_.getUID(un),g(t.target).attr("id",e)),t.target="#"+e}return _.typeCheckConfig(un,t,mn),t},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),n<=t){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(",").map(function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'}),n=g([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(vn)?(n.closest(Dn).find(wn).addClass(yn),n.addClass(yn)):(n.addClass(yn),n.parents(Cn).prev(Tn+", "+Sn).addClass(yn),n.parents(Cn).prev(bn).children(Tn).addClass(yn)),g(this._scrollElement).trigger(pn.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(yn)}).forEach(function(t){return t.classList.remove(yn)})},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(fn);if(t||(t=new n(this,"object"==typeof e&&e),g(this).data(fn,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"Default",get:function(){return _n}}]),n}();g(window).on(pn.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(En)),e=t.length;e--;){var n=g(t[e]);On._jQueryInterface.call(n,n.data())}}),g.fn[un]=On._jQueryInterface,g.fn[un].Constructor=On,g.fn[un].noConflict=function(){return g.fn[un]=gn,On._jQueryInterface};var kn="bs.tab",Pn="."+kn,Ln=g.fn.tab,jn={HIDE:"hide"+Pn,HIDDEN:"hidden"+Pn,SHOW:"show"+Pn,SHOWN:"shown"+Pn,CLICK_DATA_API:"click"+Pn+".data-api"},Hn="dropdown-menu",Rn="active",xn="disabled",Fn="fade",Un="show",Wn=".dropdown",qn=".nav, .list-group",Mn=".active",Kn="> li > .active",Qn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Bn=".dropdown-toggle",Vn="> .dropdown-menu .active",Yn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&g(this._element).hasClass(Rn)||g(this._element).hasClass(xn))){var t,i,e=g(this._element).closest(qn)[0],o=_.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?Kn:Mn;i=(i=g.makeArray(g(e).find(r)))[i.length-1]}var s=g.Event(jn.HIDE,{relatedTarget:this._element}),a=g.Event(jn.SHOW,{relatedTarget:i});if(i&&g(i).trigger(s),g(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(t=document.querySelector(o)),this._activate(this._element,e);var l=function(){var t=g.Event(jn.HIDDEN,{relatedTarget:n._element}),e=g.Event(jn.SHOWN,{relatedTarget:i});g(i).trigger(t),g(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){g.removeData(this._element,kn),this._element=null},t._activate=function(t,e,n){function i(){return o._transitionComplete(t,r,n)}var o=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?g(e).children(Mn):g(e).find(Kn))[0],s=n&&r&&g(r).hasClass(Fn);if(r&&s){var a=_.getTransitionDurationFromElement(r);g(r).removeClass(Un).one(_.TRANSITION_END,i).emulateTransitionEnd(a)}else i()},t._transitionComplete=function(t,e,n){if(e){g(e).removeClass(Rn);var i=g(e.parentNode).find(Vn)[0];i&&g(i).removeClass(Rn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(g(t).addClass(Rn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),_.reflow(t),t.classList.contains(Fn)&&t.classList.add(Un),t.parentNode&&g(t.parentNode).hasClass(Hn)){var o=g(t).closest(Wn)[0];if(o){var r=[].slice.call(o.querySelectorAll(Bn));g(r).addClass(Rn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(kn);if(e||(e=new i(this),t.data(kn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}}]),i}();g(document).on(jn.CLICK_DATA_API,Qn,function(t){t.preventDefault(),Yn._jQueryInterface.call(g(this),"show")}),g.fn.tab=Yn._jQueryInterface,g.fn.tab.Constructor=Yn,g.fn.tab.noConflict=function(){return g.fn.tab=Ln,Yn._jQueryInterface};var zn="toast",Xn="bs.toast",$n="."+Xn,Gn=g.fn[zn],Jn={CLICK_DISMISS:"click.dismiss"+$n,HIDE:"hide"+$n,HIDDEN:"hidden"+$n,SHOW:"show"+$n,SHOWN:"shown"+$n},Zn="fade",ti="hide",ei="show",ni="showing",ii={animation:"boolean",autohide:"boolean",delay:"number"},oi={animation:!0,autohide:!0,delay:500},ri='[data-dismiss="toast"]',si=function(){function i(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var t=i.prototype;return t.show=function(){var t=this,e=g.Event(Jn.SHOW);if(g(this._element).trigger(e),!e.isDefaultPrevented()){this._config.animation&&this._element.classList.add(Zn);var n=function(){t._element.classList.remove(ni),t._element.classList.add(ei),g(t._element).trigger(Jn.SHOWN),t._config.autohide&&(t._timeout=setTimeout(function(){t.hide()},t._config.delay))};if(this._element.classList.remove(ti),_.reflow(this._element),this._element.classList.add(ni),this._config.animation){var i=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},t.hide=function(){if(this._element.classList.contains(ei)){var t=g.Event(Jn.HIDE);g(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(ei)&&this._element.classList.remove(ei),g(this._element).off(Jn.CLICK_DISMISS),g.removeData(this._element,Xn),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},oi,{},g(this._element).data(),{},"object"==typeof t&&t?t:{}),_.typeCheckConfig(zn,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;g(this._element).on(Jn.CLICK_DISMISS,ri,function(){return t.hide()})},t._close=function(){function t(){e._element.classList.add(ti),g(e._element).trigger(Jn.HIDDEN)}var e=this;if(this._element.classList.remove(ei),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,t).emulateTransitionEnd(n)}else t()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(Xn);if(e||(e=new i(this,"object"==typeof n&&n),t.data(Xn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.4.1"}},{key:"DefaultType",get:function(){return ii}},{key:"Default",get:function(){return oi}}]),i}();g.fn[zn]=si._jQueryInterface,g.fn[zn].Constructor=si,g.fn[zn].noConflict=function(){return g.fn[zn]=Gn,si._jQueryInterface},t.Alert=v,t.Button=H,t.Carousel=ut,t.Collapse=wt,t.Dropdown=ee,t.Modal=Te,t.Popover=hn,t.Scrollspy=On,t.Tab=Yn,t.Toast=si,t.Tooltip=Xe,t.Util=_,Object.defineProperty(t,"__esModule",{value:!0})});
7
  //# sourceMappingURL=bootstrap.min.js.map
1
  /*!
2
+ * Bootstrap v4.5.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function o(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function s(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function a(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(e){s(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;function l(t){var n=this,i=!1;return e(this).one(c.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||c.triggerTransitionEnd(n)}),t),this}var c={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css("transition-duration"),i=e(t).css("transition-delay"),o=parseFloat(n),s=parseFloat(i);return o||s?(n=n.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(n)+parseFloat(i))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],s=e[i],r=s&&c.isElement(s)?"element":null===(a=s)||"undefined"==typeof a?""+a:{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+r+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};c.jQueryDetection(),e.fn.emulateTransitionEnd=l,e.event.special[c.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var h="alert",u=e.fn[h],d=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=c.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=c.getTransitionDurationFromElement(t);e(t).one(c.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',d._handleDismiss(new d)),e.fn[h]=d._jQueryInterface,e.fn[h].Constructor=d,e.fn[h].noConflict=function(){return e.fn[h]=u,d._jQueryInterface};var f=e.fn.button,g=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var s=i.querySelector(".active");s&&e(s).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"LABEL"===i.tagName&&o&&"checkbox"===o.type&&t.preventDefault(),g._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var s=0,r=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;s<r;s++){var a=t[s];"true"===a.getAttribute("aria-pressed")?a.classList.add("active"):a.classList.remove("active")}})),e.fn.button=g._jQueryInterface,e.fn.button.Constructor=g,e.fn.button.noConflict=function(){return e.fn.button=f,g._jQueryInterface};var m="carousel",p=".bs.carousel",_=e.fn[m],v={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},b={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},y={TOUCH:"touch",PEN:"pen"},E=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(c.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(p),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=a(a({},v),t),c.typeCheckConfig(m,t,b),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&y[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&y[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),s=this._items.length-1;if((i&&0===o||n&&o===s)&&!this._config.wrap)return e;var r=(o+("prev"===t?-1:1))%this._items.length;return-1===r?this._items[this._items.length-1]:this._items[r]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),s=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(s),s},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,s,r=this,a=this._element.querySelector(".active.carousel-item"),l=this._getItemIndex(a),h=n||a&&this._getItemByDirection(t,a),u=this._getItemIndex(h),d=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",s="left"):(i="carousel-item-right",o="carousel-item-prev",s="right"),h&&e(h).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(h,s).isDefaultPrevented()&&a&&h){this._isSliding=!0,d&&this.pause(),this._setActiveIndicatorElement(h);var f=e.Event("slid.bs.carousel",{relatedTarget:h,direction:s,from:l,to:u});if(e(this._element).hasClass("slide")){e(h).addClass(o),c.reflow(h),e(a).addClass(i),e(h).addClass(i);var g=parseInt(h.getAttribute("data-interval"),10);g?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=g):this._config.interval=this._config.defaultInterval||this._config.interval;var m=c.getTransitionDurationFromElement(a);e(a).one(c.TRANSITION_END,(function(){e(h).removeClass(i+" "+o).addClass("active"),e(a).removeClass("active "+o+" "+i),r._isSliding=!1,setTimeout((function(){return e(r._element).trigger(f)}),0)})).emulateTransitionEnd(m)}else e(a).removeClass("active"),e(h).addClass("active"),this._isSliding=!1,e(this._element).trigger(f);d&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=a(a({},v),e(this).data());"object"==typeof n&&(o=a(a({},o),n));var s="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof s){if("undefined"==typeof i[s])throw new TypeError('No method named "'+s+'"');i[s]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=c.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var s=a(a({},e(o).data()),e(this).data()),r=this.getAttribute("data-slide-to");r&&(s.interval=!1),t._jQueryInterface.call(e(o),s),r&&e(o).data("bs.carousel").to(r),n.preventDefault()}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return v}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",E._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n<i;n++){var o=e(t[n]);E._jQueryInterface.call(o,o.data())}})),e.fn[m]=E._jQueryInterface,e.fn[m].Constructor=E,e.fn[m].noConflict=function(){return e.fn[m]=_,E._jQueryInterface};var w="collapse",T=e.fn[w],C={toggle:!0,parent:""},S={toggle:"boolean",parent:"(string|element)"},D=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var s=n[i],r=c.getSelectorFromElement(s),a=[].slice.call(document.querySelectorAll(r)).filter((function(e){return e===t}));null!==r&&a.length>0&&(this._selector=r,this._triggerArray.push(s))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var s=e.Event("show.bs.collapse");if(e(this._element).trigger(s),!s.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var r=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[r]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var a="scroll"+(r[0].toUpperCase()+r.slice(1)),l=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[r]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(l),this._element.style[r]=this._element[a]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",c.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var s=0;s<o;s++){var r=this._triggerArray[s],a=c.getSelectorFromElement(r);if(null!==a)e([].slice.call(document.querySelectorAll(a))).hasClass("show")||e(r).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[i]="";var l=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,(function(){t.setTransitioning(!1),e(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(l)}}},n.setTransitioning=function(t){this._isTransitioning=t},n.dispose=function(){e.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},n._getConfig=function(t){return(t=a(a({},C),t)).toggle=Boolean(t.toggle),c.typeCheckConfig(w,t,S),t},n._getDimension=function(){return e(this._element).hasClass("width")?"width":"height"},n._getParent=function(){var n,i=this;c.isElement(this._config.parent)?(n=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(n=this._config.parent[0])):n=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',s=[].slice.call(n.querySelectorAll(o));return e(s).each((function(e,n){i._addAriaAndCollapsedClass(t._getTargetFromElement(n),[n])})),n},n._addAriaAndCollapsedClass=function(t,n){var i=e(t).hasClass("show");n.length&&e(n).toggleClass("collapsed",!i).attr("aria-expanded",i)},t._getTargetFromElement=function(t){var e=c.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.collapse"),s=a(a(a({},C),i.data()),"object"==typeof n&&n?n:{});if(!o&&s.toggle&&"string"==typeof n&&/show|hide/.test(n)&&(s.toggle=!1),o||(o=new t(this,s),i.data("bs.collapse",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return C}}]),t}();e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=e(this),i=c.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(i));e(o).each((function(){var t=e(this),i=t.data("bs.collapse")?"toggle":n.data();D._jQueryInterface.call(t,i)}))})),e.fn[w]=D._jQueryInterface,e.fn[w].Constructor=D,e.fn[w].noConflict=function(){return e.fn[w]=T,D._jQueryInterface};var k="dropdown",N=e.fn[k],A=new RegExp("38|40|27"),I={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},O={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},j=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var i=t.prototype;return i.toggle=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")){var n=e(this._menu).hasClass("show");t._clearMenus(),n||this.show(!0)}},i.show=function(i){if(void 0===i&&(i=!1),!(this._element.disabled||e(this._element).hasClass("disabled")||e(this._menu).hasClass("show"))){var o={relatedTarget:this._element},s=e.Event("show.bs.dropdown",o),r=t._getParentFromElement(this._element);if(e(r).trigger(s),!s.isDefaultPrevented()){if(!this._inNavbar&&i){if("undefined"==typeof n)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var a=this._element;"parent"===this._config.reference?a=r:c.isElement(this._config.reference)&&(a=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(a=this._config.reference[0])),"scrollParent"!==this._config.boundary&&e(r).addClass("position-static"),this._popper=new n(a,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===e(r).closest(".navbar-nav").length&&e(document.body).children().on("mouseover",null,e.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),e(this._menu).toggleClass("show"),e(r).toggleClass("show").trigger(e.Event("shown.bs.dropdown",o))}}},i.hide=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")&&e(this._menu).hasClass("show")){var n={relatedTarget:this._element},i=e.Event("hide.bs.dropdown",n),o=t._getParentFromElement(this._element);e(o).trigger(i),i.isDefaultPrevented()||(this._popper&&this._popper.destroy(),e(this._menu).toggleClass("show"),e(o).toggleClass("show").trigger(e.Event("hidden.bs.dropdown",n)))}},i.dispose=function(){e.removeData(this._element,"bs.dropdown"),e(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},i.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},i._addEventListeners=function(){var t=this;e(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},i._getConfig=function(t){return t=a(a(a({},this.constructor.Default),e(this._element).data()),t),c.typeCheckConfig(k,t,this.constructor.DefaultType),t},i._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},i._getPlacement=function(){var t=e(this._element.parentNode),n="bottom-start";return t.hasClass("dropup")?n=e(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?n="right-start":t.hasClass("dropleft")?n="left-start":e(this._menu).hasClass("dropdown-menu-right")&&(n="bottom-end"),n},i._detectNavbar=function(){return e(this._element).closest(".navbar").length>0},i._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=a(a({},e.offsets),t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},i._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),a(a({},t),this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,s=i.length;o<s;o++){var r=t._getParentFromElement(i[o]),a=e(i[o]).data("bs.dropdown"),l={relatedTarget:i[o]};if(n&&"click"===n.type&&(l.clickEvent=n),a){var c=a._menu;if(e(r).hasClass("show")&&!(n&&("click"===n.type&&/input|textarea/i.test(n.target.tagName)||"keyup"===n.type&&9===n.which)&&e.contains(r,n.target))){var h=e.Event("hide.bs.dropdown",l);e(r).trigger(h),h.isDefaultPrevented()||("ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),i[o].setAttribute("aria-expanded","false"),a._popper&&a._popper.destroy(),e(c).removeClass("show"),e(r).removeClass("show").trigger(e.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=c.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(n){if(!(/input|textarea/i.test(n.target.tagName)?32===n.which||27!==n.which&&(40!==n.which&&38!==n.which||e(n.target).closest(".dropdown-menu").length):!A.test(n.which))&&!this.disabled&&!e(this).hasClass("disabled")){var i=t._getParentFromElement(this),o=e(i).hasClass("show");if(o||27!==n.which){if(n.preventDefault(),n.stopPropagation(),!o||o&&(27===n.which||32===n.which))return 27===n.which&&e(i.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void e(this).trigger("click");var s=[].slice.call(i.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return e(t).is(":visible")}));if(0!==s.length){var r=s.indexOf(n.target);38===n.which&&r>0&&r--,40===n.which&&r<s.length-1&&r++,r<0&&(r=0),s[r].focus()}}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return I}},{key:"DefaultType",get:function(){return O}}]),t}();e(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',j._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",j._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",j._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),j._jQueryInterface.call(e(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),e.fn[k]=j._jQueryInterface,e.fn[k].Constructor=j,e.fn[k].noConflict=function(){return e.fn[k]=N,j._jQueryInterface};var P=e.fn.modal,x={backdrop:!0,keyboard:!0,focus:!0,show:!0},L={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},R=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var n=t.prototype;return n.toggle=function(t){return this._isShown?this.hide():this.show(t)},n.show=function(t){var n=this;if(!this._isShown&&!this._isTransitioning){e(this._element).hasClass("fade")&&(this._isTransitioning=!0);var i=e.Event("show.bs.modal",{relatedTarget:t});e(this._element).trigger(i),this._isShown||i.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),e(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return n.hide(t)})),e(this._dialog).on("mousedown.dismiss.bs.modal",(function(){e(n._element).one("mouseup.dismiss.bs.modal",(function(t){e(t.target).is(n._element)&&(n._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return n._showElement(t)})))}},n.hide=function(t){var n=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var i=e.Event("hide.bs.modal");if(e(this._element).trigger(i),this._isShown&&!i.isDefaultPrevented()){this._isShown=!1;var o=e(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),e(document).off("focusin.bs.modal"),e(this._element).removeClass("show"),e(this._element).off("click.dismiss.bs.modal"),e(this._dialog).off("mousedown.dismiss.bs.modal"),o){var s=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,(function(t){return n._hideModal(t)})).emulateTransitionEnd(s)}else this._hideModal()}}},n.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return e(t).off(".bs.modal")})),e(document).off("focusin.bs.modal"),e.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},n.handleUpdate=function(){this._adjustDialog()},n._getConfig=function(t){return t=a(a({},x),t),c.typeCheckConfig("modal",t,L),t},n._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var n=e.Event("hidePrevented.bs.modal");if(e(this._element).trigger(n),n.defaultPrevented)return;this._element.classList.add("modal-static");var i=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,(function(){t._element.classList.remove("modal-static")})).emulateTransitionEnd(i),this._element.focus()}else this.hide()},n._showElement=function(t){var n=this,i=e(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),e(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,i&&c.reflow(this._element),e(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var s=e.Event("shown.bs.modal",{relatedTarget:t}),r=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(s)};if(i){var a=c.getTransitionDurationFromElement(this._dialog);e(this._dialog).one(c.TRANSITION_END,r).emulateTransitionEnd(a)}else r()},n._enforceFocus=function(){var t=this;e(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()}))},n._setEscapeEvent=function(){var t=this;this._isShown?e(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||e(this._element).off("keydown.dismiss.bs.modal")},n._setResizeEvent=function(){var t=this;this._isShown?e(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):e(window).off("resize.bs.modal")},n._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop((function(){e(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger("hidden.bs.modal")}))},n._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},n._showBackdrop=function(t){var n=this,i=e(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add(i),e(this._backdrop).appendTo(document.body),e(this._element).on("click.dismiss.bs.modal",(function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&n._triggerBackdropTransition()})),i&&c.reflow(this._backdrop),e(this._backdrop).addClass("show"),!t)return;if(!i)return void t();var o=c.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(c.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass("show");var s=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass("fade")){var r=c.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(c.TRANSITION_END,s).emulateTransitionEnd(r)}else s()}else t&&t()},n._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},n._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var n=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),i=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(n,i){var o=i.style.paddingRight,s=e(i).css("padding-right");e(i).data("padding-right",o).css("padding-right",parseFloat(s)+t._scrollbarWidth+"px")})),e(i).each((function(n,i){var o=i.style.marginRight,s=e(i).css("margin-right");e(i).data("margin-right",o).css("margin-right",parseFloat(s)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,s=e(document.body).css("padding-right");e(document.body).data("padding-right",o).css("padding-right",parseFloat(s)+this._scrollbarWidth+"px")}e(document.body).addClass("modal-open")},n._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));e(t).each((function(t,n){var i=e(n).data("padding-right");e(n).removeData("padding-right"),n.style.paddingRight=i||""}));var n=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(t,n){var i=e(n).data("margin-right");"undefined"!=typeof i&&e(n).css("margin-right",i).removeData("margin-right")}));var i=e(document.body).data("padding-right");e(document.body).removeData("padding-right"),document.body.style.paddingRight=i||""},n._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(n,i){return this.each((function(){var o=e(this).data("bs.modal"),s=a(a(a({},x),e(this).data()),"object"==typeof n&&n?n:{});if(o||(o=new t(this,s),e(this).data("bs.modal",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](i)}else s.show&&o.show(i)}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return x}}]),t}();e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var n,i=this,o=c.getSelectorFromElement(this);o&&(n=document.querySelector(o));var s=e(n).data("bs.modal")?"toggle":a(a({},e(n).data()),e(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=e(n).one("show.bs.modal",(function(t){t.isDefaultPrevented()||r.one("hidden.bs.modal",(function(){e(i).is(":visible")&&i.focus()}))}));R._jQueryInterface.call(e(n),s,this)})),e.fn.modal=R._jQueryInterface,e.fn.modal.Constructor=R,e.fn.modal.noConflict=function(){return e.fn.modal=P,R._jQueryInterface};var q=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],F={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Q=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,B=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function H(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),s=[].slice.call(i.body.querySelectorAll("*")),r=function(t,n){var i=s[t],r=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var a=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[r]||[]);a.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===q.indexOf(n)||Boolean(t.nodeValue.match(Q)||t.nodeValue.match(B));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,s=i.length;o<s;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},a=0,l=s.length;a<l;a++)r(a);return i.body.innerHTML}var U="tooltip",M=e.fn[U],W=new RegExp("(^|\\s)bs-tooltip\\S+","g"),V=["sanitize","whiteList","sanitizeFn"],z={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},K={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},X={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:F,popperConfig:null},Y={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},$=function(){function t(t,e){if("undefined"==typeof n)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var i=t.prototype;return i.enable=function(){this._isEnabled=!0},i.disable=function(){this._isEnabled=!1},i.toggleEnabled=function(){this._isEnabled=!this._isEnabled},i.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},i.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},i.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var o=c.findShadowRoot(this.element),s=e.contains(null!==o?o:this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!s)return;var r=this.getTipElement(),a=c.getUID(this.constructor.NAME);r.setAttribute("id",a),this.element.setAttribute("aria-describedby",a),this.setContent(),this.config.animation&&e(r).addClass("fade");var l="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,h=this._getAttachment(l);this.addAttachmentClass(h);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,r,this._getPopperConfig(h)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var d=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=c.getTransitionDurationFromElement(this.tip);e(this.tip).one(c.TRANSITION_END,d).emulateTransitionEnd(f)}else d()}},i.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),s=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var r=c.getTransitionDurationFromElement(i);e(i).one(c.TRANSITION_END,s).emulateTransitionEnd(r)}else s();this._hoverState=""}},i.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},i.isWithContent=function(){return Boolean(this.getTitle())},i.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},i.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},i.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},i.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=H(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},i.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},i._getPopperConfig=function(t){var e=this;return a(a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),this.config.popperConfig)},i._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a(a({},e.offsets),t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},i._getContainer=function(){return!1===this.config.container?document.body:c.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},i._getAttachment=function(t){return K[t.toUpperCase()]},i._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a(a({},this.config),{},{trigger:"manual",selector:""}):this._fixTitle()},i._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},i._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},i._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},i._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},i._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==V.indexOf(t)&&delete n[t]})),"number"==typeof(t=a(a(a({},this.constructor.Default),n),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),c.typeCheckConfig(U,t,this.constructor.DefaultType),t.sanitize&&(t.template=H(t.template,t.whiteList,t.sanitizeFn)),t},i._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},i._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(W);null!==n&&n.length&&t.removeClass(n.join(""))},i._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},i._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return X}},{key:"NAME",get:function(){return U}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Y}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return z}}]),t}();e.fn[U]=$._jQueryInterface,e.fn[U].Constructor=$,e.fn[U].noConflict=function(){return e.fn[U]=M,$._jQueryInterface};var J="popover",G=e.fn[J],Z=new RegExp("(^|\\s)bs-popover\\S+","g"),tt=a(a({},$.Default),{},{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),et=a(a({},$.DefaultType),{},{content:"(string|element|function)"}),nt={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},it=function(t){var n,i;function s(){return t.apply(this,arguments)||this}i=t,(n=s).prototype=Object.create(i.prototype),n.prototype.constructor=n,n.__proto__=i;var r=s.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},r.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(Z);null!==n&&n.length>0&&t.removeClass(n.join(""))},s._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new s(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},o(s,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return tt}},{key:"NAME",get:function(){return J}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return nt}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return et}}]),s}($);e.fn[J]=it._jQueryInterface,e.fn[J].Constructor=it,e.fn[J].noConflict=function(){return e.fn[J]=G,it._jQueryInterface};var ot="scrollspy",st=e.fn[ot],rt={offset:10,method:"auto",target:""},at={offset:"number",method:"string",target:"(string|element)"},lt=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,s=c.getSelectorFromElement(t);if(s&&(n=document.querySelector(s)),n){var r=n.getBoundingClientRect();if(r.width||r.height)return[e(n)[i]().top+o,s]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=a(a({},rt),"object"==typeof t&&t?t:{})).target&&c.isElement(t.target)){var n=e(t.target).attr("id");n||(n=c.getUID(ot),e(t.target).attr("id",n)),t.target="#"+n}return c.typeCheckConfig(ot,t,at),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},n._activate=function(t){this._activeTarget=t,this._clear();var n=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),i=e([].slice.call(document.querySelectorAll(n.join(","))));i.hasClass("dropdown-item")?(i.closest(".dropdown").find(".dropdown-toggle").addClass("active"),i.addClass("active")):(i.addClass("active"),i.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),i.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),e(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},n._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.scrollspy");if(i||(i=new t(this,"object"==typeof n&&n),e(this).data("bs.scrollspy",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return rt}}]),t}();e(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),n=t.length;n--;){var i=e(t[n]);lt._jQueryInterface.call(i,i.data())}})),e.fn[ot]=lt._jQueryInterface,e.fn[ot].Constructor=lt,e.fn[ot].noConflict=function(){return e.fn[ot]=st,lt._jQueryInterface};var ct=e.fn.tab,ht=function(){function t(t){this._element=t}var n=t.prototype;return n.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass("active")||e(this._element).hasClass("disabled"))){var n,i,o=e(this._element).closest(".nav, .list-group")[0],s=c.getSelectorFromElement(this._element);if(o){var r="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";i=(i=e.makeArray(e(o).find(r)))[i.length-1]}var a=e.Event("hide.bs.tab",{relatedTarget:this._element}),l=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(a),e(this._element).trigger(l),!l.isDefaultPrevented()&&!a.isDefaultPrevented()){s&&(n=document.querySelector(s)),this._activate(this._element,o);var h=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,h):h()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,s=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],r=i&&s&&e(s).hasClass("fade"),a=function(){return o._transitionComplete(t,s,i)};if(s&&r){var l=c.getTransitionDurationFromElement(s);e(s).removeClass("show").one(c.TRANSITION_END,a).emulateTransitionEnd(l)}else a()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),c.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var s=e(t).closest(".dropdown")[0];if(s){var r=[].slice.call(s.querySelectorAll(".dropdown-toggle"));e(r).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),ht._jQueryInterface.call(e(this),"show")})),e.fn.tab=ht._jQueryInterface,e.fn.tab.Constructor=ht,e.fn.tab.noConflict=function(){return e.fn.tab=ct,ht._jQueryInterface};var ut=e.fn.toast,dt={animation:"boolean",autohide:"boolean",delay:"number"},ft={animation:!0,autohide:!0,delay:500},gt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),c.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=a(a(a({},ft),e(this._element).data()),"object"==typeof t&&t?t:{}),c.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=c.getTransitionDurationFromElement(this._element);e(this._element).one(c.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"DefaultType",get:function(){return dt}},{key:"Default",get:function(){return ft}}]),t}();e.fn.toast=gt._jQueryInterface,e.fn.toast.Constructor=gt,e.fn.toast.noConflict=function(){return e.fn.toast=ut,gt._jQueryInterface},t.Alert=d,t.Button=g,t.Carousel=E,t.Collapse=D,t.Dropdown=j,t.Modal=R,t.Popover=it,t.Scrollspy=lt,t.Tab=ht,t.Toast=gt,t.Tooltip=$,t.Util=c,Object.defineProperty(t,"__esModule",{value:!0})}));
7
  //# sourceMappingURL=bootstrap.min.js.map
resources/js/global-plugin.js CHANGED
@@ -54,7 +54,7 @@ var iCWP_WPSF_StandardAjax = new function () {
54
 
55
  if ( oResponse.data.page_reload ) {
56
  setTimeout( function () {
57
- location.reload( true );
58
  }, 2000 );
59
  }
60
  else {
54
 
55
  if ( oResponse.data.page_reload ) {
56
  setTimeout( function () {
57
+ location.reload();
58
  }, 2000 );
59
  }
60
  else {
resources/js/shield-scans.js CHANGED
@@ -1,5 +1,3 @@
1
- /**
2
- */
3
  jQuery.fn.icwpWpsfScansStart = function ( aOptions ) {
4
 
5
  let startScans = function ( evt ) {
 
 
1
  jQuery.fn.icwpWpsfScansStart = function ( aOptions ) {
2
 
3
  let startScans = function ( evt ) {
resources/js/shield-u2f-admin.js ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ if ( typeof icwp_wpsf_vars_u2f !== 'undefined' ) {
2
+ jQuery( document ).ready( function () {
3
+
4
+ let $oBtnReg = jQuery( 'button#icwp_u2f_key_reg' );
5
+ let $oU2fStatus = jQuery( '#icwp_u2f_section p.description' );
6
+ let oLabelRegEx = new RegExp( "^[a-zA-Z0-9_-]{1,16}$" );
7
+
8
+ u2fApi.isSupported()
9
+ .then( function ( supported ) {
10
+ if ( supported ) {
11
+ $oBtnReg.prop( 'disabled', false );
12
+ $oBtnReg.on( 'click', function () {
13
+ let label = prompt( icwp_wpsf_vars_u2f.strings.prompt_dialog, "<Insert Label>" );
14
+ if ( typeof label === 'undefined' || label === null ) {
15
+ alert( icwp_wpsf_vars_u2f.strings.err_no_label )
16
+ }
17
+ else if ( !oLabelRegEx.test( label ) ) {
18
+ alert( icwp_wpsf_vars_u2f.strings.err_invalid_label )
19
+ }
20
+ else {
21
+ u2fApi.register( icwp_wpsf_vars_u2f.reg_request, icwp_wpsf_vars_u2f.signs )
22
+ .then( function ( response ) {
23
+ response.label = label;
24
+ jQuery( '#icwp_wpsf_new_u2f_response' ).val( JSON.stringify( response ) )
25
+ $oU2fStatus.text( icwp_wpsf_vars_u2f.strings.do_save );
26
+ $oU2fStatus.css( 'font-weight', 'bolder' )
27
+ .css( 'color', 'green' );
28
+ } )
29
+ .catch( function ( response ) {
30
+ console.log( response );
31
+ $oU2fStatus.text( icwp_wpsf_vars_u2f.strings.failed );
32
+ $oU2fStatus.css( 'font-weight', 'bolder' )
33
+ .css( 'color', 'red' );
34
+ } );
35
+ }
36
+ } );
37
+ }
38
+ else {
39
+ $oBtnReg.prop( 'disabled', true );
40
+ $oU2fStatus.text( icwp_wpsf_vars_u2f.strings.not_supported );
41
+ }
42
+ } )
43
+ .catch();
44
+
45
+ } );
46
+
47
+
48
+ jQuery.fn.icwpWpsfProfileU2f = function () {
49
+
50
+ var initialise = function () {
51
+ jQuery( document ).ready( function () {
52
+ jQuery( 'a.icwpWpsf-U2FRemove' ).on( 'click', function ( evt ) {
53
+ evt.preventDefault();
54
+ icwp_wpsf_vars_u2f.ajax.u2f_remove.u2fid =
55
+ jQuery( evt.target ).data( 'u2fid' );
56
+ iCWP_WPSF_StandardAjax.send_ajax_req( icwp_wpsf_vars_u2f.ajax.u2f_remove );
57
+ return false;
58
+ } )
59
+ } );
60
+ };
61
+
62
+ initialise();
63
+ return this;
64
+ };
65
+
66
+ jQuery( document ).icwpWpsfProfileU2f();
67
+ }
resources/js/shield-userprofile.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ if ( typeof icwp_wpsf_vars_profileyubikey !== 'undefined' ) {
2
+ jQuery.fn.icwpWpsfProfileYubikey = function () {
3
+
4
+ var initialise = function () {
5
+ jQuery( document ).ready( function () {
6
+ jQuery( 'a.icwpWpsf-YubikeyRemove' ).on( 'click', function ( evt ) {
7
+ evt.preventDefault();
8
+ icwp_wpsf_vars_profileyubikey.yubikey_remove.yubikeyid =
9
+ jQuery( evt.target ).data( 'yubikeyid' );
10
+ iCWP_WPSF_StandardAjax.send_ajax_req( icwp_wpsf_vars_profileyubikey.yubikey_remove );
11
+ return false;
12
+ } )
13
+ } );
14
+ };
15
+
16
+ initialise();
17
+ return this;
18
+ };
19
+
20
+ jQuery( document ).icwpWpsfProfileYubikey();
21
+ }
resources/js/u2f-bundle.js ADDED
@@ -0,0 +1,830 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function () {
2
+ 'use strict';
3
+
4
+ //Copyright 2014-2015 Google Inc. All rights reserved.
5
+
6
+ //Use of this source code is governed by a BSD-style
7
+ //license that can be found in the LICENSE file or at
8
+ //https://developers.google.com/open-source/licenses/bsd
9
+
10
+ /**
11
+ * @fileoverview The U2F api.
12
+ */
13
+ // 'use strict';
14
+
15
+
16
+ /**
17
+ * Namespace for the U2F api.
18
+ * @type {Object}
19
+ */
20
+ var u2f = u2f || {};
21
+
22
+ const chromeApi = u2f; // Adaptation for u2f-api package
23
+
24
+ /**
25
+ * FIDO U2F Javascript API Version
26
+ * @number
27
+ */
28
+ var js_api_version;
29
+
30
+ /**
31
+ * The U2F extension id
32
+ * @const {string}
33
+ */
34
+ // The Chrome packaged app extension ID.
35
+ // Uncomment this if you want to deploy a server instance that uses
36
+ // the package Chrome app and does not require installing the U2F Chrome extension.
37
+ u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd';
38
+ // The U2F Chrome extension ID.
39
+ // Uncomment this if you want to deploy a server instance that uses
40
+ // the U2F Chrome extension to authenticate.
41
+ // u2f.EXTENSION_ID = 'pfboblefjcgdjicmnffhdgionmgcdmne';
42
+
43
+
44
+ /**
45
+ * Message types for messsages to/from the extension
46
+ * @const
47
+ * @enum {string}
48
+ */
49
+ u2f.MessageTypes = {
50
+ 'U2F_REGISTER_REQUEST': 'u2f_register_request',
51
+ 'U2F_REGISTER_RESPONSE': 'u2f_register_response',
52
+ 'U2F_SIGN_REQUEST': 'u2f_sign_request',
53
+ 'U2F_SIGN_RESPONSE': 'u2f_sign_response',
54
+ 'U2F_GET_API_VERSION_REQUEST': 'u2f_get_api_version_request',
55
+ 'U2F_GET_API_VERSION_RESPONSE': 'u2f_get_api_version_response'
56
+ };
57
+
58
+
59
+ /**
60
+ * Response status codes
61
+ * @const
62
+ * @enum {number}
63
+ */
64
+ u2f.ErrorCodes = {
65
+ 'OK': 0,
66
+ 'OTHER_ERROR': 1,
67
+ 'BAD_REQUEST': 2,
68
+ 'CONFIGURATION_UNSUPPORTED': 3,
69
+ 'DEVICE_INELIGIBLE': 4,
70
+ 'TIMEOUT': 5
71
+ };
72
+
73
+
74
+ //Low level MessagePort API support
75
+
76
+ /**
77
+ * Sets up a MessagePort to the U2F extension using the
78
+ * available mechanisms.
79
+ * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback
80
+ */
81
+ u2f.getMessagePort = function(callback) {
82
+ if (typeof chrome != 'undefined' && chrome.runtime) {
83
+ // The actual message here does not matter, but we need to get a reply
84
+ // for the callback to run. Thus, send an empty signature request
85
+ // in order to get a failure response.
86
+ var msg = {
87
+ type: u2f.MessageTypes.U2F_SIGN_REQUEST,
88
+ signRequests: []
89
+ };
90
+ chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() {
91
+ if (!chrome.runtime.lastError) {
92
+ // We are on a whitelisted origin and can talk directly
93
+ // with the extension.
94
+ u2f.getChromeRuntimePort_(callback);
95
+ } else {
96
+ // chrome.runtime was available, but we couldn't message
97
+ // the extension directly, use iframe
98
+ u2f.getIframePort_(callback);
99
+ }
100
+ });
101
+ } else if (u2f.isAndroidChrome_()) {
102
+ u2f.getAuthenticatorPort_(callback);
103
+ } else if (u2f.isIosChrome_()) {
104
+ u2f.getIosPort_(callback);
105
+ } else {
106
+ // chrome.runtime was not available at all, which is normal
107
+ // when this origin doesn't have access to any extensions.
108
+ u2f.getIframePort_(callback);
109
+ }
110
+ };
111
+
112
+ /**
113
+ * Detect chrome running on android based on the browser's useragent.
114
+ * @private
115
+ */
116
+ u2f.isAndroidChrome_ = function() {
117
+ var userAgent = navigator.userAgent;
118
+ return userAgent.indexOf('Chrome') != -1 &&
119
+ userAgent.indexOf('Android') != -1;
120
+ };
121
+
122
+ /**
123
+ * Detect chrome running on iOS based on the browser's platform.
124
+ * @private
125
+ */
126
+ u2f.isIosChrome_ = function() {
127
+ return ["iPhone", "iPad", "iPod"].indexOf(navigator.platform) > -1;
128
+ };
129
+
130
+ /**
131
+ * Connects directly to the extension via chrome.runtime.connect.
132
+ * @param {function(u2f.WrappedChromeRuntimePort_)} callback
133
+ * @private
134
+ */
135
+ u2f.getChromeRuntimePort_ = function(callback) {
136
+ var port = chrome.runtime.connect(u2f.EXTENSION_ID,
137
+ {'includeTlsChannelId': true});
138
+ setTimeout(function() {
139
+ callback(new u2f.WrappedChromeRuntimePort_(port));
140
+ }, 0);
141
+ };
142
+
143
+ /**
144
+ * Return a 'port' abstraction to the Authenticator app.
145
+ * @param {function(u2f.WrappedAuthenticatorPort_)} callback
146
+ * @private
147
+ */
148
+ u2f.getAuthenticatorPort_ = function(callback) {
149
+ setTimeout(function() {
150
+ callback(new u2f.WrappedAuthenticatorPort_());
151
+ }, 0);
152
+ };
153
+
154
+ /**
155
+ * Return a 'port' abstraction to the iOS client app.
156
+ * @param {function(u2f.WrappedIosPort_)} callback
157
+ * @private
158
+ */
159
+ u2f.getIosPort_ = function(callback) {
160
+ setTimeout(function() {
161
+ callback(new u2f.WrappedIosPort_());
162
+ }, 0);
163
+ };
164
+
165
+ /**
166
+ * A wrapper for chrome.runtime.Port that is compatible with MessagePort.
167
+ * @param {Port} port
168
+ * @constructor
169
+ * @private
170
+ */
171
+ u2f.WrappedChromeRuntimePort_ = function(port) {
172
+ this.port_ = port;
173
+ };
174
+
175
+ /**
176
+ * Format and return a sign request compliant with the JS API version supported by the extension.
177
+ * @param {Array<u2f.SignRequest>} signRequests
178
+ * @param {number} timeoutSeconds
179
+ * @param {number} reqId
180
+ * @return {Object}
181
+ */
182
+ u2f.formatSignRequest_ =
183
+ function(appId, challenge, registeredKeys, timeoutSeconds, reqId) {
184
+ if (js_api_version === undefined || js_api_version < 1.1) {
185
+ // Adapt request to the 1.0 JS API
186
+ var signRequests = [];
187
+ for (var i = 0; i < registeredKeys.length; i++) {
188
+ signRequests[i] = {
189
+ version: registeredKeys[i].version,
190
+ challenge: challenge,
191
+ keyHandle: registeredKeys[i].keyHandle,
192
+ appId: appId
193
+ };
194
+ }
195
+ return {
196
+ type: u2f.MessageTypes.U2F_SIGN_REQUEST,
197
+ signRequests: signRequests,
198
+ timeoutSeconds: timeoutSeconds,
199
+ requestId: reqId
200
+ };
201
+ }
202
+ // JS 1.1 API
203
+ return {
204
+ type: u2f.MessageTypes.U2F_SIGN_REQUEST,
205
+ appId: appId,
206
+ challenge: challenge,
207
+ registeredKeys: registeredKeys,
208
+ timeoutSeconds: timeoutSeconds,
209
+ requestId: reqId
210
+ };
211
+ };
212
+
213
+ /**
214
+ * Format and return a register request compliant with the JS API version supported by the extension..
215
+ * @param {Array<u2f.SignRequest>} signRequests
216
+ * @param {Array<u2f.RegisterRequest>} signRequests
217
+ * @param {number} timeoutSeconds
218
+ * @param {number} reqId
219
+ * @return {Object}
220
+ */
221
+ u2f.formatRegisterRequest_ =
222
+ function(appId, registeredKeys, registerRequests, timeoutSeconds, reqId) {
223
+ if (js_api_version === undefined || js_api_version < 1.1) {
224
+ // Adapt request to the 1.0 JS API
225
+ for (var i = 0; i < registerRequests.length; i++) {
226
+ registerRequests[i].appId = appId;
227
+ }
228
+ var signRequests = [];
229
+ for (var i = 0; i < registeredKeys.length; i++) {
230
+ signRequests[i] = {
231
+ version: registeredKeys[i].version,
232
+ challenge: registerRequests[0],
233
+ keyHandle: registeredKeys[i].keyHandle,
234
+ appId: appId
235
+ };
236
+ }
237
+ return {
238
+ type: u2f.MessageTypes.U2F_REGISTER_REQUEST,
239
+ signRequests: signRequests,
240
+ registerRequests: registerRequests,
241
+ timeoutSeconds: timeoutSeconds,
242
+ requestId: reqId
243
+ };
244
+ }
245
+ // JS 1.1 API
246
+ return {
247
+ type: u2f.MessageTypes.U2F_REGISTER_REQUEST,
248
+ appId: appId,
249
+ registerRequests: registerRequests,
250
+ registeredKeys: registeredKeys,
251
+ timeoutSeconds: timeoutSeconds,
252
+ requestId: reqId
253
+ };
254
+ };
255
+
256
+
257
+ /**
258
+ * Posts a message on the underlying channel.
259
+ * @param {Object} message
260
+ */
261
+ u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) {
262
+ this.port_.postMessage(message);
263
+ };
264
+
265
+
266
+ /**
267
+ * Emulates the HTML 5 addEventListener interface. Works only for the
268
+ * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage.
269
+ * @param {string} eventName
270
+ * @param {function({data: Object})} handler
271
+ */
272
+ u2f.WrappedChromeRuntimePort_.prototype.addEventListener =
273
+ function(eventName, handler) {
274
+ var name = eventName.toLowerCase();
275
+ if (name == 'message' || name == 'onmessage') {
276
+ this.port_.onMessage.addListener(function(message) {
277
+ // Emulate a minimal MessageEvent object
278
+ handler({'data': message});
279
+ });
280
+ } else {
281
+ console.error('WrappedChromeRuntimePort only supports onMessage');
282
+ }
283
+ };
284
+
285
+ /**
286
+ * Wrap the Authenticator app with a MessagePort interface.
287
+ * @constructor
288
+ * @private
289
+ */
290
+ u2f.WrappedAuthenticatorPort_ = function() {
291
+ this.requestId_ = -1;
292
+ this.requestObject_ = null;
293
+ };
294
+
295
+ /**
296
+ * Launch the Authenticator intent.
297
+ * @param {Object} message
298
+ */
299
+ u2f.WrappedAuthenticatorPort_.prototype.postMessage = function(message) {
300
+ var intentUrl =
301
+ u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ +
302
+ ';S.request=' + encodeURIComponent(JSON.stringify(message)) +
303
+ ';end';
304
+ document.location = intentUrl;
305
+ };
306
+
307
+ /**
308
+ * Tells what type of port this is.
309
+ * @return {String} port type
310
+ */
311
+ u2f.WrappedAuthenticatorPort_.prototype.getPortType = function() {
312
+ return "WrappedAuthenticatorPort_";
313
+ };
314
+
315
+
316
+ /**
317
+ * Emulates the HTML 5 addEventListener interface.
318
+ * @param {string} eventName
319
+ * @param {function({data: Object})} handler
320
+ */
321
+ u2f.WrappedAuthenticatorPort_.prototype.addEventListener = function(eventName, handler) {
322
+ var name = eventName.toLowerCase();
323
+ if (name == 'message') {
324
+ var self = this;
325
+ /* Register a callback to that executes when
326
+ * chrome injects the response. */
327
+ window.addEventListener(
328
+ 'message', self.onRequestUpdate_.bind(self, handler), false);
329
+ } else {
330
+ console.error('WrappedAuthenticatorPort only supports message');
331
+ }
332
+ };
333
+
334
+ /**
335
+ * Callback invoked when a response is received from the Authenticator.
336
+ * @param function({data: Object}) callback
337
+ * @param {Object} message message Object
338
+ */
339
+ u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ =
340
+ function(callback, message) {
341
+ var messageObject = JSON.parse(message.data);
342
+ var intentUrl = messageObject['intentURL'];
343
+
344
+ var errorCode = messageObject['errorCode'];
345
+ var responseObject = null;
346
+ if (messageObject.hasOwnProperty('data')) {
347
+ responseObject = /** @type {Object} */ (
348
+ JSON.parse(messageObject['data']));
349
+ }
350
+
351
+ callback({'data': responseObject});
352
+ };
353
+
354
+ /**
355
+ * Base URL for intents to Authenticator.
356
+ * @const
357
+ * @private
358
+ */
359
+ u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ =
360
+ 'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE';
361
+
362
+ /**
363
+ * Wrap the iOS client app with a MessagePort interface.
364
+ * @constructor
365
+ * @private
366
+ */
367
+ u2f.WrappedIosPort_ = function() {};
368
+
369
+ /**
370
+ * Launch the iOS client app request
371
+ * @param {Object} message
372
+ */
373
+ u2f.WrappedIosPort_.prototype.postMessage = function(message) {
374
+ var str = JSON.stringify(message);
375
+ var url = "u2f://auth?" + encodeURI(str);
376
+ location.replace(url);
377
+ };
378
+
379
+ /**
380
+ * Tells what type of port this is.
381
+ * @return {String} port type
382
+ */
383
+ u2f.WrappedIosPort_.prototype.getPortType = function() {
384
+ return "WrappedIosPort_";
385
+ };
386
+
387
+ /**
388
+ * Emulates the HTML 5 addEventListener interface.
389
+ * @param {string} eventName
390
+ * @param {function({data: Object})} handler
391
+ */
392
+ u2f.WrappedIosPort_.prototype.addEventListener = function(eventName, handler) {
393
+ var name = eventName.toLowerCase();
394
+ if (name !== 'message') {
395
+ console.error('WrappedIosPort only supports message');
396
+ }
397
+ };
398
+
399
+ /**
400
+ * Sets up an embedded trampoline iframe, sourced from the extension.
401
+ * @param {function(MessagePort)} callback
402
+ * @private
403
+ */
404
+ u2f.getIframePort_ = function(callback) {
405
+ // Create the iframe
406
+ var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID;
407
+ var iframe = document.createElement('iframe');
408
+ iframe.src = iframeOrigin + '/u2f-comms.html';
409
+ iframe.setAttribute('style', 'display:none');
410
+ document.body.appendChild(iframe);
411
+
412
+ var channel = new MessageChannel();
413
+ var ready = function(message) {
414
+ if (message.data == 'ready') {
415
+ channel.port1.removeEventListener('message', ready);
416
+ callback(channel.port1);
417
+ } else {
418
+ console.error('First event on iframe port was not "ready"');
419
+ }
420
+ };
421
+ channel.port1.addEventListener('message', ready);
422
+ channel.port1.start();
423
+
424
+ iframe.addEventListener('load', function() {
425
+ // Deliver the port to the iframe and initialize
426
+ iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]);
427
+ });
428
+ };
429
+
430
+
431
+ //High-level JS API
432
+
433
+ /**
434
+ * Default extension response timeout in seconds.
435
+ * @const
436
+ */
437
+ u2f.EXTENSION_TIMEOUT_SEC = 30;
438
+
439
+ /**
440
+ * A singleton instance for a MessagePort to the extension.
441
+ * @type {MessagePort|u2f.WrappedChromeRuntimePort_}
442
+ * @private
443
+ */
444
+ u2f.port_ = null;
445
+
446
+ /**
447
+ * Callbacks waiting for a port
448
+ * @type {Array<function((MessagePort|u2f.WrappedChromeRuntimePort_))>}
449
+ * @private
450
+ */
451
+ u2f.waitingForPort_ = [];
452
+
453
+ /**
454
+ * A counter for requestIds.
455
+ * @type {number}
456
+ * @private
457
+ */
458
+ u2f.reqCounter_ = 0;
459
+
460
+ /**
461
+ * A map from requestIds to client callbacks
462
+ * @type {Object.<number,(function((u2f.Error|u2f.RegisterResponse))
463
+ * |function((u2f.Error|u2f.SignResponse)))>}
464
+ * @private
465
+ */
466
+ u2f.callbackMap_ = {};
467
+
468
+ /**
469
+ * Creates or retrieves the MessagePort singleton to use.
470
+ * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback
471
+ * @private
472
+ */
473
+ u2f.getPortSingleton_ = function(callback) {
474
+ if (u2f.port_) {
475
+ callback(u2f.port_);
476
+ } else {
477
+ if (u2f.waitingForPort_.length == 0) {
478
+ u2f.getMessagePort(function(port) {
479
+ u2f.port_ = port;
480
+ u2f.port_.addEventListener('message',
481
+ /** @type {function(Event)} */ (u2f.responseHandler_));
482
+
483
+ // Careful, here be async callbacks. Maybe.
484
+ while (u2f.waitingForPort_.length)
485
+ u2f.waitingForPort_.shift()(u2f.port_);
486
+ });
487
+ }
488
+ u2f.waitingForPort_.push(callback);
489
+ }
490
+ };
491
+
492
+ /**
493
+ * Handles response messages from the extension.
494
+ * @param {MessageEvent.<u2f.Response>} message
495
+ * @private
496
+ */
497
+ u2f.responseHandler_ = function(message) {
498
+ var response = message.data;
499
+ var reqId = response['requestId'];
500
+ if (!reqId || !u2f.callbackMap_[reqId]) {
501
+ console.error('Unknown or missing requestId in response.');
502
+ return;
503
+ }
504
+ var cb = u2f.callbackMap_[reqId];
505
+ delete u2f.callbackMap_[reqId];
506
+ cb(response['responseData']);
507
+ };
508
+
509
+ /**
510
+ * Calls the callback with true or false as first and only argument
511
+ * @param {Function} callback
512
+ */
513
+ u2f.isSupported = function(callback) {
514
+ var hasCalledBack = false;
515
+ function reply(value) {
516
+ if (hasCalledBack)
517
+ return;
518
+ hasCalledBack = true;
519
+ callback(value);
520
+ }
521
+ u2f.getApiVersion(
522
+ function (response) {
523
+ js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version'];
524
+ reply(true);
525
+ }
526
+ );
527
+ // No response from extension within 1500ms -> no support
528
+ setTimeout(reply.bind(null, false), 1500);
529
+ };
530
+
531
+ /**
532
+ * Dispatches an array of sign requests to available U2F tokens.
533
+ * If the JS API version supported by the extension is unknown, it first sends a
534
+ * message to the extension to find out the supported API version and then it sends
535
+ * the sign request.
536
+ * @param {string=} appId
537
+ * @param {string=} challenge
538
+ * @param {Array<u2f.RegisteredKey>} registeredKeys
539
+ * @param {function((u2f.Error|u2f.SignResponse))} callback
540
+ * @param {number=} opt_timeoutSeconds
541
+ */
542
+ u2f.sign = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {
543
+ if (js_api_version === undefined) {
544
+ // Send a message to get the extension to JS API version, then send the actual sign request.
545
+ u2f.getApiVersion(
546
+ function (response) {
547
+ js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version'];
548
+ console.log("Extension JS API Version: ", js_api_version);
549
+ u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds);
550
+ });
551
+ } else {
552
+ // We know the JS API version. Send the actual sign request in the supported API version.
553
+ u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds);
554
+ }
555
+ };
556
+
557
+ /**
558
+ * Dispatches an array of sign requests to available U2F tokens.
559
+ * @param {string=} appId
560
+ * @param {string=} challenge
561
+ * @param {Array<u2f.RegisteredKey>} registeredKeys
562
+ * @param {function((u2f.Error|u2f.SignResponse))} callback
563
+ * @param {number=} opt_timeoutSeconds
564
+ */
565
+ u2f.sendSignRequest = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {
566
+ u2f.getPortSingleton_(function(port) {
567
+ var reqId = ++u2f.reqCounter_;
568
+ u2f.callbackMap_[reqId] = callback;
569
+ var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ?
570
+ opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC);
571
+ var req = u2f.formatSignRequest_(appId, challenge, registeredKeys, timeoutSeconds, reqId);
572
+ port.postMessage(req);
573
+ });
574
+ };
575
+
576
+ /**
577
+ * Dispatches register requests to available U2F tokens. An array of sign
578
+ * requests identifies already registered tokens.
579
+ * If the JS API version supported by the extension is unknown, it first sends a
580
+ * message to the extension to find out the supported API version and then it sends
581
+ * the register request.
582
+ * @param {string=} appId
583
+ * @param {Array<u2f.RegisterRequest>} registerRequests
584
+ * @param {Array<u2f.RegisteredKey>} registeredKeys
585
+ * @param {function((u2f.Error|u2f.RegisterResponse))} callback
586
+ * @param {number=} opt_timeoutSeconds
587
+ */
588
+ u2f.register = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {
589
+ if (js_api_version === undefined) {
590
+ // Send a message to get the extension to JS API version, then send the actual register request.
591
+ u2f.getApiVersion(
592
+ function (response) {
593
+ js_api_version = response['js_api_version'] === undefined ? 0: response['js_api_version'];
594
+ console.log("Extension JS API Version: ", js_api_version);
595
+ u2f.sendRegisterRequest(appId, registerRequests, registeredKeys,
596
+ callback, opt_timeoutSeconds);
597
+ });
598
+ } else {
599
+ // We know the JS API version. Send the actual register request in the supported API version.
600
+ u2f.sendRegisterRequest(appId, registerRequests, registeredKeys,
601
+ callback, opt_timeoutSeconds);
602
+ }
603
+ };
604
+
605
+ /**
606
+ * Dispatches register requests to available U2F tokens. An array of sign
607
+ * requests identifies already registered tokens.
608
+ * @param {string=} appId
609
+ * @param {Array<u2f.RegisterRequest>} registerRequests
610
+ * @param {Array<u2f.RegisteredKey>} registeredKeys
611
+ * @param {function((u2f.Error|u2f.RegisterResponse))} callback
612
+ * @param {number=} opt_timeoutSeconds
613
+ */
614
+ u2f.sendRegisterRequest = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {
615
+ u2f.getPortSingleton_(function(port) {
616
+ var reqId = ++u2f.reqCounter_;
617
+ u2f.callbackMap_[reqId] = callback;
618
+ var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ?
619
+ opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC);
620
+ var req = u2f.formatRegisterRequest_(
621
+ appId, registeredKeys, registerRequests, timeoutSeconds, reqId);
622
+ port.postMessage(req);
623
+ });
624
+ };
625
+
626
+
627
+ /**
628
+ * Dispatches a message to the extension to find out the supported
629
+ * JS API version.
630
+ * If the user is on a mobile phone and is thus using Google Authenticator instead
631
+ * of the Chrome extension, don't send the request and simply return 0.
632
+ * @param {function((u2f.Error|u2f.GetJsApiVersionResponse))} callback
633
+ * @param {number=} opt_timeoutSeconds
634
+ */
635
+ u2f.getApiVersion = function(callback, opt_timeoutSeconds) {
636
+ u2f.getPortSingleton_(function(port) {
637
+ // If we are using Android Google Authenticator or iOS client app,
638
+ // do not fire an intent to ask which JS API version to use.
639
+ if (port.getPortType) {
640
+ var apiVersion;
641
+ switch (port.getPortType()) {
642
+ case 'WrappedIosPort_':
643
+ case 'WrappedAuthenticatorPort_':
644
+ apiVersion = 1.1;
645
+ break;
646
+
647
+ default:
648
+ apiVersion = 0;
649
+ break;
650
+ }
651
+ callback({ 'js_api_version': apiVersion });
652
+ return;
653
+ }
654
+ var reqId = ++u2f.reqCounter_;
655
+ u2f.callbackMap_[reqId] = callback;
656
+ var req = {
657
+ type: u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST,
658
+ timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ?
659
+ opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC),
660
+ requestId: reqId
661
+ };
662
+ port.postMessage(req);
663
+ });
664
+ };
665
+
666
+ // Feature detection (yes really)
667
+ // For IE and Edge detection, see https://stackoverflow.com/questions/31757852#31757969
668
+ // and https://stackoverflow.com/questions/56360225#56361977
669
+ var isBrowser = (typeof navigator !== 'undefined') && !!navigator.userAgent;
670
+ var isSafari = isBrowser && navigator.userAgent.match(/Safari\//)
671
+ && !navigator.userAgent.match(/Chrome\//);
672
+ var isEDGE = isBrowser && /(Edge\/)|(edg\/)/i.test(navigator.userAgent);
673
+ var isIE = isBrowser && /(MSIE 9|MSIE 10|rv:11.0)/i.test(navigator.userAgent);
674
+ var _backend = null;
675
+ function getBackend() {
676
+ if (_backend)
677
+ return _backend;
678
+ var supportChecker = new Promise(function (resolve, reject) {
679
+ function notSupported() {
680
+ resolve({ u2f: null });
681
+ }
682
+ if (!isBrowser)
683
+ return notSupported();
684
+ if (isSafari)
685
+ // Safari doesn't support U2F, and the Safari-FIDO-U2F
686
+ // extension lacks full support (Multi-facet apps), so we
687
+ // block it until proper support.
688
+ return notSupported();
689
+ var hasNativeSupport = (typeof window.u2f !== 'undefined') &&
690
+ (typeof window.u2f.sign === 'function');
691
+ if (hasNativeSupport)
692
+ return resolve({ u2f: window.u2f });
693
+ if (isEDGE || isIE)
694
+ // We don't want to check for Google's extension hack on EDGE & IE
695
+ // as it'll cause trouble (popups, etc)
696
+ return notSupported();
697
+ if (location.protocol === 'http:')
698
+ // U2F isn't supported over http, only https
699
+ return notSupported();
700
+ if (typeof MessageChannel === 'undefined')
701
+ // Unsupported browser, the chrome hack would throw
702
+ return notSupported();
703
+ // Test for google extension support
704
+ chromeApi.isSupported(function (ok) {
705
+ if (ok)
706
+ resolve({ u2f: chromeApi });
707
+ else
708
+ notSupported();
709
+ });
710
+ })
711
+ .then(function (response) {
712
+ _backend = response.u2f ? supportChecker : null;
713
+ return response;
714
+ });
715
+ return supportChecker;
716
+ }
717
+ var ErrorCodes = {
718
+ OK: 0,
719
+ OTHER_ERROR: 1,
720
+ BAD_REQUEST: 2,
721
+ CONFIGURATION_UNSUPPORTED: 3,
722
+ DEVICE_INELIGIBLE: 4,
723
+ TIMEOUT: 5
724
+ };
725
+ var ErrorNames = {
726
+ "0": "OK",
727
+ "1": "OTHER_ERROR",
728
+ "2": "BAD_REQUEST",
729
+ "3": "CONFIGURATION_UNSUPPORTED",
730
+ "4": "DEVICE_INELIGIBLE",
731
+ "5": "TIMEOUT"
732
+ };
733
+ function makeError(msg, err) {
734
+ var code = err != null ? err.errorCode : 1; // Default to OTHER_ERROR
735
+ var type = ErrorNames[('' + code)];
736
+ var error = new Error(msg);
737
+ error.metaData = { type: type, code: code };
738
+ return error;
739
+ }
740
+ function isSupported() {
741
+ return getBackend()
742
+ .then(function (backend) { return !!backend.u2f; });
743
+ }
744
+ function _ensureSupport(backend) {
745
+ if (!backend.u2f) {
746
+ if (location.protocol === 'http:')
747
+ throw new Error("U2F isn't supported over http, only https");
748
+ throw new Error("U2F not supported");
749
+ }
750
+ }
751
+ function ensureSupport() {
752
+ return getBackend()
753
+ .then(_ensureSupport);
754
+ }
755
+ function arrayify(value) {
756
+ if (value != null && Array.isArray(value))
757
+ return value;
758
+ return value == null
759
+ ? []
760
+ : Array.isArray(value)
761
+ ? value.slice() : [value];
762
+ }
763
+ function register(registerRequests, signRequests, timeout) {
764
+ var _registerRequests = arrayify(registerRequests);
765
+ if (typeof signRequests === 'number' && typeof timeout === 'undefined') {
766
+ timeout = signRequests;
767
+ signRequests = [];
768
+ }
769
+ var _signRequests = arrayify(signRequests);
770
+ return getBackend()
771
+ .then(function (backend) {
772
+ _ensureSupport(backend);
773
+ var u2f = backend.u2f;
774
+ return new Promise(function (resolve, reject) {
775
+ function callback(response) {
776
+ if (response.errorCode)
777
+ reject(makeError("Registration failed", response));
778
+ else {
779
+ delete response.errorCode;
780
+ resolve(response);
781
+ }
782
+ }
783
+ var appId = _registerRequests[0].appId;
784
+ u2f.register(appId, _registerRequests, _signRequests, callback, timeout);
785
+ });
786
+ });
787
+ }
788
+ function sign(signRequests, timeout) {
789
+ var _signRequests = arrayify(signRequests);
790
+ return getBackend()
791
+ .then(function (backend) {
792
+ _ensureSupport(backend);
793
+ var u2f = backend.u2f;
794
+ return new Promise(function (resolve, reject) {
795
+ var _a;
796
+ function callback(response) {
797
+ if (response.errorCode)
798
+ reject(makeError("Sign failed", response));
799
+ else {
800
+ delete response.errorCode;
801
+ resolve(response);
802
+ }
803
+ }
804
+ var appId = _signRequests[0].appId;
805
+ var challenge = _signRequests[0].challenge;
806
+ var registeredKeys = (_a = []).concat.apply(_a, _signRequests
807
+ .map(function (_a) {
808
+ var version = _a.version, keyHandle = _a.keyHandle, appId = _a.appId;
809
+ return arrayify(keyHandle)
810
+ .map(function (keyHandle) {
811
+ return ({ version: version, keyHandle: keyHandle, appId: appId });
812
+ });
813
+ }));
814
+ u2f.sign(appId, challenge, registeredKeys, callback, timeout);
815
+ });
816
+ });
817
+ }
818
+
819
+ var u2fApi = /*#__PURE__*/Object.freeze({
820
+ ErrorCodes: ErrorCodes,
821
+ ErrorNames: ErrorNames,
822
+ isSupported: isSupported,
823
+ ensureSupport: ensureSupport,
824
+ register: register,
825
+ sign: sign
826
+ });
827
+
828
+ window.u2fApi = u2fApi;
829
+
830
+ }());
resources/js/u2f-frontend.js ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery( document ).ready( function () {
2
+
3
+ u2fApi.isSupported()
4
+ .then( function ( supported ) {
5
+
6
+ let $oU2fStart = jQuery( 'input#btn_u2f_start' );
7
+
8
+ if ( supported ) {
9
+
10
+ $oU2fStart.on( 'click', function () {
11
+
12
+ u2fApi.sign( JSON.parse( atob( $oU2fStart.data( 'signs' ) ) ) )
13
+ .then( function ( response ) {
14
+ let $oForm = $oU2fStart.closest( 'form' );
15
+ jQuery( '<input>' ).attr( {
16
+ type: 'hidden',
17
+ name: 'u2f_signs',
18
+ value: $oU2fStart.data( 'signs' )
19
+ } ).appendTo( $oForm );
20
+ jQuery( '<input>' ).attr( {
21
+ type: 'hidden',
22
+ name: $oU2fStart.data( 'input_otp' ),
23
+ value: JSON.stringify( response )
24
+ } ).appendTo( $oForm );
25
+ $oU2fStart.prop( 'disabled', true );
26
+ $oU2fStart.val( 'U2F successful. Submit the form when ready.' );
27
+ } )
28
+ .catch( function ( response ) {
29
+ alert( 'U2F authentication failed. Reload the page to retry.' );
30
+ } );
31
+ } );
32
+
33
+ }
34
+ else {
35
+ $oU2fStart.prop( 'disabled', true );
36
+ $oU2fStart.val( "U2F Authentication isn't supported on this browser." );
37
+ alert( "U2F Authentication isn't supported on this browser." );
38
+ }
39
+ } )
40
+ .catch();
41
+
42
+ } );
src/config/feature-admin_access_restriction.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 20
18
  },
 
 
 
19
  "admin_notices": {
20
  "certain-options-restricted": {
21
  "id": "certain-options-restricted",
@@ -39,7 +42,7 @@
39
  "title": "Security Admin Restriction Settings",
40
  "title_short": "Security Admin Settings",
41
  "summary": [
42
- "Purpose - Restrict access using a simple Access Key.",
43
  "Recommendation - Use of this feature is highly recommend."
44
  ],
45
  "help_video_id": "338551188"
@@ -69,7 +72,7 @@
69
  "summary": [
70
  "Purpose - Restricts access to this plugin preventing unauthorized changes to your security settings.",
71
  "Recommendation - Keep the Security Admin feature turned on.",
72
- "You need to also enter a new Access Key to enable this feature."
73
  ]
74
  },
75
  {
@@ -87,7 +90,7 @@
87
  "link_blog": "https://shsec.io/wpsf02",
88
  "name": "Enable Security Admin",
89
  "summary": "Enforce Security Admin Access Restriction",
90
- "description": "Enable this with great care and consideration. When this Access Key option is enabled, you must specify a key below and use it to gain access to this plugin."
91
  },
92
  {
93
  "key": "admin_access_key",
@@ -97,8 +100,8 @@
97
  "type": "password",
98
  "link_info": "https://shsec.io/42",
99
  "link_blog": "",
100
- "name": "Security Admin Access Key",
101
- "summary": "Provide/Update Security Admin Access Key",
102
  "description": "Careful: If you forget this, you could potentially lock yourself out from using this plugin."
103
  },
104
  {
@@ -106,7 +109,7 @@
106
  "section": "section_admin_access_restriction_settings",
107
  "sensitive": true,
108
  "premium": true,
109
- "default": "",
110
  "type": "array",
111
  "link_info": "https://shsec.io/dk",
112
  "link_blog": "",
@@ -124,7 +127,7 @@
124
  "link_blog": "",
125
  "name": "Security Admin Timeout",
126
  "summary": "Specify An Automatic Timeout Interval For Security Admin Access",
127
- "description": "This will automatically expire your Security Admin Session. Does not apply until you enter the access key again. Default: 60 minutes."
128
  },
129
  {
130
  "key": "allow_email_override",
16
  "run_if_wpcli": false,
17
  "order": 20
18
  },
19
+ "wpcli": {
20
+ "root": "secadmin"
21
+ },
22
  "admin_notices": {
23
  "certain-options-restricted": {
24
  "id": "certain-options-restricted",
42
  "title": "Security Admin Restriction Settings",
43
  "title_short": "Security Admin Settings",
44
  "summary": [
45
+ "Purpose - Restrict access using a simple Access PIN.",
46
  "Recommendation - Use of this feature is highly recommend."
47
  ],
48
  "help_video_id": "338551188"
72
  "summary": [
73
  "Purpose - Restricts access to this plugin preventing unauthorized changes to your security settings.",
74
  "Recommendation - Keep the Security Admin feature turned on.",
75
+ "You need to also enter a new Access PIN to enable this feature."
76
  ]
77
  },
78
  {
90
  "link_blog": "https://shsec.io/wpsf02",
91
  "name": "Enable Security Admin",
92
  "summary": "Enforce Security Admin Access Restriction",
93
+ "description": "Enable this with great care and consideration. When this Access PIN option is enabled, you must specify a key below and use it to gain access to this plugin."
94
  },
95
  {
96
  "key": "admin_access_key",
100
  "type": "password",
101
  "link_info": "https://shsec.io/42",
102
  "link_blog": "",
103
+ "name": "Security Admin Access PIN",
104
+ "summary": "Provide/Update Security Admin Access PIN",
105
  "description": "Careful: If you forget this, you could potentially lock yourself out from using this plugin."
106
  },
107
  {
109
  "section": "section_admin_access_restriction_settings",
110
  "sensitive": true,
111
  "premium": true,
112
+ "default": [],
113
  "type": "array",
114
  "link_info": "https://shsec.io/dk",
115
  "link_blog": "",
127
  "link_blog": "",
128
  "name": "Security Admin Timeout",
129
  "summary": "Specify An Automatic Timeout Interval For Security Admin Access",
130
+ "description": "This will automatically expire your Security Admin Session. Does not apply until you enter the access PIN again. Default: 60 minutes."
131
  },
132
  {
133
  "key": "allow_email_override",
src/config/feature-comments_filter.php CHANGED
@@ -170,7 +170,7 @@
170
  "type": "select",
171
  "value_options": [
172
  {
173
- "value_key": 0,
174
  "text": "Move To Pending Moderation"
175
  },
176
  {
@@ -206,11 +206,11 @@
206
  {
207
  "key": "comments_default_action_human_spam",
208
  "section": "section_human_spam_filter",
209
- "default": 0,
210
  "type": "select",
211
  "value_options": [
212
  {
213
- "value_key": 0,
214
  "text": "Move To Pending Moderation"
215
  },
216
  {
170
  "type": "select",
171
  "value_options": [
172
  {
173
+ "value_key": "0",
174
  "text": "Move To Pending Moderation"
175
  },
176
  {
206
  {
207
  "key": "comments_default_action_human_spam",
208
  "section": "section_human_spam_filter",
209
+ "default": "0",
210
  "type": "select",
211
  "value_options": [
212
  {
213
+ "value_key": "0",
214
  "text": "Move To Pending Moderation"
215
  },
216
  {
src/config/feature-email.php CHANGED
@@ -14,6 +14,9 @@
14
  "skip_processor": true,
15
  "tracking_exclude": true
16
  },
 
 
 
17
  "sections": [
18
  {
19
  "slug": "section_email_options",
14
  "skip_processor": true,
15
  "tracking_exclude": true
16
  },
17
+ "wpcli": {
18
+ "enabled": false
19
+ },
20
  "sections": [
21
  {
22
  "slug": "section_email_options",
src/config/feature-events.php CHANGED
@@ -13,6 +13,9 @@
13
  "run_if_wpcli": true,
14
  "tracking_exclude": true
15
  },
 
 
 
16
  "sections": [
17
  {
18
  "slug": "section_enable_plugin_feature_events",
13
  "run_if_wpcli": true,
14
  "tracking_exclude": true
15
  },
16
+ "wpcli": {
17
+ "enabled": false
18
+ },
19
  "sections": [
20
  {
21
  "slug": "section_enable_plugin_feature_events",
src/config/feature-firewall.php CHANGED
@@ -306,7 +306,11 @@
306
  "/^wordpress_logged_in_[0-9a-f]+$/",
307
  "edd_action",
308
  "edd_redirect",
309
- "wpcf7-form"
 
 
 
 
310
  ]
311
  },
312
  "firewall_patterns": {
306
  "/^wordpress_logged_in_[0-9a-f]+$/",
307
  "edd_action",
308
  "edd_redirect",
309
+ "wpcf7-form",
310
+ "yoast_wpseo_metadesc",
311
+ "icwp_wpsf_new_u2f_response",
312
+ "icwp_wpsf_u2f_otp",
313
+ "appId"
314
  ]
315
  },
316
  "firewall_patterns": {
src/config/feature-hack_protect.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_verified_bot": true,
17
  "run_if_wpcli": false
18
  },
 
 
 
19
  "menu_items": [
20
  {
21
  "title": "Scans",
@@ -232,7 +235,7 @@
232
  "key": "scan_frequency",
233
  "section": "section_scan_options",
234
  "premium": true,
235
- "default": 1,
236
  "type": "select",
237
  "value_options": [
238
  {
16
  "run_if_verified_bot": true,
17
  "run_if_wpcli": false
18
  },
19
+ "wpcli": {
20
+ "root": "hack_guard"
21
+ },
22
  "menu_items": [
23
  {
24
  "title": "Scans",
235
  "key": "scan_frequency",
236
  "section": "section_scan_options",
237
  "premium": true,
238
+ "default": "1",
239
  "type": "select",
240
  "value_options": [
241
  {
src/config/feature-insights.php CHANGED
@@ -18,6 +18,9 @@
18
  "skip_processor": true,
19
  "tracking_exclude": true
20
  },
 
 
 
21
  "requirements": {
22
  "php": {
23
  "version": "5.4"
18
  "skip_processor": true,
19
  "tracking_exclude": true
20
  },
21
+ "wpcli": {
22
+ "enabled": false
23
+ },
24
  "requirements": {
25
  "php": {
26
  "version": "5.4"
src/config/feature-login_protect.php CHANGED
@@ -59,9 +59,9 @@
59
  ]
60
  },
61
  {
62
- "slug": "section_yubikey_authentication",
63
- "title": "Yubikey Two-Factor Authentication",
64
- "title_short": "2FA -Yubikey",
65
  "summary": [
66
  "Purpose - Verifies the identity of users who log in to your site using Yubikey one-time-passwords.",
67
  "Note: You may combine multiple authentication factors for increased security."
@@ -364,20 +364,32 @@
364
  "summary": "Enter The IDs Of The 3rd Party Login Forms For Use With AntiBot JS",
365
  "description": "For Use With AnitBot JS (above)."
366
  },
 
 
 
 
 
 
 
 
 
 
 
 
367
  {
368
  "key": "enable_yubikey",
369
- "section": "section_yubikey_authentication",
370
  "default": "N",
371
  "type": "checkbox",
372
  "link_info": "https://shsec.io/4f",
373
  "link_blog": "https://shsec.io/9t",
374
- "name": "Enable Yubikey Authentication",
375
- "summary": "Turn On / Off Yubikey Authentication On This Site",
376
  "description": "Combined with your Yubikey API Key (below) this will form the basis of your Yubikey Authentication."
377
  },
378
  {
379
  "key": "yubikey_app_id",
380
- "section": "section_yubikey_authentication",
381
  "sensitive": true,
382
  "default": "",
383
  "type": "text",
@@ -389,7 +401,7 @@
389
  },
390
  {
391
  "key": "yubikey_api_key",
392
- "section": "section_yubikey_authentication",
393
  "sensitive": true,
394
  "default": "",
395
  "type": "text",
@@ -459,7 +471,7 @@
459
  },
460
  "2fa_email_verified": {
461
  },
462
- "2fa_email_verify_fail": {
463
  "offense": true
464
  },
465
  "2fa_googleauth_verified": {
59
  ]
60
  },
61
  {
62
+ "slug": "section_hardware_authentication",
63
+ "title": "Hardware 2-Factor Authentication",
64
+ "title_short": "2FA - Hardware",
65
  "summary": [
66
  "Purpose - Verifies the identity of users who log in to your site using Yubikey one-time-passwords.",
67
  "Note: You may combine multiple authentication factors for increased security."
364
  "summary": "Enter The IDs Of The 3rd Party Login Forms For Use With AntiBot JS",
365
  "description": "For Use With AnitBot JS (above)."
366
  },
367
+ {
368
+ "key": "enable_u2f",
369
+ "section": "section_hardware_authentication",
370
+ "premium": true,
371
+ "default": "N",
372
+ "type": "checkbox",
373
+ "link_info": "https://shsec.io/dx",
374
+ "link_blog": "https://shsec.io/dy",
375
+ "name": "Allow U2F",
376
+ "summary": "Allow Registration Of U2F Devices",
377
+ "description": "Allow Registration Of U2F Devices."
378
+ },
379
  {
380
  "key": "enable_yubikey",
381
+ "section": "section_hardware_authentication",
382
  "default": "N",
383
  "type": "checkbox",
384
  "link_info": "https://shsec.io/4f",
385
  "link_blog": "https://shsec.io/9t",
386
+ "name": "Allow Yubikey OTP",
387
+ "summary": "Allow Yubikey Registration For One Time Passwords",
388
  "description": "Combined with your Yubikey API Key (below) this will form the basis of your Yubikey Authentication."
389
  },
390
  {
391
  "key": "yubikey_app_id",
392
+ "section": "section_hardware_authentication",
393
  "sensitive": true,
394
  "default": "",
395
  "type": "text",
401
  },
402
  {
403
  "key": "yubikey_api_key",
404
+ "section": "section_hardware_authentication",
405
  "sensitive": true,
406
  "default": "",
407
  "type": "text",
471
  },
472
  "2fa_email_verified": {
473
  },
474
+ "2fa_email_verify_fail": {
475
  "offense": true
476
  },
477
  "2fa_googleauth_verified": {
src/config/feature-plugin.php CHANGED
@@ -34,7 +34,7 @@
34
  "can_dismiss": false,
35
  "type": "error"
36
  },
37
- "php7": {
38
  "id": "php7",
39
  "schedule": "conditions",
40
  "valid_admin": true,
@@ -228,6 +228,18 @@
228
  "summary": "Display Plugin Badge On Your Site",
229
  "description": "Enabling this option helps support the plugin by spreading the word about it on your website. The plugin badge also demonstrates to visitors that you take your website security seriously."
230
  },
 
 
 
 
 
 
 
 
 
 
 
 
231
  {
232
  "key": "enable_xmlrpc_compatibility",
233
  "section": "section_defaults",
34
  "can_dismiss": false,
35
  "type": "error"
36
  },
37
+ "php7": {
38
  "id": "php7",
39
  "schedule": "conditions",
40
  "valid_admin": true,
228
  "summary": "Display Plugin Badge On Your Site",
229
  "description": "Enabling this option helps support the plugin by spreading the word about it on your website. The plugin badge also demonstrates to visitors that you take your website security seriously."
230
  },
231
+ {
232
+ "key": "enable_wpcli",
233
+ "section": "section_general_plugin_options",
234
+ "premium": true,
235
+ "default": "Y",
236
+ "type": "checkbox",
237
+ "link_info": "https://shsec.io/i1",
238
+ "link_blog": "https://shsec.io/i2",
239
+ "name": "Allow WP-CLI",
240
+ "summary": "Allow Access And Control Of This Plugin Via WP-CLI",
241
+ "description": "Turn off this option to disable this plugin's WP-CLI integration."
242
+ },
243
  {
244
  "key": "enable_xmlrpc_compatibility",
245
  "section": "section_defaults",
src/config/feature-sessions.php CHANGED
@@ -15,6 +15,9 @@
15
  "run_if_wpcli": false,
16
  "tracking_exclude": true
17
  },
 
 
 
18
  "sections": [
19
  {
20
  "slug": "section_enable_plugin_feature_sessions",
15
  "run_if_wpcli": false,
16
  "tracking_exclude": true
17
  },
18
+ "wpcli": {
19
+ "enabled": false
20
+ },
21
  "sections": [
22
  {
23
  "slug": "section_enable_plugin_feature_sessions",
src/features/admin_access_restriction.php CHANGED
@@ -30,6 +30,7 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
30
 
31
  /**
32
  * @return array
 
33
  */
34
  public function getSecurityAdminUsers() {
35
  $aU = $this->getOpt( 'sec_admin_users', [] );
@@ -38,13 +39,15 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
38
 
39
  /**
40
  * @return bool
 
41
  */
42
  public function hasSecAdminUsers() {
43
  return count( $this->getSecurityAdminUsers() ) > 0;
44
  }
45
 
46
  /**
47
- * No checking of admin capabilities in-case of infinite loop with admin access caps check
 
48
  * @return bool
49
  */
50
  public function isRegisteredSecAdminUser() {
@@ -52,8 +55,6 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
52
  return !empty( $sUser ) && in_array( $sUser, $this->getSecurityAdminUsers() );
53
  }
54
 
55
- /**
56
- */
57
  protected function preProcessOptions() {
58
  if ( $this->isValidSecAdminRequest() ) {
59
  $this->setSecurityAdminStatusOnOff( true );
@@ -171,7 +172,7 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
171
  /** @var SecurityAdmin\Options $oOpts */
172
  $oOpts = $this->getOptions();
173
  return $this->isModOptEnabled() &&
174
- ( $this->hasSecAdminUsers() ||
175
  ( $oOpts->hasAccessKey() && $this->getSecAdminTimeout() > 0 )
176
  );
177
  }
@@ -291,6 +292,24 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
291
  return $sLogoUrl;
292
  }
293
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
294
  /**
295
  * @return bool
296
  */
@@ -314,10 +333,10 @@ class ICWP_WPSF_FeatureHandler_AdminAccessRestriction extends ICWP_WPSF_FeatureH
314
  */
315
  public function setNewAccessKeyManually( $sKey ) {
316
  if ( empty( $sKey ) ) {
317
- throw new \Exception( 'Attempting to set an empty Security Admin Access Key.' );
318
  }
319
  if ( !$this->getCon()->isPluginAdmin() ) {
320
- throw new \Exception( 'User does not have permission to update the Security Admin Access Key.' );
321
  }
322
 
323
  $this->setIsMainFeatureEnabled( true )
30
 
31
  /**
32
  * @return array
33
+ * @deprecated 9.1.0
34
  */
35
  public function getSecurityAdminUsers() {
36
  $aU = $this->getOpt( 'sec_admin_users', [] );
39
 
40
  /**
41
  * @return bool
42
+ * @deprecated 9.1.0
43
  */
44
  public function hasSecAdminUsers() {
45
  return count( $this->getSecurityAdminUsers() ) > 0;
46
  }
47
 
48
  /**
49
+ * No checking of admin capabilities in-case of infinite loop with
50
+ * admin access caps check
51
  * @return bool
52
  */
53
  public function isRegisteredSecAdminUser() {
55
  return !empty( $sUser ) && in_array( $sUser, $this->getSecurityAdminUsers() );
56
  }
57
 
 
 
58
  protected function preProcessOptions() {
59
  if ( $this->isValidSecAdminRequest() ) {
60
  $this->setSecurityAdminStatusOnOff( true );
172
  /** @var SecurityAdmin\Options $oOpts */
173
  $oOpts = $this->getOptions();
174
  return $this->isModOptEnabled() &&
175
+ ( count( $oOpts->getSecurityAdminUsers() ) > 0 ||
176
  ( $oOpts->hasAccessKey() && $this->getSecAdminTimeout() > 0 )
177
  );
178
  }
292
  return $sLogoUrl;
293
  }
294
 
295
+ /**
296
+ * @param string $sSection
297
+ * @return array
298
+ */
299
+ protected function getSectionWarnings( $sSection ) {
300
+ $aWarnings = [];
301
+
302
+ switch ( $sSection ) {
303
+ case 'section_whitelabel':
304
+ if ( !$this->isEnabledSecurityAdmin() ) {
305
+ $aWarnings[] = __( 'Please also supply a Security Admin PIN, as whitelabel settings are only applied when the Security Admin feature is active.', 'wp-simple-firewall' );
306
+ }
307
+ break;
308
+ }
309
+
310
+ return $aWarnings;
311
+ }
312
+
313
  /**
314
  * @return bool
315
  */
333
  */
334
  public function setNewAccessKeyManually( $sKey ) {
335
  if ( empty( $sKey ) ) {
336
+ throw new \Exception( 'Attempting to set an empty Security PIN.' );
337
  }
338
  if ( !$this->getCon()->isPluginAdmin() ) {
339
+ throw new \Exception( 'User does not have permission to update the Security PIN.' );
340
  }
341
 
342
  $this->setIsMainFeatureEnabled( true )
src/features/base.php CHANGED
@@ -3,6 +3,9 @@
3
  use FernleafSystems\Wordpress\Plugin\Shield;
4
  use FernleafSystems\Wordpress\Services\Services;
5
 
 
 
 
6
  abstract class ICWP_WPSF_FeatureHandler_Base {
7
 
8
  use Shield\Modules\PluginControllerConsumer;
@@ -52,6 +55,11 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
52
  */
53
  private $oOpts;
54
 
 
 
 
 
 
55
  /**
56
  * @var Shield\Databases\Base\Handler[]
57
  */
@@ -213,11 +221,11 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
213
  return is_array( $aCls ) ? $aCls : [];
214
  }
215
 
216
- protected function updateHandler() {
217
- $oH = $this->loadClass( 'Upgrade' );
218
- if ( $oH instanceof Shield\Modules\Base\Upgrade ) {
219
- $oH->setMod( $this )->execute();
220
- }
221
  }
222
 
223
  /**
@@ -297,9 +305,6 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
297
  }
298
 
299
  public function onRunProcessors() {
300
- if ( $this->isUpgrading() ) {
301
- $this->updateHandler();
302
- }
303
  $oOpts = $this->getOptions();
304
  if ( $oOpts->getFeatureProperty( 'auto_load_processor' ) ) {
305
  $this->loadProcessor();
@@ -337,6 +342,16 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
337
  do_action( $this->getCon()->prefix( 'shield_action' ), $sShieldAction );
338
  }
339
 
 
 
 
 
 
 
 
 
 
 
340
  if ( $this->isModuleRequest() ) {
341
 
342
  if ( Services::WpGeneral()->isAjax() ) {
@@ -605,7 +620,7 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
605
  /**
606
  * @return bool
607
  */
608
- protected function isModOptEnabled() {
609
  return $this->isOpt( $this->getEnableModOptKey(), 'Y' )
610
  || $this->isOpt( $this->getEnableModOptKey(), true, true );
611
  }
@@ -1223,7 +1238,7 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
1223
  public function onPluginDelete() {
1224
  foreach ( $this->getDbHandlers( true ) as $oDbh ) {
1225
  if ( !empty( $oDbh ) ) {
1226
- $oDbh->deleteTable();
1227
  }
1228
  }
1229
  $this->getOptions()->deleteStorage();
@@ -1462,6 +1477,10 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
1462
  public function getBaseDisplayData() {
1463
  $oCon = $this->getCon();
1464
 
 
 
 
 
1465
  return [
1466
  'sPluginName' => $oCon->getHumanName(),
1467
  'sTagline' => $this->getOptions()->getFeatureTagline(),
@@ -1507,7 +1526,8 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
1507
  'show_alt_content' => false,
1508
  'has_wizard' => $this->hasWizard(),
1509
  'is_premium' => $this->isPremium(),
1510
- 'show_transfer_switch' => $this->isPremium()
 
1511
  ],
1512
  'hrefs' => [
1513
  'go_pro' => 'https://shsec.io/shieldgoprofeature',
@@ -1934,6 +1954,24 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
1934
  return $this->oOpts;
1935
  }
1936
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1937
  /**
1938
  * The primary DB for the
1939
  * @return null|Shield\Databases\Base\Handler|mixed
@@ -2012,6 +2050,22 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
2012
  return @class_exists( $sC ) ? new $sC() : false;
2013
  }
2014
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2015
  /**
2016
  * @return string
2017
  */
@@ -2041,4 +2095,14 @@ abstract class ICWP_WPSF_FeatureHandler_Base {
2041
  protected function doExtraSubmitProcessing() {
2042
  $this->preProcessOptions();
2043
  }
 
 
 
 
 
 
 
 
 
 
2044
  }
3
  use FernleafSystems\Wordpress\Plugin\Shield;
4
  use FernleafSystems\Wordpress\Services\Services;
5
 
6
+ /**
7
+ * Class ICWP_WPSF_FeatureHandler_Base
8
+ */
9
  abstract class ICWP_WPSF_FeatureHandler_Base {
10
 
11
  use Shield\Modules\PluginControllerConsumer;
55
  */
56
  private $oOpts;
57
 
58
+ /**
59
+ * @var Shield\Modules\Base\WpCli
60
+ */
61
+ private $oWpCli;
62
+
63
  /**
64
  * @var Shield\Databases\Base\Handler[]
65
  */
221
  return is_array( $aCls ) ? $aCls : [];
222
  }
223
 
224
+ /**
225
+ * @return false|Shield\Modules\Base\Upgrade|mixed
226
+ */
227
+ public function getUpgradeHandler() {
228
+ return $this->loadClass( 'Upgrade' );
229
  }
230
 
231
  /**
305
  }
306
 
307
  public function onRunProcessors() {
 
 
 
308
  $oOpts = $this->getOptions();
309
  if ( $oOpts->getFeatureProperty( 'auto_load_processor' ) ) {
310
  $this->loadProcessor();
342
  do_action( $this->getCon()->prefix( 'shield_action' ), $sShieldAction );
343
  }
344
 
345
+ if ( Services::Data()->getPhpVersionIsAtLeast( '7.0' ) ) {
346
+ add_action( 'cli_init', function () {
347
+ try {
348
+ $this->getWpCli()->execute();
349
+ }
350
+ catch ( \Exception $oE ) {
351
+ }
352
+ } );
353
+ }
354
+
355
  if ( $this->isModuleRequest() ) {
356
 
357
  if ( Services::WpGeneral()->isAjax() ) {
620
  /**
621
  * @return bool
622
  */
623
+ public function isModOptEnabled() {
624
  return $this->isOpt( $this->getEnableModOptKey(), 'Y' )
625
  || $this->isOpt( $this->getEnableModOptKey(), true, true );
626
  }
1238
  public function onPluginDelete() {
1239
  foreach ( $this->getDbHandlers( true ) as $oDbh ) {
1240
  if ( !empty( $oDbh ) ) {
1241
+ $oDbh->tableDelete();
1242
  }
1243
  }
1244
  $this->getOptions()->deleteStorage();
1477
  public function getBaseDisplayData() {
1478
  $oCon = $this->getCon();
1479
 
1480
+ /** @var Shield\Modules\Plugin\Options $oPluginOptions */
1481
+ $oPluginOptions = $oCon->getModule_Plugin()
1482
+ ->getOptions();
1483
+
1484
  return [
1485
  'sPluginName' => $oCon->getHumanName(),
1486
  'sTagline' => $this->getOptions()->getFeatureTagline(),
1526
  'show_alt_content' => false,
1527
  'has_wizard' => $this->hasWizard(),
1528
  'is_premium' => $this->isPremium(),
1529
+ 'show_transfer_switch' => $this->isPremium(),
1530
+ 'is_wpcli' => $oPluginOptions->isEnabledWpcli()
1531
  ],
1532
  'hrefs' => [
1533
  'go_pro' => 'https://shsec.io/shieldgoprofeature',
1954
  return $this->oOpts;
1955
  }
1956
 
1957
+ /**
1958
+ * @return Shield\Modules\Base\WpCli
1959
+ * @throws \Exception
1960
+ */
1961
+ public function getWpCli() {
1962
+ if ( !isset( $this->oWpCli ) ) {
1963
+ $this->oWpCli = $this->loadClass( 'WpCli' );
1964
+ if ( !$this->oWpCli instanceof Shield\Modules\Base\WpCli ) {
1965
+ $this->oWpCli = $this->loadClassFromBase( 'WpCli' );
1966
+ if ( !$this->oWpCli instanceof Shield\Modules\Base\WpCli ) {
1967
+ throw new Exception( 'WP-CLI not supported' );
1968
+ }
1969
+ }
1970
+ $this->oWpCli->setMod( $this );
1971
+ }
1972
+ return $this->oWpCli;
1973
+ }
1974
+
1975
  /**
1976
  * The primary DB for the
1977
  * @return null|Shield\Databases\Base\Handler|mixed
2050
  return @class_exists( $sC ) ? new $sC() : false;
2051
  }
2052
 
2053
+ /**
2054
+ * @param $sClass
2055
+ * @return \stdClass|mixed|false
2056
+ */
2057
+ private function loadClassFromBase( $sClass ) {
2058
+ $sC = $this->getBaseNamespace().$sClass;
2059
+ return @class_exists( $sC ) ? new $sC() : false;
2060
+ }
2061
+
2062
+ /**
2063
+ * @return string
2064
+ */
2065
+ private function getBaseNamespace() {
2066
+ return '\FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\\';
2067
+ }
2068
+
2069
  /**
2070
  * @return string
2071
  */
2095
  protected function doExtraSubmitProcessing() {
2096
  $this->preProcessOptions();
2097
  }
2098
+
2099
+ /**
2100
+ * @deprecated 9.0.5
2101
+ */
2102
+ protected function updateHandler() {
2103
+ $oH = $this->getUpgradeHandler();
2104
+ if ( $oH instanceof Shield\Modules\Base\Upgrade ) {
2105
+ $oH->setMod( $this )->execute();
2106
+ }
2107
+ }
2108
  }
src/features/base_wpsf.php CHANGED
@@ -165,11 +165,11 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
165
  parent::getBaseDisplayData(),
166
  [
167
  'head' => [
168
- 'html' => [
169
  'lang' => Services::WpGeneral()->getLocale( '-' ),
170
  'dir' => is_rtl() ? 'rtl' : 'ltr',
171
  ],
172
- 'meta' => [
173
  [
174
  'type' => 'http-equiv',
175
  'type_type' => 'Cache-Control',
@@ -180,7 +180,8 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
180
  'type_type' => 'Expires',
181
  'content' => '0',
182
  ],
183
- ]
 
184
  ],
185
  'ajax' => [
186
  'sec_admin_login' => $this->getSecAdminLoginAjaxData(),
@@ -221,7 +222,7 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
221
  'restricted_access' => $this->getAjaxActionData( 'restricted_access' ),
222
  ],
223
  'strings' => [
224
- 'force_remove_email' => __( "If you've forgotten your key, a link can be sent to the plugin administrator email address to remove this restriction.", 'wp-simple-firewall' ),
225
  'click_email' => __( "Click here to send the verification email.", 'wp-simple-firewall' ),
226
  'send_to_email' => sprintf( __( "Email will be sent to %s", 'wp-simple-firewall' ),
227
  Utilities\Obfuscate::Email( $this->getPluginReportEmail() ) ),
@@ -341,36 +342,4 @@ class ICWP_WPSF_FeatureHandler_BaseWpsf extends ICWP_WPSF_FeatureHandler_Base {
341
  'href' => $this->getUrl_DirectLinkToOption( $this->getEnableModOptKey() ),
342
  ];
343
  }
344
-
345
- /**
346
- * @return string
347
- * @deprecated 9.0
348
- */
349
- public function getPluginDefaultRecipientAddress() {
350
- return $this->getPluginReportEmail();
351
- }
352
-
353
- /**
354
- * @return string
355
- * @deprecated 9.0
356
- */
357
- public function getGoogleRecaptchaSecretKey() {
358
- return $this->getCaptchaCfg()->secret;
359
- }
360
-
361
- /**
362
- * @return string
363
- * @deprecated 9.0
364
- */
365
- public function getGoogleRecaptchaSiteKey() {
366
- return $this->getCaptchaCfg()->key;
367
- }
368
-
369
- /**
370
- * @return string
371
- * @deprecated 9.0
372
- */
373
- public function getCaptchaStyle() {
374
- return $this->getCaptchaCfg()->theme;
375
- }
376
  }
165
  parent::getBaseDisplayData(),
166
  [
167
  'head' => [
168
+ 'html' => [
169
  'lang' => Services::WpGeneral()->getLocale( '-' ),
170
  'dir' => is_rtl() ? 'rtl' : 'ltr',
171
  ],
172
+ 'meta' => [
173
  [
174
  'type' => 'http-equiv',
175
  'type_type' => 'Cache-Control',
180
  'type_type' => 'Expires',
181
  'content' => '0',
182
  ],
183
+ ],
184
+ 'scripts' => []
185
  ],
186
  'ajax' => [
187
  'sec_admin_login' => $this->getSecAdminLoginAjaxData(),
222
  'restricted_access' => $this->getAjaxActionData( 'restricted_access' ),
223
  ],
224
  'strings' => [
225
+ 'force_remove_email' => __( "If you've forgotten your PIN, a link can be sent to the plugin administrator email address to remove this restriction.", 'wp-simple-firewall' ),
226
  'click_email' => __( "Click here to send the verification email.", 'wp-simple-firewall' ),
227
  'send_to_email' => sprintf( __( "Email will be sent to %s", 'wp-simple-firewall' ),
228
  Utilities\Obfuscate::Email( $this->getPluginReportEmail() ) ),
342
  'href' => $this->getUrl_DirectLinkToOption( $this->getEnableModOptKey() ),
343
  ];
344
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345
  }
src/features/firewall.php CHANGED
@@ -110,30 +110,4 @@ class ICWP_WPSF_FeatureHandler_Firewall extends ICWP_WPSF_FeatureHandler_BaseWps
110
  protected function getNamespaceBase() {
111
  return 'Firewall';
112
  }
113
-
114
- /**
115
- * @return array
116
- * @deprecated 9.0
117
- */
118
- public function getDefaultWhitelist() {
119
- $aW = $this->getDef( 'default_whitelist' );
120
- return is_array( $aW ) ? $aW : [];
121
- }
122
-
123
- /**
124
- * @return array
125
- * @deprecated 9.0
126
- */
127
- public function getCustomWhitelist() {
128
- $aW = $this->getOpt( 'page_params_whitelist', [] );
129
- return is_array( $aW ) ? $aW : [];
130
- }
131
-
132
- /**
133
- * @return bool
134
- * @deprecated 9.0
135
- */
136
- public function isIgnoreAdmin() {
137
- return $this->isOpt( 'whitelist_admins', 'Y' );
138
- }
139
  }
110
  protected function getNamespaceBase() {
111
  return 'Firewall';
112
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  }
src/features/hack_protect.php CHANGED
@@ -669,65 +669,4 @@ class ICWP_WPSF_FeatureHandler_HackProtect extends ICWP_WPSF_FeatureHandler_Base
669
  protected function getNamespaceBase() {
670
  return 'HackGuard';
671
  }
672
-
673
- /**
674
- * @return string
675
- * @deprecated 9.0
676
- */
677
- public function getWpvulnPluginsHighlightOption() {
678
- return 'disabled';
679
- }
680
-
681
- /**
682
- * @return bool
683
- * @deprecated 9.0
684
- */
685
- public function isIncludeFileLists() {
686
- return false;
687
- }
688
-
689
- /**
690
- * @return int
691
- * @deprecated 9.0
692
- */
693
- public function getScanNotificationInterval() {
694
- return 0;
695
- }
696
-
697
- /**
698
- * @return HackGuard\Scan\Queue\Controller
699
- * @deprecated 9.0
700
- */
701
- public function getScanController() {
702
- return $this->getScanQueueController();
703
- }
704
-
705
- /**
706
- * @return bool
707
- * @deprecated 9.0
708
- */
709
- public function canPtgWriteToDisk() {
710
- $nNow = Services::Request()->ts();
711
- $bLastCheckExpired = ( $nNow - $this->getOpt( 'ptg_candiskwrite_at', 0 ) ) > DAY_IN_SECONDS;
712
-
713
- $bCanWrite = $this->getOpt( 'ptg_candiskwrite' ) && !$bLastCheckExpired;
714
- if ( !$bCanWrite ) {
715
- $oFS = Services::WpFs();
716
- $sDir = $this->getPtgSnapsBaseDir();
717
-
718
- if ( $sDir && $oFS->mkdir( $sDir ) ) {
719
- $sTestFile = path_join( $sDir, 'test.txt' );
720
- $oFS->putFileContent( $sTestFile, 'test-'.$nNow );
721
- $sContents = $oFS->exists( $sTestFile ) ? $oFS->getFileContent( $sTestFile ) : '';
722
- if ( $sContents === 'test-'.$nNow ) {
723
- $oFS->deleteFile( $sTestFile );
724
- $bCanWrite = !$oFS->exists( $sTestFile );
725
- $this->setOpt( 'ptg_candiskwrite', $bCanWrite );
726
- }
727
- $this->setOpt( 'ptg_candiskwrite_at', $nNow );
728
- }
729
- }
730
-
731
- return $bCanWrite;
732
- }
733
  }
669
  protected function getNamespaceBase() {
670
  return 'HackGuard';
671
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
672
  }
src/features/insights.php CHANGED
@@ -202,7 +202,7 @@ class ICWP_WPSF_FeatureHandler_Insights extends ICWP_WPSF_FeatureHandler_BaseWps
202
  'is_enabled' => $oTrafficOpts->isTrafficLoggerEnabled(),
203
  ],
204
  'hrefs' => [
205
- 'please_enable' => $oTrafficMod->getUrl_DirectLinkToOption( 'enable_traffic' ),
206
  ],
207
  'strings' => [
208
  'title_filter_form' => __( 'Traffic Table Filters', 'wp-simple-firewall' ),
202
  'is_enabled' => $oTrafficOpts->isTrafficLoggerEnabled(),
203
  ],
204
  'hrefs' => [
205
+ 'please_enable' => $oTrafficMod->getUrl_DirectLinkToOption( 'enable_logger' ),
206
  ],
207
  'strings' => [
208
  'title_filter_form' => __( 'Traffic Table Filters', 'wp-simple-firewall' ),
src/features/login_protect.php CHANGED
@@ -227,15 +227,6 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
227
  return $oCfg;
228
  }
229
 
230
- /**
231
- * @return array
232
- * @deprecated 9.0
233
- */
234
- public function getBotProtectionLocations() {
235
- $aLocs = $this->getOpt( 'bot_protection_locations' );
236
- return is_array( $aLocs ) ? $aLocs : (array)$this->getOptions()->getOptDefault( 'bot_protection_locations' );
237
- }
238
-
239
  /**
240
  * @return LoginGuard\Lib\TwoFactor\MfaController
241
  */
@@ -308,14 +299,6 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
308
  return $sText;
309
  }
310
 
311
- /**
312
- * @return bool
313
- * @deprecated 9.0
314
- */
315
- public function isEnabledGaspCheck() {
316
- return $this->isModOptEnabled() && $this->isOpt( 'enable_login_gasp_check', 'Y' );
317
- }
318
-
319
  /**
320
  * @param bool $bEnabled
321
  * @return $this
@@ -368,25 +351,6 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
368
  return $sIntegration;
369
  }
370
 
371
- /**
372
- * @return bool
373
- * @deprecated 9.0
374
- */
375
- public function isEnabledBotJs() {
376
- /** @var LoginGuard\Options $oOpts */
377
- $oOpts = $this->getOptions();
378
- return $oOpts->isEnabledGaspCheck() || $this->isEnabledCaptcha();
379
- }
380
-
381
- /**
382
- * @return array
383
- * @deprecated 9.0
384
- */
385
- public function getAntiBotFormSelectors() {
386
- $aIds = $this->getOpt( 'antibot_form_ids', [] );
387
- return is_array( $aIds ) ? $aIds : [];
388
- }
389
-
390
  public function insertCustomJsVars_Admin() {
391
  parent::insertCustomJsVars_Admin();
392
 
@@ -478,36 +442,4 @@ class ICWP_WPSF_FeatureHandler_LoginProtect extends ICWP_WPSF_FeatureHandler_Bas
478
  protected function getNamespaceBase() {
479
  return 'LoginGuard';
480
  }
481
-
482
- /**
483
- * @return bool
484
- * @deprecated 9.0
485
- */
486
- public function isProtectLogin() {
487
- return false;
488
- }
489
-
490
- /**
491
- * @return bool
492
- * @deprecated 9.0
493
- */
494
- public function isProtectLostPassword() {
495
- return false;
496
- }
497
-
498
- /**
499
- * @return bool
500
- * @deprecated 9.0
501
- */
502
- public function isProtectRegister() {
503
- return false;
504
- }
505
-
506
- /**
507
- * @return bool
508
- * @deprecated 9.0
509
- */
510
- public function isProtect() {
511
- return false;
512
- }
513
  }
227
  return $oCfg;
228
  }
229
 
 
 
 
 
 
 
 
 
 
230
  /**
231
  * @return LoginGuard\Lib\TwoFactor\MfaController
232
  */
299
  return $sText;
300
  }
301
 
 
 
 
 
 
 
 
 
302
  /**
303
  * @param bool $bEnabled
304
  * @return $this
351
  return $sIntegration;
352
  }
353
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
354
  public function insertCustomJsVars_Admin() {
355
  parent::insertCustomJsVars_Admin();
356
 
442
  protected function getNamespaceBase() {
443
  return 'LoginGuard';
444
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
445
  }
src/features/plugin.php CHANGED
@@ -163,7 +163,7 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
163
  try {
164
  ( new Plugin\Lib\ImportExport\Import() )
165
  ->setMod( $this )
166
- ->fromFile();
167
  $bSuccess = true;
168
  $sMessage = __( 'Options imported successfully', 'wp-simple-firewall' );
169
  }
@@ -730,28 +730,4 @@ class ICWP_WPSF_FeatureHandler_Plugin extends ICWP_WPSF_FeatureHandler_BaseWpsf
730
  public function getSurveyEmail() {
731
  return base64_decode( $this->getDef( 'survey_email' ) );
732
  }
733
-
734
- /**
735
- * @return bool
736
- * @deprecated 9.0
737
- */
738
- public function isDisplayPluginBadge() {
739
- return false;
740
- }
741
-
742
- /**
743
- * @return string
744
- * @deprecated 9.0
745
- */
746
- public function getCookieIdBadgeState() {
747
- return $this->prefix( 'badgeState' );
748
- }
749
-
750
- /**
751
- * @return string
752
- * @deprecated 9.0
753
- */
754
- public function supplyPluginReportEmail() {
755
- return $this->getPluginReportEmail();
756
- }
757
  }
163
  try {
164
  ( new Plugin\Lib\ImportExport\Import() )
165
  ->setMod( $this )
166
+ ->fromFileUpload();
167
  $bSuccess = true;
168
  $sMessage = __( 'Options imported successfully', 'wp-simple-firewall' );
169
  }
730
  public function getSurveyEmail() {
731
  return base64_decode( $this->getDef( 'survey_email' ) );
732
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
733
  }
src/features/traffic.php CHANGED
@@ -76,28 +76,4 @@ class ICWP_WPSF_FeatureHandler_Traffic extends ICWP_WPSF_FeatureHandler_BaseWpsf
76
  protected function getNamespaceBase() {
77
  return 'Traffic';
78
  }
79
-
80
- /**
81
- * @return int
82
- * @deprecated 9.0
83
- */
84
- public function getAutoDisableAt() {
85
- return 0;
86
- }
87
-
88
- /**
89
- * @return string
90
- * @deprecated 9.0
91
- */
92
- public function getAutoDisableTimestamp() {
93
- return '';
94
- }
95
-
96
- /**
97
- * @return bool
98
- * @deprecated 9.0
99
- */
100
- public function isAutoDisable() {
101
- return false;
102
- }
103
  }
76
  protected function getNamespaceBase() {
77
  return 'Traffic';
78
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  }
src/features/user_management.php CHANGED
@@ -258,13 +258,4 @@ class ICWP_WPSF_FeatureHandler_UserManagement extends \ICWP_WPSF_FeatureHandler_
258
  protected function getNamespaceBase() {
259
  return 'UserManagement';
260
  }
261
-
262
- /**
263
- * @return array
264
- * @deprecated 9.0
265
- */
266
- public function getSuspendHardUserIds() {
267
- $aIds = $this->getOpt( 'hard_suspended_userids', [] );
268
- return is_array( $aIds ) ? array_filter( $aIds, 'is_int' ) : [];
269
- }
270
  }
258
  protected function getNamespaceBase() {
259
  return 'UserManagement';
260
  }
 
 
 
 
 
 
 
 
 
261
  }
src/lib/custom/U2F/Yubico/U2F.php ADDED
@@ -0,0 +1,572 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* Copyright (c) 2014 Yubico AB
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions are
7
+ * met:
8
+ *
9
+ * * Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ *
12
+ * * Redistributions in binary form must reproduce the above
13
+ * copyright notice, this list of conditions and the following
14
+ * disclaimer in the documentation and/or other materials provided
15
+ * with the distribution.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ namespace u2flib_server;
31
+
32
+ /** Constant for the version of the u2f protocol */
33
+ const U2F_VERSION = "U2F_V2";
34
+
35
+ /** Constant for the type value in registration clientData */
36
+ const REQUEST_TYPE_REGISTER = "navigator.id.finishEnrollment";
37
+
38
+ /** Constant for the type value in authentication clientData */
39
+ const REQUEST_TYPE_AUTHENTICATE = "navigator.id.getAssertion";
40
+
41
+ /** Error for the authentication message not matching any outstanding
42
+ * authentication request */
43
+ const ERR_NO_MATCHING_REQUEST = 1;
44
+
45
+ /** Error for the authentication message not matching any registration */
46
+ const ERR_NO_MATCHING_REGISTRATION = 2;
47
+
48
+ /** Error for the signature on the authentication message not verifying with
49
+ * the correct key */
50
+ const ERR_AUTHENTICATION_FAILURE = 3;
51
+
52
+ /** Error for the challenge in the registration message not matching the
53
+ * registration challenge */
54
+ const ERR_UNMATCHED_CHALLENGE = 4;
55
+
56
+ /** Error for the attestation signature on the registration message not
57
+ * verifying */
58
+ const ERR_ATTESTATION_SIGNATURE = 5;
59
+
60
+ /** Error for the attestation verification not verifying */
61
+ const ERR_ATTESTATION_VERIFICATION = 6;
62
+
63
+ /** Error for not getting good random from the system */
64
+ const ERR_BAD_RANDOM = 7;
65
+
66
+ /** Error when the counter is lower than expected */
67
+ const ERR_COUNTER_TOO_LOW = 8;
68
+
69
+ /** Error decoding public key */
70
+ const ERR_PUBKEY_DECODE = 9;
71
+
72
+ /** Error user-agent returned error */
73
+ const ERR_BAD_UA_RETURNING = 10;
74
+
75
+ /** Error old OpenSSL version */
76
+ const ERR_OLD_OPENSSL = 11;
77
+
78
+ /** Error for the origin not matching the appId */
79
+ const ERR_NO_MATCHING_ORIGIN = 12;
80
+
81
+ /** Error for the type in clientData being invalid */
82
+ const ERR_BAD_TYPE = 13;
83
+
84
+ /** Error for bad user presence byte value */
85
+ const ERR_BAD_USER_PRESENCE = 14;
86
+
87
+ /** @internal */
88
+ const PUBKEY_LEN = 65;
89
+
90
+ class U2F
91
+ {
92
+ /** @var string */
93
+ private $appId;
94
+
95
+ /** @var null|string */
96
+ private $attestDir;
97
+
98
+ /** @var array */
99
+ private $facetIds;
100
+
101
+ /** @internal */
102
+ private $FIXCERTS = array(
103
+ '349bca1031f8c82c4ceca38b9cebf1a69df9fb3b94eed99eb3fb9aa3822d26e8',
104
+ 'dd574527df608e47ae45fbba75a2afdd5c20fd94a02419381813cd55a2a3398f',
105
+ '1d8764f0f7cd1352df6150045c8f638e517270e8b5dda1c63ade9c2280240cae',
106
+ 'd0edc9a91a1677435a953390865d208c55b3183c6759c9b5a7ff494c322558eb',
107
+ '6073c436dcd064a48127ddbf6032ac1a66fd59a0c24434f070d4e564c124c897',
108
+ 'ca993121846c464d666096d35f13bf44c1b05af205f9b4a1e00cf6cc10c5e511'
109
+ );
110
+
111
+ /**
112
+ * @param string $appId Application id for the running application
113
+ * @param string|null $attestDir Directory where trusted attestation roots may be found
114
+ * @param array|null $facetIds List of trusted Facet IDs
115
+ * @throws Error If OpenSSL older than 1.0.0 is used
116
+ */
117
+ public function __construct($appId, $attestDir = null, $facetIds = null)
118
+ {
119
+ if(OPENSSL_VERSION_NUMBER < 0x10000000) {
120
+ throw new Error('OpenSSL has to be at least version 1.0.0, this is ' . OPENSSL_VERSION_TEXT, ERR_OLD_OPENSSL);
121
+ }
122
+ $this->appId = $appId;
123
+ $this->attestDir = $attestDir;
124
+
125
+ if(!is_array($facetIds)) {
126
+ $facetIds = [$appId];
127
+ }
128
+ $this->facetIds = $facetIds;
129
+ }
130
+
131
+ /**
132
+ * Called to get a registration request to send to a user.
133
+ * Returns an array of one registration request and a array of sign requests.
134
+ *
135
+ * @param array $registrations List of current registrations for this
136
+ * user, to prevent the user from registering the same authenticator several
137
+ * times.
138
+ * @return array An array of two elements, the first containing a
139
+ * RegisterRequest the second being an array of SignRequest
140
+ * @throws Error
141
+ */
142
+ public function getRegisterData(array $registrations = array())
143
+ {
144
+ $challenge = $this->createChallenge();
145
+ $request = new RegisterRequest($challenge, $this->appId);
146
+ $signs = $this->getAuthenticateData($registrations);
147
+ return array($request, $signs);
148
+ }
149
+
150
+ /**
151
+ * Called to verify and unpack a registration message.
152
+ *
153
+ * @param RegisterRequest $request this is a reply to
154
+ * @param object $response response from a user
155
+ * @param bool $includeCert set to true if the attestation certificate should be
156
+ * included in the returned Registration object
157
+ * @return Registration
158
+ * @throws Error
159
+ */
160
+ public function doRegister($request, $response, $includeCert = true)
161
+ {
162
+ if( !is_object( $request ) ) {
163
+ throw new \InvalidArgumentException('$request of doRegister() method only accepts object.');
164
+ }
165
+
166
+ if( !is_object( $response ) ) {
167
+ throw new \InvalidArgumentException('$response of doRegister() method only accepts object.');
168
+ }
169
+
170
+ if( property_exists( $response, 'errorCode') && $response->errorCode !== 0 ) {
171
+ throw new Error('User-agent returned error. Error code: ' . $response->errorCode, ERR_BAD_UA_RETURNING );
172
+ }
173
+
174
+ if( !is_bool( $includeCert ) ) {
175
+ throw new \InvalidArgumentException('$include_cert of doRegister() method only accepts boolean.');
176
+ }
177
+
178
+ $rawReg = $this->base64u_decode($response->registrationData);
179
+ $regData = array_values(unpack('C*', $rawReg));
180
+ $clientData = $this->base64u_decode($response->clientData);
181
+ $cli = json_decode($clientData);
182
+
183
+ if($cli->challenge !== $request->challenge) {
184
+ throw new Error('Registration challenge does not match', ERR_UNMATCHED_CHALLENGE );
185
+ }
186
+
187
+ if(isset($cli->typ) && $cli->typ !== REQUEST_TYPE_REGISTER) {
188
+ throw new Error('ClientData type is invalid', ERR_BAD_TYPE);
189
+ }
190
+
191
+ if(isset($cli->origin) && !in_array($cli->origin, $this->facetIds, true)) {
192
+ throw new Error('App ID does not match the origin', ERR_NO_MATCHING_ORIGIN);
193
+ }
194
+
195
+ $registration = new Registration();
196
+ $offs = 1;
197
+ $pubKey = substr($rawReg, $offs, PUBKEY_LEN);
198
+ $offs += PUBKEY_LEN;
199
+ // decode the pubKey to make sure it's good
200
+ $tmpKey = $this->pubkey_to_pem($pubKey);
201
+ if($tmpKey === null) {
202
+ throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE );
203
+ }
204
+ $registration->publicKey = base64_encode($pubKey);
205
+ $khLen = $regData[$offs++];
206
+ $kh = substr($rawReg, $offs, $khLen);
207
+ $offs += $khLen;
208
+ $registration->keyHandle = $this->base64u_encode($kh);
209
+
210
+ // length of certificate is stored in byte 3 and 4 (excluding the first 4 bytes)
211
+ $certLen = 4;
212
+ $certLen += ($regData[$offs + 2] << 8);
213
+ $certLen += $regData[$offs + 3];
214
+
215
+ $rawCert = $this->fixSignatureUnusedBits(substr($rawReg, $offs, $certLen));
216
+ $offs += $certLen;
217
+ $pemCert = "-----BEGIN CERTIFICATE-----\r\n";
218
+ $pemCert .= chunk_split(base64_encode($rawCert), 64);
219
+ $pemCert .= "-----END CERTIFICATE-----";
220
+ if($includeCert) {
221
+ $registration->certificate = base64_encode($rawCert);
222
+ }
223
+ if($this->attestDir) {
224
+ if(openssl_x509_checkpurpose($pemCert, -1, $this->get_certs()) !== true) {
225
+ throw new Error('Attestation certificate can not be validated', ERR_ATTESTATION_VERIFICATION );
226
+ }
227
+ }
228
+
229
+ if(!openssl_pkey_get_public($pemCert)) {
230
+ throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE );
231
+ }
232
+ $signature = substr($rawReg, $offs);
233
+
234
+ $dataToVerify = pack('C', 0);
235
+ $dataToVerify .= hash('sha256', $request->appId, true);
236
+ $dataToVerify .= hash('sha256', $clientData, true);
237
+ $dataToVerify .= $kh;
238
+ $dataToVerify .= $pubKey;
239
+
240
+ if(openssl_verify($dataToVerify, $signature, $pemCert, 'sha256') === 1) {
241
+ return $registration;
242
+ } else {
243
+ throw new Error('Attestation signature does not match', ERR_ATTESTATION_SIGNATURE );
244
+ }
245
+ }
246
+
247
+ /**
248
+ * Called to get an authentication request.
249
+ *
250
+ * @param array $registrations An array of the registrations to create authentication requests for.
251
+ * @return array An array of SignRequest
252
+ * @throws Error
253
+ */
254
+ public function getAuthenticateData(array $registrations)
255
+ {
256
+ $sigs = array();
257
+ $challenge = $this->createChallenge();
258
+ foreach ($registrations as $reg) {
259
+ if( !is_object( $reg ) ) {
260
+ throw new \InvalidArgumentException('$registrations of getAuthenticateData() method only accepts array of object.');
261
+ }
262
+ /** @var Registration $reg */
263
+
264
+ $sig = new SignRequest();
265
+ $sig->appId = $this->appId;
266
+ $sig->keyHandle = $reg->keyHandle;
267
+ $sig->challenge = $challenge;
268
+ $sigs[] = $sig;
269
+ }
270
+ return $sigs;
271
+ }
272
+
273
+ /**
274
+ * Called to verify an authentication response
275
+ *
276
+ * @param array $requests An array of outstanding authentication requests
277
+ * @param array $registrations An array of current registrations
278
+ * @param object $response A response from the authenticator
279
+ * @return Registration
280
+ * @throws Error
281
+ *
282
+ * The Registration object returned on success contains an updated counter
283
+ * that should be saved for future authentications.
284
+ * If the Error returned is ERR_COUNTER_TOO_LOW this is an indication of
285
+ * token cloning or similar and appropriate action should be taken.
286
+ */
287
+ public function doAuthenticate(array $requests, array $registrations, $response)
288
+ {
289
+ if( !is_object( $response ) ) {
290
+ throw new \InvalidArgumentException('$response of doAuthenticate() method only accepts object.');
291
+ }
292
+
293
+ if( property_exists( $response, 'errorCode') && $response->errorCode !== 0 ) {
294
+ throw new Error('User-agent returned error. Error code: ' . $response->errorCode, ERR_BAD_UA_RETURNING );
295
+ }
296
+
297
+ /** @var object|null $req */
298
+ $req = null;
299
+
300
+ /** @var object|null $reg */
301
+ $reg = null;
302
+
303
+ $clientData = $this->base64u_decode($response->clientData);
304
+ $decodedClient = json_decode($clientData);
305
+
306
+ if(isset($decodedClient->typ) && $decodedClient->typ !== REQUEST_TYPE_AUTHENTICATE) {
307
+ throw new Error('ClientData type is invalid', ERR_BAD_TYPE);
308
+ }
309
+
310
+ foreach ($requests as $req) {
311
+ if( !is_object( $req ) ) {
312
+ throw new \InvalidArgumentException('$requests of doAuthenticate() method only accepts array of object.');
313
+ }
314
+
315
+ if($req->keyHandle === $response->keyHandle && $req->challenge === $decodedClient->challenge) {
316
+ break;
317
+ }
318
+
319
+ $req = null;
320
+ }
321
+ if($req === null) {
322
+ throw new Error('No matching request found', ERR_NO_MATCHING_REQUEST );
323
+ }
324
+ if(isset($decodedClient->origin) && !in_array($decodedClient->origin, $this->facetIds, true)) {
325
+ throw new Error('App ID does not match the origin', ERR_NO_MATCHING_ORIGIN);
326
+ }
327
+ foreach ($registrations as $reg) {
328
+ if( !is_object( $reg ) ) {
329
+ throw new \InvalidArgumentException('$registrations of doAuthenticate() method only accepts array of object.');
330
+ }
331
+
332
+ if($reg->keyHandle === $response->keyHandle) {
333
+ break;
334
+ }
335
+ $reg = null;
336
+ }
337
+ if($reg === null) {
338
+ throw new Error('No matching registration found', ERR_NO_MATCHING_REGISTRATION );
339
+ }
340
+ $pemKey = $this->pubkey_to_pem($this->base64u_decode($reg->publicKey));
341
+ if($pemKey === null) {
342
+ throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE );
343
+ }
344
+
345
+ $signData = $this->base64u_decode($response->signatureData);
346
+ $dataToVerify = hash('sha256', $req->appId, true);
347
+ $dataToVerify .= substr($signData, 0, 5);
348
+ $dataToVerify .= hash('sha256', $clientData, true);
349
+ $signature = substr($signData, 5);
350
+
351
+ if(openssl_verify($dataToVerify, $signature, $pemKey, 'sha256') === 1) {
352
+ $upb = unpack("Cupb", substr($signData, 0, 1));
353
+ if($upb['upb'] !== 1) {
354
+ throw new Error('User presence byte value is invalid', ERR_BAD_USER_PRESENCE );
355
+ }
356
+ $ctr = unpack("Nctr", substr($signData, 1, 4));
357
+ $counter = $ctr['ctr'];
358
+ /* TODO: wrap-around should be handled somehow.. */
359
+ if($counter > $reg->counter) {
360
+ $reg->counter = $counter;
361
+ return self::castObjectToRegistration($reg);
362
+ } else {
363
+ throw new Error('Counter too low.', ERR_COUNTER_TOO_LOW );
364
+ }
365
+ } else {
366
+ throw new Error('Authentication failed', ERR_AUTHENTICATION_FAILURE );
367
+ }
368
+ }
369
+
370
+ /**
371
+ * @param object $object
372
+ * @return Registration
373
+ */
374
+ protected static function castObjectToRegistration($object)
375
+ {
376
+ $reg = new Registration();
377
+ if (isset($object->publicKey)) {
378
+ $reg->publicKey = $object->publicKey;
379
+ }
380
+ if (isset($object->certificate)) {
381
+ $reg->certificate = $object->certificate;
382
+ }
383
+ if (isset($object->counter)) {
384
+ $reg->counter = $object->counter;
385
+ }
386
+ if (isset($object->keyHandle)) {
387
+ $reg->keyHandle = $object->keyHandle;
388
+ }
389
+ return $reg;
390
+ }
391
+
392
+ /**
393
+ * @return array
394
+ */
395
+ private function get_certs()
396
+ {
397
+ $files = array();
398
+ $dir = $this->attestDir;
399
+ if($dir !== null && is_dir($dir) && $handle = opendir($dir)) {
400
+ while(false !== ($entry = readdir($handle))) {
401
+ if(is_file("$dir/$entry")) {
402
+ $files[] = "$dir/$entry";
403
+ }
404
+ }
405
+ closedir($handle);
406
+ } elseif (is_file("$dir")) {
407
+ $files[] = "$dir";
408
+ }
409
+ return $files;
410
+ }
411
+
412
+ /**
413
+ * @param string $data
414
+ * @return string
415
+ */
416
+ private function base64u_encode($data)
417
+ {
418
+ return trim(strtr(base64_encode($data), '+/', '-_'), '=');
419
+ }
420
+
421
+ /**
422
+ * @param string $data
423
+ * @return string
424
+ */
425
+ private function base64u_decode($data)
426
+ {
427
+ return base64_decode(strtr($data, '-_', '+/'));
428
+ }
429
+
430
+ /**
431
+ * @param string $key
432
+ * @return null|string
433
+ */
434
+ private function pubkey_to_pem($key)
435
+ {
436
+ if(strlen($key) !== PUBKEY_LEN || $key[0] !== "\x04") {
437
+ return null;
438
+ }
439
+
440
+ /*
441
+ * Convert the public key to binary DER format first
442
+ * Using the ECC SubjectPublicKeyInfo OIDs from RFC 5480
443
+ *
444
+ * SEQUENCE(2 elem) 30 59
445
+ * SEQUENCE(2 elem) 30 13
446
+ * OID1.2.840.10045.2.1 (id-ecPublicKey) 06 07 2a 86 48 ce 3d 02 01
447
+ * OID1.2.840.10045.3.1.7 (secp256r1) 06 08 2a 86 48 ce 3d 03 01 07
448
+ * BIT STRING(520 bit) 03 42 ..key..
449
+ */
450
+ $der = "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01";
451
+ $der .= "\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42";
452
+ $der .= "\0".$key;
453
+
454
+ $pem = "-----BEGIN PUBLIC KEY-----\r\n";
455
+ $pem .= chunk_split(base64_encode($der), 64);
456
+ $pem .= "-----END PUBLIC KEY-----";
457
+
458
+ return $pem;
459
+ }
460
+
461
+ /**
462
+ * @return string
463
+ * @throws Error
464
+ */
465
+ private function createChallenge()
466
+ {
467
+ $challenge = random_bytes(32);
468
+ $challenge = $this->base64u_encode( $challenge );
469
+
470
+ return $challenge;
471
+ }
472
+
473
+ /**
474
+ * Fixes a certificate where the signature contains unused bits.
475
+ *
476
+ * @param string $cert
477
+ * @return mixed
478
+ */
479
+ private function fixSignatureUnusedBits($cert)
480
+ {
481
+ if(in_array(hash('sha256', $cert), $this->FIXCERTS, true)) {
482
+ $cert[strlen($cert) - 257] = "\0";
483
+ }
484
+ return $cert;
485
+ }
486
+ }
487
+
488
+ /**
489
+ * Class for building a registration request
490
+ *
491
+ * @package u2flib_server
492
+ */
493
+ class RegisterRequest
494
+ {
495
+ /** @var string Protocol version */
496
+ public $version = U2F_VERSION;
497
+
498
+ /** @var string Registration challenge */
499
+ public $challenge;
500
+
501
+ /** @var string Application id */
502
+ public $appId;
503
+
504
+ /**
505
+ * @param string $challenge
506
+ * @param string $appId
507
+ * @internal
508
+ */
509
+ public function __construct($challenge, $appId)
510
+ {
511
+ $this->challenge = $challenge;
512
+ $this->appId = $appId;
513
+ }
514
+ }
515
+
516
+ /**
517
+ * Class for building up an authentication request
518
+ *
519
+ * @package u2flib_server
520
+ */
521
+ class SignRequest
522
+ {
523
+ /** @var string Protocol version */
524
+ public $version = U2F_VERSION;
525
+
526
+ /** @var string Authentication challenge */
527
+ public $challenge = '';
528
+
529
+ /** @var string Key handle of a registered authenticator */
530
+ public $keyHandle = '';
531
+
532
+ /** @var string Application id */
533
+ public $appId = '';
534
+ }
535
+
536
+ /**
537
+ * Class returned for successful registrations
538
+ *
539
+ * @package u2flib_server
540
+ */
541
+ class Registration
542
+ {
543
+ /** @var string The key handle of the registered authenticator */
544
+ public $keyHandle = '';
545
+
546
+ /** @var string The public key of the registered authenticator */
547
+ public $publicKey = '';
548
+
549
+ /** @var string The attestation certificate of the registered authenticator */
550
+ public $certificate = '';
551
+
552
+ /** @var int The counter associated with this registration */
553
+ public $counter = -1;
554
+ }
555
+
556
+ /**
557
+ * Error class, returned on errors
558
+ *
559
+ * @package u2flib_server
560
+ */
561
+ class Error extends \Exception
562
+ {
563
+ /**
564
+ * Override constructor and make message and code mandatory
565
+ * @param string $message
566
+ * @param int $code
567
+ * @param \Exception|null $previous
568
+ */
569
+ public function __construct($message, $code, \Exception $previous = null) {
570
+ parent::__construct($message, $code, $previous);
571
+ }
572
+ }
src/lib/src/Controller/Controller.php CHANGED
@@ -1160,7 +1160,7 @@ class Controller {
1160
  * @param string $sKey
1161
  * @return mixed|null
1162
  */
1163
- protected function getPluginSpec_Path( $sKey ) {
1164
  $aData = $this->getPluginSpec()[ 'paths' ];
1165
  return isset( $aData[ $sKey ] ) ? $aData[ $sKey ] : null;
1166
  }
@@ -1606,6 +1606,18 @@ class Controller {
1606
  return $this->getPluginSpec_Property( 'version' );
1607
  }
1608
 
 
 
 
 
 
 
 
 
 
 
 
 
1609
  /**
1610
  * @return int
1611
  */
@@ -1623,9 +1635,9 @@ class Controller {
1623
  }
1624
 
1625
  /**
1626
- * @return mixed|\stdClass
1627
  */
1628
- protected function getPluginControllerOptions() {
1629
  if ( !isset( self::$oControllerOptions ) ) {
1630
 
1631
  self::$oControllerOptions = Services::WpGeneral()->getOption( $this->getPluginControllerOptionsKey() );
@@ -1691,14 +1703,15 @@ class Controller {
1691
  }
1692
 
1693
  protected function saveCurrentPluginControllerOptions() {
 
1694
  add_filter( $this->prefix( 'bypass_is_plugin_admin' ), '__return_true' );
1695
  if ( $this->plugin_deleting ) {
1696
- Services::WpGeneral()->deleteOption( $this->getPluginControllerOptionsKey() );
1697
  }
1698
  else {
1699
  $oOptions = $this->getPluginControllerOptions();
1700
  if ( $this->sConfigOptionsHashWhenLoaded != md5( serialize( $oOptions ) ) ) {
1701
- Services::WpGeneral()->updateOption( $this->getPluginControllerOptionsKey(), $oOptions );
1702
  }
1703
  }
1704
  remove_filter( $this->prefix( 'bypass_is_plugin_admin' ), '__return_true' );
@@ -1872,6 +1885,12 @@ class Controller {
1872
  }
1873
 
1874
  $this->modules_loaded = true;
 
 
 
 
 
 
1875
  do_action( $this->prefix( 'modules_loaded' ) );
1876
  do_action( $this->prefix( 'run_processors' ) );
1877
  return $bSuccess;
@@ -2062,7 +2081,13 @@ class Controller {
2062
  * @return \FernleafSystems\Wordpress\Services\Utilities\Render
2063
  */
2064
  public function getRenderer() {
2065
- return Services::Render()->setTemplateRoot( $this->getPath_Templates() );
 
 
 
 
 
 
2066
  }
2067
 
2068
  /**
@@ -2221,12 +2246,4 @@ class Controller {
2221
  ->run();
2222
  }
2223
  }
2224
-
2225
- /**
2226
- * @return bool
2227
- * @deprecated 9.0
2228
- */
2229
- public function isPluginDeleting() {
2230
- return (bool)$this->plugin_deleting;
2231
- }
2232
  }
1160
  * @param string $sKey
1161
  * @return mixed|null
1162
  */
1163
+ public function getPluginSpec_Path( $sKey ) {
1164
  $aData = $this->getPluginSpec()[ 'paths' ];
1165
  return isset( $aData[ $sKey ] ) ? $aData[ $sKey ] : null;
1166
  }
1606
  return $this->getPluginSpec_Property( 'version' );
1607
  }
1608
 
1609
+ /**
1610
+ * @return string
1611
+ */
1612
+ public function getPreviousVersion() {
1613
+ $oOpts = $this->getPluginControllerOptions();
1614
+ if ( empty( $oOpts->previous_version ) ) {
1615
+ $oOpts->previous_version = '9.0.4'; //@deprecated 9.0.4
1616
+ // $oOpts->previous_version = $this->getVersion();
1617
+ }
1618
+ return $oOpts->previous_version;
1619
+ }
1620
+
1621
  /**
1622
  * @return int
1623
  */
1635
  }
1636
 
1637
  /**
1638
+ * @return \stdClass
1639
  */
1640
+ public function getPluginControllerOptions() {
1641
  if ( !isset( self::$oControllerOptions ) ) {
1642
 
1643
  self::$oControllerOptions = Services::WpGeneral()->getOption( $this->getPluginControllerOptionsKey() );
1703
  }
1704
 
1705
  protected function saveCurrentPluginControllerOptions() {
1706
+ $oWP = Services::WpGeneral();
1707
  add_filter( $this->prefix( 'bypass_is_plugin_admin' ), '__return_true' );
1708
  if ( $this->plugin_deleting ) {
1709
+ $oWP->deleteOption( $this->getPluginControllerOptionsKey() );
1710
  }
1711
  else {
1712
  $oOptions = $this->getPluginControllerOptions();
1713
  if ( $this->sConfigOptionsHashWhenLoaded != md5( serialize( $oOptions ) ) ) {
1714
+ $oWP->updateOption( $this->getPluginControllerOptionsKey(), $oOptions );
1715
  }
1716
  }
1717
  remove_filter( $this->prefix( 'bypass_is_plugin_admin' ), '__return_true' );
1885
  }
1886
 
1887
  $this->modules_loaded = true;
1888
+
1889
+ // Upgrade modules
1890
+ ( new Shield\Controller\Utilities\Upgrade() )
1891
+ ->setCon( $this )
1892
+ ->execute();
1893
+
1894
  do_action( $this->prefix( 'modules_loaded' ) );
1895
  do_action( $this->prefix( 'run_processors' ) );
1896
  return $bSuccess;
2081
  * @return \FernleafSystems\Wordpress\Services\Utilities\Render
2082
  */
2083
  public function getRenderer() {
2084
+ $oRndr = Services::Render();
2085
+ $oLocator = ( new Shield\Render\LocateTemplateDirs() )->setCon( $this );
2086
+ foreach ( $oLocator->run() as $sDir ) {
2087
+ $oRndr->setTwigTemplateRoot( $sDir );
2088
+ }
2089
+ $oRndr->setTemplateRoot( $this->getPath_Templates() );
2090
+ return $oRndr;
2091
  }
2092
 
2093
  /**
2246
  ->run();
2247
  }
2248
  }
 
 
 
 
 
 
 
 
2249
  }
src/lib/src/Controller/Utilities/Upgrade.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Controller\Utilities;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield;
6
+
7
+ class Upgrade {
8
+
9
+ use Shield\Modules\PluginControllerConsumer;
10
+ use \FernleafSystems\Utilities\Logic\OneTimeExecute;
11
+
12
+ protected function run() {
13
+ $oCon = $this->getCon();
14
+
15
+ if ( $oCon->getPreviousVersion() !== $oCon->getVersion() ) {
16
+ foreach ( $oCon->modules as $oMod ) {
17
+ $oH = $oMod->getUpgradeHandler();
18
+ if ( $oH instanceof Shield\Modules\Base\Upgrade ) {
19
+ $oH->setMod( $oMod )->execute();
20
+ }
21
+ }
22
+ }
23
+
24
+ $oCon->getPluginControllerOptions()->previous_version = $oCon->getVersion();
25
+ }
26
+ }
src/lib/src/Databases/Base/Handler.php CHANGED
@@ -294,7 +294,33 @@ class Handler {
294
  * @return string
295
  */
296
  protected function getDefaultCreateTableSql() {
297
- return '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  }
299
 
300
  /**
@@ -362,4 +388,30 @@ class Handler {
362
  $this->reset();
363
  return $mResult !== false;
364
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
365
  }
294
  * @return string
295
  */
296
  protected function getDefaultCreateTableSql() {
297
+ $aCols = [];
298
+ foreach ( $this->enumerateColumns() as $col => $def ) {
299
+ $aCols[] = sprintf( '%s %s', $col, $def );
300
+ }
301
+ $aCols[] = $this->getPrimaryKeySpec();
302
+
303
+ return "CREATE TABLE %s (
304
+ ".implode( ", ", $aCols )."
305
+ ) %s;";
306
+ }
307
+
308
+ /**
309
+ * @return string[]
310
+ */
311
+ protected function getColumnsAsArray() {
312
+ return [];
313
+ }
314
+
315
+ /**
316
+ * @return string[]
317
+ */
318
+ public function enumerateColumns() {
319
+ return array_merge(
320
+ $this->getColumn_ID(),
321
+ $this->getColumnsAsArray(),
322
+ $this->getColumns_Ats()
323
+ );
324
  }
325
 
326
  /**
388
  $this->reset();
389
  return $mResult !== false;
390
  }
391
+
392
+ /**
393
+ * @return string[]
394
+ */
395
+ protected function getColumn_ID() {
396
+ return [
397
+ 'id' => 'int(11) UNSIGNED NOT NULL AUTO_INCREMENT',
398
+ ];
399
+ }
400
+
401
+ /**
402
+ * @return string[]
403
+ */
404
+ protected function getColumns_Ats() {
405
+ return [
406
+ 'created_at' => "int(15) UNSIGNED NOT NULL DEFAULT 0",
407
+ 'deleted_at' => "int(15) UNSIGNED NOT NULL DEFAULT 0",
408
+ ];
409
+ }
410
+
411
+ /**
412
+ * @return strinG
413
+ */
414
+ protected function getPrimaryKeySpec() {
415
+ return 'PRIMARY KEY (id)';
416
+ }
417
  }
src/lib/src/Databases/IPs/Handler.php CHANGED
@@ -50,22 +50,18 @@ class Handler extends Base\Handler {
50
  }
51
 
52
  /**
53
- * @return string
54
  */
55
- protected function getDefaultCreateTableSql() {
56
- return "CREATE TABLE %s (
57
- id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
58
- ip varchar(40) NOT NULL DEFAULT '',
59
- label varchar(255) NOT NULL DEFAULT '',
60
- transgressions smallint(1) UNSIGNED NOT NULL DEFAULT 0,
61
- list varchar(4) NOT NULL DEFAULT '',
62
- ip6 tinyint(1) NOT NULL DEFAULT 0,
63
- is_range tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
64
- last_access_at int(15) UNSIGNED NOT NULL DEFAULT 0,
65
- blocked_at int(15) UNSIGNED NOT NULL DEFAULT 0,
66
- created_at int(15) UNSIGNED NOT NULL DEFAULT 0,
67
- deleted_at int(15) UNSIGNED NOT NULL DEFAULT 0,
68
- PRIMARY KEY (id)
69
- ) %s;";
70
  }
71
  }
50
  }
51
 
52
  /**
53
+ * @return string[]
54
  */
55
+ protected function getColumnsAsArray() {
56
+ return [
57
+ 'ip' => "varchar(60) NOT NULL DEFAULT '' COMMENT 'Human readable IP address or range'",
58
+ 'label' => "varchar(255) NOT NULL DEFAULT ''",
59
+ 'transgressions' => "smallint(1) UNSIGNED NOT NULL DEFAULT 0",
60
+ 'list' => "varchar(4) NOT NULL DEFAULT ''",
61
+ 'ip6' => "tinyint(1) UNSIGNED NOT NULL DEFAULT 0",
62
+ 'is_range' => "tinyint(1) UNSIGNED NOT NULL DEFAULT 0",
63
+ 'last_access_at' => "int(15) UNSIGNED NOT NULL DEFAULT 0",
64
+ 'blocked_at' => "int(15) UNSIGNED NOT NULL DEFAULT 0",
65
+ ];
 
 
 
 
66
  }
67
  }
src/lib/src/License/EddLicenseVO.php CHANGED
@@ -5,7 +5,8 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\License;
5
  /**
6
  * Class EddLicenseVO
7
  * @package FernleafSystems\Wordpress\Plugin\Shield\License
8
- * @property bool $is_central
 
9
  */
10
  class EddLicenseVO extends \FernleafSystems\Wordpress\Services\Utilities\Licenses\EddLicenseVO {
11
 
5
  /**
6
  * Class EddLicenseVO
7
  * @package FernleafSystems\Wordpress\Plugin\Shield\License
8
+ * @property bool $is_central
9
+ * @property string $aff_ref
10
  */
11
  class EddLicenseVO extends \FernleafSystems\Wordpress\Services\Utilities\Licenses\EddLicenseVO {
12
 
src/lib/src/Modules/AuditTrail/AjaxHandler.php CHANGED
@@ -85,7 +85,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
85
 
86
  return [
87
  'success' => true,
88
- 'html' => $oTableBuilder->buildTable()
89
  ];
90
  }
91
  }
85
 
86
  return [
87
  'success' => true,
88
+ 'html' => $oTableBuilder->render()
89
  ];
90
  }
91
  }
src/lib/src/Modules/AuditTrail/Options.php CHANGED
@@ -159,12 +159,4 @@ class Options extends Base\ShieldOptions {
159
  public function updateCTLastSnapshotAt() {
160
  return $this->setOptAt( 'ct_last_snapshot_at' );
161
  }
162
-
163
- /**
164
- * @return int
165
- * @deprecated 9.0
166
- */
167
- public function getDefaultMaxEntries() {
168
- return $this->getDef( 'audit_trail_free_max_entries' );
169
- }
170
  }
159
  public function updateCTLastSnapshotAt() {
160
  return $this->setOptAt( 'ct_last_snapshot_at' );
161
  }
 
 
 
 
 
 
 
 
162
  }
src/lib/src/Modules/AuditTrail/WpCli.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail;
7
+
8
+ class WpCli extends Base\WpCli {
9
+
10
+ /**
11
+ * @inheritDoc
12
+ */
13
+ protected function getCmdHandlers() {
14
+ return [
15
+ new AuditTrail\WpCli\Display()
16
+ ];
17
+ }
18
+ }
src/lib/src/Modules/AuditTrail/WpCli/Display.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail\WpCli;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Tables;
7
+ use WP_CLI;
8
+
9
+ class Display extends Base\WpCli\BaseWpCliCmd {
10
+
11
+ /**
12
+ * @throws \Exception
13
+ */
14
+ protected function addCmds() {
15
+ WP_CLI::add_command(
16
+ $this->buildCmd( [ 'display' ] ),
17
+ [ $this, 'cmdDisplay' ], $this->mergeCommonCmdArgs( [
18
+ 'shortdesc' => 'Import configuration from another WP site running Shield',
19
+ 'synopsis' => [
20
+ // [
21
+ // 'type' => 'assoc',
22
+ // 'name' => 'source',
23
+ // 'optional' => false,
24
+ // 'description' => 'The URL of the source site or absolute path to import file.',
25
+ // ],
26
+ // [
27
+ // 'type' => 'assoc',
28
+ // 'name' => 'site-secret',
29
+ // 'optional' => true,
30
+ // 'default' => null,
31
+ // 'description' => 'The secret key on the source site. Not required if this site is already registered on the source site.',
32
+ // ],
33
+ // [
34
+ // 'type' => 'assoc',
35
+ // 'name' => 'slave',
36
+ // 'optional' => true,
37
+ // 'default' => null,
38
+ // 'options' => [
39
+ // 'add',
40
+ // 'remove',
41
+ // ],
42
+ // 'description' => 'Add or remove this site as a registered slave (in the whitelist) on the source site. Secret is required to `add`.',
43
+ // ],
44
+ // [
45
+ // 'type' => 'flag',
46
+ // 'name' => 'force',
47
+ // 'optional' => true,
48
+ // 'description' => 'By-pass confirmation prompt.',
49
+ // ],
50
+ // [
51
+ // 'type' => 'flag',
52
+ // 'name' => 'delete-file',
53
+ // 'optional' => true,
54
+ // 'description' => 'Delete file after configurations have been imported.',
55
+ // ],
56
+ ],
57
+ ] ) );
58
+ }
59
+
60
+ /**
61
+ * @param array $null
62
+ * @param array $aA
63
+ * @throws WP_CLI\ExitException
64
+ */
65
+ public function cmdDisplay( array $null, array $aA ) {
66
+ /** @var \ICWP_WPSF_FeatureHandler_AuditTrail $oMod */
67
+ $oMod = $this->getMod();
68
+ $oTableBuilder = ( new Tables\Build\AuditTrail() )
69
+ ->setMod( $oMod )
70
+ ->setDbHandler( $oMod->getDbHandler_AuditTrail() );
71
+ ( new Tables\Render\WpCliTable\AuditTrail() )
72
+ ->setDataBuilder( $oTableBuilder )
73
+ ->render();
74
+ }
75
+ }
src/lib/src/Modules/Autoupdates/Options.php CHANGED
@@ -98,29 +98,4 @@ class Options extends Base\ShieldOptions {
98
  public function setDelayTracking( $aTrackingInfo ) {
99
  return $this->setOpt( 'delay_tracking', $aTrackingInfo );
100
  }
101
-
102
- /**
103
- * @return bool
104
- * @deprecated 9.0
105
- */
106
- public function isAutoupdateIndividualPlugins() {
107
- return false;
108
- }
109
-
110
- /**
111
- * @param string $sPluginFile
112
- * @return bool
113
- * @deprecated 9.0
114
- */
115
- public function isPluginSetToAutoupdate( $sPluginFile ) {
116
- return false;
117
- }
118
-
119
- /**
120
- * @return string[]
121
- * @deprecated 9.0
122
- */
123
- public function getAutoupdatePlugins() {
124
- return [];
125
- }
126
  }
98
  public function setDelayTracking( $aTrackingInfo ) {
99
  return $this->setOpt( 'delay_tracking', $aTrackingInfo );
100
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  }
src/lib/src/Modules/Base/Options.php CHANGED
@@ -2,6 +2,7 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
4
 
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
6
  use FernleafSystems\Wordpress\Services\Services;
7
 
@@ -138,6 +139,19 @@ class Options {
138
  return array_diff_key( $aOptions, array_flip( $this->getVirtualCommonOptions() ) );
139
  }
140
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  /**
142
  * Returns an array of all the options with the values for "sensitive" options masked out.
143
  * @return array
@@ -171,6 +185,20 @@ class Options {
171
  return ( isset( $aRawConfig[ 'properties' ] ) && isset( $aRawConfig[ 'properties' ][ $sProperty ] ) ) ? $aRawConfig[ 'properties' ][ $sProperty ] : null;
172
  }
173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
  /**
175
  * @param string
176
  * @return mixed|null
@@ -778,35 +806,45 @@ class Options {
778
  */
779
  public function setOpt( $sOptKey, $mNewValue ) {
780
 
781
- // NOTE: can't use getOpt() for current value since we'll create an infinite loop
782
- $aOptionsValues = $this->getAllOptionsValues();
783
- $mCurrent = isset( $aOptionsValues[ $sOptKey ] ) ? $aOptionsValues[ $sOptKey ] : null;
784
-
785
- $mNewValue = $this->ensureOptValueState( $sOptKey, $mNewValue );
786
-
787
- // Here we try to ensure that values that are repeatedly changed properly reflect their changed
788
- // states, as they may be reverted back to their original state and we "think" it's been changed.
789
- $bValueIsDifferent = serialize( $mCurrent ) !== serialize( $mNewValue );
790
- // basically if we're actually resetting back to the original value
791
- $bIsResetting = $bValueIsDifferent && $this->isOptChanged( $sOptKey )
792
- && ( serialize( $this->getOldValue( $sOptKey ) ) === serialize( $mNewValue ) );
793
 
794
- if ( $bValueIsDifferent && $this->verifyCanSet( $sOptKey, $mNewValue ) ) {
795
- $this->setNeedSave( true );
 
 
 
 
 
 
 
796
 
797
- //Load the config and do some pre-set verification where possible. This will slowly grow.
798
- $aOption = $this->getRawData_SingleOption( $sOptKey );
799
- if ( !empty( $aOption[ 'type' ] ) ) {
800
- if ( $aOption[ 'type' ] == 'boolean' && !is_bool( $mNewValue ) ) {
801
- return $this->resetOptToDefault( $sOptKey );
 
 
 
 
 
 
 
 
 
 
 
 
802
  }
 
 
803
  }
804
- $this->setOldOptValue( $sOptKey, $mCurrent )
805
- ->setOptValue( $sOptKey, $mNewValue );
806
- }
807
 
808
- if ( $bIsResetting ) {
809
- unset( $this->aOld[ $sOptKey ] );
 
810
  }
811
 
812
  return $this;
@@ -828,7 +866,7 @@ class Options {
828
  * @param mixed $mValue
829
  * @return $this
830
  */
831
- private function setOptValue( $sOptKey, $mValue ) {
832
  $aValues = $this->getAllOptionsValues();
833
  $aValues[ $sOptKey ] = $mValue;
834
  $this->aOptionsValues = $aValues;
@@ -836,35 +874,13 @@ class Options {
836
  }
837
 
838
  /**
839
- * Ensures that set options values are of the correct type
840
- * @param string $sOptKey
841
- * @param mixed $mValue
842
- * @return mixed
 
843
  */
844
  private function ensureOptValueState( $sOptKey, $mValue ) {
845
- $sType = $this->getOptionType( $sOptKey );
846
- if ( !empty( $sType ) ) {
847
- switch ( $sType ) {
848
- case 'integer':
849
- $mValue = (int)$mValue;
850
- break;
851
-
852
- case 'text':
853
- case 'email':
854
- $mValue = (string)$mValue;
855
- break;
856
-
857
- case 'array':
858
- case 'multiple_select':
859
- if ( !is_array( $mValue ) ) {
860
- $mValue = $this->getOptDefault( $sOptKey );
861
- }
862
- break;
863
-
864
- default:
865
- break;
866
- }
867
- }
868
  return $mValue;
869
  }
870
 
@@ -928,7 +944,6 @@ class Options {
928
  * @return mixed
929
  */
930
  public function unsetOpt( $sOptionKey ) {
931
-
932
  unset( $this->aOptionsValues[ $sOptionKey ] );
933
  $this->setNeedSave( true );
934
  return true;
@@ -1084,4 +1099,14 @@ class Options {
1084
  $this->sPathToConfig = $sPathToConfig;
1085
  return $this;
1086
  }
 
 
 
 
 
 
 
 
 
 
1087
  }
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
4
 
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\Options\OptValueSanitize;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
7
  use FernleafSystems\Wordpress\Services\Services;
8
 
139
  return array_diff_key( $aOptions, array_flip( $this->getVirtualCommonOptions() ) );
140
  }
141
 
142
+ /**
143
+ * @return string[]
144
+ */
145
+ public function getOptionsForWpCli() {
146
+ return array_filter(
147
+ $this->getOptionsKeys(),
148
+ function ( $sKey ) {
149
+ return $this->getRawData_SingleOption( $sKey )[ 'section' ]
150
+ !== 'section_non_ui';
151
+ }
152
+ );
153
+ }
154
+
155
  /**
156
  * Returns an array of all the options with the values for "sensitive" options masked out.
157
  * @return array
185
  return ( isset( $aRawConfig[ 'properties' ] ) && isset( $aRawConfig[ 'properties' ][ $sProperty ] ) ) ? $aRawConfig[ 'properties' ][ $sProperty ] : null;
186
  }
187
 
188
+ /**
189
+ * @return array
190
+ */
191
+ public function getWpCliCfg() {
192
+ $aCfg = $this->getRawData_FullFeatureConfig();
193
+ return array_merge(
194
+ [
195
+ 'enabled' => true,
196
+ 'root' => $this->getSlug(),
197
+ ],
198
+ empty( $aCfg[ 'wpcli' ] ) ? [] : $aCfg[ 'wpcli' ]
199
+ );
200
+ }
201
+
202
  /**
203
  * @param string
204
  * @return mixed|null
806
  */
807
  public function setOpt( $sOptKey, $mNewValue ) {
808
 
809
+ // NOTE: can't use getOpt() for current as it'll create infinite loop
810
+ $aOptVals = $this->getAllOptionsValues();
811
+ $mCurrent = isset( $aOptVals[ $sOptKey ] ) ? $aOptVals[ $sOptKey ] : null;
 
 
 
 
 
 
 
 
 
812
 
813
+ try {
814
+ $mNewValue = ( new OptValueSanitize() )
815
+ ->setMod( $this->getMod() )
816
+ ->run( $sOptKey, $mNewValue );
817
+ $bVerified = true;
818
+ }
819
+ catch ( \Exception $oE ) {
820
+ $bVerified = false;
821
+ }
822
 
823
+ if ( $bVerified ) {
824
+ // Here we try to ensure that values that are repeatedly changed properly reflect their changed
825
+ // states, as they may be reverted back to their original state and we "think" it's been changed.
826
+ $bValueIsDifferent = serialize( $mCurrent ) !== serialize( $mNewValue );
827
+ // basically if we're actually resetting back to the original value
828
+ $bIsResetting = $bValueIsDifferent && $this->isOptChanged( $sOptKey )
829
+ && ( serialize( $this->getOldValue( $sOptKey ) ) === serialize( $mNewValue ) );
830
+
831
+ if ( $bValueIsDifferent && $this->verifyCanSet( $sOptKey, $mNewValue ) ) {
832
+ $this->setNeedSave( true );
833
+
834
+ //Load the config and do some pre-set verification where possible. This will slowly grow.
835
+ $aOption = $this->getRawData_SingleOption( $sOptKey );
836
+ if ( !empty( $aOption[ 'type' ] ) ) {
837
+ if ( $aOption[ 'type' ] == 'boolean' && !is_bool( $mNewValue ) ) {
838
+ return $this->resetOptToDefault( $sOptKey );
839
+ }
840
  }
841
+ $this->setOldOptValue( $sOptKey, $mCurrent )
842
+ ->setOptValue( $sOptKey, $mNewValue );
843
  }
 
 
 
844
 
845
+ if ( $bIsResetting ) {
846
+ unset( $this->aOld[ $sOptKey ] );
847
+ }
848
  }
849
 
850
  return $this;
866
  * @param mixed $mValue
867
  * @return $this
868
  */
869
+ public function setOptValue( $sOptKey, $mValue ) {
870
  $aValues = $this->getAllOptionsValues();
871
  $aValues[ $sOptKey ] = $mValue;
872
  $this->aOptionsValues = $aValues;
874
  }
875
 
876
  /**
877
+ * @param $sOptKey
878
+ * @param $mValue
879
+ * @return array|int|mixed|string
880
+ * @throws \Exception
881
+ * @deprecated 9.1.0
882
  */
883
  private function ensureOptValueState( $sOptKey, $mValue ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
884
  return $mValue;
885
  }
886
 
944
  * @return mixed
945
  */
946
  public function unsetOpt( $sOptionKey ) {
 
947
  unset( $this->aOptionsValues[ $sOptionKey ] );
948
  $this->setNeedSave( true );
949
  return true;
1099
  $this->sPathToConfig = $sPathToConfig;
1100
  return $this;
1101
  }
1102
+
1103
+ /**
1104
+ * @param $aValues
1105
+ * @return $this
1106
+ */
1107
+ public function setOptionsValues( array $aValues = [] ) {
1108
+ $this->aOptionsValues = $aValues;
1109
+ $this->setNeedSave( true );
1110
+ return $this;
1111
+ }
1112
  }
src/lib/src/Modules/Base/Options/OptValueSanitize.php ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\Options;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
6
+ use FernleafSystems\Wordpress\Services\Services;
7
+
8
+ class OptValueSanitize {
9
+
10
+ use ModConsumer;
11
+
12
+ /**
13
+ * @param string $sKey
14
+ * @param mixed $mVal
15
+ * @return mixed
16
+ * @throws \Exception
17
+ */
18
+ public function run( $sKey, $mVal ) {
19
+ $oOpts = $this->getOptions();
20
+ $aRawOption = $oOpts->getRawData_SingleOption( $sKey );
21
+
22
+ if ( !in_array( $sKey, $oOpts->getOptionsKeys() ) ) {
23
+ throw new \Exception( sprintf( 'Not a valid option key for module: %s', $sKey ) );
24
+ }
25
+
26
+ $validValue = false;
27
+ switch ( $oOpts->getOptionType( $sKey ) ) {
28
+
29
+ case 'boolean':
30
+ $validValue = is_bool( $mVal );
31
+ break;
32
+
33
+ case 'integer':
34
+ $validValue = is_numeric( $mVal );
35
+ if ( $validValue ) {
36
+ $mVal = (int)$mVal;
37
+ }
38
+ break;
39
+
40
+ case 'email':
41
+ $mVal = trim( (string)$mVal );
42
+ $validValue = empty($mVal) || Services::Data()->validEmail( $mVal );
43
+ break;
44
+
45
+ case 'array':
46
+ $validValue = is_array( $mVal );
47
+ break;
48
+
49
+ case 'text':
50
+ if ( is_scalar( $mVal ) ) {
51
+ $validValue = is_null( $mVal ) || is_scalar( $mVal );
52
+ $mVal = (string)$mVal;
53
+ }
54
+ break;
55
+
56
+ case 'select':
57
+ $validValue = is_string( $mVal ) && strlen( $mVal ) > 0;
58
+ break;
59
+
60
+ case 'multiple_select':
61
+ if ( is_array( $mVal ) ) {
62
+ $validValue = count( array_diff(
63
+ $mVal,
64
+ array_map(
65
+ function ( $aValueOption ) {
66
+ return $aValueOption[ 'value_key' ];
67
+ },
68
+ $aRawOption[ 'value_options' ]
69
+ )
70
+ ) ) === 0;
71
+ }
72
+ break;
73
+
74
+ case 'checkbox':
75
+ if ( is_string( $mVal ) ) {
76
+ $mVal = strtoupper( $mVal );
77
+ $validValue = in_array( $mVal, [ 'Y', 'N' ] );
78
+ }
79
+ break;
80
+
81
+ default:
82
+ $validValue = true;
83
+ break;
84
+ }
85
+
86
+ if ( !$validValue ) {
87
+ throw new \Exception( 'Not a valid value type for option.' );
88
+ }
89
+
90
+ return $mVal;
91
+ }
92
+ }
src/lib/src/Modules/Base/Strings.php CHANGED
@@ -74,12 +74,12 @@ class Strings {
74
  'description' => __( 'Description', 'wp-simple-firewall' ),
75
  'loading' => __( 'Loading', 'wp-simple-firewall' ),
76
  'aar_title' => __( 'Plugin Access Restricted', 'wp-simple-firewall' ),
77
- 'aar_what_should_you_enter' => __( 'This security plugin is restricted to administrators with the Security Access Key.', 'wp-simple-firewall' ),
78
- 'aar_must_supply_key_first' => __( 'Please provide the Security Access Key to manage this plugin.', 'wp-simple-firewall' ),
79
- 'aar_to_manage_must_enter_key' => __( 'To manage this plugin you must enter the access key.', 'wp-simple-firewall' ),
80
- 'aar_enter_access_key' => __( 'Enter Access Key', 'wp-simple-firewall' ),
81
- 'aar_submit_access_key' => __( 'Submit Security Admin Key', 'wp-simple-firewall' ),
82
- 'aar_forget_key' => __( "Forgotten Key", 'wp-simple-firewall' ),
83
  'supply_password' => __( 'Supply Password', 'wp-simple-firewall' ),
84
  'confirm_password' => __( 'Confirm Password', 'wp-simple-firewall' ),
85
  'show_help_video_section' => __( 'Show help video for this section', 'wp-simple-firewall' ),
@@ -102,6 +102,10 @@ class Strings {
102
 
103
  'wphashes_token' => 'WPHashes.com API Token',
104
  'is_opt_importexport' => __( 'Is this option included with import/export?', 'wp-simple-firewall' ),
 
 
 
 
105
  ],
106
  $this->getAdditionalDisplayStrings()
107
  );
74
  'description' => __( 'Description', 'wp-simple-firewall' ),
75
  'loading' => __( 'Loading', 'wp-simple-firewall' ),
76
  'aar_title' => __( 'Plugin Access Restricted', 'wp-simple-firewall' ),
77
+ 'aar_what_should_you_enter' => __( 'This security plugin is restricted to administrators with the Security Admin PIN.', 'wp-simple-firewall' ),
78
+ 'aar_must_supply_key_first' => __( 'Please provide the Security Admin PIN to manage this plugin.', 'wp-simple-firewall' ),
79
+ 'aar_to_manage_must_enter_key' => __( 'To manage this plugin you must enter the Security Admin PIN.', 'wp-simple-firewall' ),
80
+ 'aar_enter_access_key' => __( 'Security Admin PIN', 'wp-simple-firewall' ),
81
+ 'aar_submit_access_key' => __( 'Submit Security Admin PIN', 'wp-simple-firewall' ),
82
+ 'aar_forget_key' => __( "Forgotten PIN", 'wp-simple-firewall' ),
83
  'supply_password' => __( 'Supply Password', 'wp-simple-firewall' ),
84
  'confirm_password' => __( 'Confirm Password', 'wp-simple-firewall' ),
85
  'show_help_video_section' => __( 'Show help video for this section', 'wp-simple-firewall' ),
102
 
103
  'wphashes_token' => 'WPHashes.com API Token',
104
  'is_opt_importexport' => __( 'Is this option included with import/export?', 'wp-simple-firewall' ),
105
+
106
+ 'search_select' => [
107
+ 'title' => ucwords( __( 'Search for a plugin option', 'wp-simple-firewall' ) ),
108
+ ]
109
  ],
110
  $this->getAdditionalDisplayStrings()
111
  );
src/lib/src/Modules/Base/Upgrade.php CHANGED
@@ -10,40 +10,28 @@ class Upgrade {
10
  use \FernleafSystems\Utilities\Logic\OneTimeExecute;
11
 
12
  protected function run() {
13
- $version = $this->getOptions()->getOpt( 'cfg_version' );
14
- if ( empty( $version ) ) {
15
- $version = '9.0.2'; // TODO: delete after next release is propagated
16
- }
17
- $this->upgradeModule( $version );
18
  $this->runEveryUpgrade();
19
  $this->upgradeCommon();
20
  }
21
 
22
- /**
23
- * @return string[]
24
- */
25
- protected function getUpgrades() {
26
- return [
27
- '9.0.0',
28
- '9.0.3',
29
- ];
30
- }
31
-
32
  protected function runEveryUpgrade() {
33
  }
34
 
35
  protected function upgradeCommon() {
36
- $this->getOptions()->setOpt( 'cfg_version', $this->getCon()->getVersion() );
37
  $this->getMod()->saveModOptions( true );
38
  }
39
 
40
  /**
41
- * @param string $sCurrent
 
42
  */
43
- protected function upgradeModule( $sCurrent ) {
44
- foreach ( $this->getUpgrades() as $sVersion ) {
 
 
45
  $sMethod = 'upgrade_'.str_replace( '.', '', $sVersion );
46
- if ( version_compare( $sCurrent, $sVersion, '<' )
47
  && method_exists( $this, $sMethod ) ) {
48
  $this->{$sMethod}();
49
  }
10
  use \FernleafSystems\Utilities\Logic\OneTimeExecute;
11
 
12
  protected function run() {
13
+ $this->upgradeModule();
 
 
 
 
14
  $this->runEveryUpgrade();
15
  $this->upgradeCommon();
16
  }
17
 
 
 
 
 
 
 
 
 
 
 
18
  protected function runEveryUpgrade() {
19
  }
20
 
21
  protected function upgradeCommon() {
 
22
  $this->getMod()->saveModOptions( true );
23
  }
24
 
25
  /**
26
+ * Runs through each version with upgrade code available and if the current config
27
+ * version is less than the upgrade version, run the upgrade code.
28
  */
29
+ protected function upgradeModule() {
30
+ $oCon = $this->getCon();
31
+ $sPreviousVersion = $oCon->getPreviousVersion();
32
+ foreach ( $oCon->getPluginSpec()[ 'version_upgrades' ] as $sVersion ) {
33
  $sMethod = 'upgrade_'.str_replace( '.', '', $sVersion );
34
+ if ( version_compare( $sPreviousVersion, $sVersion, '<' )
35
  && method_exists( $this, $sMethod ) ) {
36
  $this->{$sMethod}();
37
  }
src/lib/src/Modules/Base/WpCli.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli\ModuleStandard;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
7
+
8
+ class WpCli {
9
+
10
+ use ModConsumer;
11
+ use \FernleafSystems\Utilities\Logic\OneTimeExecute;
12
+
13
+ protected function run() {
14
+ try {
15
+ foreach ( $this->getAllCmdHandlers() as $oHandler ) {
16
+ $oHandler->setMod( $this->getMod() )->execute();
17
+ }
18
+ }
19
+ catch ( \Exception $oE ) {
20
+ }
21
+ }
22
+
23
+ /**
24
+ * @return WpCli[]
25
+ */
26
+ protected function getAllCmdHandlers() {
27
+ return array_merge(
28
+ [ new ModuleStandard() ],
29
+ $this->getCmdHandlers()
30
+ );
31
+ }
32
+
33
+ /**
34
+ * @return WpCli[]
35
+ */
36
+ protected function getCmdHandlers() {
37
+ return [];
38
+ }
39
+ }
src/lib/src/Modules/Base/WpCli/BaseWpCliCmd.php ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Options;
7
+ use FernleafSystems\Wordpress\Services\Services;
8
+
9
+ abstract class BaseWpCliCmd {
10
+
11
+ use ModConsumer;
12
+ use \FernleafSystems\Utilities\Logic\OneTimeExecute;
13
+
14
+ /**
15
+ * @throws \Exception
16
+ */
17
+ protected function addCmds() {
18
+ }
19
+
20
+ protected function run() {
21
+ try {
22
+ $this->addCmds();
23
+ }
24
+ catch ( \Exception $oE ) {
25
+ }
26
+ }
27
+
28
+ /**
29
+ * @param array $aParts
30
+ * @return string
31
+ */
32
+ protected function buildCmd( array $aParts ) {
33
+ return implode( ' ',
34
+ array_filter( array_merge( $this->getBaseCmdParts(), $aParts ) )
35
+ );
36
+ }
37
+
38
+ /**
39
+ * @return bool
40
+ */
41
+ protected function canRun() {
42
+ /** @var Options $oOpts */
43
+ $oOpts = $this->getCon()
44
+ ->getModule_Plugin()
45
+ ->getOptions();
46
+ return $this->getOptions()->getWpCliCfg()[ 'enabled' ]
47
+ && $oOpts->isEnabledWpcli();
48
+ }
49
+
50
+ /**
51
+ * @return string[]
52
+ */
53
+ protected function getBaseCmdParts() {
54
+ return [ 'shield', $this->getBaseCmdKey() ];
55
+ }
56
+
57
+ /**
58
+ * @return string
59
+ */
60
+ protected function getBaseCmdKey() {
61
+ $sRoot = $this->getOptions()->getWpCliCfg()[ 'root' ];
62
+ return empty( $sRoot ) ? $this->getMod()->getModSlug( false ) : $sRoot;
63
+ }
64
+
65
+ /**
66
+ * @param array $aArgs
67
+ * @return array
68
+ */
69
+ protected function mergeCommonCmdArgs( array $aArgs ) {
70
+ return array_merge(
71
+ $this->getCommonCmdArgs(),
72
+ $aArgs
73
+ );
74
+ }
75
+
76
+ /**
77
+ * @return array
78
+ */
79
+ protected function getCommonCmdArgs() {
80
+ return [
81
+ 'before_invoke' => function () {
82
+ $this->beforeInvokeCmd();
83
+ },
84
+ 'after_invoke' => function () {
85
+ $this->afterInvokeCmd();
86
+ },
87
+ 'when' => 'before_wp_load',
88
+ ];
89
+ }
90
+
91
+ protected function afterInvokeCmd() {
92
+ }
93
+
94
+ protected function beforeInvokeCmd() {
95
+ }
96
+
97
+ /**
98
+ * @param array $aA
99
+ * @return \WP_User
100
+ * @throws \WP_CLI\ExitException
101
+ */
102
+ protected function loadUserFromArgs( array $aA ) {
103
+ $oWpUsers = Services::WpUsers();
104
+
105
+ $oU = null;
106
+ if ( isset( $aA[ 'uid' ] ) ) {
107
+ $oU = $oWpUsers->getUserById( $aA[ 'uid' ] );
108
+ }
109
+ elseif ( isset( $aA[ 'email' ] ) ) {
110
+ $oU = $oWpUsers->getUserByEmail( $aA[ 'email' ] );
111
+ }
112
+ elseif ( isset( $aA[ 'username' ] ) ) {
113
+ $oU = $oWpUsers->getUserByUsername( $aA[ 'username' ] );
114
+ }
115
+
116
+ if ( !$oU instanceof \WP_User || $oU->ID < 1 ) {
117
+ \WP_CLI::error( "Couldn't find that user." );
118
+ }
119
+
120
+ return $oU;
121
+ }
122
+
123
+ /**
124
+ * @param array $aA
125
+ * @return bool
126
+ */
127
+ protected function isForceFlag( array $aA ) {
128
+ return (bool)\WP_CLI\Utils\get_flag_value( $aA, 'force', false );
129
+ }
130
+ }
src/lib/src/Modules/Base/WpCli/ModuleStandard.php ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli;
4
+
5
+ class ModuleStandard extends BaseWpCliCmd {
6
+
7
+ /**
8
+ * @throws \Exception
9
+ */
10
+ protected function addCmds() {
11
+ \WP_CLI::add_command(
12
+ $this->buildCmd( [ 'opt-list' ] ),
13
+ [ $this, 'cmdOptList' ], $this->mergeCommonCmdArgs( [
14
+ 'shortdesc' => 'List the option keys and their names.',
15
+ 'synopsis' => [
16
+ [
17
+ 'type' => 'assoc',
18
+ 'name' => 'format',
19
+ 'optional' => true,
20
+ 'options' => [
21
+ 'table',
22
+ 'json',
23
+ 'yaml',
24
+ 'csv',
25
+ ],
26
+ 'default' => 'table',
27
+ 'description' => 'Display all the option details.',
28
+ ],
29
+ [
30
+ 'type' => 'flag',
31
+ 'name' => 'full',
32
+ 'optional' => true,
33
+ 'description' => 'Display all the option details.',
34
+ ],
35
+ ],
36
+ ] ) );
37
+
38
+ \WP_CLI::add_command(
39
+ $this->buildCmd( [ 'opt-get' ] ),
40
+ [ $this, 'cmdOptGet' ], $this->mergeCommonCmdArgs( [
41
+ 'shortdesc' => 'Enable, disable, or query the status of a module.',
42
+ 'synopsis' => [
43
+ [
44
+ 'type' => 'assoc',
45
+ 'name' => 'key',
46
+ 'optional' => false,
47
+ 'options' => $this->getOptions()->getOptionsForWpCli(),
48
+ 'description' => 'The option key to get.',
49
+ ],
50
+ ],
51
+ ] ) );
52
+
53
+ \WP_CLI::add_command(
54
+ $this->buildCmd( [ 'opt-set' ] ),
55
+ [ $this, 'cmdOptSet' ], $this->mergeCommonCmdArgs( [
56
+ 'shortdesc' => 'Enable, disable, or query the status of a module.',
57
+ 'synopsis' => [
58
+ [
59
+ 'type' => 'assoc',
60
+ 'name' => 'key',
61
+ 'optional' => false,
62
+ 'options' => $this->getOptions()->getOptionsForWpCli(),
63
+ 'description' => 'The option key to updateModuleStandard.php
64
+ .',
65
+ ],
66
+ [
67
+ 'type' => 'assoc',
68
+ 'name' => 'value',
69
+ 'optional' => false,
70
+ 'description' => "The option's new value.",
71
+ ],
72
+ ],
73
+ ] ) );
74
+
75
+ \WP_CLI::add_command(
76
+ $this->buildCmd( [ 'module' ] ),
77
+ [ $this, 'cmdModAction' ], $this->mergeCommonCmdArgs( [
78
+ 'shortdesc' => 'Enable, disable, or query the status of a module.',
79
+ 'synopsis' => [
80
+ [
81
+ 'type' => 'assoc',
82
+ 'name' => 'action',
83
+ 'optional' => false,
84
+ 'options' => [
85
+ 'status',
86
+ 'enable',
87
+ 'disable',
88
+ ],
89
+ 'description' => 'The action to perform on the module.',
90
+ ],
91
+ ],
92
+ ] ) );
93
+ }
94
+
95
+ public function cmdModAction( $null, $aA ) {
96
+ $oMod = $this->getMod();
97
+
98
+ switch ( $aA[ 'action' ] ) {
99
+
100
+ case 'status':
101
+ $oMod->isModOptEnabled() ?
102
+ \WP_CLI::log( 'Module is currently enabled.' )
103
+ : \WP_CLI::log( 'Module is currently disabled.' );
104
+ break;
105
+
106
+ case 'enable':
107
+ $this->getMod()
108
+ ->setIsMainFeatureEnabled( true )
109
+ ->saveModOptions();
110
+ \WP_CLI::success( 'Module enabled.' );
111
+ break;
112
+
113
+ case 'disable':
114
+ $this->getMod()
115
+ ->setIsMainFeatureEnabled( false )
116
+ ->saveModOptions();
117
+ \WP_CLI::success( 'Module disabled.' );
118
+ break;
119
+ }
120
+ }
121
+
122
+ /**
123
+ * @param array $null
124
+ * @param array $aA
125
+ */
126
+ public function cmdOptGet( array $null, array $aA ) {
127
+ $oOpts = $this->getOptions();
128
+
129
+ $mVal = $oOpts->getOpt( $aA[ 'key' ], $null );
130
+ $aOpt = $oOpts->getRawData_SingleOption( $aA[ 'key' ] );
131
+ if ( !is_numeric( $mVal ) && empty( $mVal ) ) {
132
+ \WP_CLI::log( __( 'No value set.', 'wp-simple-firewall' ) );
133
+ }
134
+ else {
135
+ $sExplain = '';
136
+
137
+ if ( is_array( $mVal ) ) {
138
+ $mVal = sprintf( '[ %s ]', implode( ', ', $mVal ) );
139
+ }
140
+
141
+ if ( $aOpt[ 'type' ] === 'checkbox' ) {
142
+ $sExplain = sprintf( 'Note: %s', __( '"Y" = Turned On; "N" = Turned Off' ) );
143
+ }
144
+
145
+ \WP_CLI::log( sprintf( __( 'Current value: %s', 'wp-simple-firewall' ), $mVal ) );
146
+ if ( !empty( $sExplain ) ) {
147
+ \WP_CLI::log( $sExplain );
148
+ }
149
+ }
150
+ }
151
+
152
+ /**
153
+ * @param array $null
154
+ * @param array $aA
155
+ */
156
+ public function cmdOptSet( array $null, array $aA ) {
157
+ $this->getOptions()->setOpt( $aA[ 'key' ], $aA[ 'value' ] );
158
+ \WP_CLI::success( 'Option updated.' );
159
+ }
160
+
161
+ public function cmdOptList( array $null, array $aA ) {
162
+ $oOpts = $this->getOptions();
163
+ $oStrings = $this->getMod()->getStrings();
164
+ $aOpts = [];
165
+ foreach ( $oOpts->getOptionsForWpCli() as $sKey ) {
166
+ try {
167
+ $aOpts[] = [
168
+ 'key' => $sKey,
169
+ 'name' => $oStrings->getOptionStrings( $sKey )[ 'name' ],
170
+ 'type' => $oOpts->getOptionType( $sKey ),
171
+ 'current' => $oOpts->getOpt( $sKey ),
172
+ 'default' => $oOpts->getOptDefault( $sKey ),
173
+ ];
174
+ }
175
+ catch ( \Exception $e ) {
176
+ }
177
+ }
178
+
179
+ if ( empty( $aOpts ) ) {
180
+ \WP_CLI::log( "This module doesn't have any configurable options." );
181
+ }
182
+ else {
183
+ if ( !\WP_CLI\Utils\get_flag_value( $aA, 'full', false ) ) {
184
+ $aKeys = [
185
+ 'key',
186
+ 'name',
187
+ 'current'
188
+ ];
189
+ }
190
+ else {
191
+ $aKeys = array_keys( $aOpts[ 0 ] );
192
+ }
193
+
194
+ \WP_CLI\Utils\format_items(
195
+ $aA[ 'format' ],
196
+ $aOpts,
197
+ $aKeys
198
+ );
199
+ }
200
+ }
201
+ }
src/lib/src/Modules/BaseShield/ShieldProcessor.php CHANGED
@@ -60,50 +60,4 @@ class ShieldProcessor extends Base\BaseProcessor {
60
  }
61
  return $aData;
62
  }
63
-
64
- /**
65
- * @throws \Exception
66
- * @deprecated 9.0
67
- */
68
- public function maybeDequeueRecaptcha() {
69
- }
70
-
71
- /**
72
- * @deprecated 9.0
73
- */
74
- public function registerGoogleRecaptchaJs() {
75
- }
76
-
77
- /**
78
- * @deprecated 9.0
79
- */
80
- public function isRecaptchaEnqueue() {
81
- return false;
82
- }
83
-
84
- /**
85
- * Note we don't provide a 'false' option here as if it's set to be needed somewhere,
86
- * it shouldn't be unset anywhere else.
87
- *
88
- * @return $this
89
- */
90
- public function setRecaptchaToEnqueue() {
91
- return $this;
92
- }
93
-
94
- /**
95
- * @return bool
96
- * @deprecated 9.0
97
- */
98
- protected function getRecaptchaTheme() {
99
- return 'light';
100
- }
101
-
102
- /**
103
- * @return bool
104
- * @deprecated 9.0
105
- */
106
- protected function isRecaptchaInvisible() {
107
- return false;
108
- }
109
  }
60
  }
61
  return $aData;
62
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  }
src/lib/src/Modules/CommentsFilter/Scan/Human.php CHANGED
@@ -80,8 +80,6 @@ class Human {
80
  return $aList;
81
  }
82
 
83
- /**
84
- */
85
  private function importBlacklist() {
86
  /** @var \ICWP_WPSF_FeatureHandler_CommentsFilter $oMod */
87
  $oMod = $this->getMod();
80
  return $aList;
81
  }
82
 
 
 
83
  private function importBlacklist() {
84
  /** @var \ICWP_WPSF_FeatureHandler_CommentsFilter $oMod */
85
  $oMod = $this->getMod();
src/lib/src/Modules/CommentsFilter/Upgrade.php CHANGED
@@ -6,6 +6,19 @@ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
 
7
  class Upgrade extends Base\Upgrade {
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  protected function upgrade_900() {
10
  $oOpts = $this->getOptions();
11
 
6
 
7
  class Upgrade extends Base\Upgrade {
8
 
9
+ protected function upgrade_905() {
10
+ /** @var Options $oOpts */
11
+ $oOpts = $this->getOptions();
12
+ $oOpts->setOpt(
13
+ 'comments_default_action_human_spam',
14
+ (string)$oOpts->getOpt( 'comments_default_action_human_spam' )
15
+ );
16
+ $oOpts->setOpt(
17
+ 'comments_default_action_spam_bot',
18
+ (string)$oOpts->getOpt( 'comments_default_action_spam_bot' )
19
+ );
20
+ }
21
+
22
  protected function upgrade_900() {
23
  $oOpts = $this->getOptions();
24
 
src/lib/src/Modules/Events/Strings.php CHANGED
@@ -31,8 +31,8 @@ class Strings extends Base\Strings {
31
  'master_url_set' => __( 'Master Site URL Set', 'wp-simple-firewall' ),
32
  'recaptcha_success' => __( 'CAPTCHA Test Success', 'wp-simple-firewall' ),
33
  'recaptcha_fail' => __( 'CAPTCHA Test Fail', 'wp-simple-firewall' ),
34
- 'key_success' => __( 'Security Admin Key Authentication Success', 'wp-simple-firewall' ),
35
- 'key_fail' => __( 'Security Admin Key Authentication Failed', 'wp-simple-firewall' ),
36
  'custom_offense' => __( 'Custom Offense', 'wp-simple-firewall' ),
37
  'conn_kill' => __( 'Connection Killed', 'wp-simple-firewall' ),
38
  'ip_offense' => __( 'Offense Triggered', 'wp-simple-firewall' ),
31
  'master_url_set' => __( 'Master Site URL Set', 'wp-simple-firewall' ),
32
  'recaptcha_success' => __( 'CAPTCHA Test Success', 'wp-simple-firewall' ),
33
  'recaptcha_fail' => __( 'CAPTCHA Test Fail', 'wp-simple-firewall' ),
34
+ 'key_success' => __( 'Security PIN Authentication Success', 'wp-simple-firewall' ),
35
+ 'key_fail' => __( 'Security PIN Authentication Failed', 'wp-simple-firewall' ),
36
  'custom_offense' => __( 'Custom Offense', 'wp-simple-firewall' ),
37
  'conn_kill' => __( 'Connection Killed', 'wp-simple-firewall' ),
38
  'ip_offense' => __( 'Offense Triggered', 'wp-simple-firewall' ),
src/lib/src/Modules/HackGuard/AjaxHandler.php CHANGED
@@ -115,7 +115,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
115
  $sHtml = $oTableBuilder
116
  ->setMod( $oMod )
117
  ->setDbHandler( $oMod->getDbHandler_ScanResults() )
118
- ->buildTable();
119
  }
120
 
121
  return [
@@ -156,9 +156,10 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
156
  'locked_file' => __( 'Locked File' ),
157
  'modified_file' => __( 'Modified File' ),
158
  'locked' => __( 'Locked' ),
 
159
  'modified' => __( 'Modified' ),
160
  'download' => __( 'Download' ),
161
- 'modified_at' => __( 'Modified' ),
162
  'file_content_original' => __( 'Original File Content' ),
163
  'file_content_current' => __( 'Current File Content' ),
164
  'download_original' => __( 'Download Original' ),
@@ -173,15 +174,21 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
173
  ]
174
  ];
175
  try {
176
- $oCarb = Services::Request()->carbon( true );
177
- $aData[ 'html' ][ 'diff' ] = ( new FileLocker\Ops\PerformAction() )
178
- ->setMod( $this->getMod() )
179
- ->run( $nRID, 'diff' );
180
  $oLock = $oFLCon->getFileLock( $nRID );
 
181
  $aData[ 'ajax' ] = $oFLCon->createFileDownloadLinks( $oLock );
182
- $aData[ 'flags' ][ 'has_diff' ] = !empty( $aData[ 'html' ][ 'diff' ] );
183
- $aData[ 'vars' ][ 'locked_at' ] = $oCarb->setTimestamp( $oLock->updated_at )->diffForHumans();
184
- $aData[ 'vars' ][ 'modified_at' ] = $oCarb->setTimestamp( $oLock->detected_at )->diffForHumans();
 
 
 
 
 
 
 
 
185
  $aData[ 'vars' ][ 'file_size_locked' ] = $this->formatBytes( strlen(
186
  ( new FileLocker\Ops\ReadOriginalFileContent() )
187
  ->setMod( $oMod )
115
  $sHtml = $oTableBuilder
116
  ->setMod( $oMod )
117
  ->setDbHandler( $oMod->getDbHandler_ScanResults() )
118
+ ->render();
119
  }
120
 
121
  return [
156
  'locked_file' => __( 'Locked File' ),
157
  'modified_file' => __( 'Modified File' ),
158
  'locked' => __( 'Locked' ),
159
+ 'modified_timestamp' => __( 'File Modified Timestamp' ),
160
  'modified' => __( 'Modified' ),
161
  'download' => __( 'Download' ),
162
+ 'change_detected_at' => __( 'Change Detected' ),
163
  'file_content_original' => __( 'Original File Content' ),
164
  'file_content_current' => __( 'Current File Content' ),
165
  'download_original' => __( 'Download Original' ),
174
  ]
175
  ];
176
  try {
177
+
 
 
 
178
  $oLock = $oFLCon->getFileLock( $nRID );
179
+ $bDiff = $oLock->detected_at > 0;
180
  $aData[ 'ajax' ] = $oFLCon->createFileDownloadLinks( $oLock );
181
+ $aData[ 'flags' ][ 'has_diff' ] = $bDiff;
182
+ $aData[ 'html' ][ 'diff' ] = $bDiff ?
183
+ ( new FileLocker\Ops\PerformAction() )
184
+ ->setMod( $this->getMod() )
185
+ ->run( $nRID, 'diff' ) : '';
186
+
187
+ $oCarb = Services::Request()->carbon( true );
188
+ $aData[ 'vars' ][ 'locked_at' ] = $oCarb->setTimestamp( $oLock->created_at )->diffForHumans();
189
+ $aData[ 'vars' ][ 'file_modified_at' ] =
190
+ Services::WpGeneral()->getTimeStampForDisplay( $oFS->getModifiedTime( $oLock->file ) );
191
+ $aData[ 'vars' ][ 'change_detected_at' ] = $oCarb->setTimestamp( $oLock->detected_at )->diffForHumans();
192
  $aData[ 'vars' ][ 'file_size_locked' ] = $this->formatBytes( strlen(
193
  ( new FileLocker\Ops\ReadOriginalFileContent() )
194
  ->setMod( $oMod )
src/lib/src/Modules/HackGuard/Lib/FileLocker/File.php CHANGED
@@ -51,7 +51,7 @@ class File {
51
  break;
52
  }
53
  $aPossible[] = path_join( $sDir, $this->file );
54
- $sDir = realpath( dirname( $sDir ) );
55
  $nLimiter++;
56
  } while ( $nLimiter <= $this->getMaxDirLevels() );
57
 
51
  break;
52
  }
53
  $aPossible[] = path_join( $sDir, $this->file );
54
+ $sDir = dirname( $sDir );
55
  $nLimiter++;
56
  } while ( $nLimiter <= $this->getMaxDirLevels() );
57
 
src/lib/src/Modules/HackGuard/Lib/FileLocker/FileLockerController.php CHANGED
@@ -16,16 +16,23 @@ class FileLockerController {
16
  /**
17
  * @return bool
18
  */
19
- protected function canRun() {
20
  /** @var HackGuard\Options $oOpts */
21
  $oOpts = $this->getOptions();
22
- /** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
23
- $oMod = $this->getMod();
24
  return ( count( $oOpts->getFilesToLock() ) > 0 )
25
  && $this->getCon()
26
  ->getModule_Plugin()
27
  ->getShieldNetApiController()
28
- ->canHandshake()
 
 
 
 
 
 
 
 
 
29
  && $oMod->getDbHandler_FileLocker()->isReady();
30
  }
31
 
@@ -118,13 +125,13 @@ class FileLockerController {
118
  public function deleteAllLocks() {
119
  /** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
120
  $oMod = $this->getMod();
121
- $oMod->getDbHandler_FileLocker()->deleteTable( true );
122
  }
123
 
124
  public function purge() {
125
  /** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
126
  $oMod = $this->getMod();
127
- $oMod->getDbHandler_FileLocker()->deleteTable();
128
  }
129
 
130
  /**
16
  /**
17
  * @return bool
18
  */
19
+ public function isEnabled() {
20
  /** @var HackGuard\Options $oOpts */
21
  $oOpts = $this->getOptions();
 
 
22
  return ( count( $oOpts->getFilesToLock() ) > 0 )
23
  && $this->getCon()
24
  ->getModule_Plugin()
25
  ->getShieldNetApiController()
26
+ ->canHandshake();
27
+ }
28
+
29
+ /**
30
+ * @return bool
31
+ */
32
+ protected function canRun() {
33
+ /** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
34
+ $oMod = $this->getMod();
35
+ return $this->isEnabled()
36
  && $oMod->getDbHandler_FileLocker()->isReady();
37
  }
38
 
125
  public function deleteAllLocks() {
126
  /** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
127
  $oMod = $this->getMod();
128
+ $oMod->getDbHandler_FileLocker()->tableDelete( true );
129
  }
130
 
131
  public function purge() {
132
  /** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
133
  $oMod = $this->getMod();
134
+ $oMod->getDbHandler_FileLocker()->tableDelete();
135
  }
136
 
137
  /**
src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/Accept.php CHANGED
@@ -33,6 +33,7 @@ class Accept extends BaseOps {
33
  'public_key_id' => key( $aPublicKey ),
34
  'detected_at' => 0,
35
  'updated_at' => Services::Request()->ts(),
 
36
  ] );
37
 
38
  $this->clearFileLocksCache();
33
  'public_key_id' => key( $aPublicKey ),
34
  'detected_at' => 0,
35
  'updated_at' => Services::Request()->ts(),
36
+ 'created_at' => Services::Request()->ts(), // update "locked at"
37
  ] );
38
 
39
  $this->clearFileLocksCache();
src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/CreateFileLocks.php CHANGED
@@ -3,7 +3,6 @@
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Databases\FileLocker;
6
- use FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi\FileLocker\GetPublicKey;
7
  use FernleafSystems\Wordpress\Services\Services;
8
 
9
  /**
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Databases\FileLocker;
 
6
  use FernleafSystems\Wordpress\Services\Services;
7
 
8
  /**
src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/Diff.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Databases\FileLocker;
6
+ use FernleafSystems\Wordpress\Services\Services;
7
+ use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes;
8
+
9
+ /**
10
+ * Class Diff
11
+ * @package FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops
12
+ */
13
+ class Diff extends BaseOps {
14
+
15
+ /**
16
+ * @param FileLocker\EntryVO $oLock
17
+ * @return bool
18
+ * @throws \Exception
19
+ */
20
+ public function run( $oLock ) {
21
+
22
+ $oFS = Services::WpFs();
23
+
24
+ if ( !$oFS->isFile( $oLock->file ) ) {
25
+ throw new \Exception( __( 'File is missing or could not be read.', 'wp-simple-firewall' ) );
26
+ }
27
+
28
+ $sContent = Services::WpFs()->getFileContent( $oLock->file );
29
+ if ( empty( $sContent ) ) {
30
+ throw new \Exception( __( 'File is empty or could not be read.', 'wp-simple-firewall' ) );
31
+ }
32
+
33
+ $sOriginal = ( new ReadOriginalFileContent() )
34
+ ->setMod( $this->getMod() )
35
+ ->run( $oLock );
36
+
37
+ $sDiff = $this->useWpDiff( $sOriginal, $sContent );
38
+ // The WP Diff is empty if the only difference is white space
39
+ if ( empty( $sDiff ) ) {
40
+ $sDiff = $this->useWpHashes( $sOriginal, $sContent );
41
+ }
42
+
43
+ return $sDiff;
44
+ }
45
+
46
+ /**
47
+ * @param string $sOriginal
48
+ * @param string $sCurrent
49
+ * @return string
50
+ * @throws \Exception
51
+ */
52
+ private function useWpHashes( $sOriginal, $sCurrent ) {
53
+ $aRes = ( new WpHashes\Util\Diff() )->getDiff( $sOriginal, $sCurrent );
54
+ if ( !is_array( $aRes ) || empty( $aRes[ 'html' ] ) ) {
55
+ throw new \Exception( 'Could not get a valid diff for this file.' );
56
+ }
57
+ return sprintf( '<style>%s</style>%s',
58
+ 'table.diff.diff-wrapper tbody tr td:nth-child(2){ width:auto;}'.
59
+ 'table.diff.diff-wrapper { table-layout: auto;}'.
60
+ base64_decode( $aRes[ 'html' ][ 'css_default' ] ),
61
+ base64_decode( $aRes[ 'html' ][ 'content' ] )
62
+ );
63
+ }
64
+
65
+ /**
66
+ * @param string $sOriginal
67
+ * @param string $sCurrent
68
+ * @return string
69
+ */
70
+ private function useWpDiff( $sOriginal, $sCurrent ) {
71
+ return wp_text_diff(
72
+ $sOriginal,
73
+ $sCurrent
74
+ );
75
+ }
76
+ }
src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/LoadFileLocks.php CHANGED
@@ -25,12 +25,14 @@ class LoadFileLocks {
25
  if ( is_null( self::$aFileLockRecords ) ) {
26
  /** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
27
  $oMod = $this->getMod();
28
- $aAll = $oMod->getDbHandler_FileLocker()->getQuerySelector()->all();
29
 
30
  self::$aFileLockRecords = [];
31
- if ( is_array( $aAll ) ) {
32
- foreach ( $aAll as $oLock ) {
33
- self::$aFileLockRecords[ $oLock->id ] = $oLock;
 
 
 
34
  }
35
  }
36
  }
@@ -69,7 +71,6 @@ class LoadFileLocks {
69
  return array_filter(
70
  $this->loadLocks(),
71
  function ( $oLock ) {
72
- /** @var FileLocker\EntryVO $oLock */
73
  return $oLock->detected_at == 0;
74
  }
75
  );
25
  if ( is_null( self::$aFileLockRecords ) ) {
26
  /** @var \ICWP_WPSF_FeatureHandler_HackProtect $oMod */
27
  $oMod = $this->getMod();
 
28
 
29
  self::$aFileLockRecords = [];
30
+ if ( $oMod->getFileLocker()->isEnabled() ) {
31
+ $aAll = $oMod->getDbHandler_FileLocker()->getQuerySelector()->all();
32
+ if ( is_array( $aAll ) ) {
33
+ foreach ( $aAll as $oLock ) {
34
+ self::$aFileLockRecords[ $oLock->id ] = $oLock;
35
+ }
36
  }
37
  }
38
  }
71
  return array_filter(
72
  $this->loadLocks(),
73
  function ( $oLock ) {
 
74
  return $oLock->detected_at == 0;
75
  }
76
  );
src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/PerformAction.php CHANGED
@@ -3,7 +3,6 @@
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Databases;
6
- use FernleafSystems\Wordpress\Services\Services;
7
 
8
  /**
9
  * Class PerformAction
@@ -41,7 +40,9 @@ class PerformAction extends BaseOps {
41
  ->run( $oLock );
42
  break;
43
  case 'diff':
44
- $mResult = $this->diff( $oLock );
 
 
45
  break;
46
  case 'restore':
47
  $mResult = ( new Restore() )
@@ -54,29 +55,4 @@ class PerformAction extends BaseOps {
54
  }
55
  return $mResult;
56
  }
57
-
58
- /**
59
- * @param Databases\FileLocker\EntryVO $oLock
60
- * @return string
61
- * @throws \Exception
62
- */
63
- protected function diff( Databases\FileLocker\EntryVO $oLock ) {
64
- $oFS = Services::WpFs();
65
-
66
- if ( !$oFS->isFile( $oLock->file ) ) {
67
- throw new \Exception( __( 'File is missing or could not be read.', 'wp-simple-firewall' ) );
68
- }
69
-
70
- $sContent = Services::WpFs()->getFileContent( $oLock->file );
71
- if ( empty( $sContent ) ) {
72
- throw new \Exception( __( 'File is empty or could not be read.', 'wp-simple-firewall' ) );
73
- }
74
-
75
- return wp_text_diff(
76
- ( new ReadOriginalFileContent() )
77
- ->setMod( $this->getMod() )
78
- ->run( $oLock ),
79
- $sContent
80
- );
81
- }
82
  }
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\FileLocker\Ops;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Databases;
 
6
 
7
  /**
8
  * Class PerformAction
40
  ->run( $oLock );
41
  break;
42
  case 'diff':
43
+ $mResult = ( new Diff() )
44
+ ->setMod( $this->getMod() )
45
+ ->run( $oLock );
46
  break;
47
  case 'restore':
48
  $mResult = ( new Restore() )
55
  }
56
  return $mResult;
57
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  }
src/lib/src/Modules/HackGuard/Options.php CHANGED
@@ -379,88 +379,4 @@ class Options extends Base\ShieldOptions {
379
  }
380
  ) );
381
  }
382
-
383
- /**
384
- * @return bool
385
- * @deprecated 9.0
386
- */
387
- public function isMalAutoRepairCore() {
388
- return $this->isRepairFileWP();
389
- }
390
-
391
- /**
392
- * @return bool
393
- * @deprecated 9.0
394
- */
395
- public function isWcfScanAutoRepair() {
396
- return $this->isRepairFileWP();
397
- }
398
-
399
- /**
400
- * @return bool
401
- * @deprecated 9.0
402
- */
403
- public function isWpvulnEnabled() {
404
- return $this->isPremium() && $this->isOpt( 'enable_wpvuln_scan', 'Y' );
405
- }
406
-
407
- /**
408
- * @return bool
409
- * @deprecated 9.0
410
- */
411
- public function isPtgEnabled() {
412
- return $this->isOpt( 'ptg_enable', 'enabled' ) && $this->isOptReqsMet( 'ptg_enable' );
413
- }
414
-
415
- /**
416
- * @return bool
417
- * @deprecated 9.0
418
- */
419
- public function isUfcEnabled() {
420
- return ( $this->getUnrecognisedFileScannerOption() != 'disabled' );
421
- }
422
-
423
- /**
424
- * @return array
425
- * @deprecated 9.0
426
- */
427
- public function getUfcFileExclusions() {
428
- $aExclusions = $this->getOpt( 'ufc_exclusions', [] );
429
- if ( !is_array( $aExclusions ) ) {
430
- $aExclusions = [];
431
- }
432
- return $aExclusions;
433
- }
434
-
435
- /**
436
- * @return bool
437
- * @deprecated 9.0
438
- */
439
- public function isUfcScanUploads() {
440
- return $this->isOpt( 'ufc_scan_uploads', 'Y' );
441
- }
442
-
443
- /**
444
- * @return bool
445
- * @deprecated 9.0
446
- */
447
- public function isWcfScanEnabled() {
448
- return $this->isOpt( 'enable_core_file_integrity_scan', 'Y' );
449
- }
450
-
451
- /**
452
- * @return bool
453
- * @deprecated 9.0
454
- */
455
- public function isApcEnabled() {
456
- return $this->isOpt( 'enabled_scan_apc', 'Y' );
457
- }
458
-
459
- /**
460
- * @return bool
461
- * @deprecated 9.0
462
- */
463
- public function isMalScanEnabled() {
464
- return $this->isOpt( 'mal_scan_enable', 'Y' );
465
- }
466
  }
379
  }
380
  ) );
381
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382
  }
src/lib/src/Modules/HackGuard/Strings.php CHANGED
@@ -247,7 +247,7 @@ class Strings extends Base\Strings {
247
  sprintf( '%s - %s', __( 'Important', 'wp-simple-firewall' ), __( "Doesn't currently detect missing files.", 'wp-simple-firewall' ) ),
248
  sprintf( '%s - %s', __( 'Recommendation', 'wp-simple-firewall' ), __( 'Keep this feature turned on, at all times.', 'wp-simple-firewall' ) )
249
  ];
250
- if ( !$oMod->canCacheDirWrite()) {
251
  $sDescription[] = sprintf( __( 'Sorry, this feature is not available because we cannot write to disk at this location: %s', 'wp-simple-firewall' ),
252
  '<code>'.$oMod->getPtgSnapsBaseDir().'</code>' );
253
  }
@@ -271,6 +271,7 @@ class Strings extends Base\Strings {
271
  $sDescription = [
272
  __( 'Detects changes to the files, then lets you examine contents and revert as required.', 'wp-simple-firewall' ),
273
  ];
 
274
  $aLocks = ( new LoadFileLocks() )
275
  ->setMod( $this->getMod() )
276
  ->loadLocks();
247
  sprintf( '%s - %s', __( 'Important', 'wp-simple-firewall' ), __( "Doesn't currently detect missing files.", 'wp-simple-firewall' ) ),
248
  sprintf( '%s - %s', __( 'Recommendation', 'wp-simple-firewall' ), __( 'Keep this feature turned on, at all times.', 'wp-simple-firewall' ) )
249
  ];
250
+ if ( !$oMod->canCacheDirWrite() ) {
251
  $sDescription[] = sprintf( __( 'Sorry, this feature is not available because we cannot write to disk at this location: %s', 'wp-simple-firewall' ),
252
  '<code>'.$oMod->getPtgSnapsBaseDir().'</code>' );
253
  }
271
  $sDescription = [
272
  __( 'Detects changes to the files, then lets you examine contents and revert as required.', 'wp-simple-firewall' ),
273
  ];
274
+
275
  $aLocks = ( new LoadFileLocks() )
276
  ->setMod( $this->getMod() )
277
  ->loadLocks();
src/lib/src/Modules/IPs/AjaxHandler.php CHANGED
@@ -158,7 +158,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
158
 
159
  return [
160
  'success' => true,
161
- 'html' => $oTableBuilder->buildTable()
162
  ];
163
  }
164
  }
158
 
159
  return [
160
  'success' => true,
161
+ 'html' => $oTableBuilder->render()
162
  ];
163
  }
164
  }
src/lib/src/Modules/IPs/Lib/Ops/AddIp.php CHANGED
@@ -26,7 +26,7 @@ class AddIp {
26
 
27
  $sIP = $this->getIP();
28
  if ( !Services::IP()->isValidIp( $sIP ) ) {
29
- throw new \Exception( 'IP address is not valid' );
30
  }
31
  if ( in_array( $sIP, Services::IP()->getServerPublicIPs() ) ) {
32
  throw new \Exception( 'Will not black mark our own server IP' );
@@ -70,7 +70,7 @@ class AddIp {
70
 
71
  $sIP = $this->getIP();
72
  if ( !$oIpServ->isValidIp( $sIP ) && !$oIpServ->isValidIpRange( $sIP ) ) {
73
- throw new \Exception( 'IP address is not valid' );
74
  }
75
 
76
  $oIP = null;
@@ -127,7 +127,7 @@ class AddIp {
127
 
128
  $sIP = $this->getIP();
129
  if ( !$oIpServ->isValidIp( $sIP ) && !$oIpServ->isValidIpRange( $sIP ) ) {
130
- throw new \Exception( 'IP address is not valid' );
131
  }
132
 
133
  if ( $oIpServ->isValidIpRange( $sIP ) ) {
@@ -173,6 +173,7 @@ class AddIp {
173
  * @param string $sLabel
174
  * @param int|null $nLastAccessAt
175
  * @return Databases\IPs\EntryVO|null
 
176
  */
177
  private function add( $sList, $sLabel = '', $nLastAccessAt = null ) {
178
  $oIP = null;
@@ -199,6 +200,10 @@ class AddIp {
199
  ->first();
200
  }
201
 
 
 
 
 
202
  return $oIP;
203
  }
204
  }
26
 
27
  $sIP = $this->getIP();
28
  if ( !Services::IP()->isValidIp( $sIP ) ) {
29
+ throw new \Exception( "IP address isn't valid." );
30
  }
31
  if ( in_array( $sIP, Services::IP()->getServerPublicIPs() ) ) {
32
  throw new \Exception( 'Will not black mark our own server IP' );
70
 
71
  $sIP = $this->getIP();
72
  if ( !$oIpServ->isValidIp( $sIP ) && !$oIpServ->isValidIpRange( $sIP ) ) {
73
+ throw new \Exception( "IP address isn't valid." );
74
  }
75
 
76
  $oIP = null;
127
 
128
  $sIP = $this->getIP();
129
  if ( !$oIpServ->isValidIp( $sIP ) && !$oIpServ->isValidIpRange( $sIP ) ) {
130
+ throw new \Exception( "IP address isn't valid." );
131
  }
132
 
133
  if ( $oIpServ->isValidIpRange( $sIP ) ) {
173
  * @param string $sLabel
174
  * @param int|null $nLastAccessAt
175
  * @return Databases\IPs\EntryVO|null
176
+ * @throws \Exception
177
  */
178
  private function add( $sList, $sLabel = '', $nLastAccessAt = null ) {
179
  $oIP = null;
200
  ->first();
201
  }
202
 
203
+ if ( !$oIP instanceof Databases\IPs\EntryVO ) {
204
+ throw new \Exception( "IP couldn't be added to the database." );
205
+ }
206
+
207
  return $oIP;
208
  }
209
  }
src/lib/src/Modules/IPs/Upgrade.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
+ use FernleafSystems\Wordpress\Services\Services;
7
+
8
+ class Upgrade extends Base\Upgrade {
9
+
10
+ protected function upgrade_905() {
11
+ /** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
12
+ $oMod = $this->getMod();
13
+ $oDBH = $oMod->getDbHandler_IPs();
14
+ Services::WpDb()->doSql(
15
+ sprintf( "ALTER TABLE `%s` MODIFY `%s` %s;",
16
+ $oDBH->getTable(), 'ip', $oDBH->enumerateColumns()[ 'ip' ] )
17
+ );
18
+ }
19
+ }
src/lib/src/Modules/IPs/WpCli.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
7
+
8
+ class WpCli extends Base\WpCli {
9
+
10
+ /**
11
+ * @inheritDoc
12
+ */
13
+ protected function getCmdHandlers() {
14
+ return [
15
+ new IPs\WpCli\Add(),
16
+ new IPs\WpCli\Remove(),
17
+ new IPs\WpCli\Enumerate(),
18
+ ];
19
+ }
20
+ }
src/lib/src/Modules/IPs/WpCli/Add.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\WpCli;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib\Ops;
6
+ use WP_CLI;
7
+
8
+ class Add extends BaseAddRemove {
9
+
10
+ /**
11
+ * @throws \Exception
12
+ */
13
+ protected function addCmds() {
14
+ WP_CLI::add_command(
15
+ $this->buildCmd( [ 'ip-add' ] ),
16
+ [ $this, 'cmdIpAdd' ], $this->mergeCommonCmdArgs( [
17
+ 'shortdesc' => 'Add an IP address to one of your lists, white or black.',
18
+ 'synopsis' => array_merge(
19
+ $this->getCommonIpCmdArgs(),
20
+ [
21
+ 'type' => 'assoc',
22
+ 'name' => 'label',
23
+ 'optional' => true,
24
+ 'description' => 'The label to assign to this IP entry.',
25
+ ]
26
+ ),
27
+ ] ) );
28
+ }
29
+
30
+ /**
31
+ * @param array $null
32
+ * @param array $aA
33
+ * @throws WP_CLI\ExitException
34
+ */
35
+ public function cmdIpAdd( array $null, array $aA ) {
36
+
37
+ $sLabel = isset( $aA[ 'label' ] ) ? $aA[ 'label' ] : 'none';
38
+
39
+ $oAdder = ( new Ops\AddIp() )
40
+ ->setMod( $this->getMod() )
41
+ ->setIP( $aA[ 'ip' ] );
42
+ try {
43
+ if ( $aA[ 'list' ] === 'white' ) {
44
+ $oAdder->toManualWhitelist( $sLabel );
45
+ }
46
+ else {
47
+ $oAdder->toManualBlacklist( $sLabel );
48
+ }
49
+ }
50
+ catch ( \Exception $oE ) {
51
+ WP_CLI::error( $oE->getMessage() );
52
+ }
53
+ WP_CLI::success( __( 'IP address added successfully.', 'wp-simple-firewall' ) );
54
+ }
55
+ }
src/lib/src/Modules/IPs/WpCli/BaseAddRemove.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\WpCli;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli\BaseWpCliCmd;
6
+
7
+ class BaseAddRemove extends BaseWpCliCmd {
8
+
9
+ /**
10
+ * @return array[]
11
+ */
12
+ protected function getCommonIpCmdArgs() {
13
+ return [
14
+ [
15
+ 'type' => 'assoc',
16
+ 'name' => 'ip',
17
+ 'optional' => false,
18
+ 'description' => 'The IP address.',
19
+ ],
20
+ [
21
+ 'type' => 'assoc',
22
+ 'name' => 'list',
23
+ 'optional' => false,
24
+ 'options' => [
25
+ 'white',
26
+ 'black',
27
+ ],
28
+ 'description' => 'The IP list to update.',
29
+ ],
30
+ ];
31
+ }
32
+ }
src/lib/src/Modules/IPs/WpCli/Enumerate.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\WpCli;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli\BaseWpCliCmd;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib\Ops;
7
+ use WP_CLI;
8
+
9
+ class Enumerate extends BaseWpCliCmd {
10
+
11
+ /**
12
+ * @throws \Exception
13
+ */
14
+ protected function addCmds() {
15
+ WP_CLI::add_command(
16
+ $this->buildCmd( [ 'print' ] ),
17
+ [ $this, 'cmdPrint' ], $this->mergeCommonCmdArgs( [
18
+ 'shortdesc' => 'Enumerate all IPs currently present on your lists.',
19
+ 'synopsis' => [
20
+ [
21
+ 'type' => 'assoc',
22
+ 'name' => 'list',
23
+ 'optional' => false,
24
+ 'options' => [
25
+ 'white',
26
+ 'black',
27
+ ],
28
+ 'description' => 'The IP list to enumerate.',
29
+ ],
30
+ ],
31
+ ] ) );
32
+ }
33
+
34
+ public function cmdPrint( $null, $aA ) {
35
+ /** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
36
+ $oMod = $this->getMod();
37
+
38
+ $oRtr = ( new Ops\RetrieveIpsForLists() )
39
+ ->setDbHandler( $oMod->getDbHandler_IPs() );
40
+ $aIPs = $aA[ 'list' ] === 'white' ? $oRtr->white() : $oRtr->black();
41
+ $aIPs = array_map(
42
+ function ( $sIP ) {
43
+ return [ 'IP' => $sIP, ];
44
+ },
45
+ $aIPs
46
+ );
47
+
48
+ WP_CLI\Utils\format_items(
49
+ 'table',
50
+ $aIPs,
51
+ [ 'IP' ]
52
+ );
53
+ }
54
+ }
src/lib/src/Modules/IPs/WpCli/Remove.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\WpCli;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib\Ops;
6
+ use WP_CLI;
7
+
8
+ class Remove extends BaseAddRemove {
9
+
10
+ /**
11
+ * @throws \Exception
12
+ */
13
+ protected function addCmds() {
14
+ WP_CLI::add_command(
15
+ $this->buildCmd( [ 'ip-remove' ] ),
16
+ [ $this, 'cmdIpRemove' ], $this->mergeCommonCmdArgs( [
17
+ 'shortdesc' => 'Remove an IP address from one of your lists, white or black.',
18
+ 'synopsis' => $this->getCommonIpCmdArgs(),
19
+ ] ) );
20
+ }
21
+
22
+ /**
23
+ * @param array $null
24
+ * @param array $aA
25
+ * @throws WP_CLI\ExitException
26
+ */
27
+ public function cmdIpRemove( array $null, array $aA ) {
28
+ /** @var \ICWP_WPSF_FeatureHandler_Ips $oMod */
29
+ $oMod = $this->getMod();
30
+
31
+ $oDel = ( new Ops\DeleteIp() )
32
+ ->setDbHandler( $oMod->getDbHandler_IPs() )
33
+ ->setIP( $aA[ 'ip' ] );
34
+ if ( $aA[ 'list' ] === 'white' ) {
35
+ $bSuccess = $oDel->fromWhiteList();
36
+ }
37
+ else {
38
+ $bSuccess = $oDel->fromBlacklist();
39
+ }
40
+
41
+ $bSuccess ?
42
+ WP_CLI::success( __( 'IP address removed successfully.', 'wp-simple-firewall' ) )
43
+ : WP_CLI::error( __( "IP address couldn't be removed. (It may not be on this list)", 'wp-simple-firewall' ) );
44
+ }
45
+ }
src/lib/src/Modules/License/WpCli.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\License;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\License;
7
+
8
+ class WpCli extends Base\WpCli {
9
+
10
+ /**
11
+ * @inheritDoc
12
+ */
13
+ protected function getCmdHandlers() {
14
+ return [
15
+ new License\WpCli\License()
16
+ ];
17
+ }
18
+ }
src/lib/src/Modules/License/WpCli/License.php ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\License\WpCli;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
+ use WP_CLI;
7
+
8
+ class License extends Base\WpCli\BaseWpCliCmd {
9
+
10
+ /**
11
+ * @throws \Exception
12
+ */
13
+ protected function addCmds() {
14
+ WP_CLI::add_command(
15
+ $this->buildCmd( [ 'pro' ] ),
16
+ [ $this, 'cmdAction' ], $this->mergeCommonCmdArgs( [
17
+ 'shortdesc' => 'Manage the ShieldPRO license.',
18
+ 'synopsis' => [
19
+ [
20
+ 'type' => 'assoc',
21
+ 'name' => 'action',
22
+ 'options' => [
23
+ 'status',
24
+ 'verify',
25
+ 'remove',
26
+ ],
27
+ 'optional' => false,
28
+ 'description' => 'Action to perform on the ShieldPRO license.',
29
+ ],
30
+ [
31
+ 'type' => 'flag',
32
+ 'name' => 'force',
33
+ 'optional' => true,
34
+ 'description' => 'By-pass confirmation prompt.',
35
+ ],
36
+ ],
37
+ ]
38
+ ) );
39
+ }
40
+
41
+ /**
42
+ * @param array $null
43
+ * @param array $aA
44
+ * @throws WP_CLI\ExitException
45
+ */
46
+ public function cmdAction( array $null, array $aA ) {
47
+
48
+ switch ( $aA[ 'action' ] ) {
49
+ case 'status':
50
+ $this->runStatus();
51
+ break;
52
+
53
+ case 'verify':
54
+ $this->runVerify();
55
+ break;
56
+
57
+ case 'remove':
58
+ $this->runRemove( $this->isForceFlag( $aA ) );
59
+ break;
60
+ }
61
+ }
62
+
63
+ private function runRemove( $bConfirm ) {
64
+ if ( !$this->getCon()->isPremiumActive() ) {
65
+ WP_CLI::success( __( 'No license to remove.', 'wp-simple-firewall' ) );
66
+ }
67
+ else {
68
+ if ( !$bConfirm ) {
69
+ WP_CLI::confirm( __( 'Are you sure you want to remove the ShieldPRO license?', 'wp-simple-firewall' ) );
70
+ }
71
+ /** @var \ICWP_WPSF_FeatureHandler_License $oMod */
72
+ $oMod = $this->getMod();
73
+ $oMod->getLicenseHandler()->clearLicense();
74
+ WP_CLI::success( __( 'License removed successfully.', 'wp-simple-firewall' ) );
75
+ }
76
+ }
77
+
78
+ /**
79
+ * @throws WP_CLI\ExitException
80
+ */
81
+ private function runStatus() {
82
+ /** @var \ICWP_WPSF_FeatureHandler_License $oMod */
83
+ $oMod = $this->getMod();
84
+ $oMod->getLicenseHandler()->isActive() ?
85
+ WP_CLI::success( __( 'Active license found.', 'wp-simple-firewall' ) )
86
+ : WP_CLI::error( __( 'No active license present.', 'wp-simple-firewall' ) );
87
+ }
88
+
89
+ /**
90
+ * @throws WP_CLI\ExitException
91
+ */
92
+ private function runVerify() {
93
+ /** @var \ICWP_WPSF_FeatureHandler_License $oMod */
94
+ $oMod = $this->getMod();
95
+
96
+ try {
97
+ if ( $this->getCon()->isPremiumActive() ) {
98
+ WP_CLI::log( 'Premium license is already active. Re-checking...' );
99
+ }
100
+ $bSuccess = $oMod
101
+ ->getLicenseHandler()
102
+ ->verify()
103
+ ->hasValidWorkingLicense();
104
+ $sMessage = $bSuccess ? __( 'Valid license found and installed.', 'wp-simple-firewall' ) : __( "Valid license couldn't be found.", 'wp-simple-firewall' );
105
+ }
106
+ catch ( \Exception $oE ) {
107
+ $bSuccess = false;
108
+ $sMessage = $oE->getMessage();
109
+ }
110
+
111
+ $bSuccess ? WP_CLI::success( $sMessage ) : WP_CLI::error( $sMessage );
112
+ }
113
+
114
+ /**
115
+ * License checking WP-CLI cmds may be run if you're not premium,
116
+ * or you're premium and you haven't switched it off (parent).
117
+ * @inheritDoc
118
+ */
119
+ protected function canRun() {
120
+ return !$this->getCon()->isPremiumActive()
121
+ || parent::canRun();
122
+ }
123
+ }
src/lib/src/Modules/LoginGuard/AjaxHandler.php CHANGED
@@ -31,6 +31,14 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
31
  $aResponse = $this->ajaxExec_ResendEmailVerification();
32
  break;
33
 
 
 
 
 
 
 
 
 
34
  default:
35
  $aResponse = parent::processAjaxAction( $sAction );
36
  }
@@ -89,6 +97,42 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
89
  ];
90
  }
91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  /**
93
  * @return array
94
  */
31
  $aResponse = $this->ajaxExec_ResendEmailVerification();
32
  break;
33
 
34
+ case 'u2f_remove':
35
+ $aResponse = $this->ajaxExec_ProfileU2fRemove();
36
+ break;
37
+
38
+ case 'yubikey_remove':
39
+ $aResponse = $this->ajaxExec_ProfileYubikeyRemove();
40
+ break;
41
+
42
  default:
43
  $aResponse = parent::processAjaxAction( $sAction );
44
  }
97
  ];
98
  }
99
 
100
+ /**
101
+ * @return array
102
+ */
103
+ private function ajaxExec_ProfileU2fRemove() {
104
+ /** @var \ICWP_WPSF_FeatureHandler_LoginProtect $oMod */
105
+ $oMod = $this->getMod();
106
+
107
+ $sKey = Services::Request()->post( 'u2fid' );
108
+ ( new TwoFactor\Provider\U2F() )
109
+ ->setMod( $oMod )
110
+ ->removeRegisteredU2fId( Services::WpUsers()->getCurrentWpUser(), $sKey );
111
+ return [
112
+ 'success' => true,
113
+ 'message' => __( 'Registered U2F device removed from profile.', 'wp-simple-firewall' ),
114
+ 'page_reload' => true
115
+ ];
116
+ }
117
+
118
+ /**
119
+ * @return array
120
+ */
121
+ private function ajaxExec_ProfileYubikeyRemove() {
122
+ /** @var \ICWP_WPSF_FeatureHandler_LoginProtect $oMod */
123
+ $oMod = $this->getMod();
124
+
125
+ $sKey = Services::Request()->post( 'yubikeyid' );
126
+ ( new TwoFactor\Provider\Yubikey() )
127
+ ->setMod( $oMod )
128
+ ->addRemoveRegisteredYubiId( Services::WpUsers()->getCurrentWpUser(), $sKey, false );
129
+ return [
130
+ 'success' => true,
131
+ 'message' => __( 'Yubikey removed from profile.', 'wp-simple-firewall' ),
132
+ 'page_reload' => true
133
+ ];
134
+ }
135
+
136
  /**
137
  * @return array
138
  */
src/lib/src/Modules/LoginGuard/Lib/AntiBot/IncludeJs.php DELETED
@@ -1,25 +0,0 @@
1
- <?php
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\AntiBot;
4
-
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
6
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
7
- use FernleafSystems\Wordpress\Services\Services;
8
-
9
- /**
10
- * Class IncludeJs
11
- * @package FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\AntiBot
12
- * @deprecated 9.0
13
- */
14
- class IncludeJs {
15
-
16
- use ModConsumer;
17
-
18
- private static $bAntiBotJsEnqueued = false;
19
-
20
- public function run() {
21
- }
22
-
23
- public function onWpEnqueueJs() {
24
- }
25
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentPage.php CHANGED
@@ -4,7 +4,6 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFact
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
7
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
8
  use FernleafSystems\Wordpress\Plugin\Shield\Utilities\AdminNotices\NoticeVO;
9
  use FernleafSystems\Wordpress\Services\Services;
10
 
@@ -31,14 +30,6 @@ class LoginIntentPage {
31
  $oReq = Services::Request();
32
  $oWP = Services::WpGeneral();
33
 
34
- $aLoginIntentFields = array_map(
35
- function ( $oProvider ) {
36
- /** @var TwoFactor\Provider\BaseProvider $oProvider */
37
- return $oProvider->getFormField();
38
- },
39
- $oIC->getProvidersForUser( Services::WpUsers()->getCurrentWpUser(), true )
40
- );
41
-
42
  $oNotice = $oCon->getAdminNotices()->getFlashNotice();
43
  if ( $oNotice instanceof NoticeVO ) {
44
  $sMessage = $oNotice->render_data[ 'message' ];
@@ -90,7 +81,12 @@ class LoginIntentPage {
90
  )
91
  ],
92
  'data' => [
93
- 'login_fields' => $aLoginIntentFields,
 
 
 
 
 
94
  'time_remaining' => $nTimeRemaining,
95
  'message_type' => 'info',
96
  'login_intent_flag' => $oMod->getLoginIntentRequestFlag(),
@@ -143,12 +139,28 @@ class LoginIntentPage {
143
  ],
144
  'flags' => [
145
  'show_branded_links' => !$oMod->isWlEnabled(), // white label mitigation
 
 
146
  ],
147
  'content' => [
148
  'form' => $this->renderForm(),
149
  ]
150
  ];
151
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  return $oMod->renderTemplate( '/pages/login_intent/index.twig',
153
  Services::DataManipulation()->mergeArraysRecursive( $oMod->getBaseDisplayData(), $aDisplayData ), true );
154
  }
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
 
7
  use FernleafSystems\Wordpress\Plugin\Shield\Utilities\AdminNotices\NoticeVO;
8
  use FernleafSystems\Wordpress\Services\Services;
9
 
30
  $oReq = Services::Request();
31
  $oWP = Services::WpGeneral();
32
 
 
 
 
 
 
 
 
 
33
  $oNotice = $oCon->getAdminNotices()->getFlashNotice();
34
  if ( $oNotice instanceof NoticeVO ) {
35
  $sMessage = $oNotice->render_data[ 'message' ];
81
  )
82
  ],
83
  'data' => [
84
+ 'login_fields' => array_filter( array_map(
85
+ function ( $oProvider ) {
86
+ return $oProvider->getFormField();
87
+ },
88
+ $oIC->getProvidersForUser( Services::WpUsers()->getCurrentWpUser(), true )
89
+ ) ),
90
  'time_remaining' => $nTimeRemaining,
91
  'message_type' => 'info',
92
  'login_intent_flag' => $oMod->getLoginIntentRequestFlag(),
139
  ],
140
  'flags' => [
141
  'show_branded_links' => !$oMod->isWlEnabled(), // white label mitigation
142
+ 'has_u2f' => isset( $oIC->getProvidersForUser(
143
+ Services::WpUsers()->getCurrentWpUser(), true )[ LoginGuard\Lib\TwoFactor\Provider\U2F::SLUG ] )
144
  ],
145
  'content' => [
146
  'form' => $this->renderForm(),
147
  ]
148
  ];
149
 
150
+ // Provide the U2F scripts if required.
151
+ if ( $aDisplayData[ 'flags' ][ 'has_u2f' ] ) {
152
+ $aDisplayData[ 'head' ] = [
153
+ 'scripts' => [
154
+ [
155
+ 'src' => $oCon->getPluginUrl_Js( 'u2f-bundle.js' ),
156
+ ],
157
+ [
158
+ 'src' => $oCon->getPluginUrl_Js( 'u2f-frontend.js' ),
159
+ ]
160
+ ]
161
+ ];
162
+ }
163
+
164
  return $oMod->renderTemplate( '/pages/login_intent/index.twig',
165
  Services::DataManipulation()->mergeArraysRecursive( $oMod->getBaseDisplayData(), $aDisplayData ), true );
166
  }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php CHANGED
@@ -142,6 +142,7 @@ class MfaController {
142
  Provider\GoogleAuth::SLUG => ( new Provider\GoogleAuth() )->setMod( $this->getMod() ),
143
  Provider\Yubikey::SLUG => ( new Provider\Yubikey() )->setMod( $this->getMod() ),
144
  Provider\Backup::SLUG => ( new Provider\Backup() )->setMod( $this->getMod() ),
 
145
  ];
146
  }
147
  return $this->aProviders;
@@ -154,18 +155,23 @@ class MfaController {
154
  * @return Provider\BaseProvider[]
155
  */
156
  public function getProvidersForUser( $oUser, $bOnlyActiveProfiles = false ) {
157
- $aProviders = array_filter( $this->getProviders(),
158
  function ( $oProvider ) use ( $oUser, $bOnlyActiveProfiles ) {
159
  /** @var Provider\BaseProvider $oProvider */
160
  return $oProvider->isProviderAvailableToUser( $oUser )
161
  && ( !$bOnlyActiveProfiles || $oProvider->isProfileActive( $oUser ) );
162
  }
163
  );
164
- // Backups should NEVER be the only 1 available.
165
- if ( count( $aProviders ) === 1 && isset( $aProviders[ Provider\Backup::SLUG ] ) ) {
166
- unset( $aProviders[ Provider\Backup::SLUG ] );
 
 
 
 
 
167
  }
168
- return $aProviders;
169
  }
170
 
171
  /**
@@ -177,22 +183,24 @@ class MfaController {
177
  $oCon = $this->getCon();
178
  $oReq = Services::Request();
179
  $oWpResp = Services::Response();
180
- $oUser = Services::WpUsers()->getCurrentWpUser();
181
 
182
  // Is 2FA/login-intent submit
183
  if ( $oReq->request( $this->getLoginIntentRequestFlag() ) == 1 ) {
184
 
185
  if ( $oReq->post( 'cancel' ) == 1 ) {
186
- Services::WpUsers()->logoutUser(); // clears the login and login intent
187
  $sRedirectHref = $oReq->post( 'cancel_href' );
188
  empty( $sRedirectHref ) ? $oWpResp->redirectToLogin() : $oWpResp->redirect( $sRedirectHref );
189
  }
190
  elseif ( $this->validateLoginIntentRequest() ) {
191
 
192
- if ( $oReq->post( 'skip_mfa' ) === 'Y' ) { // store the browser hash
193
- $oCon->getUserMeta( $oUser )
194
- ->addMfaSkipAgent( $oReq->getUserAgent(), $oOpts->getMfaSkip() );
 
195
  }
 
196
  $oCon->fireEvent( '2fa_success' );
197
 
198
  $sFlash = __( 'Success', 'wp-simple-firewall' ).'! '.__( 'Thank you for authenticating your login.', 'wp-simple-firewall' );
@@ -243,35 +251,17 @@ class MfaController {
243
  * @return bool
244
  */
245
  private function canUserMfaSkip( $oUser ) {
246
- /** @var LoginGuard\Options $oOpts */
247
- $oOpts = $this->getOptions();
248
- $oReq = Services::Request();
249
 
250
- $oMeta = $this->getCon()->getUserMeta( $oUser );
251
- if ( $oOpts->isMfaSkip() ) {
252
- $aHashes = is_array( $oMeta->hash_loginmfa ) ? $oMeta->hash_loginmfa : [];
253
- $sAgentHash = md5( $oReq->getUserAgent() );
254
- $bCanSkip = isset( $aHashes[ $sAgentHash ] )
255
- && ( (int)$aHashes[ $sAgentHash ] + $oOpts->getMfaSkip() ) > $oReq->ts();
256
- }
257
- elseif ( $this->getCon()->isPremiumActive() && @class_exists( 'WC_Social_Login' ) ) {
258
  // custom support for WooCommerce Social login
259
  $oMeta = $this->getCon()->getUserMeta( $oUser );
260
  $bCanSkip = isset( $oMeta->wc_social_login_valid ) ? $oMeta->wc_social_login_valid : false;
261
  }
262
- else {
263
- /**
264
- * TODO: remove the HTTP_REFERER bit once iCWP plugin is updated.
265
- * We want logins from iCWP to skip 2FA. To achieve this, iCWP plugin needs
266
- * to add a TRUE filter on 'odp-shield-2fa_skip' at the point of login.
267
- * Until then, we'll use the HTTP referrer as an indicator
268
- */
269
- $bCanSkip = apply_filters(
270
- 'odp-shield-2fa_skip',
271
- strpos( $oReq->server( 'HTTP_REFERER' ), 'https://app.icontrolwp.com/' ) === 0
272
- );
273
- }
274
- return $bCanSkip;
275
  }
276
 
277
  /**
142
  Provider\GoogleAuth::SLUG => ( new Provider\GoogleAuth() )->setMod( $this->getMod() ),
143
  Provider\Yubikey::SLUG => ( new Provider\Yubikey() )->setMod( $this->getMod() ),
144
  Provider\Backup::SLUG => ( new Provider\Backup() )->setMod( $this->getMod() ),
145
+ Provider\U2F::SLUG => ( new Provider\U2F() )->setMod( $this->getMod() ),
146
  ];
147
  }
148
  return $this->aProviders;
155
  * @return Provider\BaseProvider[]
156
  */
157
  public function getProvidersForUser( $oUser, $bOnlyActiveProfiles = false ) {
158
+ $aPs = array_filter( $this->getProviders(),
159
  function ( $oProvider ) use ( $oUser, $bOnlyActiveProfiles ) {
160
  /** @var Provider\BaseProvider $oProvider */
161
  return $oProvider->isProviderAvailableToUser( $oUser )
162
  && ( !$bOnlyActiveProfiles || $oProvider->isProfileActive( $oUser ) );
163
  }
164
  );
165
+
166
+ // Neither BackupCode NOR U2F should EVER be the only 1 provider available.
167
+ if ( count( $aPs ) === 1 ) {
168
+ /** @var Provider\BaseProvider $oFirst */
169
+ $oFirst = reset( $aPs );
170
+ if ( !$oFirst::STANDALONE ) {
171
+ $aPs = [];
172
+ }
173
  }
174
+ return $aPs;
175
  }
176
 
177
  /**
183
  $oCon = $this->getCon();
184
  $oReq = Services::Request();
185
  $oWpResp = Services::Response();
186
+ $oWpUsers = Services::WpUsers();
187
 
188
  // Is 2FA/login-intent submit
189
  if ( $oReq->request( $this->getLoginIntentRequestFlag() ) == 1 ) {
190
 
191
  if ( $oReq->post( 'cancel' ) == 1 ) {
192
+ $oWpUsers->logoutUser(); // clears the login and login intent
193
  $sRedirectHref = $oReq->post( 'cancel_href' );
194
  empty( $sRedirectHref ) ? $oWpResp->redirectToLogin() : $oWpResp->redirect( $sRedirectHref );
195
  }
196
  elseif ( $this->validateLoginIntentRequest() ) {
197
 
198
+ if ( $oReq->post( 'skip_mfa' ) === 'Y' ) {
199
+ ( new MfaSkip() )
200
+ ->setMod( $this->getMod() )
201
+ ->addMfaSkip( $oWpUsers->getCurrentWpUser() );
202
  }
203
+
204
  $oCon->fireEvent( '2fa_success' );
205
 
206
  $sFlash = __( 'Success', 'wp-simple-firewall' ).'! '.__( 'Thank you for authenticating your login.', 'wp-simple-firewall' );
251
  * @return bool
252
  */
253
  private function canUserMfaSkip( $oUser ) {
254
+ $bCanSkip = ( new MfaSkip() )
255
+ ->setMod( $this->getMod() )
256
+ ->canMfaSkip( $oUser );
257
 
258
+ if ( !$bCanSkip && $this->getCon()->isPremiumActive() && @class_exists( 'WC_Social_Login' ) ) {
 
 
 
 
 
 
 
259
  // custom support for WooCommerce Social login
260
  $oMeta = $this->getCon()->getUserMeta( $oUser );
261
  $bCanSkip = isset( $oMeta->wc_social_login_valid ) ? $oMeta->wc_social_login_valid : false;
262
  }
263
+
264
+ return apply_filters( 'odp-shield-2fa_skip', $bCanSkip );
 
 
 
 
 
 
 
 
 
 
 
265
  }
266
 
267
  /**
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaSkip.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
7
+ use FernleafSystems\Wordpress\Services\Services;
8
+
9
+ class MfaSkip {
10
+
11
+ use Shield\Modules\ModConsumer;
12
+
13
+ /**
14
+ * @param \WP_User $oUser
15
+ */
16
+ public function addMfaSkip( \WP_User $oUser ) {
17
+ /** @var LoginGuard\Options $oOpts */
18
+ $oOpts = $this->getOptions();
19
+
20
+ $oMeta = $this->getCon()->getUserMeta( $oUser );
21
+ $aHashes = is_array( $oMeta->hash_loginmfa ) ? $oMeta->hash_loginmfa : [];
22
+ $aHashes[ $this->getAgentHash() ] = Services::Request()->ts();
23
+
24
+ $nMaxExpires = $oOpts->getMfaSkip();
25
+ if ( $nMaxExpires > 0 ) {
26
+ $aHashes = array_filter( $aHashes,
27
+ function ( $nTS ) use ( $nMaxExpires ) {
28
+ return Services::Request()->ts() - $nTS < $nMaxExpires;
29
+ }
30
+ );
31
+ }
32
+
33
+ $oMeta->hash_loginmfa = $aHashes;
34
+ }
35
+
36
+ /**
37
+ * @param \WP_User $oUser
38
+ * @return bool
39
+ */
40
+ public function canMfaSkip( \WP_User $oUser ) {
41
+ /** @var LoginGuard\Options $oOpts */
42
+ $oOpts = $this->getOptions();
43
+ $oReq = Services::Request();
44
+
45
+ $bCanSkip = false;
46
+
47
+ if ( $oOpts->isMfaSkip() ) {
48
+ $sAgentHash = $this->getAgentHash();
49
+ $oMeta = $this->getCon()->getUserMeta( $oUser );
50
+ $aHashes = is_array( $oMeta->hash_loginmfa ) ? $oMeta->hash_loginmfa : [];
51
+ $bCanSkip = isset( $aHashes[ $sAgentHash ] )
52
+ && ( (int)$aHashes[ $sAgentHash ] + $oOpts->getMfaSkip() ) > $oReq->ts();
53
+ }
54
+
55
+ return $bCanSkip;
56
+ }
57
+
58
+ /**
59
+ * @return string
60
+ */
61
+ private function getAgentHash() {
62
+ return md5( serialize( [
63
+ Services::IP()->getRequestIp(),
64
+ Services::Request()->getUserAgent()
65
+ ] ) );
66
+ }
67
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Backup.php CHANGED
@@ -8,6 +8,7 @@ use FernleafSystems\Wordpress\Services\Services;
8
  class Backup extends BaseProvider {
9
 
10
  const SLUG = 'backupcode';
 
11
 
12
  /**
13
  * @inheritDoc
8
  class Backup extends BaseProvider {
9
 
10
  const SLUG = 'backupcode';
11
+ const STANDALONE = false;
12
 
13
  /**
14
  * @inheritDoc
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BaseProvider.php CHANGED
@@ -8,7 +8,23 @@ use FernleafSystems\Wordpress\Services\Services;
8
  abstract class BaseProvider {
9
 
10
  use Modules\ModConsumer;
 
11
  const SLUG = '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
  /**
14
  * Assumes this is only called on active profiles
@@ -31,7 +47,7 @@ abstract class BaseProvider {
31
  */
32
  protected function getSecret( \WP_User $oUser ) {
33
  $sSecret = $this->getCon()->getUserMeta( $oUser )->{static::SLUG.'_secret'};
34
- return empty( $sSecret ) ? '' : $sSecret;
35
  }
36
 
37
  /**
@@ -131,7 +147,7 @@ abstract class BaseProvider {
131
 
132
  /**
133
  * @param \WP_User $oUser
134
- * @return string
135
  */
136
  protected function genNewSecret( \WP_User $oUser ) {
137
  return '';
@@ -201,7 +217,9 @@ abstract class BaseProvider {
201
  /**
202
  * @return array
203
  */
204
- abstract public function getFormField();
 
 
205
 
206
  /**
207
  * @param \WP_User $oUser
@@ -230,7 +248,7 @@ abstract class BaseProvider {
230
  * @return string
231
  */
232
  protected function fetchCodeFromRequest() {
233
- return esc_attr( Services::Request()->request( $this->getLoginFormParameter(), false, '' ) );
234
  }
235
 
236
  /**
8
  abstract class BaseProvider {
9
 
10
  use Modules\ModConsumer;
11
+
12
  const SLUG = '';
13
+ /**
14
+ * Set to true if this provider can be used in isolation. False if there
15
+ * must be at least 1 other 2FA provider active.
16
+ */
17
+ const STANDALONE = true;
18
+ /**
19
+ * Always a screen, but maybe an json-encoded string, e.g. '[]', like U2F
20
+ */
21
+ const DEFAULT_SECRET = '';
22
+
23
+ public function __construct() {
24
+ }
25
+
26
+ public function setupProfile() {
27
+ }
28
 
29
  /**
30
  * Assumes this is only called on active profiles
47
  */
48
  protected function getSecret( \WP_User $oUser ) {
49
  $sSecret = $this->getCon()->getUserMeta( $oUser )->{static::SLUG.'_secret'};
50
+ return empty( $sSecret ) ? static::DEFAULT_SECRET : $sSecret;
51
  }
52
 
53
  /**
147
 
148
  /**
149
  * @param \WP_User $oUser
150
+ * @return string|mixed
151
  */
152
  protected function genNewSecret( \WP_User $oUser ) {
153
  return '';
217
  /**
218
  * @return array
219
  */
220
+ public function getFormField() {
221
+ return [];
222
+ }
223
 
224
  /**
225
  * @param \WP_User $oUser
248
  * @return string
249
  */
250
  protected function fetchCodeFromRequest() {
251
+ return trim( Services::Request()->request( $this->getLoginFormParameter(), false, '' ) );
252
  }
253
 
254
  /**
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php CHANGED
@@ -154,31 +154,44 @@ class Email extends BaseProvider {
154
  * @return $this
155
  */
156
  private function sendEmailTwoFactorVerify( \WP_User $oUser ) {
157
- $aMessage = [
158
- __( 'Someone attempted to login into this WordPress site using your account.', 'wp-simple-firewall' ),
159
- __( 'Login requires verification with the following code.', 'wp-simple-firewall' ),
160
- '',
161
- sprintf( __( 'Verification Code: %s', 'wp-simple-firewall' ), sprintf( '<strong>%s</strong>', $this->getSecret( $oUser ) ) ),
162
- '',
163
- sprintf( '<strong>%s</strong>', __( 'Login Details', 'wp-simple-firewall' ) ),
164
- sprintf( '%s: %s', __( 'URL', 'wp-simple-firewall' ), Services::WpGeneral()->getHomeUrl() ),
165
- sprintf( '%s: %s', __( 'Username', 'wp-simple-firewall' ), $oUser->user_login ),
166
- sprintf( '%s: %s', __( 'IP Address', 'wp-simple-firewall' ), Services::IP()->getRequestIp() ),
167
- '',
 
168
  ];
169
 
170
- if ( !$this->getCon()->isRelabelled() ) {
171
- $aMessage[] = sprintf( '- <a href="%s" target="_blank">%s</a>', 'https://shsec.io/96', __( 'Why no login link?', 'wp-simple-firewall' ) );
172
- $aContent[] = '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  }
174
-
175
- $bResult = $this->getMod()
176
- ->getEmailProcessor()
177
- ->sendEmailWithWrap(
178
- $oUser->user_email,
179
- __( 'Two-Factor Login Verification', 'wp-simple-firewall' ),
180
- $aMessage
181
- );
182
 
183
  $this->getCon()->fireEvent(
184
  $bResult ? '2fa_email_send_success' : '2fa_email_send_fail',
154
  * @return $this
155
  */
156
  private function sendEmailTwoFactorVerify( \WP_User $oUser ) {
157
+
158
+ $aLines = [
159
+ 'someone' => __( 'Someone attempted to login into this WordPress site using your account.', 'wp-simple-firewall' ),
160
+ 'requires' => __( 'Login requires verification with the following code.', 'wp-simple-firewall' ),
161
+ 'verification' => __( 'Verification Code', 'wp-simple-firewall' ),
162
+ 'login_link' => __( 'Why no login link?', 'wp-simple-firewall' ),
163
+ 'details_heading' => __( 'Login Details', 'wp-simple-firewall' ),
164
+ 'details_url' => sprintf( '%s: %s', __( 'URL', 'wp-simple-firewall' ), Services::WpGeneral()
165
+ ->getHomeUrl() ),
166
+ 'details_username' => sprintf( '%s: %s', __( 'Username', 'wp-simple-firewall' ), $oUser->user_login ),
167
+ 'details_ip' => sprintf( '%s: %s', __( 'IP Address', 'wp-simple-firewall' ), Services::IP()
168
+ ->getRequestIp() ),
169
  ];
170
 
171
+ try {
172
+ $bResult = $this->getMod()
173
+ ->getEmailProcessor()
174
+ ->sendEmailWithTemplate(
175
+ '/email/lp_2fa_email_code',
176
+ $oUser->user_email,
177
+ __( 'Two-Factor Login Verification', 'wp-simple-firewall' ),
178
+ [
179
+ 'flags' => [
180
+ 'show_login_link' => !$this->getCon()->isRelabelled()
181
+ ],
182
+ 'vars' => [
183
+ 'code' => $this->getSecret( $oUser )
184
+ ],
185
+ 'hrefs' => [
186
+ 'login_link' => 'https://shsec.io/96'
187
+ ],
188
+ 'strings' => $aLines
189
+ ]
190
+ );
191
+ }
192
+ catch ( \Exception $e ) {
193
+ $bResult = false;
194
  }
 
 
 
 
 
 
 
 
195
 
196
  $this->getCon()->fireEvent(
197
  $bResult ? '2fa_email_send_success' : '2fa_email_send_fail',
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php CHANGED
@@ -20,7 +20,7 @@ class GoogleAuth extends BaseProvider {
20
  * @return bool
21
  */
22
  public function isProfileActive( \WP_User $oUser ) {
23
- return $this->hasValidSecret( $oUser ) && $this->hasValidatedProfile( $oUser );
24
  }
25
 
26
  /**
@@ -219,7 +219,6 @@ class GoogleAuth extends BaseProvider {
219
  /**
220
  * @param \WP_User $oUser
221
  * @return GoogleAuthenticator\Secret
222
- * @throws \InvalidArgumentException
223
  */
224
  private function getGaSecret( $oUser ) {
225
  if ( !isset( $this->oWorkingSecret ) ) {
20
  * @return bool
21
  */
22
  public function isProfileActive( \WP_User $oUser ) {
23
+ return parent::isProfileActive( $oUser ) && $this->hasValidatedProfile( $oUser );
24
  }
25
 
26
  /**
219
  /**
220
  * @param \WP_User $oUser
221
  * @return GoogleAuthenticator\Secret
 
222
  */
223
  private function getGaSecret( $oUser ) {
224
  if ( !isset( $this->oWorkingSecret ) ) {
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php ADDED
@@ -0,0 +1,377 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
6
+ use FernleafSystems\Wordpress\Services\Services;
7
+ use u2flib_server\RegisterRequest;
8
+ use u2flib_server\SignRequest;
9
+
10
+ class U2F extends BaseProvider {
11
+
12
+ const SLUG = 'u2f';
13
+ const STANDALONE = false;
14
+ const DEFAULT_SECRET = '[]';
15
+
16
+ /**
17
+ * @param \WP_User $oUser
18
+ * @return bool
19
+ */
20
+ public function isProfileActive( \WP_User $oUser ) {
21
+ return parent::isProfileActive( $oUser ) && $this->hasValidatedProfile( $oUser );
22
+ }
23
+
24
+ public function setupProfile() {
25
+ add_action( 'admin_enqueue_scripts', function ( $sHook ) {
26
+ if ( in_array( $sHook, [ 'profile.php', ] ) ) {
27
+ $this->enqueueAdminU2f();
28
+ }
29
+ } );
30
+ }
31
+
32
+ private function enqueueAdminU2f() {
33
+ $aDeps = [];
34
+ foreach ( [ 'u2f-bundle', 'shield-u2f-admin' ] as $sScript ) {
35
+ wp_enqueue_script(
36
+ $this->getCon()->prefix( $sScript ),
37
+ $this->getCon()->getPluginUrl_Js( $sScript ),
38
+ $aDeps
39
+ );
40
+ $aDeps[] = $this->getCon()->prefix( $sScript );
41
+ }
42
+
43
+ $oUser = Services::WpUsers()->getCurrentWpUser();
44
+ try {
45
+ list( $oReg, $aSigns ) = $this->createNewU2fRegistrationRequest( $oUser );
46
+ wp_localize_script(
47
+ $this->getCon()->prefix( 'shield-u2f-admin' ),
48
+ 'icwp_wpsf_vars_u2f',
49
+ [
50
+ 'reg_request' => $oReg,
51
+ 'signs' => $aSigns,
52
+ 'ajax' => [
53
+ 'u2f_remove' => $this->getMod()->getAjaxActionData( 'u2f_remove' )
54
+ ],
55
+ 'flags' => [
56
+ 'has_validated' => $this->hasValidatedProfile( $oUser )
57
+ ],
58
+ 'strings' => [
59
+ 'not_supported' => __( 'U2F Security Key registration is not supported in this browser', 'wp-simple-firewall' ),
60
+ 'failed' => __( 'Key registration failed.', 'wp-simple-firewall' )
61
+ .' '.__( "Perhaps the device isn't supported, or you've already registered it.", 'wp-simple-firewall' )
62
+ .' '.__( 'Please retry or refresh the page.', 'wp-simple-firewall' ),
63
+ 'do_save' => __( 'Key registration was successful.', 'wp-simple-firewall' )
64
+ .' '.__( 'Please now save your profile settings.', 'wp-simple-firewall' ),
65
+ 'prompt_dialog' => __( 'Please provide a label to identify the new U2F device.', 'wp-simple-firewall' ),
66
+ 'err_no_label' => __( 'Device registration may not proceed without a unique label.', 'wp-simple-firewall' ),
67
+ 'err_invalid_label' => __( 'Device label must contain letters, numbers, underscore, or hypen, and be no more than 16 characters.', 'wp-simple-firewall' ),
68
+ ]
69
+ ]
70
+ );
71
+ }
72
+ catch ( \Exception $oE ) {
73
+ }
74
+ }
75
+
76
+ /**
77
+ * @return array
78
+ */
79
+ public function getFormField() {
80
+ $oUser = Services::WpUsers()->getCurrentWpUser();
81
+
82
+ $aFieldData = [];
83
+ try {
84
+ /** @var SignRequest[] $aSignReqs */
85
+ $aSignReqs = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
86
+ ->getAuthenticateData( $this->getRegistrations( $oUser ) );
87
+
88
+ if ( empty( $aSignReqs ) ) {
89
+ throw new \Exception( 'No signature requests could be created' );
90
+ }
91
+
92
+ $aFieldData = [
93
+ 'name' => 'btn_u2f_start',
94
+ 'type' => 'button',
95
+ 'value' => 'Click To Begin U2F Authentication',
96
+ 'placeholder' => '',
97
+ 'text' => 'U2F Authentication',
98
+ 'classes' => [ 'btn', 'btn-light' ],
99
+ 'help_link' => '',
100
+ 'datas' => [
101
+ 'signs' => base64_encode( json_encode( $aSignReqs ) ),
102
+ 'input_otp' => $this->getLoginFormParameter(),
103
+ ]
104
+ ];
105
+ }
106
+ catch ( \Exception $oE ) {
107
+ }
108
+
109
+ return $aFieldData;
110
+ }
111
+
112
+ /**
113
+ * @param \WP_User $oUser
114
+ * @return object[]
115
+ * @throws \u2flib_server\Error
116
+ */
117
+ private function createNewU2fRegistrationRequest( \WP_User $oUser ) {
118
+ $oMeta = $this->getCon()->getUserMeta( $oUser );
119
+ list( $oRegRequest, $aSignRequests ) = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
120
+ ->getRegisterData( $this->getRegistrations( $oUser ) );
121
+ $oMeta->u2f_regrequest = json_encode( $oRegRequest );
122
+ return [ $oRegRequest, $aSignRequests ];
123
+ }
124
+
125
+ /**
126
+ * @param \WP_User $oUser
127
+ * @return \stdClass[]
128
+ */
129
+ private function getRegistrations( \WP_User $oUser ) {
130
+ $aRegs = json_decode( $this->getSecret( $oUser ), true );
131
+ return array_map(
132
+ function ( $aReg ) {
133
+ return (object)$aReg;
134
+ },
135
+ is_array( $aRegs ) ? $aRegs : []
136
+ );
137
+ }
138
+
139
+ /**
140
+ * TODO: Does this port stuff make a difference whatsoever?
141
+ * @return string
142
+ */
143
+ private function getU2fAppID() {
144
+ $aPs = wp_parse_url( Services::WpGeneral()->getHomeUrl() );
145
+ $sPort = ( empty( $aPs[ 'port' ] ) || in_array( $aPs[ 'port' ], [ 80, 443 ] ) ) ? '' : $aPs[ 'port' ];
146
+ return sprintf( 'https://%s%s', $aPs[ 'host' ], $sPort );
147
+ }
148
+
149
+ /**
150
+ * @inheritDoc
151
+ */
152
+ public function renderUserProfileOptions( \WP_User $oUser ) {
153
+
154
+ $bValidated = $this->hasValidatedProfile( $oUser );
155
+
156
+ $aData = [
157
+ 'strings' => [
158
+ 'title' => __( 'U2F', 'wp-simple-firewall' ),
159
+ 'button_reg_key' => __( 'Register A New U2F Security Key', 'wp-simple-firewall' ),
160
+ 'prompt' => __( 'Click To Register A U2F Device.', 'wp-simple-firewall' ),
161
+ ],
162
+ 'flags' => [
163
+ 'is_validated' => $bValidated
164
+ ],
165
+ 'vars' => [
166
+ 'registrations' => array_map(
167
+ function ( $oReg ) {
168
+ $oReg->used_at = sprintf( '(%s: %s)',
169
+ __( 'Used', 'wp-simple-firewall' ),
170
+ empty( $oReg->used_at ) ?
171
+ __( 'Never', 'wp-simple-firewall' )
172
+ : Services::Request()
173
+ ->carbon()
174
+ ->setTimestamp( $oReg->used_at )
175
+ ->diffForHumans()
176
+ );
177
+ return $oReg;
178
+ },
179
+ $this->getRegistrations( $oUser )
180
+ )
181
+ ],
182
+ ];
183
+
184
+ return $this->getMod()
185
+ ->renderTemplate(
186
+ '/snippets/user/profile/mfa/mfa_u2f.twig',
187
+ Services::DataManipulation()->mergeArraysRecursive( $this->getCommonData( $oUser ), $aData ),
188
+ true
189
+ );
190
+ }
191
+
192
+ /**
193
+ * @inheritDoc
194
+ */
195
+ public function renderUserEditProfileOptions( \WP_User $oUser ) {
196
+ // Allow no actions to be taken on other user profiles
197
+ }
198
+
199
+ /**
200
+ * @inheritDoc
201
+ */
202
+ public function handleUserProfileSubmit( \WP_User $oUser ) {
203
+ $bError = false;
204
+ $sMsg = null;
205
+
206
+ $sU2fResponse = Services::Request()->post( 'icwp_wpsf_new_u2f_response' );
207
+ if ( !empty( $sU2fResponse ) ) {
208
+ $oMeta = $this->getCon()->getUserMeta( $oUser );
209
+
210
+ try {
211
+ $oDecodedResponse = json_decode( $sU2fResponse );
212
+ $sLabel = preg_replace( '#[^a-z0-9_-]#i', '', $oDecodedResponse->label );
213
+ if ( strlen( $sLabel ) > 16 ) {
214
+ throw new \Exception( 'U2F Device label is larger than 16 characters.' );
215
+ }
216
+ if ( array_key_exists( $sLabel, $this->getRegistrations( $oUser ) ) ) {
217
+ throw new \Exception( 'U2F Device with this label already exists.' );
218
+ }
219
+
220
+ $oRegRequest = json_decode( $oMeta->u2f_regrequest );
221
+ $oRegistration = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )->doRegister(
222
+ new RegisterRequest( $oRegRequest->challenge, $oRegRequest->appId ),
223
+ $oDecodedResponse
224
+ );
225
+
226
+ // attach the device label
227
+ $aConfirmedReg = get_object_vars( $oRegistration );
228
+ $aConfirmedReg[ 'label' ] = $sLabel;
229
+ $this->addRegistration( $oUser, $aConfirmedReg )
230
+ ->setProfileValidated( $oUser );
231
+
232
+ $sMsg = __( 'U2F Device was successfully registered on your profile.', 'wp-simple-firewall' );
233
+ }
234
+ catch ( \Exception $oE ) {
235
+ $bError = true;
236
+ $sMsg = sprintf( __( 'U2F Device registration failed with the following error: %s', 'wp-simple-firewall' ),
237
+ $oE->getMessage() );
238
+ }
239
+ }
240
+ elseif ( Services::Request()->post( 'wpsf_u2f_key_delete' ) === 'Y' ) {
241
+ $this->processRemovalFromAccount( $oUser );
242
+ $sMsg = __( 'U2F Device was removed from your profile.', 'wp-simple-firewall' );
243
+ }
244
+
245
+ if ( !empty( $sMsg ) ) {
246
+ $this->getMod()->setFlashAdminNotice( $sMsg, $bError );
247
+ }
248
+ }
249
+
250
+ /**
251
+ * @param \WP_User $oUser
252
+ * @param string $sOtpCode
253
+ * @return bool
254
+ */
255
+ protected function processOtp( $oUser, $sOtpCode ) {
256
+ return $this->validateU2F( $oUser, $sOtpCode );
257
+ }
258
+
259
+ /**
260
+ * @param \WP_User $oUser
261
+ * @return $this
262
+ */
263
+ protected function processRemovalFromAccount( $oUser ) {
264
+ return $this->setProfileValidated( $oUser, false )
265
+ ->deleteSecret( $oUser );
266
+ }
267
+
268
+ /**
269
+ * @param \WP_User $oUser
270
+ * @param array $aReg
271
+ * @return $this
272
+ */
273
+ private function addRegistration( \WP_User $oUser, array $aReg ) {
274
+ $aRegs = $this->getRegistrations( $oUser );
275
+
276
+ // We've been passed a Registration without a label. (for example counter increment)
277
+ // So we try to locate the pre-existing registration and update it.
278
+ if ( empty( $aReg[ 'label' ] ) ) {
279
+ $aComparisonKeys = [ 'keyHandle', 'publicKey', 'certificate', ];
280
+ foreach ( $aRegs as $sLabel => $oMaybeReg ) {
281
+ $bIsReg = true;
282
+ foreach ( $aComparisonKeys as $sKeyCompare ) {
283
+ $bIsReg = $bIsReg && ( $oMaybeReg->{$sKeyCompare} === $aReg[ $sKeyCompare ] );
284
+ }
285
+ if ( $bIsReg ) {
286
+ $aReg = array_merge( get_object_vars( $oMaybeReg ), $aReg );
287
+ break;
288
+ }
289
+ }
290
+ }
291
+
292
+ // Only add if there's a label, and set defaults
293
+ if ( !empty( $aReg[ 'label' ] ) ) {
294
+ $aRegs[ $aReg[ 'label' ] ] = array_merge(
295
+ [
296
+ 'used_at' => 0
297
+ ],
298
+ $aReg
299
+ );
300
+ }
301
+
302
+ return $this->storeRegistrations( $oUser, $aRegs );
303
+ }
304
+
305
+ /**
306
+ * @param \WP_User $oUser
307
+ * @param array $aRegs
308
+ * @return $this
309
+ */
310
+ private function storeRegistrations( \WP_User $oUser, array $aRegs ) {
311
+ return $this->setProfileValidated( $oUser, !empty( $aRegs ) )
312
+ ->setSecret( $oUser, json_encode( $aRegs ) );
313
+ }
314
+
315
+ /**
316
+ * @param \WP_User $oUser
317
+ * @param string $sU2fID
318
+ * @return $this
319
+ */
320
+ public function removeRegisteredU2fId( \WP_User $oUser, $sU2fID ) {
321
+ $aRegs = $this->getRegistrations( $oUser );
322
+ if ( isset( $aRegs[ $sU2fID ] ) ) {
323
+ unset( $aRegs[ $sU2fID ] );
324
+ $this->storeRegistrations( $oUser, $aRegs );
325
+ }
326
+ return $this;
327
+ }
328
+
329
+ /**
330
+ * @param \WP_User $oUser
331
+ * @param string $sOtpCode
332
+ * @return bool
333
+ */
334
+ private function validateU2F( $oUser, $sOtpCode ) {
335
+ try {
336
+ $oRegistration = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
337
+ ->doAuthenticate(
338
+ json_decode( base64_decode( Services::Request()->post( 'u2f_signs' ) ) ),
339
+ $this->getRegistrations( $oUser ),
340
+ json_decode( $sOtpCode )
341
+ );
342
+ $aReg = get_object_vars( $oRegistration );
343
+ $aReg[ 'used_at' ] = Services::Request()->ts();
344
+ $this->addRegistration( $oUser, $aReg );
345
+ }
346
+ catch ( \Exception $oE ) {
347
+ error_log( $oE->getMessage() );
348
+ }
349
+
350
+ return !empty( $oRegistration );
351
+ }
352
+
353
+ /**
354
+ * @param \WP_User $oUser
355
+ * @param bool $bIsSuccess
356
+ */
357
+ protected function auditLogin( $oUser, $bIsSuccess ) {
358
+ $this->getCon()->fireEvent(
359
+ $bIsSuccess ? '2fa_u2f_verified' : '2fa_u2f_fail',
360
+ [
361
+ 'audit' => [
362
+ 'user_login' => $oUser->user_login,
363
+ 'method' => 'U2F',
364
+ ]
365
+ ]
366
+ );
367
+ }
368
+
369
+ /**
370
+ * @return bool
371
+ */
372
+ public function isProviderEnabled() {
373
+ /** @var LoginGuard\Options $oOpts */
374
+ $oOpts = $this->getOptions();
375
+ return $oOpts->isEnabledU2F();
376
+ }
377
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php CHANGED
@@ -11,12 +11,30 @@ class Yubikey extends BaseProvider {
11
  const OTP_LENGTH = 12;
12
  const URL_YUBIKEY_VERIFY = 'https://api.yubico.com/wsapi/2.0/verify';
13
 
 
 
 
 
 
 
 
 
14
  /**
15
- * @param \WP_User $oUser
16
- * @return bool
17
  */
18
- public function isProfileActive( \WP_User $oUser ) {
19
- return $this->hasValidSecret( $oUser );
 
 
 
 
 
 
 
 
 
 
 
20
  }
21
 
22
  /**
@@ -30,7 +48,7 @@ class Yubikey extends BaseProvider {
30
  'yubi_ids' => $this->getYubiIds( $oUser ),
31
  ],
32
  'strings' => [
33
- 'current_yubi_ids' => __( 'Registered Yubikey devices', 'wp-simple-firewall' ),
34
  'no_active_yubi_ids' => __( 'There are no registered Yubikey devices on this profile.', 'wp-simple-firewall' ),
35
  'enter_otp' => __( 'To register a new Yubikey device, enter a One Time Password from the Yubikey.', 'wp-simple-firewall' ),
36
  'to_remove_device' => __( 'To remove a Yubikey device, enter the registered device ID and save.', 'wp-simple-firewall' ),
@@ -187,7 +205,7 @@ class Yubikey extends BaseProvider {
187
  * @param bool $bAdd - true to add; false to remove
188
  * @return $this
189
  */
190
- private function addRemoveRegisteredYubiId( \WP_User $oUser, $sKey, $bAdd = true ) {
191
  $aIDs = $this->getYubiIds( $oUser );
192
  if ( $bAdd ) {
193
  $aIDs[] = $sKey;
11
  const OTP_LENGTH = 12;
12
  const URL_YUBIKEY_VERIFY = 'https://api.yubico.com/wsapi/2.0/verify';
13
 
14
+ public function setupProfile() {
15
+ add_action( 'admin_enqueue_scripts', function ( $sHook ) {
16
+ if ( in_array( $sHook, [ 'profile.php', ] ) ) {
17
+ $this->enqueueYubikeyJS();
18
+ }
19
+ } );
20
+ }
21
+
22
  /**
23
+ * Enqueue the Javascript for removing Yubikey
 
24
  */
25
+ private function enqueueYubikeyJS() {
26
+ $oCon = $this->getCon();
27
+ $sScript = 'shield-userprofile';
28
+ wp_enqueue_script(
29
+ $oCon->prefix( $sScript ),
30
+ $oCon->getPluginUrl_Js( $sScript ),
31
+ [ 'jquery', $oCon->prefix( 'global-plugin' ) ]
32
+ );
33
+ wp_localize_script(
34
+ $oCon->prefix( $sScript ),
35
+ 'icwp_wpsf_vars_profileyubikey',
36
+ [ 'yubikey_remove' => $this->getMod()->getAjaxActionData( 'yubikey_remove' ) ]
37
+ );
38
  }
39
 
40
  /**
48
  'yubi_ids' => $this->getYubiIds( $oUser ),
49
  ],
50
  'strings' => [
51
+ 'registered_yubi_ids' => __( 'Registered Yubikey devices', 'wp-simple-firewall' ),
52
  'no_active_yubi_ids' => __( 'There are no registered Yubikey devices on this profile.', 'wp-simple-firewall' ),
53
  'enter_otp' => __( 'To register a new Yubikey device, enter a One Time Password from the Yubikey.', 'wp-simple-firewall' ),
54
  'to_remove_device' => __( 'To remove a Yubikey device, enter the registered device ID and save.', 'wp-simple-firewall' ),
205
  * @param bool $bAdd - true to add; false to remove
206
  * @return $this
207
  */
208
+ public function addRemoveRegisteredYubiId( \WP_User $oUser, $sKey, $bAdd = true ) {
209
  $aIDs = $this->getYubiIds( $oUser );
210
  if ( $bAdd ) {
211
  $aIDs[] = $sKey;
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/UserProfile.php CHANGED
@@ -17,6 +17,14 @@ class UserProfile {
17
  add_action( 'edit_user_profile', [ $this, 'addOptionsToUserEditProfile' ] );
18
  add_action( 'edit_user_profile_update', [ $this, 'handleEditOtherUserProfileSubmit' ] );
19
  }
 
 
 
 
 
 
 
 
20
  }
21
  }
22
 
@@ -44,7 +52,7 @@ class UserProfile {
44
  'provided_by' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ), $oMC->getCon()
45
  ->getHumanName() )
46
  ],
47
- 'mfa_rows' => $aRows
48
  ];
49
 
50
  echo $oMC->getMod()
17
  add_action( 'edit_user_profile', [ $this, 'addOptionsToUserEditProfile' ] );
18
  add_action( 'edit_user_profile_update', [ $this, 'handleEditOtherUserProfileSubmit' ] );
19
  }
20
+
21
+ $oWpUsers = Services::WpUsers();
22
+ if ( $oWpUsers->isUserLoggedIn() ) {
23
+ $oMC = $this->getMfaCon();
24
+ foreach ( $oMC->getProvidersForUser( $oWpUsers->getCurrentWpUser(), false ) as $oP ) {
25
+ $oP->setupProfile();
26
+ }
27
+ }
28
  }
29
  }
30
 
52
  'provided_by' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ), $oMC->getCon()
53
  ->getHumanName() )
54
  ],
55
+ 'mfa_rows' => $aRows,
56
  ];
57
 
58
  echo $oMC->getMod()
src/lib/src/Modules/LoginGuard/Options.php CHANGED
@@ -3,6 +3,7 @@
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
 
6
 
7
  /**
8
  * Class Options
@@ -127,6 +128,14 @@ class Options extends Base\ShieldOptions {
127
  return $this->isOpt( 'enable_google_authenticator', 'Y' );
128
  }
129
 
 
 
 
 
 
 
 
 
130
  /**
131
  * @return bool
132
  */
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
+ use FernleafSystems\Wordpress\Services\Services;
7
 
8
  /**
9
  * Class Options
128
  return $this->isOpt( 'enable_google_authenticator', 'Y' );
129
  }
130
 
131
+ /**
132
+ * @return bool
133
+ */
134
+ public function isEnabledU2F() {
135
+ return Services::Data()->getPhpVersionIsAtLeast( '7.0' )
136
+ && $this->isPremium() && $this->isOpt( 'enable_u2f', 'Y' );
137
+ }
138
+
139
  /**
140
  * @return bool
141
  */
src/lib/src/Modules/LoginGuard/Strings.php CHANGED
@@ -3,6 +3,7 @@
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
 
6
 
7
  class Strings extends Base\Strings {
8
 
@@ -118,9 +119,9 @@ class Strings extends Base\Strings {
118
  ];
119
  break;
120
 
121
- case 'section_yubikey_authentication' :
122
- $sTitle = __( 'Yubikey Two-Factor Authentication', 'wp-simple-firewall' );
123
- $sTitleShort = __( 'Yubikey', 'wp-simple-firewall' );
124
  $aSummary = [
125
  sprintf( '%s - %s', __( 'Purpose', 'wp-simple-firewall' ), __( 'Verifies the identity of users who log in to your site using Yubikey one-time-passwords.', 'wp-simple-firewall' ) ),
126
  sprintf( '%s: %s', __( 'Note', 'wp-simple-firewall' ), __( 'You may combine multiple authentication factors for increased security.', 'wp-simple-firewall' ) )
@@ -258,17 +259,32 @@ class Strings extends Base\Strings {
258
  $sDescription = __( 'When enabled, settings in this section will also apply to new user registration and users trying to reset passwords.', 'wp-simple-firewall' );
259
  break;
260
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  case 'enable_yubikey' :
262
- $sName = __( 'Enable Yubikey Authentication', 'wp-simple-firewall' );
263
- $sSummary = __( 'Turn On / Off Yubikey Authentication On This Site', 'wp-simple-firewall' );
264
  $sDescription = __( 'Combined with your Yubikey API details this will form the basis of your Yubikey Authentication', 'wp-simple-firewall' );
265
  break;
266
 
267
  case 'yubikey_app_id' :
268
  $sName = __( 'Yubikey App ID', 'wp-simple-firewall' );
269
  $sSummary = __( 'Your Unique Yubikey App ID', 'wp-simple-firewall' );
270
- $sDescription = __( 'Combined with your Yubikey API Key this will form the basis of your Yubikey Authentication', 'wp-simple-firewall' )
271
- .'<br />'.__( 'Please review the info link on how to obtain your own Yubikey App ID and API Key.', 'wp-simple-firewall' );
 
 
272
  break;
273
 
274
  case 'yubikey_api_key' :
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
+ use FernleafSystems\Wordpress\Services\Services;
7
 
8
  class Strings extends Base\Strings {
9
 
119
  ];
120
  break;
121
 
122
+ case 'section_hardware_authentication' :
123
+ $sTitle = __( 'Hardware 2-Factor Authentication', 'wp-simple-firewall' );
124
+ $sTitleShort = __( 'Hardware 2FA', 'wp-simple-firewall' );
125
  $aSummary = [
126
  sprintf( '%s - %s', __( 'Purpose', 'wp-simple-firewall' ), __( 'Verifies the identity of users who log in to your site using Yubikey one-time-passwords.', 'wp-simple-firewall' ) ),
127
  sprintf( '%s: %s', __( 'Note', 'wp-simple-firewall' ), __( 'You may combine multiple authentication factors for increased security.', 'wp-simple-firewall' ) )
259
  $sDescription = __( 'When enabled, settings in this section will also apply to new user registration and users trying to reset passwords.', 'wp-simple-firewall' );
260
  break;
261
 
262
+ case 'enable_u2f' :
263
+ $sName = __( 'Allow U2F', 'wp-simple-firewall' );
264
+ $sSummary = __( 'Allow Registration Of U2F Devices', 'wp-simple-firewall' );
265
+ $sDescription = [
266
+ __( 'Allow users to register U2F devices to complete their login.', 'wp-simple-firewall' ),
267
+ __( "Currently only U2F keys are supported. Built-in fingerprint scanners aren't supported (yet).", 'wp-simple-firewall' ),
268
+ __( "Beta! This may only be used when at least 1 other 2FA option is enabled on a user account.", 'wp-simple-firewall' ),
269
+ ];
270
+ if ( !Services::Data()->getPhpVersionIsAtLeast( '7.0' ) ) {
271
+ $sDescription[] = sprintf( '%s - %s', __( 'Important', 'wp-simple-firewall' ), __( "Requires PHP 7.0 or later.", 'wp-simple-firewall' ) );
272
+ }
273
+ break;
274
+
275
  case 'enable_yubikey' :
276
+ $sName = __( 'Allow Yubikey OTP', 'wp-simple-firewall' );
277
+ $sSummary = __( 'Allow Yubikey Registration For One Time Passwords', 'wp-simple-firewall' );
278
  $sDescription = __( 'Combined with your Yubikey API details this will form the basis of your Yubikey Authentication', 'wp-simple-firewall' );
279
  break;
280
 
281
  case 'yubikey_app_id' :
282
  $sName = __( 'Yubikey App ID', 'wp-simple-firewall' );
283
  $sSummary = __( 'Your Unique Yubikey App ID', 'wp-simple-firewall' );
284
+ $sDescription = [
285
+ __( 'Combined with your Yubikey API Key this will form the basis of your Yubikey Authentication', 'wp-simple-firewall' ),
286
+ __( 'Please review the info link on how to obtain your own Yubikey App ID and API Key.', 'wp-simple-firewall' )
287
+ ];
288
  break;
289
 
290
  case 'yubikey_api_key' :
src/lib/src/Modules/Plugin/AjaxHandler.php CHANGED
@@ -177,7 +177,7 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
177
  'html' => ( new Shield\Tables\Build\AdminNotes() )
178
  ->setMod( $oMod )
179
  ->setDbHandler( $oMod->getDbHandler_Notes() )
180
- ->buildTable()
181
  ];
182
  }
183
 
@@ -240,12 +240,18 @@ class AjaxHandler extends Shield\Modules\Base\AjaxHandlerShield {
240
  $bNetwork = $bEnabledNetwork ? true : ( $bDisableNetwork ? false : null );
241
 
242
  /** @var Shield\Databases\AdminNotes\Insert $oInserter */
243
- $nCode = ( new Plugin\Lib\ImportExport\Import() )
244
- ->setMod( $this->getMod() )
245
- ->fromSite( $sMasterSiteUrl, $sSecretKey, $bNetwork );
 
 
 
 
 
246
  $bSuccess = $nCode == 0;
247
  $sMessage = $bSuccess ? __( 'Options imported successfully', 'wp-simple-firewall' ) : __( 'Options failed to import', 'wp-simple-firewall' );
248
  }
 
249
  return [
250
  'success' => $bSuccess,
251
  'message' => $sMessage
177
  'html' => ( new Shield\Tables\Build\AdminNotes() )
178
  ->setMod( $oMod )
179
  ->setDbHandler( $oMod->getDbHandler_Notes() )
180
+ ->render()
181
  ];
182
  }
183
 
240
  $bNetwork = $bEnabledNetwork ? true : ( $bDisableNetwork ? false : null );
241
 
242
  /** @var Shield\Databases\AdminNotes\Insert $oInserter */
243
+ try {
244
+ $nCode = ( new Plugin\Lib\ImportExport\Import() )
245
+ ->setMod( $this->getMod() )
246
+ ->fromSite( $sMasterSiteUrl, $sSecretKey, $bNetwork );
247
+ }
248
+ catch ( \Exception $oE ) {
249
+ $nCode = $oE->getCode();
250
+ }
251
  $bSuccess = $nCode == 0;
252
  $sMessage = $bSuccess ? __( 'Options imported successfully', 'wp-simple-firewall' ) : __( 'Options failed to import', 'wp-simple-firewall' );
253
  }
254
+
255
  return [
256
  'success' => $bSuccess,
257
  'message' => $sMessage
src/lib/src/Modules/Plugin/Components/PluginBadge.php CHANGED
@@ -67,6 +67,15 @@ class PluginBadge {
67
  public function render( $bFloating = false ) {
68
  $oCon = $this->getCon();
69
  $sName = $oCon->getHumanName();
 
 
 
 
 
 
 
 
 
70
  $aData = [
71
  'ajax' => [
72
  'plugin_badge_close' => $this->getMod()->getAjaxActionData( 'plugin_badge_close', true ),
@@ -76,7 +85,7 @@ class PluginBadge {
76
  'is_floating' => $bFloating
77
  ],
78
  'hrefs' => [
79
- 'badge' => 'https://shsec.io/wpsecurityfirewall',
80
  'logo' => $oCon->getPluginUrl_Image( 'shield/shield-security-logo-colour-32px.png' ),
81
  ],
82
  'strings' => [
@@ -103,11 +112,11 @@ class PluginBadge {
103
  */
104
  public function setBadgeStateClosed() {
105
  return Services::Response()
106
- ->cookieSet(
107
- $this->getCookieIdBadgeState(),
108
- 'closed',
109
- DAY_IN_SECONDS
110
- );
111
  }
112
 
113
  /**
67
  public function render( $bFloating = false ) {
68
  $oCon = $this->getCon();
69
  $sName = $oCon->getHumanName();
70
+
71
+ $sBadgeUrl = 'https://shsec.io/wpsecurityfirewall';
72
+ $oLicense = $oCon->getModule_License()
73
+ ->getLicenseHandler()
74
+ ->getLicense();
75
+ if ( !empty( $oLicense->aff_ref ) ) {
76
+ $sBadgeUrl = add_query_arg( [ 'ref' => $oLicense->aff_ref ], $sBadgeUrl );
77
+ }
78
+
79
  $aData = [
80
  'ajax' => [
81
  'plugin_badge_close' => $this->getMod()->getAjaxActionData( 'plugin_badge_close', true ),
85
  'is_floating' => $bFloating
86
  ],
87
  'hrefs' => [
88
+ 'badge' => $sBadgeUrl,
89
  'logo' => $oCon->getPluginUrl_Image( 'shield/shield-security-logo-colour-32px.png' ),
90
  ],
91
  'strings' => [
112
  */
113
  public function setBadgeStateClosed() {
114
  return Services::Response()
115
+ ->cookieSet(
116
+ $this->getCookieIdBadgeState(),
117
+ 'closed',
118
+ DAY_IN_SECONDS
119
+ );
120
  }
121
 
122
  /**
src/lib/src/Modules/Plugin/Lib/ImportExport/Export.php CHANGED
@@ -92,19 +92,26 @@ class Export {
92
  die();
93
  }
94
 
95
- public function toFile() {
 
 
 
96
  $sExport = json_encode( $this->getExportData() );
97
- $aData = [
98
  '# Site URL: '.Services::WpGeneral()->getHomeUrl(),
99
  '# Export Date: '.Services::WpGeneral()->getTimeStringForDisplay(),
100
  '# Hash: '.sha1( $sExport ),
101
  $sExport
102
  ];
 
 
 
 
103
  Services::Response()->downloadStringAsFile(
104
  implode( "\n", $aData ),
105
  sprintf( 'shieldexport-%s-%s.json',
106
  Services::Data()->urlStripSchema( Services::WpGeneral()->getHomeUrl() ),
107
- $sFilename = date( 'Ymd_His' )
108
  )
109
  );
110
  }
92
  die();
93
  }
94
 
95
+ /**
96
+ * @return string[]
97
+ */
98
+ public function toStandardArray() {
99
  $sExport = json_encode( $this->getExportData() );
100
+ return [
101
  '# Site URL: '.Services::WpGeneral()->getHomeUrl(),
102
  '# Export Date: '.Services::WpGeneral()->getTimeStringForDisplay(),
103
  '# Hash: '.sha1( $sExport ),
104
  $sExport
105
  ];
106
+ }
107
+
108
+ public function toFile() {
109
+ $aData = $this->toStandardArray();
110
  Services::Response()->downloadStringAsFile(
111
  implode( "\n", $aData ),
112
  sprintf( 'shieldexport-%s-%s.json',
113
  Services::Data()->urlStripSchema( Services::WpGeneral()->getHomeUrl() ),
114
+ date( 'Ymd_His' )
115
  )
116
  );
117
  }
src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php CHANGED
@@ -17,7 +17,7 @@ class Import {
17
  try {
18
  switch ( $sMethod ) {
19
  case 'file':
20
- $this->fromFile();
21
  break;
22
  case 'site':
23
  default:
@@ -31,31 +31,15 @@ class Import {
31
  }
32
 
33
  /**
 
34
  * @throws \Exception
35
  */
36
- public function fromFile() {
37
  if ( !$this->getCon()->isPluginAdmin() ) {
38
  throw new \Exception( __( 'Not currently logged-in as security admin', 'wp-simple-firewall' ) );
39
  }
40
 
41
- if ( Services::Request()->post( 'confirm' ) != 'Y' ) {
42
- throw new \Exception( __( 'Please check the box to confirm your intent to overwrite settings', 'wp-simple-firewall' ) );
43
- }
44
-
45
- $oFs = Services::WpFs();
46
- if ( empty( $_FILES ) || !isset( $_FILES[ 'import_file' ] )
47
- || empty( $_FILES[ 'import_file' ][ 'tmp_name' ] ) ) {
48
- throw new \Exception( __( 'Please select a file to upload', 'wp-simple-firewall' ) );
49
- }
50
- if ( $_FILES[ 'import_file' ][ 'size' ] == 0
51
- || isset( $_FILES[ 'error' ] ) && $_FILES[ 'error' ] != UPLOAD_ERR_OK
52
- || !$oFs->isFile( $_FILES[ 'import_file' ][ 'tmp_name' ] )
53
- || filesize( $_FILES[ 'import_file' ][ 'tmp_name' ] ) === 0
54
- ) {
55
- throw new \Exception( __( 'Uploading of file failed', 'wp-simple-firewall' ) );
56
- }
57
-
58
- $sContent = Services::WpFs()->getFileContent( $_FILES[ 'import_file' ][ 'tmp_name' ] );
59
  if ( empty( $sContent ) ) {
60
  throw new \Exception( __( 'Uploaded file was empty', 'wp-simple-firewall' ) );
61
  }
@@ -74,11 +58,36 @@ class Import {
74
  {//parse the options json
75
  $aData = @json_decode( array_shift( $aParts ), true );
76
  if ( empty( $aData ) || !is_array( $aData ) ) {
77
- throw new \Exception( __( 'Uploaded options data was not of the correct format', 'wp-simple-firewall' ) );
78
  }
79
  }
80
 
81
  $this->processDataImport( $aData, __( 'uploaded file', 'wp-simple-firewall' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  $oFs->deleteFile( $_FILES[ 'import_file' ][ 'tmp_name' ] );
83
  }
84
 
@@ -86,10 +95,10 @@ class Import {
86
  * @param string $sMasterSiteUrl
87
  * @param string $sSecretKey
88
  * @param bool|null $bEnableNetwork
89
- * @param string $sSiteResponse
90
  * @return int
 
91
  */
92
- public function fromSite( $sMasterSiteUrl = '', $sSecretKey = '', $bEnableNetwork = null, &$sSiteResponse = '' ) {
93
  /** @var Plugin\Options $oOpts */
94
  $oOpts = $this->getOptions();
95
  /** @var \ICWP_WPSF_FeatureHandler_Plugin $oMod */
@@ -100,98 +109,99 @@ class Import {
100
  $sMasterSiteUrl = $oOpts->getImportExportMasterImportUrl();
101
  }
102
 
103
- $aParts = parse_url( $sMasterSiteUrl );
104
-
105
  $sOriginalMasterSiteUrl = $oOpts->getImportExportMasterImportUrl();
106
  $bHadMasterSiteUrl = $oOpts->hasImportExportMasterImportUrl();
107
  $bCheckKeyFormat = !$bHadMasterSiteUrl;
108
  $sSecretKey = sanitize_key( $sSecretKey );
109
 
110
- if ( $bCheckKeyFormat && empty( $sSecretKey ) ) {
111
- $nErrorCode = 1;
 
 
 
 
 
112
  }
113
- elseif ( $bCheckKeyFormat && strlen( $sSecretKey ) != 40 ) {
114
- $nErrorCode = 2;
 
 
 
 
 
 
 
 
 
 
115
  }
116
- elseif ( empty( $aParts ) ) {
117
- $nErrorCode = 4;
 
118
  }
119
- elseif ( $oDP->validateSimpleHttpUrl( $sMasterSiteUrl ) === false ) {
120
- $nErrorCode = 4; // a final check
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  }
122
- else {
123
- $bReady = true;
124
- $aEssential = [ 'scheme', 'host' ];
125
- foreach ( $aEssential as $sKey ) {
126
- $bReady = $bReady && !empty( $aParts[ $sKey ] );
 
 
 
127
  }
 
128
 
129
- $sMasterSiteUrl = $oDP->validateSimpleHttpUrl( $sMasterSiteUrl ); // final clean
130
 
131
- if ( !$bReady || !$sMasterSiteUrl ) {
132
- $nErrorCode = 4;
133
  }
134
  else {
135
- $oOpts->setOpt( 'importexport_handshake_expires_at', Services::Request()->ts() + 30 );
136
- $this->getMod()->saveModOptions();
137
-
138
- $aData = [
139
- 'shield_action' => 'importexport_export',
140
- 'secret' => $sSecretKey,
141
- 'url' => Services::WpGeneral()->getHomeUrl()
142
- ];
143
- // Don't send the network setup request if it's the cron.
144
- if ( !is_null( $bEnableNetwork ) && !Services::WpGeneral()->isCron() ) {
145
- $aData[ 'network' ] = $bEnableNetwork ? 'Y' : 'N';
146
- }
147
 
148
- $sFinalUrl = add_query_arg( $aData, $sMasterSiteUrl );
149
- $sResponse = Services::HttpRequest()->getContent( $sFinalUrl );
150
- $aParts = @json_decode( $sResponse, true );
151
 
152
- if ( empty( $aParts ) ) {
153
- $nErrorCode = 5;
154
- }
155
- elseif ( !isset( $aParts[ 'success' ] ) || !$aParts[ 'success' ] ) {
156
-
157
- if ( empty ( $aParts[ 'message' ] ) ) {
158
- $nErrorCode = 6;
159
- }
160
- else {
161
- $nErrorCode = 7;
162
- $sSiteResponse = $aParts[ 'message' ]; // This is crap because we can't use Response objects
163
- }
164
- }
165
- elseif ( empty( $aParts[ 'data' ] ) || !is_array( $aParts[ 'data' ] ) ) {
166
- $nErrorCode = 8;
167
- }
168
- else {
169
- $this->processDataImport( $aParts[ 'data' ], $sMasterSiteUrl );
170
-
171
- // Fix for the overwriting of the Master Site URL with an empty string.
172
- // Only do so if we're not turning it off. i.e on or no-change
173
- if ( is_null( $bEnableNetwork ) ) {
174
- if ( $bHadMasterSiteUrl && !$oOpts->hasImportExportMasterImportUrl() ) {
175
- $oMod->setImportExportMasterImportUrl( $sOriginalMasterSiteUrl );
176
- }
177
- }
178
- elseif ( $bEnableNetwork === true ) {
179
- $oMod->setImportExportMasterImportUrl( $sMasterSiteUrl );
180
- $this->getCon()->fireEvent(
181
- 'master_url_set',
182
- [ 'audit' => [ 'site' => $sMasterSiteUrl ] ]
183
- );
184
- }
185
- elseif ( $bEnableNetwork === false ) {
186
- $oMod->setImportExportMasterImportUrl( '' );
187
- }
188
-
189
- $nErrorCode = 0;
190
- }
191
  }
192
  }
 
 
 
 
 
 
 
 
 
 
193
 
194
- return $nErrorCode;
195
  }
196
 
197
  /**
17
  try {
18
  switch ( $sMethod ) {
19
  case 'file':
20
+ $this->fromFileUpload();
21
  break;
22
  case 'site':
23
  default:
31
  }
32
 
33
  /**
34
+ * @param string $sPath
35
  * @throws \Exception
36
  */
37
+ public function fromFile( $sPath ) {
38
  if ( !$this->getCon()->isPluginAdmin() ) {
39
  throw new \Exception( __( 'Not currently logged-in as security admin', 'wp-simple-firewall' ) );
40
  }
41
 
42
+ $sContent = Services::WpFs()->getFileContent( $sPath );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  if ( empty( $sContent ) ) {
44
  throw new \Exception( __( 'Uploaded file was empty', 'wp-simple-firewall' ) );
45
  }
58
  {//parse the options json
59
  $aData = @json_decode( array_shift( $aParts ), true );
60
  if ( empty( $aData ) || !is_array( $aData ) ) {
61
+ throw new \Exception( __( "Options data in the file wasn't of the correct format.", 'wp-simple-firewall' ) );
62
  }
63
  }
64
 
65
  $this->processDataImport( $aData, __( 'uploaded file', 'wp-simple-firewall' ) );
66
+ }
67
+
68
+ /**
69
+ * @throws \Exception
70
+ */
71
+ public function fromFileUpload() {
72
+ if ( Services::Request()->post( 'confirm' ) != 'Y' ) {
73
+ throw new \Exception( __( 'Please check the box to confirm your intent to overwrite settings', 'wp-simple-firewall' ) );
74
+ }
75
+
76
+ $oFs = Services::WpFs();
77
+ if ( empty( $_FILES ) || !isset( $_FILES[ 'import_file' ] )
78
+ || empty( $_FILES[ 'import_file' ][ 'tmp_name' ] ) ) {
79
+ throw new \Exception( __( 'Please select a file to upload', 'wp-simple-firewall' ) );
80
+ }
81
+ if ( $_FILES[ 'import_file' ][ 'size' ] == 0
82
+ || isset( $_FILES[ 'error' ] ) && $_FILES[ 'error' ] != UPLOAD_ERR_OK
83
+ || !$oFs->isFile( $_FILES[ 'import_file' ][ 'tmp_name' ] )
84
+ || filesize( $_FILES[ 'import_file' ][ 'tmp_name' ] ) === 0
85
+ ) {
86
+ throw new \Exception( __( 'Uploading of file failed', 'wp-simple-firewall' ) );
87
+ }
88
+
89
+ $this->fromFile( $_FILES[ 'import_file' ][ 'tmp_name' ] );
90
+
91
  $oFs->deleteFile( $_FILES[ 'import_file' ][ 'tmp_name' ] );
92
  }
93
 
95
  * @param string $sMasterSiteUrl
96
  * @param string $sSecretKey
97
  * @param bool|null $bEnableNetwork
 
98
  * @return int
99
+ * @throws \Exception
100
  */
101
+ public function fromSite( $sMasterSiteUrl = '', $sSecretKey = '', $bEnableNetwork = null ) {
102
  /** @var Plugin\Options $oOpts */
103
  $oOpts = $this->getOptions();
104
  /** @var \ICWP_WPSF_FeatureHandler_Plugin $oMod */
109
  $sMasterSiteUrl = $oOpts->getImportExportMasterImportUrl();
110
  }
111
 
 
 
112
  $sOriginalMasterSiteUrl = $oOpts->getImportExportMasterImportUrl();
113
  $bHadMasterSiteUrl = $oOpts->hasImportExportMasterImportUrl();
114
  $bCheckKeyFormat = !$bHadMasterSiteUrl;
115
  $sSecretKey = sanitize_key( $sSecretKey );
116
 
117
+ if ( $bCheckKeyFormat ) {
118
+ if ( empty( $sSecretKey ) ) {
119
+ throw new \Exception( 'Empty secret key', 1 );
120
+ }
121
+ if ( strlen( $sSecretKey ) != 40 ) {
122
+ throw new \Exception( "Secret key isn't of the correct format", 2 );
123
+ }
124
  }
125
+
126
+ // Ensure we have entries for 'scheme' and 'host'
127
+ $aUrlParts = wp_parse_url( $sMasterSiteUrl );
128
+ $bHasParts = !empty( $aUrlParts )
129
+ && count(
130
+ array_filter( array_intersect_key(
131
+ $aUrlParts,
132
+ array_flip( [ 'scheme', 'host' ] )
133
+ ) )
134
+ ) === 2;
135
+ if ( !$bHasParts ) {
136
+ throw new \Exception( "Couldn't parse the URL into its parts", 4 );
137
  }
138
+ $sMasterSiteUrl = $oDP->validateSimpleHttpUrl( $sMasterSiteUrl ); // final clean
139
+ if ( empty( $sMasterSiteUrl ) ) {
140
+ throw new \Exception( "Couldn't validate the URL.", 4 );
141
  }
142
+
143
+ // Begin the handshake process.
144
+ $oOpts->setOpt(
145
+ 'importexport_handshake_expires_at',
146
+ Services::Request()->ts() + 30
147
+ );
148
+ $this->getMod()->saveModOptions();
149
+
150
+ $aData = [
151
+ 'shield_action' => 'importexport_export',
152
+ 'secret' => $sSecretKey,
153
+ 'url' => Services::WpGeneral()->getHomeUrl()
154
+ ];
155
+ // Don't send the network setup request if it's the cron.
156
+ if ( !is_null( $bEnableNetwork ) && !Services::WpGeneral()->isCron() ) {
157
+ $aData[ 'network' ] = $bEnableNetwork ? 'Y' : 'N';
158
  }
159
+
160
+ { // Make the request
161
+ $sFinalUrl = add_query_arg( $aData, $sMasterSiteUrl );
162
+ $sResponse = Services::HttpRequest()->getContent( $sFinalUrl );
163
+ $aResponse = @json_decode( $sResponse, true );
164
+
165
+ if ( empty( $aResponse ) ) {
166
+ throw new \Exception( "Request failed as we couldn't parse the response.", 5 );
167
  }
168
+ }
169
 
170
+ if ( empty( $aResponse[ 'success' ] ) ) {
171
 
172
+ if ( empty ( $aResponse[ 'message' ] ) ) {
173
+ throw new \Exception( "Request failed with no error message from the source site.", 6 );
174
  }
175
  else {
176
+ throw new \Exception( "Request failed with error message from the source site: ".$aResponse[ 'message' ], 7 );
177
+ }
178
+ }
 
 
 
 
 
 
 
 
 
179
 
180
+ if ( empty( $aResponse[ 'data' ] ) || !is_array( $aResponse[ 'data' ] ) ) {
181
+ throw new \Exception( "Response data was empty", 8 );
182
+ }
183
 
184
+ $this->processDataImport( $aResponse[ 'data' ], $sMasterSiteUrl );
185
+
186
+ // Fix for the overwriting of the Master Site URL with an empty string.
187
+ // Only do so if we're not turning it off. i.e on or no-change
188
+ if ( is_null( $bEnableNetwork ) ) {
189
+ if ( $bHadMasterSiteUrl && !$oOpts->hasImportExportMasterImportUrl() ) {
190
+ $oMod->setImportExportMasterImportUrl( $sOriginalMasterSiteUrl );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  }
192
  }
193
+ elseif ( $bEnableNetwork === true ) {
194
+ $oMod->setImportExportMasterImportUrl( $sMasterSiteUrl );
195
+ $this->getCon()->fireEvent(
196
+ 'master_url_set',
197
+ [ 'audit' => [ 'site' => $sMasterSiteUrl ] ]
198
+ );
199
+ }
200
+ elseif ( $bEnableNetwork === false ) {
201
+ $oMod->setImportExportMasterImportUrl( '' );
202
+ }
203
 
204
+ return 0;
205
  }
206
 
207
  /**
src/lib/src/Modules/Plugin/Lib/Ops/ResetPlugin.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Lib\Ops;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\PluginControllerConsumer;
6
+
7
+ /**
8
+ * Class ResetPlugin
9
+ * @package FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Lib\Ops
10
+ */
11
+ class ResetPlugin {
12
+
13
+ use PluginControllerConsumer;
14
+
15
+ public function run() {
16
+ foreach ( $this->getCon()->modules as $oMod ) {
17
+ $oMod->getOptions()
18
+ ->setOptionsValues( [] )
19
+ ->deleteStorage();
20
+ $oMod->saveModOptions();
21
+ }
22
+ }
23
+ }
src/lib/src/Modules/Plugin/Options.php CHANGED
@@ -66,7 +66,7 @@ class Options extends Base\ShieldOptions {
66
  */
67
  public function getShieldNetApiData() {
68
  $aD = $this->getOpt( 'snapi_data', [] );
69
- return is_array( $aD ) ? $aD:[];
70
  }
71
 
72
  /**
@@ -105,6 +105,13 @@ class Options extends Base\ShieldOptions {
105
  return $this->isOpt( 'enable_tracking', 'Y' );
106
  }
107
 
 
 
 
 
 
 
 
108
  /**
109
  * @return bool
110
  */
66
  */
67
  public function getShieldNetApiData() {
68
  $aD = $this->getOpt( 'snapi_data', [] );
69
+ return is_array( $aD ) ? $aD : [];
70
  }
71
 
72
  /**
105
  return $this->isOpt( 'enable_tracking', 'Y' );
106
  }
107
 
108
+ /**
109
+ * @return bool
110
+ */
111
+ public function isEnabledWpcli() {
112
+ return $this->isPremium() && $this->isOpt( 'enable_wpcli', 'Y' );
113
+ }
114
+
115
  /**
116
  * @return bool
117
  */
src/lib/src/Modules/Plugin/Strings.php CHANGED
@@ -179,7 +179,14 @@ class Strings extends Base\Strings {
179
  case 'block_send_email_address' :
180
  $sName = __( 'Report Email', 'wp-simple-firewall' );
181
  $sSummary = __( 'Where to send email reports', 'wp-simple-firewall' );
182
- $sDescription = sprintf( __( 'If this is empty, it will default to the blog admin email address: %s', 'wp-simple-firewall' ), '<br /><strong>'.get_bloginfo( 'admin_email' ).'</strong>' );
 
 
 
 
 
 
 
183
  break;
184
 
185
  case 'enable_upgrade_admin_notice' :
@@ -191,9 +198,18 @@ class Strings extends Base\Strings {
191
  case 'display_plugin_badge' :
192
  $sName = __( 'Show Plugin Badge', 'wp-simple-firewall' );
193
  $sSummary = __( 'Display Plugin Badge On Your Site', 'wp-simple-firewall' );
194
- $sDescription = __( 'Enabling this option helps support the plugin by spreading the word about it on your website.', 'wp-simple-firewall' )
195
- .' '.__( 'The plugin badge also lets visitors know your are taking your website security seriously.', 'wp-simple-firewall' )
196
- .sprintf( '<br /><strong><a href="%s" target="_blank">%s</a></strong>', 'https://shsec.io/wpsf20', __( 'Read this carefully before enabling this option.', 'wp-simple-firewall' ) );
 
 
 
 
 
 
 
 
 
197
  break;
198
 
199
  case 'delete_on_deactivate' :
179
  case 'block_send_email_address' :
180
  $sName = __( 'Report Email', 'wp-simple-firewall' );
181
  $sSummary = __( 'Where to send email reports', 'wp-simple-firewall' );
182
+ $sDescription = [
183
+ __( "This lets you customise the default email address for all emails sent by the plugin.", 'wp-simple-firewall' ),
184
+ sprintf( __( "The plugin defaults to the site administration email address, which is: %s", 'wp-simple-firewall' ),
185
+ sprintf( '<a href="%s" target="_blank" title="%s"><code>'.get_bloginfo( 'admin_email' ).'</code></a>',
186
+ Services::WpGeneral()->getAdminUrl( 'options-general.php' ),
187
+ __( 'Review site settings', 'wp-simple-firewall' ) )
188
+ )
189
+ ];
190
  break;
191
 
192
  case 'enable_upgrade_admin_notice' :
198
  case 'display_plugin_badge' :
199
  $sName = __( 'Show Plugin Badge', 'wp-simple-firewall' );
200
  $sSummary = __( 'Display Plugin Badge On Your Site', 'wp-simple-firewall' );
201
+ $sDescription = [
202
+ __( 'Enabling this option helps support the plugin by spreading the word about it on your website.', 'wp-simple-firewall' )
203
+ .' '.__( 'The plugin badge also lets visitors know your are taking your website security seriously.', 'wp-simple-firewall' ),
204
+ sprintf( '<strong><a href="%s" target="_blank">%s</a></strong>', 'https://shsec.io/wpsf20', __( 'Read this carefully before enabling this option.', 'wp-simple-firewall' ) ),
205
+ __( "This also acts as an affiliate link if you're running ShieldPRO so you can earn rewards for each referral.", 'wp-simple-firewall' ),
206
+ ];
207
+ break;
208
+
209
+ case 'enable_wpcli' :
210
+ $sName = __( 'Allow WP-CLI', 'wp-simple-firewall' );
211
+ $sSummary = __( 'Allow Access And Control Of This Plugin Via WP-CLI', 'wp-simple-firewall' );
212
+ $sDescription = __( "Turn off this option to disable this plugin's WP-CLI integration.", 'wp-simple-firewall' );
213
  break;
214
 
215
  case 'delete_on_deactivate' :
src/lib/src/Modules/Plugin/WpCli.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin;
7
+
8
+ class WpCli extends Base\WpCli {
9
+
10
+ /**
11
+ * @inheritDoc
12
+ */
13
+ protected function getCmdHandlers() {
14
+ return [
15
+ new Plugin\WpCli\ForceOff(),
16
+ new Plugin\WpCli\Reset(),
17
+ new Plugin\WpCli\Export(),
18
+ new Plugin\WpCli\Import(),
19
+ ];
20
+ }
21
+ }
src/lib/src/Modules/Plugin/WpCli/Export.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\WpCli;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Lib;
7
+ use FernleafSystems\Wordpress\Services\Services;
8
+ use WP_CLI;
9
+
10
+ class Export extends Base\WpCli\BaseWpCliCmd {
11
+
12
+ /**
13
+ * @throws \Exception
14
+ */
15
+ protected function addCmds() {
16
+ WP_CLI::add_command(
17
+ $this->buildCmd( [ 'export' ] ),
18
+ [ $this, 'cmdExport' ], $this->mergeCommonCmdArgs( [
19
+ 'shortdesc' => 'Export configuration to file.',
20
+ 'synopsis' => [
21
+ [
22
+ 'type' => 'assoc',
23
+ 'name' => 'file',
24
+ 'optional' => false,
25
+ 'description' => 'The absolute or relative (to ABSPA