LearnPress – WordPress LMS Plugin - Version 2.1.8.1

Version Description

= 0.9.19 = In this version, we have changed a little bit about LearnPress Plugin directory structure and moved all add-ons to become independence plugins. If you face any problems relate to add-ons, please completely remove old version and re-install LearnPress. It does not affect your current data. Thank you.

Download this release

Release Info

Developer tunnhn
Plugin Icon 128x128 LearnPress – WordPress LMS Plugin
Version 2.1.8.1
Comparing to
See all releases

Code changes from version 2.1.7.4 to 2.1.8.1

Files changed (41) hide show
  1. assets/css/admin/admin.css +4 -1
  2. assets/css/admin/meta-box-course.css +0 -2
  3. assets/css/frontend/form.css +5 -0
  4. assets/css/learnpress.css +4 -3
  5. assets/js/frontend/profile.js +1 -1
  6. assets/js/frontend/single-course.js +2 -1
  7. assets/less/admin/admin.less +8 -6
  8. assets/less/learnpress.less +1973 -1970
  9. inc/admin/class-lp-admin-ajax.php +133 -156
  10. inc/admin/views/question/html-base-option.php +0 -137
  11. inc/class-lp-page-controller.php +4 -1
  12. inc/class-lp-schedules.php +26 -10
  13. inc/class-lp-shortcodes.php +50 -43
  14. inc/course/abstract-lp-course.php +172 -105
  15. inc/custom-post-types/abstract.php +1 -4
  16. inc/custom-post-types/course.php +15 -16
  17. inc/custom-post-types/order.php +67 -47
  18. inc/lp-constants.php +1 -1
  19. inc/lp-core-functions.php +2 -1
  20. inc/lp-init.php +117 -100
  21. inc/lp-template-functions.php +10 -6
  22. inc/lp-template-hooks.php +2 -2
  23. inc/user/abstract-lp-user.php +124 -75
  24. inc/user/class-lp-user-factory.php +1 -1
  25. inc/user/lp-user-functions.php +13 -11
  26. inc/widgets/course-filters/course-filters.php +1 -1
  27. inc/widgets/featured-courses/featured-courses.php +1 -1
  28. inc/widgets/popular-courses/popular-courses.php +1 -1
  29. inc/widgets/recent-courses/recent-courses.php +1 -1
  30. languages/learnpress.pot +716 -340
  31. learnpress.php +45 -22
  32. readme.txt +14 -9
  33. templates/checkout/form-logged-in.php +5 -4
  34. templates/global/become-teacher-form.php +18 -16
  35. templates/profile/tabs/orders.php +22 -20
  36. templates/single-course/buttons.php +97 -42
  37. templates/single-course/content-item-lp_lesson.php +7 -1
  38. templates/single-course/content-item-only.php +20 -16
  39. templates/single-course/progress.php +1 -1
  40. templates/single-course/section/item-lesson.php +11 -9
  41. templates/single-course/section/title.php +12 -9
assets/css/admin/admin.css CHANGED
@@ -1522,6 +1522,9 @@ body.post-type-lp_question #question_answer_ .inside {
1522
  .meta_box_course_lesson_quiz li select {
1523
  min-width: 250px;
1524
  }
 
 
 
1525
  .rwmb-meta-box label {
1526
  color: #222;
1527
  font-weight: bold;
@@ -2027,4 +2030,4 @@ input.regular-text[id^="learn-press-emails"] {
2027
  }
2028
  }
2029
 
2030
- /*# sourceMappingURL=data:application/json;charset=utf8;base64,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QUE7O0VBRUo7SUFDSSxVQUFBOztFQUVKO0lBQ0ksVUFBQTs7O0FBSVI7RUFDSTtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOztFQUVKO0lBQ0ksVUFBQTs7O0FBSVI7RUFDSTtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOztFQUVKO0lBQ0ksVUFBQTs7O0FBSVI7RUFDSTtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOztFQUVKO0lBQ0ksVUFBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBEZWZpbmUgYWxsIHN0eWxlcyBmb3IgYWRtaW4gc2lkZVxyXG4gKlxyXG4gKiBAYXV0aG9yIFRoaW1QcmVzc1xyXG4gKiBAdmVyc2lvbiAxLjBcclxuICovXHJcbi8vIGFkbWluIHZhcmlhYmxlc1xyXG5AcHJpbWFyeS1pY29uLWNvbG9yOiAjNjY2NjY2O1xyXG5AcHJpbWFyeS1pY29uLWhvdmVyLWNvbG9yOiAjMDBhMGQyO1xyXG5cclxuaW5wdXQ6Zm9jdXM6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xyXG4gICAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbmlucHV0OmZvY3VzOjotbW96LXBsYWNlaG9sZGVyIHtcclxuICAgIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG59XHJcblxyXG5pbnB1dDpmb2N1czotbW96LXBsYWNlaG9sZGVyIHtcclxuICAgIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ucndtYi1maWVsZCB7XHJcbiAgICBtYXJnaW46IDIwcHggMCAyMHB4IDA7XHJcbiAgICAucndtYi1pbnB1dCB7XHJcbiAgICAgICAgLnJ3bWItbGFiZWwge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAuZGVzY3JpcHRpb24ge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICAgICAgICAgICYub3B0aW9uLWRlc2Mge1xyXG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogOHB4IDAgMTBweCAyNHB4O1xyXG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyO1xyXG4gICAgICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ubHAtbmF2LXRhYi13cmFwcGVyIHtcclxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogOXB4IDE1cHggMCAwO1xyXG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1xdWljay1hZGQtcGFnZS1pbmxpbmUge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtcXVpY2stYWRkLXBhZ2UtaW5saW5lID4gKiB7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3MtYWRtaW4tc2V0dGluZ3Mge1xyXG4gICAgI2xlYXJuX3ByZXNzX2VtYWlsX2Zvcm1hdHMge1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XHJcbiAgICB9XHJcbiAgICAubGVhcm4tcHJlc3MtZW1haWwtdmFyaWFibGVzIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMDtcclxuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICAgICAgbGkge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwODViYTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5uYXYtdGFiLXdyYXBwZXIge1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XHJcbiAgICB9XHJcbiAgICAuc3Vic3Vic3ViIHtcclxuICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICB3aWR0aDogMjQwcHg7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIHotaW5kZXg6IDEwO1xyXG4gICAgICAgIG1hcmdpbjogMCAtMjYwcHggMCAyMHB4O1xyXG4gICAgICAgIHBhZGRpbmctdG9wOiAxMXB4O1xyXG4gICAgICAgIGxpIHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIGEge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5sZWFybi1wcmVzcy1zZXR0aW5ncy13cmFwIHtcclxuICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICBwYWRkaW5nOiAxcHggMCAxNXB4IDMwMHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgei1pbmRleDogMDtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgICAgIGlucHV0W25hbWU9XCJsZWFybl9wcmVzc19hdXRvX3JlZGlyZWN0X21lc3NhZ2VcIl0ge1xyXG4gICAgICAgICAgICB3aWR0aDogODAlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgYm90dG9tOiAwO1xyXG4gICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNEREQ7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMzBweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICYucmVhZHkge1xyXG4gICAgICAgICAgICBvcGFjaXR5OiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbGVhcm4tcHJlc3MtcmVzZXQtc2V0dGluZ3Mge1xyXG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgJi5uby1zdWJ0YWJzIHtcclxuICAgICAgICAubGVhcm4tcHJlc3Mtc2V0dGluZ3Mtd3JhcCB7XHJcbiAgICAgICAgICAgIGZsb2F0OiBub25lO1xyXG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcclxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAyNXB4O1xyXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyNXB4O1xyXG5cclxuICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAuc3Vic3Vic3ViIHtcclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xyXG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG4gICAgbGFiZWwge1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgfVxyXG4gICAgLyppbnB1dFtuYW1lPVwibGVhcm5fcHJlc3Nfc2luZ2xlX2NvdXJzZV9pbWFnZV9zaXplW3dpZHRoXVwiXSxcclxuICAgIGlucHV0W25hbWU9XCJsZWFybl9wcmVzc19zaW5nbGVfY291cnNlX2ltYWdlX3NpemVbaGVpZ2h0XVwiXSxcclxuICAgIGlucHV0W25hbWU9XCJsZWFybl9wcmVzc19jb3Vyc2VfdGh1bWJuYWlsX2ltYWdlX3NpemVbd2lkdGhdXCJdLFxyXG4gICAgaW5wdXRbbmFtZT1cImxlYXJuX3ByZXNzX2NvdXJzZV90aHVtYm5haWxfaW1hZ2Vfc2l6ZVtoZWlnaHRdXCJdIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAtNHB4O1xyXG4gICAgfVxyXG4gICAgaW5wdXRbbmFtZT1cImxlYXJuX3ByZXNzX3NpbmdsZV9jb3Vyc2VfaW1hZ2Vfc2l6ZVtjcm9wXVwiXSxcclxuICAgIGlucHV0W25hbWU9XCJsZWFybl9wcmVzc19jb3Vyc2VfdGh1bWJuYWlsX2ltYWdlX3NpemVbY3JvcF1cIl0ge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDNweDtcclxuICAgIH0qL1xyXG5cclxuICAgIGlucHV0W25hbWU9XCJsZWFybl9wcmVzc19jb3Vyc2VfYmFzZVwiXSB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogM3B4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogM3B4O1xyXG4gICAgfVxyXG4gICAgLmxwLWdyb3VwLXRpdGxlIHtcclxuICAgICAgICBwYWRkaW5nOiAwIDAgMTBweDtcclxuICAgICAgICBib3JkZXItYm90dG9tOiAzcHggc29saWQgIzU2M2Q3YztcclxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgfVxyXG4gICAgaW5wdXRbdHlwZT1cInRleHRcIl0sXHJcbiAgICBpbnB1dFt0eXBlPVwiZW1haWxcIl0sXHJcbiAgICBpbnB1dFt0eXBlPVwibnVtYmVyXCJdLFxyXG4gICAgaW5wdXRbdHlwZT1cInRlbFwiXSxcclxuICAgIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSxcclxuICAgIHNlbGVjdCB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgIH1cclxuICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuICAgIC5scC1zZXR0aW5nLWZpZWxkIHtcclxuICAgICAgICBzcGFuIHtcclxuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5scC1zaWduLXRpbWVzIHtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxOXB4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxlYXJucHJlc3NfcGFnZV9sZWFybi1wcmVzcy1zZXR0aW5ncyB7XHJcbiAgICAuc2VsZWN0Mi1yZXN1bHQge1xyXG4gICAgICAgIC5zZWxlY3QyLXJlc3VsdC1sYWJlbCB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMyMzI4MmQ7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMjBweDtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgICAgICAgICAgbGVmdDogOHB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI0ZGRjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAmLmxldmVsLTEge1xyXG4gICAgICAgICAgICAuc2VsZWN0Mi1yZXN1bHQtbGFiZWwge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAzNXB4O1xyXG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICYubGV2ZWwtMiB7XHJcbiAgICAgICAgICAgIC5zZWxlY3QyLXJlc3VsdC1sYWJlbCB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7XHJcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMzVweDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAmLmxldmVsLTMge1xyXG4gICAgICAgICAgICAuc2VsZWN0Mi1yZXN1bHQtbGFiZWwge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA4NXB4O1xyXG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDYwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qIG1lc3NhZ2UgYm94ICovXHJcbiNsZWFybi1wcmVzcy1tZXNzYWdlLWJveC1ibG9jayB7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xyXG4gICAgei1pbmRleDogOTk5OTk7XHJcbiAgICBvcGFjaXR5OiAwLjg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1tZXNzYWdlLWJveC13aW5kb3cge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgei1pbmRleDogMTAwMDAwO1xyXG4gICAgY29sb3I6ICNGRkY7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbiNtZXNzYWdlLWJveC13cmFwIHtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgLyogdGV4dC1hbGlnbjogY2VudGVyOyAqL1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgIG1heC13aWR0aDogNzAlO1xyXG59XHJcblxyXG4ubWVzc2FnZS1ib3gtdGl0bGUge1xyXG4gICAgY29sb3I6ICNGRkY7XHJcbiAgICBtYXJnaW46IDAgMCA0MHB4IDA7XHJcbiAgICBmb250LXNpemU6IDM0cHg7XHJcbn1cclxuXHJcbi5tZXNzYWdlLWJveC1jb250ZW50IHtcclxuICAgIGZvbnQtc2l6ZTogMTZweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XHJcbn1cclxuXHJcbi5tZXNzYWdlLWJveC1hbmltYXRpb24ge1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vLi4vaW1hZ2VzL2FuaW1hdGlvbi5naWZcIik7XHJcbiAgICB3aWR0aDogMjIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICBtYXJnaW46IDIwcHggMCAwO1xyXG59XHJcblxyXG4ubWVzc2FnZS1ib3gtYnV0dG9ucyB7XHJcbiAgICBtYXJnaW46IDIwcHggMCAwO1xyXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM5MjkyOTI7XHJcbiAgICBwYWRkaW5nLXRvcDogMjBweDtcclxufVxyXG5cclxuLm1lc3NhZ2UtYm94LWJ1dHRvbiB7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHggIWltcG9ydGFudDtcclxufVxyXG5cclxuLnBvc3QtdHlwZS1scF9sZXNzb24gLmNvbHVtbi1mb3JtYXQgLmxwLWxhYmVsIHtcclxuICAgIGZvbnQtc2l6ZTogMTAwJTtcclxufVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLmhpZGUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmhhbmRsZS5kYXNoaWNvbnMge1xyXG4gICAgY3Vyc29yOiBtb3ZlO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG59XHJcblxyXG4ubWV0YV9ib3hfcmVtb3ZlIC5kYXNoaWNvbnMge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBpbml0aWFsO1xyXG59XHJcblxyXG4ubWV0YV9ib3hfY291cnNlX2xlc3Nvbl9xdWl6IGxpIGlucHV0LFxyXG4ubWV0YV9ib3hfY291cnNlX2xlc3Nvbl9xdWl6IGxpIHNlbGVjdCB7XHJcbiAgICBtaW4td2lkdGg6IDI1MHB4O1xyXG59XHJcblxyXG4uZGFzaGVkLXBsYWNlaG9sZGVyIHtcclxuICAgIGJvcmRlcjogMnB4IGRhc2hlZCAjOTk5O1xyXG4gICAgcGFkZGluZzogMTBweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLW1lc3NhZ2Uge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgYmFja2dyb3VuZDogI0ZGRjtcclxuICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzAwQTBEMjtcclxuICAgIHBhZGRpbmc6IDEwcHggMTBweCAwcHggMTBweDtcclxuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgY29sb3I6ICM3Nzc7XHJcbiAgICBidXR0b24ge1xyXG4gICAgICAgIGZsb2F0OiByaWdodDtcclxuICAgIH1cclxuICAgIHAge1xyXG4gICAgICAgIG1hcmdpbjogMCAwIDEwcHg7XHJcbiAgICB9XHJcbiAgICAmOmFmdGVyIHtcclxuICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuICAgICYubm90aWNlIHtcclxuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogI2IzZDIwYTtcclxuICAgIH1cclxuICAgICYubHAtZXJyb3IsXHJcbiAgICAmLmVycm9yIHtcclxuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogI2I4MWMyMztcclxuICAgIH1cclxuICAgIHVsIHtcclxuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAubGVhcm4tcHJlc3MtYWRtaW4tbm90aWNlLWRpc21pc3Mge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAxcHggMXB4ICNGMUYxRjE7XHJcbiAgICAgICAgd2lkdGg6IDIwcHg7XHJcbiAgICAgICAgaGVpZ2h0OiAyMHB4O1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgcmlnaHQ6IDEwcHg7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogLTEwcHg7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGYzMzUnO1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiogQ291cnNlIE1ldGFib3hcclxuKi9cclxubGkucXVpeiwgbGkubGVzc29uLCBsaS5xdWlja19sZXNzb24sIGxpLnF1aWNrX3F1aXoge1xyXG4gICAgbWFyZ2luLWxlZnQ6IDMwcHg7XHJcbn1cclxuXHJcbi53cC1jb3JlLXVpIC5tZXRhX2JveF9hZGRfc2VjdGlvbixcclxuLndwLWNvcmUtdWkgLm1ldGFfYm94X2FkZF9sZXNzb24sXHJcbi53cC1jb3JlLXVpIC5tZXRhX2JveF9hZGRfcXVpeixcclxuLndwLWNvcmUtdWkgLm1ldGFfYm94X3F1aWNrX2FkZF9sZXNzb24sXHJcbi53cC1jb3JlLXVpIC5tZXRhX2JveF9xdWlja19hZGRfcXVpeiB7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XHJcbn1cclxuXHJcbi5jb2x1bW4tdGF4b25vbXktY291cnNlX2NhdGVnb3J5IHtcclxuICAgIHdpZHRoOiAxNSU7XHJcbn1cclxuXHJcbi50b29scy1idXR0b24ge1xyXG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbn1cclxuXHJcbi8qXHJcbiNscHItYmxvY2sge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB6LWluZGV4OiAyMDA7XHJcbiAgICBvcGFjaXR5OiAwLjI7XHJcbn1cclxuXHJcbi5scHItcXVpY2stYWRkLWZvcm0ge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcclxuICAgIHBhZGRpbmc6IDVweDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDIxMDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbn1cclxuXHJcbi5scHItcXVpY2stYWRkLWZvcm0gaW5wdXQge1xyXG4gICAgZm9udC1zaXplOiAxNXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIHdpZHRoOiAzNTBweDtcclxufVxyXG5cclxuLmxwci1xdWljay1hZGQtZm9ybSBpbnB1dCxcclxuLmxwci1xdWljay1hZGQtZm9ybSBzZWxlY3Qge1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuLmxwci1xdWljay1hZGQtZm9ybSAubHByLWFqYXhsb2FkIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3NwaW5uZXIuZ2lmKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgd2lkdGg6IDMwcHg7XHJcbiAgICBjb2xvcjogI0ZGRjtcclxuICAgIG1hcmdpbi10b3A6IDZweDtcclxufVxyXG5cclxuLmxwci1xdWljay1hZGQtZm9ybS53b3JraW5nIC5scHItYWpheGxvYWQge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4ubHByLXF1aWNrLWFkZC1mb3JtLndvcmtpbmcgYnV0dG9uIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi5wb3N0LXR5cGUtbHByX3F1ZXN0aW9uIC5scHItcXVlc3Rpb24tb3B0aW9uLWxhYmVsIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbiNscHItcXVlc3Rpb24tb3B0aW9ucy13cmFwIHtcclxuICAgIG1hcmdpbi10b3A6IDhweDtcclxufVxyXG5cclxuLmxwci1xdWVzdGlvbiB0ci5scHItZGlzYWJsZWQgLmRhc2hpY29ucy10cmFzaCxcclxuLmxwci1xdWVzdGlvbiB0ci5scHItZGlzYWJsZWQgLmRhc2hpY29ucy1zb3J0IHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn0qL1xyXG5cclxuLypcclxuKiBBZGQgb24gcGFnZVxyXG4qL1xyXG4ubGVhcm5wcmVzcy1hZHZlcnRpcy1hZG1pbiB7XHJcblxyXG4gICAgbWFyZ2luLWxlZnQ6IDE2MHB4O1xyXG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgICA+IC5pdGVtIHtcclxuICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG4gICAgPiAuaXRlbTpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB9XHJcblxyXG4gICAgLmxlYXJucHJlc3Mtd3JhcC1pdGVtcyB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDFzLCBvcGFjaXR5IDFzO1xyXG4gICAgICAgIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMXMsIG9wYWNpdHkgMXM7XHJcbiAgICAgICAgcGFkZGluZzogMjBweDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcclxuICAgIH1cclxuICAgIC50aGVtZS10aHVtYm5haWwge1xyXG4gICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgIHdpZHRoOiAzNSU7XHJcbiAgICB9XHJcbiAgICAudGhlbWUtZGV0YWlsIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMzUlO1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogMjBweDtcclxuICAgIH1cclxuICAgIC5sZWFybnByZXNzLWl0ZW0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xMDAlO1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDAuNXMgbGluZWFyLCBvcGFjaXR5IDAuNXMgbGluZWFyO1xyXG4gICAgICAgIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMC41cyBsaW5lYXIsIG9wYWNpdHkgMC41cyBsaW5lYXI7XHJcblxyXG4gICAgfVxyXG4gICAgaW1nIHtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAubGVhcm5wcmVzcy1hY3RpdmUge1xyXG4gICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuXHJcbiAgICAubGVhcm5wcmVzcy1jb250cm9scyB7XHJcblxyXG4gICAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIGJvdHRvbTogMzBweDtcclxuICAgICAgICByaWdodDogMDtcclxuICAgICAgICBoZWlnaHQ6IDUwcHg7XHJcbiAgICAgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcblxyXG4gICAgICAgIC5wcmV2LWl0ZW0sXHJcbiAgICAgICAgLm5leHQtaXRlbSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICBmb250LWZhbWlseTogJ2Rhc2hpY29ucyc7XHJcbiAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4O1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMDAwO1xyXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5wcmV2LWl0ZW0ge1xyXG4gICAgICAgICAgICByaWdodDogOTVweDtcclxuICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYzNDFcIjtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5uZXh0LWl0ZW0ge1xyXG4gICAgICAgICAgICByaWdodDogNDVweDtcclxuXHJcbiAgICAgICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMzQ1XCI7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTIwMHB4KSB7XHJcbiAgICAgICAgLnRoZW1lLXRodW1ibmFpbCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA1MCU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudGhlbWUtZGV0YWlsIHtcclxuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDUwJTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5NjBweCkge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAzNnB4O1xyXG5cclxuICAgICAgICAudGhlbWUtdGh1bWJuYWlsIHtcclxuICAgICAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRoZW1lLWRldGFpbCB7XHJcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc4MnB4KSB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5scHItYWRkLW9ucy13cmFwcGVyIC5hZGQtb24taW5mbyB7XHJcbiAgICB3aWR0aDogNjUlO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4ubHByLWFkZC1vbnMtd3JhcHBlciAuYWRkLW9uLWFjdGlvbiB7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcbn1cclxuXHJcbi5scHItYWRkLW9ucy13cmFwcGVyIC5hZGQtb24tYWN0aW9uIGEge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgcGFkZGluZzogMjBweDtcclxuICAgIGhlaWdodDogODBweDtcclxuICAgIHdpZHRoOiAxMDBweDtcclxuICAgIGJhY2tncm91bmQ6ICNFQkVCRUI7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDEwMHB4O1xyXG59XHJcblxyXG4ubHByLWFkZC1vbnMtd3JhcHBlciAuYWRkLW9uLWFjdGlvbiAuYWRkLW9uLWVuYWJsZWQge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luOiA0MHB4O1xyXG59XHJcblxyXG4ubHByLWFkZC1vbnMtd3JhcHBlciAuYWRkLW9uLWFjdGlvbiAuYWRkLW9uLWRpc2FibGVkIHtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG1hcmdpbjogNDBweDtcclxufVxyXG5cclxuLmxwci1hZGQtb25zLXdyYXBwZXIgLmFkZC1vbi1hY3Rpb24gYTpob3ZlciB7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtdGV4dC1kaXNhYmxlKTtcclxufVxyXG5cclxuLmxwLXNlYXJjaC1hZGRvbiB7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICB3aWR0aDogMjgwcHg7XHJcbiAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICBmb250LXdlaWdodDogMzAwO1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcclxuICAgIHBhZGRpbmc6IDNweCA1cHg7XHJcbiAgICBoZWlnaHQ6IDMycHg7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIHtcclxuICAgIG1hcmdpbjogMjBweCAwIDA7XHJcblxyXG4gICAgLmxwLWFkZG9uLWhpZGRlbiB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG4gICAgLmxwLWFjdGl2ZTpudGgtb2YtdHlwZSgybisxKSB7XHJcbiAgICAgICAgY2xlYXI6IG5vbmU7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XHJcbiAgICB9XHJcbiAgICAubHAtYWN0aXZlOm50aC1vZi10eXBlKDJuKSB7XHJcbiAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgJi5sZWFybnByZXNzLXByZW1pdW0tcGx1Z2luIHtcclxuXHJcbiAgICAgICAgLmNvbHVtbi1kZXNjcmlwdGlvbiB7XHJcblxyXG4gICAgICAgICAgICBwIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcclxuICAgICAgICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcclxuICAgICAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiA0O1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDYuNGVtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnM6YWZ0ZXIge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBjbGVhcjogYm90aDtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIHtcclxuICAgIC8qZmxvYXQ6IGxlZnQ7Ki9cclxuICAgIC8qd2lkdGg6IDI1JTsqL1xyXG4gICAgLypwb3NpdGlvbjogcmVsYXRpdmU7Ki9cclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLWlubmVyIHtcclxuICAgIG1hcmdpbjogMCAyMHB4IDQwcHggMjBweDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLXRodW1ibmFpbCB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFM0UzRTM7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zID4gbGkgLmFkZC1vbi10aHVtYm5haWwgaW1nIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLXRodW1ibmFpbCAuYWRkLW9uLW92ZXJsYXkge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4yNXM7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQURFNkZGO1xyXG4gICAgb3BhY2l0eTogMDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLXRodW1ibmFpbCAuYWRkLW9uLWRlc2NyaXB0aW9uIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGxlZnQ6IDIwcHg7XHJcbiAgICByaWdodDogMjBweDtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMjVzO1xyXG4gICAgY29sb3I6ICM0NDQ7XHJcbiAgICBvcGFjaXR5OiAwO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpOmhvdmVyIC5hZGQtb24tb3ZlcmxheSB7XHJcbiAgICBvcGFjaXR5OiAwLjM7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zID4gbGk6aG92ZXIgLmFkZC1vbi1kZXNjcmlwdGlvbiB7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5hZGQtb24taW5mbyB7XHJcbiAgICBtaW4taGVpZ2h0OiA4MHB4O1xyXG4gICAgcGFkZGluZzogMjBweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7XHJcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0ZGRjtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLWluZm8gPiBoMyB7XHJcbiAgICBtYXJnaW4tdG9wOiAwO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5hZGQtb24tYWN0aW9ucyB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBib3R0b206IDQzcHg7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zID4gbGkgLmFkZC1vbi1hY3Rpb25zIC5hZGQtb24tc3RhdGUge1xyXG4gICAgZm9udC1zaXplOiAzNnB4O1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICBtYXJnaW4tdG9wOiAtOHB4O1xyXG4gICAgY29sb3I6ICMwNUIzRkY7XHJcbiAgICBtYXJnaW4tbGVmdDogLTlweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLWFjdGlvbnMgLmFkZC1vbi1zdGF0ZS5jaGFuZ2Uge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQtdG9wIHtcclxuICAgIG1pbi1oZWlnaHQ6IDE4MHB4O1xyXG59XHJcblxyXG4ucHJlbWl1bV9hZGRfb25zLmFjdGl2ZSAuY29sdW1uLWRlc2NyaXB0aW9uIHAge1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XHJcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xyXG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiA1O1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xyXG4gICAgbWF4LWhlaWdodDogOGVtO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYnV0dG9uLnNwaW5uZXIge1xyXG4gICAgYmFja2dyb3VuZDogdXJsKC4uLy4uL2ltYWdlcy9zcGlubmVyLmdpZikgbm8tcmVwZWF0IDRweCAhaW1wb3J0YW50O1xyXG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xyXG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcclxuICAgIHdpZHRoOiBhdXRvO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYWN0aW9uLWxpbmtzID4gc3BhbiB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYWN0aW9uLWxpbmtzID4gc3Bhbi5lbmFibGVkIHtcclxuICAgIGNvbG9yOiAjN2FkMDNhO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYWN0aW9uLWxpbmtzID4gc3Bhbi5kaXNhYmxlZCB7XHJcbiAgICBjb2xvcjogI0ZGMDAwMDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLmFjdGlvbi1saW5rcyAucHJpY2Uge1xyXG4gICAgY29sb3I6ICM0MzlmZGY7XHJcbiAgICBmb250LXdlaWdodDogNzAwO1xyXG4gICAgZm9udC1zaXplOiAxNXB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYWN0aW9uLWxpbmtzIC5wcmljZSBkZWwge1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIGNvbG9yOiAjYWFhO1xyXG4gICAgcGFkZGluZy1yaWdodDogNXB4O1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWljb24gaW1nIHtcclxuICAgIG1heC13aWR0aDogMTAwJTtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLWJ1bmRsZS1hY3RpdmF0ZS1hZGQtb25zLnNwaW5uZXIge1xyXG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi12ZXJzaW9uIHtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3MtYWRkLW9ucy13cmFwICNuYW1lIHtcclxuICAgIHdpZHRoOiAzMCU7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIHA6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3MtYWRkLW9ucy13cmFwIC50aGVtZSB7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLWFkZC1vbnMtd3JhcCAudGhlbWUtY29udHJvbHMge1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxuICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1hZGQtb25zLXdyYXAgLnRoZW1lIGgyIHtcclxuICAgIG1hcmdpbjogMCAwIDIwcHggMDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1hZGQtb25zLXdyYXAgLnRoZW1lIGltZyB7XHJcbiAgICB3aWR0aDogNDAwcHg7XHJcbiAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICBtYXJnaW46IDAgMjBweCAwIDA7XHJcbn1cclxuXHJcbi5yZWxhdGVkX3RoZW1lcyB7XHJcbiAgICAucGx1Z2luLWNhcmQtdG9wIHtcclxuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcclxuICAgIH1cclxuICAgIC50aGVtZS1jb250ZW50IHtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB9XHJcbiAgICAuaW1hZ2UtdGh1bWJuYWlsIGltZyB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICB9XHJcbiAgICAudGhlbWUtZGVzY3JpcHRpb24ge1xyXG4gICAgICAgIG1hcmdpbjogMCAwIDI1cHggMDtcclxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xyXG4gICAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XHJcbiAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiA2O1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcclxuICAgICAgICBtYXgtaGVpZ2h0OiA5LjZlbTtcclxuXHJcbiAgICB9XHJcbiAgICAudGhlbWUtdGl0bGUge1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMTAwcHg7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcclxuICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICAgICAgbWluLWhlaWdodDogMy4yZW07XHJcbiAgICB9XHJcbiAgICAudGhlbWUtdGl0bGUgYSB7XHJcblxyXG4gICAgICAgIGNvbG9yOiAjNTQ1NDU0O1xyXG4gICAgfVxyXG4gICAgLnRoZW1lLXJhdGluZyB7XHJcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xyXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIH1cclxuICAgIC5zdGFyLXJhdGluZyB7XHJcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgfVxyXG4gICAgLmNvdW50LXJhdGluZyB7XHJcbiAgICAgICAgZm9udC1zaXplOiAxNXB4O1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICB0b3A6IDJweDtcclxuICAgIH1cclxuICAgIC50aGVtZS1kZXRhaWwge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICByaWdodDogM3B4O1xyXG4gICAgICAgIHRvcDogMDtcclxuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcblxyXG4gICAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRoZW1lLXByaWNlIHtcclxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjNTQ1NDU0O1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogNzAwO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAudGhlbWUtZm9vdGVyIHtcclxuICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgICBtYXJnaW4tbGVmdDogLTIwcHg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMjBweDtcclxuICAgICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XHJcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIH1cclxufVxyXG5cclxuQG1lZGlhIChtYXgtd2lkdGg6IDEyODBweCkge1xyXG4gICAgLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSB7XHJcbiAgICAgICAgLyp3aWR0aDogMzMuMzMlOyovXHJcbiAgICB9XHJcbn1cclxuXHJcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc4MnB4KSB7XHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyAuZW5hYmxlLW5vdyB7XHJcbiAgICAgICAgcGFkZGluZzogNXB4O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyAuZW5hYmxlLW5vdzpiZWZvcmUge1xyXG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5sZWFybi1wcmVzcy1hZGQtb25zIC5lbmFibGUtbm93OmJlZm9yZSB7XHJcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgI2xlYXJuLXByZXNzLWFkZC1vbnMtd3JhcCAudGhlbWUgaW1nIHtcclxuICAgICAgICB3aWR0aDogNTAlO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIHtcclxuICAgICAgICAvKndpZHRoOiA1MCU7Ki9cclxuICAgIH1cclxuXHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5jb2x1bW4tbmFtZSB7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNTBweDtcclxuICAgIH1cclxufVxyXG5cclxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIHtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgIH1cclxuXHJcbiAgICAjbGVhcm4tcHJlc3MtYWRkLW9ucy13cmFwIC50aGVtZSBpbWcge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqL1xyXG5cclxuI2xwci1xdWl6LXF1ZXN0aW9ucy13cmFwIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1jaG9pY2Uge1xyXG4gICAgaGVpZ2h0OiAyOXB4O1xyXG4gICAgcGFkZGluZy10b3A6IDNweDtcclxuICAgIGZvbnQtc2l6ZTogMTRweDtcclxufVxyXG5cclxuLnBvc3QtdGl0bGUuY29sdW1uLXRpdGxlIHtcclxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xyXG59XHJcblxyXG4ubHByLXJvdy1hY3Rpb25zIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLmxwci1yb3ctYWN0aW9uLWRyb3Bkb3duIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMTAwJTtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBtaW4td2lkdGg6IDE1MHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmxwci1yb3ctYWN0aW9uLWRyb3Bkb3duID4gbGkge1xyXG4gICAgbWFyZ2luOiAwO1xyXG59XHJcblxyXG4ubHByLXJvdy1hY3Rpb24tZHJvcGRvd24gPiBsaSA+IGEge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBwYWRkaW5nOiA1cHg7XHJcbn1cclxuXHJcbi5scHItcm93LWFjdGlvbnMgPiBhIHtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuXHJcbi5scHItcm93LWFjdGlvbnMgPiBhOmFmdGVyIHtcclxuICAgIHdpZHRoOiAwO1xyXG4gICAgaGVpZ2h0OiAwO1xyXG4gICAgYm9yZGVyOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXItdG9wLWNvbG9yOiAjREREO1xyXG4gICAgY29udGVudDogJyc7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICByaWdodDogMDtcclxuICAgIHRvcDogNnB4O1xyXG59XHJcblxyXG4ubHByLXJvdy1hY3Rpb25zOmhvdmVyID4gdWwge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbn1cclxuXHJcbi8qIGFkZG9ucyBwYWdlICovXHJcbiNscHItYWRkLW9ucy13cmFwcGVyIHtcclxufVxyXG5cclxuI2xwci1hZGQtb25zLXdyYXBwZXIgLmxwci1hZGQtb24tYmxvY2sge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjREREO1xyXG4gICAgcGFkZGluZy1ib3R0b206IDIwcHg7XHJcbiAgICB3aWR0aDogNTAlO1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG59XHJcblxyXG4jbHByLWFkZC1vbnMtd3JhcHBlciAubHByLWFkZC1vbi1ibG9jazphZnRlciB7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgY2xlYXI6IGJvdGg7XHJcbn1cclxuXHJcbiNscHItYWRkLW9ucy13cmFwcGVyIC5scHItYWRtaW4tdGh1bWJuYWlsIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgd2lkdGg6IDIwMHB4O1xyXG59XHJcblxyXG4jbHByLWFkZC1vbnMtd3JhcHBlciAubHByLWFkbWluLXRodW1ibmFpbCBpbWcge1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuI2xwci1hZGQtb25zLXdyYXBwZXIgLmxwci1hZGQtb24taW5mbyB7XHJcbiAgICBtYXJnaW4tbGVmdDogMjIwcHg7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XHJcbn1cclxuXHJcbiNscHItYWRkLW9ucy13cmFwcGVyIC5scHItYWRkLW9uLWluZm8gPiBoMyB7XHJcbiAgICBtYXJnaW4tdG9wOiAwO1xyXG59XHJcblxyXG4jbHByLWFkZC1vbnMtd3JhcHBlciAubHByLWFkZC1vbi1pbmZvID4gaDMgPiBzcGFuIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHBhZGRpbmc6IDAgNXB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzdBRDNGQTtcclxuICAgIGNvbG9yOiAjRkZGO1xyXG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XHJcbiAgICBmb250LXNpemU6IDEycHg7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxufVxyXG5cclxuI2xwci1hZGQtb25zLXdyYXBwZXIgLmxwci1hZGQtb24tYWN0aW9uIHtcclxuICAgIGZsb2F0OiByaWdodDtcclxuICAgIHdpZHRoOiAxMDBweDtcclxufVxyXG5cclxuLyogdG9nZ2xlICovXHJcbmlucHV0Lmxwci1mYW5jeS1jaGVja2JveCB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4ubHByLWZhbmN5LWNoZWNrYm94LnRvZyB7XHJcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xyXG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDRweCByZ2JhKDAsIDAsIDAsIC42KTtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgaGVpZ2h0OiAxOXB4O1xyXG4gICAgd2lkdGg6IDUwcHg7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBmb250OiAxMXB4LzE4cHggYXJpYWw7XHJcbiAgICBiYWNrZ3JvdW5kOiAjY2NjO1xyXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjJzIGVhc2U7XHJcbiAgICAtbW96LXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIC1vLXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIHRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ubHByLWZhbmN5LWNoZWNrYm94LnRvZzphZnRlciB7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCByZ2JhKDAsIDAsIDAsIC42KTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGhlaWdodDogMTVweDtcclxuICAgIHdpZHRoOiAxNXB4O1xyXG4gICAgYmFja2dyb3VuZDogI2ZmZjtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMnB4O1xyXG4gICAgbGVmdDogMnB4O1xyXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgLjJzIGVhc2U7XHJcbiAgICAtbW96LXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIC1vLXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIHRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2c6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdPRkYnO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgcmlnaHQ6IDdweDtcclxuICAgIHRvcDogMXB4O1xyXG4gICAgY29sb3I6ICNmZmY7XHJcbn1cclxuXHJcbi5scHItZmFuY3ktY2hlY2tib3gudG9nOmhvdmVyOmFmdGVyIHtcclxuICAgIGxlZnQ6IDVweDtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2cub246YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdPTic7XHJcbiAgICByaWdodDogMjhweDtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2cub24ge1xyXG4gICAgYmFja2dyb3VuZDogIzA1QjNGRjtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2cub246YWZ0ZXIge1xyXG4gICAgbGVmdDogMzNweDtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2cub246aG92ZXI6YWZ0ZXIge1xyXG4gICAgbGVmdDogMzBweDtcclxufVxyXG5cclxuLyoqL1xyXG4uY2xlYXJmaXg6YWZ0ZXIge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIGNsZWFyOiBib3RoO1xyXG59XHJcblxyXG4uY2xlYXIge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBjbGVhcjogYm90aDtcclxuICAgIGhlaWdodDogMDtcclxufVxyXG5cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuLmxwLWxpc3Qtb3B0aW9ucyB7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xyXG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24ge1xyXG5cclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uLmxwLWxpc3Qtb3B0aW9uLWVtcHR5IHRkLFxyXG4ubHAtbGlzdC1vcHRpb24ubHAtbGlzdC1vcHRpb24tZW1wdHkgdGgge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZCRTlFOTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uLmxwLWxpc3Qtb3B0aW9uLWVtcHR5IC5scC1hbnN3ZXItY2hlY2sgaW5wdXQsXHJcbi5scC1saXN0LW9wdGlvbi5scC1saXN0LW9wdGlvbi1lbXB0eSAubHAtbGlzdC1vcHRpb24tYWN0aW9ucyBpIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbiAuY2xtIHtcclxuXHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbiAubHAtaXRlbS1jaGVja2JveCB7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbiAubHAtaXRlbS1uYW1lIHtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uIC5scC1pdGVtLWFjdGlvbnMge1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb25zIHRoZWFkIHRoIHtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNGRkY7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUFFQUVBO1xyXG4gICAgcGFkZGluZzogMTBweDtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcblxyXG4gICAgY29sb3I6ICMwMEEwRDI7XHJcblxyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb25zIHRib2R5IHRoLFxyXG4ubHAtbGlzdC1vcHRpb25zIHRib2R5IHRkIHtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNGRkY7XHJcbiAgICBwYWRkaW5nOiAxMHB4IDEwcHg7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9ucyAubHAtYW5zd2VyLWNoZWNrIHtcclxuICAgIHdpZHRoOiAxMDBweDtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9ucyB0Ym9keSB0aCBpbnB1dFt0eXBlPVwidGV4dFwiXSxcclxuLmxwLWxpc3Qtb3B0aW9ucyB0Ym9keSB0ZCBpbnB1dFt0eXBlPVwidGV4dFwiXSB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9ucyAudWktc29ydGFibGUtcGxhY2Vob2xkZXIge1xyXG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb25zIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciB0ZCB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi8uLi9pbWFnZXMvc3RyaXBlLnBuZ1wiKTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uIC5scC1hbnN3ZXItdGV4dCB7XHJcbiAgICBjb2xvcjogIzc3NztcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbiAubHAtYW5zd2VyLXRleHQ6YWZ0ZXIge1xyXG4gICAgZm9udC1mYW1pbHk6IGRhc2hpY29ucztcclxuICAgIGNvbnRlbnQ6ICdcXGY0NjQnO1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24gLmxwLWFuc3dlci10ZXh0OmZvY3VzLFxyXG4ubHAtbGlzdC1vcHRpb246aG92ZXIgLmxwLWFuc3dlci10ZXh0IHtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb246aG92ZXIgLmxwLWFuc3dlci10ZXh0IHtcclxuICAgIGJvcmRlci1zdHlsZTogZGFzaGVkO1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24tYWN0aW9ucyB7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBjb2xvcjogIzAwQTBEMjtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uLWFjdGlvbnMubHAtbW92ZS1saXN0LW9wdGlvbiB7XHJcbiAgICBjdXJzb3I6IG1vdmU7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbi1hY3Rpb25zOmhvdmVyIHtcclxuICAgIGNvbG9yOiAjMTU2MDc3O1xyXG59XHJcblxyXG4vKiBRdWVzdGlvbiBtZXRhIGJveCAqL1xyXG4jcXVlc3Rpb25fYW5zd2VyIC5yd21iLXF1ZXN0aW9uLXdyYXBwZXIge1xyXG4gICAgbWFyZ2luOiAxMnB4IDAgMCAwO1xyXG59XHJcblxyXG4ucXVlc3Rpb24tYm90dG9tLWFjdGlvbnMgPiAqIHtcclxuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4vKiBRdWl6IG1ldGEgYm94ICovXHJcbmJvZHkucG9zdC10eXBlLWxwX3F1aXogI3F1ZXN0aW9ucyxcclxuYm9keS5wb3N0LXR5cGUtbHBfcXVlc3Rpb24gI3F1ZXN0aW9uX2Fuc3dlcl8ge1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG59XHJcblxyXG5ib2R5LnBvc3QtdHlwZS1scF9xdWl6ICNxdWVzdGlvbnMgLmhhbmRsZWRpdixcclxuYm9keS5wb3N0LXR5cGUtbHBfcXVlc3Rpb24gI3F1ZXN0aW9uX2Fuc3dlcl8gLmhhbmRsZWRpdiB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG5ib2R5LnBvc3QtdHlwZS1scF9xdWl6ICNxdWVzdGlvbnMgLmhuZGxlLFxyXG5ib2R5LnBvc3QtdHlwZS1scF9xdWVzdGlvbiAjcXVlc3Rpb25fYW5zd2VyXyAuaG5kbGUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuYm9keS5wb3N0LXR5cGUtbHBfcXVpeiAjcXVlc3Rpb25zIC5pbnNpZGUsXHJcbmJvZHkucG9zdC10eXBlLWxwX3F1ZXN0aW9uICNxdWVzdGlvbl9hbnN3ZXJfIC5pbnNpZGUge1xyXG4gICAgcGFkZGluZzogMDtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbnMtaGVhZGluZyAucXVlc3Rpb25zLXRvZ2dsZSB7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBsaW5lLWhlaWdodDogMTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbnMtaGVhZGluZyAucXVlc3Rpb25zLXRvZ2dsZSBhOmhvdmVyIHtcclxuICAgIGNvbG9yOiAjMDBhMGQyO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zICNsZWFybi1wcmVzcy1kcm9wZG93bi1xdWVzdGlvbnMge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zICNsZWFybi1wcmVzcy1kcm9wZG93bi1xdWVzdGlvbnMgPiB1bCB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDEwMCU7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICByaWdodDogMDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFRUU7XHJcbiAgICBib3JkZXItdG9wOiBub25lO1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICAgIHotaW5kZXg6IDUwO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zICNsZWFybi1wcmVzcy1kcm9wZG93bi1xdWVzdGlvbnMgPiB1bCA+IGxpIHtcclxuICAgIG1hcmdpbjogMDtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAjbGVhcm4tcHJlc3MtZHJvcGRvd24tcXVlc3Rpb25zID4gdWwgbGkgPiBhIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgcGFkZGluZzogNXB4O1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbn1cclxuXHJcbiNxdWVzdGlvbnMgI2xlYXJuLXByZXNzLXF1ZXN0aW9uLW5hbWUge1xyXG4gICAgZm9udC1zaXplOiAxOHB4O1xyXG4gICAgbWluLXdpZHRoOiAzNTBweDtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICBib3JkZXItY29sb3I6ICNFRUU7XHJcbiAgICBjb2xvcjogI0JCQjtcclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbn1cclxuXHJcbiNxdWVzdGlvbnMgI2xlYXJuLXByZXNzLXRvZ2dsZS1xdWVzdGlvbnMge1xyXG4gICAgaGVpZ2h0OiAzMnB4O1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkY7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjRUVFO1xyXG4gICAgd2lkdGg6IDMycHg7XHJcbiAgICBtYXJnaW4tbGVmdDogLTRweDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMzBweDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBjb2xvcjogI0NDQztcclxuICAgIGJvcmRlci1sZWZ0OiBub25lO1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAjbGVhcm4tcHJlc3MtdG9nZ2xlLXF1ZXN0aW9uczpob3ZlciB7XHJcbiAgICBjb2xvcjogI0FBQUFBQTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAjbGVhcm4tcHJlc3MtYnV0dG9uLWFkZC1xdWVzdGlvbiB7XHJcbiAgICBfdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyBpbnB1dFtuYW1lPVwibHAtbmV3LXF1ZXN0aW9uLW5hbWVcIl0ge1xyXG5cclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVlc3Rpb24tYWN0aW9ucyB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgei1pbmRleDogOTk5O1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWl6LXF1ZXN0aW9uLWhlYWQgLnF1aXotcXVlc3Rpb24tYWN0aW9ucyB7XHJcbiAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICBtYXJnaW46IDFweCAwO1xyXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgcGFkZGluZy10b3A6IDJweDtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbi1oZWFkIC5xdWl6LXF1ZXN0aW9uLWFjdGlvbnMgYSB7XHJcbiAgICBtYXJnaW46IDAgM3B4O1xyXG4gICAgY29sb3I6IEBwcmltYXJ5LWljb24tY29sb3I7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbi1oZWFkIC5xdWl6LXF1ZXN0aW9uLWFjdGlvbnMgYTpob3ZlciB7XHJcbiAgICBjb2xvcjogIzAwYTBkMjtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbi1oZWFkOmhvdmVyIC5xdWl6LXF1ZXN0aW9uLWFjdGlvbnMge1xyXG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAucXVpei1xdWVzdGlvbi51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciB7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi8uLi9pbWFnZXMvc3RyaXBlLnBuZ1wiKTtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWVzdGlvbi1uYW1lIHtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XHJcbiAgICB3aWR0aDogNzAlO1xyXG4gICAgY29sb3I6ICM3Nzc7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWl6LXF1ZXN0aW9uLWljb24gaW1nIHtcclxuICAgIG1heC13aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogYXV0bztcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAjbGVhcm4tcHJlc3MtZHJvcGRvd24tcXVlc3Rpb25zIC5hZGRlZCB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4ubHByLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzIHtcclxuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcclxufVxyXG5cclxuLmxwci1jdXJyaWN1bHVtLXNlY3Rpb24gPiBoMyAubHByLWFjdGlvbiB7XHJcbiAgICB0b3A6IDA7XHJcbiAgICByaWdodDogMDtcclxufVxyXG5cclxuLmxwci1jdXJyaWN1bHVtLXNlY3Rpb24ubHByLWVtcHR5ID4gaDMge1xyXG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi5scHItY3VycmljdWx1bS1zZWN0aW9uLmxwci1lbXB0eSAubHByLWFjdGlvbiB7XHJcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi5scHItY291cnNlLWN1cnJpY3VsdW0gYnV0dG9uIHNwYW4ge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1zdGF0aXN0aWMge1xyXG4gICAgbWFyZ2luLXRvcDogMjBweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWNoYXJ0IHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWNoYXJ0IGNhbnZhcyB7XHJcbiAgICBoZWlnaHQ6IDcwdmg7XHJcbiAgICB3aWR0aDogMTAwdnc7XHJcbn1cclxuXHJcbi5jaGFydC1idXR0b25zIGZvcm0ge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuLmNoYXJ0LWJ1dHRvbnMgZm9ybSBpbnB1dFt0eXBlPVwidGV4dFwiXSB7XHJcbiAgICB3aWR0aDogMTA1cHg7XHJcbiAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBwYWRkaW5nOiA0cHg7XHJcbn1cclxuXHJcbi5jaGFydC1idXR0b25zIGZvcm0gc3BhbiB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBwYWRkaW5nOiA1cHg7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1jaGFydC5sb2FkaW5nOmFmdGVyIHtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgei1pbmRleDogMTA7XHJcbiAgICBiYWNrZ3JvdW5kOiAjRkZGO1xyXG4gICAgb3BhY2l0eTogMC41O1xyXG59XHJcblxyXG4uY2hhcnQtZGVzY3JpcHRpb24ge1xyXG5cclxufVxyXG5cclxuLmNoYXJ0LWRlc2NyaXB0aW9uIGxpIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIG1hcmdpbi1yaWdodDogMTVweDtcclxufVxyXG5cclxuLmNoYXJ0LWRlc2NyaXB0aW9uIGxpOmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHdpZHRoOiAxMHB4O1xyXG4gICAgaGVpZ2h0OiAxMHB4O1xyXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgIG1hcmdpbi1yaWdodDogNXB4O1xyXG59XHJcblxyXG4uY2hhcnQtZGVzY3JpcHRpb24gbGkgc3BhbiB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuXHJcbi5jaGFydC1kZXNjcmlwdGlvbiBsaS5hbGw6YmVmb3JlIHtcclxuICAgIGJhY2tncm91bmQ6ICMyRkE3RkY7XHJcbn1cclxuXHJcbi5jaGFydC1kZXNjcmlwdGlvbiBsaS5pbnN0cnVjdG9yczpiZWZvcmUge1xyXG4gICAgYmFja2dyb3VuZDogI0VBQzc5QjtcclxufVxyXG5cclxuLmNoYXJ0LWRlc2NyaXB0aW9uIGxpLnN0dWRlbnRzOmJlZm9yZSB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjRDREMENCO1xyXG59XHJcblxyXG4ubHByLXN0YXRzLXRpbWUge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcblxyXG4ubHByLWhpZGRlbiB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4jbHByLWN1c3RvbS10aW1lIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHRvcDogNHB4O1xyXG59XHJcblxyXG4vKiBibG9jayBwYWdlICovXHJcbiNscHItcGFnZS1ibG9jayB7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xyXG4gICAgb3BhY2l0eTogMC41O1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICAgIHotaW5kZXg6IDk5OTk7XHJcbn1cclxuXHJcbiNmb3JtLXF1aWNrLWFkZC1sZXNzb24tbGluayB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbn1cclxuXHJcbiNfbHByX2NvdXJzZV9wcmljZV9kZXNjcmlwdGlvbiA+IHNwYW4ge1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBmb250LXNpemU6IDE1cHg7XHJcbn1cclxuXHJcbi5scHItaWdub3JlLCAubHByLWlnbm9yZTpob3ZlciB7XHJcbiAgICBjb2xvcjogI2RkM2QzNjtcclxufVxyXG5cclxuLmxwci1pZ25vcmU6aG92ZXIge1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcblxyXG4ubHByLXF1aWNrLWFkZC1wYWdlLWlubGluZSxcclxuLmxwci1xdWljay1hY3Rpb25zLWlubGluZSB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbiNscHItdG9nZ2xlLXF1aXotbW9kZSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3N0ZGO1xyXG4gICAgcGFkZGluZzogM3B4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgIGNvbG9yOiAjRkZGO1xyXG59XHJcblxyXG4uY29sdW1uLW51bV9vZl9xdWVzdGlvbiB7XHJcbiAgICB3aWR0aDogMTUwcHg7XHJcbn1cclxuXHJcbi5scC1zZWFyY2gtaXRlbXMgaW5wdXRbbmFtZT1cImxwLWl0ZW0tbmFtZVwiXSB7XHJcbiAgICB3aWR0aDogNTAwcHg7XHJcbn1cclxuXHJcbi5scC1idXR0b24tZHJvcGRvd24ge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAyOHB4ICFpbXBvcnRhbnQ7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiA5OTk5ODtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1kcm9wZG93biAubHAtZHJvcGRvd24tbGFiZWwge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xyXG59XHJcblxyXG4ubHAtYnV0dG9uLWRyb3Bkb3duIC5scC1kcm9wZG93bi1hcnJvdyB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAvKiB3aWR0aDogMjBweDsgKi9cclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIHBhZGRpbmc6IDAgMTBweDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogLTFweDtcclxuICAgIGJvdHRvbTogLTFweDtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1kcm9wZG93biAubHAtZHJvcGRvd24taXRlbXMge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgLyogd2lkdGg6IDEwMCU7ICovXHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xyXG4gICAgdG9wOiAxMDAlO1xyXG4gICAgbWFyZ2luLXRvcDogMXB4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIHJpZ2h0OiAtMXB4O1xyXG4gICAgLyogcmlnaHQ6IC0xcHg7ICovXHJcbiAgICB3aWR0aDogMjAwcHg7XHJcbiAgICB6LWluZGV4OiA5OTk5OTk5O1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1kcm9wZG93biAubHAtZHJvcGRvd24taXRlbXMgbGkge1xyXG4gICAgbWFyZ2luOiAwO1xyXG59XHJcblxyXG4ubHAtYnV0dG9uLWRyb3Bkb3duIC5scC1kcm9wZG93bi1pdGVtcyBsaSBhIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgcGFkZGluZzogMTBweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbn1cclxuXHJcbi5scC1idXR0b24tZHJvcGRvd24gLmxwLWRyb3Bkb3duLWl0ZW1zIGxpIGE6aG92ZXIge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1kcm9wZG93bjpub3QoLmRpc2FibGVkKTpob3ZlciB1bCxcclxuLmxwLWJ1dHRvbi1kcm9wZG93bjpub3QoLmRpc2FibGVkKSB1bDpob3ZlciB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxufVxyXG5cclxuLmN1cnJpY3VsdW0tc2VjdGlvbi5scC1lbXB0eS1zZWN0aW9uIHtcclxufVxyXG5cclxuLmN1cnJpY3VsdW0tc2VjdGlvbiAubHAtY2hlY2staXRlbXMsXHJcbi5jdXJyaWN1bHVtLXNlY3Rpb24gLmxwLWNoZWNrLWl0ZW1zOmhvdmVyIHtcclxuICAgIHBhZGRpbmctbGVmdDogNXB4O1xyXG4gICAgcGFkZGluZy1yaWdodDogMzRweDtcclxuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbn1cclxuXHJcbi5jb2x1bW4tZm9ybWF0LFxyXG4uY29sdW1uLWlzX3ByZXZpZXdhYmxlLFxyXG4uY29sdW1uLXRheG9ub215LXF1ZXN0aW9uLXRhZyB7XHJcbiAgICB3aWR0aDogMTAlO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmluc3RhbGwtbm93OmJlZm9yZSxcclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi1jYXJkIC5kaXNhYmxlLW5vdzpiZWZvcmUsXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5wbHVnaW4tY2FyZCAuZW5hYmxlLW5vdzpiZWZvcmUge1xyXG4gICAgbWFyZ2luOiAzcHggNXB4IDAgLTJweDtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIGZvbnQ6IDQwMCAyMHB4LzEgZGFzaGljb25zO1xyXG4gICAgLypzcGVhazogbm9uZTsqL1xyXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XHJcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xyXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi1jYXJkIC5pbnN0YWxsLW5vdzpiZWZvcmUge1xyXG4gICAgY29udGVudDogJ1xcZjEwNic7XHJcbiAgICBjb2xvcjogIzAwNzNhYTtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi1jYXJkIC5kaXNhYmxlLW5vdzpiZWZvcmUge1xyXG4gICAgY29udGVudDogJ1xcZjE0Nyc7XHJcbiAgICBjb2xvcjogIzAwNzNhYTtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi1jYXJkIC5lbmFibGUtbm93OmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnXFxmMzM1JztcclxuICAgIGNvbG9yOiAjZDU0ZTIxO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmRpc2FibGUtbm93OmhvdmVyOmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnXFxmMzM1JztcclxuICAgIGNvbG9yOiAjZDU0ZTIxO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmVuYWJsZS1ub3c6aG92ZXI6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdcXGYxNDcnO1xyXG4gICAgY29sb3I6ICMwMDczYWE7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5wbHVnaW4tY2FyZCAuYnV0dG9uLXdvcmtpbmc6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdcXGY0NjMnICFpbXBvcnRhbnQ7XHJcbiAgICAtd2Via2l0LWFuaW1hdGlvbjogbHAtc3Bpbm5lciAycyBpbmZpbml0ZSBsaW5lYXI7XHJcbiAgICBhbmltYXRpb246IGxwLXNwaW5uZXIgMnMgaW5maW5pdGUgbGluZWFyO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmJ1dHRvbi13b3JraW5nIHNwYW4ge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1hY3Rpb25zIGEge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLXF1aWNrLWNvbmZpcm0ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgei1pbmRleDogOTk5OTtcclxuICAgIGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7XHJcbiAgICBwYWRkaW5nOiAycHggOHB4O1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgbGVmdDogLTM5LjYyNXB4O1xyXG4gICAgdG9wOiAyNHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0M5MDIwMjtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLXF1aWNrLWNvbmZpcm06aG92ZXIsXHJcbi5sZWFybi1wcmVzcy1xdWljay1jb25maXJtOmhvdmVyOmJlZm9yZSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDczYjAwO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtcXVpY2stY29uZmlybTpiZWZvcmUge1xyXG4gICAgY29udGVudDogJyc7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIC8qIGJvcmRlcjogMXB4IHNvbGlkOyAqL1xyXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xyXG4gICAgd2lkdGg6IDdweDtcclxuICAgIGhlaWdodDogN3B4O1xyXG4gICAgdG9wOiAtM3B4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0M5MDIwMjtcclxuICAgIHJpZ2h0OiA3cHg7XHJcbn1cclxuXHJcbi8qIGNvdXJzZSAqL1xyXG4ud3AtY29yZS11aSAubWV0YV9ib3hfYWRkX3NlY3Rpb24sXHJcbi53cC1jb3JlLXVpIC5tZXRhX2JveF9hZGRfbGVzc29uIHtcclxuICAgIG1hcmdpbi1yaWdodDogMTBweDtcclxufVxyXG5cclxuLmhpZGUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmhhbmRsZS5kYXNoaWNvbnMge1xyXG4gICAgY3Vyc29yOiBtb3ZlO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG59XHJcblxyXG4ubWV0YV9ib3hfcmVtb3ZlIC5kYXNoaWNvbnMge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBpbml0aWFsO1xyXG59XHJcblxyXG4ubWV0YV9ib3hfY291cnNlX2xlc3Nvbl9xdWl6IGxpIGlucHV0LFxyXG4ubWV0YV9ib3hfY291cnNlX2xlc3Nvbl9xdWl6IGxpIHNlbGVjdCB7XHJcbiAgICBtaW4td2lkdGg6IDI1MHB4O1xyXG59XHJcblxyXG4ucndtYi1tZXRhLWJveCBsYWJlbCB7XHJcbiAgICBjb2xvcjogIzIyMjtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBtYXJnaW46IDAgMCAxNnB4IDA7XHJcbn1cclxuXHJcbi5kZXNjcmlwdGlvbiB7XHJcbiAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbn1cclxuXHJcbi5kYXNoZWQtcGxhY2Vob2xkZXIge1xyXG4gICAgYm9yZGVyOiAycHggZGFzaGVkICM5OTk7XHJcbiAgICBwYWRkaW5nOiAxMHB4O1xyXG59XHJcblxyXG4vKlxyXG4gICAgVHVOTiBhZGRlZCAyMSAwMyAyMDE1XHJcbiAgICBNb2RpZmllZCAwMyBBcHIgMjAxNVxyXG4qL1xyXG4vKiBDb3Vyc2UgQ3VycmljdWx1bW4gbWV0YSBib3ggc2VjdGlvbiovXHJcblxyXG4vKioqKioqKioqKioqIHZlcnNpb24gMS4wICoqKioqKioqKioqKioqL1xyXG5cclxuLyogb3JkZXIgKi9cclxuLnBvc3QtdHlwZS1scF9vcmRlciAjcG9zdC1ib2R5LWNvbnRlbnQsXHJcbi5wb3N0LXR5cGUtbHBfb3JkZXIgI29yZGVyX2RldGFpbHMgLmhhbmRsZWRpdixcclxuLnBvc3QtdHlwZS1scF9vcmRlciAjb3JkZXJfZGV0YWlscyAuaG5kbGUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLnBvc3QtdHlwZS1scF9vcmRlciAjc3VibWl0cG9zdCAubWlzYy1wdWItc2VjdGlvbiBsYWJlbCB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciB7XHJcbiAgICBtYXJnaW46IDE1cHg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItZGF0YS1udW1iZXIge1xyXG4gICAgZm9udC1zaXplOiAzNnB4O1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciA+IGgzIHtcclxuICAgIG1hcmdpbjogMCAwIDEwcHggMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItZGF0YS1kYXRlLFxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLm9yZGVyLWRhdGEtc3RhdHVzLFxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLm9yZGVyLWRhdGEtcGF5bWVudC1tZXRob2Qge1xyXG4gICAgZm9udC1zaXplOiAxOHB4O1xyXG4gICAgcGFkZGluZzogMCAwIDEwcHggMDtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLW9yZGVyIC51c2VyLWRpc3BsYXktbmFtZSxcclxuI2xlYXJuLXByZXNzLW9yZGVyIC51c2VyLWVtYWlsLFxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLnVzZXItaXAtYWRkcmVzcyB7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgbWFyZ2luOiAwIDAgMTBweCAwO1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLm9yZGVyLWl0ZW1zIHRhYmxlIHtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItaXRlbXMgdGFibGUgdGgsXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItaXRlbXMgdGFibGUgdGQge1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1pbnN0YWxsLXNhbXBsZS1kYXRhLW5vdGljZSAuaW5zdGFsbC1zYW1wbGUtZGF0YS1sb2FkaW5nIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi8qIGxlYXJuX3ByZXNzX2Rhc2hib2FyZF93aWRnZXQgKi9cclxuI2xlYXJuX3ByZXNzX2Rhc2hib2FyZF93aWRnZXQge1xyXG4gICAgLnN1YnN1YnN1YiB7XHJcbiAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qIGlvcyBjaGVja2JveCAqL1xyXG4ubGVhcm4tcHJlc3MtY2hlY2tib3gge1xyXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG5pbnB1dC5yZWd1bGFyLXRleHRbaWRePVwibGVhcm4tcHJlc3MtZW1haWxzXCJdIHtcclxuICAgIHdpZHRoOiA5NyU7XHJcbn1cclxuXHJcbi5pb3MtdWktc2VsZWN0IHtcclxuICAgIGJhY2tncm91bmQ6ICNkZGRkZGQ7XHJcbiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcclxuICAgIGhlaWdodDogMThweDtcclxuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogOXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogOXB4O1xyXG4gICAgd2lkdGg6IDMwcHg7XHJcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UtaW4tb3V0O1xyXG4gICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLWluLW91dDtcclxuICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLWluLW91dDtcclxuICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UtaW4tb3V0O1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1pbi1vdXQ7XHJcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4uaW9zLXVpLXNlbGVjdC5jaGVja2VkIHtcclxuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMThweCAjNmRkYzVmO1xyXG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMThweCAjNmRkYzVmO1xyXG59XHJcblxyXG4uaW9zLXVpLXNlbGVjdC5jaGVja2VkIC5pbm5lciB7XHJcbiAgICBsZWZ0OiAxM3B4O1xyXG59XHJcblxyXG4uaW9zLXVpLXNlbGVjdCAuaW5uZXIge1xyXG4gICAgd2lkdGg6IDE2cHg7XHJcbiAgICBoZWlnaHQ6IDE2cHg7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDFweDtcclxuICAgIGxlZnQ6IDFweDtcclxuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTAwJTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDM1MG1zIGN1YmljLWJlemllcigwLCAwLjg5LCAwLjQ0LCAxKTtcclxuICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDM1MG1zIGN1YmljLWJlemllcigwLCAwLjg5LCAwLjQ0LCAxKTtcclxuICAgIC1vLXRyYW5zaXRpb246IGFsbCAzNTBtcyBjdWJpYy1iZXppZXIoMCwgMC44OSwgMC40NCwgMSk7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMzUwbXMgY3ViaWMtYmV6aWVyKDAsIDAuODksIDAuNDQsIDEpO1xyXG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgM3B4IDRweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG59XHJcblxyXG4ubHAtbGFiZWwtY291bnRlciB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3M0FBO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcclxuICAgIGhlaWdodDogMjFweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWluLXdpZHRoOiAyMXB4O1xyXG4gICAgY29sb3I6ICNGRkY7XHJcbiAgICBwYWRkaW5nOiAwIDVweDtcclxufVxyXG5cclxuLmNvbHVtbi1udW1fb2ZfcXVlc3Rpb24sXHJcbi5jb2x1bW4tcHJldmlldyxcclxuLmNvbHVtbi1kdXJhdGlvbixcclxuLmNvbHVtbi10eXBlLFxyXG4uY29sdW1uLXRheG9ub215LXF1ZXN0aW9uX3RhZyB7XHJcbiAgICB3aWR0aDogMTAwcHg7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG59XHJcblxyXG4jbGVhcm5fcHJlc3NfZGFzaGJvYXJkX3dpZGdldCB7XHJcbiAgICAucnNzLXdpZGdldCB7XHJcbiAgICAgICAgdWwge1xyXG4gICAgICAgICAgICBsaSB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAucnNzLWRhdGUge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICAgfVxyXG59XHJcblxyXG4jbGVhcm5fcHJlc3NfZGFzaGJvYXJkX3dpZGdldF9zdGF0dXMge1xyXG4gICAgLmluc2lkZSB7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgIC5sZWFybnByZXNzLXN0YXRpc3RpYy1zdGF0dXMge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgICAgICBsaSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogNTAlO1xyXG4gICAgICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgICAgICAgICAgICA+IGEsID4gc3BhbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogOHB4IDEycHg7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAmLmZ1bGwtd2lkdGgge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZsb2F0OiBub25lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyOiBib3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlY2VjZWM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCAxMnB4O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA+IGEge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ubHAtdGVtcGxhdGUtb3ZlcnJpZGVzIHtcclxuICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbiAgICB0aGVhZCB0aCBoNCB7XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgfVxyXG4gICAgdGJvZHkgdGgge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIHAge1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAycHggOHB4O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgICAgICAgICAgJi5jdXJyZW50IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDBhYWRjO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjRkZGXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLmxwLXRlbXBsYXRlLXZlcnNpb24ge1xyXG4gICAgICAgIHdpZHRoOiAxMDBweDtcclxuICAgICAgICAmLm91dGRhdGVkIHtcclxuICAgICAgICAgICAgY29sb3I6ICNGRjAwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICYudXAtdG8tZGF0ZSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMTg1OWZmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5scC10ZW1wbGF0ZS12ZXJzaW9uLCAubHAtY29yZS12ZXJzaW9uIHtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuICAgIC5scC10ZW1wbGF0ZS1maWxlIHtcclxuICAgICAgICB3aWR0aDogNTAlO1xyXG4gICAgfVxyXG4gICAgI2xlYXJuLXByZXNzLW5vLXRlbXBsYXRlcyB0ZCBwIHtcclxuICAgICAgICBjb2xvcjogIzAwNzNhYTtcclxuICAgIH1cclxufVxyXG5cclxuQC13ZWJraXQta2V5ZnJhbWVzIGxwLXNwaW5uZXIge1xyXG4gICAgMCUge1xyXG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcbiAgICB9XHJcbiAgICAxMDAlIHtcclxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XHJcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcclxuICAgIH1cclxufVxyXG5cclxuQGtleWZyYW1lcyBscC1zcGlubmVyIHtcclxuICAgIDAlIHtcclxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xyXG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xyXG4gICAgfVxyXG4gICAgMTAwJSB7XHJcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xyXG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5yd21iLXF1aXpfcXVlc3Rpb25zLXdyYXBwZXIge1xyXG4gICAgYmFja2dyb3VuZDogI0ZGRjtcclxuICAgIC5xdWl6LXF1ZXN0aW9ucy1oZWFkaW5nIHtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGOUY5Rjk7XHJcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgY29sb3I6ICM3Nzc7XHJcbiAgICAgICAgcGFkZGluZzogMTVweCAyMHB4IDIwcHg7XHJcbiAgICAgICAgZm9udC1zaXplOiAyNHB4O1xyXG4gICAgICAgIGEge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDMycHg7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMDA3M2FhO1xyXG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgICAgICAgICAmLmRhc2hpY29ucy1hcnJvdy1kb3duIHtcclxuICAgICAgICAgICAgICAgICY6OmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMGEwZDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAjbGVhcm4tcHJlc3MtbGlzdC1xdWVzdGlvbnMge1xyXG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgICAgICAucXVpei1xdWVzdGlvbiB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAjREREO1xyXG4gICAgICAgICAgICBtYXJnaW46IC0xcHggMCAwIDA7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xyXG4gICAgICAgICAgICAmOm50aC1jaGlsZCgybisxKSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkNGQ0ZDO1xyXG4gICAgICAgICAgICAgICAgLnF1ZXN0aW9uLW5hbWUge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQ0ZDRkM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLnF1aXotcXVlc3Rpb24taGVhZCB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICAgICAgICAucXVpei1xdWVzdGlvbi1pY29uIHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjBweDtcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLnF1ZXN0aW9uLW5hbWUge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC5tb3ZlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzY2NjtcclxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHVybChcIi4uLy4uL2ltYWdlcy9vcGVuaGFuZC5jdXJcIikgNyA1LCBkZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogMTRweDtcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiA1cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEycHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMGEwZDI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgLnF1aXotcXVlc3Rpb24tYWN0aW9ucyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMjBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmRhc2hpY29ucy1hZG1pbi1wYWdlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6OmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC5xdWl6LXF1ZXN0aW9uLWNvbnRlbnQge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCAyMHB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ucG9zdC10eXBlLWxwX3F1aXoge1xyXG4gICAgI2dlbmVyYWwtc2V0dGluZ3Mge1xyXG4gICAgICAgIGEge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxlYXJuLXByZXNzLXRhYnMge1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICB1bC5oZWFkaW5nLXRhYnMge1xyXG4gICAgICAgIHBhZGRpbmc6IDAgMTBweDtcclxuICAgICAgICBtYXJnaW46IDBweDtcclxuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcclxuXHJcbiAgICAgICAgPiBsaSB7XHJcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE1cHggMTBweCAxNXB4IDEwcHg7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNEREQ7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICByaWdodDogMDtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcclxuICAgICAgICAgICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTEwcHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJi5hY3RpdmUge1xyXG4gICAgICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLypmb250LXdlaWdodDogYm9sZDsqL1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAyYTNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgICAgICAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgICAgICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC02cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAtNnB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5sZWFybi1wcmVzcy10YWItY29udGVudCB7XHJcbiAgICAgICAgPiBsaSB7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweCAxMHB4IDIwcHg7XHJcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMTAwJTtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgfVxyXG4gICAgJi5pbml0aWFsaXplIHtcclxuICAgICAgICAubGVhcm4tcHJlc3MtdGFiLWNvbnRlbnQgPiBsaSB7XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmxlYXJuLXByZXNzLXRhYi1jb250ZW50IHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XHJcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiA1MCU7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMjUlO1xyXG4gICAgICAgICAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMjBweDtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiAjYTBhMGEwO1xyXG5cclxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiBsaW5lYXIgMXM7XHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcclxuICAgICAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBsZWFybi1wcmVzcy1tZXRhLWJveC10YWJzLWluaXRpYWxpemUtYW5pbWF0aW9uIGxpbmVhciAxcztcclxuICAgICAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XHJcbiAgICAgICAgICAgICAgICAtbW96LWFuaW1hdGlvbjogbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiBsaW5lYXIgMXM7XHJcbiAgICAgICAgICAgICAgICAtbW96LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xyXG4gICAgICAgICAgICAgICAgLW8tYW5pbWF0aW9uOiBsZWFybi1wcmVzcy1tZXRhLWJveC10YWJzLWluaXRpYWxpemUtYW5pbWF0aW9uIGxpbmVhciAxcztcclxuICAgICAgICAgICAgICAgIC1vLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xyXG4gICAgICAgICAgICAgICAgLW1zLWFuaW1hdGlvbjogbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiBsaW5lYXIgMXM7XHJcbiAgICAgICAgICAgICAgICAtbXMtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAmOm5vdCguaW5pdGlhbGl6ZSkge1xyXG4gICAgICAgIC5sZWFybi1wcmVzcy10YWItY29udGVudCA+IGxpIHtcclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgJi5hY3RpdmUge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICA+IHVsIHtcclxuICAgICAgICAmOmFmdGVyIHtcclxuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vKiBNZXRhYm94IFdpZGdldCAqL1xyXG4jd2lkZ2V0cy1yaWdodCAud2lkZ2V0cy1ob2xkZXItd3JhcCB7XHJcbiAgICAucndtYi1sYWJlbCB7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xyXG4gICAgfVxyXG4gICAgLnJ3bWItaW5wdXR7XHJcbiAgICAgICAgaW5wdXRbdHlwZT1cInRleHRcIl17XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5kZXNjcmlwdGlvbiB7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICAgICAgZm9udC1zaXplOiBzbWFsbDtcclxuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5vdXRkYXRlZC1yZWFkbW9yZS1saW5re1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtbWVzc2FnZS5ub3RpY2Utd2FybmluZyB7XHJcbiAgICBib3JkZXItbGVmdC1jb2xvcjogI2ZmYjkwMDtcclxufVxyXG5cclxuQGtleWZyYW1lcyBsZWFybi1wcmVzcy1tZXRhLWJveC10YWJzLWluaXRpYWxpemUtYW5pbWF0aW9uIHtcclxuICAgIDAlIHtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgfVxyXG4gICAgNTAlIHtcclxuICAgICAgICBvcGFjaXR5OiAxO1xyXG4gICAgfVxyXG4gICAgMTAwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxufVxyXG5cclxuQC1tb3ota2V5ZnJhbWVzIGxlYXJuLXByZXNzLW1ldGEtYm94LXRhYnMtaW5pdGlhbGl6ZS1hbmltYXRpb24ge1xyXG4gICAgMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbiAgICA1MCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICB9XHJcbiAgICAxMDAlIHtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5ALXdlYmtpdC1rZXlmcmFtZXMgbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiB7XHJcbiAgICAwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxuICAgIDUwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuICAgIDEwMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbkAtby1rZXlmcmFtZXMgbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiB7XHJcbiAgICAwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxuICAgIDUwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuICAgIDEwMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbkAtbXMta2V5ZnJhbWVzIGxlYXJuLXByZXNzLW1ldGEtYm94LXRhYnMtaW5pdGlhbGl6ZS1hbmltYXRpb24ge1xyXG4gICAgMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbiAgICA1MCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICB9XHJcbiAgICAxMDAlIHtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgfVxyXG59XHJcbiJdLCJmaWxlIjoiYWRtaW4vYWRtaW4uY3NzIn0= */
1522
  .meta_box_course_lesson_quiz li select {
1523
  min-width: 250px;
1524
  }
1525
+ .rwmb-meta-box {
1526
+ margin-top: 20px;
1527
+ }
1528
  .rwmb-meta-box label {
1529
  color: #222;
1530
  font-weight: bold;
2030
  }
2031
  }
2032
 
2033
+ /*# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFJUjtFQUNJO0lBQ0ksVUFBQTs7RUFFSjtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOzs7QUFJUjtFQUNJO0lBQ0ksVUFBQTs7RUFFSjtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOzs7QUFJUjtFQUNJO0lBQ0ksVUFBQTs7RUFFSjtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBOzs7QUFJUjtFQUNJO0lBQ0ksVUFBQTs7RUFFSjtJQUNJLFVBQUE7O0VBRUo7SUFDSSxVQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIERlZmluZSBhbGwgc3R5bGVzIGZvciBhZG1pbiBzaWRlXHJcbiAqXHJcbiAqIEBhdXRob3IgVGhpbVByZXNzXHJcbiAqIEB2ZXJzaW9uIDEuMFxyXG4gKi9cclxuLy8gYWRtaW4gdmFyaWFibGVzXHJcbkBwcmltYXJ5LWljb24tY29sb3I6ICM2NjY2NjY7XHJcbkBwcmltYXJ5LWljb24taG92ZXItY29sb3I6ICMwMGEwZDI7XHJcblxyXG5pbnB1dDpmb2N1czo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XHJcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcclxufVxyXG5cclxuaW5wdXQ6Zm9jdXM6Oi1tb3otcGxhY2Vob2xkZXIge1xyXG4gICAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbmlucHV0OmZvY3VzOi1tb3otcGxhY2Vob2xkZXIge1xyXG4gICAgY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi5yd21iLWZpZWxkIHtcclxuICAgIG1hcmdpbjogMjBweCAwIDIwcHggMDtcclxuICAgIC5yd21iLWlucHV0IHtcclxuICAgICAgICAucndtYi1sYWJlbCB7XHJcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5kZXNjcmlwdGlvbiB7XHJcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDVweDtcclxuICAgICAgICAgICAgJi5vcHRpb24tZGVzYyB7XHJcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiA4cHggMCAxMHB4IDI0cHg7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XHJcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi5scC1uYXYtdGFiLXdyYXBwZXIge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiA5cHggMTVweCAwIDA7XHJcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLXF1aWNrLWFkZC1wYWdlLWlubGluZSB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1xdWljay1hZGQtcGFnZS1pbmxpbmUgPiAqIHtcclxuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1hZG1pbi1zZXR0aW5ncyB7XHJcbiAgICAjbGVhcm5fcHJlc3NfZW1haWxfZm9ybWF0cyB7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcclxuICAgIH1cclxuICAgIC5sZWFybi1wcmVzcy1lbWFpbC12YXJpYWJsZXMge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDVweDtcclxuICAgICAgICBsaSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA4NWJhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLm5hdi10YWItd3JhcHBlciB7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcclxuICAgIH1cclxuICAgIC5zdWJzdWJzdWIge1xyXG4gICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgIHdpZHRoOiAyNDBweDtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgei1pbmRleDogMTA7XHJcbiAgICAgICAgbWFyZ2luOiAwIC0yNjBweCAwIDIwcHg7XHJcbiAgICAgICAgcGFkZGluZy10b3A6IDExcHg7XHJcbiAgICAgICAgbGkge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLmxlYXJuLXByZXNzLXNldHRpbmdzLXdyYXAge1xyXG4gICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgIHBhZGRpbmc6IDFweCAwIDE1cHggMzAwcHg7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI0ZGRjtcclxuICAgICAgICB6LWluZGV4OiAwO1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgICAgaW5wdXRbbmFtZT1cImxlYXJuX3ByZXNzX2F1dG9fcmVkaXJlY3RfbWVzc2FnZVwiXSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA4MCU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgY29udGVudDogJyc7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICBib3R0b206IDA7XHJcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0RERDtcclxuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0zMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAmOmFmdGVyIHtcclxuICAgICAgICAgICAgY29udGVudDogJyc7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgJi5yZWFkeSB7XHJcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsZWFybi1wcmVzcy1yZXNldC1zZXR0aW5ncyB7XHJcbiAgICAgICAgICAgIGZsb2F0OiByaWdodDtcclxuICAgICAgICAgICAgb3BhY2l0eTogMC41O1xyXG4gICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAmLm5vLXN1YnRhYnMge1xyXG4gICAgICAgIC5sZWFybi1wcmVzcy1zZXR0aW5ncy13cmFwIHtcclxuICAgICAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7XHJcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDI1cHg7XHJcblxyXG4gICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5zdWJzdWJzdWIge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XHJcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbiAgICBsYWJlbCB7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICB9XHJcbiAgICAvKmlucHV0W25hbWU9XCJsZWFybl9wcmVzc19zaW5nbGVfY291cnNlX2ltYWdlX3NpemVbd2lkdGhdXCJdLFxyXG4gICAgaW5wdXRbbmFtZT1cImxlYXJuX3ByZXNzX3NpbmdsZV9jb3Vyc2VfaW1hZ2Vfc2l6ZVtoZWlnaHRdXCJdLFxyXG4gICAgaW5wdXRbbmFtZT1cImxlYXJuX3ByZXNzX2NvdXJzZV90aHVtYm5haWxfaW1hZ2Vfc2l6ZVt3aWR0aF1cIl0sXHJcbiAgICBpbnB1dFtuYW1lPVwibGVhcm5fcHJlc3NfY291cnNlX3RodW1ibmFpbF9pbWFnZV9zaXplW2hlaWdodF1cIl0ge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IC00cHg7XHJcbiAgICB9XHJcbiAgICBpbnB1dFtuYW1lPVwibGVhcm5fcHJlc3Nfc2luZ2xlX2NvdXJzZV9pbWFnZV9zaXplW2Nyb3BdXCJdLFxyXG4gICAgaW5wdXRbbmFtZT1cImxlYXJuX3ByZXNzX2NvdXJzZV90aHVtYm5haWxfaW1hZ2Vfc2l6ZVtjcm9wXVwiXSB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogM3B4O1xyXG4gICAgfSovXHJcblxyXG4gICAgaW5wdXRbbmFtZT1cImxlYXJuX3ByZXNzX2NvdXJzZV9iYXNlXCJdIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAzcHg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcHg7XHJcbiAgICB9XHJcbiAgICAubHAtZ3JvdXAtdGl0bGUge1xyXG4gICAgICAgIHBhZGRpbmc6IDAgMCAxMHB4O1xyXG4gICAgICAgIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjNTYzZDdjO1xyXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICB9XHJcbiAgICBpbnB1dFt0eXBlPVwidGV4dFwiXSxcclxuICAgIGlucHV0W3R5cGU9XCJlbWFpbFwiXSxcclxuICAgIGlucHV0W3R5cGU9XCJudW1iZXJcIl0sXHJcbiAgICBpbnB1dFt0eXBlPVwidGVsXCJdLFxyXG4gICAgaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdLFxyXG4gICAgc2VsZWN0IHtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgfVxyXG4gICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcclxuICAgICAgICBvcGFjaXR5OiAxO1xyXG4gICAgfVxyXG4gICAgLmxwLXNldHRpbmctZmllbGQge1xyXG4gICAgICAgIHNwYW4ge1xyXG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmxwLXNpZ24tdGltZXMge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE5cHg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ubGVhcm5wcmVzc19wYWdlX2xlYXJuLXByZXNzLXNldHRpbmdzIHtcclxuICAgIC5zZWxlY3QyLXJlc3VsdCB7XHJcbiAgICAgICAgLnNlbGVjdDItcmVzdWx0LWxhYmVsIHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzIzMjgyZDtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiA4cHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjRkZGO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICYubGV2ZWwtMSB7XHJcbiAgICAgICAgICAgIC5zZWxlY3QyLXJlc3VsdC1sYWJlbCB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDM1cHg7XHJcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgJi5sZXZlbC0yIHtcclxuICAgICAgICAgICAgLnNlbGVjdDItcmVzdWx0LWxhYmVsIHtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNjBweDtcclxuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAzNXB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICYubGV2ZWwtMyB7XHJcbiAgICAgICAgICAgIC5zZWxlY3QyLXJlc3VsdC1sYWJlbCB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDg1cHg7XHJcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogNjBweDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyogbWVzc2FnZSBib3ggKi9cclxuI2xlYXJuLXByZXNzLW1lc3NhZ2UtYm94LWJsb2NrIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICByaWdodDogMDtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XHJcbiAgICB6LWluZGV4OiA5OTk5OTtcclxuICAgIG9wYWNpdHk6IDAuODtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLW1lc3NhZ2UtYm94LXdpbmRvdyB7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICB6LWluZGV4OiAxMDAwMDA7XHJcbiAgICBjb2xvcjogI0ZGRjtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG5cclxuI21lc3NhZ2UtYm94LXdyYXAge1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICAvKiB0ZXh0LWFsaWduOiBjZW50ZXI7ICovXHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgbWF4LXdpZHRoOiA3MCU7XHJcbn1cclxuXHJcbi5tZXNzYWdlLWJveC10aXRsZSB7XHJcbiAgICBjb2xvcjogI0ZGRjtcclxuICAgIG1hcmdpbjogMCAwIDQwcHggMDtcclxuICAgIGZvbnQtc2l6ZTogMzRweDtcclxufVxyXG5cclxuLm1lc3NhZ2UtYm94LWNvbnRlbnQge1xyXG4gICAgZm9udC1zaXplOiAxNnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcclxufVxyXG5cclxuLm1lc3NhZ2UtYm94LWFuaW1hdGlvbiB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi8uLi9pbWFnZXMvYW5pbWF0aW9uLmdpZlwiKTtcclxuICAgIHdpZHRoOiAyMjBweDtcclxuICAgIGhlaWdodDogMjBweDtcclxuICAgIG1hcmdpbjogMjBweCAwIDA7XHJcbn1cclxuXHJcbi5tZXNzYWdlLWJveC1idXR0b25zIHtcclxuICAgIG1hcmdpbjogMjBweCAwIDA7XHJcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgIzkyOTI5MjtcclxuICAgIHBhZGRpbmctdG9wOiAyMHB4O1xyXG59XHJcblxyXG4ubWVzc2FnZS1ib3gtYnV0dG9uIHtcclxuICAgIG1hcmdpbi1yaWdodDogMTBweCAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ucG9zdC10eXBlLWxwX2xlc3NvbiAuY29sdW1uLWZvcm1hdCAubHAtbGFiZWwge1xyXG4gICAgZm9udC1zaXplOiAxMDAlO1xyXG59XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4uaGlkZSB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4uaGFuZGxlLmRhc2hpY29ucyB7XHJcbiAgICBjdXJzb3I6IG1vdmU7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XHJcbn1cclxuXHJcbi5tZXRhX2JveF9yZW1vdmUgLmRhc2hpY29ucyB7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IGluaXRpYWw7XHJcbn1cclxuXHJcbi5tZXRhX2JveF9jb3Vyc2VfbGVzc29uX3F1aXogbGkgaW5wdXQsXHJcbi5tZXRhX2JveF9jb3Vyc2VfbGVzc29uX3F1aXogbGkgc2VsZWN0IHtcclxuICAgIG1pbi13aWR0aDogMjUwcHg7XHJcbn1cclxuXHJcbi5kYXNoZWQtcGxhY2Vob2xkZXIge1xyXG4gICAgYm9yZGVyOiAycHggZGFzaGVkICM5OTk7XHJcbiAgICBwYWRkaW5nOiAxMHB4O1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtbWVzc2FnZSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBiYWNrZ3JvdW5kOiAjRkZGO1xyXG4gICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMDBBMEQyO1xyXG4gICAgcGFkZGluZzogMTBweCAxMHB4IDBweCAxMHB4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICBjb2xvcjogIzc3NztcclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xyXG4gICAgfVxyXG4gICAgcCB7XHJcbiAgICAgICAgbWFyZ2luOiAwIDAgMTBweDtcclxuICAgIH1cclxuICAgICY6YWZ0ZXIge1xyXG4gICAgICAgIGNsZWFyOiBib3RoO1xyXG4gICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgfVxyXG4gICAgJi5ub3RpY2Uge1xyXG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjYjNkMjBhO1xyXG4gICAgfVxyXG4gICAgJi5scC1lcnJvcixcclxuICAgICYuZXJyb3Ige1xyXG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjYjgxYzIzO1xyXG4gICAgfVxyXG4gICAgdWwge1xyXG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcclxuICAgIH1cclxuICAgIC5sZWFybi1wcmVzcy1hZG1pbi1ub3RpY2UtZGlzbWlzcyB7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDFweCAxcHggI0YxRjFGMTtcclxuICAgICAgICB3aWR0aDogMjBweDtcclxuICAgICAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICB0b3A6IDUwJTtcclxuICAgICAgICByaWdodDogMTBweDtcclxuICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDtcclxuICAgICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IGRhc2hpY29ucztcclxuICAgICAgICAgICAgY29udGVudDogJ1xcZjMzNSc7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuKiBDb3Vyc2UgTWV0YWJveFxyXG4qL1xyXG5saS5xdWl6LCBsaS5sZXNzb24sIGxpLnF1aWNrX2xlc3NvbiwgbGkucXVpY2tfcXVpeiB7XHJcbiAgICBtYXJnaW4tbGVmdDogMzBweDtcclxufVxyXG5cclxuLndwLWNvcmUtdWkgLm1ldGFfYm94X2FkZF9zZWN0aW9uLFxyXG4ud3AtY29yZS11aSAubWV0YV9ib3hfYWRkX2xlc3NvbixcclxuLndwLWNvcmUtdWkgLm1ldGFfYm94X2FkZF9xdWl6LFxyXG4ud3AtY29yZS11aSAubWV0YV9ib3hfcXVpY2tfYWRkX2xlc3NvbixcclxuLndwLWNvcmUtdWkgLm1ldGFfYm94X3F1aWNrX2FkZF9xdWl6IHtcclxuICAgIG1hcmdpbi1yaWdodDogMTBweDtcclxufVxyXG5cclxuLmNvbHVtbi10YXhvbm9teS1jb3Vyc2VfY2F0ZWdvcnkge1xyXG4gICAgd2lkdGg6IDE1JTtcclxufVxyXG5cclxuLnRvb2xzLWJ1dHRvbiB7XHJcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcclxufVxyXG5cclxuLypcclxuI2xwci1ibG9jayB7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICAgIHotaW5kZXg6IDIwMDtcclxuICAgIG9wYWNpdHk6IDAuMjtcclxufVxyXG5cclxuLmxwci1xdWljay1hZGQtZm9ybSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xyXG4gICAgcGFkZGluZzogNXB4O1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgei1pbmRleDogMjEwO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxufVxyXG5cclxuLmxwci1xdWljay1hZGQtZm9ybSBpbnB1dCB7XHJcbiAgICBmb250LXNpemU6IDE1cHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xyXG4gICAgd2lkdGg6IDM1MHB4O1xyXG59XHJcblxyXG4ubHByLXF1aWNrLWFkZC1mb3JtIGlucHV0LFxyXG4ubHByLXF1aWNrLWFkZC1mb3JtIHNlbGVjdCB7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG59XHJcblxyXG4ubHByLXF1aWNrLWFkZC1mb3JtIC5scHItYWpheGxvYWQge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICAgIGJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvc3Bpbm5lci5naWYpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICB3aWR0aDogMzBweDtcclxuICAgIGNvbG9yOiAjRkZGO1xyXG4gICAgbWFyZ2luLXRvcDogNnB4O1xyXG59XHJcblxyXG4ubHByLXF1aWNrLWFkZC1mb3JtLndvcmtpbmcgLmxwci1hamF4bG9hZCB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuXHJcbi5scHItcXVpY2stYWRkLWZvcm0ud29ya2luZyBidXR0b24ge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLnBvc3QtdHlwZS1scHJfcXVlc3Rpb24gLmxwci1xdWVzdGlvbi1vcHRpb24tbGFiZWwge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuI2xwci1xdWVzdGlvbi1vcHRpb25zLXdyYXAge1xyXG4gICAgbWFyZ2luLXRvcDogOHB4O1xyXG59XHJcblxyXG4ubHByLXF1ZXN0aW9uIHRyLmxwci1kaXNhYmxlZCAuZGFzaGljb25zLXRyYXNoLFxyXG4ubHByLXF1ZXN0aW9uIHRyLmxwci1kaXNhYmxlZCAuZGFzaGljb25zLXNvcnQge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufSovXHJcblxyXG4vKlxyXG4qIEFkZCBvbiBwYWdlXHJcbiovXHJcbi5sZWFybnByZXNzLWFkdmVydGlzLWFkbWluIHtcclxuXHJcbiAgICBtYXJnaW4tbGVmdDogMTYwcHg7XHJcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgID4gLml0ZW0ge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB9XHJcbiAgICA+IC5pdGVtOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbiAgICAubGVhcm5wcmVzcy13cmFwLWl0ZW1zIHtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMXMsIG9wYWNpdHkgMXM7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAxcywgb3BhY2l0eSAxcztcclxuICAgICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xyXG4gICAgfVxyXG4gICAgLnRoZW1lLXRodW1ibmFpbCB7XHJcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgICAgd2lkdGg6IDM1JTtcclxuICAgIH1cclxuICAgIC50aGVtZS1kZXRhaWwge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAzNSU7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xyXG4gICAgfVxyXG4gICAgLmxlYXJucHJlc3MtaXRlbSB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogLTEwMCU7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMC41cyBsaW5lYXIsIG9wYWNpdHkgMC41cyBsaW5lYXI7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwLjVzIGxpbmVhciwgb3BhY2l0eSAwLjVzIGxpbmVhcjtcclxuXHJcbiAgICB9XHJcbiAgICBpbWcge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGhlaWdodDogYXV0bztcclxuICAgICAgICBmbG9hdDogbm9uZTtcclxuICAgIH1cclxuICAgIC5sZWFybnByZXNzLWFjdGl2ZSB7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcclxuICAgICAgICBvcGFjaXR5OiAxO1xyXG4gICAgfVxyXG5cclxuICAgIC5sZWFybnByZXNzLWNvbnRyb2xzIHtcclxuXHJcbiAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgYm90dG9tOiAzMHB4O1xyXG4gICAgICAgIHJpZ2h0OiAwO1xyXG4gICAgICAgIGhlaWdodDogNTBweDtcclxuICAgICAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuXHJcbiAgICAgICAgLnByZXYtaXRlbSxcclxuICAgICAgICAubmV4dC1pdGVtIHtcclxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnZGFzaGljb25zJztcclxuICAgICAgICAgICAgd2lkdGg6IDQwcHg7XHJcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcclxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcclxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcclxuICAgICAgICAgICAgY29sb3I6ICMwMDA7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLnByZXYtaXRlbSB7XHJcbiAgICAgICAgICAgIHJpZ2h0OiA5NXB4O1xyXG4gICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjM0MVwiO1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLm5leHQtaXRlbSB7XHJcbiAgICAgICAgICAgIHJpZ2h0OiA0NXB4O1xyXG5cclxuICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYzNDVcIjtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjAwcHgpIHtcclxuICAgICAgICAudGhlbWUtdGh1bWJuYWlsIHtcclxuICAgICAgICAgICAgd2lkdGg6IDUwJTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC50aGVtZS1kZXRhaWwge1xyXG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogNTAlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDk2MHB4KSB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDM2cHg7XHJcblxyXG4gICAgICAgIC50aGVtZS10aHVtYm5haWwge1xyXG4gICAgICAgICAgICBmbG9hdDogbm9uZTtcclxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudGhlbWUtZGV0YWlsIHtcclxuICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcclxuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzgycHgpIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMDtcclxuICAgIH1cclxufVxyXG5cclxuLmxwci1hZGQtb25zLXdyYXBwZXIgLmFkZC1vbi1pbmZvIHtcclxuICAgIHdpZHRoOiA2NSU7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuXHJcbi5scHItYWRkLW9ucy13cmFwcGVyIC5hZGQtb24tYWN0aW9uIHtcclxuICAgIGZsb2F0OiByaWdodDtcclxufVxyXG5cclxuLmxwci1hZGQtb25zLXdyYXBwZXIgLmFkZC1vbi1hY3Rpb24gYSB7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgaGVpZ2h0OiA4MHB4O1xyXG4gICAgd2lkdGg6IDEwMHB4O1xyXG4gICAgYmFja2dyb3VuZDogI0VCRUJFQjtcclxuICAgIG1hcmdpbi1yaWdodDogMTAwcHg7XHJcbn1cclxuXHJcbi5scHItYWRkLW9ucy13cmFwcGVyIC5hZGQtb24tYWN0aW9uIC5hZGQtb24tZW5hYmxlZCB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDQwcHg7XHJcbn1cclxuXHJcbi5scHItYWRkLW9ucy13cmFwcGVyIC5hZGQtb24tYWN0aW9uIC5hZGQtb24tZGlzYWJsZWQge1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWFyZ2luOiA0MHB4O1xyXG59XHJcblxyXG4ubHByLWFkZC1vbnMtd3JhcHBlciAuYWRkLW9uLWFjdGlvbiBhOmhvdmVyIHtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS10ZXh0LWRpc2FibGUpO1xyXG59XHJcblxyXG4ubHAtc2VhcmNoLWFkZG9uIHtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHdpZHRoOiAyODBweDtcclxuICAgIGZvbnQtc2l6ZTogMTZweDtcclxuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XHJcbiAgICBsaW5lLWhlaWdodDogMS41O1xyXG4gICAgcGFkZGluZzogM3B4IDVweDtcclxuICAgIGhlaWdodDogMzJweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMge1xyXG4gICAgbWFyZ2luOiAyMHB4IDAgMDtcclxuXHJcbiAgICAubHAtYWRkb24taGlkZGVuIHtcclxuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbiAgICAubHAtYWN0aXZlOm50aC1vZi10eXBlKDJuKzEpIHtcclxuICAgICAgICBjbGVhcjogbm9uZTtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcclxuICAgIH1cclxuICAgIC5scC1hY3RpdmU6bnRoLW9mLXR5cGUoMm4pIHtcclxuICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMDtcclxuICAgIH1cclxuXHJcbiAgICAmLmxlYXJucHJlc3MtcHJlbWl1bS1wbHVnaW4ge1xyXG5cclxuICAgICAgICAuY29sdW1uLWRlc2NyaXB0aW9uIHtcclxuXHJcbiAgICAgICAgICAgIHAge1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xyXG4gICAgICAgICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xyXG4gICAgICAgICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDQ7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcclxuICAgICAgICAgICAgbWF4LWhlaWdodDogNi40ZW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9uczphZnRlciB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGNsZWFyOiBib3RoO1xyXG4gICAgY29udGVudDogJyc7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zID4gbGkge1xyXG4gICAgLypmbG9hdDogbGVmdDsqL1xyXG4gICAgLyp3aWR0aDogMjUlOyovXHJcbiAgICAvKnBvc2l0aW9uOiByZWxhdGl2ZTsqL1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5hZGQtb24taW5uZXIge1xyXG4gICAgbWFyZ2luOiAwIDIwcHggNDBweCAyMHB4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5hZGQtb24tdGh1bWJuYWlsIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0UzRTNFMztcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLXRodW1ibmFpbCBpbWcge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5hZGQtb24tdGh1bWJuYWlsIC5hZGQtb24tb3ZlcmxheSB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB0b3A6IDA7XHJcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjI1cztcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNBREU2RkY7XHJcbiAgICBvcGFjaXR5OiAwO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5hZGQtb24tdGh1bWJuYWlsIC5hZGQtb24tZGVzY3JpcHRpb24ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgbGVmdDogMjBweDtcclxuICAgIHJpZ2h0OiAyMHB4O1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4yNXM7XHJcbiAgICBjb2xvcjogIzQ0NDtcclxuICAgIG9wYWNpdHk6IDA7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zID4gbGk6aG92ZXIgLmFkZC1vbi1vdmVybGF5IHtcclxuICAgIG9wYWNpdHk6IDAuMztcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaTpob3ZlciAuYWRkLW9uLWRlc2NyaXB0aW9uIHtcclxuICAgIG9wYWNpdHk6IDE7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zID4gbGkgLmFkZC1vbi1pbmZvIHtcclxuICAgIG1pbi1oZWlnaHQ6IDgwcHg7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTtcclxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRkZGO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5hZGQtb24taW5mbyA+IGgzIHtcclxuICAgIG1hcmdpbi10b3A6IDA7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zID4gbGkgLmFkZC1vbi1hY3Rpb25zIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGJvdHRvbTogNDNweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgPiBsaSAuYWRkLW9uLWFjdGlvbnMgLmFkZC1vbi1zdGF0ZSB7XHJcbiAgICBmb250LXNpemU6IDM2cHg7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICAgIG1hcmdpbi10b3A6IC04cHg7XHJcbiAgICBjb2xvcjogIzA1QjNGRjtcclxuICAgIG1hcmdpbi1sZWZ0OiAtOXB4O1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIC5hZGQtb24tYWN0aW9ucyAuYWRkLW9uLXN0YXRlLmNoYW5nZSB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5wbHVnaW4tY2FyZC10b3Age1xyXG4gICAgbWluLWhlaWdodDogMTgwcHg7XHJcbn1cclxuXHJcbi5wcmVtaXVtX2FkZF9vbnMuYWN0aXZlIC5jb2x1bW4tZGVzY3JpcHRpb24gcCB7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcclxuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XHJcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDU7XHJcbiAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcbiAgICBtYXgtaGVpZ2h0OiA4ZW07XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5idXR0b24uc3Bpbm5lciB7XHJcbiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3NwaW5uZXIuZ2lmKSBuby1yZXBlYXQgNHB4ICFpbXBvcnRhbnQ7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gICAgd2lkdGg6IGF1dG87XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5hY3Rpb24tbGlua3MgPiBzcGFuIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5hY3Rpb24tbGlua3MgPiBzcGFuLmVuYWJsZWQge1xyXG4gICAgY29sb3I6ICM3YWQwM2E7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5hY3Rpb24tbGlua3MgPiBzcGFuLmRpc2FibGVkIHtcclxuICAgIGNvbG9yOiAjRkYwMDAwO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAuYWN0aW9uLWxpbmtzIC5wcmljZSB7XHJcbiAgICBjb2xvcjogIzQzOWZkZjtcclxuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XHJcbiAgICBmb250LXNpemU6IDE1cHg7XHJcbiAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5hY3Rpb24tbGlua3MgLnByaWNlIGRlbCB7XHJcbiAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgY29sb3I6ICNhYWE7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5wbHVnaW4taWNvbiBpbWcge1xyXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3MtYnVuZGxlLWFjdGl2YXRlLWFkZC1vbnMuc3Bpbm5lciB7XHJcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLXZlcnNpb24ge1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1hZGQtb25zLXdyYXAgI25hbWUge1xyXG4gICAgd2lkdGg6IDMwJTtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgcDpiZWZvcmUge1xyXG4gICAgY29udGVudDogJyc7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1hZGQtb25zLXdyYXAgLnRoZW1lIHtcclxuICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3MtYWRkLW9ucy13cmFwIC50aGVtZS1jb250cm9scyB7XHJcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLWFkZC1vbnMtd3JhcCAudGhlbWUgaDIge1xyXG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLWFkZC1vbnMtd3JhcCAudGhlbWUgaW1nIHtcclxuICAgIHdpZHRoOiA0MDBweDtcclxuICAgIGhlaWdodDogYXV0bztcclxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIG1hcmdpbjogMCAyMHB4IDAgMDtcclxufVxyXG5cclxuLnJlbGF0ZWRfdGhlbWVzIHtcclxuICAgIC5wbHVnaW4tY2FyZC10b3Age1xyXG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xyXG4gICAgfVxyXG4gICAgLnRoZW1lLWNvbnRlbnQge1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIH1cclxuICAgIC5pbWFnZS10aHVtYm5haWwgaW1nIHtcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgIH1cclxuICAgIC50aGVtZS1kZXNjcmlwdGlvbiB7XHJcbiAgICAgICAgbWFyZ2luOiAwIDAgMjVweCAwO1xyXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XHJcbiAgICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcclxuICAgICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDY7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xyXG4gICAgICAgIG1heC1oZWlnaHQ6IDkuNmVtO1xyXG5cclxuICAgIH1cclxuICAgIC50aGVtZS10aXRsZSB7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMDBweDtcclxuICAgICAgICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAgICAgICBtaW4taGVpZ2h0OiAzLjJlbTtcclxuICAgIH1cclxuICAgIC50aGVtZS10aXRsZSBhIHtcclxuXHJcbiAgICAgICAgY29sb3I6ICM1NDU0NTQ7XHJcbiAgICB9XHJcbiAgICAudGhlbWUtcmF0aW5nIHtcclxuICAgICAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgfVxyXG4gICAgLnN0YXItcmF0aW5nIHtcclxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB9XHJcbiAgICAuY291bnQtcmF0aW5nIHtcclxuICAgICAgICBmb250LXNpemU6IDE1cHg7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIHRvcDogMnB4O1xyXG4gICAgfVxyXG4gICAgLnRoZW1lLWRldGFpbCB7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIHJpZ2h0OiAzcHg7XHJcbiAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcclxuXHJcbiAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudGhlbWUtcHJpY2Uge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDtcclxuICAgICAgICAgICAgY29sb3I6ICM1NDU0NTQ7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC50aGVtZS1mb290ZXIge1xyXG4gICAgICAgIGNsZWFyOiBib3RoO1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMjBweDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IC0yMHB4O1xyXG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcclxuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcclxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgfVxyXG59XHJcblxyXG5AbWVkaWEgKG1heC13aWR0aDogMTI4MHB4KSB7XHJcbiAgICAubGVhcm4tcHJlc3MtYWRkLW9ucyA+IGxpIHtcclxuICAgICAgICAvKndpZHRoOiAzMy4zMyU7Ki9cclxuICAgIH1cclxufVxyXG5cclxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzgycHgpIHtcclxuICAgIC5sZWFybi1wcmVzcy1hZGQtb25zIC5lbmFibGUtbm93IHtcclxuICAgICAgICBwYWRkaW5nOiA1cHg7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC5sZWFybi1wcmVzcy1hZGQtb25zIC5lbmFibGUtbm93OmJlZm9yZSB7XHJcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmxlYXJuLXByZXNzLWFkZC1vbnMgLmVuYWJsZS1ub3c6YmVmb3JlIHtcclxuICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAjbGVhcm4tcHJlc3MtYWRkLW9ucy13cmFwIC50aGVtZSBpbWcge1xyXG4gICAgICAgIHdpZHRoOiA1MCU7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcclxuICAgIC5sZWFybi1wcmVzcy1hZGQtb25zID4gbGkge1xyXG4gICAgICAgIC8qd2lkdGg6IDUwJTsqL1xyXG4gICAgfVxyXG5cclxuICAgIC5sZWFybi1wcmVzcy1hZGQtb25zID4gbGkgLmNvbHVtbi1uYW1lIHtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1MHB4O1xyXG4gICAgfVxyXG59XHJcblxyXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcclxuICAgIC5sZWFybi1wcmVzcy1hZGQtb25zID4gbGkge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgfVxyXG5cclxuICAgICNsZWFybi1wcmVzcy1hZGQtb25zLXdyYXAgLnRoZW1lIGltZyB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiovXHJcblxyXG4jbHByLXF1aXotcXVlc3Rpb25zLXdyYXAgLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZSB7XHJcbiAgICBoZWlnaHQ6IDI5cHg7XHJcbiAgICBwYWRkaW5nLXRvcDogM3B4O1xyXG4gICAgZm9udC1zaXplOiAxNHB4O1xyXG59XHJcblxyXG4ucG9zdC10aXRsZS5jb2x1bW4tdGl0bGUge1xyXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XHJcbn1cclxuXHJcbi5scHItcm93LWFjdGlvbnMge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcblxyXG4ubHByLXJvdy1hY3Rpb24tZHJvcGRvd24ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAxMDAlO1xyXG4gICAgbGVmdDogMDtcclxuICAgIG1pbi13aWR0aDogMTUwcHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4ubHByLXJvdy1hY3Rpb24tZHJvcGRvd24gPiBsaSB7XHJcbiAgICBtYXJnaW46IDA7XHJcbn1cclxuXHJcbi5scHItcm93LWFjdGlvbi1kcm9wZG93biA+IGxpID4gYSB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHBhZGRpbmc6IDVweDtcclxufVxyXG5cclxuLmxwci1yb3ctYWN0aW9ucyA+IGEge1xyXG4gICAgcGFkZGluZy1yaWdodDogMTVweDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLmxwci1yb3ctYWN0aW9ucyA+IGE6YWZ0ZXIge1xyXG4gICAgd2lkdGg6IDA7XHJcbiAgICBoZWlnaHQ6IDA7XHJcbiAgICBib3JkZXI6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlci10b3AtY29sb3I6ICNEREQ7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgdG9wOiA2cHg7XHJcbn1cclxuXHJcbi5scHItcm93LWFjdGlvbnM6aG92ZXIgPiB1bCB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxufVxyXG5cclxuLyogYWRkb25zIHBhZ2UgKi9cclxuI2xwci1hZGQtb25zLXdyYXBwZXIge1xyXG59XHJcblxyXG4jbHByLWFkZC1vbnMtd3JhcHBlciAubHByLWFkZC1vbi1ibG9jayB7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNEREQ7XHJcbiAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcclxuICAgIHdpZHRoOiA1MCU7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbn1cclxuXHJcbiNscHItYWRkLW9ucy13cmFwcGVyIC5scHItYWRkLW9uLWJsb2NrOmFmdGVyIHtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBjbGVhcjogYm90aDtcclxufVxyXG5cclxuI2xwci1hZGQtb25zLXdyYXBwZXIgLmxwci1hZG1pbi10aHVtYm5haWwge1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICB3aWR0aDogMjAwcHg7XHJcbn1cclxuXHJcbiNscHItYWRkLW9ucy13cmFwcGVyIC5scHItYWRtaW4tdGh1bWJuYWlsIGltZyB7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG59XHJcblxyXG4jbHByLWFkZC1vbnMtd3JhcHBlciAubHByLWFkZC1vbi1pbmZvIHtcclxuICAgIG1hcmdpbi1sZWZ0OiAyMjBweDtcclxuICAgIG1hcmdpbi1yaWdodDogMjBweDtcclxufVxyXG5cclxuI2xwci1hZGQtb25zLXdyYXBwZXIgLmxwci1hZGQtb24taW5mbyA+IGgzIHtcclxuICAgIG1hcmdpbi10b3A6IDA7XHJcbn1cclxuXHJcbiNscHItYWRkLW9ucy13cmFwcGVyIC5scHItYWRkLW9uLWluZm8gPiBoMyA+IHNwYW4ge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgcGFkZGluZzogMCA1cHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjN0FEM0ZBO1xyXG4gICAgY29sb3I6ICNGRkY7XHJcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XHJcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcclxuICAgIGZvbnQtc2l6ZTogMTJweDtcclxuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XHJcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG59XHJcblxyXG4jbHByLWFkZC1vbnMtd3JhcHBlciAubHByLWFkZC1vbi1hY3Rpb24ge1xyXG4gICAgZmxvYXQ6IHJpZ2h0O1xyXG4gICAgd2lkdGg6IDEwMHB4O1xyXG59XHJcblxyXG4vKiB0b2dnbGUgKi9cclxuaW5wdXQubHByLWZhbmN5LWNoZWNrYm94IHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi5scHItZmFuY3ktY2hlY2tib3gudG9nIHtcclxuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XHJcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgNHB4IHJnYmEoMCwgMCwgMCwgLjYpO1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICBoZWlnaHQ6IDE5cHg7XHJcbiAgICB3aWR0aDogNTBweDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIGZvbnQ6IDExcHgvMThweCBhcmlhbDtcclxuICAgIGJhY2tncm91bmQ6ICNjY2M7XHJcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlO1xyXG4gICAgLW8tdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlO1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi5scHItZmFuY3ktY2hlY2tib3gudG9nOmFmdGVyIHtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgYm94LXNoYWRvdzogMCAycHggMnB4IHJnYmEoMCwgMCwgMCwgLjYpO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMjBweDtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgaGVpZ2h0OiAxNXB4O1xyXG4gICAgd2lkdGg6IDE1cHg7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAycHg7XHJcbiAgICBsZWZ0OiAycHg7XHJcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTtcclxuICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlO1xyXG4gICAgLW8tdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlO1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlO1xyXG59XHJcblxyXG4ubHByLWZhbmN5LWNoZWNrYm94LnRvZzpiZWZvcmUge1xyXG4gICAgY29udGVudDogJ09GRic7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICByaWdodDogN3B4O1xyXG4gICAgdG9wOiAxcHg7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxufVxyXG5cclxuLmxwci1mYW5jeS1jaGVja2JveC50b2c6aG92ZXI6YWZ0ZXIge1xyXG4gICAgbGVmdDogNXB4O1xyXG59XHJcblxyXG4ubHByLWZhbmN5LWNoZWNrYm94LnRvZy5vbjpiZWZvcmUge1xyXG4gICAgY29udGVudDogJ09OJztcclxuICAgIHJpZ2h0OiAyOHB4O1xyXG59XHJcblxyXG4ubHByLWZhbmN5LWNoZWNrYm94LnRvZy5vbiB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjMDVCM0ZGO1xyXG59XHJcblxyXG4ubHByLWZhbmN5LWNoZWNrYm94LnRvZy5vbjphZnRlciB7XHJcbiAgICBsZWZ0OiAzM3B4O1xyXG59XHJcblxyXG4ubHByLWZhbmN5LWNoZWNrYm94LnRvZy5vbjpob3ZlcjphZnRlciB7XHJcbiAgICBsZWZ0OiAzMHB4O1xyXG59XHJcblxyXG4vKiovXHJcbi5jbGVhcmZpeDphZnRlciB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgY2xlYXI6IGJvdGg7XHJcbn1cclxuXHJcbi5jbGVhciB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGNsZWFyOiBib3RoO1xyXG4gICAgaGVpZ2h0OiAwO1xyXG59XHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4ubHAtbGlzdC1vcHRpb25zIHtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbiB7XHJcblxyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24ubHAtbGlzdC1vcHRpb24tZW1wdHkgdGQsXHJcbi5scC1saXN0LW9wdGlvbi5scC1saXN0LW9wdGlvbi1lbXB0eSB0aCB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJFOUU5O1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24ubHAtbGlzdC1vcHRpb24tZW1wdHkgLmxwLWFuc3dlci1jaGVjayBpbnB1dCxcclxuLmxwLWxpc3Qtb3B0aW9uLmxwLWxpc3Qtb3B0aW9uLWVtcHR5IC5scC1saXN0LW9wdGlvbi1hY3Rpb25zIGkge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uIC5jbG0ge1xyXG5cclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uIC5scC1pdGVtLWNoZWNrYm94IHtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uIC5scC1pdGVtLW5hbWUge1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24gLmxwLWl0ZW0tYWN0aW9ucyB7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbnMgdGhlYWQgdGgge1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0ZGRjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNFQUVBRUE7XHJcbiAgICBwYWRkaW5nOiAxMHB4O1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuXHJcbiAgICBjb2xvcjogIzAwQTBEMjtcclxuXHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbnMgdGJvZHkgdGgsXHJcbi5scC1saXN0LW9wdGlvbnMgdGJvZHkgdGQge1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0ZGRjtcclxuICAgIHBhZGRpbmc6IDEwcHggMTBweDtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1O1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb25zIC5scC1hbnN3ZXItY2hlY2sge1xyXG4gICAgd2lkdGg6IDEwMHB4O1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb25zIHRib2R5IHRoIGlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxyXG4ubHAtbGlzdC1vcHRpb25zIHRib2R5IHRkIGlucHV0W3R5cGU9XCJ0ZXh0XCJdIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb25zIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciB7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbnMgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHRkIHtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uLy4uL2ltYWdlcy9zdHJpcGUucG5nXCIpO1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24gLmxwLWFuc3dlci10ZXh0IHtcclxuICAgIGNvbG9yOiAjNzc3O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uIC5scC1hbnN3ZXItdGV4dDphZnRlciB7XHJcbiAgICBmb250LWZhbWlseTogZGFzaGljb25zO1xyXG4gICAgY29udGVudDogJ1xcZjQ2NCc7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbiAubHAtYW5zd2VyLXRleHQ6Zm9jdXMsXHJcbi5scC1saXN0LW9wdGlvbjpob3ZlciAubHAtYW5zd2VyLXRleHQge1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbjpob3ZlciAubHAtYW5zd2VyLXRleHQge1xyXG4gICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XHJcbn1cclxuXHJcbi5scC1saXN0LW9wdGlvbi1hY3Rpb25zIHtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIGNvbG9yOiAjMDBBMEQyO1xyXG59XHJcblxyXG4ubHAtbGlzdC1vcHRpb24tYWN0aW9ucy5scC1tb3ZlLWxpc3Qtb3B0aW9uIHtcclxuICAgIGN1cnNvcjogbW92ZTtcclxufVxyXG5cclxuLmxwLWxpc3Qtb3B0aW9uLWFjdGlvbnM6aG92ZXIge1xyXG4gICAgY29sb3I6ICMxNTYwNzc7XHJcbn1cclxuXHJcbi8qIFF1ZXN0aW9uIG1ldGEgYm94ICovXHJcbiNxdWVzdGlvbl9hbnN3ZXIgLnJ3bWItcXVlc3Rpb24td3JhcHBlciB7XHJcbiAgICBtYXJnaW46IDEycHggMCAwIDA7XHJcbn1cclxuXHJcbi5xdWVzdGlvbi1ib3R0b20tYWN0aW9ucyA+ICoge1xyXG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi8qIFF1aXogbWV0YSBib3ggKi9cclxuYm9keS5wb3N0LXR5cGUtbHBfcXVpeiAjcXVlc3Rpb25zLFxyXG5ib2R5LnBvc3QtdHlwZS1scF9xdWVzdGlvbiAjcXVlc3Rpb25fYW5zd2VyXyB7XHJcbiAgICBib3JkZXI6IG5vbmU7XHJcbiAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbn1cclxuXHJcbmJvZHkucG9zdC10eXBlLWxwX3F1aXogI3F1ZXN0aW9ucyAuaGFuZGxlZGl2LFxyXG5ib2R5LnBvc3QtdHlwZS1scF9xdWVzdGlvbiAjcXVlc3Rpb25fYW5zd2VyXyAuaGFuZGxlZGl2IHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbmJvZHkucG9zdC10eXBlLWxwX3F1aXogI3F1ZXN0aW9ucyAuaG5kbGUsXHJcbmJvZHkucG9zdC10eXBlLWxwX3F1ZXN0aW9uICNxdWVzdGlvbl9hbnN3ZXJfIC5obmRsZSB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG5ib2R5LnBvc3QtdHlwZS1scF9xdWl6ICNxdWVzdGlvbnMgLmluc2lkZSxcclxuYm9keS5wb3N0LXR5cGUtbHBfcXVlc3Rpb24gI3F1ZXN0aW9uX2Fuc3dlcl8gLmluc2lkZSB7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWl6LXF1ZXN0aW9ucy1oZWFkaW5nIC5xdWVzdGlvbnMtdG9nZ2xlIHtcclxuICAgIGZsb2F0OiByaWdodDtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWl6LXF1ZXN0aW9ucy1oZWFkaW5nIC5xdWVzdGlvbnMtdG9nZ2xlIGE6aG92ZXIge1xyXG4gICAgY29sb3I6ICMwMGEwZDI7XHJcbn1cclxuXHJcbiNxdWVzdGlvbnMgI2xlYXJuLXByZXNzLWRyb3Bkb3duLXF1ZXN0aW9ucyB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuXHJcbiNxdWVzdGlvbnMgI2xlYXJuLXByZXNzLWRyb3Bkb3duLXF1ZXN0aW9ucyA+IHVsIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMTAwJTtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0VFRTtcclxuICAgIGJvcmRlci10b3A6IG5vbmU7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgei1pbmRleDogNTA7XHJcbn1cclxuXHJcbiNxdWVzdGlvbnMgI2xlYXJuLXByZXNzLWRyb3Bkb3duLXF1ZXN0aW9ucyA+IHVsID4gbGkge1xyXG4gICAgbWFyZ2luOiAwO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zICNsZWFybi1wcmVzcy1kcm9wZG93bi1xdWVzdGlvbnMgPiB1bCBsaSA+IGEge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBwYWRkaW5nOiA1cHg7XHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAjbGVhcm4tcHJlc3MtcXVlc3Rpb24tbmFtZSB7XHJcbiAgICBmb250LXNpemU6IDE4cHg7XHJcbiAgICBtaW4td2lkdGg6IDM1MHB4O1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgIGJvcmRlci1jb2xvcjogI0VFRTtcclxuICAgIGNvbG9yOiAjQkJCO1xyXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxufVxyXG5cclxuI3F1ZXN0aW9ucyAjbGVhcm4tcHJlc3MtdG9nZ2xlLXF1ZXN0aW9ucyB7XHJcbiAgICBoZWlnaHQ6IDMycHg7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNFRUU7XHJcbiAgICB3aWR0aDogMzJweDtcclxuICAgIG1hcmdpbi1sZWZ0OiAtNHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgZm9udC1zaXplOiAzMHB4O1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGNvbG9yOiAjQ0NDO1xyXG4gICAgYm9yZGVyLWxlZnQ6IG5vbmU7XHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zICNsZWFybi1wcmVzcy10b2dnbGUtcXVlc3Rpb25zOmhvdmVyIHtcclxuICAgIGNvbG9yOiAjQUFBQUFBO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zICNsZWFybi1wcmVzcy1idXR0b24tYWRkLXF1ZXN0aW9uIHtcclxuICAgIF92ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIGlucHV0W25hbWU9XCJscC1uZXctcXVlc3Rpb24tbmFtZVwiXSB7XHJcblxyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWVzdGlvbi1hY3Rpb25zIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkY7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xyXG4gICAgcGFkZGluZzogMTBweDtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiA5OTk7XHJcbn1cclxuXHJcbiNxdWVzdGlvbnMgLnF1aXotcXVlc3Rpb24taGVhZCAucXVpei1xdWVzdGlvbi1hY3Rpb25zIHtcclxuICAgIGZsb2F0OiByaWdodDtcclxuICAgIG1hcmdpbjogMXB4IDA7XHJcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgICBwYWRkaW5nLXRvcDogMnB4O1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWl6LXF1ZXN0aW9uLWhlYWQgLnF1aXotcXVlc3Rpb24tYWN0aW9ucyBhIHtcclxuICAgIG1hcmdpbjogMCAzcHg7XHJcbiAgICBjb2xvcjogQHByaW1hcnktaWNvbi1jb2xvcjtcclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICBib3gtc2hhZG93OiBub25lO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWl6LXF1ZXN0aW9uLWhlYWQgLnF1aXotcXVlc3Rpb24tYWN0aW9ucyBhOmhvdmVyIHtcclxuICAgIGNvbG9yOiAjMDBhMGQyO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWl6LXF1ZXN0aW9uLWhlYWQ6aG92ZXIgLnF1aXotcXVlc3Rpb24tYWN0aW9ucyB7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zIC5xdWl6LXF1ZXN0aW9uLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcclxuICAgIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uLy4uL2ltYWdlcy9zdHJpcGUucG5nXCIpO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XHJcbn1cclxuXHJcbiNxdWVzdGlvbnMgLnF1ZXN0aW9uLW5hbWUge1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgIHBhZGRpbmctbGVmdDogMDtcclxuICAgIHdpZHRoOiA3MCU7XHJcbiAgICBjb2xvcjogIzc3NztcclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbn1cclxuXHJcbiNxdWVzdGlvbnMgLnF1aXotcXVlc3Rpb24taWNvbiBpbWcge1xyXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiBhdXRvO1xyXG59XHJcblxyXG4jcXVlc3Rpb25zICNsZWFybi1wcmVzcy1kcm9wZG93bi1xdWVzdGlvbnMgLmFkZGVkIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi5scHItY3VycmljdWx1bS1zZWN0aW9uID4gaDMge1xyXG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4ubHByLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzIC5scHItYWN0aW9uIHtcclxuICAgIHRvcDogMDtcclxuICAgIHJpZ2h0OiAwO1xyXG59XHJcblxyXG4ubHByLWN1cnJpY3VsdW0tc2VjdGlvbi5scHItZW1wdHkgPiBoMyB7XHJcbiAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcclxufVxyXG5cclxuLmxwci1jdXJyaWN1bHVtLXNlY3Rpb24ubHByLWVtcHR5IC5scHItYWN0aW9uIHtcclxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufVxyXG5cclxuLmxwci1jb3Vyc2UtY3VycmljdWx1bSBidXR0b24gc3BhbiB7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLXN0YXRpc3RpYyB7XHJcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtY2hhcnQge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtY2hhcnQgY2FudmFzIHtcclxuICAgIGhlaWdodDogNzB2aDtcclxuICAgIHdpZHRoOiAxMDB2dztcclxufVxyXG5cclxuLmNoYXJ0LWJ1dHRvbnMgZm9ybSB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG59XHJcblxyXG4uY2hhcnQtYnV0dG9ucyBmb3JtIGlucHV0W3R5cGU9XCJ0ZXh0XCJdIHtcclxuICAgIHdpZHRoOiAxMDVweDtcclxuICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIHBhZGRpbmc6IDRweDtcclxufVxyXG5cclxuLmNoYXJ0LWJ1dHRvbnMgZm9ybSBzcGFuIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIHBhZGRpbmc6IDVweDtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWNoYXJ0LmxvYWRpbmc6YWZ0ZXIge1xyXG4gICAgY29udGVudDogJyc7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICB6LWluZGV4OiAxMDtcclxuICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICBvcGFjaXR5OiAwLjU7XHJcbn1cclxuXHJcbi5jaGFydC1kZXNjcmlwdGlvbiB7XHJcblxyXG59XHJcblxyXG4uY2hhcnQtZGVzY3JpcHRpb24gbGkge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xyXG59XHJcblxyXG4uY2hhcnQtZGVzY3JpcHRpb24gbGk6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgd2lkdGg6IDEwcHg7XHJcbiAgICBoZWlnaHQ6IDEwcHg7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiA1cHg7XHJcbn1cclxuXHJcbi5jaGFydC1kZXNjcmlwdGlvbiBsaSBzcGFuIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG5cclxuLmNoYXJ0LWRlc2NyaXB0aW9uIGxpLmFsbDpiZWZvcmUge1xyXG4gICAgYmFja2dyb3VuZDogIzJGQTdGRjtcclxufVxyXG5cclxuLmNoYXJ0LWRlc2NyaXB0aW9uIGxpLmluc3RydWN0b3JzOmJlZm9yZSB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjRUFDNzlCO1xyXG59XHJcblxyXG4uY2hhcnQtZGVzY3JpcHRpb24gbGkuc3R1ZGVudHM6YmVmb3JlIHtcclxuICAgIGJhY2tncm91bmQ6ICNENEQwQ0I7XHJcbn1cclxuXHJcbi5scHItc3RhdHMtdGltZSB7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5scHItaGlkZGVuIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbiNscHItY3VzdG9tLXRpbWUge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgdG9wOiA0cHg7XHJcbn1cclxuXHJcbi8qIGJsb2NrIHBhZ2UgKi9cclxuI2xwci1wYWdlLWJsb2NrIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICByaWdodDogMDtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XHJcbiAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgei1pbmRleDogOTk5OTtcclxufVxyXG5cclxuI2Zvcm0tcXVpY2stYWRkLWxlc3Nvbi1saW5rIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxufVxyXG5cclxuI19scHJfY291cnNlX3ByaWNlX2Rlc2NyaXB0aW9uID4gc3BhbiB7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIGZvbnQtc2l6ZTogMTVweDtcclxufVxyXG5cclxuLmxwci1pZ25vcmUsIC5scHItaWdub3JlOmhvdmVyIHtcclxuICAgIGNvbG9yOiAjZGQzZDM2O1xyXG59XHJcblxyXG4ubHByLWlnbm9yZTpob3ZlciB7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbn1cclxuXHJcbi5scHItcXVpY2stYWRkLXBhZ2UtaW5saW5lLFxyXG4ubHByLXF1aWNrLWFjdGlvbnMtaW5saW5lIHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcclxufVxyXG5cclxuI2xwci10b2dnbGUtcXVpei1tb2RlIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDc3RkY7XHJcbiAgICBwYWRkaW5nOiAzcHg7XHJcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgY29sb3I6ICNGRkY7XHJcbn1cclxuXHJcbi5jb2x1bW4tbnVtX29mX3F1ZXN0aW9uIHtcclxuICAgIHdpZHRoOiAxNTBweDtcclxufVxyXG5cclxuLmxwLXNlYXJjaC1pdGVtcyBpbnB1dFtuYW1lPVwibHAtaXRlbS1uYW1lXCJdIHtcclxuICAgIHdpZHRoOiA1MDBweDtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1kcm9wZG93biB7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDI4cHggIWltcG9ydGFudDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHotaW5kZXg6IDk5OTk4O1xyXG59XHJcblxyXG4ubHAtYnV0dG9uLWRyb3Bkb3duIC5scC1kcm9wZG93bi1sYWJlbCB7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XHJcbn1cclxuXHJcbi5scC1idXR0b24tZHJvcGRvd24gLmxwLWRyb3Bkb3duLWFycm93IHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIC8qIHdpZHRoOiAyMHB4OyAqL1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgcGFkZGluZzogMCAxMHB4O1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAtMXB4O1xyXG4gICAgYm90dG9tOiAtMXB4O1xyXG59XHJcblxyXG4ubHAtYnV0dG9uLWRyb3Bkb3duIC5scC1kcm9wZG93bi1pdGVtcyB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICAvKiB3aWR0aDogMTAwJTsgKi9cclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkY7XHJcbiAgICB0b3A6IDEwMCU7XHJcbiAgICBtYXJnaW4tdG9wOiAxcHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xyXG4gICAgcmlnaHQ6IC0xcHg7XHJcbiAgICAvKiByaWdodDogLTFweDsgKi9cclxuICAgIHdpZHRoOiAyMDBweDtcclxuICAgIHotaW5kZXg6IDk5OTk5OTk7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4ubHAtYnV0dG9uLWRyb3Bkb3duIC5scC1kcm9wZG93bi1pdGVtcyBsaSB7XHJcbiAgICBtYXJnaW46IDA7XHJcbn1cclxuXHJcbi5scC1idXR0b24tZHJvcGRvd24gLmxwLWRyb3Bkb3duLWl0ZW1zIGxpIGEge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBwYWRkaW5nOiAxMHB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxufVxyXG5cclxuLmxwLWJ1dHRvbi1kcm9wZG93biAubHAtZHJvcGRvd24taXRlbXMgbGkgYTpob3ZlciB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1O1xyXG59XHJcblxyXG4ubHAtYnV0dG9uLWRyb3Bkb3duOm5vdCguZGlzYWJsZWQpOmhvdmVyIHVsLFxyXG4ubHAtYnV0dG9uLWRyb3Bkb3duOm5vdCguZGlzYWJsZWQpIHVsOmhvdmVyIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG59XHJcblxyXG4uY3VycmljdWx1bS1zZWN0aW9uLmxwLWVtcHR5LXNlY3Rpb24ge1xyXG59XHJcblxyXG4uY3VycmljdWx1bS1zZWN0aW9uIC5scC1jaGVjay1pdGVtcyxcclxuLmN1cnJpY3VsdW0tc2VjdGlvbiAubHAtY2hlY2staXRlbXM6aG92ZXIge1xyXG4gICAgcGFkZGluZy1sZWZ0OiA1cHg7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAzNHB4O1xyXG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgYm94LXNoYWRvdzogbm9uZTtcclxufVxyXG5cclxuLmNvbHVtbi1mb3JtYXQsXHJcbi5jb2x1bW4taXNfcHJldmlld2FibGUsXHJcbi5jb2x1bW4tdGF4b25vbXktcXVlc3Rpb24tdGFnIHtcclxuICAgIHdpZHRoOiAxMCU7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5wbHVnaW4tY2FyZCAuaW5zdGFsbC1ub3c6YmVmb3JlLFxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmRpc2FibGUtbm93OmJlZm9yZSxcclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi1jYXJkIC5lbmFibGUtbm93OmJlZm9yZSB7XHJcbiAgICBtYXJnaW46IDNweCA1cHggMCAtMnB4O1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgZm9udDogNDAwIDIwcHgvMSBkYXNoaWNvbnM7XHJcbiAgICAvKnNwZWFrOiBub25lOyovXHJcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcclxuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmluc3RhbGwtbm93OmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnXFxmMTA2JztcclxuICAgIGNvbG9yOiAjMDA3M2FhO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmRpc2FibGUtbm93OmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnXFxmMTQ3JztcclxuICAgIGNvbG9yOiAjMDA3M2FhO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtYWRkLW9ucyAucGx1Z2luLWNhcmQgLmVuYWJsZS1ub3c6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdcXGYzMzUnO1xyXG4gICAgY29sb3I6ICNkNTRlMjE7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5wbHVnaW4tY2FyZCAuZGlzYWJsZS1ub3c6aG92ZXI6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6ICdcXGYzMzUnO1xyXG4gICAgY29sb3I6ICNkNTRlMjE7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5wbHVnaW4tY2FyZCAuZW5hYmxlLW5vdzpob3ZlcjpiZWZvcmUge1xyXG4gICAgY29udGVudDogJ1xcZjE0Nyc7XHJcbiAgICBjb2xvcjogIzAwNzNhYTtcclxufVxyXG5cclxuLmxlYXJuLXByZXNzLWFkZC1vbnMgLnBsdWdpbi1jYXJkIC5idXR0b24td29ya2luZzpiZWZvcmUge1xyXG4gICAgY29udGVudDogJ1xcZjQ2MycgIWltcG9ydGFudDtcclxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiBscC1zcGlubmVyIDJzIGluZmluaXRlIGxpbmVhcjtcclxuICAgIGFuaW1hdGlvbjogbHAtc3Bpbm5lciAycyBpbmZpbml0ZSBsaW5lYXI7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1hZGQtb25zIC5wbHVnaW4tY2FyZCAuYnV0dG9uLXdvcmtpbmcgc3BhbiB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4ubHAtYnV0dG9uLWFjdGlvbnMgYSB7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtcXVpY2stY29uZmlybSB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB6LWluZGV4OiA5OTk5O1xyXG4gICAgY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTtcclxuICAgIHBhZGRpbmc6IDJweCA4cHg7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICBsZWZ0OiAtMzkuNjI1cHg7XHJcbiAgICB0b3A6IDI0cHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQzkwMjAyO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtcXVpY2stY29uZmlybTpob3ZlcixcclxuLmxlYXJuLXByZXNzLXF1aWNrLWNvbmZpcm06aG92ZXI6YmVmb3JlIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNkNzNiMDA7XHJcbn1cclxuXHJcbi5sZWFybi1wcmVzcy1xdWljay1jb25maXJtOmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiAnJztcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgLyogYm9yZGVyOiAxcHggc29saWQ7ICovXHJcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XHJcbiAgICB3aWR0aDogN3B4O1xyXG4gICAgaGVpZ2h0OiA3cHg7XHJcbiAgICB0b3A6IC0zcHg7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQzkwMjAyO1xyXG4gICAgcmlnaHQ6IDdweDtcclxufVxyXG5cclxuLyogY291cnNlICovXHJcbi53cC1jb3JlLXVpIC5tZXRhX2JveF9hZGRfc2VjdGlvbixcclxuLndwLWNvcmUtdWkgLm1ldGFfYm94X2FkZF9sZXNzb24ge1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG59XHJcblxyXG4uaGlkZSB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4uaGFuZGxlLmRhc2hpY29ucyB7XHJcbiAgICBjdXJzb3I6IG1vdmU7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XHJcbn1cclxuXHJcbi5tZXRhX2JveF9yZW1vdmUgLmRhc2hpY29ucyB7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IGluaXRpYWw7XHJcbn1cclxuXHJcbi5tZXRhX2JveF9jb3Vyc2VfbGVzc29uX3F1aXogbGkgaW5wdXQsXHJcbi5tZXRhX2JveF9jb3Vyc2VfbGVzc29uX3F1aXogbGkgc2VsZWN0IHtcclxuICAgIG1pbi13aWR0aDogMjUwcHg7XHJcbn1cclxuXHJcbi5yd21iLW1ldGEtYm94IHtcclxuICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbiAgICBsYWJlbCB7XHJcbiAgICAgICAgY29sb3I6ICMyMjI7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgbWFyZ2luOiAwIDAgMTZweCAwO1xyXG4gICAgfVxyXG59XHJcbi5kZXNjcmlwdGlvbiB7XHJcbiAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbn1cclxuXHJcbi5kYXNoZWQtcGxhY2Vob2xkZXIge1xyXG4gICAgYm9yZGVyOiAycHggZGFzaGVkICM5OTk7XHJcbiAgICBwYWRkaW5nOiAxMHB4O1xyXG59XHJcblxyXG4vKlxyXG4gICAgVHVOTiBhZGRlZCAyMSAwMyAyMDE1XHJcbiAgICBNb2RpZmllZCAwMyBBcHIgMjAxNVxyXG4qL1xyXG4vKiBDb3Vyc2UgQ3VycmljdWx1bW4gbWV0YSBib3ggc2VjdGlvbiovXHJcblxyXG4vKioqKioqKioqKioqIHZlcnNpb24gMS4wICoqKioqKioqKioqKioqL1xyXG5cclxuLyogb3JkZXIgKi9cclxuLnBvc3QtdHlwZS1scF9vcmRlciAjcG9zdC1ib2R5LWNvbnRlbnQsXHJcbi5wb3N0LXR5cGUtbHBfb3JkZXIgI29yZGVyX2RldGFpbHMgLmhhbmRsZWRpdixcclxuLnBvc3QtdHlwZS1scF9vcmRlciAjb3JkZXJfZGV0YWlscyAuaG5kbGUge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxufVxyXG5cclxuLnBvc3QtdHlwZS1scF9vcmRlciAjc3VibWl0cG9zdCAubWlzYy1wdWItc2VjdGlvbiBsYWJlbCB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciB7XHJcbiAgICBtYXJnaW46IDE1cHg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItZGF0YS1udW1iZXIge1xyXG4gICAgZm9udC1zaXplOiAzNnB4O1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciA+IGgzIHtcclxuICAgIG1hcmdpbjogMCAwIDEwcHggMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItZGF0YS1kYXRlLFxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLm9yZGVyLWRhdGEtc3RhdHVzLFxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLm9yZGVyLWRhdGEtcGF5bWVudC1tZXRob2Qge1xyXG4gICAgZm9udC1zaXplOiAxOHB4O1xyXG4gICAgcGFkZGluZzogMCAwIDEwcHggMDtcclxufVxyXG5cclxuI2xlYXJuLXByZXNzLW9yZGVyIC51c2VyLWRpc3BsYXktbmFtZSxcclxuI2xlYXJuLXByZXNzLW9yZGVyIC51c2VyLWVtYWlsLFxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLnVzZXItaXAtYWRkcmVzcyB7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgbWFyZ2luOiAwIDAgMTBweCAwO1xyXG59XHJcblxyXG4jbGVhcm4tcHJlc3Mtb3JkZXIgLm9yZGVyLWl0ZW1zIHRhYmxlIHtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItaXRlbXMgdGFibGUgdGgsXHJcbiNsZWFybi1wcmVzcy1vcmRlciAub3JkZXItaXRlbXMgdGFibGUgdGQge1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XHJcbn1cclxuXHJcbiNsZWFybi1wcmVzcy1pbnN0YWxsLXNhbXBsZS1kYXRhLW5vdGljZSAuaW5zdGFsbC1zYW1wbGUtZGF0YS1sb2FkaW5nIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi8qIGxlYXJuX3ByZXNzX2Rhc2hib2FyZF93aWRnZXQgKi9cclxuI2xlYXJuX3ByZXNzX2Rhc2hib2FyZF93aWRnZXQge1xyXG4gICAgLnN1YnN1YnN1YiB7XHJcbiAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qIGlvcyBjaGVja2JveCAqL1xyXG4ubGVhcm4tcHJlc3MtY2hlY2tib3gge1xyXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG5pbnB1dC5yZWd1bGFyLXRleHRbaWRePVwibGVhcm4tcHJlc3MtZW1haWxzXCJdIHtcclxuICAgIHdpZHRoOiA5NyU7XHJcbn1cclxuXHJcbi5pb3MtdWktc2VsZWN0IHtcclxuICAgIGJhY2tncm91bmQ6ICNkZGRkZGQ7XHJcbiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcclxuICAgIGhlaWdodDogMThweDtcclxuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogOXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogOXB4O1xyXG4gICAgd2lkdGg6IDMwcHg7XHJcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UtaW4tb3V0O1xyXG4gICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLWluLW91dDtcclxuICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLWluLW91dDtcclxuICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UtaW4tb3V0O1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1pbi1vdXQ7XHJcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG59XHJcblxyXG4uaW9zLXVpLXNlbGVjdC5jaGVja2VkIHtcclxuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMThweCAjNmRkYzVmO1xyXG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMThweCAjNmRkYzVmO1xyXG59XHJcblxyXG4uaW9zLXVpLXNlbGVjdC5jaGVja2VkIC5pbm5lciB7XHJcbiAgICBsZWZ0OiAxM3B4O1xyXG59XHJcblxyXG4uaW9zLXVpLXNlbGVjdCAuaW5uZXIge1xyXG4gICAgd2lkdGg6IDE2cHg7XHJcbiAgICBoZWlnaHQ6IDE2cHg7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDFweDtcclxuICAgIGxlZnQ6IDFweDtcclxuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTAwJTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDM1MG1zIGN1YmljLWJlemllcigwLCAwLjg5LCAwLjQ0LCAxKTtcclxuICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDM1MG1zIGN1YmljLWJlemllcigwLCAwLjg5LCAwLjQ0LCAxKTtcclxuICAgIC1vLXRyYW5zaXRpb246IGFsbCAzNTBtcyBjdWJpYy1iZXppZXIoMCwgMC44OSwgMC40NCwgMSk7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMzUwbXMgY3ViaWMtYmV6aWVyKDAsIDAuODksIDAuNDQsIDEpO1xyXG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgM3B4IDRweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xyXG59XHJcblxyXG4ubHAtbGFiZWwtY291bnRlciB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3M0FBO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcclxuICAgIGhlaWdodDogMjFweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbWluLXdpZHRoOiAyMXB4O1xyXG4gICAgY29sb3I6ICNGRkY7XHJcbiAgICBwYWRkaW5nOiAwIDVweDtcclxufVxyXG5cclxuLmNvbHVtbi1udW1fb2ZfcXVlc3Rpb24sXHJcbi5jb2x1bW4tcHJldmlldyxcclxuLmNvbHVtbi1kdXJhdGlvbixcclxuLmNvbHVtbi10eXBlLFxyXG4uY29sdW1uLXRheG9ub215LXF1ZXN0aW9uX3RhZyB7XHJcbiAgICB3aWR0aDogMTAwcHg7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG59XHJcblxyXG4jbGVhcm5fcHJlc3NfZGFzaGJvYXJkX3dpZGdldCB7XHJcbiAgICAucnNzLXdpZGdldCB7XHJcbiAgICAgICAgdWwge1xyXG4gICAgICAgICAgICBsaSB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAucnNzLWRhdGUge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICAgfVxyXG59XHJcblxyXG4jbGVhcm5fcHJlc3NfZGFzaGJvYXJkX3dpZGdldF9zdGF0dXMge1xyXG4gICAgLmluc2lkZSB7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgIC5sZWFybnByZXNzLXN0YXRpc3RpYy1zdGF0dXMge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgICAgICBsaSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogNTAlO1xyXG4gICAgICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgICAgICAgICAgICA+IGEsID4gc3BhbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogOHB4IDEycHg7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAmLmZ1bGwtd2lkdGgge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZsb2F0OiBub25lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyOiBib3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlY2VjZWM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCAxMnB4O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA+IGEge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ubHAtdGVtcGxhdGUtb3ZlcnJpZGVzIHtcclxuICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbiAgICB0aGVhZCB0aCBoNCB7XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgfVxyXG4gICAgdGJvZHkgdGgge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgIHAge1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAycHggOHB4O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgICAgICAgICAgJi5jdXJyZW50IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDBhYWRjO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjRkZGXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLmxwLXRlbXBsYXRlLXZlcnNpb24ge1xyXG4gICAgICAgIHdpZHRoOiAxMDBweDtcclxuICAgICAgICAmLm91dGRhdGVkIHtcclxuICAgICAgICAgICAgY29sb3I6ICNGRjAwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICYudXAtdG8tZGF0ZSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMTg1OWZmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5scC10ZW1wbGF0ZS12ZXJzaW9uLCAubHAtY29yZS12ZXJzaW9uIHtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuICAgIC5scC10ZW1wbGF0ZS1maWxlIHtcclxuICAgICAgICB3aWR0aDogNTAlO1xyXG4gICAgfVxyXG4gICAgI2xlYXJuLXByZXNzLW5vLXRlbXBsYXRlcyB0ZCBwIHtcclxuICAgICAgICBjb2xvcjogIzAwNzNhYTtcclxuICAgIH1cclxufVxyXG5cclxuQC13ZWJraXQta2V5ZnJhbWVzIGxwLXNwaW5uZXIge1xyXG4gICAgMCUge1xyXG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcbiAgICB9XHJcbiAgICAxMDAlIHtcclxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XHJcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcclxuICAgIH1cclxufVxyXG5cclxuQGtleWZyYW1lcyBscC1zcGlubmVyIHtcclxuICAgIDAlIHtcclxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xyXG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xyXG4gICAgfVxyXG4gICAgMTAwJSB7XHJcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xyXG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5yd21iLXF1aXpfcXVlc3Rpb25zLXdyYXBwZXIge1xyXG4gICAgYmFja2dyb3VuZDogI0ZGRjtcclxuICAgIC5xdWl6LXF1ZXN0aW9ucy1oZWFkaW5nIHtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGOUY5Rjk7XHJcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgY29sb3I6ICM3Nzc7XHJcbiAgICAgICAgcGFkZGluZzogMTVweCAyMHB4IDIwcHg7XHJcbiAgICAgICAgZm9udC1zaXplOiAyNHB4O1xyXG4gICAgICAgIGEge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDMycHg7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMDA3M2FhO1xyXG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgICAgICAgICAmLmRhc2hpY29ucy1hcnJvdy1kb3duIHtcclxuICAgICAgICAgICAgICAgICY6OmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMGEwZDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAjbGVhcm4tcHJlc3MtbGlzdC1xdWVzdGlvbnMge1xyXG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgICAgICAucXVpei1xdWVzdGlvbiB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAjREREO1xyXG4gICAgICAgICAgICBtYXJnaW46IC0xcHggMCAwIDA7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwO1xyXG4gICAgICAgICAgICAmOm50aC1jaGlsZCgybisxKSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkNGQ0ZDO1xyXG4gICAgICAgICAgICAgICAgLnF1ZXN0aW9uLW5hbWUge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQ0ZDRkM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLnF1aXotcXVlc3Rpb24taGVhZCB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICAgICAgICAucXVpei1xdWVzdGlvbi1pY29uIHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjBweDtcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLnF1ZXN0aW9uLW5hbWUge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC5tb3ZlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzY2NjtcclxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHVybChcIi4uLy4uL2ltYWdlcy9vcGVuaGFuZC5jdXJcIikgNyA1LCBkZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogMTRweDtcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiA1cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEycHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMGEwZDI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgLnF1aXotcXVlc3Rpb24tYWN0aW9ucyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMjBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmRhc2hpY29ucy1hZG1pbi1wYWdlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6OmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC5xdWl6LXF1ZXN0aW9uLWNvbnRlbnQge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCAyMHB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ucG9zdC10eXBlLWxwX3F1aXoge1xyXG4gICAgI2dlbmVyYWwtc2V0dGluZ3Mge1xyXG4gICAgICAgIGEge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxlYXJuLXByZXNzLXRhYnMge1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICB1bC5oZWFkaW5nLXRhYnMge1xyXG4gICAgICAgIHBhZGRpbmc6IDAgMTBweDtcclxuICAgICAgICBtYXJnaW46IDBweDtcclxuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcclxuXHJcbiAgICAgICAgPiBsaSB7XHJcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE1cHggMTBweCAxNXB4IDEwcHg7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcclxuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNEREQ7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICByaWdodDogMDtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcclxuICAgICAgICAgICAgICAgIHRvcDogNTAlO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTEwcHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJi5hY3RpdmUge1xyXG4gICAgICAgICAgICAgICAgYSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLypmb250LXdlaWdodDogYm9sZDsqL1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAyYTNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcclxuICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgICAgICAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgICAgICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC02cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAtNnB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5sZWFybi1wcmVzcy10YWItY29udGVudCB7XHJcbiAgICAgICAgPiBsaSB7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweCAxMHB4IDIwcHg7XHJcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMTAwJTtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgfVxyXG4gICAgJi5pbml0aWFsaXplIHtcclxuICAgICAgICAubGVhcm4tcHJlc3MtdGFiLWNvbnRlbnQgPiBsaSB7XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmxlYXJuLXByZXNzLXRhYi1jb250ZW50IHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XHJcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiA1MCU7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMjUlO1xyXG4gICAgICAgICAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMjBweDtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiAjYTBhMGEwO1xyXG5cclxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiBsaW5lYXIgMXM7XHJcbiAgICAgICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcclxuICAgICAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBsZWFybi1wcmVzcy1tZXRhLWJveC10YWJzLWluaXRpYWxpemUtYW5pbWF0aW9uIGxpbmVhciAxcztcclxuICAgICAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XHJcbiAgICAgICAgICAgICAgICAtbW96LWFuaW1hdGlvbjogbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiBsaW5lYXIgMXM7XHJcbiAgICAgICAgICAgICAgICAtbW96LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xyXG4gICAgICAgICAgICAgICAgLW8tYW5pbWF0aW9uOiBsZWFybi1wcmVzcy1tZXRhLWJveC10YWJzLWluaXRpYWxpemUtYW5pbWF0aW9uIGxpbmVhciAxcztcclxuICAgICAgICAgICAgICAgIC1vLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xyXG4gICAgICAgICAgICAgICAgLW1zLWFuaW1hdGlvbjogbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiBsaW5lYXIgMXM7XHJcbiAgICAgICAgICAgICAgICAtbXMtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAmOm5vdCguaW5pdGlhbGl6ZSkge1xyXG4gICAgICAgIC5sZWFybi1wcmVzcy10YWItY29udGVudCA+IGxpIHtcclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgJi5hY3RpdmUge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICA+IHVsIHtcclxuICAgICAgICAmOmFmdGVyIHtcclxuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vKiBNZXRhYm94IFdpZGdldCAqL1xyXG4jd2lkZ2V0cy1yaWdodCAud2lkZ2V0cy1ob2xkZXItd3JhcCB7XHJcbiAgICAucndtYi1sYWJlbCB7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xyXG4gICAgfVxyXG4gICAgLnJ3bWItaW5wdXR7XHJcbiAgICAgICAgaW5wdXRbdHlwZT1cInRleHRcIl17XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5kZXNjcmlwdGlvbiB7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICAgICAgZm9udC1zaXplOiBzbWFsbDtcclxuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5vdXRkYXRlZC1yZWFkbW9yZS1saW5re1xyXG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG59XHJcblxyXG4ubGVhcm4tcHJlc3MtbWVzc2FnZS5ub3RpY2Utd2FybmluZyB7XHJcbiAgICBib3JkZXItbGVmdC1jb2xvcjogI2ZmYjkwMDtcclxufVxyXG5cclxuQGtleWZyYW1lcyBsZWFybi1wcmVzcy1tZXRhLWJveC10YWJzLWluaXRpYWxpemUtYW5pbWF0aW9uIHtcclxuICAgIDAlIHtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgfVxyXG4gICAgNTAlIHtcclxuICAgICAgICBvcGFjaXR5OiAxO1xyXG4gICAgfVxyXG4gICAgMTAwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxufVxyXG5cclxuQC1tb3ota2V5ZnJhbWVzIGxlYXJuLXByZXNzLW1ldGEtYm94LXRhYnMtaW5pdGlhbGl6ZS1hbmltYXRpb24ge1xyXG4gICAgMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbiAgICA1MCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICB9XHJcbiAgICAxMDAlIHtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5ALXdlYmtpdC1rZXlmcmFtZXMgbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiB7XHJcbiAgICAwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxuICAgIDUwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuICAgIDEwMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbkAtby1rZXlmcmFtZXMgbGVhcm4tcHJlc3MtbWV0YS1ib3gtdGFicy1pbml0aWFsaXplLWFuaW1hdGlvbiB7XHJcbiAgICAwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMDtcclxuICAgIH1cclxuICAgIDUwJSB7XHJcbiAgICAgICAgb3BhY2l0eTogMTtcclxuICAgIH1cclxuICAgIDEwMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbkAtbXMta2V5ZnJhbWVzIGxlYXJuLXByZXNzLW1ldGEtYm94LXRhYnMtaW5pdGlhbGl6ZS1hbmltYXRpb24ge1xyXG4gICAgMCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICB9XHJcbiAgICA1MCUge1xyXG4gICAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICB9XHJcbiAgICAxMDAlIHtcclxuICAgICAgICBvcGFjaXR5OiAwO1xyXG4gICAgfVxyXG59XHJcbiJdLCJmaWxlIjoiYWRtaW4vYWRtaW4uY3NzIn0= */
assets/css/admin/meta-box-course.css CHANGED
@@ -794,5 +794,3 @@ tr.focus .learn-press-dropdown-item-types > span.learn-press-icon {
794
  .lp-course-curriculum-toggle .expand{
795
  display: none;
796
  }*/
797
-
798
- /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkbWluL21ldGEtYm94LWNvdXJzZS5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxzQkFBdUIsTUFBSztBQUM1QixzQkFBdUI7RUFDbkIsd0JBQUE7O0FBRUo7RUFDQyxjQUFBO0VBQWUsbUJBQUE7O0FBRGhCLGtDQUVDO0VBQUUsZ0JBQUE7O0FBRUgsb0JBQ0k7QUFESixvQkFFSTtFQUNJLGtCQUFBOztBQUlSO0VBQ0ksbUJBQUE7O0FBREosMkJBRUk7RUFDSSxrQkFBQTs7QUFIUiwyQkFLSTtFQUNJLFdBQUE7RUFDQSxhQUFBOztBQVBSLDJCQVNJO0VBQ0ksZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7RUFDQSx3QkFBQTtFQUNBLGVBQUE7RUFDQSxrQkFBQTs7QUFJUjtFQUNJLFlBQUE7RUFDQSw2QkFBQTtFQUNBLGNBQUE7O0FBSUEsb0JBQUU7QUFBZSxvQkFBRTtFQUNmLFVBQUE7O0FBRlIsb0JBS0ksc0JBQXNCLDBCQUEwQixlQUFlLEdBQUU7RUFDN0Qsa0JBQUE7O0FBQ0Esb0JBRkosc0JBQXNCLDBCQUEwQixlQUFlLEdBQUUsbUJBRTVEO0VBQ0csZUFBQTs7QUFNSixvQkFGSixnQkFFSyxlQUNHLGFBQWE7RUFDVCxhQUFBOztBQU9oQixxQkFBc0I7RUFDbEIsa0JBQUE7RUFDQSxrQkFBQTtFQUNBLHNCQUFBO0VBQ0EsY0FBQTtFQUNBLHNCQUFBOztBQUdKLHFCQUFzQixvQkFBb0I7RUFDdEMsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTs7QUFHSixxQkFBc0Isb0JBQW9CO0VBQ3RDLFlBQUE7RUFDQSxxQkFBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTs7QUFHSixxQkFBc0Isb0JBQW9CLGNBQWM7RUFDcEQsd0JBQUE7RUFDQSxxQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTs7QUFJSixxQkFBc0I7RUFDbEIsU0FBQTtFQUNBLHNCQUFBO0VBQ0EsNkJBQUE7O0FBR0oscUJBQXNCO0VBQ2xC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QVFKLG9CQUNJO0FBREosb0JBRUk7RUFDSSxZQUFBO0VBQ0EsaUJBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBtZXRhIGJveCBjb3Vyc2UgKi9cbi5yd21iLWR1cmF0aW9uLXdyYXBwZXIgaW5wdXRbdHlwZT1cInRleHRcIl0sXG4ucndtYi1kdXJhdGlvbi13cmFwcGVyIHNlbGVjdCB7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuI2xlYXJuLXByZXNzLXRvZ2dsZS1jb3Vyc2UtcmVzdWx0c3tcblx0ZGlzcGxheTogYmxvY2s7bWFyZ2luLWJvdHRvbToxMHB4O1xuXHRhe2JveC1zaGFkb3c6IG5vbmU7fVxufVxuLnBvc3QtdHlwZS1scF9jb3Vyc2Uge1xuICAgICNwb3N0ZGl2cmljLFxuICAgICNzdWJtaXRwb3N0IHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIH1cbn1cblxuI2xlYXJuLXByZXNzLXJldmlldy1tZXNzYWdlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgID4gaDQge1xuICAgICAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG4gICAgfVxuICAgID4gdGV4dGFyZWEge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDBweDtcbiAgICB9XG4gICAgLmxwLXBlbmRpbmctcmV2aWV3LW1lc3NhZ2Uge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjYzQ0O1xuICAgICAgICBwYWRkaW5nOiA1cHggMTBweDtcbiAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgIG1hcmdpbjogLTEwcHggLTEwcHggMTBweDtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgfVxufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0ge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBtYXJnaW46IDIwcHggMDtcbn1cblxuLnBvc3QtdHlwZS1scF9jb3Vyc2Uge1xuICAgICYgLmNvbHVtbi1wcmljZSwgJiAuY29sdW1uLXN0dWRlbnRzIHtcbiAgICAgICAgd2lkdGg6IDEwJTtcbiAgICB9XG5cbiAgICAjbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtaXRlbS1lbXB0eSB0ZC5zZWN0aW9uLWl0ZW0taW5wdXQge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XG4gICAgICAgICYuaG92ZXIge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnR5cGUtbHBfY291cnNlIHtcblxuICAgICAgICAmLnN0YXR1cy1wZW5kaW5nIHtcbiAgICAgICAgICAgIC5yb3ctYWN0aW9ucyAudmlldyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0taGVhZGluZyB7XG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1oZWFkaW5nIC5kZXNjcmlwdGlvbiB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBjb2xvcjogIzk5OTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDkwJTtcbiAgICBtYXJnaW4tdG9wOiAxMHB4Oztcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLWhlYWRpbmcgLml0ZW1zLXRvZ2dsZSB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIG1hcmdpbjogLTMzcHggN3B4IDAgMDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0taGVhZGluZyAuaXRlbXMtdG9nZ2xlIGEge1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICAtbW96LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBmb250LXNpemU6IDMycHg7XG5cbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb25zIHtcbiAgICBtYXJnaW46IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24ge1xuICAgIG1hcmdpbjogLTFweCAwIDAgMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjREREO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24udWktc29ydGFibGUtcGxhY2Vob2xkZXIge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uLy4uL2ltYWdlcy9zdHJpcGUucG5nXCIpO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1zZWN0aW9uLWhlYWQge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y5RjlGOTtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogIzc3NztcbiAgICBwYWRkaW5nOiAzcHggMjBweDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taGVhZCBpbnB1dCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y5RjlGOTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taGVhZCAubHAtc2VjdGlvbi1hY3Rpb25zIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgbWFyZ2luOiAxNHB4IDA7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb246bm90KC5scC1lbXB0eS1zZWN0aW9uKSAuY3VycmljdWx1bS1zZWN0aW9uLWhlYWQ6aG92ZXIgLmxwLXNlY3Rpb24tYWN0aW9ucyB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24gLmxwLXNlY3Rpb24tYWN0aW9ucyBhIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGNvbG9yOiAjNjY2NjY2O1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbiAubHAtc2VjdGlvbi1hY3Rpb25zIGFbZGF0YS1hY3Rpb249XCJleHBhbmRcIl0ge1xuICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbiAubHAtc2VjdGlvbi1hY3Rpb25zIGE6YmVmb3JlIHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgZm9udC1zaXplOiAyNHB4O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbiAubHAtc2VjdGlvbi1hY3Rpb25zIGE6aG92ZXIge1xuICAgIGNvbG9yOiAjMDBhMGQyO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbiAuY3VycmljdWx1bS1zZWN0aW9uLWhlYWQgLmxwLXNlY3Rpb24tYWN0aW9ucyAubW92ZSB7XG4gICAgY3Vyc29yOiB1cmwoXCIuLi8uLi8uLi9hc3NldHMvaW1hZ2VzL29wZW5oYW5kLmN1clwiKSA3IDUsIGRlZmF1bHQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAtMTVweDtcbiAgICBoZWlnaHQ6IDU3cHg7XG4gICAgdG9wOiAtMTVweDtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi8uLi8uLi9hc3NldHMvaW1hZ2VzL2dyaXBweV9sYXJnZS5wbmdcIikgcmlnaHQgbm8tcmVwZWF0O1xuICAgIHdpZHRoOiAyMHB4O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1jb250ZW50IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xuICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi51aS1zb3J0YWJsZS1oZWxwZXIge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjREREO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1oZWFkIC5scC1zZWN0aW9uLW5hbWUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGNvbG9yOiAjNzc3O1xuICAgIHdpZHRoOiA3MCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgaGVpZ2h0OiA1MHB4O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1oZWFkIC5scC1zZWN0aW9uLW5hbWU6Zm9jdXMge1xuICAgIGNvbG9yOiAjNDQ0O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi5scC1lbXB0eS1zZWN0aW9uIC5jdXJyaWN1bHVtLXNlY3Rpb24tY29udGVudCB7XG4gICAgX2Rpc3BsYXk6IG5vbmU7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1zZWN0aW9uLWl0ZW1zIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtc2VjdGlvbi1pdGVtIHtcbiAgICBib3JkZXI6IDFweCBkYXNoZWQgI0RERDtcbiAgICBtYXJnaW46IC0xcHggMCAwIDA7XG4gICAgcGFkZGluZzogNXB4IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbTpudGgtY2hpbGQoMm4rMSksXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtc2VjdGlvbi1pdGVtOm50aC1jaGlsZCgybisxKSAuc2VjdGlvbi1pdGVtLWlucHV0IGlucHV0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkNGQ0ZDO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtc2VjdGlvbi1pdGVtIC5scC1pdGVtLWFjdGlvbnMge1xuICAgIG1hcmdpbjogMDtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtc2VjdGlvbi1pdGVtIC5scC1pdGVtLWFjdGlvbnMgYSB7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBjb2xvcjogIzY2NjtcbiAgICBtYXJnaW4tdG9wOiAtMnB4O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1zZWN0aW9uLWl0ZW1zIC5scC1zZWN0aW9uLWl0ZW0gLmxwLWl0ZW0tYWN0aW9ucyBhOmhvdmVyIHtcbiAgICBjb2xvcjogIzAwYTBkMjtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbVtkYXRhLWl0ZW1faWQ9XCJcIl0gLmxwLWVkaXQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1zZWN0aW9uLWl0ZW1zIC5scC1zZWN0aW9uLWl0ZW0ubHAtaXRlbS1lbXB0eSAubHAtaXRlbS1hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbS51aS1zb3J0YWJsZS1oZWxwZXIgdGQge1xuXG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHRkIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi8uLi8uLi9hc3NldHMvaW1hZ2VzL3N0cmlwZS5wbmdcIik7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1pdGVtLWFjdGlvbnMgPiAqIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtaXRlbS1hY3Rpb25zID4gYSB7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuaXRlbS1idWxrLWFjdGlvbnMge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW06bm90KC5scC1pdGVtLWVtcHR5KTpob3ZlciAubHAtaXRlbS1hY3Rpb25zID4gKiB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbTpub3QoLmxwLWl0ZW0tZW1wdHkpIC5pdGVtLWNoZWNrYm94IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAzNHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICAgIG1hcmdpbjogMCA0cHggMCAxMHB4O1xuICAgIGN1cnNvcjogdXJsKFwiLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9vcGVuaGFuZC5jdXJcIikgNyA1LCBkZWZhdWx0O1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAuY3VycmljdWx1bS1zZWN0aW9uLWl0ZW1zIC5scC1zZWN0aW9uLWl0ZW0gLml0ZW0tY2hlY2tib3ggaW5wdXQge1xuICAgIG9wYWNpdHk6IDAuNDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbTpub3QoLmxwLWl0ZW0tZW1wdHkpOmhvdmVyIC5pdGVtLWNoZWNrYm94IGlucHV0IHtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWl0ZW0tbHBfbGVzc29uIC5oYW5kbGUubGVhcm4tcHJlc3MtaWNvbjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTAwXCI7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtaXRlbS1scF9xdWl6IC5oYW5kbGUubGVhcm4tcHJlc3MtaWNvbjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTAxXCI7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtLmxwLWl0ZW0tbmV3IC5oYW5kbGUge1xuICAgIGNvbG9yOiAjOTk5O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmN1cnJpY3VsdW0tc2VjdGlvbi1pdGVtcyAubHAtc2VjdGlvbi1pdGVtOmhvdmVyLFxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbTpob3ZlciBpbnB1dC5scC1pdGVtLW5hbWUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGOUY5Rjk7XG59XG5cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtIC5oYW5kbGUge1xuICAgIHdpZHRoOiAzMnB4O1xuICAgIGhlaWdodDogMzJweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICAgIGNvbG9yOiAjMDBBMEQyO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbS5yZW1vdmUgaW5wdXQubHAtaXRlbS1uYW1lIHtcbiAgICBjb2xvcjogI0ZGMDAwMDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW0udWktc29ydGFibGUtaGVscGVyIHtcblxufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbSBpbnB1dC5scC1pdGVtLW5hbWUge1xuICAgIGNvbG9yOiAjNzc3O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24tZGVzY3JpYmUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGNvbG9yOiAjOTk5O1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB3aWR0aDogODAlO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHBhZGRpbmctbGVmdDogMDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5jdXJyaWN1bHVtLXNlY3Rpb24taXRlbXMgLmxwLXNlY3Rpb24taXRlbSBpbnB1dC5scC1pdGVtLW5hbWU6Zm9jdXMsXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gaW5wdXQ6Zm9jdXMge1xuICAgIGNvbG9yOiAjNDQ0O1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbSAuc2VjdGlvbi1pdGVtLWljb24ge1xuICAgIHdpZHRoOiAzMnB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5scC1zZWN0aW9uLWl0ZW0gLmxlYXJuLXByZXNzLWljb24ge1xuICAgIHdpZHRoOiAzMnB4O1xuICAgIGhlaWdodDogMzJweDtcbiAgICBmb250LWZhbWlseTogZGFzaGljb25zO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICAgIGNvbG9yOiAjREREO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW0gLmxlYXJuLXByZXNzLWljb24uaXRlbS1scF9xdWl6OmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcXGY0NjlcIjtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW0gLmxlYXJuLXByZXNzLWljb24uaXRlbS1scF9sZXNzb246YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZjMzMFwiO1xufVxuXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbSAubGVhcm4tcHJlc3MtaWNvbi5pdGVtLXNlbGVjdGVkLFxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW1bZGF0YS1pdGVtX2lkPVwiXCJdIC5sZWFybi1wcmVzcy1pY29uOmhvdmVyIHtcbn1cblxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW0gdGQge1xuICAgIGhlaWdodDogMzBweDtcbn1cblxuI3Bvc3RzdHVmZiAucG9zdGJveC1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuI2NvdXJzZV90YWJzIC5oYW5kbGVkaXYsXG4jY291cnNlX3RhYnMgLmhuZGxlLFxuI2NvdXJzZV90YWJzIC5yd21iLWxhYmVsIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4jY291cnNlX3RhYnMgLnJ3bWItaW5wdXQge1xuXG59XG5cbiNjb3Vyc2VfdGFicyAuaW5zaWRlIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbn1cblxuI2NvdXJzZV90YWJzIC5yd21iLWNvdXJzZV90YWJzLXdyYXBwZXIge1xuICAgIG1hcmdpbjogMDtcbn1cblxuI2NvdXJzZV90YWJzIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbn1cblxuI2NvdXJzZV90YWJzLmZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAzMHB4O1xuICAgIHotaW5kZXg6IDEwMDAwO1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICBsZWZ0OiAxODJweDtcbiAgICByaWdodDogMzIwcHg7XG59XG5cbiNjb3Vyc2VfdGFicy5maXhlZDpob3ZlciB7XG4gICAgb3BhY2l0eTogMTtcbn1cblxuI2NvdXJzZV90YWJzX3BsYWNlaG9sZGVyIHtcbiAgICBoZWlnaHQ6IDQxcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuI3Bvc3RzdHVmZiBoMyNjb3Vyc2UtdGFicy1oMyB7XG4gICAgcGFkZGluZzogMDtcbn1cblxuI2NvdXJzZS10YWJzLWgzID4gYSB7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0RERDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgX2NvbG9yOiAjQUFBO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5sZWFybi1wcmVzcy1yZXZpZXctbG9ncyB7XG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gICAgLnJldmlldy1tZXNzYWdlIHtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIG1hcmdpbjogMTBweCAwO1xuICAgICAgICBjb2xvcjogIzk5OTtcbiAgICB9XG4gICAgPiBsaSB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI0RERDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDIwcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnJldmlldy11c2VyIHtcbiAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICBpbWcge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICB9XG4gICAgICAgID4gKiB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAucmV2aWV3LWluZGV4IHtcbiAgICAgICAgd2lkdGg6IDQ2cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogLTExcHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkY7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICNEREQ7XG4gICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICAgIGNvbG9yOiAjQ0NDO1xuICAgIH1cbiAgICAucmV2aWV3LWNvbnRlbnQge1xuICAgICAgICBtYXJnaW4tbGVmdDogNjhweDtcbiAgICB9XG4gICAgPiBsaSAubHAtbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDEwMCU7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgfVxufVxuXG4ucndtYi1jdXJyaWN1bHVtLXdyYXBwZXIgLnJ3bWItbGFiZWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5yd21iLWN1cnJpY3VsdW0td3JhcHBlciAucndtYi1pbnB1dCB7XG4gICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogbm9uZTtcbn1cblxuLmNvbHVtbi1scF9jb3Vyc2UgLnJvdy1hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5cbi5scC1tb2RhbC1zZWFyY2ggbGkuc2VsZWN0ZWQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5scC1zZWFyY2gtaXRlbXMgaW5wdXRbbmFtZT1cImxwLWl0ZW0tbmFtZVwiXSB7XG4gICAgd2lkdGg6IDM1MHB4O1xufVxuXG4ubHAtbW9kYWwtc2VhcmNoIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1O1xuICAgIGNvbG9yOiAjNzc3O1xuICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuXG4ubHAtbW9kYWwtc2VhcmNoIHVsIHtcblxufVxuXG4ubHAtaGlnaGxpZ2h0LWNvbG9yIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICBjb2xvcjogIzAwYTBkMjtcbn1cblxuLmxlYXJuLXByZXNzLWRyb3Bkb3duLWl0ZW0tdHlwZXMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICA+IHVsIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDBweDtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgICAgIGxlZnQ6IDEwMCU7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgICAgICA+IGxpIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxudHJbZGF0YS1pdGVtX2lkPVwiXCJdIC5sZWFybi1wcmVzcy1kcm9wZG93bi1pdGVtLXR5cGVzOmhvdmVyID4gdWwsXG50cltkYXRhLWl0ZW1faWQ9XCJcIl0uZm9jdXMgLmxlYXJuLXByZXNzLWRyb3Bkb3duLWl0ZW0tdHlwZXMgPiB1bCB7XG4gICAgZGlzcGxheTogaW5saW5lLXRhYmxlO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLmxlYXJuLXByZXNzLWRyb3Bkb3duLWl0ZW0tdHlwZXM6aG92ZXIgPiBzcGFuLmxlYXJuLXByZXNzLWljb24sXG50ci5mb2N1cyAubGVhcm4tcHJlc3MtZHJvcGRvd24taXRlbS10eXBlcyA+IHNwYW4ubGVhcm4tcHJlc3MtaWNvbiB7XG4gICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICBib3JkZXItY29sb3I6ICNEREQ7XG4gICAgei1pbmRleDogNTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5sZWFybi1wcmVzcy1kcm9wZG93bi1pdGVtLXR5cGVzOmhvdmVyID4gc3Bhbi5sZWFybi1wcmVzcy1pY29uOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNFRUU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luLXRvcDogLTEwcHg7XG59XG5cbi5sZWFybi1wcmVzcy1kcm9wZG93bi1pdGVtLXR5cGVzID4gc3Bhbi5sZWFybi1wcmVzcy1pY29uLFxuLmxlYXJuLXByZXNzLWRyb3Bkb3duLWl0ZW0tdHlwZXMgbGk6aG92ZXIgc3Bhbi5sZWFybi1wcmVzcy1pY29uLFxuLmxlYXJuLXByZXNzLWRyb3Bkb3duLWl0ZW0tdHlwZXMgbGkgc3Bhbi5sZWFybi1wcmVzcy1pY29uLml0ZW0tc2VsZWN0ZWQge1xuICAgIGNvbG9yOiAjMDA4NWJhO1xufVxuXG4ubGVhcm4tcHJlc3MtY291cnNlLWF0dHJpYnV0ZXMge1xuICAgIG1hcmdpbjogMjBweCAwO1xuICAgIC5jb3Vyc2UtYXR0cmlidXRlLXRheG9ub215IHtcbiAgICAgICAgbGkge1xuXG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5wb3N0LXR5cGUtbHBfY291cnNlIHtcbiAgICAjc3dpdGNoLWNvdXJzZS10YWJzLFxuICAgICN0b2dnbGUtbWV0YS1ib3hlcyB7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgfVxufVxuXG4vKlxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1jb3Vyc2UtY3VycmljdWx1bS10b2dnbGV7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogMDtcblx0ZmxvYXQ6IHJpZ2h0O1xufVxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1pdGVtLW5hbWV7XG5cdGJveC1zaGFkb3c6IG5vbmU7XG5cdGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAjQkJCO1xufVxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWl0ZW06aG92ZXIsXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbS5ob3Zlcntcblx0YmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTtcblx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtLmxwLWl0ZW0tbHBfbGVzc29uIC5oYW5kbGU6YWZ0ZXJ7XG5cdGNvbnRlbnQ6IFwiXFxmNDk3XCI7XG59XG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbS5scC1pdGVtLWxwX3F1aXogLmhhbmRsZTphZnRlcntcblx0Y29udGVudDogXCJcXGYxMzBcIjtcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtOmhvdmVyIC5scC1pdGVtLW5hbWUsXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24taXRlbS5ob3ZlciAubHAtaXRlbS1uYW1le1xuXHRib3JkZXI6IDFweCBzb2xpZCAjREREO1xuXHRjb2xvcjogIzMyMzczYztcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1lbXB0eSAubHAtc2VjdGlvbi1pdGVtc3tcblx0ZGlzcGxheTogbm9uZTtcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtc2VjdGlvbi1pdGVtIC5scC1pdGVtLWFjdGlvbnN7XG5cdGZsb2F0OiByaWdodDtcblx0bWFyZ2luLWxlZnQ6IDVweDtcblx0bWFyZ2luLXRvcDogM3B4O1xufVxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1pdGVtLWVtcHR5IC5scC1pdGVtLWFjdGlvbnMsXG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLXNlY3Rpb24tZW1wdHkgLmxwLXNlY3Rpb24taGVhZCAubHAtYWN0aW9uLFxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWVtcHR5IC5scC1jdXJyaWN1bHVtLXNlY3Rpb24tY29udGVudCB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWl0ZW0tZW1wdHl7XG5cdGN1cnNvcjogZGVmYXVsdDtcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtaXRlbS1uZXd7XG5cdGJvcmRlci1jb2xvcjogIzAwQTBEMjtcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtaXRlbS1uZXcgLmxwLWl0ZW0tbmFtZXtcblx0Ym9yZGVyLWNvbG9yOiAjMDBBMEQyO1xufVxuI2xwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1zZWN0aW9uLWhlYWR7XG5cdHBhZGRpbmc6IDA7XG59XG4jbHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbiAubHAtdG9nZ2xlIGk6YmVmb3Jle1xuXHRjb250ZW50OiAnXFxmMTMyJztcbn1cbiNscC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uLm9wZW4gLmxwLXRvZ2dsZSBpOmJlZm9yZXtcblx0Y29udGVudDogJ1xcZjQ2MCc7XG59XG4ubHAtbW9kYWwtc2VhcmNoe1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGJhY2tncm91bmQtY29sb3I6ICNGRkY7XG5cdGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG5cdGJvcmRlci10b3A6IG5vbmU7XG5cdHotaW5kZXg6IDk5OTk7XG5cdG1hcmdpbjogLTFweCAwIDAgMXB4O1xufVxuLmxwLW1vZGFsLXNlYXJjaCB1bHtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xufVxuLmxwLW1vZGFsLXNlYXJjaCB1bCBsaXtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0cGFkZGluZzogNXB4O1xuXHRtYXJnaW46IDA7XG59XG4ubHAtbW9kYWwtc2VhcmNoIGxpLmhpZ2hsaWdodGluZyxcbi5scC1tb2RhbC1zZWFyY2ggbGk6aG92ZXJ7XG5cdGJhY2tncm91bmQtY29sb3I6ICNFQUVBRUE7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cbi5scC1oaWdobGlnaHQtY29sb3J7XG5cdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxwLXNlYXJjaC1uby1yZXN1bHRze1xuXHRkaXNwbGF5OiBub25lO1xufVxuLmxwLWN1cnJpY3VsdW0tc2VjdGlvbnMgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVye1xuXHR2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG5cdGJvcmRlcjogMnB4IGRhc2hlZCAjREREO1xufVxuLmxwLWN1cnJpY3VsdW0tc2VjdGlvbnMgLmxwLXNvcnRpbmd7XG5cdGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xufVxuKi9cbi8qXG5cbi5scC1jb3Vyc2UtY3VycmljdWx1bXt9XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbnN7XG5cbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9ue1xuXHR0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzO1xuXHRtYXJnaW4tYm90dG9tOiAyMHB4O1xuXHRib3JkZXI6IDFweCBzb2xpZCAjREREO1xufVxuLmxwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1jdXJyaWN1bHVtLXNlY3Rpb24ubHAtc2VsZWN0ZWQgLmxwLWN1cnJpY3VsdW0tc2VjdGlvbi1jb250ZW50e1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1O1xufVxuLmxwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1jdXJyaWN1bHVtLXNlY3Rpb24tY29udGVudCA+IHB7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uLmxwLXNlbGVjdGVkID4gaDN7XG5cdF9ib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uID4gaDN7XG5cdHBhZGRpbmc6IDEwcHggO1xuXHRtYXJnaW46IDA7XG5cdGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7XG5cdGhlaWdodDogNjJweDtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRjdXJzb3I6IG1vdmU7XG59XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzIC5scC1zZWN0aW9uLW5hbWUtd3JhcHBlcntcblx0dG9wOiA5cHg7XG59XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzID4gc3BhbiA+IGlucHV0e1xuXHRib3JkZXI6IDFweCBzb2xpZCAjREREO1xuXHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdGZvbnQtc2l6ZTogMjRweDtcblx0d2lkdGg6IDEwMCU7XG5cdGNvbG9yOiAjNzc3O1xufVxuLmxwLWNvdXJzZS1jdXJyaWN1bHVtIC5scC1jdXJyaWN1bHVtLXNlY3Rpb24gPiBoMyA+IHNwYW4ubHAtc2VjdGlvbi1uYW1lLXdyYXBwZXJ7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRyaWdodDogMTM3cHg7XG5cdGxlZnQ6IDcxcHg7XG59XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzIC5scC1hY3Rpb257XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGhlaWdodDogNjJweDtcblx0d2lkdGg6IDYycHg7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0RERDtcblx0LXRvcDogLThweDtcblx0LXJpZ2h0OiAtMTFweDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRmbG9hdDogcmlnaHQ7XG59XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLmxwLWN1cnJpY3VsdW0tc2VjdGlvbiA+IGgzIC5scC1hY3Rpb24ubHAtc29ydHtcblx0ZGlzcGxheTogbm9uZTtcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uID4gaDMgLmxwLWFjdGlvbiAuZGFzaGljb25ze1xuXHRmb250LXNpemU6IDMycHg7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdGxpbmUtaGVpZ2h0OiA2MnB4O1xuXHRjb2xvcjogIzAwNzNhYTtcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uID4gaDMgLmxwLWFjdGlvbjpob3ZlciAuZGFzaGljb25ze1xuXHRjb2xvcjogIzAwOUVENztcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uID4gaDMgLmxwLWFjdGlvbi5scC10b2dnbGV7XG5cdF9yaWdodDogNjJweDtcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uID4gaDMgLmxwLWFjdGlvbi5scC1yZW1vdmV7XG5cdF9yaWdodDogMTI0cHg7XG59XG5cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAubHAtY3VycmljdWx1bS1zZWN0aW9uLmNsb3NlZCAubHAtY3VycmljdWx1bS1zZWN0aW9uLWNvbnRlbnR7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG5cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAuc29ydGluZyAudWktc29ydGFibGUtaGVscGVyIC5scC1jdXJyaWN1bHVtLXNlY3Rpb24tY29udGVudHtcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuLmxwLWNvdXJzZS1jdXJyaWN1bHVtIC5zb3J0aW5nIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlcixcbi5scC1zZWN0aW9uLWl0ZW1zLnNvcnRpbmcgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVye1xuXHRib3JkZXI6IDNweCBkYXNoZWQgI0RERDtcblx0dmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubHAtY291cnNlLWN1cnJpY3VsdW0gLnNvcnRpbmcgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyOmFmdGVyLFxuLmxwLXNlY3Rpb24taXRlbXMuc29ydGluZyAudWktc29ydGFibGUtcGxhY2Vob2xkZXI6YWZ0ZXJ7XG5cdGNvbnRlbnQ6ICcnO1xuXHRkaXNwbGF5OiBibG9jaztcblx0d2lkdGg6IDBweDtcblx0aGVpZ2h0OiAwcHg7XG5cdGJvcmRlcjogMjhweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0Ym9yZGVyLWxlZnQtY29sb3I6ICM5OTk7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAwO1xuXHRsZWZ0OiAtMzNweDtcblxufVxuXG4ubHAtc2VjdGlvbi1pdGVtcy5zb3J0aW5nIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlcjphZnRlcntcblx0Ym9yZGVyLXdpZHRoOiAxNXB4O1xuXHRsZWZ0OiAtMjBweDtcbn1cbi5scC1jdXJyaWN1bHVtLXNlY3Rpb24tY29udGVudHtcblx0YmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTtcblx0YmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcblx0X2JvcmRlci1ib3R0b206IDJweCBkYXNoZWQgI0RERDtcblx0cGFkZGluZzogMjBweDtcblx0bWFyZ2luLWJvdHRvbTogMHB4O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0RERDtcbn1cbi5scC1keW5hbWljLWZvcm17XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0cGFkZGluZzogMHB4O1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcblx0ei1pbmRleDogMjEwO1xuXHRcdGhlaWdodDogMTVweDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5scC1jb250YWluZXItZHJvcGRvd257XG5cdGhlaWdodDogMTVweDtcblx0dmVydGljYWwtYWxpZ246IHRvcDtcbn1cbi5scC1jb250YWluZXItZHJvcGRvd24gPiBhe1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7XG5cdGJhY2tncm91bmQtY29sb3I6ICNGRkYgIWltcG9ydGFudDtcbn1cbi5scC1jb250YWluZXItZHJvcGRvd24uc2VsZWN0Mi1kcm9wLWFib3ZlID4gYXtcblx0aGVpZ2h0OiAzcHg7XG59XG4ubHAtc2VsZWN0LWRyb3Bkb3due1xuXHRtYXJnaW4tdG9wOiAtNnB4O1xufVxuLmxwLXNlbGVjdC1kcm9wZG93bi5zZWxlY3QyLWRyb3AtYWJvdmV7XG5cdHBhZGRpbmctYm90dG9tOiAwO1xufVxuXG4ubHAtZW1wdHkgLmxwLWN1cnJpY3VsdW0tc2VjdGlvbi1jb250ZW50e1xuXHRkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi5scC1zZWN0aW9uLWl0ZW1ze1xuXHRtaW4taGVpZ2h0OiAyMHB4O1xuXG5cbn1cbi5scC1zZWN0aW9uLWl0ZW1zID4gbGl7XG5cdHBhZGRpbmc6IDVweDtcblx0Ym9yZGVyOjFweCBkYXNoZWQgI0RERDtcblx0YmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcblx0Y3Vyc29yOiBtb3ZlO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubHAtc2VjdGlvbi1pdGVtcyA+IGxpIC5scC10aXRsZXtcblx0Y3Vyc29yOiBhdXRvO1xuXHRwYWRkaW5nOiAzcHggNXB4O1xuXHRib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHR3aWR0aDogODAlO1xuXHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblxufVxuLmxwLXNlY3Rpb24taXRlbXMgPiBsaTpob3ZlciAubHAtdGl0bGUge1xuXHRib3JkZXItY29sb3I6ICNEREQ7XG5cdGN1cnNvcjogdGV4dDtcbn1cbi5scC1zZWN0aW9uLWl0ZW1zID4gbGkgaW5wdXR7XG5cdHdpZHRoOiA3MCU7XG59XG5cbi5scC1zZWN0aW9uLWl0ZW1zID4gbGk6aG92ZXJ7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4ubHAtc2VjdGlvbi1pY29ue1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDowO1xuXHRsZWZ0OjA7XG5cdHdpZHRoOiA2MnB4O1xuXHRoZWlnaHQ6IDYycHg7XG5cdGxpbmUtaGVpZ2h0OiA1NHB4O1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjREREO1xuXHR0ZXh0LWFsaWduOmNlbnRlcjtcbn1cbi5scC1zZWN0aW9uLWljb24gaXtcblx0aGVpZ2h0OiA2MHB4O1xuXHRsaW5lLWhlaWdodDogNjBweDtcbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bSAuZGFzaGljb25ze1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uc2VsZWN0Mi1kcm9wLnNlbGVjdDItZHJvcC1hY3RpdmV7XG5cdHBhZGRpbmc6IDVweCAxMHB4O1xufVxuXG4ucndtYi1jb3Vyc2VfbGVzc29uX3F1aXotd3JhcHBlciAucndtYi1sYWJlbHsgZGlzcGxheTogbm9uZTt9XG4ucndtYi1jb3Vyc2VfbGVzc29uX3F1aXotd3JhcHBlciAucndtYi1pbnB1dHsgZmxvYXQ6IG5vbmU7IHdpZHRoOiBhdXRvOyBkaXNwbGF5OiBibG9jazt9XG5cbi5scC1jb3Vyc2UtY3VycmljdWx1bS10b2dnbGV7XG5cbn1cbi5scC1jb3Vyc2UtY3VycmljdWx1bS10b2dnbGUgLmV4cGFuZHtcblx0ZGlzcGxheTogbm9uZTtcbn0qLyJdLCJmaWxlIjoiYWRtaW4vbWV0YS1ib3gtY291cnNlLmNzcyJ9 */
794
  .lp-course-curriculum-toggle .expand{
795
  display: none;
796
  }*/
 
 
assets/css/frontend/form.css ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ .learn-press-form .form-fields {
2
+ list-style: none; }
3
+ .learn-press-form .form-fields .form-field {
4
+ margin-bottom: 10px; }
5
+
assets/css/learnpress.css CHANGED
@@ -200,6 +200,9 @@
200
  border-top: 1px solid #FFF;
201
  position: relative;
202
  }
 
 
 
203
  #learn-press-course-curriculum .section-header p {
204
  display: inline-block;
205
  font-weight: normal;
@@ -907,7 +910,7 @@ body.course-has-popup {
907
  }
908
  .learn-press-content-item-summary {
909
  /*padding: 20px;
910
- border-top: 1px solid #DDD;*/
911
  margin-bottom: 30px;
912
  }
913
  .learn-press-content-item-summary .quiz-question-title {
@@ -2892,5 +2895,3 @@ body.content-item-only #learn-press-content-item.expand {
2892
  }
2893
  }
2894
  */
2895
-
2896
- /*# sourceMappingURL=data:application/json;charset=utf8;base64,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QUNQLFdBQUE7OztBQU1oQixRQUEwQjtFQUN0QjtJQUNJLFNBQUE7OztBQUlSLFFBQTBCLHVCQUF3QjtFQUU5QyxvQkFDSSxHQUFFO0lBQ0UsYUFBQTtJQUNBLG1CQUFBOzs7RUFFQSxvQkFKSixHQUFFLE9BSUcsVUFBVTtJQUNQLFdBQUE7SUFDQSxjQUFBOzs7QUFPaEIsUUFBMEIsdUJBQXdCO0VBRTlDLG9CQUNJLEdBQUU7SUFDRSxVQUFBO0lBQ0EsbUJBQUE7OztFQUVBLG9CQUpKLEdBQUUsT0FJRyxVQUFVO0lBQ1AsV0FBQTtJQUNBLGNBQUE7Ozs7Ozs7Ozs7Ozs7O0FBa0JoQixRQUEwQjtFQUV0QixvQkFDSSxHQUFFO0lBQ0UsV0FBQTtJQUNBLGtCQUFBO0lBQ0EsV0FBQTs7O0FBTVosUUFBMEI7RUFDdEIsd0JBQXlCO0lBQ3JCLFdBQUE7Ozs7QUFLUixtQkFBeUM7RUFDckMsSUFBSSxpQkFDQSxRQUFPLFVBQ0g7SUFDSSxXQUFBOztFQUhaLElBQUksaUJBQ0EsUUFBTyxVQUlIO0lBQ0ksYUFBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgLSBQUk9HUkVTUyBDSVJDTEVcbiAgICAtIEFyY2hpdmUgY291cnNlc1xuICAgIC0gQ291cnNlIEN1cnJpY3VsdW1cbiAgICAtIEJSRUFEQ1JVTUJcbiAgICAtIENPVVJTRSBQUk9HUkVTU1xuICAgIC0gQ09VUlNFIFRBQlNcbiAgICAtIFBPUFVQIFNUWUxFXG4gICAgLSBDT1VSU0UgUVVJWlxuICAgIC0gRm9ybSBmaWVsZFxuICAgIC0gakFsZXJ0c1xuICAgIC0gdG9vbHRpcFxuICAgIC0gZmlsbCBpbiBibGFua1xuICAgIC0gU2hvcnRjb2RlL1dpZGdldHNcbiAqL1xuXG5AaWNvbi11cmw6ICcuLi9mb250cy9scC1pY29ucyc7XG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ2xwLWljb25zJztcbiAgICBzcmM6IHVybCgnQHtpY29uLXVybH0uZW90P2Y0MW5sJyk7XG4gICAgc3JjOiB1cmwoJ0B7aWNvbi11cmx9LmVvdD9mNDFubCNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICB1cmwoJ0B7aWNvbi11cmx9LnR0Zj9mNDFubCcpIGZvcm1hdCgndHJ1ZXR5cGUnKSxcbiAgICB1cmwoJ0B7aWNvbi11cmx9LndvZmY/ZjQxbmwnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICB1cmwoJ0B7aWNvbi11cmx9LnN2Zz9mNDFubCNscC1pY29ucycpIGZvcm1hdCgnc3ZnJyk7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbltjbGFzc149XCJscC1pY29uLVwiXSwgW2NsYXNzKj1cIiBscC1pY29uLVwiXSB7XG4gICAgLyogdXNlICFpbXBvcnRhbnQgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBicm93c2VyIGV4dGVuc2lvbnMgdGhhdCBjaGFuZ2UgZm9udHMgKi9cbiAgICBmb250LWZhbWlseTogJ2xwLWljb25zJyAhaW1wb3J0YW50O1xuICAgIHNwZWFrOiBub25lO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgLyogQmV0dGVyIEZvbnQgUmVuZGVyaW5nID09PT09PT09PT09ICovXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuLmxwLWljb24tZmlsZS10ZXh0MjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTI2XCI7XG59XG5cbi5scC1pY29uLWZpbGUtcGljdHVyZTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTI3XCI7XG59XG5cbi5scC1pY29uLWZpbGUtbXVzaWM6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZTkyOFwiO1xufVxuXG4ubHAtaWNvbi1maWxlLXZpZGVvOmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcXGU5MmFcIjtcbn1cblxuLmxwLWljb24tZmlsZS16aXA6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZTkyYlwiO1xufVxuXG4ubHAtaWNvbi1wYXN0ZTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTJkXCI7XG59XG5cbi5scC1pY29uLWFsYXJtOmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcXGU5NTBcIjtcbn1cblxuLmxwLWljb24tY3Jvc3M6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZWEwZlwiO1xufVxuXG4ubHAtaWNvbi1jaGVja21hcms6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZWExMFwiO1xufVxuXG4ubHAtaWNvbi1zcGlubmVyMjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlOTdiXCI7XG59XG5cbi5scC1pY29uLXBsdXM6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZWEwYVwiO1xufVxuXG4ubHAtaWNvbi1taW51czpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFxlYTBiXCI7XG59XG5cbi5jbGVhcmZpeCgpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb250ZW50OiAnJztcbiAgICBjbGVhcjogYm90aDtcbn1cblxuLmNsZWFyZml4OmFmdGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb250ZW50OiAnJztcbiAgICBjbGVhcjogYm90aDtcbn1cblxuLmJvcmRlci1yYWRpdXMoQGFyZ3MpIHtcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IEBhcmd1bWVudHM7XG4gICAgLWtodG1sLWJvcmRlci1yYWRpdXM6IEBhcmd1bWVudHM7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiBAYXJndW1lbnRzO1xuICAgIC1tcy1ib3JkZXItcmFkaXVzOiBAYXJndW1lbnRzO1xuICAgIC1vLWJvcmRlci1yYWRpdXM6IEBhcmd1bWVudHM7XG4gICAgYm9yZGVyLXJhZGl1czogQGFyZ3VtZW50cztcbn1cblxuLnRyYW5zZm9ybShAYXJncykge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBAYXJndW1lbnRzO1xuICAgIC1raHRtbC10cmFuc2Zvcm06IEBhcmd1bWVudHM7XG4gICAgLW1vei10cmFuc2Zvcm06IEBhcmd1bWVudHM7XG4gICAgLW1zLXRyYW5zZm9ybTogQGFyZ3VtZW50cztcbiAgICAtby10cmFuc2Zvcm06IEBhcmd1bWVudHM7XG4gICAgdHJhbnNmb3JtOiBAYXJndW1lbnRzO1xufVxuXG4udHJhbnNpdGlvbihAYXJncykge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogQGFyZ3VtZW50cztcbiAgICAta2h0bWwtdHJhbnNpdGlvbjogQGFyZ3VtZW50cztcbiAgICAtbW96LXRyYW5zaXRpb246IEBhcmd1bWVudHM7XG4gICAgLW1zLXRyYW5zaXRpb246IEBhcmd1bWVudHM7XG4gICAgLW8tdHJhbnNpdGlvbjogQGFyZ3VtZW50cztcbiAgICB0cmFuc2l0aW9uOiBAYXJndW1lbnRzO1xufVxuXG4uY3Jvc3MoQHNpemU6IDMwcHgsIEBib3JkZXI6IDNweCwgQGNvbG9yOiAjMDAwKSB7XG4gICAgJjpiZWZvcmUsXG4gICAgJjphZnRlciB7XG4gICAgICAgIHdpZHRoOiBAYm9yZGVyO1xuICAgICAgICBiYWNrZ3JvdW5kOiBAY29sb3I7XG4gICAgICAgIGhlaWdodDogQHNpemU7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAoQHNpemUgLSAgQGJvcmRlcikgLyAyO1xuICAgIH1cbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIC50cmFuc2Zvcm0ocm90YXRlKC00NWRlZykpO1xuICAgIH1cbiAgICAmOmFmdGVyIHtcbiAgICAgICAgLnRyYW5zZm9ybShyb3RhdGUoNDVkZWcpKTtcbiAgICB9XG59XG5cbi5hbmltYXRpb24oQGFyZ3MpIHtcbiAgICAtd2Via2l0LWFuaW1hdGlvbjogQGFyZ3VtZW50cztcbiAgICAtbW96LWFuaW1hdGlvbjogQGFyZ3VtZW50cztcbiAgICBhbmltYXRpb246IEBhcmd1bWVudHM7XG59XG5cbi5vdmVybGF5LXByb2Nlc3Npbmcge1xuICAgICY6YmVmb3JlLCAmOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgei1pbmRleDogOTk5OTk5O1xuICAgIH1cbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMwMDA7XG4gICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gICAgJjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgfVxufVxuXG4vKiBQUk9HUkVTUyBDSVJDTEUgKi9cbi5wcm9ncmVzcy1jaXJjbGUoQHNpemU6IDIwMHB4LCBAYmFja2dyb3VuZDogI0RERCwgQGZpbGw6ICM5NWU2ZjksIEBpbml0aWFsaXplOiAwLCBAaW5zaWRlLXNpemU6IDE3MHB4LCBAaW5zaWRlLWJhY2tncm91bmQ6ICNGRkYpIHtcbiAgICAucHJvZ3Jlc3MtY2lyY2xlIHtcbiAgICAgICAgd2lkdGg6IEBzaXplO1xuICAgICAgICBoZWlnaHQ6IEBzaXplO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIC5iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgICB3aWR0aDogQHNpemU7XG4gICAgICAgICAgICBoZWlnaHQ6IEBzaXplO1xuICAgICAgICAgICAgY2xpcDogcmVjdCgwLCBAc2l6ZSwgQHNpemUsIEBzaXplIC8gMik7XG4gICAgICAgICAgICAuZmlsbCB7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBAc2l6ZTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IEBzaXplO1xuICAgICAgICAgICAgICAgIGNsaXA6IHJlY3QoMCwgQHNpemUgLyAyLCBAc2l6ZSwgMCk7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogQGZpbGw7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUodW5pdChAaW5pdGlhbGl6ZSozLjYsIGRlZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICB3aWR0aDogQGluc2lkZS1zaXplO1xuICAgICAgICAgICAgaGVpZ2h0OiBAaW5zaWRlLXNpemU7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBAaW5zaWRlLWJhY2tncm91bmQ7XG4gICAgICAgICAgICAuYm9yZGVyLXJhZGl1cyg1MCUpO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAtQGluc2lkZS1zaXplIC8gMjtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtQGluc2lkZS1zaXplIC8gMjtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB9XG4gICAgICAgIC5pbnNpZGUge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogQHNpemU7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgfVxuICAgICAgICAmLmd0LTUwIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBmaWxsO1xuICAgICAgICAgICAgLmJhY2tncm91bmQge1xuICAgICAgICAgICAgICAgIGNsaXA6IHJlY3QoMCwgQHNpemUvMiwgQHNpemUsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmZpbGwge1xuICAgICAgICAgICAgICAgIGNsaXA6IHJlY3QoMCwgQHNpemUsIEBzaXplLCBAc2l6ZS8yKTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBAYmFja2dyb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmNsZWFyZml4KCkge1xuICAgICY6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNsZWFyOiBib3RoO1xuICAgIH1cbn1cblxuLmhpZGUtaWYtanMge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogQXJjaGl2ZSBjb3Vyc2VzICovXG4ubGVhcm4tcHJlc3MtY291cnNlcyB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBjbGVhcjogYm90aDtcbiAgICBtYXJnaW46IDAgLTMwcHggMCAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgJjphZnRlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgfVxuICAgIGxpLmNvdXJzZSB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIHdpZHRoOiAyMyU7XG4gICAgICAgIG1hcmdpbjogMCAyJSAzMHB4IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG5cbiAgICAgICAgLnZpZXctbW9yZSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDE1cHg7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgaDMge1xuICAgICAgICAgICAgcGFkZGluZzogMTVweDtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS10aHVtYm5haWwge1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAuY291cnNlLWluZm8ge1xuICAgICAgICAgICAgcGFkZGluZzogMCAxNXB4IDE1cHg7XG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB9XG4gICAgICAgIC5jb3Vyc2Utc3R1ZGVudHMge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS1pbnN0cnVjdG9yIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS1vcmlnaW4tcHJpY2Uge1xuICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS1wcmljZSB7XG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICBjb2xvcjogcmdiKDg0LCAxODEsIDgxKTtcbiAgICAgICAgfVxuICAgICAgICAuY291cnNlLWluZm8gPiAqIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uY291cnNlLW9yaWdpbi1wcmljZSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG4gICAgcGFkZGluZy1yaWdodDogNXB4O1xufVxuXG4uY291cnNlLXByaWNlIHtcbiAgICBjb2xvcjogcmdiKDg0LCAxODEsIDgxKTtcbn1cblxuLmxlYXJuLXByZXNzLW5vdGljZSAuYnV0dG9uIHtcbiAgICBmbG9hdDogcmlnaHQ7XG59XG5cbi5sZWFybi1wcmVzcy1mb3JtIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4vKiBDb3Vyc2UgQ3VycmljdWx1bSAqL1xuXG4jbGVhcm4tcHJlc3MtY291cnNlLWN1cnJpY3VsdW0ge1xuICAgIHVsLmN1cnJpY3VsdW0tc2VjdGlvbnMsXG4gICAgdWwuc2VjdGlvbi1jb250ZW50IHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1O1xuICAgICAgICBsaS5zZWN0aW9uIHtcbiAgICAgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAuc2VjdGlvbi1oZWFkZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBhZGRpbmc6IDIwcHggMTVweDtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNGRkY7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgcCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgICAgY29sb3I6IHJnYigxNTMsIDE1MywgMTUzKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICB9XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI0RERDtcbiAgICAgICAgfVxuICAgICAgICAubWV0YSB7XG4gICAgICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgcmlnaHQ6IDE1cHg7XG4gICAgICAgICAgICB0b3A6IDIwcHg7XG4gICAgICAgICAgICAuY29sbGFwc2Uge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdscC1pY29ucyc7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzk1ZTZmOTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjRkZGO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGVhMGJcIjtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYucGx1cyB7XG4gICAgICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxlYTBhXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmNvdXJzZS1pdGVtIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoMjU1LCAyNTUsIDI1NSk7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgLnRyYW5zaXRpb24oYmFja2dyb3VuZCBsaW5lYXIgMC41cyk7XG4gICAgICAgIC5scC1sYWJlbC12aWV3aW5nLFxuICAgICAgICAubHAtbGFiZWwtY29tcGxldGVkIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS1pdGVtLXRpdGxlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGp1c3RpZnk7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJ2xwLWljb25zJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAubHAtaWNvbiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICAgIC5pdGVtLXN0YXR1cyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6IGRhc2hpY29ucztcbiAgICAgICAgICAgIC5ib3JkZXItcmFkaXVzKDRweCk7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjREREO1xuICAgICAgICAgICAgY29sb3I6ICMyMmI0ZmY7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYxNzdcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuaXRlbS1zdGF0dXMtdmlld2VkIHtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5pdGVtLXN0YXR1cy1zdGFydGVkIHtcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmNDY5XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5pdGVtLXN0YXR1cy1jb21wbGV0ZWQge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyMmI0ZmY7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjE0N1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuaXRlbS1zdGF0dXMtcGFzc2VkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjJiNGZmO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjRkZGO1xuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYxNDdcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLml0ZW0tc3RhdHVzLWZhaWxlZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2NjNTQwZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogI0ZGRjtcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMzM1XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5pdGVtLXJlc3VsdCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICAgICYuaXRlbS1oYXMtc3RhdHVzIHtcbiAgICAgICAgICAgIC5pdGVtLXN0YXR1cyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICYuaXRlbS1oYXMtcmVzdWx0IHtcbiAgICAgICAgICAgIC5pdGVtLXJlc3VsdCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICYudmlld2FibGUge1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2U3ZWNmYjtcbiAgICAgICAgICAgICAgICAudHJhbnNpdGlvbihiYWNrZ3JvdW5kIGxpbmVhciAwcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJi5jb3Vyc2UtbGVzc29uIHtcbiAgICAgICAgICAgIC5jb3Vyc2UtaXRlbS10aXRsZSB7XG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnXFxlOTI2JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJi5jb3Vyc2UtcXVpeiB7XG4gICAgICAgICAgICAuY291cnNlLWl0ZW0tdGl0bGUge1xuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ1xcZTk1MCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICYuaXRlbS1jdXJyZW50IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjOTVlNmY5O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLmZvY3VzIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmI3MTA7XG4gICAgICAgICAgICAmLm9mZiB7XG4gICAgICAgICAgICAgICAgLnRyYW5zaXRpb24obm9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuY291cnNlLWl0ZW0tbWV0YSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgdG9wOiAxNXB4O1xuICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgICAgIC5pdGVtLWxvb3AtbWV0YS10ZXh0IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogc21hbGw7XG4gICAgICAgICAgICAmLml0ZW0tZmluYWwge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNjYzU0MGQ7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogM3B4IDhweDtcbiAgICAgICAgICAgICAgICAuYm9yZGVyLXJhZGl1cygzcHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ubHAtaWNvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtZmFtaWx5OiAnbHAtaWNvbnMnO1xuICAgIGJhY2tncm91bmQ6ICM5NWU2Zjk7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogI0ZGRjtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgfVxuXG59XG5cbi5scC1sYWJlbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgIGZvbnQtc2l6ZTogNzglO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gICAgcGFkZGluZzogMCAxMHB4O1xuICAgIGJhY2tncm91bmQ6ICNEREQ7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIC5ib3JkZXItcmFkaXVzKDRweCk7XG4gICAgJi5scC1sYWJlbC12aWV3aW5nIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDU3LCAxNzUsIDI1NSk7XG4gICAgfVxuICAgICYubHAtbGFiZWwtY29tcGxldGVkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzM5YzdjZTtcbiAgICB9XG4gICAgJi5scC1sYWJlbC1sZXNzb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3O1xuICAgIH1cbiAgICAmLmxwLWxhYmVsLXF1aXoge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTM2NThjO1xuICAgIH1cbiAgICAmLmxwLWxhYmVsLXByZXZpZXcge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDJhN2NlO1xuICAgIH1cbn1cblxuLmxlYXJuLXByZXNzLWNvbnRlbnQtcHJvdGVjdGVkLW1lc3NhZ2Uge1xuICAgIGJvcmRlcjogM3B4IHNvbGlkICNmZjg0ODQ7XG4gICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICAgIGNvbG9yOiAjZmY4NDg0O1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAuaWNvbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB3aWR0aDogMzBweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIC5jcm9zcygzMHB4LCAzcHgsICNmZjg0ODQpO1xuICAgIH1cbn1cblxuLyoqIEJSRUFEQ1JVTUIgKi9cbi5sZWFybi1wcmVzcy1icmVhZGNydW1iIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4vKiogQ09VUlNFIFBST0dSRVNTICoqL1xuLnNpbmdsZS1scF9jb3Vyc2Uge1xuICAgIC5sZWFybi1wcmVzcy1jb3Vyc2UtcmVzdWx0cy1wcm9ncmVzcyB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgICAgIC5pdGVtcy1wcm9ncmVzcyB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgIHdpZHRoOiA2OCU7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDIlO1xuICAgICAgICAgICAgY2xlYXI6IGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgLmxwLWNvdXJzZS1wcm9ncmVzcy1oZWFkaW5nIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgIH1cbiAgICAgICAgLmNvdXJzZS1wcm9ncmVzcyB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgIHdpZHRoOiAzMCU7XG4gICAgICAgIH1cbiAgICAgICAgLm51bWJlciwgLnBlcmNlbnRhZ2Utc2lnbiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgICAgICBmb250LXNpemU6IDI1cHg7XG4gICAgICAgIH1cbiAgICAgICAgLnBlcmNlbnRhZ2Utc2lnbiB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgICB9XG4gICAgICAgIC5ncmFkZSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGNUY1RjU7XG4gICAgICAgICAgICBwYWRkaW5nOiAycHggN3B4O1xuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMoM3B4KTtcbiAgICAgICAgICAgICYuaW4tcHJvZ3Jlc3Mge1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLnBhc3NlZCB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzk1ZTZmOTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuZmFpbGVkIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmY1NDI1O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubHAtY291cnNlLXByb2dyZXNzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLmxwLXByb2dyZXNzLWJhciB7XG4gICAgICAgIGhlaWdodDogMTVweDtcbiAgICAgICAgYmFja2dyb3VuZDogI0RERDtcbiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMTVweCAwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAuYm9yZGVyLXJhZGl1cygzcHgpO1xuICAgICAgICAubHAtcHJvZ3Jlc3MtdmFsdWUge1xuICAgICAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTVweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICM5NWU2Zjk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmxwLXBhc3NpbmctY29uZGl0aW9uYWwge1xuICAgICAgICBsZWZ0OiAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBoZWlnaHQ6IDI1cHg7XG4gICAgICAgIHRvcDogLTVweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgJjpiZWZvcmUsXG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBib3JkZXI6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIH1cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogI0RERDtcbiAgICAgICAgfVxuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNEREQ7XG4gICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiNsZWFybi1wcmVzcy1jb250ZW50LWl0ZW0ge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgZGlzcGxheTogbm9uZTtcblxufVxuXG4vKiogQ09VUlNFIFRBQlMgKiovXG4ubGVhcm4tcHJlc3MtdGFicyB7XG4gICAgLmxlYXJuLXByZXNzLW5hdi10YWJzIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcbiAgICAgICAgLmxlYXJuLXByZXNzLW5hdi10YWIge1xuICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAtMXB4O1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM2ODY4Njg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNEREQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkICMwMDdhY2M7XG4gICAgICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA3YWNjO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAtNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuYWN0aXZlOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNGRkY7XG4gICAgICAgICAgICAgICAgYm90dG9tOiAtMXB4O1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICY6aG92ZXIge1xuXG4gICAgICAgIH1cbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmxlYXJuLXByZXNzLXRhYi1wYW5lbCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubGVhcm4tcHJlc3MtYmxvY2stY29udGVudC1taXhpbihAdykge1xuICAgICY6YmVmb3JlIHtcbiAgICAgICAgd2lkdGg6IChAdyk7XG4gICAgICAgIGhlaWdodDogKEB3KTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0oQHcvMik7XG4gICAgICAgIG1hcmdpbi10b3A6IC0oQHcvMik7IC8qLTc2cHg7Ki9cbiAgICAgICAgLXdlYmtpdC1jbGlwLXBhdGg6IHBvbHlnb24oMHB4IEB3LCBAdyBAdywgQHcgQHcvMiwgQHcvMiBAdy8yLCBAdy8yIDAsIDAgMCk7XG4gICAgfVxuXG4gICAgc3BhbiB7XG4gICAgICAgIGNsaXA6IHJlY3QoMCwgQHcrNCwgQHcvMisyLCBAdy8yKzIpO1xuICAgICAgICB3aWR0aDogQHcrNDtcbiAgICAgICAgaGVpZ2h0OiBAdys0O1xuICAgICAgICBtYXJnaW4tbGVmdDogLShAdy8yKzIpO1xuICAgICAgICBtYXJnaW4tdG9wOiAtKEB3LzIrMik7XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIHdpZHRoOiBAdys0O1xuICAgICAgICAgICAgaGVpZ2h0OiBAdys0O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubGVhcm4tcHJlc3MtY291cnNlLWJ1dHRvbnMge1xuXG4gICAgYS5idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBmb250LWZhbWlseTogTW9udHNlcnJhdCwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNDY4NzVlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIHBhZGRpbmc6IDAuODQzNzVlbSAwLjg3NWVtIDAuNzgxMjVlbTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDdhY2M7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qIFBPUFVQIFNUWUxFICovXG5cbiNwb3B1cF9vdmVybGF5IHtcbiAgICB6LWluZGV4OiAxMDAwMDAwMCAhaW1wb3J0YW50O1xufVxuXG4jcG9wdXBfY29udGFpbmVyIHtcbiAgICB6LWluZGV4OiAxMDAwMDAwMSAhaW1wb3J0YW50O1xufVxuXG5ib2R5LmNvdXJzZS1oYXMtcG9wdXAge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbiNjb3Vyc2UtY3VycmljdWx1bS1wb3B1cCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kOiAjMDAwO1xuICAgIHotaW5kZXg6IDk5OTk5OTtcbiAgICAqIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgI3BvcHVwLXNpZGViYXIge1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgd2lkdGg6IDM1MHB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNjBweDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0RERDtcbiAgICAgICAgLmNvdXJzZS1jdXJyaWN1bHVtLXRpdGxlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgLmN1cnJpY3VsdW0tc2VjdGlvbnMge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyO1xuICAgICAgICB9XG4gICAgICAgIC5sZWFybi1wcmVzcy1jb3Vyc2UtcmVzdWx0cy1wcm9ncmVzcyB7XG4gICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDIwcHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgLml0ZW1zLXByb2dyZXNzLCAuY291cnNlLXByb2dyZXNzIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAjcG9wdXAtbWFpbiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAzNTBweDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICAgICAgI3BvcHVwLWhlYWRlciB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICBsZWZ0OiAtMzUwcHg7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIGhlaWdodDogNjBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNjYzU0MGQ7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2FiNGExMDtcbiAgICAgICAgICAgIC5wb3B1cC1tZW51IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA2MHB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOiAzNTBweDtcbiAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjYWI0YTEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnBvcHVwLWNsb3NlLFxuICAgICAgICAgICAgLnNpZGViYXItaGlkZS1idG4sXG4gICAgICAgICAgICAuc2lkZWJhci1zaG93LWJ0biB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDU5cHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1OXB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMzRweDtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNjBweDtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNiMzRjMTA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLnNpZGViYXItaGlkZS1idG4ge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuc2lkZWJhci1zaG93LWJ0biB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMjBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAucG9wdXAtY2xvc2Uge1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAwcHg7XG4gICAgICAgICAgICAgICAgJjpiZWZvcmUsXG4gICAgICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAzcHggc29saWQgI0ZGRjtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDI5cHg7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDE3cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjYjM0YzEwO1xuICAgICAgICAgICAgICAgICAgICAmOmJlZm9yZSwgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNGRkY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAucG9wdXAtdGl0bGUge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwIDAgMzUwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA2MHB4O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogI0ZGRjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICAjcG9wdXAtY29udGVudCB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDYwcHg7XG4gICAgICAgICAgICBib3R0b206IDUwcHg7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRvcCBsaW5lYXIgMC4yNXMsIGJvdHRvbSBsaW5lYXIgMC4yNXM7XG5cbiAgICAgICAgICAgICNwb3B1cC1jb250ZW50LWlubmVyIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDIwcHggNDBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAjcG9wdXAtZm9vdGVyIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGNUY1RjU7XG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0RERDtcbiAgICAgICAgICAgIC5mb290ZXItY29udHJvbCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgICAgICAgICAgICAgICYucHJldi1pdGVtIHtcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYubmV4dC1pdGVtIHtcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAjcG9wdXAtaGVhZGVyLCAjcG9wdXAtZm9vdGVyIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgbGluZWFyIDAuMjVzO1xuICAgICAgICB9XG4gICAgICAgICYuZXhwYW5kIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDIwJTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICNwb3B1cC1oZWFkZXIsXG4gICAgICAgICAgICAjcG9wdXAtZm9vdGVyIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgI3BvcHVwLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWZyYW1lIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgIH1cbn1cblxuLmxlYXJuLXByZXNzLWNvbnRlbnQtaXRlbS10aXRsZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI0RERDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgICAmLmNvbnRlbnQtaXRlbS1xdWl6LXRpdGxlIHtcbiAgICAgICAgaDQge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICAgIC5xdWl6LWNvdW50ZG93biB7XG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICY6YWZ0ZXIsICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDEwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGJvdHRvbTogLTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDBhZGZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLndhcm5pbmctdGltZS1vdmVyIHtcbiAgICAgICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0ZGMDAwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuY291bnRkb3duIHtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5jbGVhcmZpeCgpO1xuICAgIH1cbiAgICAubHAtZXhwYW5kIHtcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICB3aWR0aDogNDNweDtcbiAgICAgICAgaGVpZ2h0OiA0M3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcbiAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxufVxuXG4ubGVhcm4tcHJlc3MtY29udGVudC1pdGVtLXN1bW1hcnkge1xuICAgIC8qcGFkZGluZzogMjBweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0RERDsqL1xuICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgLnF1aXotcXVlc3Rpb24tdGl0bGUge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cbiAgICAubGVhcm4tcHJlc3MtcXVlc3Rpb24tZXhwbGFuYXRpb24sIC5sZWFybi1wcmVzcy1xdWVzdGlvbi1oaW50IHtcbiAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICAgICAgcGFkZGluZzogMTVweCAyMHB4O1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgIC5oaW50LXRpdGxlLCAuZXhwbGFuYXRpb24tdGl0bGUge1xuICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uYnV0dG9uLWZpbmlzaC1xdWl6IHtcbiAgICBmbG9hdDogcmlnaHQ7XG59XG5cbi5sZWFybnByZXNzIGZvcm0ucHVyY2hhc2UtY291cnNlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4jbGVhcm4tcHJlc3MtYmxvY2stY29udGVudCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogZmFkZSgjRkZGLCAyNSUpO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB6LWluZGV4OiA5OTk5OTk5OTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICAmOmJlZm9yZSwgJjphZnRlciwgc3BhbiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgLmJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgJjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzAwMDtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIC5hbmltYXRpb24oc3Bpbi0xMyAxLjVzIGluZmluaXRlKTtcbiAgICB9XG4gICAgJjphZnRlciB7XG4gICAgICAgIHotaW5kZXg6IDA7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBib3JkZXI6IDEwcHggc29saWQgIzAwMDAwMDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC04MHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAtODBweDtcbiAgICAgICAgd2lkdGg6IDE2MHB4O1xuICAgICAgICBoZWlnaHQ6IDE2MHB4O1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICBzcGFuIHtcbiAgICAgICAgei1pbmRleDogMjA7XG4gICAgICAgIC5hbmltYXRpb24oc3Bpbi0xMiAxLjVzIGluZmluaXRlKTtcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBib3JkZXI6IDZweCBzb2xpZCAjOTVlNmY5O1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAubGVhcm4tcHJlc3MtYmxvY2stY29udGVudC1taXhpbig4MHB4KTtcbn1cblxuYm9keS5ibG9jay1jb250ZW50IHtcbiAgICAjbGVhcm4tcHJlc3MtYmxvY2stY29udGVudCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbn1cblxuLyogQ09VUlNFIFFVSVogKi9cbi5xdWl6LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgY2xlYXI6IGJvdGg7XG59XG5cbi5xdWl6LWludHJvIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbGkgbGFiZWwge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxufVxuXG4ucXVpei1xdWVzdGlvbnMtbGlzdCB7XG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlO1xuICAgIGxpIHtcbiAgICAgICAgbWFyZ2luOiAwIDAgMTBweCAwO1xuICAgIH1cbiAgICAucXVlc3Rpb24tdGl0bGUge1xuICAgICAgICBtYXJnaW46IDAgMCA1cHggMDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgfVxuICAgIC5jdXJyZW50IHtcbiAgICAgICAgLnF1ZXN0aW9uLXRpdGxlIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSwgaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0RERDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgJjpjaGVja2VkIHtcbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQge1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjMDBiOWViO1xuICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzAwYjllYjtcbiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpO1xuICAgICAgICAgICAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZSgxNGRlZyk7XG4gICAgICAgICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpO1xuICAgICAgICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzNkZWcpO1xuICAgICAgICAgICAgd2lkdGg6IDhweDtcbiAgICAgICAgICAgIGhlaWdodDogMTZweDtcblxuICAgICAgICAgICAgdG9wOiAtNXB4O1xuICAgICAgICAgICAgbGVmdDogNXB4O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgICAgICY6ZGlzYWJsZWQge1xuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjREREO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gICAgICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAmOmNoZWNrZWQge1xuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwYjllYjtcbiAgICAgICAgICAgICAgICB3aWR0aDogOHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogOHB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC00cHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEREQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5xdWVzdGlvbi1yZXN1bHRzIHtcbiAgICAucXVlc3Rpb24tdGl0bGUge1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAmLmNvcnJlY3Qge1xuICAgICAgICAucXVlc3Rpb24tdGl0bGUge1xuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgY29udGVudDogJ1xcZjE0Nyc7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMGFkZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgJi5za2lwcGVkIHtcbiAgICAgICAgLnF1ZXN0aW9uLXRpdGxlIHtcbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGY1MzQnO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjYzZjNmM2O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICYuaW5jb3JyZWN0IHtcbiAgICAgICAgLnF1ZXN0aW9uLXRpdGxlIHtcbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGYzMzUnO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmY1NDI1O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC51c2VyLWFuc3dlci1mYWxzZSB7XG4gICAgICAgICAgICAub3B0aW9uLXRpdGxlIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAuYW5zd2VyLXRydWUge1xuICAgICAgICBjb2xvcjogIzAwN2FjYztcbiAgICAgICAgLm9wdGlvbi10aXRsZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOWQ4O1xuICAgICAgICAgICAgcGFkZGluZzogMCA1cHg7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogLTVweDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnB1dCB7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxufVxuXG4ucXVpei1kZXNjcmlwdGlvbixcbi5xdWVzdGlvbi1jb250ZW50IHtcbiAgICAubGVhcm4tcHJlc3MtcXVlc3Rpb24tdGl0bGUge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cbn1cblxuLnF1aXotY291bnRkb3duIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1pbi13aWR0aDogMTUwcHg7XG4gICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIHBhZGRpbmc6IDVweCAwO1xufVxuXG4jcXVpei1jb3VudGRvd24ge1xuICAgIC5wcm9ncmVzcy1jaXJjbGUge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgM3B4ICNiZGJkYmQgaW5zZXQ7XG4gICAgICAgIC5pbnNpZGUge1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgICAgICAuY291bnRkb3duIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwODc5OTg7XG4gICAgICAgICAgICAgICAgX3RleHQtc2hhZG93OiAxcHggMXB4ICM4ZWU1ZmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMTEwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNEREQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDBiOWViO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCAjMDk3YTk4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4jcXVpei1wcm9ncmVzcyB7XG4gICAgLnByb2dyZXNzLWNpcmNsZShAc2l6ZTogMjAwcHgsIEBiYWNrZ3JvdW5kOiAjRERELCBAZmlsbDogI0ZGMDAwMCwgQGluaXRpYWxpemU6IDAlLCBAaW5zaWRlLXNpemU6IDE3MHB4LCBAaW5zaWRlLWJhY2tncm91bmQ6ICNGRkYpO1xufVxuXG4ucXVpei1yZXN1bHQge1xuICAgIC5xdWl6LXJlc3VsdC1tYXJrIHtcbiAgICAgICAgLnByb2dyZXNzLWNpcmNsZSgpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cbiAgICAucXVpei1yZXN1bHQtc3VtbWFyeSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogNTAwcHg7XG4gICAgICAgIC5xdWl6LXJlc3VsdC1maWVsZCB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjVGNUY1O1xuICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICBtYXJnaW46IDAgMCA4cHggMDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAxMHB4O1xuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMoNHB4KTtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgICAgICAgIHNwYW4sIHNwYW46YWZ0ZXIsICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS10ZXh0KTtcbiAgICAgICAgICAgICAgICBjb2xvcjogI0ZGRjtcbiAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgcGFkZGluZzogM3B4IDEwcHg7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC41cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwYW46YWZ0ZXIge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogM3B4IDEwcHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuY29ycmVjdCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIyYjRmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYud3Jvbmcge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZjU0MjU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLmVtcHR5IHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzY1NkQ2RDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwLnF1aXotcmVzdWx0LXRpbWUge1xuICAgICAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG4gICAgfVxuICAgIC5xdWl6LWdyYWRlIHtcbiAgICAgICAgcCB7XG4gICAgICAgICAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgICAgICAmLnBhc3NlZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMjJiNGZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmLmZhaWxlZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjZmY1NDI1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmVsZW1lbnQtZGF0YS1wZXJjZW50LWxvb3AgKEBpKSB3aGVuIChAaSA8PSAxMDApIHtcbiAgICAuc2luZ2xlLXF1aXogLnF1aXotcmVzdWx0LWZpZWxkW2RhdGEtdmFsdWU9XCJAe2l9XCJdOmJlZm9yZSxcbiAgICAuc2luZ2xlLXF1aXogLnF1aXotcmVzdWx0LWZpZWxkW2RhdGEtdmFsdWU9XCJAe2l9XCJdIHNwYW4sXG4gICAgI3F1aXotY291bnRkb3duW2RhdGEtdmFsdWU9XCJAe2l9XCJdOmFmdGVyIHtcbiAgICAgICAgd2lkdGg6IH5cIkB7aX0lXCI7XG4gICAgfVxuICAgIC5lbGVtZW50LWRhdGEtcGVyY2VudC1sb29wKEBpICsgMSk7XG59XG5cbi5lbGVtZW50LWRhdGEtcGVyY2VudC1sb29wICgwKTtcblxuLyogUVVFU1RJT04gKi9cbi5sZWFybi1wcmVzcy1xdWVzdGlvbi1vcHRpb25zIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgID4gbGkuYW5zd2VyLW9wdGlvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAuYm9yZGVyLXJhZGl1cyg0cHgpO1xuICAgICAgICA+IGxhYmVsIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLCBpbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGluaXRpYWw7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHRvcDogMTBweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAmOmNoZWNrZWQ6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogNHB4IHNvbGlkICMwMGI5ZWI7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAzcHg7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDhweDtcbiAgICAgICAgICAgICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0ocm90YXRlKDM2ZGVnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6Y2hlY2tlZCArIHAge1xuICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwYjllYjtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW2Rpc2FibGVkXSwgaW5wdXRbdHlwZT1cInJhZGlvXCJdW2Rpc2FibGVkXSB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gICAgICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMoNTAlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNXB4IDIwcHggNXB4IDYwcHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgICAgICAgICAgICAmLnNpbmdsZS1saW5lcyB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweCAwIDYwcHg7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA1MHB4OyAvKiBtaWRkbGUgKi9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWwgcCB7XG4gICAgICAgICAgICAuYm9yZGVyLXJhZGl1cyg0cHgpO1xuICAgICAgICB9XG4gICAgICAgICYuYW5zd2VyLXRydWUgbGFiZWwgcCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDBiOWViO1xuICAgICAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgIH1cbiAgICAgICAgJjpob3ZlciBsYWJlbCBwIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNENEQ0RDQ7XG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cbiAgICAgICAgJi51c2VyLWFuc3dlci1mYWxzZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjVGNUY1O1xuICAgICAgICAgICAgPiBsYWJlbCB7XG4gICAgICAgICAgICAgICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdICsgcCwgaW5wdXRbdHlwZT1cInJhZGlvXCJdICsgcCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0ZGMDAwMDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y1RjVGNTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmFuc3dlci1vcHRpb24tcmVzdWx0IHtcbiAgICAgICAgbGFiZWwge1xuICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnB1dFtkaXNhYmxlZF0ge1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5sZWFybnByZXNzLWNvbnRlbnQge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5jb3Vyc2UtbWV0YSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAuY291cnNlLW9yaWdpbi1wcmljZSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG4gICAgfVxuICAgIC5jb3Vyc2UtcHJpY2Uge1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG5cbn1cblxuLyoqIE1FU1NBR0UgKi9cbi5sZWFybi1wcmVzcy1tZXNzYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiAjRjVGNUY1O1xuICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzAwQTBEMjtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHggMHB4IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJ1dHRvbiB7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICB9XG4gICAgcCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgfVxuICAgICY6YWZ0ZXIge1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAmLm5vdGljZSB7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjYjNkMjBhO1xuICAgIH1cbiAgICAmLmVycm9yIHtcbiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICNiODFjMjM7XG4gICAgfVxuICAgIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIH1cbn1cblxuLyoqL1xuLmxlYXJuLXByZXNzLWNoZWNrb3V0LWNvbW1lbnQsXG4ubGVhcm4tcHJlc3MtY2hlY2tvdXQtcGF5bWVudCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLmxlYXJuLXByZXNzLWNoZWNrb3V0LXBheW1lbnQge1xuICAgIC5wYXltZW50LW1ldGhvZHMge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxufVxuXG4vKiBDT1VSU0UgUVVJWiAqL1xuLnNpbmdsZS1xdWl6IHtcbiAgICAucXVpei1xdWVzdGlvbnMtbGlzdCB7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuICAgIC5xdWl6LWludHJvIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRjVGNUY1O1xuICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgfVxuICAgIGg0IHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgIH1cbn1cblxuLmxlYXJuLXByZXNzLXRvb2x0aXAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBiYWNrZ3JvdW5kOiAjMGY0OTU2O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICB3aWR0aDogMTBweDtcbiAgICBoZWlnaHQ6IDEwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCI/XCI7XG4gICAgICAgIGZvbnQtc2l6ZTogN3B4O1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAycHg7XG4gICAgICAgIGxlZnQ6IDNweDtcbiAgICB9XG59XG5cbi8qIEZvcm0gZmllbGQgKi9cbi5scC1mb3JtLWZpZWxkLXdyYXAge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgIC5scC1mb3JtLWZpZWxkIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgICAgICAubHAtZm9ybS1maWVsZC1sYWJlbCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgICAgICB9XG4gICAgICAgIC5scC1mb3JtLWZpZWxkLWlucHV0IC5kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XG4gICAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgICAgIH1cbiAgICAgICAgLmxwLWZpZWxkLWVycm9yLW1lc3NhZ2Uge1xuICAgICAgICAgICAgY29sb3I6ICNGRjAwMDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5sZWFybi1wcmVzcy11c2VyLXByb2ZpbGUge1xuICAgICNsZWFybi1wcmVzcy11c2VyLWluZm97XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIC51c2VyLWF2YXRhciB7XG4gICAgICAgICAgICB3aWR0aDogMTUwcHg7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgIC5hdmF0YXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLnVzZXItYmFzaWMtaW5mb3tcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxNzBweDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAubHAtZWRpdC1wcm9maWxlIHtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAuY2xlYXJmaXgoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudXNlci1iYXNpYy1pbmZvIHtcbiAgICAgICAgcCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICB9XG4gICAgLmxlYXJuLXByZXNzLXRhYnMge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBtYXJnaW46IDMwcHggMCAyMHB4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcbiAgICAgICAgJiA+IGxpIHtcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDtcbiAgICAgICAgICAgICYgPiBhIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTBweCAxNXB4O1xuICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzY4Njg2ODtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuY3VycmVudCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkICMwMDdhY2M7XG4gICAgICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA3YWNjO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAtNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAubGVhcm4tcHJlc3Mtc3VidGFicyB7XG4gICAgICAgICYgPiBsaSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAmLmN1cnJlbnQge1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC5sZWFybi1wcmVzcy1zdWJ0YWItY29udGVudCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgICYuY3VycmVudCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgICBsaS5jb3Vyc2Uge1xuICAgICAgICAgICAgaDMge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5wcm9maWxlLWNvdXJzZXMge1xuICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgICAgICAgLmxlYXJuLXByZXNzLWNvdXJzZS1yZXN1bHRzLXByb2dyZXNzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDE1cHggMTVweCAxNXB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBidXR0b24ubGVhcm4tcHJlc3MtY291cnNlLXdpc2hsaXN0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuXG4gICAgLnVzZXItcHJvZmlsZS1lZGl0LWZvcm0ge1xuXG4gICAgICAgIC5pbmZvLWZpZWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZGVzY3JpcHRpb24ge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnVzZXItcHJvZmlsZS1waWN0dXJlIHtcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICAgICAgLnBpY3R1cmUsIC5jaGFuZ2UtcGljdHVyZSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmNoYW5nZS1waWN0dXJlIHtcbiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb24ge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICAuY2xlYXJmaXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5wcm9maWxlLWZpZWxkLW5hbWUge1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmNoYW5nZS1wYXNzd29yZCB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgI3VzZXJfcHJvZmlsZV9wYXNzd29yZF9mb3JtIHtcbiAgICAgICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMTVweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuICAgIC51cGRhdGUtcHJvZmlsZSB7XG4gICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAjREREO1xuICAgICAgICBwYWRkaW5nLXRvcDogMjBweDtcbiAgICB9XG4gICAgLmxlYXJuLXByZXNzLXN1YnRhYi1jb250ZW50IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICNscC11c2VyLWVkaXQtYXZhdGFyIHtcbiAgICAgICAgLm1veGllLXNoaW0ge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICAubHAtZm9ybS1maWVsZC1hdmF0YXIge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgI2xwLWF2YXRhci1hY3Rpb25zIHtcbiAgICAgICAgICAgIG1hcmdpbjogMjBweCAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIC5scC1hdmF0YXItcHJldmlldyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNEREQ7XG4gICAgICAgIC5wcm9maWxlLXBpY3R1cmUge1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xMDAlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5wcm9maWxlLWF2YXRhci1oaWRkZW4ge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLmxwLWF2YXRhci1wcmV2aWV3LWFjdGlvbnMge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IC0xNHB4O1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAxMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5scC1hdmF0YXItdXBsb2FkLXByb2dyZXNzIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IC01cHg7XG4gICAgICAgICAgICBsZWZ0OiAxMHB4O1xuICAgICAgICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgLmxwLWF2YXRhci11cGxvYWQtcHJvZ3Jlc3MtdmFsdWUge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjNTYzZDdjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5scC1hdmF0YXItdXBsb2FkLWVycm9yIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgLmxwLWF2YXRhci1wcmV2aWV3LWFjdGlvbnMge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIC5scC1hdmF0YXItcHJldmlldy1hY3Rpb25zIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmLnVwbG9hZGluZywgJi51cGxvYWQtZXJyb3Ige1xuICAgICAgICAgICAgLmxwLWF2YXRhci1wcmV2aWV3LWFjdGlvbnMge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAubHAtYXZhdGFyLXVwbG9hZC1wcm9ncmVzcyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNDtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmLnVwbG9hZC1lcnJvciB7XG4gICAgICAgICAgICAubHAtYXZhdGFyLXVwbG9hZC1lcnJvciB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJi5jcm9waW5nIHtcbiAgICAgICAgICAgIC5scC1hdmF0YXItcHJldmlldy1hY3Rpb25zIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmxwLWF2YXRhci1jcm9wLWltYWdlIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IGluaGVyaXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogbW92ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLmxwLWNyb3AtY29udHJvbHMge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgLmxwLXpvb20ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzU2M2Q3YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC51aS1zbGlkZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudWktc2xpZGVyLWhhbmRsZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNTYzZDdhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGV3LXJlc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLmxwLWNhbmNlbC11cGxvYWQge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiA1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogNXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIC5jbGVhcmZpeCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ib2R5IHtcbiAgICAmLnByb2ZpbGUtZHJhZ2dpbmcge1xuICAgICAgICBjdXJzb3I6IG1vdmUgIWltcG9ydGFudDtcbiAgICB9XG4gICAgJi5wcm9maWxlLXJlc2l6aW5nIHtcbiAgICAgICAgY3Vyc29yOiBldy1yZXNpemUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5sZWFybi1wcmVzcy1wYWdpbmF0aW9uIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdWwge1xuICAgICAgICBsaXN0LXN0eWxlOiBkaXNjO1xuICAgICAgICAmID4gbGkge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjREREO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGNUY1RjU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCAxMHB4O1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEREQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmxlYXJuLXByZXNzLWJlY29tZS10ZWFjaGVyLWZvcm0ge1xuICAgIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbGkge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyogakFsZXJ0cyAqL1xuI3BvcHVwX2NvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZDogI0ZGRjtcblxuICAgICNwb3B1cF90aXRsZSB7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICAgICAgYmFja2dyb3VuZDogIzE4QjZDNztcbiAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgICNwb3B1cF9jb250ZW50IHtcbiAgICAgICAgcGFkZGluZzogMjBweDtcbiAgICAgICAgI3BvcHVwX21lc3NhZ2Uge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNwb3B1cF9wYW5lbCB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG59XG5cbi5sZWFybi1wcmVzcy1hdXRvLXJlZGlyZWN0LW5leHQtaXRlbSB7XG4gICAgZGlzcGxheTogbm9uZTtcblxuICAgICYuYWN0aXZlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxufVxuXG4uc2luZ2xlLWxwX2NvdXJzZSB7XG4gICAgLmNvdXJzZS1zdW1tYXJ5IHtcbiAgICAgICAgLmxwX2NvdXJzZSB7XG4gICAgICAgICAgICAuZW50cnktZm9vdGVyIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC5sZWFybi1wcmVzcy1tZXNzYWdlIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgbWFyZ2luLXRvcDogMjVweDtcblxuICAgICAgICAubGVhcm4tcHJlc3MtY291bnRkb3duIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHdpZHRoOiAxLjVlbTtcbiAgICAgICAgICAgIGhlaWdodDogMS41ZW07XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjY2M1NDBkO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgICAgICAgICAgZm9udC1zaXplOiAwLjhlbTtcbiAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICB9XG4gICAgICAgIC5sZWFybnByZXNzLWRpc21pc3Mtbm90aWNlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHJpZ2h0OiAxZW07XG4gICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjE1M1wiO1xuICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG4vKiB0b29sdGlwICovXG4ubGVhcm4tcHJlc3MtdG9vbHRpcC1idWJibGUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI2LCAyNiwgMjYsIDAuOSk7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gICAgcGFkZGluZzogOHB4IDEwcHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIHotaW5kZXg6IDk5OTk5OTk7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4vKiBmaWxsIGluIGJsYW5rICovXG5pbnB1dC5ibGFuay1maWxsLWNvcnJlY3Qge1xuICAgIHdpZHRoOiBhdXRvO1xufVxuXG5ib2R5LmNvbnRlbnQtaXRlbS1vbmx5IHtcbiAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgLmxlYXJuLXByZXNzLWNvbnRlbnQtaXRlbS1vbmx5IHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB6LWluZGV4OiA5OTk5OTk5O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgI2xlYXJuLXByZXNzLWNvbnRlbnQtaXRlbSB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRyYW5zaXRpb246IG1heC13aWR0aCBsaW5lYXIgMC4yNXM7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMDBweDtcbiAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgJi5leHBhbmQge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5scC1ncm91cC1oZWFkaW5nLXRpdGxlIHtcbiAgICAmLnRvZ2dsZS1vZmYsICYudG9nZ2xlLW9uIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAudG9nZ2xlLWljb24ge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgZm9udC1zaXplOiBsYXJnZXI7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnKyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgJi50b2dnbGUtb24ge1xuICAgICAgICAudG9nZ2xlLWljb24ge1xuICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLypcbi5wYXltZW50LW1ldGhvZC1mb3JtIHtcbiAgICAmLnBheW1lbnRfbWV0aG9kX2F1dGhvcml6ZW5ldCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmN2Y3Zjc7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgICAgIC1tb3otYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMjVweDtcbiAgICAgICAgLnJvdy1mbHVpZCB7XG4gICAgICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyNXB4O1xuICAgICAgICAgICAgLnNwYW42IHtcbiAgICAgICAgICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxN3B4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCwgaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZWN0LCBpbnB1dCB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDhweCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxlY3QucmVxdWlyZWQge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzAwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59Ki9cblxuLnBsYWNlLW9yZGVyLWFjdGlvbiB7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbn1cblxuLndvb2NvbW1lcmNlIHtcbiAgICBmb3JtIC5mb3JtLXJvdyB7XG4gICAgICAgICYudmFsaWRhdGUtZW1haWwsICYudmFsaWRhdGUtcGhvbmUge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5jaGVja291dF9jb3Vwb24ge1xuICAgICAgICAuZm9ybS1yb3ctbGFzdCB7XG4gICAgICAgICAgICBpbnB1dC5idXR0b24ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEzcHggMTBweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ubGVhcm4tcHJlc3Mtc2VhcmNoLWNvdXJzZS1mb3JtIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGlucHV0LnNlYXJjaC1jb3Vyc2UtaW5wdXRbbmFtZT1cInNcIl0ge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC0yMDBweDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5zZWFyY2gtY291cnNlLWJ1dHRvbiB7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG59XG5cbi50YWJsZS1vcmRlcnMge1xuICAgIC5vcmRlci1zdGF0dXMge1xuICAgICAgICAmLm9yZGVyLXN0YXR1cy1yZW1vdmVkIHtcbiAgICAgICAgICAgIGNvbG9yOiAjRkYwMDAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKiBTaG9ydGNvZGUvV2lkZ2V0cyAqL1xuLndpZGdldF9scC13aWRnZXQtcG9wdWxhci1jb3Vyc2VzLCAud2lkZ2V0X2xwLXdpZGdldC1yZWNlbnQtY291cnNlcywgLndpZGdldF9scC13aWRnZXQtZmVhdHVyZWQtY291cnNlcyB7XG4gICAgLmNvdXJzZS1tZXRhLWRhdGEge1xuICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnLyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmOmxhc3QtY2hpbGQ6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG4gICAgLmNvdXJzZS10aXRsZSB7XG4gICAgICAgIG1hcmdpbjogNXB4IDA7XG4gICAgfVxuICAgIC5jb3Vyc2UtZW50cnkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNEREQ7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICAgIH1cbn1cblxuLmVkaXQtY291cnNlLWl0ZW0tbGluayB7XG4gICAgYSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogXCJcXGY0NjRcIjtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBEYXNoaWNvbnM7XG4gICAgICAgICAgICBmb250LXNpemU6IDI2cHg7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5jb3Vyc2UtaXRlbS1uYXZpZ2F0aW9uIHtcbiAgICBib3JkZXItdG9wOiA0cHggc29saWQgIzMzMztcbiAgICBwYWRkaW5nLXRvcDogMTBweDtcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgIC5uYXYtbGlua3Mge1xuICAgICAgICAubmF2LWxpbmsge1xuICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgLm1ldGEtbmF2IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogc21hbGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjliOWI5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAucG9zdC10aXRsZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5uYXYtcHJldmlvdXMge1xuICAgICAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5uYXYtbmV4dCB7XG4gICAgICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKiB3aWRnZXQgYXR0cmlidXRlcyAqL1xuLmxwLWNvdXJzZS1hdHRyaWJ1dGVzIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIGxpIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICB9XG4gICAgLmxwLWNvdXJzZS1hdHRyaWJ1dGUtdmFsdWVzIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgfVxuICAgICYuY291cnNlLWF0dHJpYnV0ZXMge1xuICAgICAgICAubHAtY291cnNlLWF0dHJpYnV0ZS12YWx1ZXMge1xuICAgICAgICAgICAgbGkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAzcHggOHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGMEYwRjA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCA1cHggNXB4IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgJi5jb3Vyc2UtZmlsdGVycyB7XG4gICAgICAgIC5scC1jb3Vyc2UtYXR0cmlidXRlLXZhbHVlcyB7XG4gICAgICAgICAgICBsaSB7XG4gICAgICAgICAgICAgICAgYTpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogZGFzaGljb25zO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEREQ7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNGRkY7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAmOmhvdmVyIGE6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzRhY2ZmZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaS5hY3RpdmUge1xuICAgICAgICAgICAgICAgIGE6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYxNDdcIjtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzRhY2ZmZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJjpob3ZlciBhOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMzM1XCI7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNhMjAwMDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5ALW1vei1rZXlmcmFtZXMgc3Bpbi0xMiB7XG4gICAgMCUge1xuICAgICAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgICAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgIH1cbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIHNwaW4tMTIge1xuICAgIDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgc3Bpbi0xMiB7XG4gICAgMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICB9XG59XG5cbkAtbW96LWtleWZyYW1lcyBzcGluLTEzIHtcbiAgICAxMDAlIHtcbiAgICAgICAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICB9XG4gICAgMCUge1xuICAgICAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgdHJhbnNsYXRlKDBweCk7XG4gICAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3Bpbi0xMyB7XG4gICAgMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyBzcGluLTEzIHtcbiAgICAxMDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSB0cmFuc2xhdGUoMHB4KTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZykgdHJhbnNsYXRlKDBweCk7XG4gICAgfVxuICAgIDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHRyYW5zbGF0ZSgwcHgpO1xuICAgIH1cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTI1MHB4KSB7XG4gICAgLnNpbmdsZS1scF9jb3Vyc2UgLmxlYXJuLXByZXNzLWNvdXJzZS1yZXN1bHRzLXByb2dyZXNzIHtcbiAgICAgICAgLml0ZW1zLXByb2dyZXNzLCAuY291cnNlLXByb2dyZXNzIHtcbiAgICAgICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICAgLml0ZW1zLXByb2dyZXNzIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDUwcHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI2xlYXJuLXByZXNzLWJsb2NrLWNvbnRlbnQge1xuICAgICAgICAubGVhcm4tcHJlc3MtYmxvY2stY29udGVudC1taXhpbig2MHB4KTtcbiAgICB9XG5cbiAgICAubGVhcm4tcHJlc3MtY291cnNlLXJlc3VsdHMtcHJvZ3Jlc3Mge1xuICAgICAgICAuaXRlbXMtcHJvZ3Jlc3MsIC5jb3Vyc2UtcHJvZ3Jlc3Mge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gICAgLmxlYXJuLXByZXNzLWNvdXJzZXMge1xuICAgICAgICBsaS5jb3Vyc2Uge1xuICAgICAgICAgICAgJjpudGgtY2hpbGQoNG4rMSkge1xuICAgICAgICAgICAgICAgIGNsZWFyOiBsZWZ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAubGVhcm4tcHJlc3MtY291cnNlcyB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkgYW5kIChtaW4td2lkdGg6IDYwMHB4ICkge1xuXG4gICAgLmxlYXJuLXByZXNzLWNvdXJzZXMge1xuICAgICAgICBsaS5jb3Vyc2Uge1xuICAgICAgICAgICAgd2lkdGg6IDMxLjMzJTtcbiAgICAgICAgICAgIG1hcmdpbjogMCAyJSAzMHB4IDA7XG4gICAgICAgICAgICAvKiBwYWRkaW5nOiAwIDIwcHg7ICovXG4gICAgICAgICAgICAmOm50aC1jaGlsZCgzbisxKSB7XG4gICAgICAgICAgICAgICAgY2xlYXI6IGxlZnQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSBhbmQgKG1pbi13aWR0aDogNDAwcHggKSB7XG5cbiAgICAubGVhcm4tcHJlc3MtY291cnNlcyB7XG4gICAgICAgIGxpLmNvdXJzZSB7XG4gICAgICAgICAgICB3aWR0aDogNDglO1xuICAgICAgICAgICAgbWFyZ2luOiAwIDIlIDMwcHggMDtcbiAgICAgICAgICAgIC8qIHBhZGRpbmc6IDAgMjBweDsgKi9cbiAgICAgICAgICAgICY6bnRoLWNoaWxkKDJuKzEpIHtcbiAgICAgICAgICAgICAgICBjbGVhcjogbGVmdDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vKlxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgLndvb2NvbW1lcmNlIHtcbiAgICAgICAgLmNoZWNrb3V0X2NvdXBvbiB7XG4gICAgICAgICAgICAuZm9ybS1yb3cge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCkge1xuXG4gICAgLmxlYXJuLXByZXNzLWNvdXJzZXMge1xuICAgICAgICBsaS5jb3Vyc2Uge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW46IDAgMCAzMHB4IDA7XG4gICAgICAgICAgICBjbGVhcjogbGVmdDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMzUwcHgpIHtcbiAgICAjY291cnNlLWN1cnJpY3VsdW0tcG9wdXAgI3BvcHVwLXNpZGViYXIge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG59XG5cbi8qIGZ1bGwgd2lkdGggd2l0aCB0d2VudHlzaXh0ZWVuIHRoZW1lICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MS41NjI1ZW0pIHtcbiAgICBib2R5LnNpbmdsZS1scF9jb3Vyc2Uge1xuICAgICAgICBhcnRpY2xlLmxwX2NvdXJzZSB7XG4gICAgICAgICAgICAuZW50cnktY29udGVudCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAuZW50cnktZm9vdGVyIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKlxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjE1cHgpIHtcbiAgICAucGF5bWVudC1tZXRob2QtZm9ybSB7XG4gICAgICAgICYucGF5bWVudF9tZXRob2RfYXV0aG9yaXplbmV0IHtcbiAgICAgICAgICAgIC5yb3ctZmx1aWQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICAgICAgICAgICAgICAgIC5zcGFuNiB7XG4gICAgICAgICAgICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxN3B4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCwgaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0LCBpbnB1dCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA4cHggMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QucmVxdWlyZWQge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgI2xlYXJuLXByZXNzLWF1dGhvcml6ZW5ldC1wYXltZW50LWV4cG1vbnRoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4qLyJdLCJmaWxlIjoibGVhcm5wcmVzcy5jc3MifQ== */
200
  border-top: 1px solid #FFF;
201
  position: relative;
202
  }
203
+ #learn-press-course-curriculum .section-header h4 {
204
+ display: inline;
205
+ }
206
  #learn-press-course-curriculum .section-header p {
207
  display: inline-block;
208
  font-weight: normal;
910
  }
911
  .learn-press-content-item-summary {
912
  /*padding: 20px;
913
+ border-top: 1px solid #DDD;*/
914
  margin-bottom: 30px;
915
  }
916
  .learn-press-content-item-summary .quiz-question-title {
2895
  }
2896
  }
2897
  */
 
 
assets/js/frontend/profile.js CHANGED
@@ -78,7 +78,7 @@
78
  runtimes : 'html5,flash,silverlight,html4',
79
  browse_button : 'lp-upload-photo',
80
  container : $('#lp-user-edit-avatar').get(0),
81
- url : LP_Settings.ajax.addQueryVar('action', 'learnpress_upload-user-avatar'),
82
  filters : {
83
  max_file_size: '10mb',
84
  mime_types : [
78
  runtimes : 'html5,flash,silverlight,html4',
79
  browse_button : 'lp-upload-photo',
80
  container : $('#lp-user-edit-avatar').get(0),
81
+ url : (LP_Settings.ajax.addQueryVar('action', 'learnpress_upload-user-avatar')).replace(/^[^:]+:/i,''),
82
  filters : {
83
  max_file_size: '10mb',
84
  mime_types : [
assets/js/frontend/single-course.js CHANGED
@@ -448,7 +448,8 @@ if (typeof LearnPress === 'undefined') {
448
  if (isNew) {
449
  $content.attr('src', LP.addQueryVar('content-item-only', 'yes', this.currentItem.get('url')));
450
  }
451
- $content.unbind('load').load(function () {
 
452
  that.itemLoading = 0;
453
  });
454
  },
448
  if (isNew) {
449
  $content.attr('src', LP.addQueryVar('content-item-only', 'yes', this.currentItem.get('url')));
450
  }
451
+ $content.unbind('load').load( function() {
452
+ $target.parent().addClass('item-has-status item-viewed');
453
  that.itemLoading = 0;
454
  });
455
  },
assets/less/admin/admin.less CHANGED
@@ -1808,13 +1808,15 @@ body.post-type-lp_question #question_answer_ .inside {
1808
  min-width: 250px;
1809
  }
1810
 
1811
- .rwmb-meta-box label {
1812
- color: #222;
1813
- font-weight: bold;
1814
- display: block;
1815
- margin: 0 0 16px 0;
 
 
 
1816
  }
1817
-
1818
  .description {
1819
  margin-top: 5px;
1820
  }
1808
  min-width: 250px;
1809
  }
1810
 
1811
+ .rwmb-meta-box {
1812
+ margin-top: 20px;
1813
+ label {
1814
+ color: #222;
1815
+ font-weight: bold;
1816
+ display: block;
1817
+ margin: 0 0 16px 0;
1818
+ }
1819
  }
 
1820
  .description {
1821
  margin-top: 5px;
1822
  }
assets/less/learnpress.less CHANGED
@@ -16,2115 +16,2118 @@
16
 
17
  @icon-url: '../fonts/lp-icons';
18
  @font-face {
19
- font-family: 'lp-icons';
20
- src: url('@{icon-url}.eot?f41nl');
21
- src: url('@{icon-url}.eot?f41nl#iefix') format('embedded-opentype'),
22
- url('@{icon-url}.ttf?f41nl') format('truetype'),
23
- url('@{icon-url}.woff?f41nl') format('woff'),
24
- url('@{icon-url}.svg?f41nl#lp-icons') format('svg');
25
- font-weight: normal;
26
- font-style: normal;
27
  }
28
 
29
  [class^="lp-icon-"], [class*=" lp-icon-"] {
30
- /* use !important to prevent issues with browser extensions that change fonts */
31
- font-family: 'lp-icons' !important;
32
- speak: none;
33
- font-style: normal;
34
- font-weight: normal;
35
- font-variant: normal;
36
- text-transform: none;
37
- line-height: 1;
38
 
39
- /* Better Font Rendering =========== */
40
- -webkit-font-smoothing: antialiased;
41
- -moz-osx-font-smoothing: grayscale;
42
  }
43
 
44
  .lp-icon-file-text2:before {
45
- content: "\e926";
46
  }
47
 
48
  .lp-icon-file-picture:before {
49
- content: "\e927";
50
  }
51
 
52
  .lp-icon-file-music:before {
53
- content: "\e928";
54
  }
55
 
56
  .lp-icon-file-video:before {
57
- content: "\e92a";
58
  }
59
 
60
  .lp-icon-file-zip:before {
61
- content: "\e92b";
62
  }
63
 
64
  .lp-icon-paste:before {
65
- content: "\e92d";
66
  }
67
 
68
  .lp-icon-alarm:before {
69
- content: "\e950";
70
  }
71
 
72
  .lp-icon-cross:before {
73
- content: "\ea0f";
74
  }
75
 
76
  .lp-icon-checkmark:before {
77
- content: "\ea10";
78
  }
79
 
80
  .lp-icon-spinner2:before {
81
- content: "\e97b";
82
  }
83
 
84
  .lp-icon-plus:before {
85
- content: "\ea0a";
86
  }
87
 
88
  .lp-icon-minus:before {
89
- content: "\ea0b";
90
  }
91
 
92
  .clearfix() {
93
- display: block;
94
- content: '';
95
- clear: both;
96
  }
97
 
98
  .clearfix:after {
99
- display: block;
100
- content: '';
101
- clear: both;
102
  }
103
 
104
  .border-radius(@args) {
105
- -webkit-border-radius: @arguments;
106
- -khtml-border-radius: @arguments;
107
- -moz-border-radius: @arguments;
108
- -ms-border-radius: @arguments;
109
- -o-border-radius: @arguments;
110
- border-radius: @arguments;
111
  }
112
 
113
  .transform(@args) {
114
- -webkit-transform: @arguments;
115
- -khtml-transform: @arguments;
116
- -moz-transform: @arguments;
117
- -ms-transform: @arguments;
118
- -o-transform: @arguments;
119
- transform: @arguments;
120
  }
121
 
122
  .transition(@args) {
123
- -webkit-transition: @arguments;
124
- -khtml-transition: @arguments;
125
- -moz-transition: @arguments;
126
- -ms-transition: @arguments;
127
- -o-transition: @arguments;
128
- transition: @arguments;
129
  }
130
 
131
  .cross(@size: 30px, @border: 3px, @color: #000) {
132
- &:before,
133
- &:after {
134
- width: @border;
135
- background: @color;
136
- height: @size;
137
- content: '';
138
- display: inline-block;
139
- position: absolute;
140
- top: 0;
141
- left: (@size - @border) / 2;
142
- }
143
- &:before {
144
- .transform(rotate(-45deg));
145
- }
146
- &:after {
147
- .transform(rotate(45deg));
148
- }
149
  }
150
 
151
  .animation(@args) {
152
- -webkit-animation: @arguments;
153
- -moz-animation: @arguments;
154
- animation: @arguments;
155
  }
156
 
157
  .overlay-processing {
158
- &:before, &:after {
159
- content: '';
160
- display: block;
161
- position: fixed;
162
- top: 0;
163
- left: 0;
164
- width: 100%;
165
- height: 100%;
166
- z-index: 999999;
167
- }
168
- &:before {
169
- background: #000;
170
- opacity: 0.5;
171
- }
172
- &:after {
173
- background: #FFF;
174
- }
175
  }
176
 
177
  /* PROGRESS CIRCLE */
178
  .progress-circle(@size: 200px, @background: #DDD, @fill: #95e6f9, @initialize: 0, @inside-size: 170px, @inside-background: #FFF) {
179
- .progress-circle {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  width: @size;
181
  height: @size;
182
- border-radius: 50%;
183
- background-color: @background;
184
- position: relative;
185
- .background {
186
- content: "";
187
- position: absolute;
188
- border-radius: 50%;
189
- width: @size;
190
- height: @size;
191
- clip: rect(0, @size, @size, @size / 2);
192
- .fill {
193
- content: "";
194
- position: absolute;
195
- border-radius: 50%;
196
- width: @size;
197
- height: @size;
198
- clip: rect(0, @size / 2, @size, 0);
199
- background: @fill;
200
- transform: rotate(unit(@initialize*3.6, deg));
201
- }
202
- }
203
- &:after {
204
- content: '';
205
- width: @inside-size;
206
- height: @inside-size;
207
- background: @inside-background;
208
- .border-radius(50%);
209
- position: absolute;
210
- top: 50%;
211
- left: 50%;
212
- margin-top: -@inside-size / 2;
213
- margin-left: -@inside-size / 2;
214
- pointer-events: none;
215
- }
216
- .inside {
217
- position: absolute;
218
- width: 100%;
219
- height: 100%;
220
- line-height: @size;
221
- text-align: center;
222
- z-index: 10;
223
- }
224
- &.gt-50 {
225
- background-color: @fill;
226
- .background {
227
- clip: rect(0, @size/2, @size, 0);
228
- }
229
- .fill {
230
- clip: rect(0, @size, @size, @size/2);
231
- background: @background;
232
- }
233
- }
234
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  }
236
 
237
  .clearfix() {
238
- &:after {
239
- content: '';
240
- display: block;
241
- clear: both;
242
- }
243
  }
244
 
245
  .hide-if-js {
246
- display: none !important;
247
  }
248
 
249
  /* Archive courses */
250
  .learn-press-courses {
251
- list-style: none;
 
 
 
 
 
 
252
  clear: both;
253
- margin: 0 -30px 0 0;
 
 
 
 
 
254
  padding: 0;
255
- &:after {
256
- display: block;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
  content: '';
258
- clear: both;
 
 
 
 
 
259
  }
260
- li.course {
261
- list-style-type: none;
262
- float: left;
263
- width: 23%;
264
- margin: 0 2% 30px 0;
265
- padding: 0;
266
- box-sizing: border-box;
267
- border: 1px solid #DDD;
268
- background: #FFF;
269
-
270
- .view-more {
271
- padding: 0 15px;
272
- text-decoration: none;
273
- box-shadow: none;
274
- }
275
-
276
- h3 {
277
- padding: 15px;
278
- margin: 0;
279
- font-size: 18px;
280
- line-height: 1.5;
281
- }
282
- .course-thumbnail {
283
- position: relative;
284
- img {
285
- max-width: 100%;
286
- height: auto;
287
- }
288
- &:after {
289
- content: '';
290
- position: absolute;
291
- width: 100%;
292
- height: 100%;
293
- left: 0;
294
- top: 0;
295
- }
296
- }
297
- .course-info {
298
- padding: 0 15px 15px;
299
- font-size: 14px;
300
- overflow: hidden;
301
- }
302
- .course-students {
303
- float: left;
304
- }
305
- .course-instructor {
306
- margin-bottom: 20px;
307
- }
308
- .course-origin-price {
309
- float: right;
310
- text-decoration: line-through;
311
- padding-right: 5px;
312
- }
313
- .course-price {
314
- float: right;
315
- color: rgb(84, 181, 81);
316
- }
317
- .course-info > * {
318
- display: block;
319
- }
320
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
321
  }
322
 
323
  .course-origin-price {
324
- text-decoration: line-through;
325
- padding-right: 5px;
326
  }
327
 
328
  .course-price {
329
- color: rgb(84, 181, 81);
330
  }
331
 
332
  .learn-press-notice .button {
333
- float: right;
334
  }
335
 
336
  .learn-press-form {
337
- margin-bottom: 20px;
338
  }
339
 
340
  /* Course Curriculum */
341
 
342
  #learn-press-course-curriculum {
343
- ul.curriculum-sections,
344
- ul.section-content {
345
- list-style: none;
346
- margin: 0;
347
- padding: 0;
348
- background-color: #F5F5F5;
349
- li.section {
350
- list-style-type: none;
351
- }
352
  }
353
- .section-header {
354
- background-color: #EEE;
355
- margin: 0;
356
- padding: 20px 15px;
357
- border-top: 1px solid #FFF;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
358
  position: relative;
359
- p {
360
- display: inline-block;
361
- font-weight: normal;
362
- font-style: italic;
363
- color: rgb(153, 153, 153);
364
- font-size: 14px;
365
- margin: 0;
366
- padding: 10px 0;
367
- text-transform: none;
 
 
 
 
 
368
  }
369
  &:hover {
370
- background: #DDD;
371
  }
372
- .meta {
373
- font-size: smaller;
374
- font-weight: normal;
375
- position: absolute;
376
- right: 15px;
377
- top: 20px;
378
- .collapse {
379
- display: inline-block;
380
- position: relative;
381
- font-family: 'lp-icons';
382
- background: #95e6f9;
383
- width: 24px;
384
- height: 24px;
385
- line-height: 24px;
386
- text-align: center;
387
- color: #FFF;
388
- border-radius: 5px;
389
- vertical-align: middle;
390
- margin-left: 5px;
391
- font-size: 10px;
392
- &:before {
393
- content: "\ea0b";
394
- margin: 0 auto;
395
- }
396
- &:hover {
397
- cursor: pointer;
398
- }
399
- &.plus {
400
- &:before {
401
- content: "\ea0a";
402
- }
403
- }
404
- }
405
  }
 
406
  }
407
- .course-item {
408
- margin: 0;
409
- list-style: none;
410
- padding: 10px 15px;
411
- border-top: 1px solid rgb(255, 255, 255);
412
- position: relative;
413
- .transition(background linear 0.5s);
414
- .lp-label-viewing,
415
- .lp-label-completed {
416
- display: none;
417
- }
418
- .course-item-title {
419
- display: block;
420
- box-shadow: none;
421
- text-align: justify;
422
- float: left;
423
- &:before {
424
- display: inline-block;
425
- font-size: 16px;
426
- margin-right: 10px;
427
- font-family: 'lp-icons';
428
- }
429
- }
430
- .lp-icon {
431
- display: none;
432
- }
433
- .item-status {
434
- display: none;
435
- font-family: dashicons;
436
- .border-radius(4px);
437
- background: #DDD;
438
- color: #22b4ff;
439
- font-size: 18px;
440
- &:before {
441
- content: "\f177";
442
- }
443
- &.item-status-viewed {
444
-
445
- }
446
- &.item-status-started {
447
- &:before {
448
- content: "\f469";
449
- }
450
- }
451
- &.item-status-completed {
452
- background: #22b4ff;
453
- color: #FFF;
454
- &:before {
455
- content: "\f147";
456
- }
457
- }
458
- &.item-status-passed {
459
- background: #22b4ff;
460
- color: #FFF;
461
- &:before {
462
- content: "\f147";
463
- }
464
- }
465
- &.item-status-failed {
466
- background: #cc540d;
467
- color: #FFF;
468
- &:before {
469
- content: "\f335";
470
- }
471
- }
472
- }
473
- .item-result {
474
- display: none;
475
- }
476
- &.item-has-status {
477
- .item-status {
478
- display: inline-block;
479
- }
480
  }
481
- &.item-has-result {
482
- .item-result {
483
- display: inline-block;
484
- }
 
 
485
  }
486
- &.viewable {
487
- cursor: pointer;
488
- &:hover {
489
- background: #e7ecfb;
490
- .transition(background linear 0s);
491
- }
492
  }
493
- &.course-lesson {
494
- .course-item-title {
495
- &:before {
496
- content: '\e926';
497
- }
498
- }
499
  }
500
- &.course-quiz {
501
- .course-item-title {
502
- &:before {
503
- content: '\e950';
504
- }
505
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
506
  }
507
- &.item-current {
508
- background: #FFF;
509
- &:before {
510
- display: block;
511
- width: 3px;
512
- background: #95e6f9;
513
- position: absolute;
514
- left: 0;
515
- top: 0;
516
- height: 100%;
517
- content: '';
518
- }
519
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
520
 
521
- &.focus {
522
- background: #ffb710;
523
- &.off {
524
- .transition(none);
525
- }
526
- }
527
- &:after {
528
- display: block;
529
- clear: both;
530
- content: '';
531
- }
532
  }
 
533
 
534
- .course-item-meta {
535
- display: block;
536
- line-height: 1;
537
- top: 15px;
538
- right: 15px;
539
- float: right;
540
- margin-top: 5px;
541
- .item-loop-meta-text {
542
- font-size: small;
543
- &.item-final {
544
- color: #ffffff;
545
- background: #cc540d;
546
- padding: 3px 8px;
547
- .border-radius(3px);
548
- }
549
- }
550
  }
 
551
  }
552
 
553
  .lp-icon {
554
- display: inline-block;
555
- font-family: 'lp-icons';
556
- background: #95e6f9;
557
- width: 24px;
558
- height: 24px;
559
- line-height: 24px;
560
- text-align: center;
561
- color: #FFF;
562
- border-radius: 5px;
563
- vertical-align: middle;
564
- &:before {
565
- width: 32px;
566
- height: 32px;
567
- }
568
 
569
  }
570
 
571
  .lp-label {
572
- display: inline-block;
573
- line-height: 24px;
574
- font-size: 78%;
575
- vertical-align: middle;
576
- color: #ffffff;
577
- padding: 0 10px;
578
- background: #DDD;
579
- height: 24px;
580
- .border-radius(4px);
581
- &.lp-label-viewing {
582
- background-color: rgb(57, 175, 255);
583
- }
584
- &.lp-label-completed {
585
- background-color: #39c7ce;
586
- }
587
- &.lp-label-lesson {
588
- background-color: #337ab7;
589
- }
590
- &.lp-label-quiz {
591
- background-color: #53658c;
592
- }
593
- &.lp-label-preview {
594
- background-color: #02a7ce;
595
- }
596
  }
597
 
598
  .learn-press-content-protected-message {
599
- border: 3px solid #ff8484;
600
- background: #FFF;
601
- padding: 20px;
602
- color: #ff8484;
603
- margin: 10px 0;
604
- border-radius: 6px;
605
- .icon {
606
- position: relative;
607
- display: inline-block;
608
- width: 30px;
609
- height: 30px;
610
- margin-right: 10px;
611
- vertical-align: middle;
612
- .cross(30px, 3px, #ff8484);
613
- }
614
  }
615
 
616
  /** BREADCRUMB */
617
  .learn-press-breadcrumb {
618
- margin-bottom: 20px;
619
  }
620
 
621
  /** COURSE PROGRESS **/
622
  .single-lp_course {
623
- .learn-press-course-results-progress {
624
- margin-bottom: 40px;
625
- .items-progress {
626
- float: left;
627
- width: 68%;
628
- margin-right: 2%;
629
- clear: left;
630
- }
631
- .lp-course-progress-heading {
632
- margin-bottom: 10px;
633
- }
634
- .course-progress {
635
- float: left;
636
- width: 30%;
637
- }
638
- .number, .percentage-sign {
639
- display: inline-block;
640
- vertical-align: bottom;
641
- line-height: 1;
642
- font-size: 25px;
643
- }
644
- .percentage-sign {
645
- margin-left: 5px;
646
- }
647
- .grade {
648
- font-size: 12px;
649
- font-weight: bold;
650
- background: #F5F5F5;
651
- padding: 2px 7px;
652
- .border-radius(3px);
653
- &.in-progress {
654
-
655
- }
656
- &.passed {
657
- color: #ffffff;
658
- background: #95e6f9;
659
- }
660
- &.failed {
661
- color: #ffffff;
662
- background: #ff5425;
663
- }
664
- }
665
- &:after {
666
- display: block;
667
- content: '';
668
- clear: both;
669
- }
670
  }
 
 
 
 
 
 
671
  }
672
 
673
  .lp-course-progress {
674
- position: relative;
675
- .lp-progress-bar {
676
- height: 15px;
677
- background: #DDD;
678
- margin: 10px 0 15px 0;
679
- overflow: hidden;
680
- .border-radius(3px);
681
- .lp-progress-value {
682
- width: 50%;
683
- height: 15px;
684
- background: #95e6f9;
685
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
686
  }
687
- .lp-passing-conditional {
688
- left: 0%;
689
- position: absolute;
690
- height: 25px;
691
- top: -5px;
692
- margin-left: -5px;
693
- cursor: pointer;
694
- &:before,
695
- &:after {
696
- content: '';
697
- display: inline-block;
698
- border: 5px solid transparent;
699
- left: 0;
700
- position: absolute;
701
- }
702
- &:before {
703
- border-top-color: #DDD;
704
- }
705
- &:after {
706
- border-bottom-color: #DDD;
707
- bottom: 0;
708
- }
709
  }
 
710
  }
711
 
712
  #learn-press-content-item {
713
- border: 1px solid #DDD;
714
- display: none;
715
 
716
  }
717
 
718
  /** COURSE TABS **/
719
  .learn-press-tabs {
720
- .learn-press-nav-tabs {
721
- list-style: none;
722
- padding: 0;
723
- margin: 0 0 20px 0;
 
 
 
 
 
 
 
 
 
 
 
 
724
  border-bottom: 1px solid #DDD;
725
- .learn-press-nav-tab {
726
- list-style-type: none;
727
- float: left;
728
- margin-bottom: -1px;
729
- position: relative;
730
- a {
731
- display: inline-block;
732
- padding: 10px 15px;
733
- outline: none;
734
- box-shadow: none;
735
- color: #686868;
736
- border-bottom: 1px solid #DDD;
737
- }
738
- &.active {
739
- border-bottom: 4px solid #007acc;
740
- a {
741
- color: #007acc;
742
- border-bottom: none;
743
- margin-bottom: -4px;
744
- }
745
- }
746
- &.active:after {
747
- position: absolute;
748
- width: 100%;
749
- border-bottom: 1px solid #FFF;
750
- bottom: -1px;
751
- content: '';
752
- }
753
- }
754
- &:hover {
755
 
756
- }
757
- &:after {
758
- content: '';
759
- display: block;
760
- clear: both;
761
- }
762
  }
763
- .learn-press-tab-panel {
764
- display: none;
765
- margin-bottom: 20px;
766
- &.active {
767
- display: block;
768
- }
769
  }
 
 
 
 
 
 
 
 
770
  }
771
 
772
  .learn-press-block-content-mixin(@w) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
773
  &:before {
774
- width: (@w);
775
- height: (@w);
776
- margin-left: -(@w/2);
777
- margin-top: -(@w/2); /*-76px;*/
778
- -webkit-clip-path: polygon(0px @w, @w @w, @w @w/2, @w/2 @w/2, @w/2 0, 0 0);
779
- }
780
-
781
- span {
782
- clip: rect(0, @w+4, @w/2+2, @w/2+2);
783
- width: @w+4;
784
- height: @w+4;
785
- margin-left: -(@w/2+2);
786
- margin-top: -(@w/2+2);
787
- &:before {
788
- width: @w+4;
789
- height: @w+4;
790
- }
791
  }
 
792
  }
793
 
794
  .learn-press-course-buttons {
795
 
796
- a.button {
797
- display: inline-block;
798
- font-size: 16px;
799
- background: #1a1a1a;
800
- border: 0;
801
- border-radius: 2px;
802
- color: #fff;
803
- font-family: Montserrat, "Helvetica Neue", sans-serif;
804
- font-weight: 700;
805
- letter-spacing: 0.046875em;
806
- line-height: 1;
807
- padding: 0.84375em 0.875em 0.78125em;
808
- text-transform: uppercase;
809
 
810
- &:hover {
811
- background: #007acc;
812
- }
813
  }
 
814
  }
815
 
816
  /* POPUP STYLE */
817
 
818
  #popup_overlay {
819
- z-index: 10000000 !important;
820
  }
821
 
822
  #popup_container {
823
- z-index: 10000001 !important;
824
  }
825
 
826
  body.course-has-popup {
827
- overflow: hidden;
828
  }
829
 
830
  #course-curriculum-popup {
831
- position: fixed;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
832
  top: 0;
833
- left: 0;
834
  right: 0;
835
  bottom: 0;
836
- background: #000;
837
- z-index: 999999;
838
- * {
839
- box-sizing: border-box;
840
- }
841
- #popup-sidebar {
842
- float: left;
843
- width: 350px;
 
 
844
  position: absolute;
845
- top: 60px;
846
- bottom: 0;
847
- overflow: auto;
848
- background: #FFF;
849
- border-right: 1px solid #DDD;
850
- .course-curriculum-title {
851
- display: none;
852
- }
853
- .curriculum-sections {
854
- margin: 0;
855
- font-size: smaller;
856
- }
857
- .learn-press-course-results-progress {
858
- padding: 15px 20px;
859
- margin-bottom: 0;
860
- .items-progress, .course-progress {
861
- width: 100%;
862
- margin: 0 !important;
863
- }
864
- }
865
- }
866
- #popup-main {
867
  position: absolute;
868
  top: 0;
869
- left: 350px;
870
- right: 0;
871
- bottom: 0;
872
- background: #FFF;
873
- #popup-header {
874
- position: absolute;
875
- top: 0;
876
- left: -350px;
877
- right: 0;
878
- height: 60px;
879
- background: #cc540d;
880
- border-bottom: 1px solid #ab4a10;
881
- .popup-menu {
882
- position: absolute;
883
- height: 60px;
884
- width: 350px;
885
- border-right: 1px solid #ab4a10;
886
- }
887
- .popup-close,
888
- .sidebar-hide-btn,
889
- .sidebar-show-btn {
890
- width: 59px;
891
- height: 59px;
892
- position: absolute;
893
- top: 0;
894
- cursor: pointer;
895
- font-size: 34px;
896
- line-height: 60px;
897
- text-align: center;
898
- color: #FFF;
899
- &:hover {
900
- background: #b34c10;
901
- }
902
- }
903
- .sidebar-hide-btn {
904
- left: 0;
905
- }
906
- .sidebar-show-btn {
907
- position: relative;
908
- margin-left: -20px;
909
- margin-right: 20px;
910
- }
911
- .popup-close {
912
- right: 0px;
913
- &:before,
914
- &:after {
915
- content: '';
916
- border-top: 3px solid #FFF;
917
- width: 30px;
918
- display: inline-block;
919
- position: absolute;
920
- top: 29px;
921
- left: 17px;
922
- }
923
- &:before {
924
- -webkit-transform: rotate(45deg);
925
- }
926
- &:after {
927
- -webkit-transform: rotate(-45deg);
928
- }
929
- &:hover {
930
- background: #b34c10;
931
- &:before, &:after {
932
- border-color: #FFF;
933
- }
934
- }
935
- }
936
- .popup-title {
937
- margin: 0 0 0 350px;
938
- height: 60px;
939
- line-height: 60px;
940
- padding: 0 20px;
941
- color: #FFF;
942
- position: relative;
943
- }
944
-
945
  }
946
- #popup-content {
947
- position: absolute;
948
- top: 60px;
949
- bottom: 50px;
950
- left: 0;
951
- right: 0;
952
- overflow: auto;
953
- transition: top linear 0.25s, bottom linear 0.25s;
954
-
955
- #popup-content-inner {
956
- margin: 20px 40px;
957
- }
 
 
 
 
 
 
 
 
958
  }
959
- #popup-footer {
960
- position: absolute;
961
- bottom: 0;
962
- left: 0;
963
- right: 0;
964
- height: 50px;
965
- background: #F5F5F5;
966
- border-top: 1px solid #DDD;
967
- .footer-control {
968
- display: block;
969
- height: 50px;
970
- line-height: 50px;
971
- padding: 0 20px;
972
- background: #FFF;
973
- &.prev-item {
974
- float: left;
975
- }
976
- &.next-item {
977
- float: right;
978
- }
979
- }
980
  }
981
- #popup-header, #popup-footer {
982
- transition: opacity linear 0.25s;
983
  }
984
- &.expand {
985
- position: fixed;
986
- left: 0;
987
- padding: 0 20%;
988
- top: 0;
989
- bottom: 0;
990
- #popup-header,
991
- #popup-footer {
992
- opacity: 0;
993
- }
994
- #popup-content {
995
- top: 0;
996
- bottom: 0;
997
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
998
  }
 
999
  }
1000
- iframe {
1001
- position: absolute;
 
 
 
 
 
 
 
 
 
 
 
 
1002
  top: 0;
1003
- left: 0;
1004
- height: 100%;
1005
- width: 100%;
1006
- border: none;
1007
- margin: 0;
1008
- background: #FFF;
1009
  }
 
 
 
 
 
 
 
 
 
 
 
1010
  }
1011
 
1012
  .learn-press-content-item-title {
1013
- margin-bottom: 20px;
1014
- border-bottom: 2px solid #DDD;
1015
- padding-bottom: 20px;
1016
- &.content-item-quiz-title {
1017
- h4 {
1018
- float: left;
1019
- font-size: 24px;
1020
- margin-bottom: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1021
  }
1022
- .quiz-countdown {
1023
- float: right;
1024
- position: relative;
1025
- min-width: 100px;
1026
- background: #F5F5F5;
1027
- text-align: center;
1028
- font-size: 18px;
1029
- &:after, &:before {
1030
- padding: 0 10px;
1031
- height: 3px;
1032
- position: absolute;
1033
- bottom: -3px;
1034
- background: #000;
1035
- content: '';
1036
- left: 0;
1037
- }
1038
- &:before {
1039
- width: 100%;
1040
- }
1041
- &:after {
1042
- background: #00adff;
1043
- padding: 0;
1044
- }
1045
- &.warning-time-over {
1046
- &:after {
1047
- background: #FF0000;
1048
- }
1049
- }
1050
- .countdown {
1051
 
1052
- }
1053
- }
1054
- .clearfix();
1055
- }
1056
- .lp-expand {
1057
- float: right;
1058
- width: 43px;
1059
- height: 43px;
1060
- line-height: 43px;
1061
- background: #F5F5F5;
1062
- margin-left: 10px;
1063
- border: 1px solid #DDD;
1064
- outline: none;
1065
  }
 
 
 
 
 
 
 
 
 
 
 
 
1066
  }
1067
 
1068
  .learn-press-content-item-summary {
1069
- /*padding: 20px;
1070
- border-top: 1px solid #DDD;*/
1071
- margin-bottom: 30px;
1072
- .quiz-question-title {
1073
- margin-bottom: 20px;
1074
- }
1075
- .learn-press-question-explanation, .learn-press-question-hint {
1076
- background: #F5F5F5;
1077
- padding: 15px 20px;
1078
- font-style: italic;
1079
- margin-bottom: 20px;
1080
- .hint-title, .explanation-title {
1081
- font-style: normal;
1082
- }
1083
  }
 
1084
  }
1085
 
1086
  .button-finish-quiz {
1087
- float: right;
1088
  }
1089
 
1090
  .learnpress form.purchase-course {
1091
- margin-bottom: 20px;
1092
  }
1093
 
1094
  #learn-press-block-content {
1095
- display: none;
1096
- width: 100%;
1097
- height: 100%;
1098
- background: fade(#FFF, 25%);
1099
- position: fixed;
1100
- z-index: 99999999;
1101
- top: 0;
1102
- left: 0;
1103
- &:before, &:after, span {
1104
- position: absolute;
1105
- .border-radius(50%);
1106
- left: 50%;
1107
- top: 50%;
1108
- box-sizing: border-box;
1109
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1110
  &:before {
1111
- content: '';
1112
- border: 2px solid #000;
1113
- z-index: 10;
1114
- .animation(spin-13 1.5s infinite);
1115
- }
1116
- &:after {
1117
- z-index: 0;
1118
- content: '';
1119
- border: 10px solid #000000;
1120
- margin-left: -80px;
1121
- margin-top: -80px;
1122
- width: 160px;
1123
- height: 160px;
1124
- opacity: 0;
1125
- }
1126
- span {
1127
- z-index: 20;
1128
- .animation(spin-12 1.5s infinite);
1129
- &:before {
1130
- content: '';
1131
- border: 6px solid #95e6f9;
1132
- position: absolute;
1133
- .border-radius(50%);
1134
- box-sizing: border-box;
1135
- }
1136
  }
 
1137
 
1138
- .learn-press-block-content-mixin(80px);
1139
  }
1140
 
1141
  body.block-content {
1142
- #learn-press-block-content {
1143
- display: block;
1144
- }
1145
  }
1146
 
1147
  /* COURSE QUIZ */
1148
  .quiz-buttons {
1149
- margin-bottom: 20px;
1150
- clear: both;
1151
  }
1152
 
1153
  .quiz-intro {
1154
- list-style: none;
1155
- padding: 0;
1156
- margin-left: 0;
1157
- li label {
1158
- display: inline-block;
1159
- }
1160
  }
1161
 
1162
  .quiz-questions-list {
1163
- margin: 0 0 20px 0;
1164
- padding: 0;
1165
- list-style-position: inside;
1166
- li {
1167
- margin: 0 0 10px 0;
1168
- }
 
 
 
 
 
 
1169
  .question-title {
1170
- margin: 0 0 5px 0;
1171
- display: inline-block;
1172
- font-size: 14px;
1173
  }
1174
- .current {
1175
- .question-title {
1176
- font-weight: bold;
1177
- }
1178
- }
1179
- input[type="checkbox"], input[type="radio"] {
1180
- border: 1px solid #DDD;
1181
- display: inline-block;
1182
- -webkit-appearance: none;
1183
- width: 18px;
1184
- height: 18px;
1185
- position: relative;
1186
- &:checked {
1187
- &:after {
1188
- content: '';
1189
- display: inline-block;
1190
- position: absolute;
1191
- }
1192
- }
1193
- }
1194
- input[type="checkbox"]:checked {
1195
- &:after {
1196
- border-bottom: 3px solid #00b9eb;
1197
- border-right: 1px solid #00b9eb;
1198
- -webkit-transform: rotate(14deg);
1199
- -moz-transform: rotate(14deg);
1200
- -ms-transform: rotate(14deg);
1201
- -o-transform: rotate(14deg);
1202
- transform: rotate(33deg);
1203
- width: 8px;
1204
- height: 16px;
1205
-
1206
- top: -5px;
1207
- left: 5px;
1208
- }
1209
- }
1210
- input[type="checkbox"] {
1211
- &:disabled {
1212
- &:after {
1213
- border-color: #DDD;
1214
- }
1215
- }
1216
  }
1217
- input[type="radio"] {
1218
- -webkit-border-radius: 50%;
1219
- -moz-border-radius: 50%;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1220
  border-radius: 50%;
1221
- &:checked {
1222
- &:after {
1223
- background: #00b9eb;
1224
- width: 8px;
1225
- height: 8px;
1226
- border-radius: 50%;
1227
- top: 50%;
1228
- left: 50%;
1229
- margin-left: -4px;
1230
- margin-top: -4px;
1231
- }
1232
- }
1233
- &:disabled {
1234
- &:after {
1235
- background: #DDD;
1236
- }
1237
- }
1238
  }
 
1239
  }
1240
 
1241
  .question-results {
 
 
 
 
 
 
 
 
 
 
 
1242
  .question-title {
1243
- &:after {
1244
- font-family: dashicons;
1245
- font-size: 24px;
1246
- vertical-align: middle;
1247
- display: inline-block;
1248
- text-align: center;
1249
- margin-left: 5px;
1250
- }
1251
- }
1252
- &.correct {
1253
- .question-title {
1254
- &:after {
1255
- content: '\f147';
1256
- color: #00adff;
1257
- }
1258
- }
1259
- }
1260
- &.skipped {
1261
- .question-title {
1262
- &:after {
1263
- content: '\f534';
1264
- color: #c6c6c6;
1265
- }
1266
- }
1267
  }
1268
- &.incorrect {
1269
- .question-title {
1270
- &:after {
1271
- content: '\f335';
1272
- color: #ff5425;
1273
- }
1274
- }
1275
- .user-answer-false {
1276
- .option-title {
1277
- text-decoration: line-through;
1278
- }
1279
- }
1280
- }
1281
- .answer-true {
1282
- color: #007acc;
1283
- .option-title {
1284
- background: #fff9d8;
1285
- padding: 0 5px;
1286
- margin-left: -5px;
1287
- }
1288
  }
1289
- input {
1290
- vertical-align: middle;
 
 
 
 
 
1291
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1292
  }
1293
 
1294
  .quiz-description,
1295
  .question-content {
1296
- .learn-press-question-title {
1297
- margin-bottom: 20px;
1298
- }
1299
  }
1300
 
1301
  .quiz-countdown {
1302
- float: right;
1303
- position: relative;
1304
- min-width: 150px;
1305
- background: #F5F5F5;
1306
- text-align: center;
1307
- font-size: 18px;
1308
- padding: 5px 0;
1309
  }
1310
 
1311
  #quiz-countdown {
1312
- .progress-circle {
1313
- overflow: hidden;
1314
- box-shadow: 0 0 3px #bdbdbd inset;
1315
- .inside {
1316
- line-height: 1;
1317
- .countdown {
1318
- font-size: 48px;
1319
- color: #087998;
1320
- _text-shadow: 1px 1px #8ee5fd;
1321
- margin-top: 110px;
1322
- }
1323
- p {
1324
- margin: 10px 0 0 0;
1325
- color: #DDD;
1326
- }
1327
- }
1328
- &:after {
1329
- background: #00b9eb;
1330
- box-shadow: 0 0 6px #097a98;
1331
- }
1332
  }
 
 
 
 
 
1333
  }
1334
 
1335
  #quiz-progress {
1336
- .progress-circle(@size: 200px, @background: #DDD, @fill: #FF0000, @initialize: 0%, @inside-size: 170px, @inside-background: #FFF);
1337
  }
1338
 
1339
  .quiz-result {
1340
- .quiz-result-mark {
1341
- .progress-circle();
1342
- margin-bottom: 20px;
1343
- }
1344
- .quiz-result-summary {
1345
- margin-bottom: 20px;
1346
- max-width: 500px;
1347
- .quiz-result-field {
1348
- position: relative;
1349
- background: #F5F5F5;
1350
- color: #fff;
1351
- margin: 0 0 8px 0;
1352
- font-size: 12px;
1353
- padding: 5px 10px;
1354
- .border-radius(4px);
1355
- overflow: hidden;
1356
-
1357
- span, span:after, &:before {
1358
- display: block;
1359
- position: absolute;
1360
- top: 0;
1361
- left: 0;
1362
- height: 100%;
1363
- content: attr(data-text);
1364
- color: #FFF;
1365
- white-space: nowrap;
1366
- overflow: hidden;
1367
- padding: 3px 10px;
1368
- background: transparent;
1369
- transition: width 0.5s;
1370
- }
1371
- &:before {
1372
- content: '';
1373
- padding: 0;
1374
- }
1375
- span {
1376
- padding: 0;
1377
- }
1378
- span:after {
1379
- margin: 3px 10px;
1380
- padding: 0;
1381
- width: 100%;
1382
- }
1383
- &.correct {
1384
- background: #22b4ff;
1385
- }
1386
- &.wrong {
1387
- background: #ff5425;
1388
- }
1389
- &.empty {
1390
- color: #656D6D;
1391
- }
 
 
 
 
 
 
 
 
 
 
 
 
1392
  }
1393
- }
1394
- p.quiz-result-time {
1395
- margin: 0 0 10px 0;
1396
- }
1397
- .quiz-grade {
1398
- p {
1399
- margin: 0 0 10px 0;
1400
- span {
1401
- font-weight: bold;
1402
- &.passed {
1403
- color: #22b4ff;
1404
- }
1405
- &.failed {
1406
- color: #ff5425;
1407
- }
1408
- }
1409
  }
 
1410
  }
 
1411
  }
1412
 
1413
  .element-data-percent-loop (@i) when (@i <= 100) {
1414
- .single-quiz .quiz-result-field[data-value="@{i}"]:before,
1415
- .single-quiz .quiz-result-field[data-value="@{i}"] span,
1416
- #quiz-countdown[data-value="@{i}"]:after {
1417
- width: ~"@{i}%";
1418
- }
1419
- .element-data-percent-loop(@i + 1);
1420
  }
1421
 
1422
  .element-data-percent-loop (0);
1423
 
1424
  /* QUESTION */
1425
  .learn-press-question-options {
1426
- list-style: none;
1427
- margin: 0 0 20px 0;
1428
- padding: 0;
1429
- > li.answer-option {
1430
- font-size: 16px;
1431
- background: #F5F5F5;
1432
- margin-bottom: 20px;
1433
- position: relative;
1434
- .border-radius(4px);
1435
- > label {
1436
- display: block;
1437
- input[type="checkbox"], input[type="radio"] {
1438
- border: 0;
1439
- -webkit-appearance: initial;
1440
- width: 30px;
1441
- height: 30px;
1442
- background: #fff;
1443
- border-radius: 4px;
1444
- outline: none;
1445
- position: absolute;
1446
- top: 10px;
1447
- left: 15px;
1448
- margin: 0;
1449
- &:checked:before {
1450
- content: '';
1451
- border: 4px solid #00b9eb;
1452
- display: inline-block;
1453
- width: 10px;
1454
- height: 15px;
1455
- border-top: none;
1456
- border-left: none;
1457
- position: absolute;
1458
- top: 3px;
1459
- left: 8px;
1460
- box-sizing: content-box;
1461
- .transform(rotate(36deg));
1462
- }
1463
- &:checked + p {
1464
- font-weight: bold;
1465
- background: #00b9eb;
1466
- color: #FFF;
1467
- }
1468
- }
1469
- input[type="checkbox"][disabled], input[type="radio"][disabled] {
1470
- opacity: 1;
1471
- }
1472
- input[type="radio"] {
1473
- .border-radius(50%);
1474
- }
1475
- p {
1476
- min-height: 50px;
1477
- padding: 5px 20px 5px 60px;
1478
- margin: 0;
1479
- box-sizing: border-box;
1480
- line-height: 1.5;
1481
- &.single-lines {
1482
- padding: 0 20px 0 60px;
1483
- line-height: 50px; /* middle */
1484
- }
1485
- }
1486
- }
1487
- label p {
1488
- .border-radius(4px);
1489
- }
1490
- &.answer-true label p {
1491
- background: #00b9eb;
1492
- color: #FFF;
1493
- }
1494
- &:hover label p {
1495
- background: #D4D4D4;
1496
- cursor: pointer;
1497
- }
1498
- &.user-answer-false {
1499
- background: #F5F5F5;
1500
- > label {
1501
- input[type="checkbox"] + p, input[type="radio"] + p {
1502
- text-decoration: line-through;
1503
- color: #FF0000;
1504
- background: #F5F5F5;
1505
- }
1506
- }
1507
- }
1508
- }
1509
- .answer-option-result {
1510
- label {
1511
- p {
1512
- display: inline-block;
1513
- margin: 0;
1514
- font-size: smaller;
1515
- }
1516
- input[disabled] {
1517
- opacity: 1;
1518
- }
1519
- }
1520
  }
 
1521
  }
1522
 
1523
  .learnpress-content {
1524
- margin-bottom: 20px;
1525
  }
1526
 
1527
  .course-meta {
1528
- margin-bottom: 20px;
1529
- .course-origin-price {
1530
- padding-right: 5px;
1531
- text-decoration: line-through;
1532
- }
1533
- .course-price {
1534
- font-weight: bold;
1535
- }
1536
 
1537
  }
1538
 
1539
  /** MESSAGE */
1540
  .learn-press-message {
1541
- background: #F5F5F5;
1542
- border-left: 5px solid #00A0D2;
1543
- padding: 10px 20px 0px 20px;
1544
- margin-bottom: 20px;
1545
- overflow: hidden;
1546
- button {
1547
- float: right;
1548
- }
1549
- p {
1550
- margin-bottom: 10px;
1551
- }
1552
- &:after {
1553
- clear: both;
1554
- content: '';
1555
- display: block;
1556
- }
1557
- &.notice {
1558
- border-left-color: #b3d20a;
1559
- }
1560
- &.error {
1561
- border-left-color: #b81c23;
1562
- }
1563
- ul {
1564
- list-style-type: none;
1565
- }
1566
  }
1567
 
1568
  /**/
1569
  .learn-press-checkout-comment,
1570
  .learn-press-checkout-payment {
1571
- margin-bottom: 20px;
1572
  }
1573
 
1574
  .learn-press-checkout-payment {
1575
- .payment-methods {
1576
- list-style: none;
1577
- margin: 0;
1578
- }
1579
  }
1580
 
1581
  /* COURSE QUIZ */
1582
  .single-quiz {
1583
- .quiz-questions-list {
1584
- padding: 0;
1585
- }
1586
- .quiz-intro {
1587
- list-style: none;
1588
- padding: 10px 20px;
1589
- background: #F5F5F5;
1590
- margin: 0 0 20px 0;
1591
- }
1592
- h4 {
1593
- margin-bottom: 10px;
1594
- font-size: 18px;
1595
- }
1596
  }
1597
 
1598
  .learn-press-tooltip {
1599
- font-size: 20px;
1600
- display: inline-block;
1601
- vertical-align: middle;
1602
- background: #0f4956;
1603
- cursor: pointer;
1604
- line-height: 1;
1605
- width: 10px;
1606
- height: 10px;
1607
- border-radius: 50%;
1608
- font-weight: 700;
1609
- position: relative;
1610
- &:before {
1611
- content: "?";
1612
- font-size: 7px;
1613
- color: white;
1614
- position: absolute;
1615
- top: 2px;
1616
- left: 3px;
1617
- }
1618
  }
1619
 
1620
  /* Form field */
1621
  .lp-form-field-wrap {
 
 
 
1622
  list-style: none;
1623
  margin: 0 0 20px 0;
1624
- .lp-form-field {
1625
- list-style: none;
1626
- margin: 0 0 20px 0;
1627
- .lp-form-field-label {
1628
- display: block;
1629
- font-weight: bold;
1630
- margin-bottom: 5px;
1631
- }
1632
- .lp-form-field-input .description {
1633
- font-size: smaller;
1634
- font-style: italic;
1635
- margin-top: 5px;
1636
- }
1637
- .lp-field-error-message {
1638
- color: #FF0000;
1639
- }
1640
  }
 
1641
  }
1642
 
1643
  .learn-press-user-profile {
1644
- #learn-press-user-info{
1645
- overflow: hidden;
1646
- .user-avatar {
1647
- width: 150px;
1648
- float: left;
1649
- .avatar {
1650
- border-radius: 0;
1651
- width: 100%;
1652
- }
1653
- }
1654
- .user-basic-info{
1655
- margin-left: 170px;
1656
- }
1657
- }
1658
- .lp-edit-profile {
1659
- &:after {
1660
- .clearfix();
1661
- }
1662
  }
1663
  .user-basic-info {
1664
- p {
1665
- margin-top: 10px;
1666
- }
1667
-
1668
  }
1669
- .learn-press-tabs {
1670
- list-style: none;
1671
- margin: 30px 0 20px;
1672
- border-bottom: 1px solid #DDD;
1673
- & > li {
1674
- float: left;
1675
- list-style-type: none;
1676
- margin-bottom: -1px;
1677
- & > a {
1678
- display: inline-block;
1679
- padding: 10px 15px;
1680
- outline: none;
1681
- box-shadow: none;
1682
- color: #686868;
1683
- border-bottom: 1px solid #DDD;
1684
- }
1685
- &.current {
1686
- border-bottom: 4px solid #007acc;
1687
- a {
1688
- color: #007acc;
1689
- margin-bottom: -4px;
1690
- }
1691
- }
1692
- }
1693
  }
1694
- .learn-press-subtabs {
1695
- & > li {
1696
- display: inline-block;
1697
- margin-right: 10px;
1698
- &.current {
1699
- font-weight: bold;
1700
- }
1701
- }
1702
  }
1703
- .learn-press-subtab-content {
1704
- display: none;
1705
- margin-bottom: 20px;
1706
- &.current {
1707
- display: block;
1708
- }
1709
- li.course {
1710
- h3 {
1711
- padding-bottom: 10px;
1712
- }
1713
- }
1714
- .profile-courses {
1715
- list-style-type: none;
1716
- .learn-press-course-results-progress {
1717
- padding: 0 15px 15px 15px;
1718
- margin: 0;
1719
- }
1720
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1721
  }
1722
- button.learn-press-course-wishlist {
1723
- display: block;
 
 
 
 
1724
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1725
 
1726
- .user-profile-edit-form {
1727
-
1728
- .info-field {
1729
- margin-bottom: 20px;
1730
- }
1731
 
1732
- .description {
1733
- margin-top: 5px;
1734
- }
1735
 
1736
- .user-profile-picture {
1737
- clear: both;
1738
- .picture, .change-picture {
1739
- display: inline-block;
1740
- }
1741
- .change-picture {
1742
- .description {
1743
- margin: 0 0 10px 0;
1744
- }
1745
- }
1746
- img {
1747
- float: left;
1748
- margin-right: 20px;
1749
- }
1750
- &:after {
1751
- .clearfix();
1752
- }
1753
- }
1754
 
1755
- .profile-field-name {
1756
- font-weight: bold;
1757
- margin-bottom: 10px;
 
 
 
 
 
1758
  }
 
 
 
 
 
 
 
 
 
1759
 
1760
- .change-password {
1761
- margin-bottom: 10px;
1762
- }
 
1763
 
1764
- #user_profile_password_form {
1765
- input {
1766
- margin-bottom: 20px;
1767
- }
1768
- .description {
1769
- margin-top: -15px;
1770
- }
1771
- }
1772
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1773
  }
1774
- .update-profile {
1775
- border-top: 2px solid #DDD;
1776
- padding-top: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1777
  }
1778
- .learn-press-subtab-content {
 
 
 
 
1779
  display: block;
 
 
 
 
 
 
 
 
 
1780
  }
1781
- #lp-user-edit-avatar {
1782
- .moxie-shim {
1783
- display: none;
1784
- }
1785
- .lp-form-field-avatar {
1786
- float: left;
1787
- }
1788
- #lp-avatar-actions {
1789
- margin: 20px 0;
1790
- }
1791
  }
1792
- .lp-avatar-preview {
1793
- position: relative;
1794
- float: left;
1795
- background-color: #DDD;
1796
- .profile-picture {
1797
- float: left;
1798
- margin-right: -100%;
1799
- width: 100%;
1800
- img {
1801
- width: 100%;
1802
- height: 100%;
1803
- border-radius: 0;
1804
- }
1805
- &.profile-avatar-hidden {
1806
- display: none;
1807
- }
1808
- }
1809
- .lp-avatar-preview-actions {
1810
- position: absolute;
1811
- top: 50%;
1812
- width: 100%;
1813
- margin-top: -14px;
1814
- text-align: center;
1815
- a {
1816
- text-decoration: none;
1817
- font-size: 12px;
1818
- background: #FFF;
1819
- display: inline-block;
1820
- box-shadow: none;
1821
- padding: 5px 10px;
1822
- }
1823
- }
1824
- .lp-avatar-upload-progress {
1825
  position: absolute;
1826
  height: 10px;
1827
- background: #FFF;
1828
- top: 50%;
1829
- margin-top: -5px;
1830
  left: 10px;
1831
- right: 10px;
1832
- display: none;
1833
- .lp-avatar-upload-progress-value {
1834
- width: 0;
1835
- height: 10px;
1836
- background: #563d7c;
1837
- }
1838
- }
1839
- .lp-avatar-upload-error {
1840
- display: none;
1841
- }
1842
- .lp-avatar-preview-actions {
1843
- display: none;
1844
- }
1845
- &:hover {
1846
- .lp-avatar-preview-actions {
1847
- display: block;
1848
- }
1849
- }
1850
- &.uploading, &.upload-error {
1851
- .lp-avatar-preview-actions {
1852
- display: none;
1853
- }
1854
- .lp-avatar-upload-progress {
1855
- display: block;
1856
- }
1857
- &:before {
1858
- position: absolute;
1859
- width: 100%;
1860
- height: 100%;
1861
  background: #FFF;
1862
- opacity: 0.4;
1863
- content: '';
1864
- }
1865
- }
1866
- &.upload-error {
1867
- .lp-avatar-upload-error {
1868
- display: block;
1869
- }
1870
- }
1871
- &.croping {
1872
- .lp-avatar-preview-actions {
1873
- display: none;
1874
- }
1875
- .lp-avatar-crop-image {
1876
  position: absolute;
1877
- top: 0;
1878
- left: 0;
1879
- width: 100%;
1880
- height: 100%;
1881
- background: #000;
1882
- overflow: hidden;
1883
- img {
1884
- max-width: inherit;
1885
- cursor: move;
1886
- }
1887
- .lp-crop-controls {
1888
- position: absolute;
1889
- bottom: 0;
1890
- width: 100%;
1891
- height: 30px;
1892
- .lp-zoom {
1893
- position: absolute;
1894
- height: 10px;
1895
- bottom: 10px;
1896
- left: 10px;
1897
- right: 30px;
1898
- background: #563d7a;
1899
- .ui-slider {
1900
- position: absolute;
1901
- left: 0;
1902
- right: 10px;
1903
- height: 100%;
1904
- .ui-slider-handle {
1905
- display: inline-block;
1906
- width: 10px;
1907
- height: 14px;
1908
- background: #FFF;
1909
- position: absolute;
1910
- margin-top: -2px;
1911
- border: 1px solid #563d7a;
1912
- box-shadow: none;
1913
- outline: none;
1914
- cursor: ew-resize;
1915
- }
1916
- }
1917
- }
1918
- .lp-cancel-upload {
1919
- text-decoration: none;
1920
- position: absolute;
1921
- bottom: 5px;
1922
- right: 5px;
1923
- box-shadow: none;
1924
- }
1925
- &:before {
1926
- position: absolute;
1927
- height: 30px;
1928
- width: 100%;
1929
- content: '';
1930
- background: #FFF;
1931
- opacity: 0.4;
1932
- }
1933
- }
1934
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1935
  }
1936
- &:after {
1937
- .clearfix();
1938
- }
1939
  }
 
 
 
 
1940
  }
1941
 
1942
  body {
1943
- &.profile-dragging {
1944
- cursor: move !important;
1945
- }
1946
- &.profile-resizing {
1947
- cursor: ew-resize !important;
1948
- }
1949
  }
1950
 
1951
  .learn-press-pagination {
1952
- text-align: center;
1953
- ul {
1954
- list-style: disc;
1955
- & > li {
1956
- display: inline-block;
1957
- span {
1958
- display: inline-block;
1959
- padding: 0 10px;
1960
- border: 1px solid #DDD;
1961
- background-color: #F5F5F5;
1962
- }
1963
- a {
1964
- display: inline-block;
1965
- padding: 0 10px;
1966
- border: 1px solid #DDD;
1967
- background-color: #FFF;
1968
- }
1969
- }
1970
  }
 
1971
  }
1972
 
1973
  .learn-press-become-teacher-form {
1974
- ul {
1975
- list-style: none;
1976
- padding: 0;
1977
- li {
1978
- margin-bottom: 20px;
1979
- }
1980
  }
 
1981
  }
1982
 
1983
  /* jAlerts */
1984
  #popup_container {
1985
- background: #FFF;
1986
 
1987
- #popup_title {
1988
- padding: 10px 20px;
1989
- background: #18B6C7;
1990
- color: #FFF;
1991
- font-size: 18px;
1992
- margin: 0;
1993
- }
1994
 
1995
- #popup_content {
1996
- padding: 20px;
1997
- #popup_message {
1998
- margin-bottom: 20px;
1999
- }
2000
  }
 
2001
 
2002
- #popup_panel {
2003
- text-align: center;
2004
- }
2005
  }
2006
 
2007
  .learn-press-auto-redirect-next-item {
2008
- display: none;
2009
 
2010
- &.active {
2011
- display: block;
2012
- }
2013
  }
2014
 
2015
  .single-lp_course {
2016
- .course-summary {
2017
- .lp_course {
2018
- .entry-footer {
2019
- display: none;
2020
- }
2021
- }
2022
  }
2023
- .learn-press-message {
2024
- position: relative;
2025
- clear: both;
2026
- margin-top: 25px;
2027
-
2028
- .learn-press-countdown {
2029
- display: inline-block;
2030
- width: 1.5em;
2031
- height: 1.5em;
2032
- background: #cc540d;
2033
- text-align: center;
2034
- border-radius: 50%;
2035
- line-height: 1.5em;
2036
- font-size: 0.8em;
2037
- color: #fff;
2038
- }
2039
- .learnpress-dismiss-notice {
2040
- display: inline-block;
2041
- position: absolute;
2042
- right: 1em;
2043
- top: 50%;
2044
- -ms-transform: translateY(-50%);
2045
- -webkit-transform: translateY(-50%);
2046
- transform: translateY(-50%);
2047
- cursor: pointer;
2048
-
2049
- &:before {
2050
- font-size: 1.2em;
2051
- color: red;
2052
- content: "\f153";
2053
- font-family: dashicons;
2054
- }
2055
- }
2056
 
 
 
 
 
 
 
2057
  }
2058
 
 
 
2059
  }
2060
 
2061
  /* tooltip */
2062
  .learn-press-tooltip-bubble {
2063
- position: absolute;
2064
- background: rgba(26, 26, 26, 0.9);
2065
- color: #ffffff;
2066
- padding: 8px 10px;
2067
- font-size: 12px;
2068
- z-index: 9999999;
2069
- line-height: 1;
2070
- border-radius: 3px;
2071
  }
2072
 
2073
  /* fill in blank */
2074
  input.blank-fill-correct {
2075
- width: auto;
2076
  }
2077
 
2078
  body.content-item-only {
 
 
 
 
 
 
 
 
 
2079
  background: #FFF;
2080
- opacity: 0;
2081
- .learn-press-content-item-only {
2082
- position: fixed;
2083
- z-index: 9999999;
2084
- left: 0;
2085
- top: 0;
2086
- width: 100%;
2087
- height: 100%;
2088
- background: #FFF;
2089
- overflow: auto;
2090
- padding: 20px;
2091
- margin: 0;
2092
- }
2093
 
2094
- #learn-press-content-item {
2095
- border: none;
2096
- display: block;
2097
- transition: max-width linear 0.25s;
2098
- margin: 0 auto;
2099
- max-width: 1000px;
2100
- width: 90%;
2101
- &.expand {
2102
- max-width: 1200px;
2103
- }
2104
  }
 
2105
  }
2106
 
2107
  .lp-group-heading-title {
2108
- &.toggle-off, &.toggle-on {
2109
- cursor: pointer;
2110
- .toggle-icon {
2111
- display: inline-block;
2112
- font-size: larger;
2113
- line-height: 1;
2114
- font-weight: bold;
2115
- margin-left: 5px;
2116
- &:before {
2117
- content: '+';
2118
- }
2119
- }
2120
- }
2121
- &.toggle-on {
2122
- .toggle-icon {
2123
- &:before {
2124
- content: '-';
2125
- }
2126
- }
2127
- }
2128
  }
2129
 
2130
  /*
@@ -2161,311 +2164,311 @@ body.content-item-only {
2161
  }*/
2162
 
2163
  .place-order-action {
2164
- margin-top: 20px;
2165
  }
2166
 
2167
  .woocommerce {
2168
- form .form-row {
2169
- &.validate-email, &.validate-phone {
2170
- width: 100% !important;
2171
- }
2172
  }
 
2173
 
2174
- .checkout_coupon {
2175
- .form-row-last {
2176
- input.button {
2177
- padding: 13px 10px !important;
2178
- }
2179
- }
2180
  }
 
2181
  }
2182
 
2183
  .learn-press-search-course-form {
2184
- margin-bottom: 20px;
2185
- input.search-course-input[name="s"] {
2186
- margin-right: -200px;
2187
- width: 100%;
2188
- }
2189
- .search-course-button {
2190
- vertical-align: middle;
2191
- float: right;
2192
- z-index: 10;
2193
- position: relative;
2194
- }
2195
  }
2196
 
2197
  .table-orders {
2198
- .order-status {
2199
- &.order-status-removed {
2200
- color: #FF0000;
2201
- }
2202
  }
 
2203
  }
2204
 
2205
  /* Shortcode/Widgets */
2206
  .widget_lp-widget-popular-courses, .widget_lp-widget-recent-courses, .widget_lp-widget-featured-courses {
2207
- .course-meta-data {
2208
- > div {
2209
- display: inline-block;
2210
- &:after {
2211
- content: '/';
2212
- }
2213
- &:last-child:after {
2214
- content: '';
2215
- }
2216
- }
2217
-
2218
- }
2219
- .course-title {
2220
- margin: 5px 0;
2221
- }
2222
- .course-entry {
2223
- margin-bottom: 20px;
2224
- border-bottom: 1px dashed #DDD;
2225
- padding-bottom: 20px;
2226
  }
 
 
 
 
 
 
 
 
 
 
2227
  }
2228
 
2229
  .edit-course-item-link {
2230
- a {
2231
- font-size: 14px;
2232
- position: relative;
2233
- padding-left: 25px;
2234
- &:after {
2235
- content: "\f464";
2236
- font-family: Dashicons;
2237
- font-size: 26px;
2238
- position: absolute;
2239
- bottom: 0;
2240
- line-height: 1;
2241
- left: 0;
2242
- }
2243
  }
 
2244
  }
2245
 
2246
  .course-item-navigation {
2247
- border-top: 4px solid #333;
2248
- padding-top: 10px;
2249
- margin-top: 20px;
2250
- .nav-links {
2251
- .nav-link {
2252
- opacity: 1;
2253
- a {
2254
- opacity: 1;
2255
- .meta-nav {
2256
- display: block;
2257
- text-transform: uppercase;
2258
- font-size: small;
2259
- color: #b9b9b9;
2260
- }
2261
- .post-title {
2262
- opacity: 1;
2263
- }
2264
- }
2265
- &.nav-previous {
2266
- float: left;
2267
- }
2268
- &.nav-next {
2269
- float: right;
2270
- text-align: right;
2271
- }
2272
- }
2273
- &:after {
2274
- clear: both;
2275
- display: block;
2276
- content: '';
2277
- }
2278
  }
 
2279
  }
2280
 
2281
  /* widget attributes */
2282
  .lp-course-attributes {
 
 
 
 
 
 
 
2283
  list-style: none;
2284
  margin-left: 0;
2285
- li {
2286
- list-style: none;
2287
- margin-bottom: 10px;
2288
- }
2289
  .lp-course-attribute-values {
2290
- list-style: none;
2291
- margin-left: 0;
2292
- }
2293
- &.course-attributes {
2294
- .lp-course-attribute-values {
2295
- li {
2296
- display: inline-block;
2297
- padding: 3px 8px;
2298
- background: #F0F0F0;
2299
- border-radius: 4px;
2300
- margin: 0 5px 5px 0;
2301
- }
2302
- }
2303
- }
2304
- &.course-filters {
2305
- .lp-course-attribute-values {
2306
- li {
2307
- a:before {
2308
- font-family: dashicons;
2309
- border-radius: 50%;
2310
- background: #DDD;
2311
- display: inline-block;
2312
- width: 16px;
2313
- height: 16px;
2314
- text-align: center;
2315
- line-height: 16px;
2316
- color: #FFF;
2317
- font-size: 16px;
2318
- vertical-align: middle;
2319
- margin-right: 5px;
2320
- content: '';
2321
- }
2322
- &:hover a:before {
2323
- background: #4acfff;
2324
- }
2325
- }
2326
- li.active {
2327
- a:before {
2328
- content: "\f147";
2329
- background: #4acfff;
2330
- }
2331
- &:hover a:before {
2332
- content: "\f335";
2333
- background: #a20000;
2334
- }
2335
- }
2336
- }
2337
- }
2338
  }
2339
 
2340
  @-moz-keyframes spin-12 {
2341
- 0% {
2342
- -moz-transform: rotate(0deg) translate(0px);
2343
- }
2344
- 100% {
2345
- -moz-transform: rotate(360deg) translate(0px);
2346
- }
2347
  }
2348
 
2349
  @-webkit-keyframes spin-12 {
2350
- 0% {
2351
- -webkit-transform: rotate(0deg) translate(0px);
2352
- }
2353
- 100% {
2354
- -webkit-transform: rotate(360deg) translate(0px);
2355
- }
2356
  }
2357
 
2358
  @keyframes spin-12 {
2359
- 0% {
2360
- -webkit-transform: rotate(0deg) translate(0px);
2361
- transform: rotate(0deg) translate(0px);
2362
- }
2363
- 100% {
2364
- -webkit-transform: rotate(360deg) translate(0px);
2365
- transform: rotate(360deg) translate(0px);
2366
- }
2367
  }
2368
 
2369
  @-moz-keyframes spin-13 {
2370
- 100% {
2371
- -moz-transform: rotate(0deg) translate(0px);
2372
- }
2373
- 0% {
2374
- -moz-transform: rotate(360deg) translate(0px);
2375
- }
2376
  }
2377
 
2378
  @-webkit-keyframes spin-13 {
2379
- 0% {
2380
- -webkit-transform: rotate(0deg) translate(0px);
2381
- }
2382
- 100% {
2383
- -webkit-transform: rotate(360deg) translate(0px);
2384
- }
2385
  }
2386
 
2387
  @keyframes spin-13 {
2388
- 100% {
2389
- -webkit-transform: rotate(0deg) translate(0px);
2390
- transform: rotate(0deg) translate(0px);
2391
- }
2392
- 0% {
2393
- -webkit-transform: rotate(360deg) translate(0px);
2394
- transform: rotate(360deg) translate(0px);
2395
- }
2396
  }
2397
 
2398
  @media screen and (max-width: 1250px) {
2399
- .single-lp_course .learn-press-course-results-progress {
2400
- .items-progress, .course-progress {
2401
- float: none;
2402
- width: 100%;
2403
- }
2404
- .items-progress {
2405
- margin-bottom: 50px;
2406
- }
2407
  }
 
 
 
 
2408
  }
2409
 
2410
  @media screen and (max-width: 768px) {
2411
- #learn-press-block-content {
2412
- .learn-press-block-content-mixin(60px);
2413
- }
2414
 
2415
- .learn-press-course-results-progress {
2416
- .items-progress, .course-progress {
2417
- width: 100%;
2418
- margin-right: 0;
2419
- }
2420
  }
 
2421
 
2422
  }
2423
 
2424
  @media (min-width: 992px) {
2425
- .learn-press-courses {
2426
- li.course {
2427
- &:nth-child(4n+1) {
2428
- clear: left;
2429
- }
2430
- }
2431
  }
 
2432
  }
2433
 
2434
  @media (max-width: 992px) {
2435
- .learn-press-courses {
2436
- margin: 0;
2437
- }
2438
  }
2439
 
2440
  @media (max-width: 992px) and (min-width: 600px ) {
2441
 
2442
- .learn-press-courses {
2443
- li.course {
2444
- width: 31.33%;
2445
- margin: 0 2% 30px 0;
2446
- /* padding: 0 20px; */
2447
- &:nth-child(3n+1) {
2448
- clear: left;
2449
- margin-left: 0;
2450
- }
2451
- }
2452
  }
 
2453
 
2454
  }
2455
 
2456
  @media (max-width: 600px) and (min-width: 400px ) {
2457
 
2458
- .learn-press-courses {
2459
- li.course {
2460
- width: 48%;
2461
- margin: 0 2% 30px 0;
2462
- /* padding: 0 20px; */
2463
- &:nth-child(2n+1) {
2464
- clear: left;
2465
- margin-left: 0;
2466
- }
2467
- }
2468
  }
 
2469
 
2470
  }
2471
 
@@ -2482,34 +2485,34 @@ body.content-item-only {
2482
  */
2483
  @media (max-width: 400px) {
2484
 
2485
- .learn-press-courses {
2486
- li.course {
2487
- width: 100%;
2488
- margin: 0 0 30px 0;
2489
- clear: left;
2490
- }
2491
  }
 
2492
 
2493
  }
2494
 
2495
  @media (max-width: 350px) {
2496
- #course-curriculum-popup #popup-sidebar {
2497
- width: 100%;
2498
- }
2499
  }
2500
 
2501
  /* full width with twentysixteen theme */
2502
  @media screen and (min-width: 61.5625em) {
2503
- body.single-lp_course {
2504
- article.lp_course {
2505
- .entry-content {
2506
- width: 100%;
2507
- }
2508
- .entry-footer {
2509
- display: none;
2510
- }
2511
- }
2512
  }
 
2513
  }
2514
 
2515
  /*
16
 
17
  @icon-url: '../fonts/lp-icons';
18
  @font-face {
19
+ font-family: 'lp-icons';
20
+ src: url('@{icon-url}.eot?f41nl');
21
+ src: url('@{icon-url}.eot?f41nl#iefix') format('embedded-opentype'),
22
+ url('@{icon-url}.ttf?f41nl') format('truetype'),
23
+ url('@{icon-url}.woff?f41nl') format('woff'),
24
+ url('@{icon-url}.svg?f41nl#lp-icons') format('svg');
25
+ font-weight: normal;
26
+ font-style: normal;
27
  }
28
 
29
  [class^="lp-icon-"], [class*=" lp-icon-"] {
30
+ /* use !important to prevent issues with browser extensions that change fonts */
31
+ font-family: 'lp-icons' !important;
32
+ speak: none;
33
+ font-style: normal;
34
+ font-weight: normal;
35
+ font-variant: normal;
36
+ text-transform: none;
37
+ line-height: 1;
38
 
39
+ /* Better Font Rendering =========== */
40
+ -webkit-font-smoothing: antialiased;
41
+ -moz-osx-font-smoothing: grayscale;
42
  }
43
 
44
  .lp-icon-file-text2:before {
45
+ content: "\e926";
46
  }
47
 
48
  .lp-icon-file-picture:before {
49
+ content: "\e927";
50
  }
51
 
52
  .lp-icon-file-music:before {
53
+ content: "\e928";
54
  }
55
 
56
  .lp-icon-file-video:before {
57
+ content: "\e92a";
58
  }
59
 
60
  .lp-icon-file-zip:before {
61
+ content: "\e92b";
62
  }
63
 
64
  .lp-icon-paste:before {
65
+ content: "\e92d";
66
  }
67
 
68
  .lp-icon-alarm:before {
69
+ content: "\e950";
70
  }
71
 
72
  .lp-icon-cross:before {
73
+ content: "\ea0f";
74
  }
75
 
76
  .lp-icon-checkmark:before {
77
+ content: "\ea10";
78
  }
79
 
80
  .lp-icon-spinner2:before {
81
+ content: "\e97b";
82
  }
83
 
84
  .lp-icon-plus:before {
85
+ content: "\ea0a";
86
  }
87
 
88
  .lp-icon-minus:before {
89
+ content: "\ea0b";
90
  }
91
 
92
  .clearfix() {
93
+ display: block;
94
+ content: '';
95
+ clear: both;
96
  }
97
 
98
  .clearfix:after {
99
+ display: block;
100
+ content: '';
101
+ clear: both;
102
  }
103
 
104
  .border-radius(@args) {
105
+ -webkit-border-radius: @arguments;
106
+ -khtml-border-radius: @arguments;
107
+ -moz-border-radius: @arguments;
108
+ -ms-border-radius: @arguments;
109
+ -o-border-radius: @arguments;
110
+ border-radius: @arguments;
111
  }
112
 
113
  .transform(@args) {
114
+ -webkit-transform: @arguments;
115
+ -khtml-transform: @arguments;
116
+ -moz-transform: @arguments;
117
+ -ms-transform: @arguments;
118
+ -o-transform: @arguments;
119
+ transform: @arguments;
120
  }
121
 
122
  .transition(@args) {
123
+ -webkit-transition: @arguments;
124
+ -khtml-transition: @arguments;
125
+ -moz-transition: @arguments;
126
+ -ms-transition: @arguments;
127
+ -o-transition: @arguments;
128
+ transition: @arguments;
129
  }
130
 
131
  .cross(@size: 30px, @border: 3px, @color: #000) {
132
+ &:before,
133
+ &:after {
134
+ width: @border;
135
+ background: @color;
136
+ height: @size;
137
+ content: '';
138
+ display: inline-block;
139
+ position: absolute;
140
+ top: 0;
141
+ left: (@size - @border) / 2;
142
+ }
143
+ &:before {
144
+ .transform(rotate(-45deg));
145
+ }
146
+ &:after {
147
+ .transform(rotate(45deg));
148
+ }
149
  }
150
 
151
  .animation(@args) {
152
+ -webkit-animation: @arguments;
153
+ -moz-animation: @arguments;
154
+ animation: @arguments;
155
  }
156
 
157
  .overlay-processing {
158
+ &:before, &:after {
159
+ content: '';
160
+ display: block;
161
+ position: fixed;
162
+ top: 0;
163
+ left: 0;
164
+ width: 100%;
165
+ height: 100%;
166
+ z-index: 999999;
167
+ }
168
+ &:before {
169
+ background: #000;
170
+ opacity: 0.5;
171
+ }
172
+ &:after {
173
+ background: #FFF;
174
+ }
175
  }
176
 
177
  /* PROGRESS CIRCLE */
178
  .progress-circle(@size: 200px, @background: #DDD, @fill: #95e6f9, @initialize: 0, @inside-size: 170px, @inside-background: #FFF) {
179
+ .progress-circle {
180
+ width: @size;
181
+ height: @size;
182
+ border-radius: 50%;
183
+ background-color: @background;
184
+ position: relative;
185
+ .background {
186
+ content: "";
187
+ position: absolute;
188
+ border-radius: 50%;
189
+ width: @size;
190
+ height: @size;
191
+ clip: rect(0, @size, @size, @size / 2);
192
+ .fill {
193
+ content: "";
194
+ position: absolute;
195
+ border-radius: 50%;
196
  width: @size;
197
  height: @size;
198
+ clip: rect(0, @size / 2, @size, 0);
199
+ background: @fill;
200
+ transform: rotate(unit(@initialize*3.6, deg));
201
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  }
203
+ &:after {
204
+ content: '';
205
+ width: @inside-size;
206
+ height: @inside-size;
207
+ background: @inside-background;
208
+ .border-radius(50%);
209
+ position: absolute;
210
+ top: 50%;
211
+ left: 50%;
212
+ margin-top: -@inside-size / 2;
213
+ margin-left: -@inside-size / 2;
214
+ pointer-events: none;
215
+ }
216
+ .inside {
217
+ position: absolute;
218
+ width: 100%;
219
+ height: 100%;
220
+ line-height: @size;
221
+ text-align: center;
222
+ z-index: 10;
223
+ }
224
+ &.gt-50 {
225
+ background-color: @fill;
226
+ .background {
227
+ clip: rect(0, @size/2, @size, 0);
228
+ }
229
+ .fill {
230
+ clip: rect(0, @size, @size, @size/2);
231
+ background: @background;
232
+ }
233
+ }
234
+ }
235
  }
236
 
237
  .clearfix() {
238
+ &:after {
239
+ content: '';
240
+ display: block;
241
+ clear: both;
242
+ }
243
  }
244
 
245
  .hide-if-js {
246
+ display: none !important;
247
  }
248
 
249
  /* Archive courses */
250
  .learn-press-courses {
251
+ list-style: none;
252
+ clear: both;
253
+ margin: 0 -30px 0 0;
254
+ padding: 0;
255
+ &:after {
256
+ display: block;
257
+ content: '';
258
  clear: both;
259
+ }
260
+ li.course {
261
+ list-style-type: none;
262
+ float: left;
263
+ width: 23%;
264
+ margin: 0 2% 30px 0;
265
  padding: 0;
266
+ box-sizing: border-box;
267
+ border: 1px solid #DDD;
268
+ background: #FFF;
269
+
270
+ .view-more {
271
+ padding: 0 15px;
272
+ text-decoration: none;
273
+ box-shadow: none;
274
+ }
275
+
276
+ h3 {
277
+ padding: 15px;
278
+ margin: 0;
279
+ font-size: 18px;
280
+ line-height: 1.5;
281
+ }
282
+ .course-thumbnail {
283
+ position: relative;
284
+ img {
285
+ max-width: 100%;
286
+ height: auto;
287
+ }
288
+ &:after {
289
  content: '';
290
+ position: absolute;
291
+ width: 100%;
292
+ height: 100%;
293
+ left: 0;
294
+ top: 0;
295
+ }
296
  }
297
+ .course-info {
298
+ padding: 0 15px 15px;
299
+ font-size: 14px;
300
+ overflow: hidden;
301
+ }
302
+ .course-students {
303
+ float: left;
304
+ }
305
+ .course-instructor {
306
+ margin-bottom: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
  }
308
+ .course-origin-price {
309
+ float: right;
310
+ text-decoration: line-through;
311
+ padding-right: 5px;
312
+ }
313
+ .course-price {
314
+ float: right;
315
+ color: rgb(84, 181, 81);
316
+ }
317
+ .course-info > * {
318
+ display: block;
319
+ }
320
+ }
321
  }
322
 
323
  .course-origin-price {
324
+ text-decoration: line-through;
325
+ padding-right: 5px;
326
  }
327
 
328
  .course-price {
329
+ color: rgb(84, 181, 81);
330
  }
331
 
332
  .learn-press-notice .button {
333
+ float: right;
334
  }
335
 
336
  .learn-press-form {
337
+ margin-bottom: 20px;
338
  }
339
 
340
  /* Course Curriculum */
341
 
342
  #learn-press-course-curriculum {
343
+ ul.curriculum-sections,
344
+ ul.section-content {
345
+ list-style: none;
346
+ margin: 0;
347
+ padding: 0;
348
+ background-color: #F5F5F5;
349
+ li.section {
350
+ list-style-type: none;
 
351
  }
352
+ }
353
+ .section-header {
354
+ h4 {
355
+ display: inline;
356
+ }
357
+ background-color: #EEE;
358
+ margin: 0;
359
+ padding: 20px 15px;
360
+ border-top: 1px solid #FFF;
361
+ position: relative;
362
+ p {
363
+ display: inline-block;
364
+ font-weight: normal;
365
+ font-style: italic;
366
+ color: rgb(153, 153, 153);
367
+ font-size: 14px;
368
+ margin: 0;
369
+ padding: 10px 0;
370
+ text-transform: none;
371
+ }
372
+ &:hover {
373
+ background: #DDD;
374
+ }
375
+ .meta {
376
+ font-size: smaller;
377
+ font-weight: normal;
378
+ position: absolute;
379
+ right: 15px;
380
+ top: 20px;
381
+ .collapse {
382
+ display: inline-block;
383
  position: relative;
384
+ font-family: 'lp-icons';
385
+ background: #95e6f9;
386
+ width: 24px;
387
+ height: 24px;
388
+ line-height: 24px;
389
+ text-align: center;
390
+ color: #FFF;
391
+ border-radius: 5px;
392
+ vertical-align: middle;
393
+ margin-left: 5px;
394
+ font-size: 10px;
395
+ &:before {
396
+ content: "\ea0b";
397
+ margin: 0 auto;
398
  }
399
  &:hover {
400
+ cursor: pointer;
401
  }
402
+ &.plus {
403
+ &:before {
404
+ content: "\ea0a";
405
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
406
  }
407
+ }
408
  }
409
+ }
410
+ .course-item {
411
+ margin: 0;
412
+ list-style: none;
413
+ padding: 10px 15px;
414
+ border-top: 1px solid rgb(255, 255, 255);
415
+ position: relative;
416
+ .transition(background linear 0.5s);
417
+ .lp-label-viewing,
418
+ .lp-label-completed {
419
+ display: none;
420
+ }
421
+ .course-item-title {
422
+ display: block;
423
+ box-shadow: none;
424
+ text-align: justify;
425
+ float: left;
426
+ &:before {
427
+ display: inline-block;
428
+ font-size: 16px;
429
+ margin-right: 10px;
430
+ font-family: 'lp-icons';
431
+ }
432
+ }
433
+ .lp-icon {
434
+ display: none;
435
+ }
436
+ .item-status {
437
+ display: none;
438
+ font-family: dashicons;
439
+ .border-radius(4px);
440
+ background: #DDD;
441
+ color: #22b4ff;
442
+ font-size: 18px;
443
+ &:before {
444
+ content: "\f177";
445
+ }
446
+ &.item-status-viewed {
447
+
448
+ }
449
+ &.item-status-started {
450
+ &:before {
451
+ content: "\f469";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
452
  }
453
+ }
454
+ &.item-status-completed {
455
+ background: #22b4ff;
456
+ color: #FFF;
457
+ &:before {
458
+ content: "\f147";
459
  }
460
+ }
461
+ &.item-status-passed {
462
+ background: #22b4ff;
463
+ color: #FFF;
464
+ &:before {
465
+ content: "\f147";
466
  }
467
+ }
468
+ &.item-status-failed {
469
+ background: #cc540d;
470
+ color: #FFF;
471
+ &:before {
472
+ content: "\f335";
473
  }
474
+ }
475
+ }
476
+ .item-result {
477
+ display: none;
478
+ }
479
+ &.item-has-status {
480
+ .item-status {
481
+ display: inline-block;
482
+ }
483
+ }
484
+ &.item-has-result {
485
+ .item-result {
486
+ display: inline-block;
487
+ }
488
+ }
489
+ &.viewable {
490
+ cursor: pointer;
491
+ &:hover {
492
+ background: #e7ecfb;
493
+ .transition(background linear 0s);
494
+ }
495
+ }
496
+ &.course-lesson {
497
+ .course-item-title {
498
+ &:before {
499
+ content: '\e926';
500
  }
501
+ }
502
+ }
503
+ &.course-quiz {
504
+ .course-item-title {
505
+ &:before {
506
+ content: '\e950';
 
 
 
 
 
 
507
  }
508
+ }
509
+ }
510
+ &.item-current {
511
+ background: #FFF;
512
+ &:before {
513
+ display: block;
514
+ width: 3px;
515
+ background: #95e6f9;
516
+ position: absolute;
517
+ left: 0;
518
+ top: 0;
519
+ height: 100%;
520
+ content: '';
521
+ }
522
+ }
523
 
524
+ &.focus {
525
+ background: #ffb710;
526
+ &.off {
527
+ .transition(none);
528
+ }
529
+ }
530
+ &:after {
531
+ display: block;
532
+ clear: both;
533
+ content: '';
 
534
  }
535
+ }
536
 
537
+ .course-item-meta {
538
+ display: block;
539
+ line-height: 1;
540
+ top: 15px;
541
+ right: 15px;
542
+ float: right;
543
+ margin-top: 5px;
544
+ .item-loop-meta-text {
545
+ font-size: small;
546
+ &.item-final {
547
+ color: #ffffff;
548
+ background: #cc540d;
549
+ padding: 3px 8px;
550
+ .border-radius(3px);
551
+ }
 
552
  }
553
+ }
554
  }
555
 
556
  .lp-icon {
557
+ display: inline-block;
558
+ font-family: 'lp-icons';
559
+ background: #95e6f9;
560
+ width: 24px;
561
+ height: 24px;
562
+ line-height: 24px;
563
+ text-align: center;
564
+ color: #FFF;
565
+ border-radius: 5px;
566
+ vertical-align: middle;
567
+ &:before {
568
+ width: 32px;
569
+ height: 32px;
570
+ }
571
 
572
  }
573
 
574
  .lp-label {
575
+ display: inline-block;
576
+ line-height: 24px;
577
+ font-size: 78%;
578
+ vertical-align: middle;
579
+ color: #ffffff;
580
+ padding: 0 10px;
581
+ background: #DDD;
582
+ height: 24px;
583
+ .border-radius(4px);
584
+ &.lp-label-viewing {
585
+ background-color: rgb(57, 175, 255);
586
+ }
587
+ &.lp-label-completed {
588
+ background-color: #39c7ce;
589
+ }
590
+ &.lp-label-lesson {
591
+ background-color: #337ab7;
592
+ }
593
+ &.lp-label-quiz {
594
+ background-color: #53658c;
595
+ }
596
+ &.lp-label-preview {
597
+ background-color: #02a7ce;
598
+ }
599
  }
600
 
601
  .learn-press-content-protected-message {
602
+ border: 3px solid #ff8484;
603
+ background: #FFF;
604
+ padding: 20px;
605
+ color: #ff8484;
606
+ margin: 10px 0;
607
+ border-radius: 6px;
608
+ .icon {
609
+ position: relative;
610
+ display: inline-block;
611
+ width: 30px;
612
+ height: 30px;
613
+ margin-right: 10px;
614
+ vertical-align: middle;
615
+ .cross(30px, 3px, #ff8484);
616
+ }
617
  }
618
 
619
  /** BREADCRUMB */
620
  .learn-press-breadcrumb {
621
+ margin-bottom: 20px;
622
  }
623
 
624
  /** COURSE PROGRESS **/
625
  .single-lp_course {
626
+ .learn-press-course-results-progress {
627
+ margin-bottom: 40px;
628
+ .items-progress {
629
+ float: left;
630
+ width: 68%;
631
+ margin-right: 2%;
632
+ clear: left;
633
+ }
634
+ .lp-course-progress-heading {
635
+ margin-bottom: 10px;
636
+ }
637
+ .course-progress {
638
+ float: left;
639
+ width: 30%;
640
+ }
641
+ .number, .percentage-sign {
642
+ display: inline-block;
643
+ vertical-align: bottom;
644
+ line-height: 1;
645
+ font-size: 25px;
646
+ }
647
+ .percentage-sign {
648
+ margin-left: 5px;
649
+ }
650
+ .grade {
651
+ font-size: 12px;
652
+ font-weight: bold;
653
+ background: #F5F5F5;
654
+ padding: 2px 7px;
655
+ .border-radius(3px);
656
+ &.in-progress {
657
+
658
+ }
659
+ &.passed {
660
+ color: #ffffff;
661
+ background: #95e6f9;
662
+ }
663
+ &.failed {
664
+ color: #ffffff;
665
+ background: #ff5425;
666
+ }
 
 
 
 
 
 
667
  }
668
+ &:after {
669
+ display: block;
670
+ content: '';
671
+ clear: both;
672
+ }
673
+ }
674
  }
675
 
676
  .lp-course-progress {
677
+ position: relative;
678
+ .lp-progress-bar {
679
+ height: 15px;
680
+ background: #DDD;
681
+ margin: 10px 0 15px 0;
682
+ overflow: hidden;
683
+ .border-radius(3px);
684
+ .lp-progress-value {
685
+ width: 50%;
686
+ height: 15px;
687
+ background: #95e6f9;
688
+ }
689
+ }
690
+ .lp-passing-conditional {
691
+ left: 0%;
692
+ position: absolute;
693
+ height: 25px;
694
+ top: -5px;
695
+ margin-left: -5px;
696
+ cursor: pointer;
697
+ &:before,
698
+ &:after {
699
+ content: '';
700
+ display: inline-block;
701
+ border: 5px solid transparent;
702
+ left: 0;
703
+ position: absolute;
704
  }
705
+ &:before {
706
+ border-top-color: #DDD;
707
+ }
708
+ &:after {
709
+ border-bottom-color: #DDD;
710
+ bottom: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
711
  }
712
+ }
713
  }
714
 
715
  #learn-press-content-item {
716
+ border: 1px solid #DDD;
717
+ display: none;
718
 
719
  }
720
 
721
  /** COURSE TABS **/
722
  .learn-press-tabs {
723
+ .learn-press-nav-tabs {
724
+ list-style: none;
725
+ padding: 0;
726
+ margin: 0 0 20px 0;
727
+ border-bottom: 1px solid #DDD;
728
+ .learn-press-nav-tab {
729
+ list-style-type: none;
730
+ float: left;
731
+ margin-bottom: -1px;
732
+ position: relative;
733
+ a {
734
+ display: inline-block;
735
+ padding: 10px 15px;
736
+ outline: none;
737
+ box-shadow: none;
738
+ color: #686868;
739
  border-bottom: 1px solid #DDD;
740
+ }
741
+ &.active {
742
+ border-bottom: 4px solid #007acc;
743
+ a {
744
+ color: #007acc;
745
+ border-bottom: none;
746
+ margin-bottom: -4px;
747
+ }
748
+ }
749
+ &.active:after {
750
+ position: absolute;
751
+ width: 100%;
752
+ border-bottom: 1px solid #FFF;
753
+ bottom: -1px;
754
+ content: '';
755
+ }
756
+ }
757
+ &:hover {
 
 
 
 
 
 
 
 
 
 
 
 
758
 
 
 
 
 
 
 
759
  }
760
+ &:after {
761
+ content: '';
762
+ display: block;
763
+ clear: both;
 
 
764
  }
765
+ }
766
+ .learn-press-tab-panel {
767
+ display: none;
768
+ margin-bottom: 20px;
769
+ &.active {
770
+ display: block;
771
+ }
772
+ }
773
  }
774
 
775
  .learn-press-block-content-mixin(@w) {
776
+ &:before {
777
+ width: (@w);
778
+ height: (@w);
779
+ margin-left: -(@w/2);
780
+ margin-top: -(@w/2); /*-76px;*/
781
+ -webkit-clip-path: polygon(0px @w, @w @w, @w @w/2, @w/2 @w/2, @w/2 0, 0 0);
782
+ }
783
+
784
+ span {
785
+ clip: rect(0, @w+4, @w/2+2, @w/2+2);
786
+ width: @w+4;
787
+ height: @w+4;
788
+ margin-left: -(@w/2+2);
789
+ margin-top: -(@w/2+2);
790
  &:before {
791
+ width: @w+4;
792
+ height: @w+4;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
793
  }
794
+ }
795
  }
796
 
797
  .learn-press-course-buttons {
798
 
799
+ a.button {
800
+ display: inline-block;
801
+ font-size: 16px;
802
+ background: #1a1a1a;
803
+ border: 0;
804
+ border-radius: 2px;
805
+ color: #fff;
806
+ font-family: Montserrat, "Helvetica Neue", sans-serif;
807
+ font-weight: 700;
808
+ letter-spacing: 0.046875em;
809
+ line-height: 1;
810
+ padding: 0.84375em 0.875em 0.78125em;
811
+ text-transform: uppercase;
812
 
813
+ &:hover {
814
+ background: #007acc;
 
815
  }
816
+ }
817
  }
818
 
819
  /* POPUP STYLE */
820
 
821
  #popup_overlay {
822
+ z-index: 10000000 !important;
823
  }
824
 
825
  #popup_container {
826
+ z-index: 10000001 !important;
827
  }
828
 
829
  body.course-has-popup {
830
+ overflow: hidden;
831
  }
832
 
833
  #course-curriculum-popup {
834
+ position: fixed;
835
+ top: 0;
836
+ left: 0;
837
+ right: 0;
838
+ bottom: 0;
839
+ background: #000;
840
+ z-index: 999999;
841
+ * {
842
+ box-sizing: border-box;
843
+ }
844
+ #popup-sidebar {
845
+ float: left;
846
+ width: 350px;
847
+ position: absolute;
848
+ top: 60px;
849
+ bottom: 0;
850
+ overflow: auto;
851
+ background: #FFF;
852
+ border-right: 1px solid #DDD;
853
+ .course-curriculum-title {
854
+ display: none;
855
+ }
856
+ .curriculum-sections {
857
+ margin: 0;
858
+ font-size: smaller;
859
+ }
860
+ .learn-press-course-results-progress {
861
+ padding: 15px 20px;
862
+ margin-bottom: 0;
863
+ .items-progress, .course-progress {
864
+ width: 100%;
865
+ margin: 0 !important;
866
+ }
867
+ }
868
+ }
869
+ #popup-main {
870
+ position: absolute;
871
  top: 0;
872
+ left: 350px;
873
  right: 0;
874
  bottom: 0;
875
+ background: #FFF;
876
+ #popup-header {
877
+ position: absolute;
878
+ top: 0;
879
+ left: -350px;
880
+ right: 0;
881
+ height: 60px;
882
+ background: #cc540d;
883
+ border-bottom: 1px solid #ab4a10;
884
+ .popup-menu {
885
  position: absolute;
886
+ height: 60px;
887
+ width: 350px;
888
+ border-right: 1px solid #ab4a10;
889
+ }
890
+ .popup-close,
891
+ .sidebar-hide-btn,
892
+ .sidebar-show-btn {
893
+ width: 59px;
894
+ height: 59px;
 
 
 
 
 
 
 
 
 
 
 
 
 
895
  position: absolute;
896
  top: 0;
897
+ cursor: pointer;
898
+ font-size: 34px;
899
+ line-height: 60px;
900
+ text-align: center;
901
+ color: #FFF;
902
+ &:hover {
903
+ background: #b34c10;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
904
  }
905
+ }
906
+ .sidebar-hide-btn {
907
+ left: 0;
908
+ }
909
+ .sidebar-show-btn {
910
+ position: relative;
911
+ margin-left: -20px;
912
+ margin-right: 20px;
913
+ }
914
+ .popup-close {
915
+ right: 0px;
916
+ &:before,
917
+ &:after {
918
+ content: '';
919
+ border-top: 3px solid #FFF;
920
+ width: 30px;
921
+ display: inline-block;
922
+ position: absolute;
923
+ top: 29px;
924
+ left: 17px;
925
  }
926
+ &:before {
927
+ -webkit-transform: rotate(45deg);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
928
  }
929
+ &:after {
930
+ -webkit-transform: rotate(-45deg);
931
  }
932
+ &:hover {
933
+ background: #b34c10;
934
+ &:before, &:after {
935
+ border-color: #FFF;
936
+ }
937
+ }
938
+ }
939
+ .popup-title {
940
+ margin: 0 0 0 350px;
941
+ height: 60px;
942
+ line-height: 60px;
943
+ padding: 0 20px;
944
+ color: #FFF;
945
+ position: relative;
946
+ }
947
+
948
+ }
949
+ #popup-content {
950
+ position: absolute;
951
+ top: 60px;
952
+ bottom: 50px;
953
+ left: 0;
954
+ right: 0;
955
+ overflow: auto;
956
+ transition: top linear 0.25s, bottom linear 0.25s;
957
+
958
+ #popup-content-inner {
959
+ margin: 20px 40px;
960
+ }
961
+ }
962
+ #popup-footer {
963
+ position: absolute;
964
+ bottom: 0;
965
+ left: 0;
966
+ right: 0;
967
+ height: 50px;
968
+ background: #F5F5F5;
969
+ border-top: 1px solid #DDD;
970
+ .footer-control {
971
+ display: block;
972
+ height: 50px;
973
+ line-height: 50px;
974
+ padding: 0 20px;
975
+ background: #FFF;
976
+ &.prev-item {
977
+ float: left;
978
+ }
979
+ &.next-item {
980
+ float: right;
981
  }
982
+ }
983
  }
984
+ #popup-header, #popup-footer {
985
+ transition: opacity linear 0.25s;
986
+ }
987
+ &.expand {
988
+ position: fixed;
989
+ left: 0;
990
+ padding: 0 20%;
991
+ top: 0;
992
+ bottom: 0;
993
+ #popup-header,
994
+ #popup-footer {
995
+ opacity: 0;
996
+ }
997
+ #popup-content {
998
  top: 0;
999
+ bottom: 0;
1000
+ }
 
 
 
 
1001
  }
1002
+ }
1003
+ iframe {
1004
+ position: absolute;
1005
+ top: 0;
1006
+ left: 0;
1007
+ height: 100%;
1008
+ width: 100%;
1009
+ border: none;
1010
+ margin: 0;
1011
+ background: #FFF;
1012
+ }
1013
  }
1014
 
1015
  .learn-press-content-item-title {
1016
+ margin-bottom: 20px;
1017
+ border-bottom: 2px solid #DDD;
1018
+ padding-bottom: 20px;
1019
+ &.content-item-quiz-title {
1020
+ h4 {
1021
+ float: left;
1022
+ font-size: 24px;
1023
+ margin-bottom: 0;
1024
+ }
1025
+ .quiz-countdown {
1026
+ float: right;
1027
+ position: relative;
1028
+ min-width: 100px;
1029
+ background: #F5F5F5;
1030
+ text-align: center;
1031
+ font-size: 18px;
1032
+ &:after, &:before {
1033
+ padding: 0 10px;
1034
+ height: 3px;
1035
+ position: absolute;
1036
+ bottom: -3px;
1037
+ background: #000;
1038
+ content: '';
1039
+ left: 0;
1040
+ }
1041
+ &:before {
1042
+ width: 100%;
1043
+ }
1044
+ &:after {
1045
+ background: #00adff;
1046
+ padding: 0;
1047
+ }
1048
+ &.warning-time-over {
1049
+ &:after {
1050
+ background: #FF0000;
1051
  }
1052
+ }
1053
+ .countdown {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1054
 
1055
+ }
 
 
 
 
 
 
 
 
 
 
 
 
1056
  }
1057
+ .clearfix();
1058
+ }
1059
+ .lp-expand {
1060
+ float: right;
1061
+ width: 43px;
1062
+ height: 43px;
1063
+ line-height: 43px;
1064
+ background: #F5F5F5;
1065
+ margin-left: 10px;
1066
+ border: 1px solid #DDD;
1067
+ outline: none;
1068
+ }
1069
  }
1070
 
1071
  .learn-press-content-item-summary {
1072
+ /*padding: 20px;
1073
+ border-top: 1px solid #DDD;*/
1074
+ margin-bottom: 30px;
1075
+ .quiz-question-title {
1076
+ margin-bottom: 20px;
1077
+ }
1078
+ .learn-press-question-explanation, .learn-press-question-hint {
1079
+ background: #F5F5F5;
1080
+ padding: 15px 20px;
1081
+ font-style: italic;
1082
+ margin-bottom: 20px;
1083
+ .hint-title, .explanation-title {
1084
+ font-style: normal;
 
1085
  }
1086
+ }
1087
  }
1088
 
1089
  .button-finish-quiz {
1090
+ float: right;
1091
  }
1092
 
1093
  .learnpress form.purchase-course {
1094
+ margin-bottom: 20px;
1095
  }
1096
 
1097
  #learn-press-block-content {
1098
+ display: none;
1099
+ width: 100%;
1100
+ height: 100%;
1101
+ background: fade(#FFF, 25%);
1102
+ position: fixed;
1103
+ z-index: 99999999;
1104
+ top: 0;
1105
+ left: 0;
1106
+ &:before, &:after, span {
1107
+ position: absolute;
1108
+ .border-radius(50%);
1109
+ left: 50%;
1110
+ top: 50%;
1111
+ box-sizing: border-box;
1112
+ }
1113
+ &:before {
1114
+ content: '';
1115
+ border: 2px solid #000;
1116
+ z-index: 10;
1117
+ .animation(spin-13 1.5s infinite);
1118
+ }
1119
+ &:after {
1120
+ z-index: 0;
1121
+ content: '';
1122
+ border: 10px solid #000000;
1123
+ margin-left: -80px;
1124
+ margin-top: -80px;
1125
+ width: 160px;
1126
+ height: 160px;
1127
+ opacity: 0;
1128
+ }
1129
+ span {
1130
+ z-index: 20;
1131
+ .animation(spin-12 1.5s infinite);
1132
  &:before {
1133
+ content: '';
1134
+ border: 6px solid #95e6f9;
1135
+ position: absolute;
1136
+ .border-radius(50%);
1137
+ box-sizing: border-box;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1138
  }
1139
+ }
1140
 
1141
+ .learn-press-block-content-mixin(80px);
1142
  }
1143
 
1144
  body.block-content {
1145
+ #learn-press-block-content {
1146
+ display: block;
1147
+ }
1148
  }
1149
 
1150
  /* COURSE QUIZ */
1151
  .quiz-buttons {
1152
+ margin-bottom: 20px;
1153
+ clear: both;
1154
  }
1155
 
1156
  .quiz-intro {
1157
+ list-style: none;
1158
+ padding: 0;
1159
+ margin-left: 0;
1160
+ li label {
1161
+ display: inline-block;
1162
+ }
1163
  }
1164
 
1165
  .quiz-questions-list {
1166
+ margin: 0 0 20px 0;
1167
+ padding: 0;
1168
+ list-style-position: inside;
1169
+ li {
1170
+ margin: 0 0 10px 0;
1171
+ }
1172
+ .question-title {
1173
+ margin: 0 0 5px 0;
1174
+ display: inline-block;
1175
+ font-size: 14px;
1176
+ }
1177
+ .current {
1178
  .question-title {
1179
+ font-weight: bold;
 
 
1180
  }
1181
+ }
1182
+ input[type="checkbox"], input[type="radio"] {
1183
+ border: 1px solid #DDD;
1184
+ display: inline-block;
1185
+ -webkit-appearance: none;
1186
+ width: 18px;
1187
+ height: 18px;
1188
+ position: relative;
1189
+ &:checked {
1190
+ &:after {
1191
+ content: '';
1192
+ display: inline-block;
1193
+ position: absolute;
1194
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1195
  }
1196
+ }
1197
+ input[type="checkbox"]:checked {
1198
+ &:after {
1199
+ border-bottom: 3px solid #00b9eb;
1200
+ border-right: 1px solid #00b9eb;
1201
+ -webkit-transform: rotate(14deg);
1202
+ -moz-transform: rotate(14deg);
1203
+ -ms-transform: rotate(14deg);
1204
+ -o-transform: rotate(14deg);
1205
+ transform: rotate(33deg);
1206
+ width: 8px;
1207
+ height: 16px;
1208
+
1209
+ top: -5px;
1210
+ left: 5px;
1211
+ }
1212
+ }
1213
+ input[type="checkbox"] {
1214
+ &:disabled {
1215
+ &:after {
1216
+ border-color: #DDD;
1217
+ }
1218
+ }
1219
+ }
1220
+ input[type="radio"] {
1221
+ -webkit-border-radius: 50%;
1222
+ -moz-border-radius: 50%;
1223
+ border-radius: 50%;
1224
+ &:checked {
1225
+ &:after {
1226
+ background: #00b9eb;
1227
+ width: 8px;
1228
+ height: 8px;
1229
  border-radius: 50%;
1230
+ top: 50%;
1231
+ left: 50%;
1232
+ margin-left: -4px;
1233
+ margin-top: -4px;
1234
+ }
1235
+ }
1236
+ &:disabled {
1237
+ &:after {
1238
+ background: #DDD;
1239
+ }
 
 
 
 
 
 
 
1240
  }
1241
+ }
1242
  }
1243
 
1244
  .question-results {
1245
+ .question-title {
1246
+ &:after {
1247
+ font-family: dashicons;
1248
+ font-size: 24px;
1249
+ vertical-align: middle;
1250
+ display: inline-block;
1251
+ text-align: center;
1252
+ margin-left: 5px;
1253
+ }
1254
+ }
1255
+ &.correct {
1256
  .question-title {
1257
+ &:after {
1258
+ content: '\f147';
1259
+ color: #00adff;
1260
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1261
  }
1262
+ }
1263
+ &.skipped {
1264
+ .question-title {
1265
+ &:after {
1266
+ content: '\f534';
1267
+ color: #c6c6c6;
1268
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
1269
  }
1270
+ }
1271
+ &.incorrect {
1272
+ .question-title {
1273
+ &:after {
1274
+ content: '\f335';
1275
+ color: #ff5425;
1276
+ }
1277
  }
1278
+ .user-answer-false {
1279
+ .option-title {
1280
+ text-decoration: line-through;
1281
+ }
1282
+ }
1283
+ }
1284
+ .answer-true {
1285
+ color: #007acc;
1286
+ .option-title {
1287
+ background: #fff9d8;
1288
+ padding: 0 5px;
1289
+ margin-left: -5px;
1290
+ }
1291
+ }
1292
+ input {
1293
+ vertical-align: middle;
1294
+ }
1295
  }
1296
 
1297
  .quiz-description,
1298
  .question-content {
1299
+ .learn-press-question-title {
1300
+ margin-bottom: 20px;
1301
+ }
1302
  }
1303
 
1304
  .quiz-countdown {
1305
+ float: right;
1306
+ position: relative;
1307
+ min-width: 150px;
1308
+ background: #F5F5F5;
1309
+ text-align: center;
1310
+ font-size: 18px;
1311
+ padding: 5px 0;
1312
  }
1313
 
1314
  #quiz-countdown {
1315
+ .progress-circle {
1316
+ overflow: hidden;
1317
+ box-shadow: 0 0 3px #bdbdbd inset;
1318
+ .inside {
1319
+ line-height: 1;
1320
+ .countdown {
1321
+ font-size: 48px;
1322
+ color: #087998;
1323
+ _text-shadow: 1px 1px #8ee5fd;
1324
+ margin-top: 110px;
1325
+ }
1326
+ p {
1327
+ margin: 10px 0 0 0;
1328
+ color: #DDD;
1329
+ }
 
 
 
 
 
1330
  }
1331
+ &:after {
1332
+ background: #00b9eb;
1333
+ box-shadow: 0 0 6px #097a98;
1334
+ }
1335
+ }
1336
  }
1337
 
1338
  #quiz-progress {
1339
+ .progress-circle(@size: 200px, @background: #DDD, @fill: #FF0000, @initialize: 0%, @inside-size: 170px, @inside-background: #FFF);
1340
  }
1341
 
1342
  .quiz-result {
1343
+ .quiz-result-mark {
1344
+ .progress-circle();
1345
+ margin-bottom: 20px;
1346
+ }
1347
+ .quiz-result-summary {
1348
+ margin-bottom: 20px;
1349
+ max-width: 500px;
1350
+ .quiz-result-field {
1351
+ position: relative;
1352
+ background: #F5F5F5;
1353
+ color: #fff;
1354
+ margin: 0 0 8px 0;
1355
+ font-size: 12px;
1356
+ padding: 5px 10px;
1357
+ .border-radius(4px);
1358
+ overflow: hidden;
1359
+
1360
+ span, span:after, &:before {
1361
+ display: block;
1362
+ position: absolute;
1363
+ top: 0;
1364
+ left: 0;
1365
+ height: 100%;
1366
+ content: attr(data-text);
1367
+ color: #FFF;
1368
+ white-space: nowrap;
1369
+ overflow: hidden;
1370
+ padding: 3px 10px;
1371
+ background: transparent;
1372
+ transition: width 0.5s;
1373
+ }
1374
+ &:before {
1375
+ content: '';
1376
+ padding: 0;
1377
+ }
1378
+ span {
1379
+ padding: 0;
1380
+ }
1381
+ span:after {
1382
+ margin: 3px 10px;
1383
+ padding: 0;
1384
+ width: 100%;
1385
+ }
1386
+ &.correct {
1387
+ background: #22b4ff;
1388
+ }
1389
+ &.wrong {
1390
+ background: #ff5425;
1391
+ }
1392
+ &.empty {
1393
+ color: #656D6D;
1394
+ }
1395
+ }
1396
+ }
1397
+ p.quiz-result-time {
1398
+ margin: 0 0 10px 0;
1399
+ }
1400
+ .quiz-grade {
1401
+ p {
1402
+ margin: 0 0 10px 0;
1403
+ span {
1404
+ font-weight: bold;
1405
+ &.passed {
1406
+ color: #22b4ff;
1407
  }
1408
+ &.failed {
1409
+ color: #ff5425;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1410
  }
1411
+ }
1412
  }
1413
+ }
1414
  }
1415
 
1416
  .element-data-percent-loop (@i) when (@i <= 100) {
1417
+ .single-quiz .quiz-result-field[data-value="@{i}"]:before,
1418
+ .single-quiz .quiz-result-field[data-value="@{i}"] span,
1419
+ #quiz-countdown[data-value="@{i}"]:after {
1420
+ width: ~"@{i}%";
1421
+ }
1422
+ .element-data-percent-loop(@i + 1);
1423
  }
1424
 
1425
  .element-data-percent-loop (0);
1426
 
1427
  /* QUESTION */
1428
  .learn-press-question-options {
1429
+ list-style: none;
1430
+ margin: 0 0 20px 0;
1431
+ padding: 0;
1432
+ > li.answer-option {
1433
+ font-size: 16px;
1434
+ background: #F5F5F5;
1435
+ margin-bottom: 20px;
1436
+ position: relative;
1437
+ .border-radius(4px);
1438
+ > label {
1439
+ display: block;
1440
+ input[type="checkbox"], input[type="radio"] {
1441
+ border: 0;
1442
+ -webkit-appearance: initial;
1443
+ width: 30px;
1444
+ height: 30px;
1445
+ background: #fff;
1446
+ border-radius: 4px;
1447
+ outline: none;
1448
+ position: absolute;
1449
+ top: 10px;
1450
+ left: 15px;
1451
+ margin: 0;
1452
+ &:checked:before {
1453
+ content: '';
1454
+ border: 4px solid #00b9eb;
1455
+ display: inline-block;
1456
+ width: 10px;
1457
+ height: 15px;
1458
+ border-top: none;
1459
+ border-left: none;
1460
+ position: absolute;
1461
+ top: 3px;
1462
+ left: 8px;
1463
+ box-sizing: content-box;
1464
+ .transform(rotate(36deg));
1465
+ }
1466
+ &:checked + p {
1467
+ font-weight: bold;
1468
+ background: #00b9eb;
1469
+ color: #FFF;
1470
+ }
1471
+ }
1472
+ input[type="checkbox"][disabled], input[type="radio"][disabled] {
1473
+ opacity: 1;
1474
+ }
1475
+ input[type="radio"] {
1476
+ .border-radius(50%);
1477
+ }
1478
+ p {
1479
+ min-height: 50px;
1480
+ padding: 5px 20px 5px 60px;
1481
+ margin: 0;
1482
+ box-sizing: border-box;
1483
+ line-height: 1.5;
1484
+ &.single-lines {
1485
+ padding: 0 20px 0 60px;
1486
+ line-height: 50px; /* middle */
1487
+ }
1488
+ }
1489
+ }
1490
+ label p {
1491
+ .border-radius(4px);
1492
+ }
1493
+ &.answer-true label p {
1494
+ background: #00b9eb;
1495
+ color: #FFF;
1496
+ }
1497
+ &:hover label p {
1498
+ background: #D4D4D4;
1499
+ cursor: pointer;
1500
+ }
1501
+ &.user-answer-false {
1502
+ background: #F5F5F5;
1503
+ > label {
1504
+ input[type="checkbox"] + p, input[type="radio"] + p {
1505
+ text-decoration: line-through;
1506
+ color: #FF0000;
1507
+ background: #F5F5F5;
1508
+ }
1509
+ }
1510
+ }
1511
+ }
1512
+ .answer-option-result {
1513
+ label {
1514
+ p {
1515
+ display: inline-block;
1516
+ margin: 0;
1517
+ font-size: smaller;
1518
+ }
1519
+ input[disabled] {
1520
+ opacity: 1;
1521
+ }
 
1522
  }
1523
+ }
1524
  }
1525
 
1526
  .learnpress-content {
1527
+ margin-bottom: 20px;
1528
  }
1529
 
1530
  .course-meta {
1531
+ margin-bottom: 20px;
1532
+ .course-origin-price {
1533
+ padding-right: 5px;
1534
+ text-decoration: line-through;
1535
+ }
1536
+ .course-price {
1537
+ font-weight: bold;
1538
+ }
1539
 
1540
  }
1541
 
1542
  /** MESSAGE */
1543
  .learn-press-message {
1544
+ background: #F5F5F5;
1545
+ border-left: 5px solid #00A0D2;
1546
+ padding: 10px 20px 0px 20px;
1547
+ margin-bottom: 20px;
1548
+ overflow: hidden;
1549
+ button {
1550
+ float: right;
1551
+ }
1552
+ p {
1553
+ margin-bottom: 10px;
1554
+ }
1555
+ &:after {
1556
+ clear: both;
1557
+ content: '';
1558
+ display: block;
1559
+ }
1560
+ &.notice {
1561
+ border-left-color: #b3d20a;
1562
+ }
1563
+ &.error {
1564
+ border-left-color: #b81c23;
1565
+ }
1566
+ ul {
1567
+ list-style-type: none;
1568
+ }
1569
  }
1570
 
1571
  /**/
1572
  .learn-press-checkout-comment,
1573
  .learn-press-checkout-payment {
1574
+ margin-bottom: 20px;
1575
  }
1576
 
1577
  .learn-press-checkout-payment {
1578
+ .payment-methods {
1579
+ list-style: none;
1580
+ margin: 0;
1581
+ }
1582
  }
1583
 
1584
  /* COURSE QUIZ */
1585
  .single-quiz {
1586
+ .quiz-questions-list {
1587
+ padding: 0;
1588
+ }
1589
+ .quiz-intro {
1590
+ list-style: none;
1591
+ padding: 10px 20px;
1592
+ background: #F5F5F5;
1593
+ margin: 0 0 20px 0;
1594
+ }
1595
+ h4 {
1596
+ margin-bottom: 10px;
1597
+ font-size: 18px;
1598
+ }
1599
  }
1600
 
1601
  .learn-press-tooltip {
1602
+ font-size: 20px;
1603
+ display: inline-block;
1604
+ vertical-align: middle;
1605
+ background: #0f4956;
1606
+ cursor: pointer;
1607
+ line-height: 1;
1608
+ width: 10px;
1609
+ height: 10px;
1610
+ border-radius: 50%;
1611
+ font-weight: 700;
1612
+ position: relative;
1613
+ &:before {
1614
+ content: "?";
1615
+ font-size: 7px;
1616
+ color: white;
1617
+ position: absolute;
1618
+ top: 2px;
1619
+ left: 3px;
1620
+ }
1621
  }
1622
 
1623
  /* Form field */
1624
  .lp-form-field-wrap {
1625
+ list-style: none;
1626
+ margin: 0 0 20px 0;
1627
+ .lp-form-field {
1628
  list-style: none;
1629
  margin: 0 0 20px 0;
1630
+ .lp-form-field-label {
1631
+ display: block;
1632
+ font-weight: bold;
1633
+ margin-bottom: 5px;
1634
+ }
1635
+ .lp-form-field-input .description {
1636
+ font-size: smaller;
1637
+ font-style: italic;
1638
+ margin-top: 5px;
1639
+ }
1640
+ .lp-field-error-message {
1641
+ color: #FF0000;
 
 
 
 
1642
  }
1643
+ }
1644
  }
1645
 
1646
  .learn-press-user-profile {
1647
+ #learn-press-user-info {
1648
+ overflow: hidden;
1649
+ .user-avatar {
1650
+ width: 150px;
1651
+ float: left;
1652
+ .avatar {
1653
+ border-radius: 0;
1654
+ width: 100%;
1655
+ }
 
 
 
 
 
 
 
 
 
1656
  }
1657
  .user-basic-info {
1658
+ margin-left: 170px;
 
 
 
1659
  }
1660
+ }
1661
+ .lp-edit-profile {
1662
+ &:after {
1663
+ .clearfix();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1664
  }
1665
+ }
1666
+ .user-basic-info {
1667
+ p {
1668
+ margin-top: 10px;
 
 
 
 
1669
  }
1670
+
1671
+ }
1672
+ .learn-press-tabs {
1673
+ list-style: none;
1674
+ margin: 30px 0 20px;
1675
+ border-bottom: 1px solid #DDD;
1676
+ & > li {
1677
+ float: left;
1678
+ list-style-type: none;
1679
+ margin-bottom: -1px;
1680
+ & > a {
1681
+ display: inline-block;
1682
+ padding: 10px 15px;
1683
+ outline: none;
1684
+ box-shadow: none;
1685
+ color: #686868;
1686
+ border-bottom: 1px solid #DDD;
1687
+ }
1688
+ &.current {
1689
+ border-bottom: 4px solid #007acc;
1690
+ a {
1691
+ color: #007acc;
1692
+ margin-bottom: -4px;
1693
+ }
1694
+ }
1695
+ }
1696
+ }
1697
+ .learn-press-subtabs {
1698
+ & > li {
1699
+ display: inline-block;
1700
+ margin-right: 10px;
1701
+ &.current {
1702
+ font-weight: bold;
1703
+ }
1704
  }
1705
+ }
1706
+ .learn-press-subtab-content {
1707
+ display: none;
1708
+ margin-bottom: 20px;
1709
+ &.current {
1710
+ display: block;
1711
  }
1712
+ li.course {
1713
+ h3 {
1714
+ padding-bottom: 10px;
1715
+ }
1716
+ }
1717
+ .profile-courses {
1718
+ list-style-type: none;
1719
+ .learn-press-course-results-progress {
1720
+ padding: 0 15px 15px 15px;
1721
+ margin: 0;
1722
+ }
1723
+ }
1724
+ }
1725
+ button.learn-press-course-wishlist {
1726
+ display: block;
1727
+ }
1728
 
1729
+ .user-profile-edit-form {
 
 
 
 
1730
 
1731
+ .info-field {
1732
+ margin-bottom: 20px;
1733
+ }
1734
 
1735
+ .description {
1736
+ margin-top: 5px;
1737
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1738
 
1739
+ .user-profile-picture {
1740
+ clear: both;
1741
+ .picture, .change-picture {
1742
+ display: inline-block;
1743
+ }
1744
+ .change-picture {
1745
+ .description {
1746
+ margin: 0 0 10px 0;
1747
  }
1748
+ }
1749
+ img {
1750
+ float: left;
1751
+ margin-right: 20px;
1752
+ }
1753
+ &:after {
1754
+ .clearfix();
1755
+ }
1756
+ }
1757
 
1758
+ .profile-field-name {
1759
+ font-weight: bold;
1760
+ margin-bottom: 10px;
1761
+ }
1762
 
1763
+ .change-password {
1764
+ margin-bottom: 10px;
1765
+ }
 
 
 
 
 
1766
 
1767
+ #user_profile_password_form {
1768
+ input {
1769
+ margin-bottom: 20px;
1770
+ }
1771
+ .description {
1772
+ margin-top: -15px;
1773
+ }
1774
+ }
1775
+
1776
+ }
1777
+ .update-profile {
1778
+ border-top: 2px solid #DDD;
1779
+ padding-top: 20px;
1780
+ }
1781
+ .learn-press-subtab-content {
1782
+ display: block;
1783
+ }
1784
+ #lp-user-edit-avatar {
1785
+ .moxie-shim {
1786
+ display: none;
1787
+ }
1788
+ .lp-form-field-avatar {
1789
+ float: left;
1790
  }
1791
+ #lp-avatar-actions {
1792
+ margin: 20px 0;
1793
+ }
1794
+ }
1795
+ .lp-avatar-preview {
1796
+ position: relative;
1797
+ float: left;
1798
+ background-color: #DDD;
1799
+ .profile-picture {
1800
+ float: left;
1801
+ margin-right: -100%;
1802
+ width: 100%;
1803
+ img {
1804
+ width: 100%;
1805
+ height: 100%;
1806
+ border-radius: 0;
1807
+ }
1808
+ &.profile-avatar-hidden {
1809
+ display: none;
1810
+ }
1811
+ }
1812
+ .lp-avatar-preview-actions {
1813
+ position: absolute;
1814
+ top: 50%;
1815
+ width: 100%;
1816
+ margin-top: -14px;
1817
+ text-align: center;
1818
+ a {
1819
+ text-decoration: none;
1820
+ font-size: 12px;
1821
+ background: #FFF;
1822
+ display: inline-block;
1823
+ box-shadow: none;
1824
+ padding: 5px 10px;
1825
+ }
1826
+ }
1827
+ .lp-avatar-upload-progress {
1828
+ position: absolute;
1829
+ height: 10px;
1830
+ background: #FFF;
1831
+ top: 50%;
1832
+ margin-top: -5px;
1833
+ left: 10px;
1834
+ right: 10px;
1835
+ display: none;
1836
+ .lp-avatar-upload-progress-value {
1837
+ width: 0;
1838
+ height: 10px;
1839
+ background: #563d7c;
1840
+ }
1841
+ }
1842
+ .lp-avatar-upload-error {
1843
+ display: none;
1844
+ }
1845
+ .lp-avatar-preview-actions {
1846
+ display: none;
1847
+ }
1848
+ &:hover {
1849
+ .lp-avatar-preview-actions {
1850
+ display: block;
1851
+ }
1852
  }
1853
+ &.uploading, &.upload-error {
1854
+ .lp-avatar-preview-actions {
1855
+ display: none;
1856
+ }
1857
+ .lp-avatar-upload-progress {
1858
  display: block;
1859
+ }
1860
+ &:before {
1861
+ position: absolute;
1862
+ width: 100%;
1863
+ height: 100%;
1864
+ background: #FFF;
1865
+ opacity: 0.4;
1866
+ content: '';
1867
+ }
1868
  }
1869
+ &.upload-error {
1870
+ .lp-avatar-upload-error {
1871
+ display: block;
1872
+ }
 
 
 
 
 
 
1873
  }
1874
+ &.croping {
1875
+ .lp-avatar-preview-actions {
1876
+ display: none;
1877
+ }
1878
+ .lp-avatar-crop-image {
1879
+ position: absolute;
1880
+ top: 0;
1881
+ left: 0;
1882
+ width: 100%;
1883
+ height: 100%;
1884
+ background: #000;
1885
+ overflow: hidden;
1886
+ img {
1887
+ max-width: inherit;
1888
+ cursor: move;
1889
+ }
1890
+ .lp-crop-controls {
1891
+ position: absolute;
1892
+ bottom: 0;
1893
+ width: 100%;
1894
+ height: 30px;
1895
+ .lp-zoom {
 
 
 
 
 
 
 
 
 
 
 
1896
  position: absolute;
1897
  height: 10px;
1898
+ bottom: 10px;
 
 
1899
  left: 10px;
1900
+ right: 30px;
1901
+ background: #563d7a;
1902
+ .ui-slider {
1903
+ position: absolute;
1904
+ left: 0;
1905
+ right: 10px;
1906
+ height: 100%;
1907
+ .ui-slider-handle {
1908
+ display: inline-block;
1909
+ width: 10px;
1910
+ height: 14px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1911
  background: #FFF;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1912
  position: absolute;
1913
+ margin-top: -2px;
1914
+ border: 1px solid #563d7a;
1915
+ box-shadow: none;
1916
+ outline: none;
1917
+ cursor: ew-resize;
1918
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1919
  }
1920
+ }
1921
+ .lp-cancel-upload {
1922
+ text-decoration: none;
1923
+ position: absolute;
1924
+ bottom: 5px;
1925
+ right: 5px;
1926
+ box-shadow: none;
1927
+ }
1928
+ &:before {
1929
+ position: absolute;
1930
+ height: 30px;
1931
+ width: 100%;
1932
+ content: '';
1933
+ background: #FFF;
1934
+ opacity: 0.4;
1935
+ }
1936
  }
1937
+ }
 
 
1938
  }
1939
+ &:after {
1940
+ .clearfix();
1941
+ }
1942
+ }
1943
  }
1944
 
1945
  body {
1946
+ &.profile-dragging {
1947
+ cursor: move !important;
1948
+ }
1949
+ &.profile-resizing {
1950
+ cursor: ew-resize !important;
1951
+ }
1952
  }
1953
 
1954
  .learn-press-pagination {
1955
+ text-align: center;
1956
+ ul {
1957
+ list-style: disc;
1958
+ & > li {
1959
+ display: inline-block;
1960
+ span {
1961
+ display: inline-block;
1962
+ padding: 0 10px;
1963
+ border: 1px solid #DDD;
1964
+ background-color: #F5F5F5;
1965
+ }
1966
+ a {
1967
+ display: inline-block;
1968
+ padding: 0 10px;
1969
+ border: 1px solid #DDD;
1970
+ background-color: #FFF;
1971
+ }
 
1972
  }
1973
+ }
1974
  }
1975
 
1976
  .learn-press-become-teacher-form {
1977
+ ul {
1978
+ list-style: none;
1979
+ padding: 0;
1980
+ li {
1981
+ margin-bottom: 20px;
 
1982
  }
1983
+ }
1984
  }
1985
 
1986
  /* jAlerts */
1987
  #popup_container {
1988
+ background: #FFF;
1989
 
1990
+ #popup_title {
1991
+ padding: 10px 20px;
1992
+ background: #18B6C7;
1993
+ color: #FFF;
1994
+ font-size: 18px;
1995
+ margin: 0;
1996
+ }
1997
 
1998
+ #popup_content {
1999
+ padding: 20px;
2000
+ #popup_message {
2001
+ margin-bottom: 20px;
 
2002
  }
2003
+ }
2004
 
2005
+ #popup_panel {
2006
+ text-align: center;
2007
+ }
2008
  }
2009
 
2010
  .learn-press-auto-redirect-next-item {
2011
+ display: none;
2012
 
2013
+ &.active {
2014
+ display: block;
2015
+ }
2016
  }
2017
 
2018
  .single-lp_course {
2019
+ .course-summary {
2020
+ .lp_course {
2021
+ .entry-footer {
2022
+ display: none;
2023
+ }
 
2024
  }
2025
+ }
2026
+ .learn-press-message {
2027
+ position: relative;
2028
+ clear: both;
2029
+ margin-top: 25px;
2030
+
2031
+ .learn-press-countdown {
2032
+ display: inline-block;
2033
+ width: 1.5em;
2034
+ height: 1.5em;
2035
+ background: #cc540d;
2036
+ text-align: center;
2037
+ border-radius: 50%;
2038
+ line-height: 1.5em;
2039
+ font-size: 0.8em;
2040
+ color: #fff;
2041
+ }
2042
+ .learnpress-dismiss-notice {
2043
+ display: inline-block;
2044
+ position: absolute;
2045
+ right: 1em;
2046
+ top: 50%;
2047
+ -ms-transform: translateY(-50%);
2048
+ -webkit-transform: translateY(-50%);
2049
+ transform: translateY(-50%);
2050
+ cursor: pointer;
 
 
 
 
 
 
 
2051
 
2052
+ &:before {
2053
+ font-size: 1.2em;
2054
+ color: red;
2055
+ content: "\f153";
2056
+ font-family: dashicons;
2057
+ }
2058
  }
2059
 
2060
+ }
2061
+
2062
  }
2063
 
2064
  /* tooltip */
2065
  .learn-press-tooltip-bubble {
2066
+ position: absolute;
2067
+ background: rgba(26, 26, 26, 0.9);
2068
+ color: #ffffff;
2069
+ padding: 8px 10px;
2070
+ font-size: 12px;
2071
+ z-index: 9999999;
2072
+ line-height: 1;
2073
+ border-radius: 3px;
2074
  }
2075
 
2076
  /* fill in blank */
2077
  input.blank-fill-correct {
2078
+ width: auto;
2079
  }
2080
 
2081
  body.content-item-only {
2082
+ background: #FFF;
2083
+ opacity: 0;
2084
+ .learn-press-content-item-only {
2085
+ position: fixed;
2086
+ z-index: 9999999;
2087
+ left: 0;
2088
+ top: 0;
2089
+ width: 100%;
2090
+ height: 100%;
2091
  background: #FFF;
2092
+ overflow: auto;
2093
+ padding: 20px;
2094
+ margin: 0;
2095
+ }
 
 
 
 
 
 
 
 
 
2096
 
2097
+ #learn-press-content-item {
2098
+ border: none;
2099
+ display: block;
2100
+ transition: max-width linear 0.25s;
2101
+ margin: 0 auto;
2102
+ max-width: 1000px;
2103
+ width: 90%;
2104
+ &.expand {
2105
+ max-width: 1200px;
 
2106
  }
2107
+ }
2108
  }
2109
 
2110
  .lp-group-heading-title {
2111
+ &.toggle-off, &.toggle-on {
2112
+ cursor: pointer;
2113
+ .toggle-icon {
2114
+ display: inline-block;
2115
+ font-size: larger;
2116
+ line-height: 1;
2117
+ font-weight: bold;
2118
+ margin-left: 5px;
2119
+ &:before {
2120
+ content: '+';
2121
+ }
2122
+ }
2123
+ }
2124
+ &.toggle-on {
2125
+ .toggle-icon {
2126
+ &:before {
2127
+ content: '-';
2128
+ }
2129
+ }
2130
+ }
2131
  }
2132
 
2133
  /*
2164
  }*/
2165
 
2166
  .place-order-action {
2167
+ margin-top: 20px;
2168
  }
2169
 
2170
  .woocommerce {
2171
+ form .form-row {
2172
+ &.validate-email, &.validate-phone {
2173
+ width: 100% !important;
 
2174
  }
2175
+ }
2176
 
2177
+ .checkout_coupon {
2178
+ .form-row-last {
2179
+ input.button {
2180
+ padding: 13px 10px !important;
2181
+ }
 
2182
  }
2183
+ }
2184
  }
2185
 
2186
  .learn-press-search-course-form {
2187
+ margin-bottom: 20px;
2188
+ input.search-course-input[name="s"] {
2189
+ margin-right: -200px;
2190
+ width: 100%;
2191
+ }
2192
+ .search-course-button {
2193
+ vertical-align: middle;
2194
+ float: right;
2195
+ z-index: 10;
2196
+ position: relative;
2197
+ }
2198
  }
2199
 
2200
  .table-orders {
2201
+ .order-status {
2202
+ &.order-status-removed {
2203
+ color: #FF0000;
 
2204
  }
2205
+ }
2206
  }
2207
 
2208
  /* Shortcode/Widgets */
2209
  .widget_lp-widget-popular-courses, .widget_lp-widget-recent-courses, .widget_lp-widget-featured-courses {
2210
+ .course-meta-data {
2211
+ > div {
2212
+ display: inline-block;
2213
+ &:after {
2214
+ content: '/';
2215
+ }
2216
+ &:last-child:after {
2217
+ content: '';
2218
+ }
 
 
 
 
 
 
 
 
 
 
2219
  }
2220
+
2221
+ }
2222
+ .course-title {
2223
+ margin: 5px 0;
2224
+ }
2225
+ .course-entry {
2226
+ margin-bottom: 20px;
2227
+ border-bottom: 1px dashed #DDD;
2228
+ padding-bottom: 20px;
2229
+ }
2230
  }
2231
 
2232
  .edit-course-item-link {
2233
+ a {
2234
+ font-size: 14px;
2235
+ position: relative;
2236
+ padding-left: 25px;
2237
+ &:after {
2238
+ content: "\f464";
2239
+ font-family: Dashicons;
2240
+ font-size: 26px;
2241
+ position: absolute;
2242
+ bottom: 0;
2243
+ line-height: 1;
2244
+ left: 0;
 
2245
  }
2246
+ }
2247
  }
2248
 
2249
  .course-item-navigation {
2250
+ border-top: 4px solid #333;
2251
+ padding-top: 10px;
2252
+ margin-top: 20px;
2253
+ .nav-links {
2254
+ .nav-link {
2255
+ opacity: 1;
2256
+ a {
2257
+ opacity: 1;
2258
+ .meta-nav {
2259
+ display: block;
2260
+ text-transform: uppercase;
2261
+ font-size: small;
2262
+ color: #b9b9b9;
2263
+ }
2264
+ .post-title {
2265
+ opacity: 1;
2266
+ }
2267
+ }
2268
+ &.nav-previous {
2269
+ float: left;
2270
+ }
2271
+ &.nav-next {
2272
+ float: right;
2273
+ text-align: right;
2274
+ }
2275
+ }
2276
+ &:after {
2277
+ clear: both;
2278
+ display: block;
2279
+ content: '';
 
2280
  }
2281
+ }
2282
  }
2283
 
2284
  /* widget attributes */
2285
  .lp-course-attributes {
2286
+ list-style: none;
2287
+ margin-left: 0;
2288
+ li {
2289
+ list-style: none;
2290
+ margin-bottom: 10px;
2291
+ }
2292
+ .lp-course-attribute-values {
2293
  list-style: none;
2294
  margin-left: 0;
2295
+ }
2296
+ &.course-attributes {
 
 
2297
  .lp-course-attribute-values {
2298
+ li {
2299
+ display: inline-block;
2300
+ padding: 3px 8px;
2301
+ background: #F0F0F0;
2302
+ border-radius: 4px;
2303
+ margin: 0 5px 5px 0;
2304
+ }
2305
+ }
2306
+ }
2307
+ &.course-filters {
2308
+ .lp-course-attribute-values {
2309
+ li {
2310
+ a:before {
2311
+ font-family: dashicons;
2312
+ border-radius: 50%;
2313
+ background: #DDD;
2314
+ display: inline-block;
2315
+ width: 16px;
2316
+ height: 16px;
2317
+ text-align: center;
2318
+ line-height: 16px;
2319
+ color: #FFF;
2320
+ font-size: 16px;
2321
+ vertical-align: middle;
2322
+ margin-right: 5px;
2323
+ content: '';
2324
+ }
2325
+ &:hover a:before {
2326
+ background: #4acfff;
2327
+ }
2328
+ }
2329
+ li.active {
2330
+ a:before {
2331
+ content: "\f147";
2332
+ background: #4acfff;
2333
+ }
2334
+ &:hover a:before {
2335
+ content: "\f335";
2336
+ background: #a20000;
2337
+ }
2338
+ }
2339
+ }
2340
+ }
 
 
 
 
 
2341
  }
2342
 
2343
  @-moz-keyframes spin-12 {
2344
+ 0% {
2345
+ -moz-transform: rotate(0deg) translate(0px);
2346
+ }
2347
+ 100% {
2348
+ -moz-transform: rotate(360deg) translate(0px);
2349
+ }
2350
  }
2351
 
2352
  @-webkit-keyframes spin-12 {
2353
+ 0% {
2354
+ -webkit-transform: rotate(0deg) translate(0px);
2355
+ }
2356
+ 100% {
2357
+ -webkit-transform: rotate(360deg) translate(0px);
2358
+ }
2359
  }
2360
 
2361
  @keyframes spin-12 {
2362
+ 0% {
2363
+ -webkit-transform: rotate(0deg) translate(0px);
2364
+ transform: rotate(0deg) translate(0px);
2365
+ }
2366
+ 100% {
2367
+ -webkit-transform: rotate(360deg) translate(0px);
2368
+ transform: rotate(360deg) translate(0px);
2369
+ }
2370
  }
2371
 
2372
  @-moz-keyframes spin-13 {
2373
+ 100% {
2374
+ -moz-transform: rotate(0deg) translate(0px);
2375
+ }
2376
+ 0% {
2377
+ -moz-transform: rotate(360deg) translate(0px);
2378
+ }
2379
  }
2380
 
2381
  @-webkit-keyframes spin-13 {
2382
+ 0% {
2383
+ -webkit-transform: rotate(0deg) translate(0px);
2384
+ }
2385
+ 100% {
2386
+ -webkit-transform: rotate(360deg) translate(0px);
2387
+ }
2388
  }
2389
 
2390
  @keyframes spin-13 {
2391
+ 100% {
2392
+ -webkit-transform: rotate(0deg) translate(0px);
2393
+ transform: rotate(0deg) translate(0px);
2394
+ }
2395
+ 0% {
2396
+ -webkit-transform: rotate(360deg) translate(0px);
2397
+ transform: rotate(360deg) translate(0px);
2398
+ }
2399
  }
2400
 
2401
  @media screen and (max-width: 1250px) {
2402
+ .single-lp_course .learn-press-course-results-progress {
2403
+ .items-progress, .course-progress {
2404
+ float: none;
2405
+ width: 100%;
 
 
 
 
2406
  }
2407
+ .items-progress {
2408
+ margin-bottom: 50px;
2409
+ }
2410
+ }
2411
  }
2412
 
2413
  @media screen and (max-width: 768px) {
2414
+ #learn-press-block-content {
2415
+ .learn-press-block-content-mixin(60px);
2416
+ }
2417
 
2418
+ .learn-press-course-results-progress {
2419
+ .items-progress, .course-progress {
2420
+ width: 100%;
2421
+ margin-right: 0;
 
2422
  }
2423
+ }
2424
 
2425
  }
2426
 
2427
  @media (min-width: 992px) {
2428
+ .learn-press-courses {
2429
+ li.course {
2430
+ &:nth-child(4n+1) {
2431
+ clear: left;
2432
+ }
 
2433
  }
2434
+ }
2435
  }
2436
 
2437
  @media (max-width: 992px) {
2438
+ .learn-press-courses {
2439
+ margin: 0;
2440
+ }
2441
  }
2442
 
2443
  @media (max-width: 992px) and (min-width: 600px ) {
2444
 
2445
+ .learn-press-courses {
2446
+ li.course {
2447
+ width: 31.33%;
2448
+ margin: 0 2% 30px 0;
2449
+ /* padding: 0 20px; */
2450
+ &:nth-child(3n+1) {
2451
+ clear: left;
2452
+ margin-left: 0;
2453
+ }
 
2454
  }
2455
+ }
2456
 
2457
  }
2458
 
2459
  @media (max-width: 600px) and (min-width: 400px ) {
2460
 
2461
+ .learn-press-courses {
2462
+ li.course {
2463
+ width: 48%;
2464
+ margin: 0 2% 30px 0;
2465
+ /* padding: 0 20px; */
2466
+ &:nth-child(2n+1) {
2467
+ clear: left;
2468
+ margin-left: 0;
2469
+ }
 
2470
  }
2471
+ }
2472
 
2473
  }
2474
 
2485
  */
2486
  @media (max-width: 400px) {
2487
 
2488
+ .learn-press-courses {
2489
+ li.course {
2490
+ width: 100%;
2491
+ margin: 0 0 30px 0;
2492
+ clear: left;
 
2493
  }
2494
+ }
2495
 
2496
  }
2497
 
2498
  @media (max-width: 350px) {
2499
+ #course-curriculum-popup #popup-sidebar {
2500
+ width: 100%;
2501
+ }
2502
  }
2503
 
2504
  /* full width with twentysixteen theme */
2505
  @media screen and (min-width: 61.5625em) {
2506
+ body.single-lp_course {
2507
+ article.lp_course {
2508
+ .entry-content {
2509
+ width: 100%;
2510
+ }
2511
+ .entry-footer {
2512
+ display: none;
2513
+ }
 
2514
  }
2515
+ }
2516
  }
2517
 
2518
  /*
inc/admin/class-lp-admin-ajax.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
2
 
3
- if ( !defined( 'ABSPATH' ) ) {
4
  exit; // Exit if accessed directly
5
  }
6
- if ( !class_exists( 'LP_Admin_Ajax' ) ) {
7
 
8
  /**
9
  * Class LP_Admin_Ajax
@@ -55,8 +55,8 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
55
  'duplicate_question' => false,
56
  // Remove Notice
57
  'remove_notice_popup' => false,
58
- // Update order status
59
- 'update_order_status' => false,
60
  );
61
  foreach ( $ajaxEvents as $ajaxEvent => $nopriv ) {
62
  add_action( 'wp_ajax_learnpress_' . $ajaxEvent, array( __CLASS__, $ajaxEvent ) );
@@ -77,7 +77,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
77
  }
78
 
79
  public static function load_chart() {
80
- if ( !class_exists( '' ) ) {
81
  require_once LP_PLUGIN_PATH . '/inc/admin/sub-menus/statistics.php';
82
  }
83
  LP_Admin_Submenu_Statistic::instance()->load_chart();
@@ -86,13 +86,13 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
86
  public static function search_course() {
87
  global $wpdb;
88
  $sql = "SELECT ID id, post_title text "
89
- . " FROM {$wpdb->posts} "
90
- . " WHERE post_type='lp_course' "
91
- . " AND post_status in ('publish') "
92
- . " AND post_title like %s";
93
  if ( current_user_can( LP_TEACHER_ROLE ) ) {
94
  $user_id = learn_press_get_current_user_id();
95
- $sql .= " AND post_author=" . intval( $user_id ) . " ";
96
  }
97
  $s = '%' . filter_input( INPUT_GET, 'q' ) . '%';
98
  $query = $wpdb->prepare( $sql, $s );
@@ -105,10 +105,10 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
105
  public static function search_course_category() {
106
  global $wpdb;
107
  $sql = "SELECT `t`.`term_id` as `id`, "
108
- . " `t`.`name` `text` "
109
- . " FROM {$wpdb->terms} t "
110
- . " INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id AND taxonomy='course_category' "
111
- . " WHERE `t`.`name` LIKE %s";
112
  $s = '%' . filter_input( INPUT_GET, 'q' ) . '%';
113
  $query = $wpdb->prepare( $sql, $s );
114
  $items = $wpdb->get_results( $query );
@@ -138,7 +138,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
138
  }
139
 
140
  public static function search_users() {
141
- if ( !current_user_can( 'edit_lp_orders' ) ) {
142
  die( - 1 );
143
  }
144
 
@@ -163,7 +163,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
163
 
164
  $customers = $customers_query->get_results();
165
 
166
- if ( !empty( $customers ) ) {
167
  foreach ( $customers as $customer ) {
168
  $found_customers[] = array(
169
  'label' => $customer->display_name . ' (#' . $customer->ID . ' &ndash; ' . sanitize_email( $customer->user_email ) . ')',
@@ -186,7 +186,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
186
  $term = like_escape( $term );
187
  }
188
 
189
- $query->query_from .= " INNER JOIN {$wpdb->usermeta} AS user_name ON {$wpdb->users}.ID = user_name.user_id AND ( user_name.meta_key = 'first_name' OR user_name.meta_key = 'last_name' ) ";
190
  $query->query_where .= $wpdb->prepare( " OR user_name.meta_value LIKE %s ", '%' . $term . '%' );
191
  }
192
 
@@ -230,7 +230,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
230
  * @param $exclude
231
  * @param $type
232
  * @param string $context
233
- * @param null $context_id
234
  *
235
  * @return array
236
  */
@@ -274,11 +274,11 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
274
  public static function add_item_to_section() {
275
  global $wpdb;
276
  $section = learn_press_get_request( 'section' );
277
- if ( !$section ) {
278
  wp_die( __( 'Error', 'learnpress' ) );
279
  }
280
  $items = (array) learn_press_get_request( 'item' );
281
- if ( !$items ) {
282
  $max_order = $wpdb->get_var( $wpdb->prepare( "SELECT max() FROM {$wpdb}learnpress_section_items WHERE section_id = %d", $section ) );
283
  foreach ( $items as $item ) {
284
 
@@ -289,100 +289,75 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
289
  public static function modal_search_items() {
290
  global $wpdb;
291
 
292
- $user = learn_press_get_current_user();
293
- $term = (string) ( stripslashes( learn_press_get_request( 'term' ) ) );
294
- $type = (string) ( stripslashes( learn_press_get_request( 'type' ) ) );
295
- $context = (string) ( stripslashes( learn_press_get_request( 'context' ) ) );
296
- $context_id = (string) ( stripslashes( learn_press_get_request( 'context_id' ) ) );
297
- $current_items_in_order = learn_press_get_request( 'current_items' );
298
- $current_items = array();
299
 
300
-
301
- foreach ($current_items_in_order as $item) {
302
- $sql = "SELECT meta_value
303
  FROM {$wpdb->prefix}learnpress_order_itemmeta
304
  WHERE meta_key = '_course_id'
305
  AND learnpress_order_item_id = $item";
306
- $id = $wpdb->get_results( $sql, OBJECT );
307
- array_push($current_items, $id[0]->meta_value);
308
- }
309
 
310
- $exclude = array();
311
 
312
- if ( !empty( $_GET['exclude'] ) ) {
313
  $exclude = array_map( 'intval', $_GET['exclude'] );
314
  }
 
 
 
315
  $exclude = array_unique( (array) apply_filters( 'learn_press_modal_search_items_exclude', $exclude, $type, $context, $context_id ) );
316
  $exclude = array_map( 'intval', $exclude );
317
- $args = array(
 
318
  'post_type' => array( $type ),
319
  'posts_per_page' => - 1,
320
  'post_status' => 'publish',
321
  'order' => 'ASC',
322
  'orderby' => 'parent title',
 
323
  'exclude' => $exclude
324
  );
325
- if ( !$user->is_admin() ) {
326
- $args['author'] = $user->id;
327
- }
328
 
329
- if ( $context && $context_id ) {
330
- switch ( $context ) {
331
- /**
332
- * If is search lesson/quiz for course only search the items of course's author
333
- */
334
- case 'course-items':
335
- if ( get_post_type( $context_id ) == 'lp_course' ) {
336
- $post_author = get_post_field( 'post_author', $context_id );
337
- $authors = array($post_author);
338
- if($post_author != $user->id ){
339
- $authors[] =$user->id;
340
- }
341
- $args['author'] = $authors;
342
- }
343
- break;
344
- /**
345
- * If is search question for quiz only search the items of course's author
346
- */
347
- case 'quiz-items':
348
- if ( get_post_type( $context_id ) == 'lp_quiz' ) {
349
- $post_author = get_post_field( 'post_author', $context_id );
350
- $authors = array($post_author);
351
- if($post_author != $user->id ){
352
- $authors[] =$user->id;
353
- }
354
- $args['author'] = $authors;
355
- //$args['author'] = get_post_field( 'post_author', $context_id );
356
- }
357
- break;
358
- }
359
- }
360
  if ( $term ) {
361
  $args['s'] = $term;
362
  }
363
- $args = apply_filters('learn_press_filter_admin_ajax_modal_search_items_args', $args, $context, $context_id );
 
 
 
 
 
 
364
  $posts = get_posts( $args );
365
  $found_items = array();
366
 
367
- if ( !empty( $posts ) ) {
368
- if ($current_items_in_order) {
369
- foreach ( $posts as $post ) {
370
- if (in_array($post->ID, $current_items)) {
371
- continue;
372
- }
373
- $found_items[$post->ID] = $post;
374
- $found_items[$post->ID]->post_title = !empty( $post->post_title ) ? $post->post_title : sprintf( '(%s)', __( 'Untitled', 'learnpress' ) );
375
- }
376
- } else {
377
- foreach ( $posts as $post ) {
378
- $found_items[$post->ID] = $post;
379
- $found_items[$post->ID]->post_title = !empty( $post->post_title ) ? $post->post_title : sprintf( '(%s)', __( 'Untitled', 'learnpress' ) );
380
- }
381
- }
382
  }
383
 
384
 
385
-
386
  ob_start();
387
  if ( $found_items ) {
388
  foreach ( $found_items as $id => $item ) {
@@ -419,7 +394,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
419
  global $wpdb;
420
  $quiz_id = learn_press_get_request( 'quiz_id' );
421
  $question_id = learn_press_get_request( 'question_id' );
422
- if ( !wp_verify_nonce( learn_press_get_request( 'remove-nonce' ), 'remove_quiz_question' ) ) {
423
  wp_die( __( 'Error', 'learnpress' ) );
424
  }
425
  $query = $wpdb->prepare( "
@@ -433,10 +408,10 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
433
  $user_id = get_current_user_id();
434
  $type = get_post_meta( $question_id, '_lp_type', true );
435
  if ( $type ) {
436
- $question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );
437
- $question_types = !$question_types ? array() : $question_types;
438
- $counter = !empty ( $question_types[$type] ) && $question_types[$type] ? absint( $question_types[$type] ) : 0;
439
- $question_types[$type] = $counter ? $counter -- : 0;
440
  update_user_meta( $user_id, '_learn_press_memorize_question_types', $question_types );
441
  }
442
  // end trigger change user memorize question types
@@ -448,13 +423,13 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
448
 
449
  $quiz_id = learn_press_get_request( 'quiz_id' );
450
  $user = learn_press_get_current_user();
451
- if ( !$user->is_admin() && get_post_field( 'post_author', $quiz_id ) != get_current_user_id() ) {
452
  wp_die( __( 'You have no permission to access this section.', 'learnpress' ) );
453
  }
454
  $term = (string) ( stripslashes( learn_press_get_request( 'term' ) ) );
455
  $exclude = array();
456
 
457
- if ( !empty( $_GET['exclude'] ) ) {
458
  $exclude = array_map( 'intval', $_GET['exclude'] );
459
  }
460
 
@@ -478,7 +453,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
478
  'orderby' => 'parent title',
479
  'exclude' => $exclude
480
  );
481
- if ( !$user->is_admin() ) {
482
  $args['author'] = $user->id;
483
  }
484
  if ( $term ) {
@@ -487,9 +462,9 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
487
  $posts = get_posts( $args );
488
  $found_questions = array();
489
 
490
- if ( !empty( $posts ) ) {
491
  foreach ( $posts as $post ) {
492
- $found_questions[$post->ID] = !empty( $post->post_title ) ? $post->post_title : sprintf( '(%s)', __( 'Untitled', 'learnpress' ) );
493
  }
494
  }
495
 
@@ -531,26 +506,26 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
531
  */
532
  public static function remove_order_item() {
533
  // ensure that user has permission
534
- if ( !current_user_can( 'edit_lp_orders' ) ) {
535
  die( __( 'Permission denied', 'learnpress' ) );
536
  }
537
 
538
  // verify nonce
539
  $nonce = learn_press_get_request( 'remove_nonce' );
540
- if ( !wp_verify_nonce( $nonce, 'remove_order_item' ) ) {
541
  die( __( 'Check nonce failed', 'learnpress' ) );
542
  }
543
 
544
  // validate order
545
  $order_id = learn_press_get_request( 'order_id' );
546
- if ( !is_numeric( $order_id ) || get_post_type( $order_id ) != 'lp_order' ) {
547
  die( __( 'Order invalid', 'learnpress' ) );
548
  }
549
 
550
  // validate item
551
  $item_id = learn_press_get_request( 'item_id' );
552
  $post = get_post( learn_press_get_order_item_meta( $item_id, '_course_id' ) );
553
- if ( !$post || ( 'lp_course' !== $post->post_type ) ) {
554
  die( __( 'Course invalid', 'learnpress' ) );
555
  }
556
 
@@ -576,7 +551,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
576
  public static function add_item_to_order() {
577
 
578
  // ensure that user has permission
579
- if ( !current_user_can( 'edit_lp_orders' ) ) {
580
  die( __( 'Permission denied', 'learnpress' ) );
581
  }
582
 
@@ -588,7 +563,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
588
 
589
  // validate order
590
  $order_id = learn_press_get_request( 'order_id' );
591
- if ( !is_numeric( $order_id ) || get_post_type( $order_id ) != 'lp_order' ) {
592
  die( __( 'Order invalid', 'learnpress' ) );
593
  }
594
 
@@ -602,7 +577,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
602
  // exit(''.__LINE__);
603
  foreach ( $item_ids as $item_id ):
604
  $post = get_post( $item_id );
605
- if ( !$post || ( 'lp_course' !== $post->post_type ) ) {
606
  continue;
607
  // die( __( 'Course invalid', 'learnpress' ) );
608
  }
@@ -656,7 +631,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
656
 
657
  public static function search_courses() {
658
  $nonce = learn_press_get_request( 'nonce' );
659
- if ( !wp_verify_nonce( $nonce, 'search_item_term' ) ) {
660
  LP_Debug::exception( __( 'Verify nonce failed', 'learnpress' ) );
661
  }
662
 
@@ -670,9 +645,9 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
670
  )
671
  );
672
  $found_courses = array();
673
- if ( !empty( $posts ) ) {
674
  foreach ( $posts as $post ) {
675
- $found_courses[$post] = array(
676
  'title' => get_the_title( $post ),
677
  'permalink' => get_the_permalink( $post )
678
  );
@@ -785,7 +760,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
785
  * Create a new page with the title passed via $_REQUEST
786
  */
787
  public static function create_page() {
788
- $page_name = !empty( $_REQUEST['page_name'] ) ? $_REQUEST['page_name'] : '';
789
  $response = array();
790
  if ( $page_name ) {
791
  $args = array(
@@ -801,7 +776,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
801
  preg_match_all( '!value=\"([0-9]+)\"!', $html, $matches );
802
  $response['positions'] = $matches[1];
803
  $response['html'] = '<a href="' . get_edit_post_link( $page_id ) . '" target="_blank">' . __( 'Edit Page', 'learnpress' ) . '</a>&nbsp;';
804
- $response['html'] .= '<a href="' . get_permalink( $page_id ) . '" target="_blank">' . __( 'View Page', 'learnpress' ) . '</a>';
805
  } else {
806
  $response['error'] = __( 'Error! Create page failed. Please try again!', 'learnpress' );
807
  }
@@ -824,7 +799,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
824
  );
825
  $post = get_post( $quiz_id );
826
  setup_postdata( $post );
827
- if ( !$id ) {
828
  $args_item = array(
829
  'post_title' => $name,
830
  'post_type' => LP_QUESTION_CPT,
@@ -855,10 +830,10 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
855
  $response['html'] = ob_get_clean();
856
 
857
  // trigger change user memorize question types
858
- $question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );
859
- $question_types = !$question_types ? array() : $question_types;
860
- $type = get_post_meta( $id, '_lp_type', true );
861
- $question_types[$type] = !empty ( $question_types[$type] ) ? absint( $question_types[$type] ) + 1 : 1;
862
  update_user_meta( $user_id, '_learn_press_memorize_question_types', $question_types );
863
  // end trigger change user memorize question types
864
  }
@@ -875,10 +850,10 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
875
  $question = LP_Question_Factory::get_question( $question_id, array( 'type' => $to ) );
876
 
877
  // trigger change user memorize question types
878
- $user_id = get_current_user_id();
879
- $question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );
880
- $question_types[$from] = !empty( $question_types[$from] ) && $question_types[$from] ? absint( $question_types[$from] ) - 1 : 0;
881
- $question_types[$to] = !empty( $question_types[$to] ) && $question_types[$to] ? absint( $question_types[$to] ) + 1 : 1;
882
  update_user_meta( $user_id, '_learn_press_memorize_question_types', $question_types );
883
  // end trigger change user memorize question types
884
  if ( 'auto-draft' === $question->post->post_status ) {
@@ -903,7 +878,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
903
  * Install sample data or dismiss the notice depending on user's option
904
  */
905
  public static function install_sample_data() {
906
- $yes = !empty( $_REQUEST['yes'] ) ? $_REQUEST['yes'] : '';
907
  $response = array( 'result' => 'fail' );
908
  $retry_button = sprintf( '<a href="" class="button yes" data-action="yes">%s</a>', __( 'Try again!', 'learnpress' ) );
909
  $dismiss_button = sprintf( '<a href="" class="button disabled no" data-action="no">%s</a>', __( 'Cancel', 'learnpress' ) );
@@ -954,7 +929,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
954
  include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' ); //for plugins_api..
955
  $response = array( 'addons' => array() );
956
 
957
- if ( !current_user_can( 'activate_plugins' ) ) {
958
  $response['error'] = __( 'You do not have sufficient permissions to deactivate plugins for this site.', 'learnpress' );
959
  } else {
960
 
@@ -962,7 +937,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
962
 
963
  if ( $add_ons ) {
964
  foreach ( $add_ons as $slug ) {
965
- $response['addons'][$slug] = learn_press_install_and_active_add_on( $slug );
966
  }
967
  }
968
  }
@@ -975,27 +950,27 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
975
  public static function bundle_activate_add_on() {
976
  $response = array();
977
  include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' ); //for plugins_api..
978
- if ( !current_user_can( 'activate_plugins' ) ) {
979
  $response['error'] = __( 'You do not have sufficient permissions to deactivate plugins for this site.', 'learnpress' );
980
  } else {
981
- $slug = !empty( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : null;
982
- $response[$slug] = learn_press_install_and_active_add_on( $slug );
983
  }
984
  learn_press_send_json( $response );
985
  }
986
 
987
  public static function plugin_install() {
988
- $plugin_name = !empty( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
989
  $response = learn_press_install_add_on( $plugin_name );
990
  learn_press_send_json( $response );
991
  die();
992
  }
993
 
994
  public static function update_add_on_status() {
995
- $plugin = !empty( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
996
- $t = !empty( $_REQUEST['t'] ) ? $_REQUEST['t'] : '';
997
  $response = array();
998
- if ( !current_user_can( 'activate_plugins' ) ) {
999
  $response['error'] = __( 'You do not have sufficient permissions to deactivate plugins for this site.', 'learnpress' );
1000
  }
1001
  if ( $plugin && $t ) {
@@ -1016,7 +991,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
1016
  * Output the image to browser with text and params passed via $_GET
1017
  */
1018
  public static function dummy_image() {
1019
- $text = !empty( $_REQUEST['text'] ) ? $_REQUEST['text'] : '';
1020
  learn_press_text_image( $text, $_GET );
1021
  die();
1022
  }
@@ -1025,10 +1000,12 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
1025
  * Get edit|view link of a page
1026
  */
1027
  public static function get_page_permalink() {
1028
- $page_id = !empty( $_REQUEST['page_id'] ) ? $_REQUEST['page_id'] : '';
1029
  ?>
1030
- <a href="<?php echo get_edit_post_link( $page_id ); ?>" target="_blank"><?php _e( 'Edit Page', 'learnpress' ); ?></a>
1031
- <a href="<?php echo get_permalink( $page_id ); ?>" target="_blank"><?php _e( 'View Page', 'learnpress' ); ?></a>
 
 
1032
  <?php
1033
  die();
1034
  }
@@ -1038,8 +1015,8 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
1038
  *
1039
  */
1040
  public function custom_stats() {
1041
- $from = !empty( $_REQUEST['from'] ) ? $_REQUEST['from'] : 0;
1042
- $to = !empty( $_REQUEST['to'] ) ? $_REQUEST['to'] : 0;
1043
  $date_diff = strtotime( $to ) - strtotime( $from );
1044
  if ( $date_diff <= 0 || $from == 0 || $to == 0 ) {
1045
  die();
@@ -1120,12 +1097,12 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
1120
  }
1121
 
1122
  public static function duplicate_course() {
1123
- if ( empty( $_POST['course_id'] ) || empty( $_POST['_nonce'] ) || !wp_verify_nonce( $_POST['_nonce'], 'lp-duplicate-course' ) ) {
1124
  return;
1125
  }
1126
  global $wpdb;
1127
  $course_id = absint( $_POST['course_id'] );
1128
- $force = !empty( $_POST['content'] ) && $_POST['content'] ? true : false;
1129
 
1130
  $results = array(
1131
  'redirect' => admin_url( 'edit.php?post_type=' . LP_COURSE_CPT )
@@ -1143,7 +1120,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
1143
  }
1144
 
1145
  public static function duplicate_question() {
1146
- if ( empty( $_POST['_nonce'] ) || !wp_verify_nonce( $_POST['_nonce'], 'duplicate-question' ) ) {
1147
  return;
1148
  }
1149
  global $wpdb;
@@ -1152,7 +1129,7 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
1152
  $user_id = learn_press_get_current_user_id();
1153
 
1154
  $new_question_id = learn_press_duplicate_question( $question_id, $quiz_id );
1155
- if ( !is_wp_error( $new_question_id ) ) {
1156
  ob_start();
1157
  $question = LP_Question_Factory::get_question( $new_question_id );
1158
  $post = get_post( $quiz_id );
@@ -1162,10 +1139,10 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
1162
  $response['html'] = ob_get_clean();
1163
 
1164
  // trigger change user memorize question types
1165
- $question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );
1166
- $question_types = !$question_types ? array() : $question_types;
1167
- $type = get_post_meta( $new_question_id, '_lp_type', true );
1168
- $question_types[$type] = !empty ( $question_types[$type] ) ? absint( $question_types[$type] ) + 1 : 1;
1169
  update_user_meta( $user_id, '_learn_press_memorize_question_types', $question_types );
1170
  // end trigger change user memorize question types
1171
  learn_press_send_json( $response );
@@ -1178,8 +1155,8 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
1178
  public static function remove_notice_popup() {
1179
 
1180
  if ( isset( $_POST['action'] ) && $_POST['action'] === 'learnpress_remove_notice_popup'
1181
- && isset( $_POST['slug'] ) && !empty( $_POST['slug'] )
1182
- && isset( $_POST['user'] ) && !empty( $_POST['user'] )
1183
  ) {
1184
 
1185
  $slug = 'learnpress_notice_' . $_POST['slug'] . '_' . $_POST['user'];
@@ -1191,22 +1168,22 @@ if ( !class_exists( 'LP_Admin_Ajax' ) ) {
1191
 
1192
  }
1193
 
1194
- public static function update_order_status () {
1195
- global $wpdb;
1196
- $order_id = learn_press_get_request( 'order_id' );
1197
- $value = learn_press_get_request( 'value' );
1198
 
1199
- $order = array(
1200
- 'ID' => $order_id,
1201
- 'post_status' => $value,
1202
- );
1203
 
1204
- wp_update_post( $order ) ? $response['success'] = true : $response['success'] = false;
1205
 
1206
- learn_press_send_json( $response );
1207
 
1208
- die();
1209
- }
1210
 
1211
  }
1212
  }
1
  <?php
2
 
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
  exit; // Exit if accessed directly
5
  }
6
+ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
7
 
8
  /**
9
  * Class LP_Admin_Ajax
55
  'duplicate_question' => false,
56
  // Remove Notice
57
  'remove_notice_popup' => false,
58
+ // Update order status
59
+ 'update_order_status' => false,
60
  );
61
  foreach ( $ajaxEvents as $ajaxEvent => $nopriv ) {
62
  add_action( 'wp_ajax_learnpress_' . $ajaxEvent, array( __CLASS__, $ajaxEvent ) );
77
  }
78
 
79
  public static function load_chart() {
80
+ if ( ! class_exists( '' ) ) {
81
  require_once LP_PLUGIN_PATH . '/inc/admin/sub-menus/statistics.php';
82
  }
83
  LP_Admin_Submenu_Statistic::instance()->load_chart();
86
  public static function search_course() {
87
  global $wpdb;
88
  $sql = "SELECT ID id, post_title text "
89
+ . " FROM {$wpdb->posts} "
90
+ . " WHERE post_type='lp_course' "
91
+ . " AND post_status in ('publish') "
92
+ . " AND post_title like %s";
93
  if ( current_user_can( LP_TEACHER_ROLE ) ) {
94
  $user_id = learn_press_get_current_user_id();
95
+ $sql .= " AND post_author=" . intval( $user_id ) . " ";
96
  }
97
  $s = '%' . filter_input( INPUT_GET, 'q' ) . '%';
98
  $query = $wpdb->prepare( $sql, $s );
105
  public static function search_course_category() {
106
  global $wpdb;
107
  $sql = "SELECT `t`.`term_id` as `id`, "
108
+ . " `t`.`name` `text` "
109
+ . " FROM {$wpdb->terms} t "
110
+ . " INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id AND taxonomy='course_category' "
111
+ . " WHERE `t`.`name` LIKE %s";
112
  $s = '%' . filter_input( INPUT_GET, 'q' ) . '%';
113
  $query = $wpdb->prepare( $sql, $s );
114
  $items = $wpdb->get_results( $query );
138
  }
139
 
140
  public static function search_users() {
141
+ if ( ! current_user_can( 'edit_lp_orders' ) ) {
142
  die( - 1 );
143
  }
144
 
163
 
164
  $customers = $customers_query->get_results();
165
 
166
+ if ( ! empty( $customers ) ) {
167
  foreach ( $customers as $customer ) {
168
  $found_customers[] = array(
169
  'label' => $customer->display_name . ' (#' . $customer->ID . ' &ndash; ' . sanitize_email( $customer->user_email ) . ')',
186
  $term = like_escape( $term );
187
  }
188
 
189
+ $query->query_from .= " INNER JOIN {$wpdb->usermeta} AS user_name ON {$wpdb->users}.ID = user_name.user_id AND ( user_name.meta_key = 'first_name' OR user_name.meta_key = 'last_name' ) ";
190
  $query->query_where .= $wpdb->prepare( " OR user_name.meta_value LIKE %s ", '%' . $term . '%' );
191
  }
192
 
230
  * @param $exclude
231
  * @param $type
232
  * @param string $context
233
+ * @param null $context_id
234
  *
235
  * @return array
236
  */
274
  public static function add_item_to_section() {
275
  global $wpdb;
276
  $section = learn_press_get_request( 'section' );
277
+ if ( ! $section ) {
278
  wp_die( __( 'Error', 'learnpress' ) );
279
  }
280
  $items = (array) learn_press_get_request( 'item' );
281
+ if ( ! $items ) {
282
  $max_order = $wpdb->get_var( $wpdb->prepare( "SELECT max() FROM {$wpdb}learnpress_section_items WHERE section_id = %d", $section ) );
283
  foreach ( $items as $item ) {
284
 
289
  public static function modal_search_items() {
290
  global $wpdb;
291
 
292
+ $user = learn_press_get_current_user();
293
+ $term = (string) ( stripslashes( learn_press_get_request( 'term' ) ) );
294
+ $type = (string) ( stripslashes( learn_press_get_request( 'type' ) ) );
295
+ $context = (string) ( stripslashes( learn_press_get_request( 'context' ) ) );
296
+ $context_id = (string) ( stripslashes( learn_press_get_request( 'context_id' ) ) );
297
+ $current_items_in_order = learn_press_get_request( 'current_items' );
298
+ $current_items = array();
299
 
300
+ foreach ( $current_items_in_order as $item ) {
301
+ $sql = "SELECT meta_value
 
302
  FROM {$wpdb->prefix}learnpress_order_itemmeta
303
  WHERE meta_key = '_course_id'
304
  AND learnpress_order_item_id = $item";
305
+ $id = $wpdb->get_results( $sql, OBJECT );
306
+ array_push( $current_items, $id[0]->meta_value );
307
+ }
308
 
309
+ $exclude = array();
310
 
311
+ if ( ! empty( $_GET['exclude'] ) ) {
312
  $exclude = array_map( 'intval', $_GET['exclude'] );
313
  }
314
+
315
+ $author_id = get_post_field( 'post_author', $context_id );
316
+
317
  $exclude = array_unique( (array) apply_filters( 'learn_press_modal_search_items_exclude', $exclude, $type, $context, $context_id ) );
318
  $exclude = array_map( 'intval', $exclude );
319
+
320
+ $args = array(
321
  'post_type' => array( $type ),
322
  'posts_per_page' => - 1,
323
  'post_status' => 'publish',
324
  'order' => 'ASC',
325
  'orderby' => 'parent title',
326
+ 'author' => $author_id,
327
  'exclude' => $exclude
328
  );
 
 
 
329
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
  if ( $term ) {
331
  $args['s'] = $term;
332
  }
333
+
334
+ // allow super admin can search course of other user
335
+ if( is_super_admin() && $context == 'course-items' && $type=='lp_course' ) {
336
+ unset( $args['author'] );
337
+ }
338
+
339
+ $args = apply_filters( 'learn_press_filter_admin_ajax_modal_search_items_args', $args, $context, $context_id );
340
  $posts = get_posts( $args );
341
  $found_items = array();
342
 
343
+ if ( ! empty( $posts ) ) {
344
+ if ( $current_items_in_order ) {
345
+ foreach ( $posts as $post ) {
346
+ if ( in_array( $post->ID, $current_items ) ) {
347
+ continue;
348
+ }
349
+ $found_items[ $post->ID ] = $post;
350
+ $found_items[ $post->ID ]->post_title = ! empty( $post->post_title ) ? $post->post_title : sprintf( '(%s)', __( 'Untitled', 'learnpress' ) );
351
+ }
352
+ } else {
353
+ foreach ( $posts as $post ) {
354
+ $found_items[ $post->ID ] = $post;
355
+ $found_items[ $post->ID ]->post_title = ! empty( $post->post_title ) ? $post->post_title : sprintf( '(%s)', __( 'Untitled', 'learnpress' ) );
356
+ }
357
+ }
358
  }
359
 
360
 
 
361
  ob_start();
362
  if ( $found_items ) {
363
  foreach ( $found_items as $id => $item ) {
394
  global $wpdb;
395
  $quiz_id = learn_press_get_request( 'quiz_id' );
396
  $question_id = learn_press_get_request( 'question_id' );
397
+ if ( ! wp_verify_nonce( learn_press_get_request( 'remove-nonce' ), 'remove_quiz_question' ) ) {
398
  wp_die( __( 'Error', 'learnpress' ) );
399
  }
400
  $query = $wpdb->prepare( "
408
  $user_id = get_current_user_id();
409
  $type = get_post_meta( $question_id, '_lp_type', true );
410
  if ( $type ) {
411
+ $question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );
412
+ $question_types = ! $question_types ? array() : $question_types;
413
+ $counter = ! empty ( $question_types[ $type ] ) && $question_types[ $type ] ? absint( $question_types[ $type ] ) : 0;
414
+ $question_types[ $type ] = $counter ? $counter -- : 0;
415
  update_user_meta( $user_id, '_learn_press_memorize_question_types', $question_types );
416
  }
417
  // end trigger change user memorize question types
423
 
424
  $quiz_id = learn_press_get_request( 'quiz_id' );
425
  $user = learn_press_get_current_user();
426
+ if ( ! $user->is_admin() && get_post_field( 'post_author', $quiz_id ) != get_current_user_id() ) {
427
  wp_die( __( 'You have no permission to access this section.', 'learnpress' ) );
428
  }
429
  $term = (string) ( stripslashes( learn_press_get_request( 'term' ) ) );
430
  $exclude = array();
431
 
432
+ if ( ! empty( $_GET['exclude'] ) ) {
433
  $exclude = array_map( 'intval', $_GET['exclude'] );
434
  }
435
 
453
  'orderby' => 'parent title',
454
  'exclude' => $exclude
455
  );
456
+ if ( ! $user->is_admin() ) {
457
  $args['author'] = $user->id;
458
  }
459
  if ( $term ) {
462
  $posts = get_posts( $args );
463
  $found_questions = array();
464
 
465
+ if ( ! empty( $posts ) ) {
466
  foreach ( $posts as $post ) {
467
+ $found_questions[ $post->ID ] = ! empty( $post->post_title ) ? $post->post_title : sprintf( '(%s)', __( 'Untitled', 'learnpress' ) );
468
  }
469
  }
470
 
506
  */
507
  public static function remove_order_item() {
508
  // ensure that user has permission
509
+ if ( ! current_user_can( 'edit_lp_orders' ) ) {
510
  die( __( 'Permission denied', 'learnpress' ) );
511
  }
512
 
513
  // verify nonce
514
  $nonce = learn_press_get_request( 'remove_nonce' );
515
+ if ( ! wp_verify_nonce( $nonce, 'remove_order_item' ) ) {
516
  die( __( 'Check nonce failed', 'learnpress' ) );
517
  }
518
 
519
  // validate order
520
  $order_id = learn_press_get_request( 'order_id' );
521
+ if ( ! is_numeric( $order_id ) || get_post_type( $order_id ) != 'lp_order' ) {
522
  die( __( 'Order invalid', 'learnpress' ) );
523
  }
524
 
525
  // validate item
526
  $item_id = learn_press_get_request( 'item_id' );
527
  $post = get_post( learn_press_get_order_item_meta( $item_id, '_course_id' ) );
528
+ if ( ! $post || ( 'lp_course' !== $post->post_type ) ) {
529
  die( __( 'Course invalid', 'learnpress' ) );
530
  }
531
 
551
  public static function add_item_to_order() {
552
 
553
  // ensure that user has permission
554
+ if ( ! current_user_can( 'edit_lp_orders' ) ) {
555
  die( __( 'Permission denied', 'learnpress' ) );
556
  }
557
 
563
 
564
  // validate order
565
  $order_id = learn_press_get_request( 'order_id' );
566
+ if ( ! is_numeric( $order_id ) || get_post_type( $order_id ) != 'lp_order' ) {
567
  die( __( 'Order invalid', 'learnpress' ) );
568
  }
569
 
577
  // exit(''.__LINE__);
578
  foreach ( $item_ids as $item_id ):
579
  $post = get_post( $item_id );
580
+ if ( ! $post || ( 'lp_course' !== $post->post_type ) ) {
581
  continue;
582
  // die( __( 'Course invalid', 'learnpress' ) );
583
  }
631
 
632
  public static function search_courses() {
633
  $nonce = learn_press_get_request( 'nonce' );
634
+ if ( ! wp_verify_nonce( $nonce, 'search_item_term' ) ) {
635
  LP_Debug::exception( __( 'Verify nonce failed', 'learnpress' ) );
636
  }
637
 
645
  )
646
  );
647
  $found_courses = array();
648
+ if ( ! empty( $posts ) ) {
649
  foreach ( $posts as $post ) {
650
+ $found_courses[ $post ] = array(
651
  'title' => get_the_title( $post ),
652
  'permalink' => get_the_permalink( $post )
653
  );
760
  * Create a new page with the title passed via $_REQUEST
761
  */
762
  public static function create_page() {
763
+ $page_name = ! empty( $_REQUEST['page_name'] ) ? $_REQUEST['page_name'] : '';
764
  $response = array();
765
  if ( $page_name ) {
766
  $args = array(
776
  preg_match_all( '!value=\"([0-9]+)\"!', $html, $matches );
777
  $response['positions'] = $matches[1];
778
  $response['html'] = '<a href="' . get_edit_post_link( $page_id ) . '" target="_blank">' . __( 'Edit Page', 'learnpress' ) . '</a>&nbsp;';
779
+ $response['html'] .= '<a href="' . get_permalink( $page_id ) . '" target="_blank">' . __( 'View Page', 'learnpress' ) . '</a>';
780
  } else {
781
  $response['error'] = __( 'Error! Create page failed. Please try again!', 'learnpress' );
782
  }
799
  );
800
  $post = get_post( $quiz_id );
801
  setup_postdata( $post );
802
+ if ( ! $id ) {
803
  $args_item = array(
804
  'post_title' => $name,
805
  'post_type' => LP_QUESTION_CPT,
830
  $response['html'] = ob_get_clean();
831
 
832
  // trigger change user memorize question types
833
+ $question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );
834
+ $question_types = ! $question_types ? array() : $question_types;
835
+ $type = get_post_meta( $id, '_lp_type', true );
836
+ $question_types[ $type ] = ! empty ( $question_types[ $type ] ) ? absint( $question_types[ $type ] ) + 1 : 1;
837
  update_user_meta( $user_id, '_learn_press_memorize_question_types', $question_types );
838
  // end trigger change user memorize question types
839
  }
850
  $question = LP_Question_Factory::get_question( $question_id, array( 'type' => $to ) );
851
 
852
  // trigger change user memorize question types
853
+ $user_id = get_current_user_id();
854
+ $question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );
855
+ $question_types[ $from ] = ! empty( $question_types[ $from ] ) && $question_types[ $from ] ? absint( $question_types[ $from ] ) - 1 : 0;
856
+ $question_types[ $to ] = ! empty( $question_types[ $to ] ) && $question_types[ $to ] ? absint( $question_types[ $to ] ) + 1 : 1;
857
  update_user_meta( $user_id, '_learn_press_memorize_question_types', $question_types );
858
  // end trigger change user memorize question types
859
  if ( 'auto-draft' === $question->post->post_status ) {
878
  * Install sample data or dismiss the notice depending on user's option
879
  */
880
  public static function install_sample_data() {
881
+ $yes = ! empty( $_REQUEST['yes'] ) ? $_REQUEST['yes'] : '';
882
  $response = array( 'result' => 'fail' );
883
  $retry_button = sprintf( '<a href="" class="button yes" data-action="yes">%s</a>', __( 'Try again!', 'learnpress' ) );
884
  $dismiss_button = sprintf( '<a href="" class="button disabled no" data-action="no">%s</a>', __( 'Cancel', 'learnpress' ) );
929
  include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' ); //for plugins_api..
930
  $response = array( 'addons' => array() );
931
 
932
+ if ( ! current_user_can( 'activate_plugins' ) ) {
933
  $response['error'] = __( 'You do not have sufficient permissions to deactivate plugins for this site.', 'learnpress' );
934
  } else {
935
 
937
 
938
  if ( $add_ons ) {
939
  foreach ( $add_ons as $slug ) {
940
+ $response['addons'][ $slug ] = learn_press_install_and_active_add_on( $slug );
941
  }
942
  }
943
  }
950
  public static function bundle_activate_add_on() {
951
  $response = array();
952
  include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' ); //for plugins_api..
953
+ if ( ! current_user_can( 'activate_plugins' ) ) {
954
  $response['error'] = __( 'You do not have sufficient permissions to deactivate plugins for this site.', 'learnpress' );
955
  } else {
956
+ $slug = ! empty( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : null;
957
+ $response[ $slug ] = learn_press_install_and_active_add_on( $slug );
958
  }
959
  learn_press_send_json( $response );
960
  }
961
 
962
  public static function plugin_install() {
963
+ $plugin_name = ! empty( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
964
  $response = learn_press_install_add_on( $plugin_name );
965
  learn_press_send_json( $response );
966
  die();
967
  }
968
 
969
  public static function update_add_on_status() {
970
+ $plugin = ! empty( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
971
+ $t = ! empty( $_REQUEST['t'] ) ? $_REQUEST['t'] : '';
972
  $response = array();
973
+ if ( ! current_user_can( 'activate_plugins' ) ) {
974
  $response['error'] = __( 'You do not have sufficient permissions to deactivate plugins for this site.', 'learnpress' );
975
  }
976
  if ( $plugin && $t ) {
991
  * Output the image to browser with text and params passed via $_GET
992
  */
993
  public static function dummy_image() {
994
+ $text = ! empty( $_REQUEST['text'] ) ? $_REQUEST['text'] : '';
995
  learn_press_text_image( $text, $_GET );
996
  die();
997
  }
1000
  * Get edit|view link of a page
1001
  */
1002
  public static function get_page_permalink() {
1003
+ $page_id = ! empty( $_REQUEST['page_id'] ) ? $_REQUEST['page_id'] : '';
1004
  ?>
1005
+ <a href="<?php echo get_edit_post_link( $page_id ); ?>"
1006
+ target="_blank"><?php _e( 'Edit Page', 'learnpress' ); ?></a>
1007
+ <a href="<?php echo get_permalink( $page_id ); ?>"
1008
+ target="_blank"><?php _e( 'View Page', 'learnpress' ); ?></a>
1009
  <?php
1010
  die();
1011
  }
1015
  *
1016
  */
1017
  public function custom_stats() {
1018
+ $from = ! empty( $_REQUEST['from'] ) ? $_REQUEST['from'] : 0;
1019
+ $to = ! empty( $_REQUEST['to'] ) ? $_REQUEST['to'] : 0;
1020
  $date_diff = strtotime( $to ) - strtotime( $from );
1021
  if ( $date_diff <= 0 || $from == 0 || $to == 0 ) {
1022
  die();
1097
  }
1098
 
1099
  public static function duplicate_course() {
1100
+ if ( empty( $_POST['course_id'] ) || empty( $_POST['_nonce'] ) || ! wp_verify_nonce( $_POST['_nonce'], 'lp-duplicate-course' ) ) {
1101
  return;
1102
  }
1103
  global $wpdb;
1104
  $course_id = absint( $_POST['course_id'] );
1105
+ $force = ! empty( $_POST['content'] ) && $_POST['content'] ? true : false;
1106
 
1107
  $results = array(
1108
  'redirect' => admin_url( 'edit.php?post_type=' . LP_COURSE_CPT )
1120
  }
1121
 
1122
  public static function duplicate_question() {
1123
+ if ( empty( $_POST['_nonce'] ) || ! wp_verify_nonce( $_POST['_nonce'], 'duplicate-question' ) ) {
1124
  return;
1125
  }
1126
  global $wpdb;
1129
  $user_id = learn_press_get_current_user_id();
1130
 
1131
  $new_question_id = learn_press_duplicate_question( $question_id, $quiz_id );
1132
+ if ( ! is_wp_error( $new_question_id ) ) {
1133
  ob_start();
1134
  $question = LP_Question_Factory::get_question( $new_question_id );
1135
  $post = get_post( $quiz_id );
1139
  $response['html'] = ob_get_clean();
1140
 
1141
  // trigger change user memorize question types
1142
+ $question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );
1143
+ $question_types = ! $question_types ? array() : $question_types;
1144
+ $type = get_post_meta( $new_question_id, '_lp_type', true );
1145
+ $question_types[ $type ] = ! empty ( $question_types[ $type ] ) ? absint( $question_types[ $type ] ) + 1 : 1;
1146
  update_user_meta( $user_id, '_learn_press_memorize_question_types', $question_types );
1147
  // end trigger change user memorize question types
1148
  learn_press_send_json( $response );
1155
  public static function remove_notice_popup() {
1156
 
1157
  if ( isset( $_POST['action'] ) && $_POST['action'] === 'learnpress_remove_notice_popup'
1158
+ && isset( $_POST['slug'] ) && ! empty( $_POST['slug'] )
1159
+ && isset( $_POST['user'] ) && ! empty( $_POST['user'] )
1160
  ) {
1161
 
1162
  $slug = 'learnpress_notice_' . $_POST['slug'] . '_' . $_POST['user'];
1168
 
1169
  }
1170
 
1171
+ public static function update_order_status() {
1172
+ global $wpdb;
1173
+ $order_id = learn_press_get_request( 'order_id' );
1174
+ $value = learn_press_get_request( 'value' );
1175
 
1176
+ $order = array(
1177
+ 'ID' => $order_id,
1178
+ 'post_status' => $value,
1179
+ );
1180
 
1181
+ wp_update_post( $order ) ? $response['success'] = true : $response['success'] = false;
1182
 
1183
+ learn_press_send_json( $response );
1184
 
1185
+ die();
1186
+ }
1187
 
1188
  }
1189
  }
inc/admin/views/question/html-base-option.php DELETED
@@ -1,137 +0,0 @@
1
- <?php
2
- /**
3
- * Admin template for displaying multi choice option
4
- *
5
- * @package LearnPress/Templates/Admin
6
- */
7
- defined( 'ABSPATH' ) or exit();
8
- if ( ! isset( $question ) ) {
9
- $question = learn_press_get_question( get_the_ID() );
10
- }
11
-
12
- if ( ! $question ) {
13
- }
14
- $default_answer = array( 'value' => '', 'text' => '', 'is_true' => false );
15
-
16
- if ( isset( $answer ) ) {
17
- $answer = wp_parse_args( $answer, $default_answer );
18
- } else {
19
- $answer = $default_answer;
20
- }
21
-
22
- $type = $question->get_type();
23
- $option_headings = $question->get_admin_option_headings();
24
- $value = $question->get_option_value( $answer['value'] );
25
- $id = $question->get_id();
26
- $input_type = $type == 'multi_choice' ? 'checkbox' : 'radio';
27
-
28
- do_action( 'learn_press_before_question_answer_option', $id );
29
-
30
- $template_data = array_merge(
31
- array(
32
- 'id' => $question->get_id(),
33
- 'answer_option' => array(
34
- 'value' => $value,
35
- 'text' => $answer['text'],
36
- 'is_true' => $answer['is_true']
37
- )
38
- ),
39
- $question->get_option_template_data()
40
- );
41
-
42
- ?>
43
- <tr class="lp-list-option lp-row lp-list-option-<?php echo $template_data['answer_option']['value']; ?>"
44
- data-id="<?php echo $template_data['answer_option']['value']; ?>">
45
- <?php foreach ( $option_headings as $heading => $title ) { ?>
46
- <?php
47
- $classes = array( 'lp-column', 'lp-column-' . $heading );
48
- $tooltip = '';
49
- ob_start();
50
- switch ( $heading ) {
51
- case 'sort':
52
- echo '<i class="fa fa-bars"></i>';
53
- break;
54
- case 'order':
55
- echo '<span answer-option-order></span>';
56
- break;
57
- case 'answer_text':
58
- ?>
59
- <input class="lp-answer-text no-submit key-nav" type="text"
60
- name="learn_press_question[<?php echo $template_data['id']; ?>][answer_options][text][]"
61
- value="<?php echo esc_attr( $template_data['answer_option']['text'] ); ?>"
62
- placeholder="<?php esc_attr_e( 'Type name of option', 'learnpress' ); ?>"
63
- autocomplete="off"
64
- ng-keypress="onOptionKeyEvent($event)"
65
- ng-keyup="onOptionKeyEvent($event)"
66
- ng-keydown="onOptionKeyEvent($event)"
67
- />
68
- <?php
69
- break;
70
- case 'answer_correct':
71
- $classes[] = 'lp-answer-check';
72
- ?>
73
- <input type="hidden"
74
- name="learn_press_question[<?php echo $template_data['id']; ?>][answer_options][value][]"
75
- value="<?php echo $template_data['answer_option']['value']; ?>"
76
- class="lp-answer-value"/>
77
- <input type="hidden"
78
- name="learn_press_question[<?php echo $template_data['id']; ?>][answer_options][checked][]"
79
- value=""
80
- class="<?php echo $template_data['answer_option']['is_true'] == 'yes' ? 'abc-xyz' : ''; ?>"
81
- />
82
- <input type="<?php echo $input_type; ?>"
83
- name="learn_press_question[<?php echo $template_data['id']; ?>][answer_options][checked][]"
84
- <?php checked( $template_data['answer_option']['is_true'] == 'yes', true ); ?>
85
- value="<?php echo $template_data['answer_option']['value']; ?>"
86
- onchange=""
87
- class="def-123 <?php echo $template_data['answer_option']['is_true'] == 'yes' ? '' : 'abc-xyz'; ?>"
88
- />
89
- <?php
90
- break;
91
- case 'actions':
92
- $classes[] = 'lp-toolbar-buttons';
93
- ?>
94
- <div class="lp-toolbar-btn lp-btn-remove lp-toolbar-btn-dropdown">
95
- <a data-tooltip="<?php esc_attr_e( 'Remove this option', 'learnpress' ); ?>"
96
- class="lp-btn-icon dashicons dashicons-trash learn-press-tooltip" ng-click="removeOption($event)"></a>
97
- <ul>
98
- <li><a class="learn-press-tooltip"
99
- data-tooltip="<?php esc_attr__( 'Delete permanently this option', 'learnpress' ); ?>"
100
- ng-click="removeOption($event)" data-delete-permanently="yes">
101
- <?php esc_html_e( 'Delete permanently', 'learnpress' ); ?>
102
- </a>
103
- </li>
104
- </ul>
105
- </div>
106
- <!--
107
- <span class="learn-press-tooltip lp-toolbar-btn lp-btn-remove"
108
- data-tooltip="<?php esc_attr_e( 'Remove this option', 'learnpress' ); ?>"
109
- ng-click="removeOption($event)">
110
- <a class="lp-btn-icon dashicons dashicons-trash">
111
-
112
- </a>
113
- </span><!--
114
- --><span class="learn-press-tooltip lp-toolbar-btn lp-btn-move"
115
- data-tooltip="<?php esc_attr_e( 'Drag and drop to change answer\'s position', 'learnpress' ); ?>">
116
- <a class="lp-btn-icon dashicons dashicons-sort"></a>
117
- </span><?php
118
- break;
119
- }
120
- if ( $tooltip ) {
121
- $classes[] = 'learn-press-tooltip';
122
- }
123
- $classes = apply_filters( "learn-press/question/{$type}/admin-option-column-class", $classes, $heading, $answer, $template_data, $id );
124
- $classes = array_filter( $classes );
125
- $classes = array_unique( $classes );
126
- ?>
127
- <?php do_action( "learn-press/question/{$type}/admin-option-column-" . $heading . '-content', $answer, $template_data, $id ); ?>
128
- <?php do_action( "learn-press/question/{$type}/admin-option-columns-content", $heading, $answer, $template_data, $id ); ?>
129
- <?php $html = ob_get_clean(); ?>
130
- <td class="<?php echo join( ' ', $classes ); ?>"<?php if ( $tooltip ) {
131
- echo ' data-tooltip="' . $tooltip . '"';
132
- } ?>>
133
- <?php echo $html; ?>
134
- </td>
135
- <?php } ?>
136
- </tr>
137
- <?php do_action( 'learn_press_after_question_answer_option', $id ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/class-lp-page-controller.php CHANGED
@@ -139,7 +139,10 @@ class LP_Page_Controller {
139
  }
140
  $post->post_content = '[learn_press_confirm_order]';
141
  } elseif ( ( $page_id = learn_press_get_page_id( 'become_a_teacher' ) ) && is_page( $page_id ) && $page_id == $queried_object_id ) {
142
- $post->post_content = '[learn_press_become_teacher_form]';
 
 
 
143
  } else {
144
  if ( learn_press_is_courses() || learn_press_is_course_tag() || learn_press_is_course_category() || learn_press_is_search() ) {
145
  $file = 'archive-course.php';
139
  }
140
  $post->post_content = '[learn_press_confirm_order]';
141
  } elseif ( ( $page_id = learn_press_get_page_id( 'become_a_teacher' ) ) && is_page( $page_id ) && $page_id == $queried_object_id ) {
142
+ preg_match( '#\[learn_press_become_teacher_form\]#i' , $post->post_content, $m);
143
+ if(empty($m)){
144
+ $post->post_content .= '[learn_press_become_teacher_form]';
145
+ }
146
  } else {
147
  if ( learn_press_is_courses() || learn_press_is_course_tag() || learn_press_is_course_category() || learn_press_is_search() ) {
148
  $file = 'archive-course.php';
inc/class-lp-schedules.php CHANGED
@@ -30,14 +30,14 @@ class LP_Schedules {
30
  public function auto_complete_course( $template ) {
31
  if ( learn_press_is_course() && is_user_logged_in() ) {
32
  $course = learn_press_get_course();
33
- $duration = $course->get_duration();
34
  $user = learn_press_get_current_user();
35
- if ( $duration && $user->has_enrolled_course( $course->id ) && ! $user->has_finished_course( $course->id ) && $course->is_expired( $user->id ) <= 0 ) {
 
 
36
  $this->schedule_update_user_items();
37
  wp_redirect( get_permalink( $course->id ) );
38
  }
39
  }
40
-
41
  return $template;
42
  }
43
 
@@ -46,7 +46,6 @@ class LP_Schedules {
46
  'interval' => 600,
47
  'display' => 'Once Every 10 Minutes'
48
  );
49
-
50
  return (array) $schedules;
51
  }
52
 
@@ -63,7 +62,7 @@ class LP_Schedules {
63
  $sql,
64
  $wpdb->esc_like( '_transient_' ) . '%',
65
  $wpdb->esc_like( '_transient_timeout_' ) . '%',
66
- $wpdb->esc_like( '_transient_learn_press_user_guest_' . '%' ),
67
  $time
68
  )
69
  );
@@ -80,12 +79,12 @@ class LP_Schedules {
80
  $sql,
81
  $wpdb->esc_like( '_site_transient_' ) . '%',
82
  $wpdb->esc_like( '_site_transient_timeout_' ) . '%',
83
- $wpdb->esc_like( '_site_transient_learn_press_user_guest_' . '%' ),
84
  $time
85
  )
86
  );
87
  }
88
- learn_press_reset_auto_increment( $wpdb->options );
89
  }
90
 
91
  public function schedule_update_user_items() {
@@ -95,8 +94,11 @@ class LP_Schedules {
95
 
96
  /**
97
  * Auto finished course when time is expired for users
 
 
 
98
  */
99
- private function _update_user_course_expired() {
100
  global $wpdb;
101
  /**
102
  * Find all courses that user did not finish yet
@@ -119,6 +121,19 @@ class LP_Schedules {
119
  )
120
  LIMIT 0, 10
121
  ", '0000-00-00 00:00:00', 'lp_course' );*/
 
 
 
 
 
 
 
 
 
 
 
 
 
122
 
123
  $query = $wpdb->prepare( "
124
  SELECT *
@@ -129,7 +144,8 @@ class LP_Schedules {
129
  WHERE end_time = %s
130
  AND item_type = %s
131
  AND status <> %s
132
- GROUP BY item_id, user_id
 
133
  )
134
  LIMIT 0, 10
135
  ", '0000-00-00 00:00:00', 'lp_course', 'finished' );
@@ -154,7 +170,7 @@ class LP_Schedules {
154
 
155
  $user = learn_press_get_user( $row->user_id );
156
  if ( ! $user ) {
157
- return;
158
  }
159
  $this->_update_user_course_items_expired( $course, $user );
160
  $item_meta_id = $user->finish_course( $course->id );
30
  public function auto_complete_course( $template ) {
31
  if ( learn_press_is_course() && is_user_logged_in() ) {
32
  $course = learn_press_get_course();
 
33
  $user = learn_press_get_current_user();
34
+ $duration = $course->get_duration();
35
+ if( $duration && $user->has_enrolled_course( $course->id, true ) && !$user->has_finished_course( $course->id, true ) && $course->is_expired( $user->id ) <= 0 ) {
36
+ $user->finish_course($course->id);
37
  $this->schedule_update_user_items();
38
  wp_redirect( get_permalink( $course->id ) );
39
  }
40
  }
 
41
  return $template;
42
  }
43
 
46
  'interval' => 600,
47
  'display' => 'Once Every 10 Minutes'
48
  );
 
49
  return (array) $schedules;
50
  }
51
 
62
  $sql,
63
  $wpdb->esc_like( '_transient_' ) . '%',
64
  $wpdb->esc_like( '_transient_timeout_' ) . '%',
65
+ $wpdb->esc_like( '_transient_learn_press_user_guest_' ) . '%',
66
  $time
67
  )
68
  );
79
  $sql,
80
  $wpdb->esc_like( '_site_transient_' ) . '%',
81
  $wpdb->esc_like( '_site_transient_timeout_' ) . '%',
82
+ $wpdb->esc_like( '_site_transient_learn_press_user_guest_' ) . '%',
83
  $time
84
  )
85
  );
86
  }
87
+ learn_press_reset_auto_increment( 'options' );
88
  }
89
 
90
  public function schedule_update_user_items() {
94
 
95
  /**
96
  * Auto finished course when time is expired for users
97
+ *
98
+ * @param int|array $course_id
99
+ * @param int|array $user_id
100
  */
101
+ private function _update_user_course_expired( $course_id = 0, $user_id = 0 ) {
102
  global $wpdb;
103
  /**
104
  * Find all courses that user did not finish yet
121
  )
122
  LIMIT 0, 10
123
  ", '0000-00-00 00:00:00', 'lp_course' );*/
124
+ $where = '';
125
+ if ( $user_id ) {
126
+ $where .= $wpdb->prepare( "AND user_id = %d", $user_id );
127
+ }
128
+
129
+ if ( $course_id ) {
130
+ $where .= $wpdb->prepare( " AND item_id = %d", $course_id );
131
+ }
132
+
133
+ $groupby = '';
134
+ if ( ! $user_id && ! $course_id ) {
135
+ $groupby = 'GROUP BY item_id, user_id';
136
+ }
137
 
138
  $query = $wpdb->prepare( "
139
  SELECT *
144
  WHERE end_time = %s
145
  AND item_type = %s
146
  AND status <> %s
147
+ {$where}
148
+ {$groupby}
149
  )
150
  LIMIT 0, 10
151
  ", '0000-00-00 00:00:00', 'lp_course', 'finished' );
170
 
171
  $user = learn_press_get_user( $row->user_id );
172
  if ( ! $user ) {
173
+ continue;
174
  }
175
  $this->_update_user_course_items_expired( $course, $user );
176
  $item_meta_id = $user->finish_course( $course->id );
inc/class-lp-shortcodes.php CHANGED
@@ -5,7 +5,7 @@
5
  * @version 1.0
6
  */
7
 
8
- if ( !defined( 'ABSPATH' ) ) {
9
  exit;
10
  }
11
 
@@ -39,25 +39,25 @@ class LP_Shortcodes {
39
  public static function auto_shortcode( $template ) {
40
  if ( is_page() ) {
41
  global $post, $wp_query, $wp;
42
- $page_id = !empty( $wp_query->queried_object_id ) ?
43
  $wp_query->queried_object_id :
44
- ( !empty( $wp_query->query_vars['page_id'] ) ? $wp_query->query_vars['page_id'] : - 1 );
45
  if ( $page_id == learn_press_get_page_id( 'checkout' ) ) {
46
- if ( !preg_match( '/\[learn_press_checkout\s?(.*)\]/', $post->post_content ) ) {
47
  $post->post_content .= '[learn_press_checkout]';
48
  }
49
  } elseif ( $page_id == learn_press_get_page_id( 'profile' ) ) {
50
  if ( empty( $wp->query_vars['user'] ) ) {
51
  $current_user = wp_get_current_user();
52
- if ( !empty( $current_user->user_login ) ) {
53
  $redirect = learn_press_get_endpoint_url( '', $current_user->user_login, learn_press_get_page_link( 'profile' ) );
54
- if ( $redirect && !learn_press_is_current_url( $redirect ) ) {
55
  wp_redirect( $redirect );
56
  die();
57
  }
58
  } else {
59
- if ( !preg_match( '/\[learn_press_login_form\s?(.*)\]/', $post->post_content ) ) {
60
- if ( !empty( $_REQUEST['redirect_to'] ) ) {
61
  $redirect = $_REQUEST['redirect_to'];
62
  } else {
63
  $redirect = '';
@@ -70,7 +70,7 @@ class LP_Shortcodes {
70
  parse_str( $wp->matched_query, $query );
71
  if ( empty( $query['view'] ) ) {
72
  $redirect = learn_press_user_profile_link( $wp->query_vars['user'] );
73
- if ( !empty( $redirect ) ) {
74
  wp_redirect( $redirect );
75
  die();
76
  }
@@ -81,37 +81,38 @@ class LP_Shortcodes {
81
  $endpoints = learn_press_get_profile_endpoints();
82
  foreach ( $query as $k => $v ) {
83
  if ( ( $k == 'view' ) ) {
84
- if ( !$v ) {
85
  $v = reset( $endpoints );
86
  }
87
- if ( !in_array( $v, $endpoints) ) {
88
  learn_press_is_404();
89
  }
90
  }
91
- if ( !empty( $v ) ) {
92
- $wp->query_vars[$k] = $v;
93
  }
94
  }
95
  }
96
- if ( !preg_match( '/\[learn_press_profile\s?(.*)\]/', $post->post_content ) ) {
97
  $post->post_content .= '[learn_press_profile]';
98
  }
99
 
100
  }
101
 
102
  } elseif ( $page_id == learn_press_get_page_id( 'become_a_teacher' ) ) {
103
- if ( !preg_match( '/\[learn_press_become_teacher_form\s?(.*)\]/', $post->post_content ) ) {
104
  $post->post_content .= '[learn_press_become_teacher_form]';
105
  }
106
  }
107
 
108
  do_action( 'learn_press_auto_shortcode', $post, $template );
109
  }
 
110
  return $template;
111
  }
112
 
113
  public static function _login_form_bottom( $content, $args ) {
114
- if ( !( !empty( $args['context'] ) && $args['context'] == 'learn-press-login' ) ) {
115
  return;
116
  }
117
  }
@@ -120,6 +121,7 @@ class LP_Shortcodes {
120
  ob_start();
121
  learn_press_print_messages();
122
  $html = ob_get_clean();
 
123
  return '<div class="learnpress">' . $html . $content . '</div>';
124
  }
125
 
@@ -151,6 +153,7 @@ class LP_Shortcodes {
151
  learn_press_get_template( 'checkout/form.php', array( 'checkout' => LP()->checkout() ) );
152
  }
153
  }
 
154
  return self::wrapper_shortcode( ob_get_clean() );
155
  }
156
 
@@ -171,7 +174,7 @@ class LP_Shortcodes {
171
  $arr_orders = array( 'DESC', 'ASC' );
172
  $order = strtoupper( $order );
173
 
174
- if ( !in_array( $order_by, $arr_orders_by ) || !in_array( 'post_' . $order_by, $arr_orders_by ) ) {
175
  $order_by = 'post_date';
176
  } else {
177
  if ( $order_by !== 'comment_count' ) {
@@ -179,10 +182,10 @@ class LP_Shortcodes {
179
  }
180
  }
181
 
182
- if ( !in_array( $order, $arr_orders ) ) {
183
  $order = 'DESC';
184
  }
185
- if ( !absint( $limit ) ) {
186
  $limit = 10;
187
  }
188
 
@@ -228,7 +231,7 @@ class LP_Shortcodes {
228
  $arr_orders = array( 'DESC', 'ASC' );
229
  $order = strtoupper( $order );
230
 
231
- if ( !in_array( $order_by, $arr_orders_by ) || !in_array( 'post_' . $order_by, $arr_orders_by ) ) {
232
  $order_by = 'post_date';
233
  } else {
234
  if ( $order_by !== 'comment_count' ) {
@@ -236,10 +239,10 @@ class LP_Shortcodes {
236
  }
237
  }
238
 
239
- if ( !in_array( $order, $arr_orders ) ) {
240
  $order = 'DESC';
241
  }
242
- if ( !absint( $limit ) ) {
243
  $limit = 10;
244
  }
245
 
@@ -282,10 +285,10 @@ class LP_Shortcodes {
282
  $arr_orders = array( 'DESC', 'ASC' );
283
  $order = strtoupper( $order );
284
 
285
- if ( !in_array( $order, $arr_orders ) ) {
286
  $order = 'DESC';
287
  }
288
- if ( !absint( $limit ) ) {
289
  $limit = 10;
290
  }
291
 
@@ -323,7 +326,7 @@ class LP_Shortcodes {
323
 
324
  public static function render_shortcode_archive( $lp_posts = array() ) {
325
  global $post;
326
- if ( !empty( $lp_posts ) ) {
327
  do_action( 'learn_press_before_courses_loop' );
328
 
329
  learn_press_begin_courses_loop();
@@ -350,13 +353,15 @@ class LP_Shortcodes {
350
 
351
  // Get the order
352
  $order_id = absint( $order_id );
353
- $order_key = !empty( $_GET['key'] ) ? $_GET['key'] : '';
354
 
355
  if ( $order_id > 0 && ( $order = learn_press_get_order( $order_id ) ) && $order->post->post_status != 'trash' ) {
356
- if ( $order->order_key != $order_key )
357
  unset( $order );
 
358
  } else {
359
  learn_press_display_message( __( 'Invalid order!', 'learnpress' ), 'error' );
 
360
  return;
361
  }
362
 
@@ -375,7 +380,7 @@ class LP_Shortcodes {
375
  public static function confirm_order( $atts = null ) {
376
  $atts = shortcode_atts(
377
  array(
378
- 'order_id' => !empty( $_REQUEST['order_id'] ) ? intval( $_REQUEST['order_id'] ) : 0
379
  ),
380
  $atts
381
  );
@@ -406,7 +411,7 @@ class LP_Shortcodes {
406
  $message = '';
407
  $code = 0;
408
 
409
- if ( !is_user_logged_in() ) {
410
  $message = __( "Please login to fill in this form.", 'learnpress' );
411
  $code = 1;
412
  } elseif ( in_array( LP_TEACHER_ROLE, $user->user->roles ) ) {
@@ -420,7 +425,7 @@ class LP_Shortcodes {
420
  $code = 4;
421
  }
422
 
423
- if ( !apply_filters( 'learn_press_become_a_teacher_display_form', true, $code, $message ) ) {
424
  return;
425
  }
426
 
@@ -465,7 +470,7 @@ class LP_Shortcodes {
465
  $output = '';
466
 
467
  ob_start();
468
- if ( !$user ) {
469
  if ( empty( $wp_query->query['user'] ) ) {
470
 
471
  } else {
@@ -475,22 +480,22 @@ class LP_Shortcodes {
475
  } else {
476
  $user = LP_User_Factory::get_user( $user->ID );
477
  $tabs = learn_press_user_profile_tabs( $user );
478
- if ( !empty( $wp->query_vars['view'] ) ) {
479
  $current = $wp->query_vars['view'];
480
  } else {
481
  $current = '';
482
  }
483
- if ( empty( $tabs[$current] ) && empty( $wp->query_vars['view'] ) ) {
484
  $tab_keys = array_keys( $tabs );
485
  $current = reset( $tab_keys );
486
  }
487
  $_REQUEST['tab'] = $current;
488
  $_POST['tab'] = $current;
489
  $_GET['tab'] = $current;
490
- if ( !learn_press_current_user_can_view_profile_section( $current, $user ) ) {
491
  learn_press_get_template( 'profile/private-area.php' );
492
  } else {
493
- if ( !empty( $tabs ) && !empty( $tabs[$current] ) ) :
494
  learn_press_get_template( 'profile/index.php',
495
  array(
496
  'user' => $user,
@@ -501,11 +506,11 @@ class LP_Shortcodes {
501
  else:
502
  if ( $wp->query_vars['view'] == LP()->settings->get( 'profile_endpoints.profile-order-details' ) ) {
503
  $order_id = 0;
504
- if ( !empty( $wp->query_vars['id'] ) ) {
505
  $order_id = $wp->query_vars['id'];
506
  }
507
  $order = learn_press_get_order( $order_id );
508
- if ( !$order ) {
509
  learn_press_display_message( __( 'Invalid order!', 'learnpress' ), 'error' );
510
  } else {
511
  learn_press_get_template( 'profile/order-details.php',
@@ -532,18 +537,20 @@ class LP_Shortcodes {
532
  $atts
533
  );
534
  add_filter( 'login_form_bottom', array( __CLASS__, 'login_form_bottom' ), 10, 2 );
 
535
  return self::wrapper_shortcode( learn_press_get_template_content( 'profile/login-form.php', $atts ) );
536
  }
537
 
538
- public static function login_form_bottom ($html, $args) {
539
  ob_start();
540
  ?>
541
- <p>
542
- <a href="<?php echo wp_lostpassword_url(); ?>"><?php _e( 'Forgot password?', 'learnpress' ); ?></a>
543
- &nbsp;|&nbsp;
544
- <a href="<?php echo wp_registration_url(); ?>"><?php _e( 'Create new account', 'learnpress' ); ?></a>
545
- </p>
546
  <?php $html .= ob_get_clean();
 
547
  return $html;
548
  }
549
  }
5
  * @version 1.0
6
  */
7
 
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
  exit;
10
  }
11
 
39
  public static function auto_shortcode( $template ) {
40
  if ( is_page() ) {
41
  global $post, $wp_query, $wp;
42
+ $page_id = ! empty( $wp_query->queried_object_id ) ?
43
  $wp_query->queried_object_id :
44
+ ( ! empty( $wp_query->query_vars['page_id'] ) ? $wp_query->query_vars['page_id'] : - 1 );
45
  if ( $page_id == learn_press_get_page_id( 'checkout' ) ) {
46
+ if ( ! preg_match( '/\[learn_press_checkout\s?(.*)\]/', $post->post_content ) ) {
47
  $post->post_content .= '[learn_press_checkout]';
48
  }
49
  } elseif ( $page_id == learn_press_get_page_id( 'profile' ) ) {
50
  if ( empty( $wp->query_vars['user'] ) ) {
51
  $current_user = wp_get_current_user();
52
+ if ( ! empty( $current_user->user_login ) ) {
53
  $redirect = learn_press_get_endpoint_url( '', $current_user->user_login, learn_press_get_page_link( 'profile' ) );
54
+ if ( $redirect && ! learn_press_is_current_url( $redirect ) ) {
55
  wp_redirect( $redirect );
56
  die();
57
  }
58
  } else {
59
+ if ( ! preg_match( '/\[learn_press_login_form\s?(.*)\]/', $post->post_content ) ) {
60
+ if ( ! empty( $_REQUEST['redirect_to'] ) ) {
61
  $redirect = $_REQUEST['redirect_to'];
62
  } else {
63
  $redirect = '';
70
  parse_str( $wp->matched_query, $query );
71
  if ( empty( $query['view'] ) ) {
72
  $redirect = learn_press_user_profile_link( $wp->query_vars['user'] );
73
+ if ( ! empty( $redirect ) ) {
74
  wp_redirect( $redirect );
75
  die();
76
  }
81
  $endpoints = learn_press_get_profile_endpoints();
82
  foreach ( $query as $k => $v ) {
83
  if ( ( $k == 'view' ) ) {
84
+ if ( ! $v ) {
85
  $v = reset( $endpoints );
86
  }
87
+ if ( ! in_array( $v, $endpoints ) ) {
88
  learn_press_is_404();
89
  }
90
  }
91
+ if ( ! empty( $v ) ) {
92
+ $wp->query_vars[ $k ] = $v;
93
  }
94
  }
95
  }
96
+ if ( ! preg_match( '/\[learn_press_profile\s?(.*)\]/', $post->post_content ) ) {
97
  $post->post_content .= '[learn_press_profile]';
98
  }
99
 
100
  }
101
 
102
  } elseif ( $page_id == learn_press_get_page_id( 'become_a_teacher' ) ) {
103
+ if ( ! preg_match( '/\[learn_press_become_teacher_form\s?(.*)\]/', $post->post_content ) ) {
104
  $post->post_content .= '[learn_press_become_teacher_form]';
105
  }
106
  }
107
 
108
  do_action( 'learn_press_auto_shortcode', $post, $template );
109
  }
110
+
111
  return $template;
112
  }
113
 
114
  public static function _login_form_bottom( $content, $args ) {
115
+ if ( ! ( ! empty( $args['context'] ) && $args['context'] == 'learn-press-login' ) ) {
116
  return;
117
  }
118
  }
121
  ob_start();
122
  learn_press_print_messages();
123
  $html = ob_get_clean();
124
+
125
  return '<div class="learnpress">' . $html . $content . '</div>';
126
  }
127
 
153
  learn_press_get_template( 'checkout/form.php', array( 'checkout' => LP()->checkout() ) );
154
  }
155
  }
156
+
157
  return self::wrapper_shortcode( ob_get_clean() );
158
  }
159
 
174
  $arr_orders = array( 'DESC', 'ASC' );
175
  $order = strtoupper( $order );
176
 
177
+ if ( ! in_array( $order_by, $arr_orders_by ) || ! in_array( 'post_' . $order_by, $arr_orders_by ) ) {
178
  $order_by = 'post_date';
179
  } else {
180
  if ( $order_by !== 'comment_count' ) {
182
  }
183
  }
184
 
185
+ if ( ! in_array( $order, $arr_orders ) ) {
186
  $order = 'DESC';
187
  }
188
+ if ( ! absint( $limit ) ) {
189
  $limit = 10;
190
  }
191
 
231
  $arr_orders = array( 'DESC', 'ASC' );
232
  $order = strtoupper( $order );
233
 
234
+ if ( ! in_array( $order_by, $arr_orders_by ) || ! in_array( 'post_' . $order_by, $arr_orders_by ) ) {
235
  $order_by = 'post_date';
236
  } else {
237
  if ( $order_by !== 'comment_count' ) {
239
  }
240
  }
241
 
242
+ if ( ! in_array( $order, $arr_orders ) ) {
243
  $order = 'DESC';
244
  }
245
+ if ( ! absint( $limit ) ) {
246
  $limit = 10;
247
  }
248
 
285
  $arr_orders = array( 'DESC', 'ASC' );
286
  $order = strtoupper( $order );
287
 
288
+ if ( ! in_array( $order, $arr_orders ) ) {
289
  $order = 'DESC';
290
  }
291
+ if ( ! absint( $limit ) ) {
292
  $limit = 10;
293
  }
294
 
326
 
327
  public static function render_shortcode_archive( $lp_posts = array() ) {
328
  global $post;
329
+ if ( ! empty( $lp_posts ) ) {
330
  do_action( 'learn_press_before_courses_loop' );
331
 
332
  learn_press_begin_courses_loop();
353
 
354
  // Get the order
355
  $order_id = absint( $order_id );
356
+ $order_key = ! empty( $_GET['key'] ) ? $_GET['key'] : '';
357
 
358
  if ( $order_id > 0 && ( $order = learn_press_get_order( $order_id ) ) && $order->post->post_status != 'trash' ) {
359
+ if ( $order->order_key != $order_key ) {
360
  unset( $order );
361
+ }
362
  } else {
363
  learn_press_display_message( __( 'Invalid order!', 'learnpress' ), 'error' );
364
+
365
  return;
366
  }
367
 
380
  public static function confirm_order( $atts = null ) {
381
  $atts = shortcode_atts(
382
  array(
383
+ 'order_id' => ! empty( $_REQUEST['order_id'] ) ? intval( $_REQUEST['order_id'] ) : 0
384
  ),
385
  $atts
386
  );
411
  $message = '';
412
  $code = 0;
413
 
414
+ if ( ! is_user_logged_in() ) {
415
  $message = __( "Please login to fill in this form.", 'learnpress' );
416
  $code = 1;
417
  } elseif ( in_array( LP_TEACHER_ROLE, $user->user->roles ) ) {
425
  $code = 4;
426
  }
427
 
428
+ if ( ! apply_filters( 'learn_press_become_a_teacher_display_form', true, $code, $message ) ) {
429
  return;
430
  }
431
 
470
  $output = '';
471
 
472
  ob_start();
473
+ if ( ! $user ) {
474
  if ( empty( $wp_query->query['user'] ) ) {
475
 
476
  } else {
480
  } else {
481
  $user = LP_User_Factory::get_user( $user->ID );
482
  $tabs = learn_press_user_profile_tabs( $user );
483
+ if ( ! empty( $wp->query_vars['view'] ) ) {
484
  $current = $wp->query_vars['view'];
485
  } else {
486
  $current = '';
487
  }
488
+ if ( empty( $tabs[ $current ] ) && empty( $wp->query_vars['view'] ) ) {
489
  $tab_keys = array_keys( $tabs );
490
  $current = reset( $tab_keys );
491
  }
492
  $_REQUEST['tab'] = $current;
493
  $_POST['tab'] = $current;
494
  $_GET['tab'] = $current;
495
+ if ( ! learn_press_current_user_can_view_profile_section( $current, $user ) ) {
496
  learn_press_get_template( 'profile/private-area.php' );
497
  } else {
498
+ if ( ! empty( $tabs ) && ! empty( $tabs[ $current ] ) ) :
499
  learn_press_get_template( 'profile/index.php',
500
  array(
501
  'user' => $user,
506
  else:
507
  if ( $wp->query_vars['view'] == LP()->settings->get( 'profile_endpoints.profile-order-details' ) ) {
508
  $order_id = 0;
509
+ if ( ! empty( $wp->query_vars['id'] ) ) {
510
  $order_id = $wp->query_vars['id'];
511
  }
512
  $order = learn_press_get_order( $order_id );
513
+ if ( ! $order ) {
514
  learn_press_display_message( __( 'Invalid order!', 'learnpress' ), 'error' );
515
  } else {
516
  learn_press_get_template( 'profile/order-details.php',
537
  $atts
538
  );
539
  add_filter( 'login_form_bottom', array( __CLASS__, 'login_form_bottom' ), 10, 2 );
540
+
541
  return self::wrapper_shortcode( learn_press_get_template_content( 'profile/login-form.php', $atts ) );
542
  }
543
 
544
+ public static function login_form_bottom( $html, $args ) {
545
  ob_start();
546
  ?>
547
+ <p>
548
+ <a href="<?php echo wp_lostpassword_url(); ?>"><?php _e( 'Forgot password?', 'learnpress' ); ?></a>
549
+ &nbsp;|&nbsp;
550
+ <a href="<?php echo wp_registration_url(); ?>"><?php _e( 'Create new account', 'learnpress' ); ?></a>
551
+ </p>
552
  <?php $html .= ob_get_clean();
553
+
554
  return $html;
555
  }
556
  }
inc/course/abstract-lp-course.php CHANGED
@@ -67,8 +67,8 @@ abstract class LP_Abstract_Course {
67
  $this->id = absint( $course->ID );
68
  $this->post = get_post( $course->ID );
69
  }
70
- if ( empty( self::$_lessons[$this->id] ) ) {
71
- self::$_lessons[$this->id] = array();
72
  }
73
  if ( $user ) {
74
  $this->init_for_user( $user );
@@ -105,7 +105,7 @@ abstract class LP_Abstract_Course {
105
  $value = false;
106
  switch ( $key ) {
107
  case 'current_item':
108
- if ( !empty( LP()->global['course-item'] ) ) {
109
  $value = LP()->global['course-item'];
110
  }
111
 
@@ -123,7 +123,7 @@ abstract class LP_Abstract_Course {
123
  $value = get_post_meta( $this->id, '_lp_' . $key, true );
124
  $duration = learn_press_get_course_duration_support();
125
  $duration_keys = array_keys( $duration );
126
- if ( !preg_match_all( '!([0-9]+)\s(' . join( '|', $duration_keys ) . ')!', $value, $matches ) ) {
127
  $a1 = absint( $value );
128
  $a2 = end( $duration_keys );
129
  $value = $a1 . ' ' . $a2;
@@ -145,11 +145,12 @@ abstract class LP_Abstract_Course {
145
  }
146
 
147
  }
148
- if ( !empty( $value ) ) {
149
  $this->$key = $value;
150
  }
151
  }
152
- return !empty( $this->$key ) ? $this->$key : null;
 
153
  }
154
 
155
  /**
@@ -173,7 +174,7 @@ abstract class LP_Abstract_Course {
173
  } elseif ( ( $parent_id = wp_get_post_parent_id( $this->id ) ) && has_post_thumbnail( $parent_id ) ) {
174
  $image = get_the_post_thumbnail( $parent_id, $size, $attr );
175
  }
176
- if ( !$image ) {
177
  if ( 'course_thumbnail' == $size ) {
178
  $image = LP()->image( 'placeholder-400x250' );
179
  } else {
@@ -181,6 +182,7 @@ abstract class LP_Abstract_Course {
181
  }
182
  $image = sprintf( '<img src="%s" %s />', $image, '' );
183
  }
 
184
  return apply_filters( 'learn_press_course_image', $image, $this->id, $size, $attr );
185
  }
186
 
@@ -194,16 +196,17 @@ abstract class LP_Abstract_Course {
194
 
195
  public function get_request_item( $field = 'id' ) {
196
  $return = LP()->global['course-item'];
197
- if ( !empty( $_REQUEST['course-item'] ) ) {
198
  $type = $_REQUEST['course-item'];
199
  if ( $field == 'type' ) {
200
  $return = $type;
201
  } elseif ( $field == 'id' ) {
202
- $return = !empty( $_REQUEST[$type . '_id'] ) ? $_REQUEST[$type . '_id'] : 0;
203
  } elseif ( $field == 'name' ) {
204
- $return = !empty( $_REQUEST[$type] ) ? $_REQUEST[$type] : false;
205
  }
206
  }
 
207
  return $return;
208
  }
209
 
@@ -224,16 +227,20 @@ abstract class LP_Abstract_Course {
224
  $enrollable = true;
225
 
226
  // Products must exist of course
227
- if ( !$this->exists() ) {
228
  $enrollable = false;
229
  // Check the product is published
230
- } elseif ( $this->post->post_status !== 'publish' && !current_user_can( 'edit_post', $this->id ) ) {
231
  $enrollable = false;
232
  }
233
 
234
  return apply_filters( 'learn_press_is_enrollable', $enrollable, $this );
235
  }
236
 
 
 
 
 
237
  /**
238
  * Course is exists if the post is not empty
239
  *
@@ -279,6 +286,7 @@ abstract class LP_Abstract_Course {
279
  FROM {$wpdb->posts}
280
  WHERE ID IN(" . join( ',', $ids ) . ")
281
  " );
 
282
  return $posts;
283
  }
284
 
@@ -299,18 +307,19 @@ abstract class LP_Abstract_Course {
299
  * @return mixed
300
  */
301
  public function get_curriculum( $section_id = 0, $force = false ) {
302
- if ( !$this->id ) {
303
  return false;
304
  }
305
  $curriculum = _learn_press_get_course_curriculum( $this->id, $force );
306
  $return = false;
307
  if ( $section_id ) {
308
- if ( !empty( $curriculum[$section_id] ) ) {
309
- $return = $curriculum[$section_id];
310
  }
311
  } else {
312
  $return = $curriculum;
313
  }
 
314
  return apply_filters( 'learn_press_course_curriculum', $return, $this->id, $section_id );
315
  }
316
 
@@ -337,6 +346,7 @@ abstract class LP_Abstract_Course {
337
  $enrolled = $real_enrolled;
338
  }
339
  }
 
340
  return apply_filters( 'learn_press_count_users_enrolled', $enrolled, $this );
341
  }
342
 
@@ -349,6 +359,7 @@ abstract class LP_Abstract_Course {
349
  */
350
  public function get_users_enrolled( $force = false ) {
351
  $this->_count_users = LP_Cache::get_enrolled_courses( $this->id );
 
352
  return $this->_count_users;
353
  /*
354
  if ( ( $this->_count_users === null && !array_key_exists( $this->id, self::$course_users ) ) || $force ) {
@@ -387,6 +398,7 @@ abstract class LP_Abstract_Course {
387
  else:
388
  $output = apply_filters( 'learn_press_no_student_enrolled_html', __( 'No student enrolled', 'learnpress' ), $this );
389
  endif;
 
390
  return $output;
391
  }
392
 
@@ -396,6 +408,7 @@ abstract class LP_Abstract_Course {
396
  if ( $user_data ) {
397
  $author_name = $user_data->display_name;
398
  }
 
399
  return apply_filters( 'learn_press_course_instructor', $author_name, $this->id );
400
  }
401
 
@@ -406,14 +419,16 @@ abstract class LP_Abstract_Course {
406
  learn_press_user_profile_link( $this->post->post_author ),
407
  $instructor
408
  );
 
409
  return apply_filters( 'learn_press_course_instructor_html', $html, $this->post->post_author, $this->id );
410
  }
411
 
412
  public function get_course_info( $user_id = null ) {
413
- if ( !$user_id ) {
414
  $user_id = get_current_user_id();
415
  }
416
  $user = learn_press_get_user( $user_id );
 
417
  return $user->get_course_info( $this->id );
418
  }
419
 
@@ -424,6 +439,7 @@ abstract class LP_Abstract_Course {
424
  */
425
  public function is_free() {
426
  $is_free = ( 'no' == $this->payment || ( 0 >= $this->get_price() ) );
 
427
  return apply_filters( 'learn_press_is_free_course', $is_free, $this );
428
  }
429
 
@@ -433,11 +449,12 @@ abstract class LP_Abstract_Course {
433
  */
434
  public function get_origin_price() {
435
  $price = $this->price;
436
- if ( !$price || 'yes' != $this->payment ) {
437
  $price = 0;
438
  } else {
439
  $price = floatval( $price );
440
  }
 
441
  return $price;
442
  }
443
 
@@ -455,10 +472,11 @@ abstract class LP_Abstract_Course {
455
  $now = current_time( 'timestamp' );
456
  $end = strtotime( $end_date );
457
  $start = strtotime( $start_date );
458
- if ( ( $now >= $start || !$start_date ) && ( $now <= $end || !$end_date ) ) {
459
  $res = $sale_price;
460
  }
461
  }
 
462
  return $res;
463
  }
464
 
@@ -473,7 +491,7 @@ abstract class LP_Abstract_Course {
473
  */
474
  public function get_price() {
475
  $price = $this->price;
476
- if ( !$price || 'yes' != $this->payment ) {
477
  $price = 0;
478
  } else {
479
  $price = floatval( $price );
@@ -482,6 +500,7 @@ abstract class LP_Abstract_Course {
482
  $price = $sale_price;
483
  }
484
  }
 
485
  return apply_filters( 'learn_press_course_price', $price, $this );
486
  }
487
 
@@ -499,6 +518,7 @@ abstract class LP_Abstract_Course {
499
  $price = learn_press_format_price( $price, true );
500
  $price_html = apply_filters( 'learn_press_course_price_html', $price, $this );
501
  }
 
502
  return $price_html;
503
  }
504
 
@@ -515,6 +535,7 @@ abstract class LP_Abstract_Course {
515
  $origin_price = learn_press_format_price( $origin_price, true );
516
  $origin_price_html = apply_filters( 'learn_press_course_origin_price_html', $origin_price, $this );
517
  }
 
518
  //}
519
  return $origin_price_html;
520
  }
@@ -526,10 +547,14 @@ abstract class LP_Abstract_Course {
526
  * @return array list enrolled students
527
  */
528
  public function get_students_list( $force = false, $limit = - 1 ) {
529
- if ( !$this->exists() ) return null;
 
 
530
 
531
  global $wpdb;
532
- if ( $limit < 0 ) $limit = PHP_INT_MAX;
 
 
533
  if ( $this->_students_list === null || $force ) {
534
  $query = $wpdb->prepare( "
535
  SELECT DISTINCT u.*
@@ -541,6 +566,7 @@ abstract class LP_Abstract_Course {
541
  ", $this->id, LP_COURSE_CPT, $limit );
542
  $this->_students_list = $wpdb->get_results( $query );
543
  }
 
544
  return $this->_students_list;
545
  }
546
 
@@ -560,7 +586,8 @@ abstract class LP_Abstract_Course {
560
  'field' => $field
561
  )
562
  );
563
- $quizzes = !empty( $items['quizzes'] ) ? $items['quizzes'] : false;
 
564
  return apply_filters( 'learn_press_course_quizzes', $quizzes, $this );
565
  }
566
 
@@ -586,7 +613,8 @@ abstract class LP_Abstract_Course {
586
  $args
587
  );
588
  $items = $this->get_curriculum_items( $curriculum_args );
589
- $lessons = !empty( $items['lessons'] ) ? $items['lessons'] : false;
 
590
  return apply_filters( 'learn_press_course_lessons', $lessons, $this );
591
  }
592
 
@@ -626,10 +654,10 @@ abstract class LP_Abstract_Course {
626
  // overwrite default values with params passed
627
  extract( $args );
628
  $items = array();
629
- if ( !$this->_curriculum_items || $force ) {
630
  $curriculum = $this->get_curriculum( null, $force );
631
  $index = 0;
632
- if ( !empty( $field ) ) {
633
  if ( is_string( $field ) ) {
634
  $field = explode( '![\s]+!', $field );
635
  }
@@ -637,7 +665,7 @@ abstract class LP_Abstract_Course {
637
  } else {
638
  $field = false;
639
  }
640
- if ( !empty( $field_map ) ) {
641
  if ( is_string( $field_map ) ) {
642
  $field_map = explode( '![\s]+!', $field_map );
643
  }
@@ -645,7 +673,7 @@ abstract class LP_Abstract_Course {
645
  } else {
646
  $field_map = false;
647
  }
648
- if ( !empty( $field_format ) ) {
649
  if ( is_string( $field_format ) ) {
650
  $field_format = explode( '![\s]+!', $field_format );
651
  }
@@ -710,24 +738,26 @@ abstract class LP_Abstract_Course {
710
  } else {
711
  // combine lessons and quizzes as it should be in curriculum
712
  for ( $i = 0, $n = sizeof( $quizzes ) + sizeof( $lessons ); $i < $n; $i ++ ) {
713
- if ( !empty( $quizzes[$i] ) ) {
714
- $items[] = $quizzes[$i];
715
- } elseif ( !empty( $lessons[$i] ) ) {
716
- $items[] = $lessons[$i];
717
  }
718
  }
719
  }
720
  }
 
721
  return apply_filters( 'learn_press_get_course_items', $items, $this );
722
  }
723
 
724
  public function is_viewing( $content = '' ) {
725
 
726
- $item_type = !empty( $_REQUEST['course-item'] ) ? $_REQUEST['course-item'] : '';
727
  $viewing = apply_filters( 'learn_press_course_is_viewing', $item_type ? $item_type : 'course' );
728
  if ( $content ) {
729
  return $content == $viewing;
730
  }
 
731
  return $viewing;
732
  }
733
 
@@ -741,6 +771,7 @@ abstract class LP_Abstract_Course {
741
  $return = $item->ID;
742
  }
743
  }
 
744
  return apply_filters( 'learn_press_viewing_course_item', $return, $item_id, $this->id );
745
  }
746
 
@@ -754,6 +785,7 @@ abstract class LP_Abstract_Course {
754
  }*/
755
  $current_item = $this->current_item;
756
  $view_id = $current_item ? $current_item->ID : 0;
 
757
  return apply_filters( 'learn_press_is_current_course_item', $view_id == $item_id, $item_id, $view_id, $this->id );
758
  }
759
 
@@ -797,37 +829,43 @@ abstract class LP_Abstract_Course {
797
  }
798
 
799
  /**
800
- * Return true if this course can be purchaseable
801
  *
802
  * @return mixed
803
  */
804
  public function is_purchasable() {
805
  // TODO: needs to check more criteria, currently only check if this course is required enrollment
806
- $is_purchasable = $this->is_required_enroll() && $this->post->post_status == 'publish';
807
- if ( $is_purchasable ) {
808
- $max_allowed = $this->max_students;
809
- if ( $max_allowed > 0 ) {
810
- $count_in_order = $this->count_in_order( array( 'completed', 'processing' ) );
811
- $is_purchasable = $is_purchasable && ( $count_in_order < $max_allowed );
812
- }
813
- }
814
  return apply_filters( 'learn_press_item_is_purchasable', $is_purchasable, $this->id );
815
  }
816
 
 
 
 
 
 
 
 
 
 
 
 
 
817
  public function count_in_order( $statuses = 'completed' ) {
818
  global $wpdb;
819
  static $data = array();
820
  settype( $statuses, 'array' );
821
  foreach ( $statuses as $k => $v ) {
822
- if ( !preg_match( '/^lp-/', $v ) ) {
823
- $statuses[$k] = 'lp-' . $v;
824
  }
825
  }
826
  sort( $statuses );
827
  $key = md5( serialize( $statuses ) );
828
- if ( !array_key_exists( $key, $data ) ) {
829
- $in_clause = join( ',', array_fill( 0, sizeof( $statuses ), '%s' ) );
830
- $query = $wpdb->prepare( "
831
  SELECT count(oim.meta_id)
832
  FROM {$wpdb->learnpress_order_itemmeta} oim
833
  INNER JOIN {$wpdb->learnpress_order_items} oi ON oi.order_item_id = oim.learnpress_order_item_id
@@ -837,9 +875,10 @@ abstract class LP_Abstract_Course {
837
  WHERE o.post_type = %s
838
  AND o.post_status IN ($in_clause)
839
  ", array_merge( array( '_course_id', $this->id, 'lp_order' ), $statuses ) );
840
- $data[$key] = $wpdb->get_var( $query );
841
  }
842
- return $data[$key];
 
843
  }
844
 
845
  public function need_payment() {
@@ -848,11 +887,11 @@ abstract class LP_Abstract_Course {
848
 
849
  public function has_item( $item_id ) {
850
  static $items = array();
851
- if ( empty( $items[$this->id] ) ) {
852
- $items[$this->id] = $this->get_curriculum_items( array( 'field' => 'ID'/*, 'force' => true */ ) );
853
  }
854
 
855
- return in_array( $item_id, (array) $items[$this->id] );
856
  }
857
 
858
  public function can_view_item( $item_id ) {
@@ -864,10 +903,10 @@ abstract class LP_Abstract_Course {
864
  public function get_item( $thing = '' ) {
865
  $return = false;
866
  $curriculum = $this->get_curriculum_items();
867
- if ( !$curriculum ) {
868
  return $return;
869
  }
870
- if ( !$thing ) {
871
  return $return;
872
  }
873
  if ( $thing ) {
@@ -887,20 +926,21 @@ abstract class LP_Abstract_Course {
887
  }
888
  }
889
  }
 
890
  return apply_filters( 'learn_press_course_item', $return, $item, $this->id );
891
  }
892
 
893
  public function get_item_link( $item_id ) {
894
  static $item_links = array();
895
  $key = $this->id . '-' . $item_id;
896
- if ( empty( $item_links[$key] ) ) {
897
- if ( !$this->has( 'item', $item_id ) ) {
898
  return false;
899
  }
900
  $permalink = get_the_permalink( $item_id );
901
  $post_types = get_post_types( null, 'objects' );
902
  $item_type = get_post_type( $item_id );
903
- $has_query = false;
904
  switch ( $item_type ) {
905
  case 'lp_lesson':
906
  case 'lp_quiz':
@@ -917,7 +957,7 @@ abstract class LP_Abstract_Course {
917
  }
918
  }
919
  if ( empty( $slug ) ) {
920
- $slug = $post_types[$item_type]->rewrite['slug'];
921
  }
922
  $slug = sanitize_title_with_dashes( $slug );
923
  $prefix = preg_replace( '!^/!', '', trailingslashit( $slug ) );
@@ -955,8 +995,8 @@ abstract class LP_Abstract_Course {
955
  $items = (array) $this->get_curriculum_items( array( 'field' => 'ID' ) );
956
  } else {
957
  $items = (array) $this->get_curriculum_items( array( 'field' => 'ID', 'group' => true ) );
958
- if ( !empty( $items[$items_types] ) ) {
959
- $items = array_values( $items[$items_types] );
960
  } else {
961
  $items = array();
962
  }
@@ -966,7 +1006,7 @@ abstract class LP_Abstract_Course {
966
  return false;
967
  }
968
  $current_item = $args['current_item'] ? $args['current_item'] : ( $this->current_item ? $this->current_item->id : 0 );
969
- if ( !$current_item ) {
970
  $current_item = reset( $items );
971
  }
972
  $next_item = false;
@@ -978,13 +1018,13 @@ abstract class LP_Abstract_Course {
978
  if ( $args['viewable'] !== null ) {
979
  $user = learn_press_get_current_user();
980
  for ( $i = $pos + 1; $i < $items_len; $i ++ ) {
981
- if ( !!$user->can( 'view-item', $items[$i] ) === $args['viewable'] ) {
982
- $next_item = $items[$i];
983
  break;
984
  }
985
  }
986
  } else {
987
- $next_item = $items[$pos + 1];
988
  }
989
  }
990
  } else {
@@ -994,19 +1034,20 @@ abstract class LP_Abstract_Course {
994
  if ( $args['viewable'] !== null ) {
995
  $user = learn_press_get_current_user();
996
  for ( $i = $pos - 1; $i >= 0; $i -- ) {
997
- if ( !!$user->can( 'view-item', $items[$i] ) === $args['viewable'] ) {
998
- $next_item = $items[$i];
999
  break;
1000
  }
1001
  }
1002
  } else {
1003
- $next_item = $items[$pos - 1];
1004
  }
1005
  }
1006
  }
1007
  } else {
1008
- $next_item = $args['dir'] == 'next' ? $items[1] : $items[$items_len - 1];
1009
  }
 
1010
  return apply_filters( 'learn_press_course_' . $args['dir'] . '_item', $next_item, $current_item, $this );
1011
  }
1012
 
@@ -1028,6 +1069,7 @@ abstract class LP_Abstract_Course {
1028
 
1029
  return ob_get_clean();
1030
  }
 
1031
  return false;
1032
  }
1033
 
@@ -1042,9 +1084,14 @@ abstract class LP_Abstract_Course {
1042
  );
1043
  if ( $next_item = $this->get_next_item( $args ) ) {
1044
  ob_start();
1045
- learn_press_get_template( 'content-lesson/prev-button.php', array( 'item' => $next_item, 'course' => $this ) );
 
 
 
 
1046
  return ob_get_clean();
1047
  }
 
1048
  return false;
1049
  }
1050
 
@@ -1055,12 +1102,12 @@ abstract class LP_Abstract_Course {
1055
  * @return mixed|null|void
1056
  */
1057
  public function get_course_result_html( $user_id = 0, $force = false ) {
1058
- if ( !$user_id ) {
1059
  $user_id = get_current_user_id();
1060
  }
1061
  $html = '';
1062
  $quizzes = $this->get_quizzes();
1063
- if ( ( $this->course_result == 'evaluate_lesson' ) || !$quizzes ) {
1064
 
1065
  $lessons = $this->get_lessons();
1066
  $total_items = sizeof( $quizzes ) + sizeof( $lessons );
@@ -1074,6 +1121,7 @@ abstract class LP_Abstract_Course {
1074
  $html = sprintf( __( '%d%% completed', 'learnpress' ), $this->_evaluate_course_by_quizzes( $user_id, $force ) * 100 );
1075
  }
1076
  }
 
1077
  return apply_filters( 'learn_press_course_result_html', $html, $this->id, $user_id );
1078
  }
1079
 
@@ -1084,6 +1132,7 @@ abstract class LP_Abstract_Course {
1084
  $completed_items = $this->count_completed_items( $user_id, $force, $type );
1085
  $result = round( $completed_items / sizeof( $items ) * 100 );
1086
  }
 
1087
  return apply_filters( 'learn_press_course_results_by_items', $result, $this->id, $user_id );
1088
  }
1089
 
@@ -1094,6 +1143,7 @@ abstract class LP_Abstract_Course {
1094
  $completed_items = $this->count_completed_items( $user_id, $force, 'lp_lesson' );
1095
  $result = round( $completed_items / sizeof( $lessons ) * 100 );
1096
  }
 
1097
  return apply_filters( 'learn_press_course_results_by_items', $result, $this->id, $user_id );
1098
  }
1099
 
@@ -1106,13 +1156,13 @@ abstract class LP_Abstract_Course {
1106
  * @return mixed|null|void
1107
  */
1108
  public function evaluate_course_results( $user_id = 0, $force = false ) {
1109
- if ( !$user_id ) {
1110
  $user_id = get_current_user_id();
1111
  }
1112
 
1113
  $quizzes = $this->get_quizzes();
1114
 
1115
- if ( ( 'evaluate_lesson' === $this->course_result ) || !$quizzes ) {
1116
  //$results = $this->_evaluate_course_by_items( $user_id, $force );
1117
  $results = $this->_evaluate_course_by_lesson( $user_id, $force );
1118
  } elseif ( 'evaluate_final_quiz' === $this->course_result ) {
@@ -1144,28 +1194,30 @@ abstract class LP_Abstract_Course {
1144
  $total_point = 0;
1145
  $quizzes_ids = array();
1146
  foreach ( $quizzes as $quiz ) {
1147
- if ( !$this->enable_evaluate_item( $quiz->ID, $user_id ) ) {
1148
  continue;
1149
  }
1150
- $quizzes_ids[] = $quiz->ID;
1151
- $results[$quiz->ID] = $user->get_quiz_results( $quiz->ID, $this->id, true );
1152
  if ( $quiz = wp_cache_get( $quiz->ID, 'posts' ) ) {
1153
  $total_point += isset( $quiz->mark ) ? absint( $quiz->mark ) : 0;
1154
  }
1155
- $achieved_point += is_object( $results[$quiz->ID] ) ? $results[$quiz->ID]->mark : 0;
1156
  }
1157
  if ( $total_point > 0 ) {
1158
  $result = ( $achieved_point / $total_point ) * 100;
1159
  } else {
1160
  $result = 0;
1161
  }
 
1162
  return apply_filters( 'learn_press_evaluate_course_by_quizzes_results', $result, $this->id, $user_id );
1163
  }
1164
 
1165
  public function enable_evaluate_item( $item_id, $user_id = 0 ) {
1166
- if ( !$user_id ) {
1167
  $user_id = get_current_user_id();
1168
  }
 
1169
  return apply_filters( 'learn_press_enable_evaluate_course_item', true, $item_id, $user_id, $this->id );
1170
  }
1171
 
@@ -1176,7 +1228,7 @@ abstract class LP_Abstract_Course {
1176
  $achieved_point = 0;
1177
  $total_point = 0;
1178
  foreach ( $quizzes as $_quiz ) {
1179
- if ( !$this->enable_evaluate_item( $_quiz->ID, $user_id ) ) {
1180
  continue;
1181
  }
1182
  $quiz = LP_Quiz::get_quiz( $_quiz->ID );
@@ -1197,7 +1249,7 @@ abstract class LP_Abstract_Course {
1197
  $quiz_passed = true;
1198
  }*/
1199
  if ( $grade == 'passed' ) {
1200
- $quiz_results = $user->get_quiz_results( $quiz->ID, $this->id, true );
1201
  $achieved_point += is_object( $quiz_results ) ? $quiz_results->mark : 0;
1202
  }
1203
  }
@@ -1206,15 +1258,16 @@ abstract class LP_Abstract_Course {
1206
  } else {
1207
  $result = 0;
1208
  }
 
1209
  return apply_filters( 'learn_press_evaluate_course_by_passed_quizzes_results', $result, $this->id, $user_id );
1210
  }
1211
 
1212
  public function _get_total_question( $quizzes_ids = array() ) {
1213
  global $wpdb;
1214
- if ( !empty( $quizzes_ids ) ) {
1215
  $format = array_fill( 0, sizeof( $quizzes_ids ), '%d' );
1216
  $args = array_merge( $quizzes_ids, array( 'publish', LP_QUESTION_CPT ) );
1217
- $sql = $wpdb->prepare( "
1218
  SELECT COUNT(*)
1219
  FROM {$wpdb->prefix}learnpress_quiz_questions lqq
1220
  INNER JOIN {$wpdb->posts} p ON lqq.question_id = p.ID
@@ -1224,8 +1277,10 @@ abstract class LP_Abstract_Course {
1224
  AND p.post_type = %s",
1225
  $args
1226
  );
 
1227
  return $wpdb->get_var( $sql );
1228
  }
 
1229
  return 0;
1230
  }
1231
 
@@ -1247,10 +1302,10 @@ abstract class LP_Abstract_Course {
1247
 
1248
  $completed_lessons = LP_Cache::get_completed_lessons( false, array() );
1249
 
1250
- if ( !array_key_exists( $key, $completed_lessons ) || $force ) {
1251
  global $wpdb;
1252
  $course_lessons = $this->get_lessons( array( 'field' => 'ID' ) );
1253
- if ( !$course_lessons ) {
1254
  return 0;
1255
  }
1256
  $query = $wpdb->prepare( "
@@ -1263,12 +1318,12 @@ abstract class LP_Abstract_Course {
1263
  AND ul.item_id IN(" . join( ",", $course_lessons ) . ")
1264
  ", $user_id, 'completed', $this->id );
1265
 
1266
- $completed_lessons[$key] = $wpdb->get_var( $query );
1267
 
1268
- LP_Cache::set_completed_lessons( $key, $completed_lessons[$key] );
1269
  }
1270
 
1271
- return apply_filters( 'learn_press_user_completed_lessons', $completed_lessons[$key], $this->id, $user_id );
1272
  }
1273
 
1274
  /**
@@ -1283,17 +1338,18 @@ abstract class LP_Abstract_Course {
1283
  //static $evaluate_course_by_lesson = array();
1284
  $evaluate_course_by_lesson = LP_Cache::get_evaluate_course_by_lesson( false, array() );
1285
  $key = $user_id . '-' . $this->id;
1286
- if ( !array_key_exists( $key, $evaluate_course_by_lesson ) || $force ) {
1287
  $course_lessons = $this->get_lessons( array( 'field' => 'ID' ) );
1288
  $completed_lessons = $this->get_completed_lessons( $user_id );
1289
  if ( $size = sizeof( $course_lessons ) ) {
1290
- $evaluate_course_by_lesson[$key] = min( $completed_lessons / sizeof( $course_lessons ), 1 ) * 100;
1291
  } else {
1292
- $evaluate_course_by_lesson[$key] = 0;
1293
  }
1294
- LP_Cache::set_evaluate_course_by_lesson( $key, $evaluate_course_by_lesson[$key] );
1295
  }
1296
- return apply_filters( 'learn_press_evaluation_course_lesson', $evaluate_course_by_lesson[$key], $this->id, $user_id );
 
1297
  }
1298
 
1299
  /**
@@ -1306,7 +1362,7 @@ abstract class LP_Abstract_Course {
1306
  * @return int|mixed|null|void
1307
  */
1308
  public function get_completed_items( $user_id = 0, $force = false, $type = '' ) {
1309
- if ( !$user_id ) {
1310
  $user_id = get_current_user_id();
1311
  }
1312
  _learn_press_parse_user_item_statuses( $user_id, $this->id );
@@ -1320,7 +1376,7 @@ abstract class LP_Abstract_Course {
1320
  continue;
1321
  }
1322
  $k = sprintf( '%d-%d-%d', $user_id, $this->id, $item_id );
1323
- if ( !empty( $item_statuses[$k] ) && $item_statuses[$k] == 'completed' ) {
1324
  if ( $this->enable_evaluate_item( $item_id, $user_id ) ) {
1325
  $completed_items[] = $item_id;
1326
  }
@@ -1328,6 +1384,7 @@ abstract class LP_Abstract_Course {
1328
  }
1329
  }
1330
  }
 
1331
  return apply_filters( 'learn_press_user_completed_items', $completed_items, $this->id, $user_id );
1332
  }
1333
 
@@ -1343,6 +1400,7 @@ abstract class LP_Abstract_Course {
1343
  if ( $items ) {
1344
  $count = sizeof( $items );
1345
  }
 
1346
  return apply_filters( 'learn_press_count_user_completed_items', $count, $this->id, $user_id );
1347
  }
1348
 
@@ -1368,21 +1426,23 @@ abstract class LP_Abstract_Course {
1368
  public function _evaluate_course_by_quiz( $user_id, $force = false ) {
1369
  global $wpdb;
1370
  $result = $this->evaluate_quiz( $this->final_quiz, $user_id );
 
1371
  return apply_filters( 'learn_press_evaluation_course_quiz', $result, $this->id, $user_id );
1372
  }
1373
 
1374
  public function evaluate_quiz( $quiz_id, $user_id, $force = false ) {
1375
  $user = learn_press_get_user( $user_id );
1376
  $results = $user->get_quiz_results( $quiz_id, $this->id );
1377
- if ( !$results ) {
1378
  $result = 0;
1379
  } else {
1380
- if ( $user->get_quiz_graduation( $quiz_id, $this->id ) == 'passed' && !empty( $results->mark_percent ) ) {
1381
  $result = absint( $results->mark_percent );
1382
  } else {
1383
  $result = 0;
1384
  }
1385
  }
 
1386
  return $result;
1387
  }
1388
 
@@ -1401,7 +1461,7 @@ abstract class LP_Abstract_Course {
1401
  if ( $quizzes ) {
1402
  $count = 0;
1403
  foreach ( $quizzes as $quiz ) {
1404
- if ( !$this->enable_evaluate_item( $quiz->ID, $user_id ) ) {
1405
  continue;
1406
  }
1407
  $result += $this->evaluate_quiz( $quiz->ID, $user_id, $force );
@@ -1411,6 +1471,7 @@ abstract class LP_Abstract_Course {
1411
  $result = round( $result / $count );
1412
  }
1413
  }
 
1414
  return apply_filters( 'learn_press_evaluation_course_quizzes', $result, $this->id, $user_id );
1415
  }
1416
 
@@ -1433,6 +1494,7 @@ abstract class LP_Abstract_Course {
1433
 
1434
  // restore post content
1435
  wp_reset_postdata();
 
1436
  return $content;
1437
  }
1438
 
@@ -1477,6 +1539,7 @@ abstract class LP_Abstract_Course {
1477
  $html = sprintf( __( 'This course will end within %s next', 'learnpress' ), $remain );
1478
  }
1479
  }
 
1480
  return $html;
1481
  }
1482
 
@@ -1490,17 +1553,18 @@ abstract class LP_Abstract_Course {
1490
  */
1491
  public function get_user_expired_time( $user_id = 0, $args = array() ) {
1492
 
1493
- if ( !$user_id ) {
1494
  $user_id = get_current_user_id();
1495
  }
1496
  $duration = $this->get_duration();
1497
  $user = learn_press_get_user( $user_id );
1498
  $course_info = $user->get_course_info( $this->id );
1499
- $start_time = array_key_exists( 'start_time', $args ) ? $args['start_time'] : intval( strtotime( $course_info['start'] ) );
1500
  if ( $duration == 0 ) {
1501
  $duration = DAY_IN_SECONDS * 365 * 100;
1502
  }
1503
  $expired = $start_time + $duration;
 
1504
  return apply_filters( 'learn_press_user_course_expired_time', $expired, $user_id, $this->id );
1505
  }
1506
 
@@ -1510,14 +1574,17 @@ abstract class LP_Abstract_Course {
1510
  * @param int $user_id
1511
  * @param mixed
1512
  *
1513
- * @return mixed|null|void
1514
  */
1515
  public function is_expired( $user_id = 0, $args = array() ) {
1516
  settype( $args, 'array' );
1517
- if ( !$user_id ) {
1518
  $user_id = get_current_user_id();
1519
  }
1520
- return apply_filters( 'learn_press_user_course_expired', $this->get_user_expired_time( $user_id, $args ) - current_time( 'timestamp' ) );
 
 
 
1521
  }
1522
 
1523
  /**
@@ -1608,13 +1675,13 @@ abstract class LP_Abstract_Course {
1608
 
1609
  if ( 'youtube' === $video_type ) {
1610
  $embed = '<iframe width="' . $width . '" height="' . $height . '" '
1611
- . 'src="https://www.youtube.com/embed/' . $video_id . '" '
1612
- . 'frameborder="0" allowfullscreen></iframe>';
1613
 
1614
  } elseif ( 'vimeo' === $video_type ) {
1615
  $embed = '<iframe width="' . $width . '" height="' . $height . '" '
1616
- . ' src="https://player.vimeo.com/video/' . $video_id . '" '
1617
- . 'frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
1618
  }
1619
 
1620
  return $embed;
67
  $this->id = absint( $course->ID );
68
  $this->post = get_post( $course->ID );
69
  }
70
+ if ( empty( self::$_lessons[ $this->id ] ) ) {
71
+ self::$_lessons[ $this->id ] = array();
72
  }
73
  if ( $user ) {
74
  $this->init_for_user( $user );
105
  $value = false;
106
  switch ( $key ) {
107
  case 'current_item':
108
+ if ( ! empty( LP()->global['course-item'] ) ) {
109
  $value = LP()->global['course-item'];
110
  }
111
 
123
  $value = get_post_meta( $this->id, '_lp_' . $key, true );
124
  $duration = learn_press_get_course_duration_support();
125
  $duration_keys = array_keys( $duration );
126
+ if ( ! preg_match_all( '!([0-9]+)\s(' . join( '|', $duration_keys ) . ')!', $value, $matches ) ) {
127
  $a1 = absint( $value );
128
  $a2 = end( $duration_keys );
129
  $value = $a1 . ' ' . $a2;
145
  }
146
 
147
  }
148
+ if ( ! empty( $value ) ) {
149
  $this->$key = $value;
150
  }
151
  }
152
+
153
+ return ! empty( $this->$key ) ? $this->$key : null;
154
  }
155
 
156
  /**
174
  } elseif ( ( $parent_id = wp_get_post_parent_id( $this->id ) ) && has_post_thumbnail( $parent_id ) ) {
175
  $image = get_the_post_thumbnail( $parent_id, $size, $attr );
176
  }
177
+ if ( ! $image ) {
178
  if ( 'course_thumbnail' == $size ) {
179
  $image = LP()->image( 'placeholder-400x250' );
180
  } else {
182
  }
183
  $image = sprintf( '<img src="%s" %s />', $image, '' );
184
  }
185
+
186
  return apply_filters( 'learn_press_course_image', $image, $this->id, $size, $attr );
187
  }
188
 
196
 
197
  public function get_request_item( $field = 'id' ) {
198
  $return = LP()->global['course-item'];
199
+ if ( ! empty( $_REQUEST['course-item'] ) ) {
200
  $type = $_REQUEST['course-item'];
201
  if ( $field == 'type' ) {
202
  $return = $type;
203
  } elseif ( $field == 'id' ) {
204
+ $return = ! empty( $_REQUEST[ $type . '_id' ] ) ? $_REQUEST[ $type . '_id' ] : 0;
205
  } elseif ( $field == 'name' ) {
206
+ $return = ! empty( $_REQUEST[ $type ] ) ? $_REQUEST[ $type ] : false;
207
  }
208
  }
209
+
210
  return $return;
211
  }
212
 
227
  $enrollable = true;
228
 
229
  // Products must exist of course
230
+ if ( ! $this->exists() ) {
231
  $enrollable = false;
232
  // Check the product is published
233
+ } elseif ( $this->post->post_status !== 'publish' && ! current_user_can( 'edit_post', $this->id ) ) {
234
  $enrollable = false;
235
  }
236
 
237
  return apply_filters( 'learn_press_is_enrollable', $enrollable, $this );
238
  }
239
 
240
+ public function is_published() {
241
+ return $this->exists() && $this->post->post_status === 'publish';
242
+ }
243
+
244
  /**
245
  * Course is exists if the post is not empty
246
  *
286
  FROM {$wpdb->posts}
287
  WHERE ID IN(" . join( ',', $ids ) . ")
288
  " );
289
+
290
  return $posts;
291
  }
292
 
307
  * @return mixed
308
  */
309
  public function get_curriculum( $section_id = 0, $force = false ) {
310
+ if ( ! $this->id ) {
311
  return false;
312
  }
313
  $curriculum = _learn_press_get_course_curriculum( $this->id, $force );
314
  $return = false;
315
  if ( $section_id ) {
316
+ if ( ! empty( $curriculum[ $section_id ] ) ) {
317
+ $return = $curriculum[ $section_id ];
318
  }
319
  } else {
320
  $return = $curriculum;
321
  }
322
+
323
  return apply_filters( 'learn_press_course_curriculum', $return, $this->id, $section_id );
324
  }
325
 
346
  $enrolled = $real_enrolled;
347
  }
348
  }
349
+
350
  return apply_filters( 'learn_press_count_users_enrolled', $enrolled, $this );
351
  }
352
 
359
  */
360
  public function get_users_enrolled( $force = false ) {
361
  $this->_count_users = LP_Cache::get_enrolled_courses( $this->id );
362
+
363
  return $this->_count_users;
364
  /*
365
  if ( ( $this->_count_users === null && !array_key_exists( $this->id, self::$course_users ) ) || $force ) {
398
  else:
399
  $output = apply_filters( 'learn_press_no_student_enrolled_html', __( 'No student enrolled', 'learnpress' ), $this );
400
  endif;
401
+
402
  return $output;
403
  }
404
 
408
  if ( $user_data ) {
409
  $author_name = $user_data->display_name;
410
  }
411
+
412
  return apply_filters( 'learn_press_course_instructor', $author_name, $this->id );
413
  }
414
 
419
  learn_press_user_profile_link( $this->post->post_author ),
420
  $instructor
421
  );
422
+
423
  return apply_filters( 'learn_press_course_instructor_html', $html, $this->post->post_author, $this->id );
424
  }
425
 
426
  public function get_course_info( $user_id = null ) {
427
+ if ( ! $user_id ) {
428
  $user_id = get_current_user_id();
429
  }
430
  $user = learn_press_get_user( $user_id );
431
+
432
  return $user->get_course_info( $this->id );
433
  }
434
 
439
  */
440
  public function is_free() {
441
  $is_free = ( 'no' == $this->payment || ( 0 >= $this->get_price() ) );
442
+
443
  return apply_filters( 'learn_press_is_free_course', $is_free, $this );
444
  }
445
 
449
  */
450
  public function get_origin_price() {
451
  $price = $this->price;
452
+ if ( ! $price || 'yes' != $this->payment ) {
453
  $price = 0;
454
  } else {
455
  $price = floatval( $price );
456
  }
457
+
458
  return $price;
459
  }
460
 
472
  $now = current_time( 'timestamp' );
473
  $end = strtotime( $end_date );
474
  $start = strtotime( $start_date );
475
+ if ( ( $now >= $start || ! $start_date ) && ( $now <= $end || ! $end_date ) ) {
476
  $res = $sale_price;
477
  }
478
  }
479
+
480
  return $res;
481
  }
482
 
491
  */
492
  public function get_price() {
493
  $price = $this->price;
494
+ if ( ! $price || 'yes' != $this->payment ) {
495
  $price = 0;
496
  } else {
497
  $price = floatval( $price );
500
  $price = $sale_price;
501
  }
502
  }
503
+
504
  return apply_filters( 'learn_press_course_price', $price, $this );
505
  }
506
 
518
  $price = learn_press_format_price( $price, true );
519
  $price_html = apply_filters( 'learn_press_course_price_html', $price, $this );
520
  }
521
+
522
  return $price_html;
523
  }
524
 
535
  $origin_price = learn_press_format_price( $origin_price, true );
536
  $origin_price_html = apply_filters( 'learn_press_course_origin_price_html', $origin_price, $this );
537
  }
538
+
539
  //}
540
  return $origin_price_html;
541
  }
547
  * @return array list enrolled students
548
  */
549
  public function get_students_list( $force = false, $limit = - 1 ) {
550
+ if ( ! $this->exists() ) {
551
+ return null;
552
+ }
553
 
554
  global $wpdb;
555
+ if ( $limit < 0 ) {
556
+ $limit = PHP_INT_MAX;
557
+ }
558
  if ( $this->_students_list === null || $force ) {
559
  $query = $wpdb->prepare( "
560
  SELECT DISTINCT u.*
566
  ", $this->id, LP_COURSE_CPT, $limit );
567
  $this->_students_list = $wpdb->get_results( $query );
568
  }
569
+
570
  return $this->_students_list;
571
  }
572
 
586
  'field' => $field
587
  )
588
  );
589
+ $quizzes = ! empty( $items['quizzes'] ) ? $items['quizzes'] : false;
590
+
591
  return apply_filters( 'learn_press_course_quizzes', $quizzes, $this );
592
  }
593
 
613
  $args
614
  );
615
  $items = $this->get_curriculum_items( $curriculum_args );
616
+ $lessons = ! empty( $items['lessons'] ) ? $items['lessons'] : false;
617
+
618
  return apply_filters( 'learn_press_course_lessons', $lessons, $this );
619
  }
620
 
654
  // overwrite default values with params passed
655
  extract( $args );
656
  $items = array();
657
+ if ( ! $this->_curriculum_items || $force ) {
658
  $curriculum = $this->get_curriculum( null, $force );
659
  $index = 0;
660
+ if ( ! empty( $field ) ) {
661
  if ( is_string( $field ) ) {
662
  $field = explode( '![\s]+!', $field );
663
  }
665
  } else {
666
  $field = false;
667
  }
668
+ if ( ! empty( $field_map ) ) {
669
  if ( is_string( $field_map ) ) {
670
  $field_map = explode( '![\s]+!', $field_map );
671
  }
673
  } else {
674
  $field_map = false;
675
  }
676
+ if ( ! empty( $field_format ) ) {
677
  if ( is_string( $field_format ) ) {
678
  $field_format = explode( '![\s]+!', $field_format );
679
  }
738
  } else {
739
  // combine lessons and quizzes as it should be in curriculum
740
  for ( $i = 0, $n = sizeof( $quizzes ) + sizeof( $lessons ); $i < $n; $i ++ ) {
741
+ if ( ! empty( $quizzes[ $i ] ) ) {
742
+ $items[] = $quizzes[ $i ];
743
+ } elseif ( ! empty( $lessons[ $i ] ) ) {
744
+ $items[] = $lessons[ $i ];
745
  }
746
  }
747
  }
748
  }
749
+
750
  return apply_filters( 'learn_press_get_course_items', $items, $this );
751
  }
752
 
753
  public function is_viewing( $content = '' ) {
754
 
755
+ $item_type = ! empty( $_REQUEST['course-item'] ) ? $_REQUEST['course-item'] : '';
756
  $viewing = apply_filters( 'learn_press_course_is_viewing', $item_type ? $item_type : 'course' );
757
  if ( $content ) {
758
  return $content == $viewing;
759
  }
760
+
761
  return $viewing;
762
  }
763
 
771
  $return = $item->ID;
772
  }
773
  }
774
+
775
  return apply_filters( 'learn_press_viewing_course_item', $return, $item_id, $this->id );
776
  }
777
 
785
  }*/
786
  $current_item = $this->current_item;
787
  $view_id = $current_item ? $current_item->ID : 0;
788
+
789
  return apply_filters( 'learn_press_is_current_course_item', $view_id == $item_id, $item_id, $view_id, $this->id );
790
  }
791
 
829
  }
830
 
831
  /**
832
+ * Return true if this course can be purchasable
833
  *
834
  * @return mixed
835
  */
836
  public function is_purchasable() {
837
  // TODO: needs to check more criteria, currently only check if this course is required enrollment
838
+ $is_purchasable = $this->is_published() && $this->is_required_enroll() && ! $this->is_reached_limit();
839
+
 
 
 
 
 
 
840
  return apply_filters( 'learn_press_item_is_purchasable', $is_purchasable, $this->id );
841
  }
842
 
843
+ public function is_reached_limit() {
844
+ $max_allowed = $this->max_students;
845
+ $reached = false;
846
+ if ( $max_allowed > 0 ) {
847
+ $count_in_order = $this->count_in_order( array( 'completed', 'processing' ) );
848
+ $reached = $count_in_order >= $max_allowed;
849
+ }
850
+
851
+
852
+ return $reached;
853
+ }
854
+
855
  public function count_in_order( $statuses = 'completed' ) {
856
  global $wpdb;
857
  static $data = array();
858
  settype( $statuses, 'array' );
859
  foreach ( $statuses as $k => $v ) {
860
+ if ( ! preg_match( '/^lp-/', $v ) ) {
861
+ $statuses[ $k ] = 'lp-' . $v;
862
  }
863
  }
864
  sort( $statuses );
865
  $key = md5( serialize( $statuses ) );
866
+ if ( ! array_key_exists( $key, $data ) ) {
867
+ $in_clause = join( ',', array_fill( 0, sizeof( $statuses ), '%s' ) );
868
+ $query = $wpdb->prepare( "
869
  SELECT count(oim.meta_id)
870
  FROM {$wpdb->learnpress_order_itemmeta} oim
871
  INNER JOIN {$wpdb->learnpress_order_items} oi ON oi.order_item_id = oim.learnpress_order_item_id
875
  WHERE o.post_type = %s
876
  AND o.post_status IN ($in_clause)
877
  ", array_merge( array( '_course_id', $this->id, 'lp_order' ), $statuses ) );
878
+ $data[ $key ] = $wpdb->get_var( $query );
879
  }
880
+
881
+ return $data[ $key ];
882
  }
883
 
884
  public function need_payment() {
887
 
888
  public function has_item( $item_id ) {
889
  static $items = array();
890
+ if ( empty( $items[ $this->id ] ) ) {
891
+ $items[ $this->id ] = $this->get_curriculum_items( array( 'field' => 'ID'/*, 'force' => true */ ) );
892
  }
893
 
894
+ return in_array( $item_id, (array) $items[ $this->id ] );
895
  }
896
 
897
  public function can_view_item( $item_id ) {
903
  public function get_item( $thing = '' ) {
904
  $return = false;
905
  $curriculum = $this->get_curriculum_items();
906
+ if ( ! $curriculum ) {
907
  return $return;
908
  }
909
+ if ( ! $thing ) {
910
  return $return;
911
  }
912
  if ( $thing ) {
926
  }
927
  }
928
  }
929
+
930
  return apply_filters( 'learn_press_course_item', $return, $item, $this->id );
931
  }
932
 
933
  public function get_item_link( $item_id ) {
934
  static $item_links = array();
935
  $key = $this->id . '-' . $item_id;
936
+ if ( empty( $item_links[ $key ] ) ) {
937
+ if ( ! $this->has( 'item', $item_id ) ) {
938
  return false;
939
  }
940
  $permalink = get_the_permalink( $item_id );
941
  $post_types = get_post_types( null, 'objects' );
942
  $item_type = get_post_type( $item_id );
943
+ $has_query = false;
944
  switch ( $item_type ) {
945
  case 'lp_lesson':
946
  case 'lp_quiz':
957
  }
958
  }
959
  if ( empty( $slug ) ) {
960
+ $slug = $post_types[ $item_type ]->rewrite['slug'];
961
  }
962
  $slug = sanitize_title_with_dashes( $slug );
963
  $prefix = preg_replace( '!^/!', '', trailingslashit( $slug ) );
995
  $items = (array) $this->get_curriculum_items( array( 'field' => 'ID' ) );
996
  } else {
997
  $items = (array) $this->get_curriculum_items( array( 'field' => 'ID', 'group' => true ) );
998
+ if ( ! empty( $items[ $items_types ] ) ) {
999
+ $items = array_values( $items[ $items_types ] );
1000
  } else {
1001
  $items = array();
1002
  }
1006
  return false;
1007
  }
1008
  $current_item = $args['current_item'] ? $args['current_item'] : ( $this->current_item ? $this->current_item->id : 0 );
1009
+ if ( ! $current_item ) {
1010
  $current_item = reset( $items );
1011
  }
1012
  $next_item = false;
1018
  if ( $args['viewable'] !== null ) {
1019
  $user = learn_press_get_current_user();
1020
  for ( $i = $pos + 1; $i < $items_len; $i ++ ) {
1021
+ if ( ! ! $user->can( 'view-item', $items[ $i ] ) === $args['viewable'] ) {
1022
+ $next_item = $items[ $i ];
1023
  break;
1024
  }
1025
  }
1026
  } else {
1027
+ $next_item = $items[ $pos + 1 ];
1028
  }
1029
  }
1030
  } else {
1034
  if ( $args['viewable'] !== null ) {
1035
  $user = learn_press_get_current_user();
1036
  for ( $i = $pos - 1; $i >= 0; $i -- ) {
1037
+ if ( ! ! $user->can( 'view-item', $items[ $i ] ) === $args['viewable'] ) {
1038
+ $next_item = $items[ $i ];
1039
  break;
1040
  }
1041
  }
1042
  } else {
1043
+ $next_item = $items[ $pos - 1 ];
1044
  }
1045
  }
1046
  }
1047
  } else {
1048
+ $next_item = $args['dir'] == 'next' ? $items[1] : $items[ $items_len - 1 ];
1049
  }
1050
+
1051
  return apply_filters( 'learn_press_course_' . $args['dir'] . '_item', $next_item, $current_item, $this );
1052
  }
1053
 
1069
 
1070
  return ob_get_clean();
1071
  }
1072
+
1073
  return false;
1074
  }
1075
 
1084
  );
1085
  if ( $next_item = $this->get_next_item( $args ) ) {
1086
  ob_start();
1087
+ learn_press_get_template( 'content-lesson/prev-button.php', array(
1088
+ 'item' => $next_item,
1089
+ 'course' => $this
1090
+ ) );
1091
+
1092
  return ob_get_clean();
1093
  }
1094
+
1095
  return false;
1096
  }
1097
 
1102
  * @return mixed|null|void
1103
  */
1104
  public function get_course_result_html( $user_id = 0, $force = false ) {
1105
+ if ( ! $user_id ) {
1106
  $user_id = get_current_user_id();
1107
  }
1108
  $html = '';
1109
  $quizzes = $this->get_quizzes();
1110
+ if ( ( $this->course_result == 'evaluate_lesson' ) || ! $quizzes ) {
1111
 
1112
  $lessons = $this->get_lessons();
1113
  $total_items = sizeof( $quizzes ) + sizeof( $lessons );
1121
  $html = sprintf( __( '%d%% completed', 'learnpress' ), $this->_evaluate_course_by_quizzes( $user_id, $force ) * 100 );
1122
  }
1123
  }
1124
+
1125
  return apply_filters( 'learn_press_course_result_html', $html, $this->id, $user_id );
1126
  }
1127
 
1132
  $completed_items = $this->count_completed_items( $user_id, $force, $type );
1133
  $result = round( $completed_items / sizeof( $items ) * 100 );
1134
  }
1135
+
1136
  return apply_filters( 'learn_press_course_results_by_items', $result, $this->id, $user_id );
1137
  }
1138
 
1143
  $completed_items = $this->count_completed_items( $user_id, $force, 'lp_lesson' );
1144
  $result = round( $completed_items / sizeof( $lessons ) * 100 );
1145
  }
1146
+
1147
  return apply_filters( 'learn_press_course_results_by_items', $result, $this->id, $user_id );
1148
  }
1149
 
1156
  * @return mixed|null|void
1157
  */
1158
  public function evaluate_course_results( $user_id = 0, $force = false ) {
1159
+ if ( ! $user_id ) {
1160
  $user_id = get_current_user_id();
1161
  }
1162
 
1163
  $quizzes = $this->get_quizzes();
1164
 
1165
+ if ( ( 'evaluate_lesson' === $this->course_result ) || ! $quizzes ) {
1166
  //$results = $this->_evaluate_course_by_items( $user_id, $force );
1167
  $results = $this->_evaluate_course_by_lesson( $user_id, $force );
1168
  } elseif ( 'evaluate_final_quiz' === $this->course_result ) {
1194
  $total_point = 0;
1195
  $quizzes_ids = array();
1196
  foreach ( $quizzes as $quiz ) {
1197
+ if ( ! $this->enable_evaluate_item( $quiz->ID, $user_id ) ) {
1198
  continue;
1199
  }
1200
+ $quizzes_ids[] = $quiz->ID;
1201
+ $results[ $quiz->ID ] = $user->get_quiz_results( $quiz->ID, $this->id, true );
1202
  if ( $quiz = wp_cache_get( $quiz->ID, 'posts' ) ) {
1203
  $total_point += isset( $quiz->mark ) ? absint( $quiz->mark ) : 0;
1204
  }
1205
+ $achieved_point += is_object( $results[ $quiz->ID ] ) ? $results[ $quiz->ID ]->mark : 0;
1206
  }
1207
  if ( $total_point > 0 ) {
1208
  $result = ( $achieved_point / $total_point ) * 100;
1209
  } else {
1210
  $result = 0;
1211
  }
1212
+
1213
  return apply_filters( 'learn_press_evaluate_course_by_quizzes_results', $result, $this->id, $user_id );
1214
  }
1215
 
1216
  public function enable_evaluate_item( $item_id, $user_id = 0 ) {
1217
+ if ( ! $user_id ) {
1218
  $user_id = get_current_user_id();
1219
  }
1220
+
1221
  return apply_filters( 'learn_press_enable_evaluate_course_item', true, $item_id, $user_id, $this->id );
1222
  }
1223
 
1228
  $achieved_point = 0;
1229
  $total_point = 0;
1230
  foreach ( $quizzes as $_quiz ) {
1231
+ if ( ! $this->enable_evaluate_item( $_quiz->ID, $user_id ) ) {
1232
  continue;
1233
  }
1234
  $quiz = LP_Quiz::get_quiz( $_quiz->ID );
1249
  $quiz_passed = true;
1250
  }*/
1251
  if ( $grade == 'passed' ) {
1252
+ $quiz_results = $user->get_quiz_results( $quiz->ID, $this->id, true );
1253
  $achieved_point += is_object( $quiz_results ) ? $quiz_results->mark : 0;
1254
  }
1255
  }
1258
  } else {
1259
  $result = 0;
1260
  }
1261
+
1262
  return apply_filters( 'learn_press_evaluate_course_by_passed_quizzes_results', $result, $this->id, $user_id );
1263
  }
1264
 
1265
  public function _get_total_question( $quizzes_ids = array() ) {
1266
  global $wpdb;
1267
+ if ( ! empty( $quizzes_ids ) ) {
1268
  $format = array_fill( 0, sizeof( $quizzes_ids ), '%d' );
1269
  $args = array_merge( $quizzes_ids, array( 'publish', LP_QUESTION_CPT ) );
1270
+ $sql = $wpdb->prepare( "
1271
  SELECT COUNT(*)
1272
  FROM {$wpdb->prefix}learnpress_quiz_questions lqq
1273
  INNER JOIN {$wpdb->posts} p ON lqq.question_id = p.ID
1277
  AND p.post_type = %s",
1278
  $args
1279
  );
1280
+
1281
  return $wpdb->get_var( $sql );
1282
  }
1283
+
1284
  return 0;
1285
  }
1286
 
1302
 
1303
  $completed_lessons = LP_Cache::get_completed_lessons( false, array() );
1304
 
1305
+ if ( ! array_key_exists( $key, $completed_lessons ) || $force ) {
1306
  global $wpdb;
1307
  $course_lessons = $this->get_lessons( array( 'field' => 'ID' ) );
1308
+ if ( ! $course_lessons ) {
1309
  return 0;
1310
  }
1311
  $query = $wpdb->prepare( "
1318
  AND ul.item_id IN(" . join( ",", $course_lessons ) . ")
1319
  ", $user_id, 'completed', $this->id );
1320
 
1321
+ $completed_lessons[ $key ] = $wpdb->get_var( $query );
1322
 
1323
+ LP_Cache::set_completed_lessons( $key, $completed_lessons[ $key ] );
1324
  }
1325
 
1326
+ return apply_filters( 'learn_press_user_completed_lessons', $completed_lessons[ $key ], $this->id, $user_id );
1327
  }
1328
 
1329
  /**
1338
  //static $evaluate_course_by_lesson = array();
1339
  $evaluate_course_by_lesson = LP_Cache::get_evaluate_course_by_lesson( false, array() );
1340
  $key = $user_id . '-' . $this->id;
1341
+ if ( ! array_key_exists( $key, $evaluate_course_by_lesson ) || $force ) {
1342
  $course_lessons = $this->get_lessons( array( 'field' => 'ID' ) );
1343
  $completed_lessons = $this->get_completed_lessons( $user_id );
1344
  if ( $size = sizeof( $course_lessons ) ) {
1345
+ $evaluate_course_by_lesson[ $key ] = min( $completed_lessons / sizeof( $course_lessons ), 1 ) * 100;
1346
  } else {
1347
+ $evaluate_course_by_lesson[ $key ] = 0;
1348
  }
1349
+ LP_Cache::set_evaluate_course_by_lesson( $key, $evaluate_course_by_lesson[ $key ] );
1350
  }
1351
+
1352
+ return apply_filters( 'learn_press_evaluation_course_lesson', $evaluate_course_by_lesson[ $key ], $this->id, $user_id );
1353
  }
1354
 
1355
  /**
1362
  * @return int|mixed|null|void
1363
  */
1364
  public function get_completed_items( $user_id = 0, $force = false, $type = '' ) {
1365
+ if ( ! $user_id ) {
1366
  $user_id = get_current_user_id();
1367
  }
1368
  _learn_press_parse_user_item_statuses( $user_id, $this->id );
1376
  continue;
1377
  }
1378
  $k = sprintf( '%d-%d-%d', $user_id, $this->id, $item_id );
1379
+ if ( ! empty( $item_statuses[ $k ] ) && $item_statuses[ $k ] == 'completed' ) {
1380
  if ( $this->enable_evaluate_item( $item_id, $user_id ) ) {
1381
  $completed_items[] = $item_id;
1382
  }
1384
  }
1385
  }
1386
  }
1387
+
1388
  return apply_filters( 'learn_press_user_completed_items', $completed_items, $this->id, $user_id );
1389
  }
1390
 
1400
  if ( $items ) {
1401
  $count = sizeof( $items );
1402
  }
1403
+
1404
  return apply_filters( 'learn_press_count_user_completed_items', $count, $this->id, $user_id );
1405
  }
1406
 
1426
  public function _evaluate_course_by_quiz( $user_id, $force = false ) {
1427
  global $wpdb;
1428
  $result = $this->evaluate_quiz( $this->final_quiz, $user_id );
1429
+
1430
  return apply_filters( 'learn_press_evaluation_course_quiz', $result, $this->id, $user_id );
1431
  }
1432
 
1433
  public function evaluate_quiz( $quiz_id, $user_id, $force = false ) {
1434
  $user = learn_press_get_user( $user_id );
1435
  $results = $user->get_quiz_results( $quiz_id, $this->id );
1436
+ if ( ! $results ) {
1437
  $result = 0;
1438
  } else {
1439
+ if ( $user->get_quiz_graduation( $quiz_id, $this->id ) == 'passed' && ! empty( $results->mark_percent ) ) {
1440
  $result = absint( $results->mark_percent );
1441
  } else {
1442
  $result = 0;
1443
  }
1444
  }
1445
+
1446
  return $result;
1447
  }
1448
 
1461
  if ( $quizzes ) {
1462
  $count = 0;
1463
  foreach ( $quizzes as $quiz ) {
1464
+ if ( ! $this->enable_evaluate_item( $quiz->ID, $user_id ) ) {
1465
  continue;
1466
  }
1467
  $result += $this->evaluate_quiz( $quiz->ID, $user_id, $force );
1471
  $result = round( $result / $count );
1472
  }
1473
  }
1474
+
1475
  return apply_filters( 'learn_press_evaluation_course_quizzes', $result, $this->id, $user_id );
1476
  }
1477
 
1494
 
1495
  // restore post content
1496
  wp_reset_postdata();
1497
+
1498
  return $content;
1499
  }
1500
 
1539
  $html = sprintf( __( 'This course will end within %s next', 'learnpress' ), $remain );
1540
  }
1541
  }
1542
+
1543
  return $html;
1544
  }
1545
 
1553
  */
1554
  public function get_user_expired_time( $user_id = 0, $args = array() ) {
1555
 
1556
+ if ( ! $user_id ) {
1557
  $user_id = get_current_user_id();
1558
  }
1559
  $duration = $this->get_duration();
1560
  $user = learn_press_get_user( $user_id );
1561
  $course_info = $user->get_course_info( $this->id );
1562
+ $start_time = array_key_exists( 'start_time', $args ) ? $args['start_time'] : intval( strtotime( $course_info['start'] ) ) + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
1563
  if ( $duration == 0 ) {
1564
  $duration = DAY_IN_SECONDS * 365 * 100;
1565
  }
1566
  $expired = $start_time + $duration;
1567
+
1568
  return apply_filters( 'learn_press_user_course_expired_time', $expired, $user_id, $this->id );
1569
  }
1570
 
1574
  * @param int $user_id
1575
  * @param mixed
1576
  *
1577
+ * @return mixed|null
1578
  */
1579
  public function is_expired( $user_id = 0, $args = array() ) {
1580
  settype( $args, 'array' );
1581
+ if ( ! $user_id ) {
1582
  $user_id = get_current_user_id();
1583
  }
1584
+
1585
+ $overtime = $this->get_user_expired_time( $user_id, $args ) - current_time( 'timestamp' );
1586
+
1587
+ return apply_filters( 'learn_press_user_course_expired', $overtime, $this->id, $user_id );
1588
  }
1589
 
1590
  /**
1675
 
1676
  if ( 'youtube' === $video_type ) {
1677
  $embed = '<iframe width="' . $width . '" height="' . $height . '" '
1678
+ . 'src="https://www.youtube.com/embed/' . $video_id . '" '
1679
+ . 'frameborder="0" allowfullscreen></iframe>';
1680
 
1681
  } elseif ( 'vimeo' === $video_type ) {
1682
  $embed = '<iframe width="' . $width . '" height="' . $height . '" '
1683
+ . ' src="https://player.vimeo.com/video/' . $video_id . '" '
1684
+ . 'frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
1685
  }
1686
 
1687
  return $embed;
inc/custom-post-types/abstract.php CHANGED
@@ -231,7 +231,7 @@ abstract class LP_Abstract_Post_Type {
231
 
232
  public function _check_post() {
233
  global $pagenow, $post_type;
234
- if ( !is_admin() || ( $pagenow != 'edit.php' ) || ( $this->_post_type != $post_type ) ) {
235
  return false;
236
  }
237
  return true;
@@ -247,9 +247,6 @@ abstract class LP_Abstract_Post_Type {
247
  }
248
 
249
  public function add_meta_boxes() {
250
- if ( $this->_post_type != learn_press_get_requested_post_type() ) {
251
- return;
252
- }
253
  do_action( 'learn_press_add_meta_boxes', $this->_post_type, $this );
254
  do_action( "learn_press_{$this->_post_type}_add_meta_boxes", $this );
255
  if ( !$this->_meta_boxes ) {
231
 
232
  public function _check_post() {
233
  global $pagenow, $post_type;
234
+ if ( !is_admin() || ( $this->_post_type != $post_type ) ) {
235
  return false;
236
  }
237
  return true;
247
  }
248
 
249
  public function add_meta_boxes() {
 
 
 
250
  do_action( 'learn_press_add_meta_boxes', $this->_post_type, $this );
251
  do_action( "learn_press_{$this->_post_type}_add_meta_boxes", $this );
252
  if ( !$this->_meta_boxes ) {
inc/custom-post-types/course.php CHANGED
@@ -31,9 +31,11 @@ if ( !class_exists( 'LP_Course_Post_Type' ) ) {
31
  // Map origin methods to another method
32
  $this
33
  ->add_map_method( 'save', 'update_course', false )
34
- ->add_map_method( 'save', 'before_save_curriculum', false )
35
  ->add_map_method( 'before_delete', 'delete_course_sections' );
36
 
 
 
37
  add_action( 'edit_form_after_editor', array( $this, 'curriculum_editor' ), 0 );
38
  add_action( 'load-post.php', array( $this, 'post_actions' ) );
39
  add_action( 'init', array( $this, 'register_taxonomy' ) );
@@ -438,9 +440,6 @@ if ( !class_exists( 'LP_Course_Post_Type' ) ) {
438
  * Add meta boxes to course post type page
439
  */
440
  public function add_meta_boxes() {
441
- if ( LP_COURSE_CPT != learn_press_get_requested_post_type() ) {
442
- return;
443
- }
444
  $default_tabs = array(
445
  'settings' => new RW_Meta_Box( self::settings_meta_box() ),
446
  'assessment' => new RW_Meta_Box( self::assessment_meta_box() ),
@@ -587,7 +586,7 @@ if ( !class_exists( 'LP_Course_Post_Type' ) ) {
587
  }
588
  $course_result_desc = "<span id=\"learn-press-toggle-course-results\">{$course_result_desc}</span>";
589
  $course_result_desc .= __( 'The method to assess the result of a student for a course.', 'learnpress' );
590
- if ( $course_results == 'evaluate_final_quiz' && !get_post_meta( $post_id, '_lp_final_quiz', true ) ) {
591
  $course_result_desc .= __( '<br /><strong>Note! </strong>No final quiz in course, please add a final quiz', 'learnpress' );
592
  }
593
  $meta_box = array(
@@ -634,7 +633,7 @@ if ( !class_exists( 'LP_Course_Post_Type' ) ) {
634
  */
635
  public static function payment_meta_box() {
636
 
637
- $course_id = !empty( $_GET['post'] ) ? $_GET['post'] : 0;
638
  $prefix = '_lp_';
639
 
640
  $meta_box = array(
@@ -647,7 +646,7 @@ if ( !class_exists( 'LP_Course_Post_Type' ) ) {
647
  'name' => __( 'Course payment', 'learnpress' ),
648
  'id' => "{$prefix}payment",
649
  'type' => 'yes_no',
650
- 'desc' => __( '', 'learnpress' ),
651
  'std' => 'no',
652
  'class' => 'lp-course-payment-field'
653
  )
@@ -673,7 +672,7 @@ if ( !class_exists( 'LP_Course_Post_Type' ) ) {
673
 
674
  $author = get_userdata( $course->post_author );
675
 
676
- if ( isset( $suggest_price ) && !empty( $author->roles[0] ) && $author->roles[0] === 'lp_teacher' ) {
677
  $message = sprintf( __( 'This course is requires enrollment and the suggested price is <strong>%s</strong>', 'learnpress' ), learn_press_format_price( $suggest_price, true ) );
678
  $price = $suggest_price;
679
  }
@@ -1183,7 +1182,7 @@ if ( !class_exists( 'LP_Course_Post_Type' ) ) {
1183
  return;
1184
  }
1185
 
1186
- remove_action( 'save_post', array( $this, 'before_save_curriculum' ), 1 );
1187
  //remove_action( 'rwmb_course_curriculum_before_save_post', array( $this, 'before_save_curriculum' ) );
1188
 
1189
  $user = LP()->user;
@@ -1236,14 +1235,14 @@ if ( !class_exists( 'LP_Course_Post_Type' ) ) {
1236
  $request = $_POST;
1237
  $payment = learn_press_get_request( '_lp_payment' ) == 1;
1238
  $price = floatval( $request['_lp_price'] );
1239
- $sale_price = $request['_lp_sale_price'];
1240
- $sale_price_start = $request['_lp_sale_start'];
1241
- $sale_price_end = $request['_lp_sale_end'];
1242
  $keys = array();
1243
  // Delete all meta no need anymore
1244
  if ( !$payment || $price <= 0 ) {
1245
  $keys = array( '_lp_payment', '_lp_price', '_lp_sale_price', '_lp_sale_start', '_lp_sale_end' );
1246
- } else if ( ( $sale_price == '' ) || ( $sale_price < 0 ) || ( absint( $sale_price ) >= $price ) || !$this->_validate_sale_price_date() ) {
1247
  $keys = array( '_lp_sale_price', '_lp_sale_start', '_lp_sale_end' );
1248
  }
1249
  if ( $keys ) {
@@ -1271,12 +1270,12 @@ if ( !class_exists( 'LP_Course_Post_Type' ) ) {
1271
  */
1272
  private function _validate_sale_price_date() {
1273
  $now = current_time( 'timestamp' );
1274
- $sale_price_start = $_REQUEST['_lp_sale_start'];
1275
- $sale_price_end = $_REQUEST['_lp_sale_end'];
1276
  $end = strtotime( $sale_price_end );
1277
  $start = strtotime( $sale_price_start );
1278
 
1279
- return ( ( $now >= $start || !$sale_price_start ) && ( $now <= $end || !$sale_price_end ) || ( !$sale_price_start && !$sale_price_end ) );
1280
  }
1281
 
1282
  /**
31
  // Map origin methods to another method
32
  $this
33
  ->add_map_method( 'save', 'update_course', false )
34
+ // ->add_map_method( 'save', 'before_save_curriculum', false )
35
  ->add_map_method( 'before_delete', 'delete_course_sections' );
36
 
37
+ add_action( 'save_post', array( $this, 'before_save_curriculum' ), 20 );
38
+
39
  add_action( 'edit_form_after_editor', array( $this, 'curriculum_editor' ), 0 );
40
  add_action( 'load-post.php', array( $this, 'post_actions' ) );
41
  add_action( 'init', array( $this, 'register_taxonomy' ) );
440
  * Add meta boxes to course post type page
441
  */
442
  public function add_meta_boxes() {
 
 
 
443
  $default_tabs = array(
444
  'settings' => new RW_Meta_Box( self::settings_meta_box() ),
445
  'assessment' => new RW_Meta_Box( self::assessment_meta_box() ),
586
  }
587
  $course_result_desc = "<span id=\"learn-press-toggle-course-results\">{$course_result_desc}</span>";
588
  $course_result_desc .= __( 'The method to assess the result of a student for a course.', 'learnpress' );
589
+ if ( $course_results == 'evaluate_final_quiz' && ! get_post_meta( $post_id, '_lp_final_quiz', true ) ) {
590
  $course_result_desc .= __( '<br /><strong>Note! </strong>No final quiz in course, please add a final quiz', 'learnpress' );
591
  }
592
  $meta_box = array(
633
  */
634
  public static function payment_meta_box() {
635
 
636
+ $course_id = ! empty( $_GET['post'] ) ? $_GET['post'] : 0;
637
  $prefix = '_lp_';
638
 
639
  $meta_box = array(
646
  'name' => __( 'Course payment', 'learnpress' ),
647
  'id' => "{$prefix}payment",
648
  'type' => 'yes_no',
649
+ 'desc' => '',
650
  'std' => 'no',
651
  'class' => 'lp-course-payment-field'
652
  )
672
 
673
  $author = get_userdata( $course->post_author );
674
 
675
+ if ( isset( $suggest_price ) && ! empty( $author->roles[0] ) && $author->roles[0] === 'lp_teacher' ) {
676
  $message = sprintf( __( 'This course is requires enrollment and the suggested price is <strong>%s</strong>', 'learnpress' ), learn_press_format_price( $suggest_price, true ) );
677
  $price = $suggest_price;
678
  }
1182
  return;
1183
  }
1184
 
1185
+ remove_action( 'save_post', array( $this, 'before_save_curriculum' ), 20 );
1186
  //remove_action( 'rwmb_course_curriculum_before_save_post', array( $this, 'before_save_curriculum' ) );
1187
 
1188
  $user = LP()->user;
1235
  $request = $_POST;
1236
  $payment = learn_press_get_request( '_lp_payment' ) == 1;
1237
  $price = floatval( $request['_lp_price'] );
1238
+ $sale_price = learn_press_get_request( '_lp_sale_price' );
1239
+ $sale_price_start = learn_press_get_request( '_lp_sale_start' );
1240
+ $sale_price_end = learn_press_get_request( '_lp_sale_end' );
1241
  $keys = array();
1242
  // Delete all meta no need anymore
1243
  if ( !$payment || $price <= 0 ) {
1244
  $keys = array( '_lp_payment', '_lp_price', '_lp_sale_price', '_lp_sale_start', '_lp_sale_end' );
1245
+ } else if ( ( $sale_price === '' ) || ( $sale_price < 0 ) || ( absint( $sale_price ) >= $price ) || !$this->_validate_sale_price_date() ) {
1246
  $keys = array( '_lp_sale_price', '_lp_sale_start', '_lp_sale_end' );
1247
  }
1248
  if ( $keys ) {
1270
  */
1271
  private function _validate_sale_price_date() {
1272
  $now = current_time( 'timestamp' );
1273
+ $sale_price_start = learn_press_get_request( '_lp_sale_start' );
1274
+ $sale_price_end = learn_press_get_request( '_lp_sale_end' );
1275
  $end = strtotime( $sale_price_end );
1276
  $start = strtotime( $sale_price_start );
1277
 
1278
+ return ( ( $now <= $end || !$sale_price_end ) || ( !$sale_price_start && !$sale_price_end ) );
1279
  }
1280
 
1281
  /**
inc/custom-post-types/order.php CHANGED
@@ -4,7 +4,7 @@
4
  * @package LearnPress/Classes
5
  * @version 1.0
6
  */
7
- if ( !class_exists( 'LP_Order_Post_Type' ) ) {
8
 
9
  // class LP_Order_Post_Type
10
  final class LP_Order_Post_Type extends LP_Abstract_Post_Type {
@@ -115,7 +115,7 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
115
 
116
  // delete all data related user order
117
  if ( $user_id ) {
118
- learn_press_delete_user_data( $user_id );
119
  }
120
  }
121
  }
@@ -148,12 +148,12 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
148
  $meta_ids = array();
149
  $remove_ids = array( 0 );
150
  foreach ( $existed as $k => $r ) {
151
- if ( empty( $user_id[$k] ) ) {
152
  $remove_ids[] = $r->meta_id;
153
  continue;
154
  }
155
- $cases[] = $wpdb->prepare( "WHEN meta_id = %d THEN %d", $r->meta_id, $user_id[$k] );
156
- $edited[] = $user_id[$k];
157
  $meta_ids[] = $r->meta_id;
158
  }
159
  $sql = "
@@ -200,8 +200,9 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
200
 
201
  public function save_order( $post_id ) {
202
  global $action;
203
- if ( wp_is_post_revision( $post_id ) )
204
  return;
 
205
  if ( $action == 'editpost' && get_post_type( $post_id ) == 'lp_order' ) {
206
  remove_action( 'save_post', array( $this, 'save_order' ) );
207
  $user_id = learn_press_get_request( 'order-customer' );
@@ -218,7 +219,7 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
218
  $order_statuses = array_keys( $order_statuses );
219
  $status = learn_press_get_request( 'order-status' );
220
 
221
- if ( !in_array( $status, $order_statuses ) ) {
222
  $status = reset( $order_statuses );
223
  }
224
 
@@ -243,7 +244,7 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
243
  }
244
 
245
  public function admin_footer() {
246
- if ( !$this->_is_archive() ) {
247
  return;
248
  }
249
  ?>
@@ -257,7 +258,7 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
257
 
258
  public function posts_where_paged( $where ) {
259
  global $wpdb, $wp_query;
260
- if ( !$this->_is_archive() || !$this->_is_search() ) {
261
  return $where;
262
  }
263
 
@@ -275,28 +276,31 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
275
  }
276
 
277
  public function posts_fields( $fields ) {
278
- if ( !$this->_is_archive() || !$this->_is_search() ) {
279
  return $fields;
280
  }
281
  $fields .= ", uu.ID as user_ID, uu.display_name as user_display_name";
 
282
  return $fields;
283
  }
284
 
285
  public function posts_orderby( $orderby ) {
286
- if ( !$this->_is_archive() || !$this->_is_search() ) {
287
  return $orderby;
288
  }
 
289
  return $orderby;
290
  }
291
 
292
  public function posts_join_paged( $join ) {
293
- if ( !$this->_is_archive() || !$this->_is_search() ) {
294
  return $join;
295
  }
296
  global $wpdb;
297
  $join .= " INNER JOIN {$wpdb->postmeta} ON {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id";
298
  $join .= " INNER JOIN {$wpdb->users} uu ON uu.ID = {$wpdb->postmeta}.meta_value";
299
  $join .= " INNER JOIN {$wpdb->learnpress_order_items} AS orderItem ON orderItem.order_id = {$wpdb->posts}.ID";
 
300
  return $join;
301
  }
302
 
@@ -309,6 +313,7 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
309
  */
310
  public function sortable_columns( $columns ) {
311
  $columns['order_student'] = 'student';
 
312
  return $columns;
313
  }
314
 
@@ -316,23 +321,24 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
316
 
317
  global $post, $wp_query;
318
 
319
- if ( LP_ORDER_CPT != get_post_type() )
320
  return;
 
321
  ob_start();
322
  ?>
323
  <script>
324
  $('#update-order-status').click(function () {
325
  var $button = $(this).attr('disabled', 'disabled').html('<?php _e( 'Processing...', 'learnpress' ); ?>');
326
  $.ajax({
327
- url : ajaxurl,
328
- type : 'POST',
329
  dataType: 'json',
330
- data : {
331
- action : 'update_order_status',
332
  order_id: '<?php echo $post->ID; ?>',
333
- status : $('select[name="learn_press_order_status"]').val()
334
  },
335
- success : function (res) {
336
  if (res.status) {
337
  $('.order-data-status')
338
  .removeClass('pending completed')
@@ -341,7 +347,7 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
341
  }
342
  $button.removeAttr('disabled').html('<?php _e( 'Apply', 'learnpress' ); ?>');
343
  },
344
- error : function () {
345
  $button.removeAttr('disabled').html('<?php _e( 'Apply', 'learnpress' ); ?>');
346
  }
347
  });
@@ -353,8 +359,8 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
353
  }
354
 
355
  public function update_status() {
356
- $order_id = !empty( $_REQUEST['order_id'] ) ? $_REQUEST['order_id'] : 0;
357
- $status = !empty( $_REQUEST['status'] ) ? $_REQUEST['status'] : 'Pending';
358
  learn_press_update_order_status( $order_id, $status );
359
 
360
  wp_send_json(
@@ -366,12 +372,13 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
366
  }
367
 
368
  public function row_actions( $actions, $post ) {
369
- if ( !empty( $actions['inline hide-if-no-js'] ) ) {
370
  unset( $actions['inline hide-if-no-js'] );
371
  }
372
- if ( !empty( $actions['edit'] ) ) {
373
  $actions['edit'] = preg_replace( '/>(.*?)<\/a>/', ">" . __( 'View Order', 'learnpress' ) . "</a>", $actions['edit'] );
374
  }
 
375
  return $actions;
376
  }
377
 
@@ -384,11 +391,12 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
384
  */
385
  public function pre_get_posts( $wp_query ) {
386
  if ( is_admin() ) {
387
- if ( !empty( $wp_query->query['post_type'] ) && ( $wp_query->query['post_type'] == LP_ORDER_CPT ) ) {
388
  $wp_query->set( 'orderby', 'date' );
389
  $wp_query->set( 'order', 'desc' );
390
  }
391
  }
 
392
  return $wp_query;
393
  }
394
 
@@ -404,28 +412,34 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
404
  }
405
 
406
  // Remove Title - adding it back below
407
- if ( isset( $existing['title'] ) )
408
  unset( $existing['title'] );
 
409
 
410
  // Remove Format
411
- if ( isset( $existing['format'] ) )
412
  unset( $existing['format'] );
 
413
 
414
  // Remove Author
415
- if ( isset( $existing['author'] ) )
416
  unset( $existing['author'] );
 
417
 
418
  // Remove Comments
419
- if ( isset( $existing['comments'] ) )
420
  unset( $existing['comments'] );
 
421
 
422
  // Remove Date
423
- if ( isset( $existing['date'] ) )
424
  unset( $existing['date'] );
 
425
 
426
  // Remove Builder
427
- if ( isset( $existing['builder_layout'] ) )
428
  unset( $existing['builder_layout'] );
 
429
 
430
  add_filter( 'the_title', array( $this, 'order_title' ), 5, 2 );
431
 
@@ -435,7 +449,7 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
435
  $columns['order_items'] = __( 'Purchased', 'learnpress' );
436
  $columns['order_date'] = __( 'Date', 'learnpress' );
437
  $columns['order_total'] = __( 'Total', 'learnpress' );
438
- // $columns['order_status'] = '<span class="status_head tips" data-tip="' . esc_attr__( 'Status', 'learnpress' ) . '">' . esc_attr__( 'Status', 'learnpress' ) . '</span>';
439
 
440
  $columns = array_merge( $columns, $existing );
441
 
@@ -445,8 +459,10 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
445
  }
446
 
447
  public function order_title( $title, $post_id ) {
448
- if ( LP_ORDER_CPT == get_post_type( $post_id ) )
449
  $title = learn_press_transaction_order_number( $post_id );
 
 
450
  return $title;
451
  }
452
 
@@ -474,17 +490,17 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
474
  }
475
  }
476
  break;
477
- // case 'order_status' :
478
- // echo learn_press_get_order_status_label( $post->ID );
479
- // echo '<select name="order-status" data-status="lp-' . $the_order->get_status() .'">';
480
  //
481
- // $statuses = learn_press_get_order_statuses();
482
- // foreach ( $statuses as $status => $status_name ) {
483
- // echo '<option data-desc="' . esc_attr( _learn_press_get_order_status_description( $status ) ) . '" value="' . esc_attr( $status ) . '" ' . selected( $status, 'lp-' . $the_order->get_status(), false ) . '>' . esc_html( $status_name ) . '</option>';
484
- // }
485
  //
486
- // echo '</select>';
487
- // break;
488
  case 'order_date' :
489
 
490
  $t_time = get_the_time( 'Y/m/d g:i:s a' );
@@ -493,10 +509,11 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
493
 
494
  $time_diff = current_time( 'timestamp' ) - $time;
495
 
496
- if ( $time_diff > 0 && $time_diff < DAY_IN_SECONDS )
497
  $h_time = sprintf( __( '%s ago', 'learnpress' ), human_time_diff( $time ) );
498
- else
499
  $h_time = mysql2date( 'Y/m/d', $m_time );
 
500
 
501
  echo '<abbr title="' . esc_attr( $t_time ) . '">' . esc_html( apply_filters( 'learn_press_order_column_time', $h_time, $the_order ) ) . '</abbr>';
502
 
@@ -535,9 +552,10 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
535
 
536
  private function _is_archive() {
537
  global $pagenow, $post_type;
538
- if ( !is_admin() || ( $pagenow != 'edit.php' ) || ( 'lp_order' != $post_type ) ) {
539
  return false;
540
  }
 
541
  return true;
542
  }
543
 
@@ -601,8 +619,9 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
601
  }
602
 
603
  public function preparing_to_trash_order( $post_id ) {
604
- if ( LP_ORDER_CPT != get_post_type( $post_id ) )
605
  return;
 
606
  }
607
 
608
  /**
@@ -633,9 +652,10 @@ if ( !class_exists( 'LP_Order_Post_Type' ) ) {
633
  }
634
 
635
  public static function instance() {
636
- if ( !self::$_instance ) {
637
  self::$_instance = new self( LP_ORDER_CPT );
638
  }
 
639
  return self::$_instance;
640
  }
641
 
4
  * @package LearnPress/Classes
5
  * @version 1.0
6
  */
7
+ if ( ! class_exists( 'LP_Order_Post_Type' ) ) {
8
 
9
  // class LP_Order_Post_Type
10
  final class LP_Order_Post_Type extends LP_Abstract_Post_Type {
115
 
116
  // delete all data related user order
117
  if ( $user_id ) {
118
+ // learn_press_delete_user_data( $user_id );
119
  }
120
  }
121
  }
148
  $meta_ids = array();
149
  $remove_ids = array( 0 );
150
  foreach ( $existed as $k => $r ) {
151
+ if ( empty( $user_id[ $k ] ) ) {
152
  $remove_ids[] = $r->meta_id;
153
  continue;
154
  }
155
+ $cases[] = $wpdb->prepare( "WHEN meta_id = %d THEN %d", $r->meta_id, $user_id[ $k ] );
156
+ $edited[] = $user_id[ $k ];
157
  $meta_ids[] = $r->meta_id;
158
  }
159
  $sql = "
200
 
201
  public function save_order( $post_id ) {
202
  global $action;
203
+ if ( wp_is_post_revision( $post_id ) ) {
204
  return;
205
+ }
206
  if ( $action == 'editpost' && get_post_type( $post_id ) == 'lp_order' ) {
207
  remove_action( 'save_post', array( $this, 'save_order' ) );
208
  $user_id = learn_press_get_request( 'order-customer' );
219
  $order_statuses = array_keys( $order_statuses );
220
  $status = learn_press_get_request( 'order-status' );
221
 
222
+ if ( ! in_array( $status, $order_statuses ) ) {
223
  $status = reset( $order_statuses );
224
  }
225
 
244
  }
245
 
246
  public function admin_footer() {
247
+ if ( ! $this->_is_archive() ) {
248
  return;
249
  }
250
  ?>
258
 
259
  public function posts_where_paged( $where ) {
260
  global $wpdb, $wp_query;
261
+ if ( ! $this->_is_archive() || ! $this->_is_search() ) {
262
  return $where;
263
  }
264
 
276
  }
277
 
278
  public function posts_fields( $fields ) {
279
+ if ( ! $this->_is_archive() || ! $this->_is_search() ) {
280
  return $fields;
281
  }
282
  $fields .= ", uu.ID as user_ID, uu.display_name as user_display_name";
283
+
284
  return $fields;
285
  }
286
 
287
  public function posts_orderby( $orderby ) {
288
+ if ( ! $this->_is_archive() || ! $this->_is_search() ) {
289
  return $orderby;
290
  }
291
+
292
  return $orderby;
293
  }
294
 
295
  public function posts_join_paged( $join ) {
296
+ if ( ! $this->_is_archive() || ! $this->_is_search() ) {
297
  return $join;
298
  }
299
  global $wpdb;
300
  $join .= " INNER JOIN {$wpdb->postmeta} ON {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id";
301
  $join .= " INNER JOIN {$wpdb->users} uu ON uu.ID = {$wpdb->postmeta}.meta_value";
302
  $join .= " INNER JOIN {$wpdb->learnpress_order_items} AS orderItem ON orderItem.order_id = {$wpdb->posts}.ID";
303
+
304
  return $join;
305
  }
306
 
313
  */
314
  public function sortable_columns( $columns ) {
315
  $columns['order_student'] = 'student';
316
+
317
  return $columns;
318
  }
319
 
321
 
322
  global $post, $wp_query;
323
 
324
+ if ( LP_ORDER_CPT != get_post_type() ) {
325
  return;
326
+ }
327
  ob_start();
328
  ?>
329
  <script>
330
  $('#update-order-status').click(function () {
331
  var $button = $(this).attr('disabled', 'disabled').html('<?php _e( 'Processing...', 'learnpress' ); ?>');
332
  $.ajax({
333
+ url: ajaxurl,
334
+ type: 'POST',
335
  dataType: 'json',
336
+ data: {
337
+ action: 'update_order_status',
338
  order_id: '<?php echo $post->ID; ?>',
339
+ status: $('select[name="learn_press_order_status"]').val()
340
  },
341
+ success: function (res) {
342
  if (res.status) {
343
  $('.order-data-status')
344
  .removeClass('pending completed')
347
  }
348
  $button.removeAttr('disabled').html('<?php _e( 'Apply', 'learnpress' ); ?>');
349
  },
350
+ error: function () {
351
  $button.removeAttr('disabled').html('<?php _e( 'Apply', 'learnpress' ); ?>');
352
  }
353
  });
359
  }
360
 
361
  public function update_status() {
362
+ $order_id = ! empty( $_REQUEST['order_id'] ) ? $_REQUEST['order_id'] : 0;
363
+ $status = ! empty( $_REQUEST['status'] ) ? $_REQUEST['status'] : 'Pending';
364
  learn_press_update_order_status( $order_id, $status );
365
 
366
  wp_send_json(
372
  }
373
 
374
  public function row_actions( $actions, $post ) {
375
+ if ( ! empty( $actions['inline hide-if-no-js'] ) ) {
376
  unset( $actions['inline hide-if-no-js'] );
377
  }
378
+ if ( ! empty( $actions['edit'] ) ) {
379
  $actions['edit'] = preg_replace( '/>(.*?)<\/a>/', ">" . __( 'View Order', 'learnpress' ) . "</a>", $actions['edit'] );
380
  }
381
+
382
  return $actions;
383
  }
384
 
391
  */
392
  public function pre_get_posts( $wp_query ) {
393
  if ( is_admin() ) {
394
+ if ( ! empty( $wp_query->query['post_type'] ) && ( $wp_query->query['post_type'] == LP_ORDER_CPT ) ) {
395
  $wp_query->set( 'orderby', 'date' );
396
  $wp_query->set( 'order', 'desc' );
397
  }
398
  }
399
+
400
  return $wp_query;
401
  }
402
 
412
  }
413
 
414
  // Remove Title - adding it back below
415
+ if ( isset( $existing['title'] ) ) {
416
  unset( $existing['title'] );
417
+ }
418
 
419
  // Remove Format
420
+ if ( isset( $existing['format'] ) ) {
421
  unset( $existing['format'] );
422
+ }
423
 
424
  // Remove Author
425
+ if ( isset( $existing['author'] ) ) {
426
  unset( $existing['author'] );
427
+ }
428
 
429
  // Remove Comments
430
+ if ( isset( $existing['comments'] ) ) {
431
  unset( $existing['comments'] );
432
+ }
433
 
434
  // Remove Date
435
+ if ( isset( $existing['date'] ) ) {
436
  unset( $existing['date'] );
437
+ }
438
 
439
  // Remove Builder
440
+ if ( isset( $existing['builder_layout'] ) ) {
441
  unset( $existing['builder_layout'] );
442
+ }
443
 
444
  add_filter( 'the_title', array( $this, 'order_title' ), 5, 2 );
445
 
449
  $columns['order_items'] = __( 'Purchased', 'learnpress' );
450
  $columns['order_date'] = __( 'Date', 'learnpress' );
451
  $columns['order_total'] = __( 'Total', 'learnpress' );
452
+ $columns['order_status'] = '<span class="status_head tips" data-tip="' . esc_attr__( 'Status', 'learnpress' ) . '">' . esc_attr__( 'Status', 'learnpress' ) . '</span>';
453
 
454
  $columns = array_merge( $columns, $existing );
455
 
459
  }
460
 
461
  public function order_title( $title, $post_id ) {
462
+ if ( LP_ORDER_CPT == get_post_type( $post_id ) ) {
463
  $title = learn_press_transaction_order_number( $post_id );
464
+ }
465
+
466
  return $title;
467
  }
468
 
490
  }
491
  }
492
  break;
493
+ case 'order_status' :
494
+ echo learn_press_get_order_status_label( $post->ID );
495
+ // echo '<select name="order-status" data-status="lp-' . $the_order->get_status() . '">';
496
  //
497
+ // $statuses = learn_press_get_order_statuses();
498
+ // foreach ( $statuses as $status => $status_name ) {
499
+ // echo '<option data-desc="' . esc_attr( _learn_press_get_order_status_description( $status ) ) . '" value="' . esc_attr( $status ) . '" ' . selected( $status, 'lp-' . $the_order->get_status(), false ) . '>' . esc_html( $status_name ) . '</option>';
500
+ // }
501
  //
502
+ // echo '</select>';
503
+ break;
504
  case 'order_date' :
505
 
506
  $t_time = get_the_time( 'Y/m/d g:i:s a' );
509
 
510
  $time_diff = current_time( 'timestamp' ) - $time;
511
 
512
+ if ( $time_diff > 0 && $time_diff < DAY_IN_SECONDS ) {
513
  $h_time = sprintf( __( '%s ago', 'learnpress' ), human_time_diff( $time ) );
514
+ } else {
515
  $h_time = mysql2date( 'Y/m/d', $m_time );
516
+ }
517
 
518
  echo '<abbr title="' . esc_attr( $t_time ) . '">' . esc_html( apply_filters( 'learn_press_order_column_time', $h_time, $the_order ) ) . '</abbr>';
519
 
552
 
553
  private function _is_archive() {
554
  global $pagenow, $post_type;
555
+ if ( ! is_admin() || ( $pagenow != 'edit.php' ) || ( 'lp_order' != $post_type ) ) {
556
  return false;
557
  }
558
+
559
  return true;
560
  }
561
 
619
  }
620
 
621
  public function preparing_to_trash_order( $post_id ) {
622
+ if ( LP_ORDER_CPT != get_post_type( $post_id ) ) {
623
  return;
624
+ }
625
  }
626
 
627
  /**
652
  }
653
 
654
  public static function instance() {
655
+ if ( ! self::$_instance ) {
656
  self::$_instance = new self( LP_ORDER_CPT );
657
  }
658
+
659
  return self::$_instance;
660
  }
661
 
inc/lp-constants.php CHANGED
@@ -4,7 +4,7 @@
4
  */
5
  $upload_dir = wp_upload_dir();
6
  // version
7
- define( 'LEARNPRESS_VERSION', '2.1.7.4' );
8
 
9
  define( 'LP_WP_CONTENT', basename( WP_CONTENT_DIR ) );
10
 
4
  */
5
  $upload_dir = wp_upload_dir();
6
  // version
7
+ define( 'LEARNPRESS_VERSION', '2.1.8.1' );
8
 
9
  define( 'LP_WP_CONTENT', basename( WP_CONTENT_DIR ) );
10
 
inc/lp-core-functions.php CHANGED
@@ -2277,7 +2277,7 @@ function learn_press_auto_enroll_user_to_courses( $order_id ) {
2277
  if ( ! $user->is_exists() ) {
2278
  continue;
2279
  }
2280
- if ( $user->has( 'enrolled-course', $course->id ) ) {
2281
  continue;
2282
  }
2283
  // error. this scripts will create new order each course item
@@ -2629,6 +2629,7 @@ function learn_press_is_added_to_cart( $course_id ) {
2629
  return $cart->has_item( $course_id );
2630
  }
2631
 
 
2632
  function learn_press_get_requested_post_type() {
2633
  global $pagenow;
2634
  if ( $pagenow == 'post-new.php' && ! empty( $_GET['post_type'] ) ) {
2277
  if ( ! $user->is_exists() ) {
2278
  continue;
2279
  }
2280
+ if ( $user->has( 'enrolled-course', $course->id, true, $order_id ) ) {
2281
  continue;
2282
  }
2283
  // error. this scripts will create new order each course item
2629
  return $cart->has_item( $course_id );
2630
  }
2631
 
2632
+ // useless
2633
  function learn_press_get_requested_post_type() {
2634
  global $pagenow;
2635
  if ( $pagenow == 'post-new.php' && ! empty( $_GET['post_type'] ) ) {
inc/lp-init.php CHANGED
@@ -3,7 +3,7 @@
3
  * Functions that are used to init a course to reduce SQL queries
4
  */
5
 
6
- if ( !defined( 'ABSPATH' ) ) {
7
  exit; // Exit if accessed directly
8
  }
9
  add_action( 'init', '_learn_press_upgrade_table' );
@@ -22,6 +22,7 @@ function _learn_press_upgrade_table() {
22
  $query = "SHOW COLUMNS FROM {$wpdb->prefix}learnpress_user_items LIKE 'parent_id'";
23
  if ( $row = $wpdb->get_var( $query ) ) {
24
  update_option( 'learn_press_upgrade_table_20', 'yes' );
 
25
  return;
26
  }
27
 
@@ -52,7 +53,7 @@ function learn_press_setup_pages() {
52
  $page_ids[] = $id;
53
  }
54
  }
55
- if ( !$page_ids ) {
56
  return;
57
  }
58
  $query = $wpdb->prepare( "
@@ -61,7 +62,7 @@ function learn_press_setup_pages() {
61
  WHERE %d AND ID IN(" . join( ',', $page_ids ) . ")
62
  AND post_status <> %s
63
  ", 1, 'trash' );
64
- if ( !$pages = $wpdb->get_results( $query ) ) {
65
  return;
66
  }
67
  foreach ( $pages as $page ) {
@@ -88,17 +89,17 @@ function learn_press_setup_course_data( $the_course ) {
88
  } elseif ( isset( $the_course->ID ) ) {
89
  $post = $the_course;
90
  } elseif ( is_string( $the_course ) ) {
91
- if ( !empty( $wp_query->queried_object ) ) {
92
  if ( $wp_query->queried_object->post_name == $the_course ) {
93
  $post = $wp_query->queried_object;
94
  }
95
  }
96
- if ( !$post ) {
97
  $post = learn_press_get_post_by_name( $the_course, 'lp_course' );
98
  }
99
  }
100
 
101
- if ( !$post || $post->post_type != LP_COURSE_CPT ) {
102
  return $course;
103
  }
104
  _learn_press_get_course_curriculum( $post->ID );
@@ -134,16 +135,17 @@ function _learn_press_count_users_enrolled_courses( $course_ids ) {
134
  ", $format );
135
  if ( $results = $wpdb->get_results( $query ) ) {
136
  foreach ( $results as $c => $v ) {
137
- $counts[$v->course_id] = absint( $v->count );
138
  }
139
  }
140
  }
141
  foreach ( $course_ids as $course_id ) {
142
- if ( !array_key_exists( $course_id, $counts ) ) {
143
- $counts[$course_id] = 0;
144
  }
145
  }
146
  LP_Cache::set_enrolled_courses( $counts );
 
147
  return $counts;
148
  }
149
 
@@ -157,14 +159,14 @@ function _learn_press_get_courses_curriculum( $course_ids, $force = false, $pars
157
  if ( array_key_exists( $course_id, $curriculum ) ) {
158
  $remove_courses[] = $course_id;
159
  } else {
160
- $curriculum[$course_id] = array();
161
  }
162
  }
163
 
164
  if ( $remove_courses ) {
165
  $course_ids = array_diff( $course_ids, $remove_courses );
166
  }
167
- if ( !$course_ids ) {
168
  return;
169
  }
170
  $in = array_fill( 0, sizeof( $course_ids ), '%d' );
@@ -194,7 +196,7 @@ function _learn_press_get_courses_curriculum( $course_ids, $force = false, $pars
194
  $meta_cache_ids = $course_ids;
195
 
196
  if ( $rows ) {
197
- if ( !function_exists( 'get_default_post_to_edit' ) ) {
198
  include_once ABSPATH . '/wp-admin/includes/post.php';
199
  }
200
 
@@ -225,8 +227,8 @@ function _learn_press_get_courses_curriculum( $course_ids, $force = false, $pars
225
  ) {
226
  $section->{$prop} = $row->{$prop};
227
  }
228
- $section->items = array();
229
- $_curriculum[$section_id] = $section;
230
  }
231
  $item = new stdClass();
232
  foreach ( array( 'section_item_id', 'section_id', 'item_id', 'item_order', 'item_type' ) as $prop ) {
@@ -246,10 +248,10 @@ function _learn_press_get_courses_curriculum( $course_ids, $force = false, $pars
246
  } elseif ( $item->post_type == LP_LESSON_CPT ) {
247
  $lesson_ids[] = $item->ID;
248
  }
249
- if ( empty( $post_names[$item->post_type] ) ) {
250
- $post_names[$item->post_type] = array();
251
  }
252
- $post_names[$item->post_type][$item->post_name] = $item->ID;
253
  if ( $item->post_type == LP_QUIZ_CPT ) {
254
  $cached_post = wp_cache_get( $item->ID, 'posts' );
255
  if ( $cached_post ) {
@@ -260,7 +262,7 @@ function _learn_press_get_courses_curriculum( $course_ids, $force = false, $pars
260
  }
261
  }
262
  }
263
- $_curriculum[$section_id]->items[] = $item;
264
  wp_cache_delete( $item->ID, 'posts' );
265
  wp_cache_add( $item->ID, $item, 'posts' );
266
  }
@@ -291,7 +293,7 @@ function _learn_press_get_courses_curriculum( $course_ids, $force = false, $pars
291
  }
292
  }
293
  }
294
- $curriculum[$course_id] = $_curriculum;
295
  }
296
  $meta_cache_ids = array_unique( $meta_cache_ids );
297
  update_meta_cache( 'post', $meta_cache_ids );
@@ -314,6 +316,7 @@ function _learn_press_get_courses_curriculum( $course_ids, $force = false, $pars
314
  LP_Cache::set_course_curriculum( $curriculum );
315
  LP_Cache::set_post_names( $post_names );
316
  }
 
317
  return $curriculum;
318
  }
319
 
@@ -328,11 +331,12 @@ function _learn_press_get_course_curriculum( $course_id, $force = false ) {
328
  $curriculum = LP_Cache::get_course_curriculum( $course_id );
329
  if ( ( $curriculum == false ) || $force ) {
330
  $curriculum = _learn_press_get_courses_curriculum( array( $course_id ), $force );
331
- if ( empty( $curriculum[$course_id] ) ) {
332
- $curriculum[$course_id] = array();
333
  }
334
- $curriculum = $curriculum[$course_id];
335
  }
 
336
  return $curriculum;
337
  }
338
 
@@ -345,13 +349,13 @@ function _learn_press_get_quiz_questions( $quiz_ids ) {
345
  global $wpdb;
346
  settype( $quiz_ids, 'array' );
347
  for ( $n = sizeof( $quiz_ids ), $i = $n - 1; $i >= 0; $i -- ) {
348
- $q = wp_cache_get( $quiz_ids[$i], 'posts' );
349
  if ( $q && property_exists( $q, 'questions' ) ) {
350
- unset( $quiz_ids[$i] );
351
  }
352
  }
353
  $meta_cache_ids = array();
354
- if ( !$quiz_ids ) {
355
  return $meta_cache_ids;
356
  }
357
  $marks = array();
@@ -383,43 +387,50 @@ function _learn_press_get_quiz_questions( $quiz_ids ) {
383
  foreach ( $answers as $row ) {
384
  if ( $row->id != $question_id ) {
385
  $question_id = $row->id;
386
- if ( empty( $questions[$question_id] ) ) {
387
  continue;
388
  }
389
- $questions[$question_id]->answers = array();
390
- $questions[$question_id]->type = $row->type;
391
  }
392
- if ( !$answer_data = maybe_unserialize( $row->answer_data ) ) {
393
  continue;
394
  }
395
- $answer_data['id'] = $row->question_answer_id;
396
- $answer_data['order'] = $row->answer_order;
397
- $answer_data['type'] = $row->type;
398
- $questions[$question_id]->answers[$row->question_answer_id] = $answer_data;
399
  }
400
  }
401
 
402
  foreach ( $questions as $question ) {
403
- if ( !isset( $marks[$question->quiz_id] ) ) {
404
- $marks[$question->quiz_id] = 0;
405
  }
406
- if ( empty( $quiz_questions[$question->quiz_id] ) ) {
407
- $quiz_questions[$question->quiz_id] = array();
408
  }
409
- $marks[$question->quiz_id] += $question->mark;
410
- $quiz_questions[$question->quiz_id][] = $question->ID;
411
- wp_cache_add( $question->ID, $question, 'posts' );
412
- $post_names[$question->post_name] = $question->ID;
 
 
 
 
 
 
 
413
  }
414
 
415
  $meta_cache_ids = array_merge( $meta_cache_ids, $question_ids );
416
  foreach ( $marks as $id => $mark ) {
417
  $quiz = get_post( $id );
418
  $quiz->mark = $mark;
419
- $quiz->questions = is_admin() ? maybe_serialize( $quiz_questions[$id] ) : $quiz_questions[$id];
420
  wp_cache_delete( $id, 'posts' );
421
  wp_cache_add( $id, $quiz, 'posts' );
422
- $post_names[$quiz->post_name] = $id;
423
  }
424
  }
425
  $fetched_ids = array_keys( $marks );
@@ -446,13 +457,14 @@ function learn_press_setup_user_course_data( $user_id, $course_id, $force = fals
446
  foreach ( $course_id as $cid ) {
447
  learn_press_setup_user_course_data( $user_id, $cid, $force );
448
  }
 
449
  return;
450
  }
451
- if ( !did_action( 'learn_press_setup_course_data_' . $course_id ) ) {
452
  learn_press_setup_course_data( $course_id );
453
  }
454
 
455
- if ( !$course_id ) {
456
  $course_id = get_the_ID();
457
  }
458
 
@@ -462,10 +474,10 @@ function learn_press_setup_user_course_data( $user_id, $course_id, $force = fals
462
  _learn_press_get_user_course_orders();
463
  _learn_press_parse_user_item_statuses( $user_id, $course_id );
464
  global $lp_query;
465
- if ( !empty( $lp_query->query_vars['lesson'] ) && !empty( $item_statuses[$user_id . '-' . $course_id . '-' . $course_id] ) && $item_statuses[$user_id . '-' . $course_id . '-' . $course_id] != 'finished' ) {
466
  $user_item_id = learn_press_get_user_item_id( $user_id, $course_id );
467
  $lesson = learn_press_get_post_by_name( $lp_query->query_vars['lesson'], LP_LESSON_CPT );
468
- if ( empty( $item_statuses[$user_id . '-' . $course_id . '-' . $lesson->ID] ) ) {
469
  learn_press_update_user_item_field( array(
470
  'user_id' => $user_id,
471
  'item_id' => $lesson->ID,
@@ -481,15 +493,15 @@ function learn_press_setup_user_course_data( $user_id, $course_id, $force = fals
481
  }
482
 
483
  function _learn_press_parse_user_item_statuses( $user_id, $course_id, $force = false ) {
484
- if ( did_action( "learn_press_parse_user_item_statuses_{$user_id}_{$course_id}" ) && !$force ) {
485
  return;
486
  }
487
  global $wpdb;
488
- if ( !$course_id ) {
489
  $course_id = get_the_ID();
490
  }
491
  $course = get_post( $course_id );
492
- $item_ids = !empty( $course->curriculum_items ) ? $course->curriculum_items : array();
493
  $item_ids = maybe_unserialize( $item_ids );
494
  if ( $item_ids ) {
495
  $in = implode( ', ', $item_ids );
@@ -527,21 +539,21 @@ function _learn_press_parse_user_item_statuses( $user_id, $course_id, $force = f
527
  $item_statuses = LP_Cache::get_item_statuses( false, array() );
528
  $quiz_grades = LP_Cache::get_quiz_grade( false, array() );
529
  foreach ( $item_ids as $id ) {
530
- if ( !array_key_exists( $id, $item_statuses ) || $force ) {
531
- $item_statuses[$user_id . '-' . $course_id . '-' . $id] = '';
532
  }
533
 
534
- if ( !array_key_exists( $id, $item_statuses ) || $force ) {
535
- $quiz_grades[$user_id . '-' . $course_id . '-' . $id] = '';
536
  }
537
  }
538
  if ( $items ) {
539
  foreach ( $items as $item ) {
540
- $item_statuses[$user_id . '-' . $course_id . '-' . $item->item_id] = learn_press_validate_item_status( $item );
541
- if ( !empty($item->grade) ) {
542
- $quiz_grades[$user_id . '-' . $course_id . '-' . $item->item_id] = $item->grade;
543
- }else{
544
- $quiz_grades[$user_id . '-' . $course_id . '-' . $item->item_id] = '';
545
  }
546
  }
547
  }
@@ -553,24 +565,29 @@ function _learn_press_parse_user_item_statuses( $user_id, $course_id, $force = f
553
  }
554
 
555
  function learn_press_validate_item_status( $item ) {
556
- $end_time = $item->end_time !== '0000-00-00 00:00:00';
557
- $status = $end_time > 0 ? ( $item->item_type != LP_COURSE_CPT ? 'completed' : 'finished' ) : $item->status;
558
- if ( $item->item_type == LP_QUIZ_CPT && $item->status == 'completed' && is_null( $item->grade ) ) {
559
- $user = learn_press_get_user( $item->user_id );
560
- $grade = $user->get_quiz_graduation( $item->item_id, $item->ref_id );
561
- LP_Cache::set_quiz_grade( sprintf( '%d-%d-%d', $item->user_id, $item->ref_id, $item->item_id ), $grade );
562
- learn_press_update_user_item_meta( $item->user_item_id, '_quiz_grade', $grade );
563
- }
564
- if ( $end_time && !in_array( $item->status, array( 'completed', 'finished' ) ) ) {
565
- global $wpdb;
566
- $data = (array) $item;
567
- $data['status'] = $item->item_type != LP_COURSE_CPT ? 'completed' : 'finished';
568
- learn_press_update_user_item_field(
569
- $data,
570
- array(
571
- 'user_item_id' => $item->user_item_id
572
- )
573
- );
 
 
 
 
 
574
  }
575
 
576
  return $status;
@@ -584,11 +601,11 @@ function learn_press_validate_item_status( $item ) {
584
  */
585
  function _learn_press_get_user_course_orders( $user_id = 0, $force = false ) {
586
  global $wpdb;
587
- if ( !$user_id ) {
588
  $user_id = learn_press_get_current_user_id();
589
  }
590
  $data = LP_Cache::get_user_course_order( false, array() );
591
- if ( !array_key_exists( $user_id, $data ) || $force ) {
592
  $results = array();
593
  $query = $wpdb->prepare( "
594
  SELECT o.*, oim.meta_value as course_id
@@ -600,21 +617,21 @@ function _learn_press_get_user_course_orders( $user_id = 0, $force = false ) {
600
  ", '_course_id', '_user_id', $user_id, 'trash', LP_ORDER_CPT );
601
  if ( $rows = $wpdb->get_results( $query ) ) {
602
  foreach ( $rows as $row ) {
603
- if ( empty( $results[$row->course_id] ) ) {
604
- $results[$row->course_id] = array(
605
  $row->ID => $row
606
  );
607
  } else {
608
- $results[$row->course_id] = array_reverse( $results[$row->course_id], true );
609
- $results[$row->course_id][$row->ID] = $row;
610
- $results[$row->course_id] = array_reverse( $results[$row->course_id], true );
611
  }
612
  }
613
  }
614
- $data[$user_id] = $results;
615
  LP_Cache::set_user_course_order( $data );
616
  } else {
617
- $results = $data[$user_id];
618
  }
619
 
620
  return $results;
@@ -622,7 +639,7 @@ function _learn_press_get_user_course_orders( $user_id = 0, $force = false ) {
622
 
623
  function _learn_press_get_user_profile_orders( $user_id = 0, $paged = 1, $limit = 10 ) {
624
  global $wpdb;
625
- if ( !$user_id ) {
626
  $user_id = learn_press_get_current_user_id();
627
  }
628
  if ( empty( $paged ) ) {
@@ -633,7 +650,7 @@ function _learn_press_get_user_profile_orders( $user_id = 0, $paged = 1, $limit
633
  }
634
  $data = LP_Cache::get_user_profile_orders( false, array() );
635
 
636
- if ( !array_key_exists( $user_id, $data ) ) {
637
  $limit = absint( $limit );
638
  $offset = absint( $paged - 1 ) * $limit;
639
  $results = array();
@@ -660,17 +677,17 @@ function _learn_press_get_user_profile_orders( $user_id = 0, $paged = 1, $limit
660
  $rows = array_slice( $rows, $offset, $limit );
661
  $order_ids = array();
662
  foreach ( $rows as $row ) {
663
- $results['rows'][$row->ID] = $row;
664
  wp_cache_add( $row->ID, $row, 'posts' );
665
  $order_ids[] = $row->ID;
666
  }
667
  update_meta_cache( 'post', $order_ids );
668
  }
669
 
670
- $data[$user_id] = $results;
671
  LP_Cache::set_user_profile_orders( $data );
672
  } else {
673
- $results = $data[$user_id];
674
  }
675
 
676
 
@@ -699,18 +716,18 @@ function _learn_press_setup_question( $id ) {
699
  $question_id = 0;
700
  foreach ( $answers as $row ) {
701
  if ( $row->ID != $question_id ) {
702
- $question_id = $row->ID;
703
- $questions[$question_id] = $row;
704
- $questions[$question_id]->answers = array();
705
- $questions[$question_id]->type = $row->type;
706
  }
707
- if ( !$answer_data = maybe_unserialize( $row->answer_data ) ) {
708
  continue;
709
  }
710
- $answer_data['id'] = $row->question_answer_id;
711
- $answer_data['order'] = $row->answer_order;
712
- $answer_data['type'] = $row->type;
713
- $questions[$question_id]->answers[$row->question_answer_id] = $answer_data;
714
  }
715
  foreach ( $questions as $question ) {
716
  $question->answers = maybe_serialize( $question->answers );
3
  * Functions that are used to init a course to reduce SQL queries
4
  */
5
 
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
  exit; // Exit if accessed directly
8
  }
9
  add_action( 'init', '_learn_press_upgrade_table' );
22
  $query = "SHOW COLUMNS FROM {$wpdb->prefix}learnpress_user_items LIKE 'parent_id'";
23
  if ( $row = $wpdb->get_var( $query ) ) {
24
  update_option( 'learn_press_upgrade_table_20', 'yes' );
25
+
26
  return;
27
  }
28
 
53
  $page_ids[] = $id;
54
  }
55
  }
56
+ if ( ! $page_ids ) {
57
  return;
58
  }
59
  $query = $wpdb->prepare( "
62
  WHERE %d AND ID IN(" . join( ',', $page_ids ) . ")
63
  AND post_status <> %s
64
  ", 1, 'trash' );
65
+ if ( ! $pages = $wpdb->get_results( $query ) ) {
66
  return;
67
  }
68
  foreach ( $pages as $page ) {
89
  } elseif ( isset( $the_course->ID ) ) {
90
  $post = $the_course;
91
  } elseif ( is_string( $the_course ) ) {
92
+ if ( ! empty( $wp_query->queried_object ) ) {
93
  if ( $wp_query->queried_object->post_name == $the_course ) {
94
  $post = $wp_query->queried_object;
95
  }
96
  }
97
+ if ( ! $post ) {
98
  $post = learn_press_get_post_by_name( $the_course, 'lp_course' );
99
  }
100
  }
101
 
102
+ if ( ! $post || $post->post_type != LP_COURSE_CPT ) {
103
  return $course;
104
  }
105
  _learn_press_get_course_curriculum( $post->ID );
135
  ", $format );
136
  if ( $results = $wpdb->get_results( $query ) ) {
137
  foreach ( $results as $c => $v ) {
138
+ $counts[ $v->course_id ] = absint( $v->count );
139
  }
140
  }
141
  }
142
  foreach ( $course_ids as $course_id ) {
143
+ if ( ! array_key_exists( $course_id, $counts ) ) {
144
+ $counts[ $course_id ] = 0;
145
  }
146
  }
147
  LP_Cache::set_enrolled_courses( $counts );
148
+
149
  return $counts;
150
  }
151
 
159
  if ( array_key_exists( $course_id, $curriculum ) ) {
160
  $remove_courses[] = $course_id;
161
  } else {
162
+ $curriculum[ $course_id ] = array();
163
  }
164
  }
165
 
166
  if ( $remove_courses ) {
167
  $course_ids = array_diff( $course_ids, $remove_courses );
168
  }
169
+ if ( ! $course_ids ) {
170
  return;
171
  }
172
  $in = array_fill( 0, sizeof( $course_ids ), '%d' );
196
  $meta_cache_ids = $course_ids;
197
 
198
  if ( $rows ) {
199
+ if ( ! function_exists( 'get_default_post_to_edit' ) ) {
200
  include_once ABSPATH . '/wp-admin/includes/post.php';
201
  }
202
 
227
  ) {
228
  $section->{$prop} = $row->{$prop};
229
  }
230
+ $section->items = array();
231
+ $_curriculum[ $section_id ] = $section;
232
  }
233
  $item = new stdClass();
234
  foreach ( array( 'section_item_id', 'section_id', 'item_id', 'item_order', 'item_type' ) as $prop ) {
248
  } elseif ( $item->post_type == LP_LESSON_CPT ) {
249
  $lesson_ids[] = $item->ID;
250
  }
251
+ if ( empty( $post_names[ $item->post_type ] ) ) {
252
+ $post_names[ $item->post_type ] = array();
253
  }
254
+ $post_names[ $item->post_type ][ $item->post_name ] = $item->ID;
255
  if ( $item->post_type == LP_QUIZ_CPT ) {
256
  $cached_post = wp_cache_get( $item->ID, 'posts' );
257
  if ( $cached_post ) {
262
  }
263
  }
264
  }
265
+ $_curriculum[ $section_id ]->items[] = $item;
266
  wp_cache_delete( $item->ID, 'posts' );
267
  wp_cache_add( $item->ID, $item, 'posts' );
268
  }
293
  }
294
  }
295
  }
296
+ $curriculum[ $course_id ] = $_curriculum;
297
  }
298
  $meta_cache_ids = array_unique( $meta_cache_ids );
299
  update_meta_cache( 'post', $meta_cache_ids );
316
  LP_Cache::set_course_curriculum( $curriculum );
317
  LP_Cache::set_post_names( $post_names );
318
  }
319
+
320
  return $curriculum;
321
  }
322
 
331
  $curriculum = LP_Cache::get_course_curriculum( $course_id );
332
  if ( ( $curriculum == false ) || $force ) {
333
  $curriculum = _learn_press_get_courses_curriculum( array( $course_id ), $force );
334
+ if ( empty( $curriculum[ $course_id ] ) ) {
335
+ $curriculum[ $course_id ] = array();
336
  }
337
+ $curriculum = $curriculum[ $course_id ];
338
  }
339
+
340
  return $curriculum;
341
  }
342
 
349
  global $wpdb;
350
  settype( $quiz_ids, 'array' );
351
  for ( $n = sizeof( $quiz_ids ), $i = $n - 1; $i >= 0; $i -- ) {
352
+ $q = wp_cache_get( $quiz_ids[ $i ], 'posts' );
353
  if ( $q && property_exists( $q, 'questions' ) ) {
354
+ unset( $quiz_ids[ $i ] );
355
  }
356
  }
357
  $meta_cache_ids = array();
358
+ if ( ! $quiz_ids ) {
359
  return $meta_cache_ids;
360
  }
361
  $marks = array();
387
  foreach ( $answers as $row ) {
388
  if ( $row->id != $question_id ) {
389
  $question_id = $row->id;
390
+ if ( empty( $questions[ $question_id ] ) ) {
391
  continue;
392
  }
393
+ $questions[ $question_id ]->answers = array();
394
+ $questions[ $question_id ]->type = $row->type;
395
  }
396
+ if ( ! $answer_data = maybe_unserialize( $row->answer_data ) ) {
397
  continue;
398
  }
399
+ $answer_data['id'] = $row->question_answer_id;
400
+ $answer_data['order'] = $row->answer_order;
401
+ $answer_data['type'] = $row->type;
402
+ $questions[ $question_id ]->answers[ $row->question_answer_id ] = $answer_data;
403
  }
404
  }
405
 
406
  foreach ( $questions as $question ) {
407
+ if ( ! isset( $marks[ $question->quiz_id ] ) ) {
408
+ $marks[ $question->quiz_id ] = 0;
409
  }
410
+ if ( empty( $quiz_questions[ $question->quiz_id ] ) ) {
411
+ $quiz_questions[ $question->quiz_id ] = array();
412
  }
413
+ $marks[ $question->quiz_id ] += $question->mark;
414
+ $quiz_questions[ $question->quiz_id ][] = $question->ID;
415
+
416
+ // Issue with FIB
417
+ if ( false !== wp_cache_get( $question->ID, 'posts' ) ) {
418
+ wp_cache_replace( $question->ID, $question, 'posts' );
419
+ } else {
420
+ wp_cache_add( $question->ID, $question, 'posts' );
421
+ }
422
+
423
+ $post_names[ $question->post_name ] = $question->ID;
424
  }
425
 
426
  $meta_cache_ids = array_merge( $meta_cache_ids, $question_ids );
427
  foreach ( $marks as $id => $mark ) {
428
  $quiz = get_post( $id );
429
  $quiz->mark = $mark;
430
+ $quiz->questions = is_admin() ? maybe_serialize( $quiz_questions[ $id ] ) : $quiz_questions[ $id ];
431
  wp_cache_delete( $id, 'posts' );
432
  wp_cache_add( $id, $quiz, 'posts' );
433
+ $post_names[ $quiz->post_name ] = $id;
434
  }
435
  }
436
  $fetched_ids = array_keys( $marks );
457
  foreach ( $course_id as $cid ) {
458
  learn_press_setup_user_course_data( $user_id, $cid, $force );
459
  }
460
+
461
  return;
462
  }
463
+ if ( ! did_action( 'learn_press_setup_course_data_' . $course_id ) ) {
464
  learn_press_setup_course_data( $course_id );
465
  }
466
 
467
+ if ( ! $course_id ) {
468
  $course_id = get_the_ID();
469
  }
470
 
474
  _learn_press_get_user_course_orders();
475
  _learn_press_parse_user_item_statuses( $user_id, $course_id );
476
  global $lp_query;
477
+ if ( ! empty( $lp_query->query_vars['lesson'] ) && ! empty( $item_statuses[ $user_id . '-' . $course_id . '-' . $course_id ] ) && $item_statuses[ $user_id . '-' . $course_id . '-' . $course_id ] != 'finished' ) {
478
  $user_item_id = learn_press_get_user_item_id( $user_id, $course_id );
479
  $lesson = learn_press_get_post_by_name( $lp_query->query_vars['lesson'], LP_LESSON_CPT );
480
+ if ( empty( $item_statuses[ $user_id . '-' . $course_id . '-' . $lesson->ID ] ) ) {
481
  learn_press_update_user_item_field( array(
482
  'user_id' => $user_id,
483
  'item_id' => $lesson->ID,
493
  }
494
 
495
  function _learn_press_parse_user_item_statuses( $user_id, $course_id, $force = false ) {
496
+ if ( did_action( "learn_press_parse_user_item_statuses_{$user_id}_{$course_id}" ) && ! $force ) {
497
  return;
498
  }
499
  global $wpdb;
500
+ if ( ! $course_id ) {
501
  $course_id = get_the_ID();
502
  }
503
  $course = get_post( $course_id );
504
+ $item_ids = ! empty( $course->curriculum_items ) ? $course->curriculum_items : array();
505
  $item_ids = maybe_unserialize( $item_ids );
506
  if ( $item_ids ) {
507
  $in = implode( ', ', $item_ids );
539
  $item_statuses = LP_Cache::get_item_statuses( false, array() );
540
  $quiz_grades = LP_Cache::get_quiz_grade( false, array() );
541
  foreach ( $item_ids as $id ) {
542
+ if ( ! array_key_exists( $id, $item_statuses ) || $force ) {
543
+ $item_statuses[ $user_id . '-' . $course_id . '-' . $id ] = '';
544
  }
545
 
546
+ if ( ! array_key_exists( $id, $item_statuses ) || $force ) {
547
+ $quiz_grades[ $user_id . '-' . $course_id . '-' . $id ] = '';
548
  }
549
  }
550
  if ( $items ) {
551
  foreach ( $items as $item ) {
552
+ $item_statuses[ $user_id . '-' . $course_id . '-' . $item->item_id ] = learn_press_validate_item_status( $item );
553
+ if ( ! empty( $item->grade ) ) {
554
+ $quiz_grades[ $user_id . '-' . $course_id . '-' . $item->item_id ] = $item->grade;
555
+ } else {
556
+ $quiz_grades[ $user_id . '-' . $course_id . '-' . $item->item_id ] = '';
557
  }
558
  }
559
  }
565
  }
566
 
567
  function learn_press_validate_item_status( $item ) {
568
+ if ( property_exists( $item, 'end_time' ) ) {
569
+
570
+ $end_time = $item->end_time !== '0000-00-00 00:00:00';
571
+ $status = $end_time > 0 ? ( $item->item_type != LP_COURSE_CPT ? 'completed' : 'finished' ) : $item->status;
572
+ if ( $item->item_type == LP_QUIZ_CPT && $item->status == 'completed' && is_null( $item->grade ) ) {
573
+ $user = learn_press_get_user( $item->user_id );
574
+ $grade = $user->get_quiz_graduation( $item->item_id, $item->ref_id );
575
+ LP_Cache::set_quiz_grade( sprintf( '%d-%d-%d', $item->user_id, $item->ref_id, $item->item_id ), $grade );
576
+ learn_press_update_user_item_meta( $item->user_item_id, '_quiz_grade', $grade );
577
+ }
578
+ if ( $end_time && ! in_array( $item->status, array( 'completed', 'finished' ) ) ) {
579
+ global $wpdb;
580
+ $data = (array) $item;
581
+ $data['status'] = $item->item_type != LP_COURSE_CPT ? 'completed' : 'finished';
582
+ learn_press_update_user_item_field(
583
+ $data,
584
+ array(
585
+ 'user_item_id' => $item->user_item_id
586
+ )
587
+ );
588
+ }
589
+ } else {
590
+ $status = $item->status;
591
  }
592
 
593
  return $status;
601
  */
602
  function _learn_press_get_user_course_orders( $user_id = 0, $force = false ) {
603
  global $wpdb;
604
+ if ( ! $user_id ) {
605
  $user_id = learn_press_get_current_user_id();
606
  }
607
  $data = LP_Cache::get_user_course_order( false, array() );
608
+ if ( ! array_key_exists( $user_id, $data ) || $force ) {
609
  $results = array();
610
  $query = $wpdb->prepare( "
611
  SELECT o.*, oim.meta_value as course_id
617
  ", '_course_id', '_user_id', $user_id, 'trash', LP_ORDER_CPT );
618
  if ( $rows = $wpdb->get_results( $query ) ) {
619
  foreach ( $rows as $row ) {
620
+ if ( empty( $results[ $row->course_id ] ) ) {
621
+ $results[ $row->course_id ] = array(
622
  $row->ID => $row
623
  );
624
  } else {
625
+ $results[ $row->course_id ] = array_reverse( $results[ $row->course_id ], true );
626
+ $results[ $row->course_id ][ $row->ID ] = $row;
627
+ $results[ $row->course_id ] = array_reverse( $results[ $row->course_id ], true );
628
  }
629
  }
630
  }
631
+ $data[ $user_id ] = $results;
632
  LP_Cache::set_user_course_order( $data );
633
  } else {
634
+ $results = $data[ $user_id ];
635
  }
636
 
637
  return $results;
639
 
640
  function _learn_press_get_user_profile_orders( $user_id = 0, $paged = 1, $limit = 10 ) {
641
  global $wpdb;
642
+ if ( ! $user_id ) {
643
  $user_id = learn_press_get_current_user_id();
644
  }
645
  if ( empty( $paged ) ) {
650
  }
651
  $data = LP_Cache::get_user_profile_orders( false, array() );
652
 
653
+ if ( ! array_key_exists( $user_id, $data ) ) {
654
  $limit = absint( $limit );
655
  $offset = absint( $paged - 1 ) * $limit;
656
  $results = array();
677
  $rows = array_slice( $rows, $offset, $limit );
678
  $order_ids = array();
679
  foreach ( $rows as $row ) {
680
+ $results['rows'][ $row->ID ] = $row;
681
  wp_cache_add( $row->ID, $row, 'posts' );
682
  $order_ids[] = $row->ID;
683
  }
684
  update_meta_cache( 'post', $order_ids );
685
  }
686
 
687
+ $data[ $user_id ] = $results;
688
  LP_Cache::set_user_profile_orders( $data );
689
  } else {
690
+ $results = $data[ $user_id ];
691
  }
692
 
693
 
716
  $question_id = 0;
717
  foreach ( $answers as $row ) {
718
  if ( $row->ID != $question_id ) {
719
+ $question_id = $row->ID;
720
+ $questions[ $question_id ] = $row;
721
+ $questions[ $question_id ]->answers = array();
722
+ $questions[ $question_id ]->type = $row->type;
723
  }
724
+ if ( ! $answer_data = maybe_unserialize( $row->answer_data ) ) {
725
  continue;
726
  }
727
+ $answer_data['id'] = $row->question_answer_id;
728
+ $answer_data['order'] = $row->answer_order;
729
+ $answer_data['type'] = $row->type;
730
+ $questions[ $question_id ]->answers[ $row->question_answer_id ] = $answer_data;
731
  }
732
  foreach ( $questions as $question ) {
733
  $question->answers = maybe_serialize( $question->answers );
inc/lp-template-functions.php CHANGED
@@ -1526,16 +1526,20 @@ function learn_press_is_content_item_only() {
1526
  * Load course item content only
1527
  */
1528
  function learn_press_load_content_item_only( $name ) {
 
1529
  if ( learn_press_is_content_item_only() ) {
1530
  if ( LP()->global['course-item'] ) {
1531
- remove_action( 'get_header', 'learn_press_load_content_item_only' );
1532
- learn_press_get_template( 'single-course/content-item-only.php' );
1533
  die();
1534
  }
1535
  }
1536
- }
1537
 
1538
- add_action( 'get_header', 'learn_press_load_content_item_only' );
 
 
 
 
 
1539
 
1540
 
1541
  // Fix issue with course content is duplicated if theme use the_content instead of $course->get_description()
@@ -1584,8 +1588,8 @@ function learn_press_check_access_lesson() {
1584
  }
1585
  }
1586
 
1587
- function learn_press_fontend_js_template() {
1588
  learn_press_get_template( 'global/js-template.php' );
1589
  }
1590
 
1591
- add_action( 'wp_footer', 'learn_press_fontend_js_template' );
1526
  * Load course item content only
1527
  */
1528
  function learn_press_load_content_item_only( $name ) {
1529
+
1530
  if ( learn_press_is_content_item_only() ) {
1531
  if ( LP()->global['course-item'] ) {
1532
+ learn_press_get_template( 'single-course/content-item-only.php', array('wp_header'=>$name) );
 
1533
  die();
1534
  }
1535
  }
 
1536
 
1537
+ return $name;
1538
+ }
1539
+ if ( learn_press_is_content_item_only() ) {
1540
+ //add_action( 'get_header', 'learn_press_load_content_item_only', 999999 );
1541
+ add_action( 'template_include', 'learn_press_load_content_item_only', 999999 );
1542
+ }
1543
 
1544
 
1545
  // Fix issue with course content is duplicated if theme use the_content instead of $course->get_description()
1588
  }
1589
  }
1590
 
1591
+ function learn_press_global_js_templates() {
1592
  learn_press_get_template( 'global/js-template.php' );
1593
  }
1594
 
1595
+ add_action( 'wp_print_scripts', 'learn_press_global_js_templates' );
inc/lp-template-hooks.php CHANGED
@@ -49,7 +49,7 @@ add_action( 'learn_press_content_landing_summary', 'learn_press_single_course_co
49
  add_action( 'learn_press_content_landing_summary', 'learn_press_single_course_content_item', 40 );
50
  add_action( 'learn_press_content_landing_summary', 'learn_press_course_progress', 60 );
51
  add_action( 'learn_press_content_landing_summary', 'learn_press_course_tabs', 50 );
52
- add_action( 'learn_press_content_landing_summary', 'learn_press_course_curriculum_popup', 65 );
53
  add_action( 'learn_press_content_landing_summary', 'learn_press_course_buttons', 70 );
54
  //add_action( 'learn_press_content_landing_summary', 'learn_press_course_students_list', 75 );
55
 
@@ -67,7 +67,7 @@ add_action( 'learn_press_content_learning_summary', 'learn_press_single_course_c
67
  add_action( 'learn_press_content_learning_summary', 'learn_press_course_progress', 45 );
68
  add_action( 'learn_press_content_learning_summary', 'learn_press_course_tabs', 50 );
69
  add_action( 'learn_press_content_learning_summary', 'learn_press_course_remaining_time', 55 );
70
- add_action( 'learn_press_content_learning_summary', 'learn_press_course_curriculum_popup', 60 );
71
  add_action( 'learn_press_content_learning_summary', 'learn_press_course_buttons', 65 );
72
 
73
  //add_action( 'learn_press_content_learning_summary', 'learn_press_course_students_list', 75 );
49
  add_action( 'learn_press_content_landing_summary', 'learn_press_single_course_content_item', 40 );
50
  add_action( 'learn_press_content_landing_summary', 'learn_press_course_progress', 60 );
51
  add_action( 'learn_press_content_landing_summary', 'learn_press_course_tabs', 50 );
52
+ //add_action( 'learn_press_content_landing_summary', 'learn_press_course_curriculum_popup', 65 );
53
  add_action( 'learn_press_content_landing_summary', 'learn_press_course_buttons', 70 );
54
  //add_action( 'learn_press_content_landing_summary', 'learn_press_course_students_list', 75 );
55
 
67
  add_action( 'learn_press_content_learning_summary', 'learn_press_course_progress', 45 );
68
  add_action( 'learn_press_content_learning_summary', 'learn_press_course_tabs', 50 );
69
  add_action( 'learn_press_content_learning_summary', 'learn_press_course_remaining_time', 55 );
70
+ //add_action( 'learn_press_content_learning_summary', 'learn_press_course_curriculum_popup', 60 );
71
  add_action( 'learn_press_content_learning_summary', 'learn_press_course_buttons', 65 );
72
 
73
  //add_action( 'learn_press_content_learning_summary', 'learn_press_course_students_list', 75 );
inc/user/abstract-lp-user.php CHANGED
@@ -575,8 +575,8 @@ class LP_Abstract_User {
575
  /**
576
  * Get quiz status for the user
577
  *
578
- * @param int $quiz_id
579
- * @param int $course_id
580
  * @param boolean $force
581
  *
582
  * @return mixed
@@ -630,8 +630,8 @@ class LP_Abstract_User {
630
  /**
631
  * Get quiz status for the user
632
  *
633
- * @param int $lesson_id
634
- * @param int $course_id
635
  * @param boolean $force
636
  *
637
  * @return mixed
@@ -737,9 +737,9 @@ class LP_Abstract_User {
737
  * Checks if has status of a quiz for user
738
  *
739
  * @param string|array $statuses
740
- * @param int $quiz_id
741
- * @param int $course_id
742
- * @param boolean $force
743
  *
744
  * @return bool
745
  */
@@ -799,9 +799,9 @@ class LP_Abstract_User {
799
  /**
800
  * Get history of a quiz for an user
801
  *
802
- * @param int $quiz_id
803
- * @param int $course_id
804
- * @param int $history_id
805
  * @param bool $force
806
  *
807
  * @return mixed|null|void
@@ -1158,8 +1158,9 @@ class LP_Abstract_User {
1158
  * @return bool
1159
  */
1160
  public function can_purchase_course( $course_id ) {
1161
- $course = learn_press_get_course( $course_id );
1162
- $purchasable = $course->is_purchasable() && ! $this->has_ordered_course( $course_id );
 
1163
 
1164
  return apply_filters( 'learn_press_user_can_purchase_course', $purchasable, $this, $course_id );
1165
  }
@@ -1175,6 +1176,25 @@ class LP_Abstract_User {
1175
  # condition
1176
  $course = LP_Course::get_course( $course_id );
1177
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1178
  // check if course is purchasable
1179
  $enrollable = false;
1180
  if ( ! $course ) {
@@ -1185,7 +1205,7 @@ class LP_Abstract_User {
1185
  $enrollable = false;
1186
  } elseif ( ! $course->is_purchasable() ) {
1187
  $enrollable = 'enough';
1188
- } elseif ( $course->is_free() && $this->is_exists() ) {
1189
  $enrollable = true;
1190
  } elseif ( $course->is_purchasable() && ( $this->has_purchased_course( $course_id ) ) ) {
1191
  $order = LP_Order::instance( $this->get_course_order( $course_id ), true );
@@ -1196,10 +1216,14 @@ class LP_Abstract_User {
1196
  return $enrollable;
1197
  }
1198
 
 
 
 
 
 
1199
  public function can_view_item( $item_id, $course_id = 0 ) {
1200
  $return = false;
1201
  $course_id = $this->_get_course_id( $course_id );
1202
-
1203
  switch ( get_post_type( $item_id ) ) {
1204
  case LP_QUIZ_CPT:
1205
  $return = $this->can( 'view-quiz', $item_id, $course_id );
@@ -1237,12 +1261,17 @@ class LP_Abstract_User {
1237
  */
1238
  public function can_view_lesson( $lesson_id, $course_id = 0 ) {
1239
  $view = false;
 
1240
  // else, find the course of this lesson
1241
  $course_id = $this->_get_course_id( $course_id );
1242
 
1243
- $lesson = LP_Lesson::get_lesson( $lesson_id );
1244
- if ( $course = LP_Course::get_course( $course_id ) ) {
1245
- if ( $this->has( 'enrolled-course', $course_id ) || $this->has( 'finished-course', $course_id ) ) {
 
 
 
 
1246
  // or user has enrolled course
1247
  $view = 'enrolled';
1248
  } elseif ( $lesson->is( 'previewable' ) || $this->is_admin() || ( $this->is_instructor() && $course->post->post_author == $this->user->ID ) ) {
@@ -1302,7 +1331,7 @@ class LP_Abstract_User {
1302
  * - INT (number of remain) if user CAN retake quiz
1303
  *
1304
  * @param $quiz_id
1305
- * @param int $course_id
1306
  * @param boolean $force
1307
  *
1308
  * @return mixed|null|void
@@ -1497,20 +1526,19 @@ class LP_Abstract_User {
1497
  /**
1498
  * Return true if user has already enrolled course
1499
  *
1500
- * @param int $course_id
1501
  * @param bool $force
1502
  *
1503
  * @return bool
1504
  */
1505
- public function has_enrolled_course( $course_id, $force = false ) {
1506
  _learn_press_parse_user_item_statuses( $this->id, $course_id, $force );
1507
- if ( $enrolled = $this->has_purchased_course( $course_id ) ) {
 
1508
  $item_statuses = LP_Cache::get_item_statuses( false, array() );
1509
- $key = sprintf( '%d-%d-%d', $this->id, $course_id, $course_id );
1510
- $enrolled = false;
1511
-
1512
  if ( ! array_key_exists( $key, $item_statuses ) ) {
1513
- $enrolled = $item_statuses[ $key ] = $this->_has_enrolled_course( $course_id );
1514
  } elseif ( ! empty( $item_statuses[ $key ] ) && $item_statuses[ $key ] != '' ) {
1515
  $enrolled = true;
1516
  }
@@ -1519,18 +1547,31 @@ class LP_Abstract_User {
1519
  return apply_filters( 'learn_press_user_has_enrolled_course', $enrolled, $this, $course_id );
1520
  }
1521
 
1522
- private function _has_enrolled_course( $course_id ) {
1523
  global $wpdb;
1524
- $query = $wpdb->prepare( "
1525
- SELECT status
1526
  FROM {$wpdb->prefix}learnpress_user_items
1527
  WHERE user_id = %d
1528
- AND item_id = %d
1529
- AND status <> %s
1530
- LIMIT 0, 1
1531
- ", $this->id, $course_id, '' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1532
 
1533
- return $wpdb->get_var( $query ) ? true : false;
1534
  }
1535
 
1536
  /**
@@ -1549,14 +1590,16 @@ class LP_Abstract_User {
1549
  $finished = ( $item_statuses[ $key ] == 'finished' ) ? 'yes' : 'no';
1550
  } else {
1551
  global $wpdb;
1552
- $query = $wpdb->prepare( "SELECT status FROM {$wpdb->prefix}learnpress_user_items where user_id=%d and item_id=%d", $this->id, $course_id );
1553
- $finished = $wpdb->get_var( $query ) == 'finished' ? 'yes' : 'no';
1554
- $item_statuses[ $key ] = $finished;
1555
- LP_Cache::set_item_statuses( $key, $finished );
 
1556
  }
1557
 
1558
  return apply_filters( 'learn_press_user_has_finished_course', $finished == 'yes', $this, $course_id );
1559
 
 
1560
  //static $courses = array();
1561
  $finished_courses = LP_Cache::get_finished_courses( false, array() );
1562
  if ( empty( $finished_courses[ $course_id ] ) || $force ) {
@@ -1587,7 +1630,7 @@ class LP_Abstract_User {
1587
  $results = 0;
1588
  }
1589
 
1590
- return apply_filters( 'learn_press_user_has_passed_course', $results * 100 >= $course->passing_condition ? $results : false, $course_id, $this );
1591
  }
1592
 
1593
  /**
@@ -1630,8 +1673,8 @@ class LP_Abstract_User {
1630
  }
1631
 
1632
  /**
1633
- * @param int $quiz_id
1634
- * @param int $course_id
1635
  * @param bool $force
1636
  *
1637
  * @return mixed
@@ -1664,8 +1707,8 @@ class LP_Abstract_User {
1664
  /**
1665
  * Count number of time user has retaken a quiz
1666
  *
1667
- * @param int $quiz_id
1668
- * @param int $course_id
1669
  * @param bool $force
1670
  *
1671
  * @return int
@@ -1719,7 +1762,7 @@ class LP_Abstract_User {
1719
  /**
1720
  * Count number of time user has retaken a quiz
1721
  *
1722
- * @param int $course_id
1723
  * @param bool $force
1724
  *
1725
  * @return int
@@ -1999,17 +2042,22 @@ class LP_Abstract_User {
1999
  /**
2000
  * @param $course_id
2001
  *
2002
- * @return mixed|void
2003
  */
2004
  public function get_course_status( $course_id ) {
2005
- return apply_filters( 'learn_press_user_course_status', $this->get_course_info( $course_id, 'status' ), $this->id );
 
 
 
 
 
2006
  }
2007
 
2008
  /**
2009
  * Get current results of a quiz
2010
  *
2011
- * @param int $quiz_id
2012
- * @param int $course_id
2013
  * @param bool $force
2014
  *
2015
  * @return mixed
@@ -2123,8 +2171,9 @@ class LP_Abstract_User {
2123
  * @return bool
2124
  */
2125
  public function has_purchased_course( $course_id ) {
 
2126
 
2127
- return apply_filters( 'learn_press_user_has_purchased_course', $this->get_order_status( $course_id ) == 'lp-completed', $course_id, $this->id );
2128
  }
2129
 
2130
  /**
@@ -2150,7 +2199,7 @@ class LP_Abstract_User {
2150
 
2151
  /**
2152
  * @param $item
2153
- * @param int $course_id
2154
  * @param bool $force
2155
  *
2156
  * @return mixed|void
@@ -2437,7 +2486,7 @@ class LP_Abstract_User {
2437
  ksort( $args );
2438
  $key = md5( serialize( $args ) );
2439
  if ( empty( $courses[ $key ] ) ) {
2440
- $where = $args['status'] ? $wpdb->prepare( "AND uc.status = %s", $args['status'] ) : '';
2441
  $limit = "\n";
2442
  if ( $args['limit'] > 0 ) {
2443
  if ( ! $args['paged'] ) {
@@ -2446,29 +2495,29 @@ class LP_Abstract_User {
2446
  $start = ( $args['paged'] - 1 ) * $args['limit'];
2447
  $limit .= "LIMIT " . $start . ',' . $args['limit'];
2448
  }
2449
- $order = "\nORDER BY " . ( $args['orderby'] ? $args['orderby'] : 'post_title' ) . ' ' . $args['order'];
2450
- $query = $wpdb->prepare( "
2451
- SELECT SQL_CALC_FOUND_ROWS * FROM(
2452
- SELECT c.*, uc.status as course_status
2453
- FROM {$wpdb->posts} c
2454
- LEFT JOIN {$wpdb->prefix}learnpress_user_items uc ON c.ID = uc.item_id AND uc.user_id = %d
2455
- WHERE post_type = %s
2456
- AND ( c.post_status = %s OR c.post_status = %s)
2457
- AND post_author = %d
2458
- UNION
2459
- SELECT c.*, uc.status as course_status
2460
- FROM {$wpdb->posts} c
2461
- INNER JOIN {$wpdb->prefix}learnpress_user_items uc ON c.ID = uc.item_id
2462
- WHERE uc.user_id = %d
2463
- AND c.post_type = %s
2464
- AND c.post_status = %s
2465
- ) a GROUP BY a.ID
2466
- ", $args['user_id'],
2467
- LP_COURSE_CPT, 'publish', 'draft', $this->id,
2468
- $args['user_id'], LP_COURSE_CPT, 'publish'
2469
- );
2470
- $query .= $where . $order . $limit;
2471
-
2472
  $data = array(
2473
  'rows' => $wpdb->get_results( $query, OBJECT_K )
2474
  );
@@ -2804,7 +2853,7 @@ class LP_Abstract_User {
2804
  * Get user's quiz's graduation
2805
  *
2806
  * @param $quiz_id
2807
- * @param int $course_id
2808
  * @param bool $check_completed
2809
  *
2810
  * @return mixed|void
@@ -2878,7 +2927,7 @@ class LP_Abstract_User {
2878
 
2879
  /**
2880
  * @param string $type
2881
- * @param int $size
2882
  *
2883
  * @return false|string
2884
  */
575
  /**
576
  * Get quiz status for the user
577
  *
578
+ * @param int $quiz_id
579
+ * @param int $course_id
580
  * @param boolean $force
581
  *
582
  * @return mixed
630
  /**
631
  * Get quiz status for the user
632
  *
633
+ * @param int $lesson_id
634
+ * @param int $course_id
635
  * @param boolean $force
636
  *
637
  * @return mixed
737
  * Checks if has status of a quiz for user
738
  *
739
  * @param string|array $statuses
740
+ * @param int $quiz_id
741
+ * @param int $course_id
742
+ * @param boolean $force
743
  *
744
  * @return bool
745
  */
799
  /**
800
  * Get history of a quiz for an user
801
  *
802
+ * @param int $quiz_id
803
+ * @param int $course_id
804
+ * @param int $history_id
805
  * @param bool $force
806
  *
807
  * @return mixed|null|void
1158
  * @return bool
1159
  */
1160
  public function can_purchase_course( $course_id ) {
1161
+ $course = learn_press_get_course( $course_id );
1162
+ $course_status = $this->get_course_status( $course_id );
1163
+ $purchasable = $course->is_free() && ! $course->is_reached_limit() && !is_user_logged_in() || ! $course->is_free() && ! $course->is_reached_limit() && ( ! $this->has_ordered_course( $course_id ) || ( $this->has_ordered_course( $course_id ) && $course_status == 'finished' ) );
1164
 
1165
  return apply_filters( 'learn_press_user_can_purchase_course', $purchasable, $this, $course_id );
1166
  }
1176
  # condition
1177
  $course = LP_Course::get_course( $course_id );
1178
 
1179
+ // Course is published and not limited
1180
+ $can = $course->is_published() && ! $course->is_reached_limit();
1181
+
1182
+ if ( $can ) {
1183
+ $course_status = $this->get_course_status( $course_id );
1184
+ // If user has not bought course
1185
+ if ( ( ! $course_status ) ) {
1186
+ $can = $course->is_free() && $course->is_require_enrollment() && is_user_logged_in();
1187
+ } else {
1188
+ $can = $course_status === 'purchased';
1189
+ }
1190
+ }
1191
+
1192
+ if ( ! $can && $course->is_reached_limit() ) {
1193
+ //$can = 'enough';
1194
+ }
1195
+
1196
+ return apply_filters( 'learn_press_user_can_enroll_course', $can, $this, $course_id );
1197
+
1198
  // check if course is purchasable
1199
  $enrollable = false;
1200
  if ( ! $course ) {
1205
  $enrollable = false;
1206
  } elseif ( ! $course->is_purchasable() ) {
1207
  $enrollable = 'enough';
1208
+ } elseif ( $course->is_free() && $course->is_exists() ) {
1209
  $enrollable = true;
1210
  } elseif ( $course->is_purchasable() && ( $this->has_purchased_course( $course_id ) ) ) {
1211
  $order = LP_Order::instance( $this->get_course_order( $course_id ), true );
1216
  return $enrollable;
1217
  }
1218
 
1219
+
1220
+ public function current_course_status() {
1221
+
1222
+ }
1223
+
1224
  public function can_view_item( $item_id, $course_id = 0 ) {
1225
  $return = false;
1226
  $course_id = $this->_get_course_id( $course_id );
 
1227
  switch ( get_post_type( $item_id ) ) {
1228
  case LP_QUIZ_CPT:
1229
  $return = $this->can( 'view-quiz', $item_id, $course_id );
1261
  */
1262
  public function can_view_lesson( $lesson_id, $course_id = 0 ) {
1263
  $view = false;
1264
+
1265
  // else, find the course of this lesson
1266
  $course_id = $this->_get_course_id( $course_id );
1267
 
1268
+ $lesson = LP_Lesson::get_lesson( $lesson_id );
1269
+ $course = LP_Course::get_course( $course_id );
1270
+ $order_id = $this->get_course_order( $course_id );
1271
+ $lp_order = learn_press_get_order( $order_id );
1272
+
1273
+ if ( is_object( $course )/* && $order_id && $lp_order->post_status == 'lp-completed'*/ ) {
1274
+ if ( $this->has( 'enrolled-course', $course_id, true ) || $this->has( 'finished-course', $course_id, true ) ) {
1275
  // or user has enrolled course
1276
  $view = 'enrolled';
1277
  } elseif ( $lesson->is( 'previewable' ) || $this->is_admin() || ( $this->is_instructor() && $course->post->post_author == $this->user->ID ) ) {
1331
  * - INT (number of remain) if user CAN retake quiz
1332
  *
1333
  * @param $quiz_id
1334
+ * @param int $course_id
1335
  * @param boolean $force
1336
  *
1337
  * @return mixed|null|void
1526
  /**
1527
  * Return true if user has already enrolled course
1528
  *
1529
+ * @param int $course_id
1530
  * @param bool $force
1531
  *
1532
  * @return bool
1533
  */
1534
+ public function has_enrolled_course( $course_id, $force = false, $order_id = 0 ) {
1535
  _learn_press_parse_user_item_statuses( $this->id, $course_id, $force );
1536
+ $enrolled = false;
1537
+ if ( $this->has_purchased_course( $course_id ) ) {
1538
  $item_statuses = LP_Cache::get_item_statuses( false, array() );
1539
+ $key = sprintf( '%d-%d-%d', $this->id, $course_id, $order_id );
 
 
1540
  if ( ! array_key_exists( $key, $item_statuses ) ) {
1541
+ $enrolled = $item_statuses[ $key ] = $this->_has_enrolled_course( $course_id, $order_id );
1542
  } elseif ( ! empty( $item_statuses[ $key ] ) && $item_statuses[ $key ] != '' ) {
1543
  $enrolled = true;
1544
  }
1547
  return apply_filters( 'learn_press_user_has_enrolled_course', $enrolled, $this, $course_id );
1548
  }
1549
 
1550
+ private function _has_enrolled_course( $course_id, $order_id = null ) {
1551
  global $wpdb;
1552
+ $sql = "SELECT status
 
1553
  FROM {$wpdb->prefix}learnpress_user_items
1554
  WHERE user_id = %d
1555
+ AND item_id = %d
1556
+ AND status <> %s
1557
+ ";
1558
+ $vars = array( $this->id, $course_id, '' );
1559
+ if ( $order_id ) {
1560
+ $sql .= "
1561
+ AND ref_id = %d
1562
+ AND ref_type = 'lp_order'
1563
+ ";
1564
+ $vars[] = $order_id;
1565
+ }
1566
+
1567
+ $sql .= "
1568
+ LIMIT 0, 1
1569
+ ";
1570
+
1571
+ $query = $wpdb->prepare( $sql, $vars );
1572
+ $res = $wpdb->get_var( $query );
1573
 
1574
+ return $res ? true : false;
1575
  }
1576
 
1577
  /**
1590
  $finished = ( $item_statuses[ $key ] == 'finished' ) ? 'yes' : 'no';
1591
  } else {
1592
  global $wpdb;
1593
+ $query = $wpdb->prepare( "SELECT status FROM {$wpdb->prefix}learnpress_user_items where user_id=%d and item_id=%d AND item_type = %s ORDER BY user_item_id DESC", $this->id, $course_id, LP_COURSE_CPT );
1594
+ $item_statuses[ $key ] = $wpdb->get_var( $query );
1595
+ $finished = $item_statuses[ $key ] == 'finished' ? 'yes' : 'no';
1596
+
1597
+ LP_Cache::set_item_statuses( $item_statuses );
1598
  }
1599
 
1600
  return apply_filters( 'learn_press_user_has_finished_course', $finished == 'yes', $this, $course_id );
1601
 
1602
+
1603
  //static $courses = array();
1604
  $finished_courses = LP_Cache::get_finished_courses( false, array() );
1605
  if ( empty( $finished_courses[ $course_id ] ) || $force ) {
1630
  $results = 0;
1631
  }
1632
 
1633
+ return apply_filters( 'learn_press_user_has_passed_course', $results >= $course->passing_condition ? $results : false, $course_id, $this );
1634
  }
1635
 
1636
  /**
1673
  }
1674
 
1675
  /**
1676
+ * @param int $quiz_id
1677
+ * @param int $course_id
1678
  * @param bool $force
1679
  *
1680
  * @return mixed
1707
  /**
1708
  * Count number of time user has retaken a quiz
1709
  *
1710
+ * @param int $quiz_id
1711
+ * @param int $course_id
1712
  * @param bool $force
1713
  *
1714
  * @return int
1762
  /**
1763
  * Count number of time user has retaken a quiz
1764
  *
1765
+ * @param int $course_id
1766
  * @param bool $force
1767
  *
1768
  * @return int
2042
  /**
2043
  * @param $course_id
2044
  *
2045
+ * @return mixed
2046
  */
2047
  public function get_course_status( $course_id ) {
2048
+ $status = $this->get_course_info( $course_id, 'status', true );
2049
+ if ( ! $status && $this->has_purchased_course( $course_id ) ) {
2050
+ $status = 'purchased';
2051
+ }
2052
+
2053
+ return apply_filters( 'learn_press_user_course_status', $status, $this->id );
2054
  }
2055
 
2056
  /**
2057
  * Get current results of a quiz
2058
  *
2059
+ * @param int $quiz_id
2060
+ * @param int $course_id
2061
  * @param bool $force
2062
  *
2063
  * @return mixed
2171
  * @return bool
2172
  */
2173
  public function has_purchased_course( $course_id ) {
2174
+ $purchased_course = $this->get_order_status( $course_id ) == 'lp-completed';
2175
 
2176
+ return apply_filters( 'learn_press_user_has_purchased_course', $purchased_course, $course_id, $this->id );
2177
  }
2178
 
2179
  /**
2199
 
2200
  /**
2201
  * @param $item
2202
+ * @param int $course_id
2203
  * @param bool $force
2204
  *
2205
  * @return mixed|void
2486
  ksort( $args );
2487
  $key = md5( serialize( $args ) );
2488
  if ( empty( $courses[ $key ] ) ) {
2489
+ $where = $args['status'] ? $wpdb->prepare( "AND a.course_status = %s", $args['status'] ) : '';
2490
  $limit = "\n";
2491
  if ( $args['limit'] > 0 ) {
2492
  if ( ! $args['paged'] ) {
2495
  $start = ( $args['paged'] - 1 ) * $args['limit'];
2496
  $limit .= "LIMIT " . $start . ',' . $args['limit'];
2497
  }
2498
+ $order = "\nORDER BY " . ( $args['orderby'] ? $args['orderby'] : 'post_title' ) . ' ' . $args['order'];
2499
+ $query = $wpdb->prepare( "
2500
+ SELECT SQL_CALC_FOUND_ROWS * FROM(
2501
+ SELECT
2502
+ c.*,
2503
+ `uc`.`status` AS `course_status`
2504
+ FROM
2505
+ {$wpdb->prefix}posts c
2506
+ INNER JOIN {$wpdb->prefix}learnpress_order_itemmeta AS oim ON meta_key = '_course_id'
2507
+ AND c.post_type = %s
2508
+ AND c.ID = oim.meta_value
2509
+ INNER JOIN {$wpdb->prefix}learnpress_order_items AS oi ON oi.order_item_id = oim.learnpress_order_item_id
2510
+ INNER JOIN {$wpdb->prefix}posts o ON oi.order_id = o.ID AND o.post_status = 'lp-completed'
2511
+ INNER JOIN {$wpdb->prefix}postmeta om ON o.ID = om.post_id
2512
+ AND om.meta_key = '_user_id'
2513
+ LEFT JOIN {$wpdb->prefix}learnpress_user_items uc ON uc.item_id=c.ID
2514
+ AND uc.user_id=om.meta_value AND uc.item_type=%s
2515
+ WHERE om.meta_value=%d
2516
+ AND c.post_status = 'publish'
2517
+
2518
+ ) AS a WHERE 1=1
2519
+ ", LP_COURSE_CPT, LP_COURSE_CPT, $args ['user_id'] );
2520
+ $query .= $where . $order . $limit;
2521
  $data = array(
2522
  'rows' => $wpdb->get_results( $query, OBJECT_K )
2523
  );
2853
  * Get user's quiz's graduation
2854
  *
2855
  * @param $quiz_id
2856
+ * @param int $course_id
2857
  * @param bool $check_completed
2858
  *
2859
  * @return mixed|void
2927
 
2928
  /**
2929
  * @param string $type
2930
+ * @param int $size
2931
  *
2932
  * @return false|string
2933
  */
inc/user/class-lp-user-factory.php CHANGED
@@ -99,7 +99,7 @@ class LP_User_Factory {
99
  $id = time();
100
  if ( ! is_user_logged_in() ) {
101
  learn_press_setcookie( 'learn_press_user_guest_id', $id, time() + self::$_guest_transient );
102
- set_transient( 'learn_press_user_guest_' . $id, $id, self::$_guest_transient );
103
  }
104
  }
105
 
99
  $id = time();
100
  if ( ! is_user_logged_in() ) {
101
  learn_press_setcookie( 'learn_press_user_guest_id', $id, time() + self::$_guest_transient );
102
+ //set_transient( 'learn_press_user_guest_' . $id, $id, self::$_guest_transient );
103
  }
104
  }
105
 
inc/user/lp-user-functions.php CHANGED
@@ -1008,16 +1008,18 @@ function _learn_press_before_purchase_course_handler( $course_id, $cart ) {
1008
  } else {
1009
  $user = learn_press_get_current_user();
1010
  $redirect = false;
1011
- if ( $user->has_finished_course( $course_id ) ) {
1012
- learn_press_add_message( __( 'You have already finished course', 'learnpress' ) );
1013
- $redirect = true;
1014
- } elseif ( $user->has_purchased_course( $course_id ) ) {
1015
- learn_press_add_message( __( 'You have already enrolled in this course', 'learnpress' ) );
1016
- $redirect = true;
1017
- }
1018
- if ( $redirect ) {
1019
- wp_redirect( get_the_permalink( $course_id ) );
1020
- exit();
 
 
1021
  }
1022
  }
1023
  }
@@ -1056,7 +1058,7 @@ function _learn_press_redirect_logout_redirect() {
1056
  $pos = strpos( $redirect_to, $admin_url );
1057
  if ( $pos === false ) {
1058
  $page_id = LP()->settings->get( 'logout_redirect_page_id' );
1059
- $page_url = get_page_link( $page_id );
1060
  if ( $page_id && $page_url ) {
1061
  wp_redirect( $page_url );
1062
  exit();
1008
  } else {
1009
  $user = learn_press_get_current_user();
1010
  $redirect = false;
1011
+ if( !$user->can_purchase_course($course_id) ) {
1012
+ if ( $user->has_finished_course( $course_id ) ) {
1013
+ learn_press_add_message( __( 'You have already finished course', 'learnpress' ) );
1014
+ $redirect = true;
1015
+ } elseif ( $user->has_purchased_course( $course_id ) ) {
1016
+ learn_press_add_message( __( 'You have already enrolled in this course', 'learnpress' ) );
1017
+ $redirect = true;
1018
+ }
1019
+ if ( $redirect ) {
1020
+ wp_redirect( get_the_permalink( $course_id ) );
1021
+ exit();
1022
+ }
1023
  }
1024
  }
1025
  }
1058
  $pos = strpos( $redirect_to, $admin_url );
1059
  if ( $pos === false ) {
1060
  $page_id = LP()->settings->get( 'logout_redirect_page_id' );
1061
+ $page_url = $page_id ? get_page_link( $page_id ) : '';
1062
  if ( $page_id && $page_url ) {
1063
  wp_redirect( $page_url );
1064
  exit();
inc/widgets/course-filters/course-filters.php CHANGED
@@ -11,7 +11,7 @@ if ( !class_exists( 'LP_Widget_Course_Filters' ) ) {
11
  'name' => __( 'Title', 'learnpress' ),
12
  'id' => "{$prefix}title",
13
  'type' => 'text',
14
- 'std' => __( '', 'learnpress' )
15
  ),
16
  'filter_by' => array(
17
  'name' => __( 'Filter by', 'learnpress' ),
11
  'name' => __( 'Title', 'learnpress' ),
12
  'id' => "{$prefix}title",
13
  'type' => 'text',
14
+ 'std' => ''
15
  ),
16
  'filter_by' => array(
17
  'name' => __( 'Filter by', 'learnpress' ),
inc/widgets/featured-courses/featured-courses.php CHANGED
@@ -19,7 +19,7 @@ if ( ! class_exists( 'LP_Widget_Featured_Courses' ) ) {
19
  'name' => __( 'Title', 'learnpress' ),
20
  'id' => "{$prefix}title",
21
  'type' => 'text',
22
- 'std' => __( '', 'learnpress' )
23
  ),
24
  'show_teacher' => array(
25
  'name' => __( 'Show teacher', 'learpnress' ),
19
  'name' => __( 'Title', 'learnpress' ),
20
  'id' => "{$prefix}title",
21
  'type' => 'text',
22
+ 'std' => ''
23
  ),
24
  'show_teacher' => array(
25
  'name' => __( 'Show teacher', 'learpnress' ),
inc/widgets/popular-courses/popular-courses.php CHANGED
@@ -24,7 +24,7 @@ if ( ! class_exists( 'LP_Widget_Popular_Courses' ) ) {
24
  'name' => __( 'Title', 'learnpress' ),
25
  'id' => "{$prefix}title",
26
  'type' => 'text',
27
- 'std' => __( '', 'learnpress' )
28
  ),
29
  'show_teacher' => array(
30
  'name' => __( 'Show teacher', 'learpnress' ),
24
  'name' => __( 'Title', 'learnpress' ),
25
  'id' => "{$prefix}title",
26
  'type' => 'text',
27
+ 'std' => ''
28
  ),
29
  'show_teacher' => array(
30
  'name' => __( 'Show teacher', 'learpnress' ),
inc/widgets/recent-courses/recent-courses.php CHANGED
@@ -20,7 +20,7 @@ if ( ! class_exists( 'LP_Widget_Recent_Courses' ) ) {
20
  'name' => __( 'Title', 'learnpress' ),
21
  'id' => "{$prefix}title",
22
  'type' => 'text',
23
- 'std' => __( '', 'learnpress' )
24
  ),
25
  'show_teacher' => array(
26
  'name' => __( 'Show teacher', 'learpnress' ),
20
  'name' => __( 'Title', 'learnpress' ),
21
  'id' => "{$prefix}title",
22
  'type' => 'text',
23
+ 'std' => ''
24
  ),
25
  'show_teacher' => array(
26
  'name' => __( 'Show teacher', 'learpnress' ),
languages/learnpress.pot CHANGED
@@ -3,17 +3,12 @@
3
  # This file is distributed under the same license as the PACKAGE package.
4
  # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
  #
6
- #: inc/custom-post-types/course.php:650
7
- #: inc/widgets/course-filters/course-filters.php:14
8
- #: inc/widgets/featured-courses/featured-courses.php:22
9
- #: inc/widgets/popular-courses/popular-courses.php:27
10
- #: inc/widgets/recent-courses/recent-courses.php:23
11
  #, fuzzy
12
  msgid ""
13
  msgstr ""
14
- "Project-Id-Version: PACKAGE VERSION\n"
15
  "Report-Msgid-Bugs-To: \n"
16
- "POT-Creation-Date: 2017-06-19 09:37+0700\n"
17
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
18
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
19
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -110,7 +105,7 @@ msgstr ""
110
 
111
  #: inc/class-lp-ajax.php:614 inc/admin/lp-admin-functions.php:962
112
  #: inc/admin/views/statistics/orders.php:63
113
- #: templates/single-course/content-item-lp_lesson.php:31
114
  #: templates/single-course/section/item-meta.php:66
115
  msgid "Completed"
116
  msgstr ""
@@ -257,8 +252,8 @@ msgid "Ok"
257
  msgstr ""
258
 
259
  #: inc/class-lp-install.php:90 inc/lp-core-functions.php:2001
260
- #: inc/admin/class-lp-admin-ajax.php:909 inc/admin/class-lp-admin.php:181
261
- #: inc/custom-post-types/course.php:721 templates/profile/tabs/orders.php:38
262
  msgid "Cancel"
263
  msgstr ""
264
 
@@ -289,56 +284,56 @@ msgstr ""
289
  msgid "Add-ons"
290
  msgstr ""
291
 
292
- #: inc/class-lp-shortcodes.php:338 templates/content-archive-course.php:36
293
  msgid "No course found."
294
  msgstr ""
295
 
296
- #: inc/class-lp-shortcodes.php:359 inc/class-lp-shortcodes.php:509
297
  msgid "Invalid order!"
298
  msgstr ""
299
 
300
- #: inc/class-lp-shortcodes.php:410
301
  msgid "Please login to fill in this form."
302
  msgstr ""
303
 
304
- #: inc/class-lp-shortcodes.php:413
305
  msgid "You are a teacher now."
306
  msgstr ""
307
 
308
- #: inc/class-lp-shortcodes.php:416 inc/lp-core-functions.php:1485
309
  msgid "Your request has been sent! We will get in touch with you soon!"
310
  msgstr ""
311
 
312
- #: inc/class-lp-shortcodes.php:419
313
  msgid "Your role is allowed to create a course."
314
  msgstr ""
315
 
316
- #: inc/class-lp-shortcodes.php:431
317
  msgid "Become a Teacher"
318
  msgstr ""
319
 
320
- #: inc/class-lp-shortcodes.php:432
321
  msgid "Fill in your information and send us to become a teacher."
322
  msgstr ""
323
 
324
- #: inc/class-lp-shortcodes.php:433 templates/global/become-teacher-form.php:13
325
  msgid "Submit"
326
  msgstr ""
327
 
328
- #: inc/class-lp-shortcodes.php:434 templates/checkout/payment.php:16
329
  msgid "Processing"
330
  msgstr ""
331
 
332
- #: inc/class-lp-shortcodes.php:472
333
  #, php-format
334
  msgid "The user %s is not available!"
335
  msgstr ""
336
 
337
- #: inc/class-lp-shortcodes.php:542
338
  msgid "Forgot password?"
339
  msgstr ""
340
 
341
- #: inc/class-lp-shortcodes.php:544
342
  msgid "Create new account"
343
  msgstr ""
344
 
@@ -347,23 +342,23 @@ msgstr ""
347
  msgid "Function %s should be overwritten in child class"
348
  msgstr ""
349
 
350
- #: inc/lp-add-on-functions.php:90
351
  #, php-format
352
  msgid "Installed <span class=\"count\">(%s)</span>"
353
  msgstr ""
354
 
355
- #: inc/lp-add-on-functions.php:95
356
  #, php-format
357
  msgid "Add-ons <span class=\"count\">(%s)</span>"
358
  msgstr ""
359
 
360
- #: inc/lp-add-on-functions.php:100
361
  #, php-format
362
  msgid "Related Themes <span class=\"count\">(%s)</span>"
363
  msgstr ""
364
 
365
- #: inc/lp-add-on-functions.php:118 inc/lp-core-functions.php:2239
366
- #: inc/lp-core-functions.php:2689 inc/admin/lp-admin-actions.php:50
367
  #: inc/admin/lp-admin-functions.php:588 inc/admin/lp-admin-functions.php:754
368
  #: inc/admin/lp-admin-functions.php:957 inc/admin/lp-admin-functions.php:2356
369
  #: inc/admin/sub-menus/tools.php:329 inc/admin/views/statistics/courses.php:27
@@ -378,214 +373,214 @@ msgstr ""
378
  msgid "All"
379
  msgstr ""
380
 
381
- #: inc/lp-add-on-functions.php:132
382
  msgid "Get More"
383
  msgstr ""
384
 
385
- #: inc/lp-add-on-functions.php:307
386
  msgid ""
387
  "An unexpected error occurred. Something may be wrong with WordPress.org or "
388
  "this server&#8217;s configuration. If you continue to have problems, please "
389
  "try the <a href=\"https://wordpress.org/support/\">support forums</a>."
390
  msgstr ""
391
 
392
- #: inc/lp-add-on-functions.php:307
393
  msgid ""
394
  "(WordPress could not establish a secure connection to WordPress.org. Please "
395
  "contact your server administrator.)"
396
  msgstr ""
397
 
398
- #: inc/lp-add-on-functions.php:426
399
  #, php-format
400
  msgid "Installing Plugin: %s"
401
  msgstr ""
402
 
403
- #: inc/lp-add-on-functions.php:440
404
  msgid "Not install"
405
  msgstr ""
406
 
407
- #: inc/lp-add-on-functions.php:445 inc/admin/lp-admin-functions.php:1400
408
  msgid "Installed"
409
  msgstr ""
410
 
411
- #: inc/lp-add-on-functions.php:455 inc/lp-add-on-functions.php:481
412
  #: inc/admin/class-lp-plugin-install-list-table.php:420
413
  msgid "Enabled"
414
  msgstr ""
415
 
416
- #: inc/lp-add-on-functions.php:455 inc/lp-add-on-functions.php:481
417
  #: inc/admin/class-lp-plugin-install-list-table.php:422
418
  msgid "Disabled"
419
  msgstr ""
420
 
421
- #: inc/lp-add-on-functions.php:503
422
  msgid "All add-ons that you have installed"
423
  msgstr ""
424
 
425
- #: inc/lp-add-on-functions.php:513 inc/lp-add-on-functions.php:562
426
  msgid "All add-ons we provide."
427
  msgstr ""
428
 
429
- #: inc/lp-add-on-functions.php:514 inc/lp-add-on-functions.php:563
430
  #, php-format
431
  msgid "Last checked %s ago"
432
  msgstr ""
433
 
434
- #: inc/lp-add-on-functions.php:515 inc/lp-add-on-functions.php:564
435
  #, php-format
436
  msgid "<a href=\"%s\">%s</a>"
437
  msgstr ""
438
 
439
- #: inc/lp-add-on-functions.php:515 inc/lp-add-on-functions.php:564
440
  msgid "Check again!"
441
  msgstr ""
442
 
443
- #: inc/lp-add-on-functions.php:674
444
  #: inc/admin/class-lp-plugin-install-list-table.php:362
445
  #, php-format
446
  msgid "Install %s now"
447
  msgstr ""
448
 
449
- #: inc/lp-add-on-functions.php:674
450
  msgid "Install Now"
451
  msgstr ""
452
 
453
- #: inc/lp-add-on-functions.php:681
454
  #: inc/admin/class-lp-plugin-install-list-table.php:369
455
  #, php-format
456
  msgid "Update %s now"
457
  msgstr ""
458
 
459
- #: inc/lp-add-on-functions.php:681
460
  #: inc/admin/class-lp-plugin-install-list-table.php:369
461
  #: inc/admin/views/updates/0.9/step-repair-database.php:17
462
  msgid "Update Now"
463
  msgstr ""
464
 
465
- #: inc/lp-add-on-functions.php:687
466
  msgid "This plugin is already installed and is up to date"
467
  msgstr ""
468
 
469
- #: inc/lp-add-on-functions.php:687
470
  msgctxt "plugin"
471
  msgid "Installed"
472
  msgstr ""
473
 
474
- #: inc/lp-add-on-functions.php:692 inc/lp-add-on-functions.php:701
475
  #, php-format
476
  msgid "Disable %s now"
477
  msgstr ""
478
 
479
- #: inc/lp-add-on-functions.php:692 inc/lp-add-on-functions.php:701
480
  msgid "Disable Now"
481
  msgstr ""
482
 
483
- #: inc/lp-add-on-functions.php:694 inc/lp-add-on-functions.php:703
484
  #, php-format
485
  msgid "Enable %s now"
486
  msgstr ""
487
 
488
- #: inc/lp-add-on-functions.php:694 inc/lp-add-on-functions.php:703
489
  msgid "Enable Now"
490
  msgstr ""
491
 
492
- #: inc/lp-add-on-functions.php:707
493
  #, php-format
494
  msgid "Buy %s now"
495
  msgstr ""
496
 
497
- #: inc/lp-add-on-functions.php:707 inc/lp-add-on-functions.php:870
498
  msgid "Buy Now"
499
  msgstr ""
500
 
501
- #: inc/lp-add-on-functions.php:711
502
  #, php-format
503
  msgid "Version: %s"
504
  msgstr ""
505
 
506
- #: inc/lp-add-on-functions.php:719 inc/lp-add-on-functions.php:729
507
  msgid "No add-on found"
508
  msgstr ""
509
 
510
- #: inc/lp-add-on-functions.php:770
511
  msgid "Free Add-ons"
512
  msgstr ""
513
 
514
- #: inc/lp-add-on-functions.php:795 inc/lp-add-on-functions.php:898
515
  #, php-format
516
  msgid "<cite>By %s</cite>"
517
  msgstr ""
518
 
519
- #: inc/lp-add-on-functions.php:811
520
  #: inc/admin/class-lp-plugin-install-list-table.php:454
521
  msgid "Last Updated:"
522
  msgstr ""
523
 
524
- #: inc/lp-add-on-functions.php:812
525
  #: inc/admin/class-lp-plugin-install-list-table.php:455
526
- #: inc/custom-post-types/order.php:497
527
  #, php-format
528
  msgid "%s ago"
529
  msgstr ""
530
 
531
- #: inc/lp-add-on-functions.php:820
532
  #: inc/admin/class-lp-plugin-install-list-table.php:461
533
  msgctxt "Active plugin installs"
534
  msgid "1+ Million"
535
  msgstr ""
536
 
537
- #: inc/lp-add-on-functions.php:824
538
  #: inc/admin/class-lp-plugin-install-list-table.php:465
539
  #, php-format
540
  msgid "%s Active Installs"
541
  msgstr ""
542
 
543
- #: inc/lp-add-on-functions.php:832
544
  #: inc/admin/class-lp-plugin-install-list-table.php:471
545
  msgid "Untested with your version of WordPress"
546
  msgstr ""
547
 
548
- #: inc/lp-add-on-functions.php:834
549
  #: inc/admin/class-lp-plugin-install-list-table.php:473
550
  msgid "<strong>Incompatible</strong> with your version of WordPress"
551
  msgstr ""
552
 
553
- #: inc/lp-add-on-functions.php:836
554
  #: inc/admin/class-lp-plugin-install-list-table.php:475
555
  msgid "<strong>Compatible</strong> with your version of WordPress"
556
  msgstr ""
557
 
558
- #: inc/lp-add-on-functions.php:849
559
  msgid "Premium Add-ons"
560
  msgstr ""
561
 
562
- #: inc/lp-add-on-functions.php:909
563
  msgid "No theme found"
564
  msgstr ""
565
 
566
- #: inc/lp-add-on-functions.php:948
567
  msgid "Education Support"
568
  msgstr ""
569
 
570
- #: inc/lp-add-on-functions.php:973 inc/lp-add-on-functions.php:1040
571
  msgid "$"
572
  msgstr ""
573
 
574
- #: inc/lp-add-on-functions.php:976 inc/lp-add-on-functions.php:1043
575
  msgid " sales"
576
  msgstr ""
577
 
578
- #: inc/lp-add-on-functions.php:997 inc/lp-add-on-functions.php:1064
579
  #: inc/lp-core-functions.php:525
580
  msgid "Get it now"
581
  msgstr ""
582
 
583
- #: inc/lp-add-on-functions.php:998 inc/lp-add-on-functions.php:1065
584
  #: inc/lp-core-functions.php:527
585
  msgid "View Demo"
586
  msgstr ""
587
 
588
- #: inc/lp-add-on-functions.php:1015
589
  msgid "Other"
590
  msgstr ""
591
 
@@ -604,10 +599,12 @@ msgid "Quiz"
604
  msgstr ""
605
 
606
  #: inc/lp-core-functions.php:697
 
607
  msgid "<"
608
  msgstr ""
609
 
610
  #: inc/lp-core-functions.php:698
 
611
  msgid ">"
612
  msgstr ""
613
 
@@ -631,16 +628,16 @@ msgstr ""
631
  #: inc/admin/settings/class-lp-settings-courses.php:9
632
  #: inc/admin/settings/class-lp-settings-pages.php:105
633
  #: inc/admin/sub-menus/statistics.php:51 inc/admin/sub-menus/statistics.php:58
634
- #: inc/custom-post-types/course.php:397 inc/custom-post-types/course.php:399
635
  #: inc/user/class-lp-profile.php:66
636
  msgid "Courses"
637
  msgstr ""
638
 
639
- #: inc/lp-core-functions.php:868 inc/custom-post-types/course.php:1313
640
  msgid "Categories"
641
  msgstr ""
642
 
643
- #: inc/lp-core-functions.php:873 inc/custom-post-types/course.php:143
644
  msgid "Tags"
645
  msgstr ""
646
 
@@ -758,11 +755,11 @@ msgstr ""
758
  msgid "Learning"
759
  msgstr ""
760
 
761
- #: inc/lp-core-functions.php:2241 inc/custom-post-types/order.php:435
762
  msgid "Purchased"
763
  msgstr ""
764
 
765
- #: inc/lp-core-functions.php:2242 inc/lp-core-functions.php:2691
766
  msgid "Finished"
767
  msgstr ""
768
 
@@ -842,17 +839,17 @@ msgstr ""
842
  msgid "Order number <strong>%s</strong> can not cancelled"
843
  msgstr ""
844
 
845
- #: inc/lp-core-functions.php:2674 inc/course/lp-course-functions.php:779
846
  #: templates/single-course/section/item-meta.php:51
847
  msgid "Passed"
848
  msgstr ""
849
 
850
- #: inc/lp-core-functions.php:2677 inc/course/lp-course-functions.php:782
851
  #: templates/single-course/section/item-meta.php:54
852
  msgid "Failed"
853
  msgstr ""
854
 
855
- #: inc/lp-core-functions.php:2690 inc/course/lp-course-functions.php:785
856
  #: templates/single-course/section/item-meta.php:61
857
  msgid "In Progress"
858
  msgstr ""
@@ -890,7 +887,7 @@ msgstr ""
890
  msgid "Final"
891
  msgstr ""
892
 
893
- #: inc/lp-template-functions.php:1369 inc/custom-post-types/abstract.php:457
894
  #: inc/custom-post-types/lesson.php:211
895
  #: inc/libraries/meta-box/inc/fields/oembed.php:79
896
  #: templates/single-course/section/item-meta.php:28
@@ -903,7 +900,7 @@ msgstr ""
903
 
904
  #: inc/lp-template-functions.php:1449
905
  #: inc/admin/views/meta-boxes/course/curriculum.php:8
906
- #: inc/custom-post-types/course.php:489
907
  msgid "Curriculum"
908
  msgstr ""
909
 
@@ -937,7 +934,7 @@ msgstr ""
937
  msgid "There are no available questions for this quiz, please use "
938
  msgstr ""
939
 
940
- #: inc/admin/class-lp-admin-ajax.php:278 inc/admin/class-lp-admin-ajax.php:423
941
  #: inc/admin/lp-admin-functions.php:1197
942
  #: inc/quiz/class-lp-quiz-factory.php:127
943
  #: inc/quiz/class-lp-quiz-factory.php:136
@@ -947,105 +944,105 @@ msgstr ""
947
  msgid "Error"
948
  msgstr ""
949
 
950
- #: inc/admin/class-lp-admin-ajax.php:374 inc/admin/class-lp-admin-ajax.php:379
951
- #: inc/admin/class-lp-admin-ajax.php:492
952
  msgid "Untitled"
953
  msgstr ""
954
 
955
- #: inc/admin/class-lp-admin-ajax.php:399
956
  msgid "No item found"
957
  msgstr ""
958
 
959
- #: inc/admin/class-lp-admin-ajax.php:407
960
  msgid "A "
961
  msgstr ""
962
 
963
- #: inc/admin/class-lp-admin-ajax.php:407
964
  msgid " is just used for only one "
965
  msgstr ""
966
 
967
- #: inc/admin/class-lp-admin-ajax.php:452
968
  msgid "You have no permission to access this section."
969
  msgstr ""
970
 
971
- #: inc/admin/class-lp-admin-ajax.php:509
972
  #: inc/custom-post-types/question.php:104
973
  msgid "No questions found"
974
  msgstr ""
975
 
976
- #: inc/admin/class-lp-admin-ajax.php:535 inc/admin/class-lp-admin-ajax.php:580
977
  msgid "Permission denied"
978
  msgstr ""
979
 
980
- #: inc/admin/class-lp-admin-ajax.php:541
981
  msgid "Check nonce failed"
982
  msgstr ""
983
 
984
- #: inc/admin/class-lp-admin-ajax.php:547 inc/admin/class-lp-admin-ajax.php:592
985
  msgid "Order invalid"
986
  msgstr ""
987
 
988
- #: inc/admin/class-lp-admin-ajax.php:554
989
  msgid "Course invalid"
990
  msgstr ""
991
 
992
- #: inc/admin/class-lp-admin-ajax.php:660
993
  msgid "Verify nonce failed"
994
  msgstr ""
995
 
996
- #: inc/admin/class-lp-admin-ajax.php:803
997
- #: inc/admin/class-lp-admin-ajax.php:1030 inc/admin/lp-admin-functions.php:140
998
  msgid "Edit Page"
999
  msgstr ""
1000
 
1001
- #: inc/admin/class-lp-admin-ajax.php:804
1002
- #: inc/admin/class-lp-admin-ajax.php:1031 inc/admin/lp-admin-functions.php:142
1003
  msgid "View Page"
1004
  msgstr ""
1005
 
1006
- #: inc/admin/class-lp-admin-ajax.php:806
1007
  msgid "Error! Create page failed. Please try again!"
1008
  msgstr ""
1009
 
1010
- #: inc/admin/class-lp-admin-ajax.php:809
1011
  msgid "Empty page name!"
1012
  msgstr ""
1013
 
1014
- #: inc/admin/class-lp-admin-ajax.php:895
1015
  msgid ""
1016
  "Something went wrong! Please try again or ask <a href=\"https://wordpress."
1017
  "org/support/\">support forums</a>."
1018
  msgstr ""
1019
 
1020
- #: inc/admin/class-lp-admin-ajax.php:908
1021
  msgid "Try again!"
1022
  msgstr ""
1023
 
1024
- #: inc/admin/class-lp-admin-ajax.php:934
1025
  msgid "Import sample data successes."
1026
  msgstr ""
1027
 
1028
- #: inc/admin/class-lp-admin-ajax.php:934
1029
  msgid "View courses"
1030
  msgstr ""
1031
 
1032
- #: inc/admin/class-lp-admin-ajax.php:938
1033
  msgid "Import sample data failed. Please try again!."
1034
  msgstr ""
1035
 
1036
- #: inc/admin/class-lp-admin-ajax.php:942
1037
  msgid ""
1038
  "Unknown error when installing/activating Import/Export addon. Please try "
1039
  "again!"
1040
  msgstr ""
1041
 
1042
- #: inc/admin/class-lp-admin-ajax.php:958 inc/admin/class-lp-admin-ajax.php:979
1043
- #: inc/admin/class-lp-admin-ajax.php:999
1044
  msgid ""
1045
  "You do not have sufficient permissions to deactivate plugins for this site."
1046
  msgstr ""
1047
 
1048
- #: inc/admin/class-lp-admin-ajax.php:1137
1049
  msgid " course has duplicated"
1050
  msgstr ""
1051
 
@@ -1371,7 +1368,7 @@ msgstr ""
1371
  #: inc/admin/views/statistics/orders.php:8
1372
  #: inc/admin/views/statistics/users.php:8
1373
  #: inc/admin/views/statistics/users.php:44
1374
- #: inc/custom-post-types/course.php:1302 inc/custom-post-types/course.php:1309
1375
  msgid "Students"
1376
  msgstr ""
1377
 
@@ -1398,7 +1395,7 @@ msgstr ""
1398
  #: inc/admin/lp-admin-functions.php:774 inc/admin/lp-admin-functions.php:2376
1399
  #: inc/admin/views/statistics/courses.php:46
1400
  #: inc/admin/views/statistics/general.php:60
1401
- #: inc/course/abstract-lp-course.php:496 inc/custom-post-types/course.php:1370
1402
  #: inc/order/lp-order-functions.php:560
1403
  msgid "Free"
1404
  msgstr ""
@@ -1564,7 +1561,7 @@ msgstr ""
1564
  msgid "Can not create a question"
1565
  msgstr ""
1566
 
1567
- #: inc/admin/pointers/pointers.php:66 inc/custom-post-types/course.php:494
1568
  #: templates/single-course/curriculum.php:16
1569
  msgid "Course Curriculum"
1570
  msgstr ""
@@ -1592,7 +1589,7 @@ msgid "Checkout Endpoints"
1592
  msgstr ""
1593
 
1594
  #: inc/admin/settings/class-lp-settings-courses.php:32
1595
- #: inc/custom-post-types/course.php:410
1596
  msgctxt "slug"
1597
  msgid "courses"
1598
  msgstr ""
@@ -1826,8 +1823,8 @@ msgstr ""
1826
 
1827
  #: inc/admin/settings/class-lp-settings-pages.php:121
1828
  #: inc/admin/sub-menus/statistics.php:52 inc/admin/sub-menus/statistics.php:59
1829
- #: inc/custom-post-types/order.php:554 inc/custom-post-types/order.php:555
1830
- #: inc/custom-post-types/order.php:559 inc/user/class-lp-profile.php:74
1831
  msgid "Orders"
1832
  msgstr ""
1833
 
@@ -2202,7 +2199,7 @@ msgid "Title"
2202
  msgstr ""
2203
 
2204
  #: inc/admin/views/meta-boxes/course/editor.php:62
2205
- #: inc/custom-post-types/course.php:1301 inc/custom-post-types/course.php:1308
2206
  msgid "Content"
2207
  msgstr ""
2208
 
@@ -2224,8 +2221,8 @@ msgstr ""
2224
  #: inc/admin/views/meta-boxes/course/js-template.php:88
2225
  #: inc/admin/views/meta-boxes/quiz/js-template.php:6
2226
  #: inc/admin/views/meta-boxes/quiz/questions.php:36
2227
- #: inc/custom-post-types/course.php:402 inc/custom-post-types/lesson.php:97
2228
- #: inc/custom-post-types/order.php:561 inc/custom-post-types/question.php:100
2229
  msgid "Add New"
2230
  msgstr ""
2231
 
@@ -2255,7 +2252,7 @@ msgid "Add new item here and press Enter"
2255
  msgstr ""
2256
 
2257
  #: inc/admin/views/meta-boxes/course/loop-item.php:69
2258
- #: inc/custom-post-types/course.php:352
2259
  msgid "Are you sure you want to remove this item?"
2260
  msgstr ""
2261
 
@@ -2295,7 +2292,7 @@ msgid "Select %s"
2295
  msgstr ""
2296
 
2297
  #: inc/admin/views/meta-boxes/course/review-log.php:25
2298
- #: inc/custom-post-types/course.php:354
2299
  msgid "Your course is pending for reviewing"
2300
  msgstr ""
2301
 
@@ -2306,7 +2303,7 @@ msgid ""
2306
  msgstr ""
2307
 
2308
  #: inc/admin/views/meta-boxes/course/review-log.php:31
2309
- #: inc/custom-post-types/course.php:351
2310
  msgid "Submit for Review"
2311
  msgstr ""
2312
 
@@ -2465,7 +2462,7 @@ msgid "Customers"
2465
  msgstr ""
2466
 
2467
  #: inc/admin/views/meta-boxes/order/details.php:49
2468
- #: inc/custom-post-types/order.php:520
2469
  #, php-format
2470
  msgid "Pay via <strong>%s</strong>"
2471
  msgstr ""
@@ -2501,11 +2498,11 @@ msgid "Sub Total"
2501
  msgstr ""
2502
 
2503
  #: inc/admin/views/meta-boxes/order/details.php:87
2504
- #: inc/custom-post-types/order.php:437 templates/cart/form.php:31
2505
  #: templates/cart/form.php:101 templates/checkout/order-received.php:32
2506
  #: templates/checkout/review-order.php:27
2507
  #: templates/checkout/review-order.php:68 templates/order/order-details.php:18
2508
- #: templates/order/order-details.php:67 templates/profile/tabs/orders.php:26
2509
  msgid "Total"
2510
  msgstr ""
2511
 
@@ -3063,9 +3060,9 @@ msgid "Sale by"
3063
  msgstr ""
3064
 
3065
  #: inc/admin/views/statistics/orders.php:46
3066
- #: inc/custom-post-types/order.php:436
3067
  #: templates/checkout/order-received.php:26
3068
- #: templates/profile/tabs/orders.php:24
3069
  msgid "Date"
3070
  msgstr ""
3071
 
@@ -3285,11 +3282,11 @@ msgstr ""
3285
  msgid "Checkout page is not setup"
3286
  msgstr ""
3287
 
3288
- #: inc/course/abstract-lp-course.php:378
3289
  msgid "You enrolled"
3290
  msgstr ""
3291
 
3292
- #: inc/course/abstract-lp-course.php:380
3293
  #, php-format
3294
  msgctxt ""
3295
  msgid "You and one student enrolled"
@@ -3298,7 +3295,7 @@ msgid_plural ""
3298
  msgstr[0] ""
3299
  msgstr[1] ""
3300
 
3301
- #: inc/course/abstract-lp-course.php:384
3302
  #, php-format
3303
  msgctxt ""
3304
  msgid "One student enrolled"
@@ -3307,28 +3304,28 @@ msgid_plural ""
3307
  msgstr[0] ""
3308
  msgstr[1] ""
3309
 
3310
- #: inc/course/abstract-lp-course.php:388
3311
  msgid "No student enrolled"
3312
  msgstr ""
3313
 
3314
- #: inc/course/abstract-lp-course.php:777 inc/course/abstract-lp-course.php:795
3315
  #: inc/lesson/class-lp-lesson.php:120 inc/quiz/class-lp-quiz.php:611
3316
  #, php-format
3317
  msgid "The function %s doesn't exists"
3318
  msgstr ""
3319
 
3320
- #: inc/course/abstract-lp-course.php:1069
3321
  #, php-format
3322
  msgid "%d of %d items completed"
3323
  msgstr ""
3324
 
3325
- #: inc/course/abstract-lp-course.php:1072
3326
- #: inc/course/abstract-lp-course.php:1074
3327
  #, php-format
3328
  msgid "%d%% completed"
3329
  msgstr ""
3330
 
3331
- #: inc/course/abstract-lp-course.php:1477
3332
  #, php-format
3333
  msgid "This course will end within %s next"
3334
  msgstr ""
@@ -3338,7 +3335,7 @@ msgstr ""
3338
  msgid "Are you sure you want to finish course %s?"
3339
  msgstr ""
3340
 
3341
- #: inc/course/class-lp-course.php:32 templates/single-course/buttons.php:74
3342
  msgid "Finish course"
3343
  msgstr ""
3344
 
@@ -3395,515 +3392,515 @@ msgstr ""
3395
  msgid "The course %d does not exists"
3396
  msgstr ""
3397
 
 
3398
  #: inc/custom-post-types/abstract.php:417
3399
- #: inc/custom-post-types/abstract.php:420
3400
  msgid "updated."
3401
  msgstr ""
3402
 
3403
- #: inc/custom-post-types/abstract.php:418
3404
  msgid "Custom field updated."
3405
  msgstr ""
3406
 
3407
- #: inc/custom-post-types/abstract.php:419
3408
  msgid "Custom field deleted."
3409
  msgstr ""
3410
 
3411
- #: inc/custom-post-types/abstract.php:422
3412
  #, php-format
3413
  msgid "Lesson restored to revision from %s"
3414
  msgstr ""
3415
 
3416
- #: inc/custom-post-types/abstract.php:423
3417
  msgid "published."
3418
  msgstr ""
3419
 
3420
- #: inc/custom-post-types/abstract.php:424
3421
  msgid "saved."
3422
  msgstr ""
3423
 
3424
- #: inc/custom-post-types/abstract.php:425
3425
  msgid "submitted."
3426
  msgstr ""
3427
 
3428
- #: inc/custom-post-types/abstract.php:427
3429
  #, php-format
3430
  msgid "scheduled for: <strong>%1$s</strong>."
3431
  msgstr ""
3432
 
3433
- #: inc/custom-post-types/abstract.php:429
3434
  msgid "M j, Y @ G:i"
3435
  msgstr ""
3436
 
3437
- #: inc/custom-post-types/abstract.php:431
3438
  msgid "draft updated."
3439
  msgstr ""
3440
 
3441
- #: inc/custom-post-types/abstract.php:437
3442
- #: inc/custom-post-types/abstract.php:446 inc/custom-post-types/lesson.php:246
3443
  #: inc/custom-post-types/question.php:279 inc/custom-post-types/quiz.php:358
3444
- #: templates/profile/tabs/orders.php:47
3445
  msgid "View"
3446
  msgstr ""
3447
 
3448
- #: inc/custom-post-types/course.php:60
3449
  msgid "Add Lesson"
3450
  msgstr ""
3451
 
3452
- #: inc/custom-post-types/course.php:65
3453
  msgid "Add Quiz"
3454
  msgstr ""
3455
 
3456
- #: inc/custom-post-types/course.php:101 inc/custom-post-types/course.php:103
3457
  msgid "Course Categories"
3458
  msgstr ""
3459
 
3460
- #: inc/custom-post-types/course.php:104 inc/custom-post-types/course.php:105
3461
  msgid "Category"
3462
  msgstr ""
3463
 
3464
- #: inc/custom-post-types/course.php:106
3465
  msgid "Add New Course Category"
3466
  msgstr ""
3467
 
3468
- #: inc/custom-post-types/course.php:107
3469
  msgid "All Categories"
3470
  msgstr ""
3471
 
3472
- #: inc/custom-post-types/course.php:118
3473
  msgctxt "slug"
3474
  msgid "course-category"
3475
  msgstr ""
3476
 
3477
- #: inc/custom-post-types/course.php:129
3478
  msgid "Course Tags"
3479
  msgstr ""
3480
 
3481
- #: inc/custom-post-types/course.php:130 inc/custom-post-types/question.php:74
3482
  #: inc/custom-post-types/question.php:75 inc/updates/_update-from-0.9.php:1166
3483
  #: inc/updates/_update-from-0.9.php:1167 inc/updates/_update-from-0.9.php:1168
3484
  #: inc/updates/_update-from-0.9.php:1185 inc/updates/_update-from-0.9.php:1186
3485
  msgid "Tag"
3486
  msgstr ""
3487
 
3488
- #: inc/custom-post-types/course.php:131
3489
  msgid "Search Course Tags"
3490
  msgstr ""
3491
 
3492
- #: inc/custom-post-types/course.php:132
3493
  msgid "Popular Course Tags"
3494
  msgstr ""
3495
 
3496
- #: inc/custom-post-types/course.php:133
3497
  msgid "All Course Tags"
3498
  msgstr ""
3499
 
3500
- #: inc/custom-post-types/course.php:136
3501
  msgid "Edit Course Tag"
3502
  msgstr ""
3503
 
3504
- #: inc/custom-post-types/course.php:137
3505
  msgid "Update Course Tag"
3506
  msgstr ""
3507
 
3508
- #: inc/custom-post-types/course.php:138
3509
  msgid "Add New Course Tag"
3510
  msgstr ""
3511
 
3512
- #: inc/custom-post-types/course.php:139
3513
  msgid "New Course Tag Name"
3514
  msgstr ""
3515
 
3516
- #: inc/custom-post-types/course.php:140
3517
  msgid "Separate tags with commas"
3518
  msgstr ""
3519
 
3520
- #: inc/custom-post-types/course.php:141
3521
  msgid "Add or remove tags"
3522
  msgstr ""
3523
 
3524
- #: inc/custom-post-types/course.php:142
3525
  msgid "Choose from the most used tags"
3526
  msgstr ""
3527
 
3528
- #: inc/custom-post-types/course.php:152
3529
  msgctxt "slug"
3530
  msgid "course-tag"
3531
  msgstr ""
3532
 
3533
- #: inc/custom-post-types/course.php:262
3534
  msgid "Sorry! You can not update a course while it is viewing!"
3535
  msgstr ""
3536
 
3537
- #: inc/custom-post-types/course.php:298
3538
  msgid "Toggle Course Content"
3539
  msgstr ""
3540
 
3541
- #: inc/custom-post-types/course.php:315
3542
  msgid "Please enter the title of the course"
3543
  msgstr ""
3544
 
3545
- #: inc/custom-post-types/course.php:316
3546
  msgid "Please add at least one section for the course"
3547
  msgstr ""
3548
 
3549
- #: inc/custom-post-types/course.php:317
3550
  msgid "Please enter the title of the section"
3551
  msgstr ""
3552
 
3553
- #: inc/custom-post-types/course.php:318
3554
  msgid "Please set a price for this course"
3555
  msgstr ""
3556
 
3557
- #: inc/custom-post-types/course.php:336
3558
  msgid "Do you want to remove this lesson permanently?"
3559
  msgstr ""
3560
 
3561
- #: inc/custom-post-types/course.php:337
3562
  msgid "Do you want to remove this quiz permanently?"
3563
  msgstr ""
3564
 
3565
- #: inc/custom-post-types/course.php:338
3566
  msgid "Do you want to remove this section permanently?"
3567
  msgstr ""
3568
 
3569
- #: inc/custom-post-types/course.php:339
3570
  msgid "New quiz added"
3571
  msgstr ""
3572
 
3573
- #: inc/custom-post-types/course.php:340
3574
  msgid "New lesson added"
3575
  msgstr ""
3576
 
3577
- #: inc/custom-post-types/course.php:341
3578
  msgid "New section added"
3579
  msgstr ""
3580
 
3581
- #: inc/custom-post-types/course.php:342
3582
  msgid "The lesson removed"
3583
  msgstr ""
3584
 
3585
- #: inc/custom-post-types/course.php:343
3586
  msgid "The quiz removed"
3587
  msgstr ""
3588
 
3589
- #: inc/custom-post-types/course.php:344
3590
  msgid "The section removed"
3591
  msgstr ""
3592
 
3593
- #: inc/custom-post-types/course.php:345
3594
  msgid "The ordering completed"
3595
  msgstr ""
3596
 
3597
- #: inc/custom-post-types/course.php:346
3598
  msgid "Lesson added to section completed!"
3599
  msgstr ""
3600
 
3601
- #: inc/custom-post-types/course.php:347
3602
  msgid "Quiz added to section completed!"
3603
  msgstr ""
3604
 
3605
- #: inc/custom-post-types/course.php:348
3606
  #, php-format
3607
  msgid "%s updated"
3608
  msgstr ""
3609
 
3610
- #: inc/custom-post-types/course.php:349
3611
  msgid "Click to quick edit name"
3612
  msgstr ""
3613
 
3614
- #: inc/custom-post-types/course.php:350
3615
  msgid "Save Course"
3616
  msgstr ""
3617
 
3618
- #: inc/custom-post-types/course.php:353
3619
  msgid "You course will become to Pending"
3620
  msgstr ""
3621
 
3622
- #: inc/custom-post-types/course.php:395
3623
  msgctxt "Post Type General Name"
3624
  msgid "Courses"
3625
  msgstr ""
3626
 
3627
- #: inc/custom-post-types/course.php:396
3628
  msgctxt "Post Type Singular Name"
3629
  msgid "Course"
3630
  msgstr ""
3631
 
3632
- #: inc/custom-post-types/course.php:398
3633
  msgid "Parent Item:"
3634
  msgstr ""
3635
 
3636
- #: inc/custom-post-types/course.php:400
3637
  msgid "View Course"
3638
  msgstr ""
3639
 
3640
- #: inc/custom-post-types/course.php:401
3641
  msgid "Add New Course"
3642
  msgstr ""
3643
 
3644
- #: inc/custom-post-types/course.php:403
3645
  msgid "Edit Course"
3646
  msgstr ""
3647
 
3648
- #: inc/custom-post-types/course.php:404
3649
  msgid "Update Course"
3650
  msgstr ""
3651
 
3652
- #: inc/custom-post-types/course.php:405
3653
  msgid "Search Courses"
3654
  msgstr ""
3655
 
3656
- #: inc/custom-post-types/course.php:406
3657
  #, php-format
3658
  msgid ""
3659
  "You have not got any courses yet. Click <a href=\"%s\">Add new</a> to start"
3660
  msgstr ""
3661
 
3662
- #: inc/custom-post-types/course.php:407
3663
  msgid "No course found in Trash"
3664
  msgstr ""
3665
 
3666
- #: inc/custom-post-types/course.php:516 inc/custom-post-types/quiz.php:152
3667
  msgid "General Settings"
3668
  msgstr ""
3669
 
3670
- #: inc/custom-post-types/course.php:521 inc/custom-post-types/lesson.php:209
3671
  #: inc/custom-post-types/quiz.php:178 inc/custom-post-types/quiz.php:327
3672
  msgid "Duration"
3673
  msgstr ""
3674
 
3675
- #: inc/custom-post-types/course.php:524
3676
  msgid "The duration of the course."
3677
  msgstr ""
3678
 
3679
- #: inc/custom-post-types/course.php:528
3680
  msgid "Maximum students"
3681
  msgstr ""
3682
 
3683
- #: inc/custom-post-types/course.php:531
3684
  msgid "Maximum number of students who can enroll in this course."
3685
  msgstr ""
3686
 
3687
- #: inc/custom-post-types/course.php:535
3688
  msgid "Students enrolled"
3689
  msgstr ""
3690
 
3691
- #: inc/custom-post-types/course.php:538
3692
  msgid "How many students have taken this course."
3693
  msgstr ""
3694
 
3695
- #: inc/custom-post-types/course.php:542
3696
  msgid "Re-take course"
3697
  msgstr ""
3698
 
3699
- #: inc/custom-post-types/course.php:545
3700
  msgid "How many times the user can re-take this course. Set to 0 to disable."
3701
  msgstr ""
3702
 
3703
- #: inc/custom-post-types/course.php:549
3704
  msgid "Featured"
3705
  msgstr ""
3706
 
3707
- #: inc/custom-post-types/course.php:552
3708
  msgid "Set course as featured."
3709
  msgstr ""
3710
 
3711
- #: inc/custom-post-types/course.php:556
3712
  msgid "Block Lessons Content"
3713
  msgstr ""
3714
 
3715
- #: inc/custom-post-types/course.php:559
3716
  msgid "Block lessons content when course is expired."
3717
  msgstr ""
3718
 
3719
- #: inc/custom-post-types/course.php:563
3720
  msgid "External link buy course"
3721
  msgstr ""
3722
 
3723
- #: inc/custom-post-types/course.php:566
3724
  msgid "Redirect to this url when you press button buy this course."
3725
  msgstr ""
3726
 
3727
- #: inc/custom-post-types/course.php:586
3728
  msgid "Basic Options"
3729
  msgstr ""
3730
 
3731
- #: inc/custom-post-types/course.php:586
3732
  msgid "Advanced Options"
3733
  msgstr ""
3734
 
3735
- #: inc/custom-post-types/course.php:589
3736
  msgid "The method to assess the result of a student for a course."
3737
  msgstr ""
3738
 
3739
- #: inc/custom-post-types/course.php:591
3740
  msgid ""
3741
  "<br /><strong>Note! </strong>No final quiz in course, please add a final quiz"
3742
  msgstr ""
3743
 
3744
- #: inc/custom-post-types/course.php:595
3745
  msgid "Assessment"
3746
  msgstr ""
3747
 
3748
- #: inc/custom-post-types/course.php:600
3749
  msgid "Course result"
3750
  msgstr ""
3751
 
3752
- #: inc/custom-post-types/course.php:605
3753
  msgid "Evaluate lessons"
3754
  msgstr ""
3755
 
3756
- #: inc/custom-post-types/course.php:605
3757
  msgid "Evaluate by lessons user has completed per total lessons in course."
3758
  msgstr ""
3759
 
3760
- #: inc/custom-post-types/course.php:606
3761
  msgid "Evaluate results of the final quiz"
3762
  msgstr ""
3763
 
3764
- #: inc/custom-post-types/course.php:606
3765
  msgid "Evaluate by results of final quiz in course."
3766
  msgstr ""
3767
 
3768
- #: inc/custom-post-types/course.php:608
3769
  msgid "Evaluate results of quizzes"
3770
  msgstr ""
3771
 
3772
- #: inc/custom-post-types/course.php:608
3773
  msgid "Evaluate by achieved points per total point of all quizzes."
3774
  msgstr ""
3775
 
3776
- #: inc/custom-post-types/course.php:609
3777
  msgid "Evaluate results of quizzes passed"
3778
  msgstr ""
3779
 
3780
- #: inc/custom-post-types/course.php:609
3781
  msgid ""
3782
  "Evaluate by achieved points of passed course per total point of all quizzes."
3783
  msgstr ""
3784
 
3785
- #: inc/custom-post-types/course.php:610
3786
  msgid "Evaluate quizzes"
3787
  msgstr ""
3788
 
3789
- #: inc/custom-post-types/course.php:610
3790
  msgid "Evaluate by quizzes user has completed per total quizzes."
3791
  msgstr ""
3792
 
3793
- #: inc/custom-post-types/course.php:616
3794
  msgid "Passing condition value"
3795
  msgstr ""
3796
 
3797
- #: inc/custom-post-types/course.php:621
3798
  msgid ""
3799
  "The percentage of quiz result or lessons completed to finish the course."
3800
  msgstr ""
3801
 
3802
- #: inc/custom-post-types/course.php:642
3803
  msgid "Payment Settings"
3804
  msgstr ""
3805
 
3806
- #: inc/custom-post-types/course.php:647
3807
  msgid "Course payment"
3808
  msgstr ""
3809
 
3810
- #: inc/custom-post-types/course.php:677
3811
  #, php-format
3812
  msgid ""
3813
  "This course is requires enrollment and the suggested price is <strong>%s</"
3814
  "strong>"
3815
  msgstr ""
3816
 
3817
- #: inc/custom-post-types/course.php:685
3818
  msgid "This course is free."
3819
  msgstr ""
3820
 
3821
- #: inc/custom-post-types/course.php:691 inc/custom-post-types/course.php:1303
3822
- #: inc/custom-post-types/course.php:1310 templates/cart/form.php:30
3823
  #: templates/emails/order-items-table.php:21
3824
  msgid "Price"
3825
  msgstr ""
3826
 
3827
- #: inc/custom-post-types/course.php:701
3828
  msgid "Sale Price"
3829
  msgstr ""
3830
 
3831
- #: inc/custom-post-types/course.php:706
3832
  msgid "Leave blank to remove sale price."
3833
  msgstr ""
3834
 
3835
- #: inc/custom-post-types/course.php:706
3836
  msgid "Schedule"
3837
  msgstr ""
3838
 
3839
- #: inc/custom-post-types/course.php:711
3840
  msgid "Sale start date"
3841
  msgstr ""
3842
 
3843
- #: inc/custom-post-types/course.php:718
3844
  msgid "Sale end date"
3845
  msgstr ""
3846
 
3847
- #: inc/custom-post-types/course.php:729
3848
  msgid "Price set by Admin"
3849
  msgstr ""
3850
 
3851
- #: inc/custom-post-types/course.php:733
3852
  msgid "Not set"
3853
  msgstr ""
3854
 
3855
- #: inc/custom-post-types/course.php:736
3856
  msgid "Course Suggestion Price"
3857
  msgstr ""
3858
 
3859
- #: inc/custom-post-types/course.php:741
3860
  msgid "The course price you want to suggest for admin to set."
3861
  msgstr ""
3862
 
3863
- #: inc/custom-post-types/course.php:751
3864
  msgid "Requires enroll"
3865
  msgstr ""
3866
 
3867
- #: inc/custom-post-types/course.php:754
3868
  msgid "Require users logged in to study or public to all."
3869
  msgstr ""
3870
 
3871
- #: inc/custom-post-types/course.php:793
3872
  msgid "Author Settings"
3873
  msgstr ""
3874
 
3875
- #: inc/custom-post-types/course.php:798 inc/custom-post-types/course.php:1300
3876
- #: inc/custom-post-types/course.php:1307 inc/custom-post-types/lesson.php:204
3877
  #: inc/custom-post-types/question.php:243 inc/custom-post-types/quiz.php:324
3878
  msgid "Author"
3879
  msgstr ""
3880
 
3881
- #: inc/custom-post-types/course.php:821
3882
  msgid "Review Logs"
3883
  msgstr ""
3884
 
3885
- #: inc/custom-post-types/course.php:972
3886
  msgid "Course Curriculum only appear if course is saved"
3887
  msgstr ""
3888
 
3889
- #: inc/custom-post-types/course.php:1137
3890
  msgid "Course has approved by Reviewer"
3891
  msgstr ""
3892
 
3893
- #: inc/custom-post-types/course.php:1142
3894
  msgid "Course has rejected by Reviewer"
3895
  msgstr ""
3896
 
3897
- #: inc/custom-post-types/course.php:1147
3898
  #, php-format
3899
  msgid "Course has submitted by %s"
3900
  msgstr ""
3901
 
3902
- #: inc/custom-post-types/course.php:1152
3903
  msgid "Course has updated by Reviewer"
3904
  msgstr ""
3905
 
3906
- #: inc/custom-post-types/course.php:1345
3907
  #, php-format
3908
  msgctxt "learnpress"
3909
  msgid "%d section"
@@ -3911,7 +3908,7 @@ msgid_plural "%d sections"
3911
  msgstr[0] ""
3912
  msgstr[1] ""
3913
 
3914
- #: inc/custom-post-types/course.php:1348
3915
  #, php-format
3916
  msgctxt "learnpress"
3917
  msgid "%d lesson"
@@ -3919,11 +3916,11 @@ msgid_plural "%d lessons"
3919
  msgstr[0] ""
3920
  msgstr[1] ""
3921
 
3922
- #: inc/custom-post-types/course.php:1350
3923
  msgid "0 lesson"
3924
  msgstr ""
3925
 
3926
- #: inc/custom-post-types/course.php:1354
3927
  #, php-format
3928
  msgctxt "learnpress"
3929
  msgid "%d quiz"
@@ -3931,55 +3928,55 @@ msgid_plural "%d quizzes"
3931
  msgstr[0] ""
3932
  msgstr[1] ""
3933
 
3934
- #: inc/custom-post-types/course.php:1356
3935
  msgid "0 quiz"
3936
  msgstr ""
3937
 
3938
- #: inc/custom-post-types/course.php:1361
3939
  msgid "No content"
3940
  msgstr ""
3941
 
3942
- #: inc/custom-post-types/course.php:1524
3943
  msgid "Course Video"
3944
  msgstr ""
3945
 
3946
- #: inc/custom-post-types/course.php:1529
3947
  msgid "Video ID"
3948
  msgstr ""
3949
 
3950
- #: inc/custom-post-types/course.php:1532
3951
  msgid "The id of Youtube or Vimeo video"
3952
  msgstr ""
3953
 
3954
- #: inc/custom-post-types/course.php:1536
3955
  msgid "Video Type"
3956
  msgstr ""
3957
 
3958
- #: inc/custom-post-types/course.php:1539
3959
  msgid "Chose video type"
3960
  msgstr ""
3961
 
3962
- #: inc/custom-post-types/course.php:1542
3963
  msgid "Youtube"
3964
  msgstr ""
3965
 
3966
- #: inc/custom-post-types/course.php:1543
3967
  msgid "Vimeo"
3968
  msgstr ""
3969
 
3970
- #: inc/custom-post-types/course.php:1547
3971
  msgid "Embed width"
3972
  msgstr ""
3973
 
3974
- #: inc/custom-post-types/course.php:1550
3975
  msgid "Set width of embed"
3976
  msgstr ""
3977
 
3978
- #: inc/custom-post-types/course.php:1554
3979
  msgid "Embed height"
3980
  msgstr ""
3981
 
3982
- #: inc/custom-post-types/course.php:1557
3983
  msgid "Set height of embed"
3984
  msgstr ""
3985
 
@@ -4066,65 +4063,69 @@ msgstr ""
4066
  msgid "Standard"
4067
  msgstr ""
4068
 
4069
- #: inc/custom-post-types/order.php:230 inc/order/lp-order-functions.php:37
4070
  msgid "Order on"
4071
  msgstr ""
4072
 
4073
- #: inc/custom-post-types/order.php:252
4074
  msgid "Order number, user name, user email, course name etc..."
4075
  msgstr ""
4076
 
4077
- #: inc/custom-post-types/order.php:325
4078
  msgid "Processing..."
4079
  msgstr ""
4080
 
4081
- #: inc/custom-post-types/order.php:342 inc/custom-post-types/order.php:345
4082
  msgid "Apply"
4083
  msgstr ""
4084
 
4085
- #: inc/custom-post-types/order.php:373 inc/custom-post-types/order.php:560
4086
  msgid "View Order"
4087
  msgstr ""
4088
 
4089
- #: inc/custom-post-types/order.php:433 inc/custom-post-types/order.php:556
4090
- #: templates/profile/tabs/orders.php:23
4091
  msgid "Order"
4092
  msgstr ""
4093
 
4094
- #: inc/custom-post-types/order.php:434
4095
  msgid "Student"
4096
  msgstr ""
4097
 
4098
- #: inc/custom-post-types/order.php:508
 
 
 
 
4099
  msgid "Course does not exist"
4100
  msgstr ""
4101
 
4102
- #: inc/custom-post-types/order.php:557
4103
  msgid "Add New Order"
4104
  msgstr ""
4105
 
4106
- #: inc/custom-post-types/order.php:558 inc/custom-post-types/order.php:648
4107
  #: templates/order/order-details.php:13
4108
  msgid "Order Details"
4109
  msgstr ""
4110
 
4111
- #: inc/custom-post-types/order.php:562
4112
  msgid "Update Order"
4113
  msgstr ""
4114
 
4115
- #: inc/custom-post-types/order.php:563
4116
  msgid "Search Orders"
4117
  msgstr ""
4118
 
4119
- #: inc/custom-post-types/order.php:564
4120
  msgid "No order found"
4121
  msgstr ""
4122
 
4123
- #: inc/custom-post-types/order.php:565
4124
  msgid "No order found in Trash"
4125
  msgstr ""
4126
 
4127
- #: inc/custom-post-types/order.php:649
4128
  msgid "Order Actions"
4129
  msgstr ""
4130
 
@@ -4850,17 +4851,17 @@ msgctxt "Permalink Slug"
4850
  msgid "question-tag"
4851
  msgstr ""
4852
 
4853
- #: inc/user/abstract-lp-user.php:215
4854
  msgid "Create quiz history need pass course ID"
4855
  msgstr ""
4856
 
4857
- #: inc/user/abstract-lp-user.php:1119 inc/user/abstract-lp-user.php:1417
4858
- #: inc/user/abstract-lp-user.php:1429
4859
  #, php-format
4860
  msgid "The role %s for user doesn't exists"
4861
  msgstr ""
4862
 
4863
- #: inc/user/abstract-lp-user.php:1827
4864
  msgid "You have already completed this lesson"
4865
  msgstr ""
4866
 
@@ -4868,93 +4869,93 @@ msgstr ""
4868
  msgid "Every 3 Minutes"
4869
  msgstr ""
4870
 
4871
- #: inc/user/lp-user-functions.php:87
4872
  msgctxt "User role"
4873
  msgid "Instructor"
4874
  msgstr ""
4875
 
4876
- #: inc/user/lp-user-functions.php:316
4877
  msgid "Want to be an instructor?"
4878
  msgstr ""
4879
 
4880
- #: inc/user/lp-user-functions.php:598
4881
  msgid "Only"
4882
  msgstr ""
4883
 
4884
- #: inc/user/lp-user-functions.php:598
4885
  msgid "images accepted for upload"
4886
  msgstr ""
4887
 
4888
- #: inc/user/lp-user-functions.php:607
4889
  msgid "Images must be under"
4890
  msgstr ""
4891
 
4892
- #: inc/user/lp-user-functions.php:607
4893
  msgid "MB in size"
4894
  msgstr ""
4895
 
4896
- #: inc/user/lp-user-functions.php:615
4897
  msgid "Please select an image for upload"
4898
  msgstr ""
4899
 
4900
- #: inc/user/lp-user-functions.php:644
4901
  msgid "Image is uploaded success"
4902
  msgstr ""
4903
 
4904
- #: inc/user/lp-user-functions.php:644
4905
  msgid "Error on upload image"
4906
  msgstr ""
4907
 
4908
- #: inc/user/lp-user-functions.php:670 inc/user/lp-user-functions.php:701
4909
- #: inc/user/lp-user-functions.php:717 inc/user/lp-user-functions.php:724
4910
  msgid "Thumbnail of image profile not created"
4911
  msgstr ""
4912
 
4913
- #: inc/user/lp-user-functions.php:688
4914
  msgid "Error on crop user picture profile "
4915
  msgstr ""
4916
 
4917
- #: inc/user/lp-user-functions.php:743
4918
  msgid "Profile picture is changed"
4919
  msgstr ""
4920
 
4921
- #: inc/user/lp-user-functions.php:787 inc/user/lp-user-functions.php:1225
4922
  msgid "Old password incorrect!"
4923
  msgstr ""
4924
 
4925
- #: inc/user/lp-user-functions.php:800 inc/user/lp-user-functions.php:1231
4926
  msgid "Confirmation password incorrect!"
4927
  msgstr ""
4928
 
4929
- #: inc/user/lp-user-functions.php:818 inc/user/lp-user-functions.php:1194
4930
  msgid "Your change is saved"
4931
  msgstr ""
4932
 
4933
- #: inc/user/lp-user-functions.php:826 inc/user/lp-user-functions.php:1196
4934
  msgid "Error on update your profile info"
4935
  msgstr ""
4936
 
4937
- #: inc/user/lp-user-functions.php:939
4938
  msgid "Please login to enroll this course"
4939
  msgstr ""
4940
 
4941
- #: inc/user/lp-user-functions.php:957
4942
  msgid "You have already finished course"
4943
  msgstr ""
4944
 
4945
- #: inc/user/lp-user-functions.php:960
4946
  msgid "You have already enrolled in this course"
4947
  msgstr ""
4948
 
4949
- #: inc/user/lp-user-functions.php:1172
4950
  msgid "Your avatar updated"
4951
  msgstr ""
4952
 
4953
- #: inc/user/lp-user-functions.php:1238
4954
  msgid "Your password updated"
4955
  msgstr ""
4956
 
4957
- #: inc/user/lp-user-functions.php:1240
4958
  msgid "Change your password failed"
4959
  msgstr ""
4960
 
@@ -5098,6 +5099,380 @@ msgstr ""
5098
  msgid "%d lesson"
5099
  msgstr ""
5100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5101
  #: templates/search-form.php:18
5102
  msgid "Search course..."
5103
  msgstr ""
@@ -5124,11 +5499,11 @@ msgstr ""
5124
  msgid "Logged in as <a href=\"%1$s\">%2$s</a>."
5125
  msgstr ""
5126
 
5127
- #: templates/checkout/form-logged-in.php:27
5128
  msgid "Log out of this account"
5129
  msgstr ""
5130
 
5131
- #: templates/checkout/form-logged-in.php:27
5132
  msgid "Log out &raquo;"
5133
  msgstr ""
5134
 
@@ -5230,7 +5605,8 @@ msgid "Check"
5230
  msgstr ""
5231
 
5232
  #: templates/content-quiz/buttons.php:58
5233
- #: templates/single-course/buttons.php:40
 
5234
  msgid "Retake"
5235
  msgstr ""
5236
 
@@ -5433,15 +5809,11 @@ msgstr ""
5433
  msgid "Update"
5434
  msgstr ""
5435
 
5436
- #: templates/profile/tabs/orders.php:25
5437
- msgid "Status"
5438
- msgstr ""
5439
-
5440
- #: templates/profile/tabs/orders.php:27
5441
  msgid "Action"
5442
  msgstr ""
5443
 
5444
- #: templates/profile/tabs/orders.php:69 templates/profile/tabs/orders.php:73
5445
  msgid "You have not got any orders yet!"
5446
  msgstr ""
5447
 
@@ -5499,33 +5871,37 @@ msgid "New password does not match!"
5499
  msgstr ""
5500
 
5501
  #: templates/single-course/buttons.php:20
5502
- #: templates/single-course/buttons.php:38
 
 
5503
  msgid "Buy this course"
5504
  msgstr ""
5505
 
5506
- #: templates/single-course/buttons.php:39
 
5507
  msgid "Enroll"
5508
  msgstr ""
5509
 
5510
- #: templates/single-course/buttons.php:41
 
5511
  msgid ""
5512
- "The class is full so the enrollment is close. Please contact the site admin."
5513
  msgstr ""
5514
 
5515
- #: templates/single-course/buttons.php:52
5516
  #, php-format
5517
  msgid "Retake course (+%d)"
5518
  msgstr ""
5519
 
5520
- #: templates/single-course/buttons.php:114
5521
  msgid "Your order is processing. Please wait for approval."
5522
  msgstr ""
5523
 
5524
- #: templates/single-course/buttons.php:116
5525
  msgid "Sorry, you can not purchase this course"
5526
  msgstr ""
5527
 
5528
- #: templates/single-course/content-item-lp_lesson.php:73
5529
  msgid "Complete"
5530
  msgstr ""
5531
 
@@ -5618,7 +5994,7 @@ msgstr ""
5618
  msgid "Viewed"
5619
  msgstr ""
5620
 
5621
- #: templates/single-course/section/title.php:26
5622
  #, php-format
5623
  msgid "%d/%d"
5624
  msgstr ""
3
  # This file is distributed under the same license as the PACKAGE package.
4
  # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
  #
 
 
 
 
 
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
+ "Project-Id-Version: Package Name\n"
10
  "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2017-08-25 13:30+0700\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
105
 
106
  #: inc/class-lp-ajax.php:614 inc/admin/lp-admin-functions.php:962
107
  #: inc/admin/views/statistics/orders.php:63
108
+ #: templates/single-course/content-item-lp_lesson.php:37
109
  #: templates/single-course/section/item-meta.php:66
110
  msgid "Completed"
111
  msgstr ""
252
  msgstr ""
253
 
254
  #: inc/class-lp-install.php:90 inc/lp-core-functions.php:2001
255
+ #: inc/admin/class-lp-admin-ajax.php:884 inc/admin/class-lp-admin.php:181
256
+ #: inc/custom-post-types/course.php:720 templates/profile/tabs/orders.php:40
257
  msgid "Cancel"
258
  msgstr ""
259
 
284
  msgid "Add-ons"
285
  msgstr ""
286
 
287
+ #: inc/class-lp-shortcodes.php:341 templates/content-archive-course.php:36
288
  msgid "No course found."
289
  msgstr ""
290
 
291
+ #: inc/class-lp-shortcodes.php:363 inc/class-lp-shortcodes.php:514
292
  msgid "Invalid order!"
293
  msgstr ""
294
 
295
+ #: inc/class-lp-shortcodes.php:415
296
  msgid "Please login to fill in this form."
297
  msgstr ""
298
 
299
+ #: inc/class-lp-shortcodes.php:418
300
  msgid "You are a teacher now."
301
  msgstr ""
302
 
303
+ #: inc/class-lp-shortcodes.php:421 inc/lp-core-functions.php:1485
304
  msgid "Your request has been sent! We will get in touch with you soon!"
305
  msgstr ""
306
 
307
+ #: inc/class-lp-shortcodes.php:424
308
  msgid "Your role is allowed to create a course."
309
  msgstr ""
310
 
311
+ #: inc/class-lp-shortcodes.php:436
312
  msgid "Become a Teacher"
313
  msgstr ""
314
 
315
+ #: inc/class-lp-shortcodes.php:437
316
  msgid "Fill in your information and send us to become a teacher."
317
  msgstr ""
318
 
319
+ #: inc/class-lp-shortcodes.php:438 templates/global/become-teacher-form.php:13
320
  msgid "Submit"
321
  msgstr ""
322
 
323
+ #: inc/class-lp-shortcodes.php:439 templates/checkout/payment.php:16
324
  msgid "Processing"
325
  msgstr ""
326
 
327
+ #: inc/class-lp-shortcodes.php:477
328
  #, php-format
329
  msgid "The user %s is not available!"
330
  msgstr ""
331
 
332
+ #: inc/class-lp-shortcodes.php:548
333
  msgid "Forgot password?"
334
  msgstr ""
335
 
336
+ #: inc/class-lp-shortcodes.php:550
337
  msgid "Create new account"
338
  msgstr ""
339
 
342
  msgid "Function %s should be overwritten in child class"
343
  msgstr ""
344
 
345
+ #: inc/lp-add-on-functions.php:92
346
  #, php-format
347
  msgid "Installed <span class=\"count\">(%s)</span>"
348
  msgstr ""
349
 
350
+ #: inc/lp-add-on-functions.php:97
351
  #, php-format
352
  msgid "Add-ons <span class=\"count\">(%s)</span>"
353
  msgstr ""
354
 
355
+ #: inc/lp-add-on-functions.php:102
356
  #, php-format
357
  msgid "Related Themes <span class=\"count\">(%s)</span>"
358
  msgstr ""
359
 
360
+ #: inc/lp-add-on-functions.php:121 inc/lp-core-functions.php:2239
361
+ #: inc/lp-core-functions.php:2690 inc/admin/lp-admin-actions.php:50
362
  #: inc/admin/lp-admin-functions.php:588 inc/admin/lp-admin-functions.php:754
363
  #: inc/admin/lp-admin-functions.php:957 inc/admin/lp-admin-functions.php:2356
364
  #: inc/admin/sub-menus/tools.php:329 inc/admin/views/statistics/courses.php:27
373
  msgid "All"
374
  msgstr ""
375
 
376
+ #: inc/lp-add-on-functions.php:136
377
  msgid "Get More"
378
  msgstr ""
379
 
380
+ #: inc/lp-add-on-functions.php:317
381
  msgid ""
382
  "An unexpected error occurred. Something may be wrong with WordPress.org or "
383
  "this server&#8217;s configuration. If you continue to have problems, please "
384
  "try the <a href=\"https://wordpress.org/support/\">support forums</a>."
385
  msgstr ""
386
 
387
+ #: inc/lp-add-on-functions.php:317
388
  msgid ""
389
  "(WordPress could not establish a secure connection to WordPress.org. Please "
390
  "contact your server administrator.)"
391
  msgstr ""
392
 
393
+ #: inc/lp-add-on-functions.php:440
394
  #, php-format
395
  msgid "Installing Plugin: %s"
396
  msgstr ""
397
 
398
+ #: inc/lp-add-on-functions.php:454
399
  msgid "Not install"
400
  msgstr ""
401
 
402
+ #: inc/lp-add-on-functions.php:459 inc/admin/lp-admin-functions.php:1400
403
  msgid "Installed"
404
  msgstr ""
405
 
406
+ #: inc/lp-add-on-functions.php:469 inc/lp-add-on-functions.php:496
407
  #: inc/admin/class-lp-plugin-install-list-table.php:420
408
  msgid "Enabled"
409
  msgstr ""
410
 
411
+ #: inc/lp-add-on-functions.php:469 inc/lp-add-on-functions.php:496
412
  #: inc/admin/class-lp-plugin-install-list-table.php:422
413
  msgid "Disabled"
414
  msgstr ""
415
 
416
+ #: inc/lp-add-on-functions.php:518
417
  msgid "All add-ons that you have installed"
418
  msgstr ""
419
 
420
+ #: inc/lp-add-on-functions.php:528 inc/lp-add-on-functions.php:577
421
  msgid "All add-ons we provide."
422
  msgstr ""
423
 
424
+ #: inc/lp-add-on-functions.php:529 inc/lp-add-on-functions.php:578
425
  #, php-format
426
  msgid "Last checked %s ago"
427
  msgstr ""
428
 
429
+ #: inc/lp-add-on-functions.php:530 inc/lp-add-on-functions.php:579
430
  #, php-format
431
  msgid "<a href=\"%s\">%s</a>"
432
  msgstr ""
433
 
434
+ #: inc/lp-add-on-functions.php:530 inc/lp-add-on-functions.php:579
435
  msgid "Check again!"
436
  msgstr ""
437
 
438
+ #: inc/lp-add-on-functions.php:691
439
  #: inc/admin/class-lp-plugin-install-list-table.php:362
440
  #, php-format
441
  msgid "Install %s now"
442
  msgstr ""
443
 
444
+ #: inc/lp-add-on-functions.php:691
445
  msgid "Install Now"
446
  msgstr ""
447
 
448
+ #: inc/lp-add-on-functions.php:698
449
  #: inc/admin/class-lp-plugin-install-list-table.php:369
450
  #, php-format
451
  msgid "Update %s now"
452
  msgstr ""
453
 
454
+ #: inc/lp-add-on-functions.php:698
455
  #: inc/admin/class-lp-plugin-install-list-table.php:369
456
  #: inc/admin/views/updates/0.9/step-repair-database.php:17
457
  msgid "Update Now"
458
  msgstr ""
459
 
460
+ #: inc/lp-add-on-functions.php:704
461
  msgid "This plugin is already installed and is up to date"
462
  msgstr ""
463
 
464
+ #: inc/lp-add-on-functions.php:704
465
  msgctxt "plugin"
466
  msgid "Installed"
467
  msgstr ""
468
 
469
+ #: inc/lp-add-on-functions.php:709 inc/lp-add-on-functions.php:718
470
  #, php-format
471
  msgid "Disable %s now"
472
  msgstr ""
473
 
474
+ #: inc/lp-add-on-functions.php:709 inc/lp-add-on-functions.php:718
475
  msgid "Disable Now"
476
  msgstr ""
477
 
478
+ #: inc/lp-add-on-functions.php:711 inc/lp-add-on-functions.php:720
479
  #, php-format
480
  msgid "Enable %s now"
481
  msgstr ""
482
 
483
+ #: inc/lp-add-on-functions.php:711 inc/lp-add-on-functions.php:720
484
  msgid "Enable Now"
485
  msgstr ""
486
 
487
+ #: inc/lp-add-on-functions.php:724
488
  #, php-format
489
  msgid "Buy %s now"
490
  msgstr ""
491
 
492
+ #: inc/lp-add-on-functions.php:724 inc/lp-add-on-functions.php:897
493
  msgid "Buy Now"
494
  msgstr ""
495
 
496
+ #: inc/lp-add-on-functions.php:728
497
  #, php-format
498
  msgid "Version: %s"
499
  msgstr ""
500
 
501
+ #: inc/lp-add-on-functions.php:737 inc/lp-add-on-functions.php:748
502
  msgid "No add-on found"
503
  msgstr ""
504
 
505
+ #: inc/lp-add-on-functions.php:790
506
  msgid "Free Add-ons"
507
  msgstr ""
508
 
509
+ #: inc/lp-add-on-functions.php:816 inc/lp-add-on-functions.php:925
510
  #, php-format
511
  msgid "<cite>By %s</cite>"
512
  msgstr ""
513
 
514
+ #: inc/lp-add-on-functions.php:836
515
  #: inc/admin/class-lp-plugin-install-list-table.php:454
516
  msgid "Last Updated:"
517
  msgstr ""
518
 
519
+ #: inc/lp-add-on-functions.php:838
520
  #: inc/admin/class-lp-plugin-install-list-table.php:455
521
+ #: inc/custom-post-types/order.php:513
522
  #, php-format
523
  msgid "%s ago"
524
  msgstr ""
525
 
526
+ #: inc/lp-add-on-functions.php:846
527
  #: inc/admin/class-lp-plugin-install-list-table.php:461
528
  msgctxt "Active plugin installs"
529
  msgid "1+ Million"
530
  msgstr ""
531
 
532
+ #: inc/lp-add-on-functions.php:850
533
  #: inc/admin/class-lp-plugin-install-list-table.php:465
534
  #, php-format
535
  msgid "%s Active Installs"
536
  msgstr ""
537
 
538
+ #: inc/lp-add-on-functions.php:858
539
  #: inc/admin/class-lp-plugin-install-list-table.php:471
540
  msgid "Untested with your version of WordPress"
541
  msgstr ""
542
 
543
+ #: inc/lp-add-on-functions.php:860
544
  #: inc/admin/class-lp-plugin-install-list-table.php:473
545
  msgid "<strong>Incompatible</strong> with your version of WordPress"
546
  msgstr ""
547
 
548
+ #: inc/lp-add-on-functions.php:862
549
  #: inc/admin/class-lp-plugin-install-list-table.php:475
550
  msgid "<strong>Compatible</strong> with your version of WordPress"
551
  msgstr ""
552
 
553
+ #: inc/lp-add-on-functions.php:875
554
  msgid "Premium Add-ons"
555
  msgstr ""
556
 
557
+ #: inc/lp-add-on-functions.php:936
558
  msgid "No theme found"
559
  msgstr ""
560
 
561
+ #: inc/lp-add-on-functions.php:975
562
  msgid "Education Support"
563
  msgstr ""
564
 
565
+ #: inc/lp-add-on-functions.php:1001 inc/lp-add-on-functions.php:1075
566
  msgid "$"
567
  msgstr ""
568
 
569
+ #: inc/lp-add-on-functions.php:1004 inc/lp-add-on-functions.php:1078
570
  msgid " sales"
571
  msgstr ""
572
 
573
+ #: inc/lp-add-on-functions.php:1026 inc/lp-add-on-functions.php:1100
574
  #: inc/lp-core-functions.php:525
575
  msgid "Get it now"
576
  msgstr ""
577
 
578
+ #: inc/lp-add-on-functions.php:1028 inc/lp-add-on-functions.php:1102
579
  #: inc/lp-core-functions.php:527
580
  msgid "View Demo"
581
  msgstr ""
582
 
583
+ #: inc/lp-add-on-functions.php:1049
584
  msgid "Other"
585
  msgstr ""
586
 
599
  msgstr ""
600
 
601
  #: inc/lp-core-functions.php:697
602
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:77
603
  msgid "<"
604
  msgstr ""
605
 
606
  #: inc/lp-core-functions.php:698
607
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:86
608
  msgid ">"
609
  msgstr ""
610
 
628
  #: inc/admin/settings/class-lp-settings-courses.php:9
629
  #: inc/admin/settings/class-lp-settings-pages.php:105
630
  #: inc/admin/sub-menus/statistics.php:51 inc/admin/sub-menus/statistics.php:58
631
+ #: inc/custom-post-types/course.php:399 inc/custom-post-types/course.php:401
632
  #: inc/user/class-lp-profile.php:66
633
  msgid "Courses"
634
  msgstr ""
635
 
636
+ #: inc/lp-core-functions.php:868 inc/custom-post-types/course.php:1312
637
  msgid "Categories"
638
  msgstr ""
639
 
640
+ #: inc/lp-core-functions.php:873 inc/custom-post-types/course.php:145
641
  msgid "Tags"
642
  msgstr ""
643
 
755
  msgid "Learning"
756
  msgstr ""
757
 
758
+ #: inc/lp-core-functions.php:2241 inc/custom-post-types/order.php:449
759
  msgid "Purchased"
760
  msgstr ""
761
 
762
+ #: inc/lp-core-functions.php:2242 inc/lp-core-functions.php:2692
763
  msgid "Finished"
764
  msgstr ""
765
 
839
  msgid "Order number <strong>%s</strong> can not cancelled"
840
  msgstr ""
841
 
842
+ #: inc/lp-core-functions.php:2675 inc/course/lp-course-functions.php:779
843
  #: templates/single-course/section/item-meta.php:51
844
  msgid "Passed"
845
  msgstr ""
846
 
847
+ #: inc/lp-core-functions.php:2678 inc/course/lp-course-functions.php:782
848
  #: templates/single-course/section/item-meta.php:54
849
  msgid "Failed"
850
  msgstr ""
851
 
852
+ #: inc/lp-core-functions.php:2691 inc/course/lp-course-functions.php:785
853
  #: templates/single-course/section/item-meta.php:61
854
  msgid "In Progress"
855
  msgstr ""
887
  msgid "Final"
888
  msgstr ""
889
 
890
+ #: inc/lp-template-functions.php:1369 inc/custom-post-types/abstract.php:454
891
  #: inc/custom-post-types/lesson.php:211
892
  #: inc/libraries/meta-box/inc/fields/oembed.php:79
893
  #: templates/single-course/section/item-meta.php:28
900
 
901
  #: inc/lp-template-functions.php:1449
902
  #: inc/admin/views/meta-boxes/course/curriculum.php:8
903
+ #: inc/custom-post-types/course.php:488
904
  msgid "Curriculum"
905
  msgstr ""
906
 
934
  msgid "There are no available questions for this quiz, please use "
935
  msgstr ""
936
 
937
+ #: inc/admin/class-lp-admin-ajax.php:278 inc/admin/class-lp-admin-ajax.php:398
938
  #: inc/admin/lp-admin-functions.php:1197
939
  #: inc/quiz/class-lp-quiz-factory.php:127
940
  #: inc/quiz/class-lp-quiz-factory.php:136
944
  msgid "Error"
945
  msgstr ""
946
 
947
+ #: inc/admin/class-lp-admin-ajax.php:350 inc/admin/class-lp-admin-ajax.php:355
948
+ #: inc/admin/class-lp-admin-ajax.php:467
949
  msgid "Untitled"
950
  msgstr ""
951
 
952
+ #: inc/admin/class-lp-admin-ajax.php:374
953
  msgid "No item found"
954
  msgstr ""
955
 
956
+ #: inc/admin/class-lp-admin-ajax.php:382
957
  msgid "A "
958
  msgstr ""
959
 
960
+ #: inc/admin/class-lp-admin-ajax.php:382
961
  msgid " is just used for only one "
962
  msgstr ""
963
 
964
+ #: inc/admin/class-lp-admin-ajax.php:427
965
  msgid "You have no permission to access this section."
966
  msgstr ""
967
 
968
+ #: inc/admin/class-lp-admin-ajax.php:484
969
  #: inc/custom-post-types/question.php:104
970
  msgid "No questions found"
971
  msgstr ""
972
 
973
+ #: inc/admin/class-lp-admin-ajax.php:510 inc/admin/class-lp-admin-ajax.php:555
974
  msgid "Permission denied"
975
  msgstr ""
976
 
977
+ #: inc/admin/class-lp-admin-ajax.php:516
978
  msgid "Check nonce failed"
979
  msgstr ""
980
 
981
+ #: inc/admin/class-lp-admin-ajax.php:522 inc/admin/class-lp-admin-ajax.php:567
982
  msgid "Order invalid"
983
  msgstr ""
984
 
985
+ #: inc/admin/class-lp-admin-ajax.php:529
986
  msgid "Course invalid"
987
  msgstr ""
988
 
989
+ #: inc/admin/class-lp-admin-ajax.php:635
990
  msgid "Verify nonce failed"
991
  msgstr ""
992
 
993
+ #: inc/admin/class-lp-admin-ajax.php:778
994
+ #: inc/admin/class-lp-admin-ajax.php:1006 inc/admin/lp-admin-functions.php:140
995
  msgid "Edit Page"
996
  msgstr ""
997
 
998
+ #: inc/admin/class-lp-admin-ajax.php:779
999
+ #: inc/admin/class-lp-admin-ajax.php:1008 inc/admin/lp-admin-functions.php:142
1000
  msgid "View Page"
1001
  msgstr ""
1002
 
1003
+ #: inc/admin/class-lp-admin-ajax.php:781
1004
  msgid "Error! Create page failed. Please try again!"
1005
  msgstr ""
1006
 
1007
+ #: inc/admin/class-lp-admin-ajax.php:784
1008
  msgid "Empty page name!"
1009
  msgstr ""
1010
 
1011
+ #: inc/admin/class-lp-admin-ajax.php:870
1012
  msgid ""
1013
  "Something went wrong! Please try again or ask <a href=\"https://wordpress."
1014
  "org/support/\">support forums</a>."
1015
  msgstr ""
1016
 
1017
+ #: inc/admin/class-lp-admin-ajax.php:883
1018
  msgid "Try again!"
1019
  msgstr ""
1020
 
1021
+ #: inc/admin/class-lp-admin-ajax.php:909
1022
  msgid "Import sample data successes."
1023
  msgstr ""
1024
 
1025
+ #: inc/admin/class-lp-admin-ajax.php:909
1026
  msgid "View courses"
1027
  msgstr ""
1028
 
1029
+ #: inc/admin/class-lp-admin-ajax.php:913
1030
  msgid "Import sample data failed. Please try again!."
1031
  msgstr ""
1032
 
1033
+ #: inc/admin/class-lp-admin-ajax.php:917
1034
  msgid ""
1035
  "Unknown error when installing/activating Import/Export addon. Please try "
1036
  "again!"
1037
  msgstr ""
1038
 
1039
+ #: inc/admin/class-lp-admin-ajax.php:933 inc/admin/class-lp-admin-ajax.php:954
1040
+ #: inc/admin/class-lp-admin-ajax.php:974
1041
  msgid ""
1042
  "You do not have sufficient permissions to deactivate plugins for this site."
1043
  msgstr ""
1044
 
1045
+ #: inc/admin/class-lp-admin-ajax.php:1114
1046
  msgid " course has duplicated"
1047
  msgstr ""
1048
 
1368
  #: inc/admin/views/statistics/orders.php:8
1369
  #: inc/admin/views/statistics/users.php:8
1370
  #: inc/admin/views/statistics/users.php:44
1371
+ #: inc/custom-post-types/course.php:1301 inc/custom-post-types/course.php:1308
1372
  msgid "Students"
1373
  msgstr ""
1374
 
1395
  #: inc/admin/lp-admin-functions.php:774 inc/admin/lp-admin-functions.php:2376
1396
  #: inc/admin/views/statistics/courses.php:46
1397
  #: inc/admin/views/statistics/general.php:60
1398
+ #: inc/course/abstract-lp-course.php:515 inc/custom-post-types/course.php:1369
1399
  #: inc/order/lp-order-functions.php:560
1400
  msgid "Free"
1401
  msgstr ""
1561
  msgid "Can not create a question"
1562
  msgstr ""
1563
 
1564
+ #: inc/admin/pointers/pointers.php:66 inc/custom-post-types/course.php:493
1565
  #: templates/single-course/curriculum.php:16
1566
  msgid "Course Curriculum"
1567
  msgstr ""
1589
  msgstr ""
1590
 
1591
  #: inc/admin/settings/class-lp-settings-courses.php:32
1592
+ #: inc/custom-post-types/course.php:412
1593
  msgctxt "slug"
1594
  msgid "courses"
1595
  msgstr ""
1823
 
1824
  #: inc/admin/settings/class-lp-settings-pages.php:121
1825
  #: inc/admin/sub-menus/statistics.php:52 inc/admin/sub-menus/statistics.php:59
1826
+ #: inc/custom-post-types/order.php:572 inc/custom-post-types/order.php:573
1827
+ #: inc/custom-post-types/order.php:577 inc/user/class-lp-profile.php:74
1828
  msgid "Orders"
1829
  msgstr ""
1830
 
2199
  msgstr ""
2200
 
2201
  #: inc/admin/views/meta-boxes/course/editor.php:62
2202
+ #: inc/custom-post-types/course.php:1300 inc/custom-post-types/course.php:1307
2203
  msgid "Content"
2204
  msgstr ""
2205
 
2221
  #: inc/admin/views/meta-boxes/course/js-template.php:88
2222
  #: inc/admin/views/meta-boxes/quiz/js-template.php:6
2223
  #: inc/admin/views/meta-boxes/quiz/questions.php:36
2224
+ #: inc/custom-post-types/course.php:404 inc/custom-post-types/lesson.php:97
2225
+ #: inc/custom-post-types/order.php:579 inc/custom-post-types/question.php:100
2226
  msgid "Add New"
2227
  msgstr ""
2228
 
2252
  msgstr ""
2253
 
2254
  #: inc/admin/views/meta-boxes/course/loop-item.php:69
2255
+ #: inc/custom-post-types/course.php:354
2256
  msgid "Are you sure you want to remove this item?"
2257
  msgstr ""
2258
 
2292
  msgstr ""
2293
 
2294
  #: inc/admin/views/meta-boxes/course/review-log.php:25
2295
+ #: inc/custom-post-types/course.php:356
2296
  msgid "Your course is pending for reviewing"
2297
  msgstr ""
2298
 
2303
  msgstr ""
2304
 
2305
  #: inc/admin/views/meta-boxes/course/review-log.php:31
2306
+ #: inc/custom-post-types/course.php:353
2307
  msgid "Submit for Review"
2308
  msgstr ""
2309
 
2462
  msgstr ""
2463
 
2464
  #: inc/admin/views/meta-boxes/order/details.php:49
2465
+ #: inc/custom-post-types/order.php:537
2466
  #, php-format
2467
  msgid "Pay via <strong>%s</strong>"
2468
  msgstr ""
2498
  msgstr ""
2499
 
2500
  #: inc/admin/views/meta-boxes/order/details.php:87
2501
+ #: inc/custom-post-types/order.php:451 templates/cart/form.php:31
2502
  #: templates/cart/form.php:101 templates/checkout/order-received.php:32
2503
  #: templates/checkout/review-order.php:27
2504
  #: templates/checkout/review-order.php:68 templates/order/order-details.php:18
2505
+ #: templates/order/order-details.php:67 templates/profile/tabs/orders.php:27
2506
  msgid "Total"
2507
  msgstr ""
2508
 
3060
  msgstr ""
3061
 
3062
  #: inc/admin/views/statistics/orders.php:46
3063
+ #: inc/custom-post-types/order.php:450
3064
  #: templates/checkout/order-received.php:26
3065
+ #: templates/profile/tabs/orders.php:25
3066
  msgid "Date"
3067
  msgstr ""
3068
 
3282
  msgid "Checkout page is not setup"
3283
  msgstr ""
3284
 
3285
+ #: inc/course/abstract-lp-course.php:389
3286
  msgid "You enrolled"
3287
  msgstr ""
3288
 
3289
+ #: inc/course/abstract-lp-course.php:391
3290
  #, php-format
3291
  msgctxt ""
3292
  msgid "You and one student enrolled"
3295
  msgstr[0] ""
3296
  msgstr[1] ""
3297
 
3298
+ #: inc/course/abstract-lp-course.php:395
3299
  #, php-format
3300
  msgctxt ""
3301
  msgid "One student enrolled"
3304
  msgstr[0] ""
3305
  msgstr[1] ""
3306
 
3307
+ #: inc/course/abstract-lp-course.php:399
3308
  msgid "No student enrolled"
3309
  msgstr ""
3310
 
3311
+ #: inc/course/abstract-lp-course.php:809 inc/course/abstract-lp-course.php:827
3312
  #: inc/lesson/class-lp-lesson.php:120 inc/quiz/class-lp-quiz.php:611
3313
  #, php-format
3314
  msgid "The function %s doesn't exists"
3315
  msgstr ""
3316
 
3317
+ #: inc/course/abstract-lp-course.php:1116
3318
  #, php-format
3319
  msgid "%d of %d items completed"
3320
  msgstr ""
3321
 
3322
+ #: inc/course/abstract-lp-course.php:1119
3323
+ #: inc/course/abstract-lp-course.php:1121
3324
  #, php-format
3325
  msgid "%d%% completed"
3326
  msgstr ""
3327
 
3328
+ #: inc/course/abstract-lp-course.php:1539
3329
  #, php-format
3330
  msgid "This course will end within %s next"
3331
  msgstr ""
3335
  msgid "Are you sure you want to finish course %s?"
3336
  msgstr ""
3337
 
3338
+ #: inc/course/class-lp-course.php:32 templates/single-course/buttons.php:124
3339
  msgid "Finish course"
3340
  msgstr ""
3341
 
3392
  msgid "The course %d does not exists"
3393
  msgstr ""
3394
 
3395
+ #: inc/custom-post-types/abstract.php:414
3396
  #: inc/custom-post-types/abstract.php:417
 
3397
  msgid "updated."
3398
  msgstr ""
3399
 
3400
+ #: inc/custom-post-types/abstract.php:415
3401
  msgid "Custom field updated."
3402
  msgstr ""
3403
 
3404
+ #: inc/custom-post-types/abstract.php:416
3405
  msgid "Custom field deleted."
3406
  msgstr ""
3407
 
3408
+ #: inc/custom-post-types/abstract.php:419
3409
  #, php-format
3410
  msgid "Lesson restored to revision from %s"
3411
  msgstr ""
3412
 
3413
+ #: inc/custom-post-types/abstract.php:420
3414
  msgid "published."
3415
  msgstr ""
3416
 
3417
+ #: inc/custom-post-types/abstract.php:421
3418
  msgid "saved."
3419
  msgstr ""
3420
 
3421
+ #: inc/custom-post-types/abstract.php:422
3422
  msgid "submitted."
3423
  msgstr ""
3424
 
3425
+ #: inc/custom-post-types/abstract.php:424
3426
  #, php-format
3427
  msgid "scheduled for: <strong>%1$s</strong>."
3428
  msgstr ""
3429
 
3430
+ #: inc/custom-post-types/abstract.php:426
3431
  msgid "M j, Y @ G:i"
3432
  msgstr ""
3433
 
3434
+ #: inc/custom-post-types/abstract.php:428
3435
  msgid "draft updated."
3436
  msgstr ""
3437
 
3438
+ #: inc/custom-post-types/abstract.php:434
3439
+ #: inc/custom-post-types/abstract.php:443 inc/custom-post-types/lesson.php:246
3440
  #: inc/custom-post-types/question.php:279 inc/custom-post-types/quiz.php:358
3441
+ #: templates/profile/tabs/orders.php:49
3442
  msgid "View"
3443
  msgstr ""
3444
 
3445
+ #: inc/custom-post-types/course.php:62
3446
  msgid "Add Lesson"
3447
  msgstr ""
3448
 
3449
+ #: inc/custom-post-types/course.php:67
3450
  msgid "Add Quiz"
3451
  msgstr ""
3452
 
3453
+ #: inc/custom-post-types/course.php:103 inc/custom-post-types/course.php:105
3454
  msgid "Course Categories"
3455
  msgstr ""
3456
 
3457
+ #: inc/custom-post-types/course.php:106 inc/custom-post-types/course.php:107
3458
  msgid "Category"
3459
  msgstr ""
3460
 
3461
+ #: inc/custom-post-types/course.php:108
3462
  msgid "Add New Course Category"
3463
  msgstr ""
3464
 
3465
+ #: inc/custom-post-types/course.php:109
3466
  msgid "All Categories"
3467
  msgstr ""
3468
 
3469
+ #: inc/custom-post-types/course.php:120
3470
  msgctxt "slug"
3471
  msgid "course-category"
3472
  msgstr ""
3473
 
3474
+ #: inc/custom-post-types/course.php:131
3475
  msgid "Course Tags"
3476
  msgstr ""
3477
 
3478
+ #: inc/custom-post-types/course.php:132 inc/custom-post-types/question.php:74
3479
  #: inc/custom-post-types/question.php:75 inc/updates/_update-from-0.9.php:1166
3480
  #: inc/updates/_update-from-0.9.php:1167 inc/updates/_update-from-0.9.php:1168
3481
  #: inc/updates/_update-from-0.9.php:1185 inc/updates/_update-from-0.9.php:1186
3482
  msgid "Tag"
3483
  msgstr ""
3484
 
3485
+ #: inc/custom-post-types/course.php:133
3486
  msgid "Search Course Tags"
3487
  msgstr ""
3488
 
3489
+ #: inc/custom-post-types/course.php:134
3490
  msgid "Popular Course Tags"
3491
  msgstr ""
3492
 
3493
+ #: inc/custom-post-types/course.php:135
3494
  msgid "All Course Tags"
3495
  msgstr ""
3496
 
3497
+ #: inc/custom-post-types/course.php:138
3498
  msgid "Edit Course Tag"
3499
  msgstr ""
3500
 
3501
+ #: inc/custom-post-types/course.php:139
3502
  msgid "Update Course Tag"
3503
  msgstr ""
3504
 
3505
+ #: inc/custom-post-types/course.php:140
3506
  msgid "Add New Course Tag"
3507
  msgstr ""
3508
 
3509
+ #: inc/custom-post-types/course.php:141
3510
  msgid "New Course Tag Name"
3511
  msgstr ""
3512
 
3513
+ #: inc/custom-post-types/course.php:142
3514
  msgid "Separate tags with commas"
3515
  msgstr ""
3516
 
3517
+ #: inc/custom-post-types/course.php:143
3518
  msgid "Add or remove tags"
3519
  msgstr ""
3520
 
3521
+ #: inc/custom-post-types/course.php:144
3522
  msgid "Choose from the most used tags"
3523
  msgstr ""
3524
 
3525
+ #: inc/custom-post-types/course.php:154
3526
  msgctxt "slug"
3527
  msgid "course-tag"
3528
  msgstr ""
3529
 
3530
+ #: inc/custom-post-types/course.php:264
3531
  msgid "Sorry! You can not update a course while it is viewing!"
3532
  msgstr ""
3533
 
3534
+ #: inc/custom-post-types/course.php:300
3535
  msgid "Toggle Course Content"
3536
  msgstr ""
3537
 
3538
+ #: inc/custom-post-types/course.php:317
3539
  msgid "Please enter the title of the course"
3540
  msgstr ""
3541
 
3542
+ #: inc/custom-post-types/course.php:318
3543
  msgid "Please add at least one section for the course"
3544
  msgstr ""
3545
 
3546
+ #: inc/custom-post-types/course.php:319
3547
  msgid "Please enter the title of the section"
3548
  msgstr ""
3549
 
3550
+ #: inc/custom-post-types/course.php:320
3551
  msgid "Please set a price for this course"
3552
  msgstr ""
3553
 
3554
+ #: inc/custom-post-types/course.php:338
3555
  msgid "Do you want to remove this lesson permanently?"
3556
  msgstr ""
3557
 
3558
+ #: inc/custom-post-types/course.php:339
3559
  msgid "Do you want to remove this quiz permanently?"
3560
  msgstr ""
3561
 
3562
+ #: inc/custom-post-types/course.php:340
3563
  msgid "Do you want to remove this section permanently?"
3564
  msgstr ""
3565
 
3566
+ #: inc/custom-post-types/course.php:341
3567
  msgid "New quiz added"
3568
  msgstr ""
3569
 
3570
+ #: inc/custom-post-types/course.php:342
3571
  msgid "New lesson added"
3572
  msgstr ""
3573
 
3574
+ #: inc/custom-post-types/course.php:343
3575
  msgid "New section added"
3576
  msgstr ""
3577
 
3578
+ #: inc/custom-post-types/course.php:344
3579
  msgid "The lesson removed"
3580
  msgstr ""
3581
 
3582
+ #: inc/custom-post-types/course.php:345
3583
  msgid "The quiz removed"
3584
  msgstr ""
3585
 
3586
+ #: inc/custom-post-types/course.php:346
3587
  msgid "The section removed"
3588
  msgstr ""
3589
 
3590
+ #: inc/custom-post-types/course.php:347
3591
  msgid "The ordering completed"
3592
  msgstr ""
3593
 
3594
+ #: inc/custom-post-types/course.php:348
3595
  msgid "Lesson added to section completed!"
3596
  msgstr ""
3597
 
3598
+ #: inc/custom-post-types/course.php:349
3599
  msgid "Quiz added to section completed!"
3600
  msgstr ""
3601
 
3602
+ #: inc/custom-post-types/course.php:350
3603
  #, php-format
3604
  msgid "%s updated"
3605
  msgstr ""
3606
 
3607
+ #: inc/custom-post-types/course.php:351
3608
  msgid "Click to quick edit name"
3609
  msgstr ""
3610
 
3611
+ #: inc/custom-post-types/course.php:352
3612
  msgid "Save Course"
3613
  msgstr ""
3614
 
3615
+ #: inc/custom-post-types/course.php:355
3616
  msgid "You course will become to Pending"
3617
  msgstr ""
3618
 
3619
+ #: inc/custom-post-types/course.php:397
3620
  msgctxt "Post Type General Name"
3621
  msgid "Courses"
3622
  msgstr ""
3623
 
3624
+ #: inc/custom-post-types/course.php:398
3625
  msgctxt "Post Type Singular Name"
3626
  msgid "Course"
3627
  msgstr ""
3628
 
3629
+ #: inc/custom-post-types/course.php:400
3630
  msgid "Parent Item:"
3631
  msgstr ""
3632
 
3633
+ #: inc/custom-post-types/course.php:402
3634
  msgid "View Course"
3635
  msgstr ""
3636
 
3637
+ #: inc/custom-post-types/course.php:403
3638
  msgid "Add New Course"
3639
  msgstr ""
3640
 
3641
+ #: inc/custom-post-types/course.php:405
3642
  msgid "Edit Course"
3643
  msgstr ""
3644
 
3645
+ #: inc/custom-post-types/course.php:406
3646
  msgid "Update Course"
3647
  msgstr ""
3648
 
3649
+ #: inc/custom-post-types/course.php:407
3650
  msgid "Search Courses"
3651
  msgstr ""
3652
 
3653
+ #: inc/custom-post-types/course.php:408
3654
  #, php-format
3655
  msgid ""
3656
  "You have not got any courses yet. Click <a href=\"%s\">Add new</a> to start"
3657
  msgstr ""
3658
 
3659
+ #: inc/custom-post-types/course.php:409
3660
  msgid "No course found in Trash"
3661
  msgstr ""
3662
 
3663
+ #: inc/custom-post-types/course.php:515 inc/custom-post-types/quiz.php:152
3664
  msgid "General Settings"
3665
  msgstr ""
3666
 
3667
+ #: inc/custom-post-types/course.php:520 inc/custom-post-types/lesson.php:209
3668
  #: inc/custom-post-types/quiz.php:178 inc/custom-post-types/quiz.php:327
3669
  msgid "Duration"
3670
  msgstr ""
3671
 
3672
+ #: inc/custom-post-types/course.php:523
3673
  msgid "The duration of the course."
3674
  msgstr ""
3675
 
3676
+ #: inc/custom-post-types/course.php:527
3677
  msgid "Maximum students"
3678
  msgstr ""
3679
 
3680
+ #: inc/custom-post-types/course.php:530
3681
  msgid "Maximum number of students who can enroll in this course."
3682
  msgstr ""
3683
 
3684
+ #: inc/custom-post-types/course.php:534
3685
  msgid "Students enrolled"
3686
  msgstr ""
3687
 
3688
+ #: inc/custom-post-types/course.php:537
3689
  msgid "How many students have taken this course."
3690
  msgstr ""
3691
 
3692
+ #: inc/custom-post-types/course.php:541
3693
  msgid "Re-take course"
3694
  msgstr ""
3695
 
3696
+ #: inc/custom-post-types/course.php:544
3697
  msgid "How many times the user can re-take this course. Set to 0 to disable."
3698
  msgstr ""
3699
 
3700
+ #: inc/custom-post-types/course.php:548
3701
  msgid "Featured"
3702
  msgstr ""
3703
 
3704
+ #: inc/custom-post-types/course.php:551
3705
  msgid "Set course as featured."
3706
  msgstr ""
3707
 
3708
+ #: inc/custom-post-types/course.php:555
3709
  msgid "Block Lessons Content"
3710
  msgstr ""
3711
 
3712
+ #: inc/custom-post-types/course.php:558
3713
  msgid "Block lessons content when course is expired."
3714
  msgstr ""
3715
 
3716
+ #: inc/custom-post-types/course.php:562
3717
  msgid "External link buy course"
3718
  msgstr ""
3719
 
3720
+ #: inc/custom-post-types/course.php:565
3721
  msgid "Redirect to this url when you press button buy this course."
3722
  msgstr ""
3723
 
3724
+ #: inc/custom-post-types/course.php:585
3725
  msgid "Basic Options"
3726
  msgstr ""
3727
 
3728
+ #: inc/custom-post-types/course.php:585
3729
  msgid "Advanced Options"
3730
  msgstr ""
3731
 
3732
+ #: inc/custom-post-types/course.php:588
3733
  msgid "The method to assess the result of a student for a course."
3734
  msgstr ""
3735
 
3736
+ #: inc/custom-post-types/course.php:590
3737
  msgid ""
3738
  "<br /><strong>Note! </strong>No final quiz in course, please add a final quiz"
3739
  msgstr ""
3740
 
3741
+ #: inc/custom-post-types/course.php:594
3742
  msgid "Assessment"
3743
  msgstr ""
3744
 
3745
+ #: inc/custom-post-types/course.php:599
3746
  msgid "Course result"
3747
  msgstr ""
3748
 
3749
+ #: inc/custom-post-types/course.php:604
3750
  msgid "Evaluate lessons"
3751
  msgstr ""
3752
 
3753
+ #: inc/custom-post-types/course.php:604
3754
  msgid "Evaluate by lessons user has completed per total lessons in course."
3755
  msgstr ""
3756
 
3757
+ #: inc/custom-post-types/course.php:605
3758
  msgid "Evaluate results of the final quiz"
3759
  msgstr ""
3760
 
3761
+ #: inc/custom-post-types/course.php:605
3762
  msgid "Evaluate by results of final quiz in course."
3763
  msgstr ""
3764
 
3765
+ #: inc/custom-post-types/course.php:607
3766
  msgid "Evaluate results of quizzes"
3767
  msgstr ""
3768
 
3769
+ #: inc/custom-post-types/course.php:607
3770
  msgid "Evaluate by achieved points per total point of all quizzes."
3771
  msgstr ""
3772
 
3773
+ #: inc/custom-post-types/course.php:608
3774
  msgid "Evaluate results of quizzes passed"
3775
  msgstr ""
3776
 
3777
+ #: inc/custom-post-types/course.php:608
3778
  msgid ""
3779
  "Evaluate by achieved points of passed course per total point of all quizzes."
3780
  msgstr ""
3781
 
3782
+ #: inc/custom-post-types/course.php:609
3783
  msgid "Evaluate quizzes"
3784
  msgstr ""
3785
 
3786
+ #: inc/custom-post-types/course.php:609
3787
  msgid "Evaluate by quizzes user has completed per total quizzes."
3788
  msgstr ""
3789
 
3790
+ #: inc/custom-post-types/course.php:615
3791
  msgid "Passing condition value"
3792
  msgstr ""
3793
 
3794
+ #: inc/custom-post-types/course.php:620
3795
  msgid ""
3796
  "The percentage of quiz result or lessons completed to finish the course."
3797
  msgstr ""
3798
 
3799
+ #: inc/custom-post-types/course.php:641
3800
  msgid "Payment Settings"
3801
  msgstr ""
3802
 
3803
+ #: inc/custom-post-types/course.php:646
3804
  msgid "Course payment"
3805
  msgstr ""
3806
 
3807
+ #: inc/custom-post-types/course.php:676
3808
  #, php-format
3809
  msgid ""
3810
  "This course is requires enrollment and the suggested price is <strong>%s</"
3811
  "strong>"
3812
  msgstr ""
3813
 
3814
+ #: inc/custom-post-types/course.php:684
3815
  msgid "This course is free."
3816
  msgstr ""
3817
 
3818
+ #: inc/custom-post-types/course.php:690 inc/custom-post-types/course.php:1302
3819
+ #: inc/custom-post-types/course.php:1309 templates/cart/form.php:30
3820
  #: templates/emails/order-items-table.php:21
3821
  msgid "Price"
3822
  msgstr ""
3823
 
3824
+ #: inc/custom-post-types/course.php:700
3825
  msgid "Sale Price"
3826
  msgstr ""
3827
 
3828
+ #: inc/custom-post-types/course.php:705
3829
  msgid "Leave blank to remove sale price."
3830
  msgstr ""
3831
 
3832
+ #: inc/custom-post-types/course.php:705
3833
  msgid "Schedule"
3834
  msgstr ""
3835
 
3836
+ #: inc/custom-post-types/course.php:710
3837
  msgid "Sale start date"
3838
  msgstr ""
3839
 
3840
+ #: inc/custom-post-types/course.php:717
3841
  msgid "Sale end date"
3842
  msgstr ""
3843
 
3844
+ #: inc/custom-post-types/course.php:728
3845
  msgid "Price set by Admin"
3846
  msgstr ""
3847
 
3848
+ #: inc/custom-post-types/course.php:732
3849
  msgid "Not set"
3850
  msgstr ""
3851
 
3852
+ #: inc/custom-post-types/course.php:735
3853
  msgid "Course Suggestion Price"
3854
  msgstr ""
3855
 
3856
+ #: inc/custom-post-types/course.php:740
3857
  msgid "The course price you want to suggest for admin to set."
3858
  msgstr ""
3859
 
3860
+ #: inc/custom-post-types/course.php:750
3861
  msgid "Requires enroll"
3862
  msgstr ""
3863
 
3864
+ #: inc/custom-post-types/course.php:753
3865
  msgid "Require users logged in to study or public to all."
3866
  msgstr ""
3867
 
3868
+ #: inc/custom-post-types/course.php:792
3869
  msgid "Author Settings"
3870
  msgstr ""
3871
 
3872
+ #: inc/custom-post-types/course.php:797 inc/custom-post-types/course.php:1299
3873
+ #: inc/custom-post-types/course.php:1306 inc/custom-post-types/lesson.php:204
3874
  #: inc/custom-post-types/question.php:243 inc/custom-post-types/quiz.php:324
3875
  msgid "Author"
3876
  msgstr ""
3877
 
3878
+ #: inc/custom-post-types/course.php:820
3879
  msgid "Review Logs"
3880
  msgstr ""
3881
 
3882
+ #: inc/custom-post-types/course.php:971
3883
  msgid "Course Curriculum only appear if course is saved"
3884
  msgstr ""
3885
 
3886
+ #: inc/custom-post-types/course.php:1136
3887
  msgid "Course has approved by Reviewer"
3888
  msgstr ""
3889
 
3890
+ #: inc/custom-post-types/course.php:1141
3891
  msgid "Course has rejected by Reviewer"
3892
  msgstr ""
3893
 
3894
+ #: inc/custom-post-types/course.php:1146
3895
  #, php-format
3896
  msgid "Course has submitted by %s"
3897
  msgstr ""
3898
 
3899
+ #: inc/custom-post-types/course.php:1151
3900
  msgid "Course has updated by Reviewer"
3901
  msgstr ""
3902
 
3903
+ #: inc/custom-post-types/course.php:1344
3904
  #, php-format
3905
  msgctxt "learnpress"
3906
  msgid "%d section"
3908
  msgstr[0] ""
3909
  msgstr[1] ""
3910
 
3911
+ #: inc/custom-post-types/course.php:1347
3912
  #, php-format
3913
  msgctxt "learnpress"
3914
  msgid "%d lesson"
3916
  msgstr[0] ""
3917
  msgstr[1] ""
3918
 
3919
+ #: inc/custom-post-types/course.php:1349
3920
  msgid "0 lesson"
3921
  msgstr ""
3922
 
3923
+ #: inc/custom-post-types/course.php:1353
3924
  #, php-format
3925
  msgctxt "learnpress"
3926
  msgid "%d quiz"
3928
  msgstr[0] ""
3929
  msgstr[1] ""
3930
 
3931
+ #: inc/custom-post-types/course.php:1355
3932
  msgid "0 quiz"
3933
  msgstr ""
3934
 
3935
+ #: inc/custom-post-types/course.php:1360
3936
  msgid "No content"
3937
  msgstr ""
3938
 
3939
+ #: inc/custom-post-types/course.php:1523
3940
  msgid "Course Video"
3941
  msgstr ""
3942
 
3943
+ #: inc/custom-post-types/course.php:1528
3944
  msgid "Video ID"
3945
  msgstr ""
3946
 
3947
+ #: inc/custom-post-types/course.php:1531
3948
  msgid "The id of Youtube or Vimeo video"
3949
  msgstr ""
3950
 
3951
+ #: inc/custom-post-types/course.php:1535
3952
  msgid "Video Type"
3953
  msgstr ""
3954
 
3955
+ #: inc/custom-post-types/course.php:1538
3956
  msgid "Chose video type"
3957
  msgstr ""
3958
 
3959
+ #: inc/custom-post-types/course.php:1541
3960
  msgid "Youtube"
3961
  msgstr ""
3962
 
3963
+ #: inc/custom-post-types/course.php:1542
3964
  msgid "Vimeo"
3965
  msgstr ""
3966
 
3967
+ #: inc/custom-post-types/course.php:1546
3968
  msgid "Embed width"
3969
  msgstr ""
3970
 
3971
+ #: inc/custom-post-types/course.php:1549
3972
  msgid "Set width of embed"
3973
  msgstr ""
3974
 
3975
+ #: inc/custom-post-types/course.php:1553
3976
  msgid "Embed height"
3977
  msgstr ""
3978
 
3979
+ #: inc/custom-post-types/course.php:1556
3980
  msgid "Set height of embed"
3981
  msgstr ""
3982
 
4063
  msgid "Standard"
4064
  msgstr ""
4065
 
4066
+ #: inc/custom-post-types/order.php:231 inc/order/lp-order-functions.php:37
4067
  msgid "Order on"
4068
  msgstr ""
4069
 
4070
+ #: inc/custom-post-types/order.php:253
4071
  msgid "Order number, user name, user email, course name etc..."
4072
  msgstr ""
4073
 
4074
+ #: inc/custom-post-types/order.php:331
4075
  msgid "Processing..."
4076
  msgstr ""
4077
 
4078
+ #: inc/custom-post-types/order.php:348 inc/custom-post-types/order.php:351
4079
  msgid "Apply"
4080
  msgstr ""
4081
 
4082
+ #: inc/custom-post-types/order.php:379 inc/custom-post-types/order.php:578
4083
  msgid "View Order"
4084
  msgstr ""
4085
 
4086
+ #: inc/custom-post-types/order.php:447 inc/custom-post-types/order.php:574
4087
+ #: templates/profile/tabs/orders.php:24
4088
  msgid "Order"
4089
  msgstr ""
4090
 
4091
+ #: inc/custom-post-types/order.php:448
4092
  msgid "Student"
4093
  msgstr ""
4094
 
4095
+ #: inc/custom-post-types/order.php:452 templates/profile/tabs/orders.php:26
4096
+ msgid "Status"
4097
+ msgstr ""
4098
+
4099
+ #: inc/custom-post-types/order.php:525
4100
  msgid "Course does not exist"
4101
  msgstr ""
4102
 
4103
+ #: inc/custom-post-types/order.php:575
4104
  msgid "Add New Order"
4105
  msgstr ""
4106
 
4107
+ #: inc/custom-post-types/order.php:576 inc/custom-post-types/order.php:668
4108
  #: templates/order/order-details.php:13
4109
  msgid "Order Details"
4110
  msgstr ""
4111
 
4112
+ #: inc/custom-post-types/order.php:580
4113
  msgid "Update Order"
4114
  msgstr ""
4115
 
4116
+ #: inc/custom-post-types/order.php:581
4117
  msgid "Search Orders"
4118
  msgstr ""
4119
 
4120
+ #: inc/custom-post-types/order.php:582
4121
  msgid "No order found"
4122
  msgstr ""
4123
 
4124
+ #: inc/custom-post-types/order.php:583
4125
  msgid "No order found in Trash"
4126
  msgstr ""
4127
 
4128
+ #: inc/custom-post-types/order.php:669
4129
  msgid "Order Actions"
4130
  msgstr ""
4131
 
4851
  msgid "question-tag"
4852
  msgstr ""
4853
 
4854
+ #: inc/user/abstract-lp-user.php:219
4855
  msgid "Create quiz history need pass course ID"
4856
  msgstr ""
4857
 
4858
+ #: inc/user/abstract-lp-user.php:1149 inc/user/abstract-lp-user.php:1488
4859
+ #: inc/user/abstract-lp-user.php:1500
4860
  #, php-format
4861
  msgid "The role %s for user doesn't exists"
4862
  msgstr ""
4863
 
4864
+ #: inc/user/abstract-lp-user.php:1923
4865
  msgid "You have already completed this lesson"
4866
  msgstr ""
4867
 
4869
  msgid "Every 3 Minutes"
4870
  msgstr ""
4871
 
4872
+ #: inc/user/lp-user-functions.php:89
4873
  msgctxt "User role"
4874
  msgid "Instructor"
4875
  msgstr ""
4876
 
4877
+ #: inc/user/lp-user-functions.php:335
4878
  msgid "Want to be an instructor?"
4879
  msgstr ""
4880
 
4881
+ #: inc/user/lp-user-functions.php:649
4882
  msgid "Only"
4883
  msgstr ""
4884
 
4885
+ #: inc/user/lp-user-functions.php:649
4886
  msgid "images accepted for upload"
4887
  msgstr ""
4888
 
4889
+ #: inc/user/lp-user-functions.php:658
4890
  msgid "Images must be under"
4891
  msgstr ""
4892
 
4893
+ #: inc/user/lp-user-functions.php:658
4894
  msgid "MB in size"
4895
  msgstr ""
4896
 
4897
+ #: inc/user/lp-user-functions.php:666
4898
  msgid "Please select an image for upload"
4899
  msgstr ""
4900
 
4901
+ #: inc/user/lp-user-functions.php:695
4902
  msgid "Image is uploaded success"
4903
  msgstr ""
4904
 
4905
+ #: inc/user/lp-user-functions.php:695
4906
  msgid "Error on upload image"
4907
  msgstr ""
4908
 
4909
+ #: inc/user/lp-user-functions.php:721 inc/user/lp-user-functions.php:752
4910
+ #: inc/user/lp-user-functions.php:768 inc/user/lp-user-functions.php:775
4911
  msgid "Thumbnail of image profile not created"
4912
  msgstr ""
4913
 
4914
+ #: inc/user/lp-user-functions.php:739
4915
  msgid "Error on crop user picture profile "
4916
  msgstr ""
4917
 
4918
+ #: inc/user/lp-user-functions.php:794
4919
  msgid "Profile picture is changed"
4920
  msgstr ""
4921
 
4922
+ #: inc/user/lp-user-functions.php:838 inc/user/lp-user-functions.php:1290
4923
  msgid "Old password incorrect!"
4924
  msgstr ""
4925
 
4926
+ #: inc/user/lp-user-functions.php:852 inc/user/lp-user-functions.php:1296
4927
  msgid "Confirmation password incorrect!"
4928
  msgstr ""
4929
 
4930
+ #: inc/user/lp-user-functions.php:871 inc/user/lp-user-functions.php:1259
4931
  msgid "Your change is saved"
4932
  msgstr ""
4933
 
4934
+ #: inc/user/lp-user-functions.php:879 inc/user/lp-user-functions.php:1261
4935
  msgid "Error on update your profile info"
4936
  msgstr ""
4937
 
4938
+ #: inc/user/lp-user-functions.php:994
4939
  msgid "Please login to enroll this course"
4940
  msgstr ""
4941
 
4942
+ #: inc/user/lp-user-functions.php:1013
4943
  msgid "You have already finished course"
4944
  msgstr ""
4945
 
4946
+ #: inc/user/lp-user-functions.php:1016
4947
  msgid "You have already enrolled in this course"
4948
  msgstr ""
4949
 
4950
+ #: inc/user/lp-user-functions.php:1237
4951
  msgid "Your avatar updated"
4952
  msgstr ""
4953
 
4954
+ #: inc/user/lp-user-functions.php:1303
4955
  msgid "Your password updated"
4956
  msgstr ""
4957
 
4958
+ #: inc/user/lp-user-functions.php:1305
4959
  msgid "Change your password failed"
4960
  msgstr ""
4961
 
5099
  msgid "%d lesson"
5100
  msgstr ""
5101
 
5102
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:50
5103
+ msgid "\n"
5104
+ msgstr ""
5105
+
5106
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:83
5107
+ #, python-format
5108
+ msgid " %s=\"%s\""
5109
+ msgstr ""
5110
+
5111
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:100
5112
+ #, python-format
5113
+ msgid "</%s>%s"
5114
+ msgstr ""
5115
+
5116
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:102
5117
+ #, python-format
5118
+ msgid "/>%s"
5119
+ msgstr ""
5120
+
5121
+ #: node_modules/node-gyp/gyp/pylib/gyp/input.py:1832
5122
+ #: node_modules/node-gyp/gyp/pylib/gyp/input.py:1893
5123
+ #, python-format
5124
+ msgid "Cycle: %s"
5125
+ msgstr ""
5126
+
5127
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:358
5128
+ msgid "_MBCS"
5129
+ msgstr ""
5130
+
5131
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:423
5132
+ msgid "/safeseh"
5133
+ msgstr ""
5134
+
5135
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:473
5136
+ msgid "/FS"
5137
+ msgstr ""
5138
+
5139
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:543
5140
+ #, python-format
5141
+ msgid "/DEF:\"%s\""
5142
+ msgstr ""
5143
+
5144
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:575
5145
+ msgid "/OUT:"
5146
+ msgstr ""
5147
+
5148
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:578
5149
+ msgid "/PDB:"
5150
+ msgstr ""
5151
+
5152
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:581
5153
+ msgid "/PGD:"
5154
+ msgstr ""
5155
+
5156
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:604
5157
+ #, python-format
5158
+ msgid "/STACK:%s%s"
5159
+ msgstr ""
5160
+
5161
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:643
5162
+ msgid "/DYNAMICBASE"
5163
+ msgstr ""
5164
+
5165
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:650
5166
+ msgid "/NXCOMPAT"
5167
+ msgstr ""
5168
+
5169
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:692
5170
+ msgid "/MANIFESTUAC:NO"
5171
+ msgstr ""
5172
+
5173
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:740
5174
+ msgid "/ALLOWISOLATION"
5175
+ msgstr ""
5176
+
5177
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:785
5178
+ msgid "/I"
5179
+ msgstr ""
5180
+
5181
+ #: node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py:72
5182
+ msgid "|"
5183
+ msgstr ""
5184
+
5185
+ #: node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py:76
5186
+ msgid "||"
5187
+ msgstr ""
5188
+
5189
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py:276
5190
+ #, python-format
5191
+ msgid "\\U%04x"
5192
+ msgstr ""
5193
+
5194
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py:988
5195
+ msgid ".name"
5196
+ msgstr ""
5197
+
5198
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py:999
5199
+ msgid ".path"
5200
+ msgstr ""
5201
+
5202
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py:1066
5203
+ msgid "$("
5204
+ msgstr ""
5205
+
5206
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:478
5207
+ #, python-format
5208
+ msgid "-isysroot %s"
5209
+ msgstr ""
5210
+
5211
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:481
5212
+ msgid "-Wconstant-conversion"
5213
+ msgstr ""
5214
+
5215
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:484
5216
+ msgid "-funsigned-char"
5217
+ msgstr ""
5218
+
5219
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:487
5220
+ msgid "-fasm-blocks"
5221
+ msgstr ""
5222
+
5223
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:491
5224
+ msgid "-mdynamic-no-pic"
5225
+ msgstr ""
5226
+
5227
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:499
5228
+ msgid "-mpascal-strings"
5229
+ msgstr ""
5230
+
5231
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:506
5232
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:510
5233
+ msgid "-gdwarf-2"
5234
+ msgstr ""
5235
+
5236
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:515
5237
+ msgid "-fstrict-aliasing"
5238
+ msgstr ""
5239
+
5240
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:517
5241
+ msgid "-fno-strict-aliasing"
5242
+ msgstr ""
5243
+
5244
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:520
5245
+ msgid "-fvisibility=hidden"
5246
+ msgstr ""
5247
+
5248
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:523
5249
+ msgid "-Werror"
5250
+ msgstr ""
5251
+
5252
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:526
5253
+ msgid "-Wnewline-eof"
5254
+ msgstr ""
5255
+
5256
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:533
5257
+ msgid "-flto"
5258
+ msgstr ""
5259
+
5260
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:556
5261
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:814
5262
+ msgid "-arch "
5263
+ msgstr ""
5264
+
5265
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:560
5266
+ msgid "-msse3"
5267
+ msgstr ""
5268
+
5269
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:563
5270
+ msgid "-mssse3"
5271
+ msgstr ""
5272
+
5273
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:565
5274
+ msgid "-msse4.1"
5275
+ msgstr ""
5276
+
5277
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:567
5278
+ msgid "-msse4.2"
5279
+ msgstr ""
5280
+
5281
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:578
5282
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:832
5283
+ msgid "-F"
5284
+ msgstr ""
5285
+
5286
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:588
5287
+ msgid "-ansi"
5288
+ msgstr ""
5289
+
5290
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:605
5291
+ #, python-format
5292
+ msgid "-std=%s"
5293
+ msgstr ""
5294
+
5295
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:610
5296
+ msgid "-fno-rtti"
5297
+ msgstr ""
5298
+
5299
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:612
5300
+ msgid "-fno-exceptions"
5301
+ msgstr ""
5302
+
5303
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:614
5304
+ msgid "-fvisibility-inlines-hidden"
5305
+ msgstr ""
5306
+
5307
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:616
5308
+ msgid "-fno-threadsafe-statics"
5309
+ msgstr ""
5310
+
5311
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:619
5312
+ msgid "-Wno-invalid-offsetof"
5313
+ msgstr ""
5314
+
5315
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:639
5316
+ msgid "-fobjc-gc"
5317
+ msgstr ""
5318
+
5319
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:641
5320
+ msgid "-fobjc-gc-only"
5321
+ msgstr ""
5322
+
5323
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:645
5324
+ msgid "-fobjc-arc"
5325
+ msgstr ""
5326
+
5327
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:650
5328
+ msgid "-Wobjc-missing-property-synthesis"
5329
+ msgstr ""
5330
+
5331
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:670
5332
+ msgid "-fobjc-call-cxx-cdtors"
5333
+ msgstr ""
5334
+
5335
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:782
5336
+ msgid "-Wl,-dead_strip"
5337
+ msgstr ""
5338
+
5339
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:785
5340
+ msgid "-Wl,-prebind"
5341
+ msgstr ""
5342
+
5343
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:795
5344
+ msgid "-isysroot "
5345
+ msgstr ""
5346
+
5347
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:798
5348
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:817
5349
+ msgid "-L"
5350
+ msgstr ""
5351
+
5352
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:801
5353
+ msgid "-Wl,-order_file "
5354
+ msgstr ""
5355
+
5356
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:821
5357
+ msgid "-install_name "
5358
+ msgstr ""
5359
+
5360
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:824
5361
+ msgid "-Wl,-rpath,"
5362
+ msgstr ""
5363
+
5364
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:840
5365
+ msgid "-lpkstart"
5366
+ msgstr ""
5367
+
5368
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:843
5369
+ msgid "/System/Library/PrivateFrameworks/PlugInKit.framework/PlugInKit"
5370
+ msgstr ""
5371
+
5372
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:844
5373
+ msgid "-fapplication-extension"
5374
+ msgstr ""
5375
+
5376
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:845
5377
+ msgid "-Xlinker -rpath -Xlinker @executable_path/../../Frameworks"
5378
+ msgstr ""
5379
+
5380
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:937
5381
+ #, python-format
5382
+ msgid "echo STRIP\\(%s\\)"
5383
+ msgstr ""
5384
+
5385
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:938
5386
+ #, python-format
5387
+ msgid "strip %s %s"
5388
+ msgstr ""
5389
+
5390
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:956
5391
+ #, python-format
5392
+ msgid "echo DSYMUTIL\\(%s\\)"
5393
+ msgstr ""
5394
+
5395
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:957
5396
+ #, python-format
5397
+ msgid "dsymutil %s -o %s"
5398
+ msgstr ""
5399
+
5400
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:1594
5401
+ #, python-format
5402
+ msgid "echo POSTBUILD\\(%s\\) %s"
5403
+ msgstr ""
5404
+
5405
+ #: node_modules/node-gyp/gyp/pylib/gyp/__init__.py:364
5406
+ msgid "USERPROFILE"
5407
+ msgstr ""
5408
+
5409
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py:663
5410
+ msgid "all"
5411
+ msgstr ""
5412
+
5413
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/android.py:450
5414
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:955
5415
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1081
5416
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1123
5417
+ #, python-format
5418
+ msgid "$(%s)"
5419
+ msgstr ""
5420
+
5421
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py:376
5422
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py:377
5423
+ msgid "${"
5424
+ msgstr ""
5425
+
5426
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py:223
5427
+ msgid "1"
5428
+ msgstr ""
5429
+
5430
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1252
5431
+ msgid "$(OBJS)"
5432
+ msgstr ""
5433
+
5434
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1471
5435
+ #, python-format
5436
+ msgid "-Wl,-rpath=\\$$ORIGIN/lib.%s/"
5437
+ msgstr ""
5438
+
5439
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1472
5440
+ #, python-format
5441
+ msgid "-Wl,-rpath-link=\\$(builddir)/lib.%s/"
5442
+ msgstr ""
5443
+
5444
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1500
5445
+ msgid "$(TARGET_POSTBUILDS_$(BUILDTYPE))"
5446
+ msgstr ""
5447
+
5448
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1961
5449
+ msgid "BUILDTYPE="
5450
+ msgstr ""
5451
+
5452
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py:2946
5453
+ msgid "Label"
5454
+ msgstr ""
5455
+
5456
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py:3109
5457
+ #, python-format
5458
+ msgid "%%(%s)"
5459
+ msgstr ""
5460
+
5461
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py:1181
5462
+ #, python-format
5463
+ msgid "-Wl,-rpath=\\$$ORIGIN/%s"
5464
+ msgstr ""
5465
+
5466
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py:1182
5467
+ #, python-format
5468
+ msgid "-Wl,-rpath-link=%s"
5469
+ msgstr ""
5470
+
5471
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py:1415
5472
+ #, python-format
5473
+ msgid "export %s=%s;"
5474
+ msgstr ""
5475
+
5476
  #: templates/search-form.php:18
5477
  msgid "Search course..."
5478
  msgstr ""
5499
  msgid "Logged in as <a href=\"%1$s\">%2$s</a>."
5500
  msgstr ""
5501
 
5502
+ #: templates/checkout/form-logged-in.php:28
5503
  msgid "Log out of this account"
5504
  msgstr ""
5505
 
5506
+ #: templates/checkout/form-logged-in.php:28
5507
  msgid "Log out &raquo;"
5508
  msgstr ""
5509
 
5605
  msgstr ""
5606
 
5607
  #: templates/content-quiz/buttons.php:58
5608
+ #: templates/single-course/buttons.php:22
5609
+ #: templates/single-course/buttons.php:90
5610
  msgid "Retake"
5611
  msgstr ""
5612
 
5809
  msgid "Update"
5810
  msgstr ""
5811
 
5812
+ #: templates/profile/tabs/orders.php:28
 
 
 
 
5813
  msgid "Action"
5814
  msgstr ""
5815
 
5816
+ #: templates/profile/tabs/orders.php:71 templates/profile/tabs/orders.php:75
5817
  msgid "You have not got any orders yet!"
5818
  msgstr ""
5819
 
5871
  msgstr ""
5872
 
5873
  #: templates/single-course/buttons.php:20
5874
+ #: templates/single-course/buttons.php:42
5875
+ #: templates/single-course/buttons.php:70
5876
+ #: templates/single-course/buttons.php:88
5877
  msgid "Buy this course"
5878
  msgstr ""
5879
 
5880
+ #: templates/single-course/buttons.php:21
5881
+ #: templates/single-course/buttons.php:89
5882
  msgid "Enroll"
5883
  msgstr ""
5884
 
5885
+ #: templates/single-course/buttons.php:23
5886
+ #: templates/single-course/buttons.php:91
5887
  msgid ""
5888
+ "The class is full so enrollment is closed. Please contact the site admin."
5889
  msgstr ""
5890
 
5891
+ #: templates/single-course/buttons.php:102
5892
  #, php-format
5893
  msgid "Retake course (+%d)"
5894
  msgstr ""
5895
 
5896
+ #: templates/single-course/buttons.php:169
5897
  msgid "Your order is processing. Please wait for approval."
5898
  msgstr ""
5899
 
5900
+ #: templates/single-course/buttons.php:171
5901
  msgid "Sorry, you can not purchase this course"
5902
  msgstr ""
5903
 
5904
+ #: templates/single-course/content-item-lp_lesson.php:79
5905
  msgid "Complete"
5906
  msgstr ""
5907
 
5994
  msgid "Viewed"
5995
  msgstr ""
5996
 
5997
+ #: templates/single-course/section/title.php:29
5998
  #, php-format
5999
  msgid "%d/%d"
6000
  msgstr ""
learnpress.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: LearnPress
4
  Plugin URI: http://thimpress.com/learnpress
5
  Description: LearnPress is a WordPress complete solution for creating a Learning Management System (LMS). It can help you to create courses, lessons and quizzes.
6
  Author: ThimPress
7
- Version: 2.1.7.4
8
  Author URI: http://thimpress.com
9
  Requires at least: 3.8
10
  Tested up to: 4.8
@@ -17,12 +17,19 @@ Domain Path: /languages/
17
  */
18
  defined( 'ABSPATH' ) || exit;
19
 
20
- if ( !defined( 'LP_PLUGIN_FILE' ) ) {
21
  define( 'LP_PLUGIN_FILE', __FILE__ );
22
  require_once dirname( __FILE__ ) . '/inc/lp-constants.php';
23
  }
24
 
25
- if ( !class_exists( 'LearnPress' ) ) {
 
 
 
 
 
 
 
26
 
27
  /**
28
  * Class LearnPress
@@ -148,16 +155,17 @@ if ( !class_exists( 'LearnPress' ) ) {
148
  break;
149
  default:
150
  if ( strpos( $key, 'tbl_' ) === 0 ) {
151
- $return = $this->_table_prefixes[$key];
152
  }
153
  }
 
154
  return $return;
155
  }
156
 
157
  public function set_object( $name, $object, $global = false ) {
158
  $this->{$name} = $object;
159
  if ( $global ) {
160
- $GLOBALS[$name] = $object;
161
  }
162
  }
163
 
@@ -171,9 +179,10 @@ if ( !class_exists( 'LearnPress' ) ) {
171
  * @author
172
  */
173
  public static function instance() {
174
- if ( !self::$_instance ) {
175
  self::$_instance = new self();
176
  }
 
177
  return self::$_instance;
178
  }
179
 
@@ -195,8 +204,8 @@ if ( !class_exists( 'LearnPress' ) ) {
195
  'review_logs'
196
  );
197
  foreach ( $tables as $short_name ) {
198
- $table_name = $wpdb->prefix . LP_TABLE_PREFIX . $short_name;
199
- $this->_table_prefixes['tbl_' . $short_name] = $table_name;
200
 
201
  $backward_key = 'learnpress_' . $short_name;
202
  $wpdb->{$backward_key} = $table_name;
@@ -288,7 +297,7 @@ if ( !class_exists( 'LearnPress' ) ) {
288
  */
289
  public function init() {
290
 
291
- if ( !empty( $_REQUEST['view-log'] ) ) {
292
  $log = $_REQUEST['view-log'];
293
  echo '<pre>';
294
  if ( is_multisite() ) {
@@ -321,12 +330,16 @@ if ( !class_exists( 'LearnPress' ) ) {
321
  * @return mixed
322
  */
323
  public function get_session() {
324
- if ( !$this->session ) {
325
  $session_class = apply_filters( 'learn_press_session_class', 'LP_Session_Handler' );
326
  if ( class_exists( $session_class ) ) {
327
- $this->session = is_callable( array( $session_class, 'instance' ) ) ? call_user_func( array( $session_class, 'instance' ) ) : new $session_class();
 
 
 
328
  }
329
  }
 
330
  return $this->session;
331
  }
332
 
@@ -336,16 +349,20 @@ if ( !class_exists( 'LearnPress' ) ) {
336
  * @return mixed
337
  */
338
  public function get_cart() {
339
- if ( !$this->cart ) {
340
  $cart_class = apply_filters( 'learn_press_cart_class', 'LP_Cart' );
341
  if ( is_object( $cart_class ) ) {
342
  $this->cart = $cart_class;
343
  } else {
344
  if ( class_exists( $cart_class ) ) {
345
- $this->cart = is_callable( array( $cart_class, 'instance' ) ) ? call_user_func( array( $cart_class, 'instance' ) ) : new $cart_class();
 
 
 
346
  }
347
  }
348
  }
 
349
  return $this->cart;
350
  }
351
 
@@ -356,21 +373,22 @@ if ( !class_exists( 'LearnPress' ) ) {
356
  public function get_user( $user_id = 0 ) {
357
  static $users = array();
358
  $user = false;
359
- if ( !$this->user ) {
360
  $this->user = learn_press_get_current_user();
361
  }
362
  if ( $user_id ) {
363
  if ( $user_id == $this->user->id ) {
364
  $user = $this->user;
365
  } else {
366
- if ( empty( $users[$user_id] ) ) {
367
- $users[$user_id] = learn_press_get_user( $user_id );
368
- $user = $users[$user_id];
369
  }
370
  }
371
  } else {
372
  $user = $this->user;
373
  }
 
374
  return $user;
375
  }
376
 
@@ -390,7 +408,7 @@ if ( !class_exists( 'LearnPress' ) ) {
390
  case 'cron' :
391
  return defined( 'DOING_CRON' );
392
  case 'frontend' :
393
- return ( !is_admin() || defined( 'LP_DOING_AJAX' ) ) && !defined( 'DOING_CRON' );
394
  default:
395
  return strtolower( $_SERVER['REQUEST_METHOD'] ) == $type;
396
  }
@@ -554,8 +572,10 @@ if ( !class_exists( 'LearnPress' ) ) {
554
  } else {
555
  include $include;
556
  }
 
557
  return true;
558
  }
 
559
  return false;
560
  }
561
 
@@ -572,7 +592,7 @@ if ( !class_exists( 'LearnPress' ) ) {
572
  * Setup courses thumbnail
573
  */
574
  public function setup_theme() {
575
- if ( !current_theme_supports( 'post-thumbnails' ) ) {
576
  add_theme_support( 'post-thumbnails' );
577
  }
578
  add_post_type_support( 'lp_course', 'thumbnail' );
@@ -606,12 +626,13 @@ if ( !class_exists( 'LearnPress' ) ) {
606
  if ( LP()->settings->get( 'debug' ) !== 'yes' ) {
607
  $min = '.min';
608
  }
609
- if ( !preg_match( '/.js$/', $file ) ) {
610
  $file .= '.js';
611
  }
612
  if ( $min ) {
613
  $file = preg_replace( '/.js$/', $min . '.js', $file );
614
  }
 
615
  return $this->plugin_url( "assets/js/{$file}" );
616
  }
617
 
@@ -627,12 +648,13 @@ if ( !class_exists( 'LearnPress' ) ) {
627
  if ( LP()->settings->get( 'debug' ) !== 'yes' ) {
628
  $min = '.min';
629
  }
630
- if ( !preg_match( '/.css/', $file ) ) {
631
  $file .= '.css';
632
  }
633
  if ( $min ) {
634
  $file = preg_replace( '/.css/', $min . '.css', $file );
635
  }
 
636
  return $this->plugin_url( "assets/css/{$file}" );
637
  }
638
 
@@ -645,7 +667,7 @@ if ( !class_exists( 'LearnPress' ) ) {
645
  */
646
  public function image( $file ) {
647
 
648
- if ( !preg_match( '/.(jpg|png)$/', $file ) ) {
649
  $file .= '.jpg';
650
  }
651
 
@@ -674,6 +696,7 @@ function LP() {
674
  */
675
  function load_learn_press() {
676
  _deprecated_function( __FUNCTION__, '1.1', 'LP' );
 
677
  return LP();
678
  }
679
 
4
  Plugin URI: http://thimpress.com/learnpress
5
  Description: LearnPress is a WordPress complete solution for creating a Learning Management System (LMS). It can help you to create courses, lessons and quizzes.
6
  Author: ThimPress
7
+ Version: 2.1.8.1
8
  Author URI: http://thimpress.com
9
  Requires at least: 3.8
10
  Tested up to: 4.8
17
  */
18
  defined( 'ABSPATH' ) || exit;
19
 
20
+ if ( ! defined( 'LP_PLUGIN_FILE' ) ) {
21
  define( 'LP_PLUGIN_FILE', __FILE__ );
22
  require_once dirname( __FILE__ ) . '/inc/lp-constants.php';
23
  }
24
 
25
+ add_action( 'plugins_loaded', function () {
26
+ error_reporting( E_ALL );
27
+ ini_set( 'error_reporting', 1 );
28
+ } );
29
+
30
+
31
+
32
+ if ( ! class_exists( 'LearnPress' ) ) {
33
 
34
  /**
35
  * Class LearnPress
155
  break;
156
  default:
157
  if ( strpos( $key, 'tbl_' ) === 0 ) {
158
+ $return = $this->_table_prefixes[ $key ];
159
  }
160
  }
161
+
162
  return $return;
163
  }
164
 
165
  public function set_object( $name, $object, $global = false ) {
166
  $this->{$name} = $object;
167
  if ( $global ) {
168
+ $GLOBALS[ $name ] = $object;
169
  }
170
  }
171
 
179
  * @author
180
  */
181
  public static function instance() {
182
+ if ( ! self::$_instance ) {
183
  self::$_instance = new self();
184
  }
185
+
186
  return self::$_instance;
187
  }
188
 
204
  'review_logs'
205
  );
206
  foreach ( $tables as $short_name ) {
207
+ $table_name = $wpdb->prefix . LP_TABLE_PREFIX . $short_name;
208
+ $this->_table_prefixes[ 'tbl_' . $short_name ] = $table_name;
209
 
210
  $backward_key = 'learnpress_' . $short_name;
211
  $wpdb->{$backward_key} = $table_name;
297
  */
298
  public function init() {
299
 
300
+ if ( ! empty( $_REQUEST['view-log'] ) ) {
301
  $log = $_REQUEST['view-log'];
302
  echo '<pre>';
303
  if ( is_multisite() ) {
330
  * @return mixed
331
  */
332
  public function get_session() {
333
+ if ( ! $this->session ) {
334
  $session_class = apply_filters( 'learn_press_session_class', 'LP_Session_Handler' );
335
  if ( class_exists( $session_class ) ) {
336
+ $this->session = is_callable( array(
337
+ $session_class,
338
+ 'instance'
339
+ ) ) ? call_user_func( array( $session_class, 'instance' ) ) : new $session_class();
340
  }
341
  }
342
+
343
  return $this->session;
344
  }
345
 
349
  * @return mixed
350
  */
351
  public function get_cart() {
352
+ if ( ! $this->cart ) {
353
  $cart_class = apply_filters( 'learn_press_cart_class', 'LP_Cart' );
354
  if ( is_object( $cart_class ) ) {
355
  $this->cart = $cart_class;
356
  } else {
357
  if ( class_exists( $cart_class ) ) {
358
+ $this->cart = is_callable( array(
359
+ $cart_class,
360
+ 'instance'
361
+ ) ) ? call_user_func( array( $cart_class, 'instance' ) ) : new $cart_class();
362
  }
363
  }
364
  }
365
+
366
  return $this->cart;
367
  }
368
 
373
  public function get_user( $user_id = 0 ) {
374
  static $users = array();
375
  $user = false;
376
+ if ( ! $this->user ) {
377
  $this->user = learn_press_get_current_user();
378
  }
379
  if ( $user_id ) {
380
  if ( $user_id == $this->user->id ) {
381
  $user = $this->user;
382
  } else {
383
+ if ( empty( $users[ $user_id ] ) ) {
384
+ $users[ $user_id ] = learn_press_get_user( $user_id );
385
+ $user = $users[ $user_id ];
386
  }
387
  }
388
  } else {
389
  $user = $this->user;
390
  }
391
+
392
  return $user;
393
  }
394
 
408
  case 'cron' :
409
  return defined( 'DOING_CRON' );
410
  case 'frontend' :
411
+ return ( ! is_admin() || defined( 'LP_DOING_AJAX' ) ) && ! defined( 'DOING_CRON' );
412
  default:
413
  return strtolower( $_SERVER['REQUEST_METHOD'] ) == $type;
414
  }
572
  } else {
573
  include $include;
574
  }
575
+
576
  return true;
577
  }
578
+
579
  return false;
580
  }
581
 
592
  * Setup courses thumbnail
593
  */
594
  public function setup_theme() {
595
+ if ( ! current_theme_supports( 'post-thumbnails' ) ) {
596
  add_theme_support( 'post-thumbnails' );
597
  }
598
  add_post_type_support( 'lp_course', 'thumbnail' );
626
  if ( LP()->settings->get( 'debug' ) !== 'yes' ) {
627
  $min = '.min';
628
  }
629
+ if ( ! preg_match( '/.js$/', $file ) ) {
630
  $file .= '.js';
631
  }
632
  if ( $min ) {
633
  $file = preg_replace( '/.js$/', $min . '.js', $file );
634
  }
635
+
636
  return $this->plugin_url( "assets/js/{$file}" );
637
  }
638
 
648
  if ( LP()->settings->get( 'debug' ) !== 'yes' ) {
649
  $min = '.min';
650
  }
651
+ if ( ! preg_match( '/.css/', $file ) ) {
652
  $file .= '.css';
653
  }
654
  if ( $min ) {
655
  $file = preg_replace( '/.css/', $min . '.css', $file );
656
  }
657
+
658
  return $this->plugin_url( "assets/css/{$file}" );
659
  }
660
 
667
  */
668
  public function image( $file ) {
669
 
670
+ if ( ! preg_match( '/.(jpg|png)$/', $file ) ) {
671
  $file .= '.jpg';
672
  }
673
 
696
  */
697
  function load_learn_press() {
698
  _deprecated_function( __FUNCTION__, '1.1', 'LP' );
699
+
700
  return LP();
701
  }
702
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link:
4
  Tags: WordPress LMS, LMS, eLearning, e-Learning, Learning Management System, LMS WordPress, Course, Courses, Quiz, Quizzes, Training, Guru, Sell Courses
5
  Requires at least: 3.8
6
  Tested up to: 4.8
7
- Stable tag: 2.1.7.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -16,14 +16,16 @@ A WordPress LMS Plugin to create WordPress Learning Management System. Turn your
16
 
17
  LearnPress is free and always be free, but it has premium high quality WordPress Plugin which will probably help you make money from your **WordPress based LMS**, try and see how it is. LearnPress WordPress Online Course plugin is lightweight but super powerful with lots of add-ons to empower its core system.
18
 
19
- > **Christmas & New Year Week Sale - 10 Days Left**
20
 
21
- > [Click here](http://eepurl.com/cbKSQX) to get a coupon for 25% Off all LearnPress Add-ons
22
 
23
- > Or you can [buy Education WP theme](http://themeforest.net/item/education-wordpress-theme-education-wp/14058034?utm_source=wporg&utm_medium=learnpressDC&ref=thimpress&utm_campaign=learnpress) for only 64$ and get all of them.
24
 
25
  > **HOT!!** [WordPress theme for Coaches, Trainers, Teachers - Coaching WP](https://themeforest.net/item/speaker-and-life-coach-wordpress-theme-coaching-wp/17097658?utm_source=wporg&utm_medium=learnpressDC&ref=thimpress&utm_campaign=learnpress) is also FOR SALE at only $59, LearnPress included.
26
 
 
 
27
  ###LMS & Education WordPress Themes###
28
 
29
  Take a look at Premium **[Education WordPress Theme](http://themeforest.net/item/education-wordpress-theme-education-wp/14058034?utm_source=wporg&utm_medium=learnpress&ref=thimpress&utm_campaign=learnpress)**, **[Coaching WordPress Theme](https://themeforest.net/item/speaker-and-life-coach-wordpress-theme-coaching-wp/17097658?utm_source=wporg&utm_medium=learnpress&ref=thimpress&utm_campaign=learnpress)** & **[LMS WordPress Theme](http://themeforest.net/item/lms-wordpress-theme-elearning-wp/11797847?utm_source=wporg&utm_medium=learnpress&ref=thimpress&utm_campaign=learnpress)** (someone calls it LMS WordPress Template) we designed to work with LearnPress, all developers are welcome to develop WordPress LMS Theme based on LMS plugin for WordPress - LearnPress. More WordPress LMS Themes will come soon, both free WordPress themes as well as premium WordPress themes for LearnPress.
@@ -36,7 +38,6 @@ Take a look at Premium **[Education WordPress Theme](http://themeforest.net/item
36
  [youtube https://www.youtube.com/watch?v=zTtZ_CpWDOY&hd=1&&cc_load_policy=1]
37
 
38
  Are you looking for *best LMS WordPress plugin*?
39
- - **[10 steps to create a successful Udemy course for new instructors 2017](https://thimpress.com/10-steps-create-successful-udemy-course-new-instructors-2017/)**
40
 
41
  ###LearnPress features###
42
 
@@ -194,12 +195,16 @@ https://www.transifex.com/projects/p/learnpress/
194
  8. Add-ons of LearnPress.
195
 
196
  == Changelog ==
197
- = 2.1.7.4 =
198
- ~ Fixed some bugs
199
 
200
  = 2.1.7.3 =
201
- ~ Fixed loop redirecting in single course.
202
- ~ Fixed 'Complete' lesson button become 'Completed' when submitting form inside content.
 
 
 
 
203
 
204
  = 2.1.7.2 =
205
  ~ Fixed can add a question to multiple quizzes
4
  Tags: WordPress LMS, LMS, eLearning, e-Learning, Learning Management System, LMS WordPress, Course, Courses, Quiz, Quizzes, Training, Guru, Sell Courses
5
  Requires at least: 3.8
6
  Tested up to: 4.8
7
+ Stable tag: 2.1.8.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
16
 
17
  LearnPress is free and always be free, but it has premium high quality WordPress Plugin which will probably help you make money from your **WordPress based LMS**, try and see how it is. LearnPress WordPress Online Course plugin is lightweight but super powerful with lots of add-ons to empower its core system.
18
 
19
+ > **10 Days Left - Limited Time Offer**
20
 
21
+ > [Click here](http://eepurl.com/cbKSQX) to get a coupon for 25% Off all Learnpress Add-ons
22
 
23
+ > Or you can buy [Education WP Theme](http://themeforest.net/item/education-wordpress-theme-education-wp/14058034?utm_source=wporg&utm_medium=learnpressDC&ref=thimpress&utm_campaign=learnpress) for only $64 and get all of theme.
24
 
25
  > **HOT!!** [WordPress theme for Coaches, Trainers, Teachers - Coaching WP](https://themeforest.net/item/speaker-and-life-coach-wordpress-theme-coaching-wp/17097658?utm_source=wporg&utm_medium=learnpressDC&ref=thimpress&utm_campaign=learnpress) is also FOR SALE at only $59, LearnPress included.
26
 
27
+ > [Course Builder Wordpress Theme](https://themeforest.net/item/course-builder-wordpress-learning-management-system-theme-elearning-software/20370918?utm_source=wporg&utm_medium=learnpressDC&ref=thimpress&utm_campaign=learnpress) - WordPress LMS theme for online courses is also FOR SALE at only $64, Learnpress included.
28
+
29
  ###LMS & Education WordPress Themes###
30
 
31
  Take a look at Premium **[Education WordPress Theme](http://themeforest.net/item/education-wordpress-theme-education-wp/14058034?utm_source=wporg&utm_medium=learnpress&ref=thimpress&utm_campaign=learnpress)**, **[Coaching WordPress Theme](https://themeforest.net/item/speaker-and-life-coach-wordpress-theme-coaching-wp/17097658?utm_source=wporg&utm_medium=learnpress&ref=thimpress&utm_campaign=learnpress)** & **[LMS WordPress Theme](http://themeforest.net/item/lms-wordpress-theme-elearning-wp/11797847?utm_source=wporg&utm_medium=learnpress&ref=thimpress&utm_campaign=learnpress)** (someone calls it LMS WordPress Template) we designed to work with LearnPress, all developers are welcome to develop WordPress LMS Theme based on LMS plugin for WordPress - LearnPress. More WordPress LMS Themes will come soon, both free WordPress themes as well as premium WordPress themes for LearnPress.
38
  [youtube https://www.youtube.com/watch?v=zTtZ_CpWDOY&hd=1&&cc_load_policy=1]
39
 
40
  Are you looking for *best LMS WordPress plugin*?
 
41
 
42
  ###LearnPress features###
43
 
195
  8. Add-ons of LearnPress.
196
 
197
  == Changelog ==
198
+ = 2.1.8 =
199
+ ~ Fixed missing template tag
200
 
201
  = 2.1.7.3 =
202
+ ~ Fixed can not save curriculum with SiteOrigin.
203
+ ~ Fixed instructor can select lessons/quizzes of an another user when editing course.
204
+ ~ Fixed get request var does not exists while updating course.
205
+ ~ Fixed can not load lesson with Yoast Seo enabled.
206
+ ~ Fixed become a teacher page with page builder.
207
+ ~ Fixed eye icon does not show when opening a lesson.
208
 
209
  = 2.1.7.2 =
210
  ~ Fixed can add a question to multiple quizzes
templates/checkout/form-logged-in.php CHANGED
@@ -5,11 +5,11 @@
5
  * @version 1.0
6
  */
7
 
8
- if ( !defined( 'ABSPATH' ) ) {
9
  exit; // Exit if accessed directly
10
  }
11
 
12
- if ( !is_user_logged_in() ) {
13
  return;
14
  }
15
 
@@ -19,10 +19,11 @@ global $user_identity;
19
  <p>
20
  <?php
21
  printf(
22
- __( 'Logged in as <a href="%1$s">%2$s</a>.' ),
23
  get_edit_user_link(),
24
  $user_identity
25
  );
26
  ?>
27
- <a href="<?php echo wp_logout_url( get_permalink() ); ?>" title="<?php esc_attr_e( 'Log out of this account', 'learnpress' ); ?>"><?php _e( 'Log out &raquo;', 'learnpress' ); ?></a>
 
28
  </p>
5
  * @version 1.0
6
  */
7
 
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
  exit; // Exit if accessed directly
10
  }
11
 
12
+ if ( ! is_user_logged_in() ) {
13
  return;
14
  }
15
 
19
  <p>
20
  <?php
21
  printf(
22
+ wp_kses( __( 'Logged in as <a href="%1$s">%2$s</a>.', 'learnpress' ), array( 'a' => array( 'href' => array() ) ) ),
23
  get_edit_user_link(),
24
  $user_identity
25
  );
26
  ?>
27
+ <a href="<?php echo wp_logout_url( get_permalink() ); ?>"
28
+ title="<?php esc_attr_e( 'Log out of this account', 'learnpress' ); ?>"><?php _e( 'Log out &raquo;', 'learnpress' ); ?></a>
29
  </p>
templates/global/become-teacher-form.php CHANGED
@@ -13,14 +13,15 @@ $submit_button_process_text = __( 'Submitting...', 'learnpress' );
13
  $submit_button_text = __( 'Submit', 'learnpress' );
14
  ?>
15
  <div id="learn-press-become-teacher-form" class="learn-press-become-teacher-form">
16
- <?php if( $message ) {
17
- learn_press_display_message( $message );
18
- }
19
  ?>
20
- <?php if ( !learn_press_become_teacher_sent() ): ?>
21
- <form id="<?php echo $form_id; ?>" name="become-teacher-form" method="<?php echo $method; ?>" enctype="multipart/form-data" action="<?php echo $action; ?>">
 
22
  <?php if ( $fields ): ?>
23
- <ul class="become-teacher-fields">
24
  <?php foreach ( $fields as $name => $option ): ?>
25
  <?php
26
  $option = wp_parse_args(
@@ -32,7 +33,7 @@ $submit_button_text = __( 'Submit', 'learnpress' );
32
  'placeholder' => ''
33
  )
34
  );
35
- $value = !empty( $request[$name] ) ? $request[$name] : ( !empty( $option['def'] ) ? $option['def'] : '' );
36
  $requested = strtolower( $_SERVER['REQUEST_METHOD'] ) == $method;
37
  $error_message = null;
38
  if ( $requested ) {
@@ -40,8 +41,8 @@ $submit_button_text = __( 'Submit', 'learnpress' );
40
  }
41
 
42
  ?>
43
- <li>
44
- <label><?php echo $option['title']; ?></label>
45
  <?php
46
  switch ( $option['type'] ) {
47
  case 'text':
@@ -53,14 +54,15 @@ $submit_button_text = __( 'Submit', 'learnpress' );
53
  learn_press_display_message( $error_message );
54
  }
55
  ?>
56
- </li>
57
  <?php endforeach; ?>
58
- <li>
59
- <button type="submit" data-text="<?php echo esc_attr( $submit_button_text ); ?>" data-text-process="<?php echo esc_attr( $submit_button_process_text ); ?>"><?php echo esc_html( $submit_button_text ); ?></button>
60
- </li>
61
- </ul>
62
- <input type="hidden" name="lp-ajax" value="become-a-teacher" />
 
63
  <?php endif; ?>
64
- </form>
65
  <?php endif; ?>
66
  </div>
13
  $submit_button_text = __( 'Submit', 'learnpress' );
14
  ?>
15
  <div id="learn-press-become-teacher-form" class="learn-press-become-teacher-form">
16
+ <?php if ( $message ) {
17
+ learn_press_display_message( $message );
18
+ }
19
  ?>
20
+ <?php if ( ! learn_press_become_teacher_sent() ): ?>
21
+ <form id="<?php echo $form_id; ?>" name="become-teacher-form" method="<?php echo $method; ?>"
22
+ enctype="multipart/form-data" <?php echo $action ? "action=$action" : ''; ?>>
23
  <?php if ( $fields ): ?>
24
+ <ul class="become-teacher-fields">
25
  <?php foreach ( $fields as $name => $option ): ?>
26
  <?php
27
  $option = wp_parse_args(
33
  'placeholder' => ''
34
  )
35
  );
36
+ $value = ! empty( $request[ $name ] ) ? $request[ $name ] : ( ! empty( $option['def'] ) ? $option['def'] : '' );
37
  $requested = strtolower( $_SERVER['REQUEST_METHOD'] ) == $method;
38
  $error_message = null;
39
  if ( $requested ) {
41
  }
42
 
43
  ?>
44
+ <li>
45
+ <label><?php echo $option['title']; ?></label>
46
  <?php
47
  switch ( $option['type'] ) {
48
  case 'text':
54
  learn_press_display_message( $error_message );
55
  }
56
  ?>
57
+ </li>
58
  <?php endforeach; ?>
59
+ <li>
60
+ <button type="submit" data-text="<?php echo esc_attr( $submit_button_text ); ?>"
61
+ data-text-process="<?php echo esc_attr( $submit_button_process_text ); ?>"><?php echo esc_html( $submit_button_text ); ?></button>
62
+ </li>
63
+ </ul>
64
+ <input type="hidden" name="lp-ajax" value="become-a-teacher"/>
65
  <?php endif; ?>
66
+ </form>
67
  <?php endif; ?>
68
  </div>
templates/profile/tabs/orders.php CHANGED
@@ -18,29 +18,31 @@ if ( $orders = _learn_press_get_user_profile_orders( $user_id, $page, $limit ) )
18
  }
19
  if ( $orders['rows'] ) :
20
  ?>
21
- <table class="table-orders">
22
- <thead>
23
- <th><?php _e( 'Order', 'learnpress' ); ?></th>
24
- <th><?php _e( 'Date', 'learnpress' ); ?></th>
25
- <th><?php _e( 'Status', 'learnpress' ); ?></th>
26
- <th><?php _e( 'Total', 'learnpress' ); ?></th>
27
- <th><?php _e( 'Action', 'learnpress' ); ?></th>
28
- </thead>
29
- <tbody>
 
 
30
  <?php foreach ( $orders['rows'] as $order ): $order = learn_press_get_order( $order ); ?>
31
- <tr>
32
- <td><?php echo $order->get_order_number(); ?></td>
33
- <td><?php echo date_i18n( get_option( 'date_format' ), strtotime( $order->order_date ) ); ?></td>
34
- <td>
35
  <?php echo $order->get_order_status_html(); ?>
36
  <?php
37
  if ( $order->has_status( 'pending' ) ) :
38
  printf( '(<small><a href="%s" class="%s">%s</a></small>)', $order->get_cancel_order_url(), 'cancel-order', __( 'Cancel', 'learnpress' ) );
39
  endif;
40
  ?>
41
- </td>
42
- <td><?php echo $order->get_formatted_order_total(); ?></td>
43
- <td>
44
  <?php
45
  $actions['view'] = array(
46
  'url' => $order->get_view_order_url(),
@@ -52,11 +54,11 @@ if ( $orders = _learn_press_get_user_profile_orders( $user_id, $page, $limit ) )
52
  printf( '<a href="%s">%s</a>', $option['url'], $option['text'] );
53
  }
54
  ?>
55
- </td>
56
- </tr>
57
  <?php endforeach; ?>
58
- </tbody>
59
- </table>
60
 
61
  <?php
62
  learn_press_paging_nav( array(
18
  }
19
  if ( $orders['rows'] ) :
20
  ?>
21
+ <table class="table-orders">
22
+ <thead>
23
+ <tr>
24
+ <th><?php _e( 'Order', 'learnpress' ); ?></th>
25
+ <th><?php _e( 'Date', 'learnpress' ); ?></th>
26
+ <th><?php _e( 'Status', 'learnpress' ); ?></th>
27
+ <th><?php _e( 'Total', 'learnpress' ); ?></th>
28
+ <th><?php _e( 'Action', 'learnpress' ); ?></th>
29
+ </tr>
30
+ </thead>
31
+ <tbody>
32
  <?php foreach ( $orders['rows'] as $order ): $order = learn_press_get_order( $order ); ?>
33
+ <tr>
34
+ <td><?php echo $order->get_order_number(); ?></td>
35
+ <td><?php echo date_i18n( get_option( 'date_format' ), strtotime( $order->order_date ) ); ?></td>
36
+ <td>
37
  <?php echo $order->get_order_status_html(); ?>
38
  <?php
39
  if ( $order->has_status( 'pending' ) ) :
40
  printf( '(<small><a href="%s" class="%s">%s</a></small>)', $order->get_cancel_order_url(), 'cancel-order', __( 'Cancel', 'learnpress' ) );
41
  endif;
42
  ?>
43
+ </td>
44
+ <td><?php echo $order->get_formatted_order_total(); ?></td>
45
+ <td>
46
  <?php
47
  $actions['view'] = array(
48
  'url' => $order->get_view_order_url(),
54
  printf( '<a href="%s">%s</a>', $option['url'], $option['text'] );
55
  }
56
  ?>
57
+ </td>
58
+ </tr>
59
  <?php endforeach; ?>
60
+ </tbody>
61
+ </table>
62
 
63
  <?php
64
  learn_press_paging_nav( array(
templates/single-course/buttons.php CHANGED
@@ -7,24 +7,74 @@
7
  * @version 2.1.6
8
  */
9
 
10
- if ( !defined( 'ABSPATH' ) ) {
11
  exit; // Exit if accessed directly
12
  }
13
 
14
- $course = LP()->global['course'];
 
 
 
 
 
 
 
 
 
15
  ?>
16
  <div class="learn-press-course-buttons">
17
  <?php do_action( 'learn_press_before_course_buttons', $course->id ); ?>
18
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  if ( $external_link = $course->get_external_link() ):
20
  $external_button_text = apply_filters( 'learn_press_course_external_link_button_text', __( 'Buy this course', 'learnpress' ) );
21
  ?>
22
  <?php do_action( 'learn_press_before_external_link_buy_course' ); ?>
23
- <div class="purchase-course">
24
- <a href="<?php echo esc_url( $external_link ); ?>" class="purchase-button">
25
  <?php echo $external_button_text; ?>
26
- </a>
27
- </div>
28
  <?php do_action( 'learn_press_after_external_link_buy_course' ); ?>
29
  <?php else:
30
 
@@ -38,26 +88,26 @@ $course = LP()->global['course'];
38
  $purchase_button_text = apply_filters( 'learn_press_purchase_button_text', __( 'Buy this course', 'learnpress' ) );
39
  $enroll_button_text = apply_filters( 'learn_press_enroll_button_text', __( 'Enroll', 'learnpress' ) );
40
  $retake_button_text = apply_filters( 'learn_press_retake_button_text', __( 'Retake', 'learnpress' ) );
41
- $notice_enough_student = apply_filters( 'learn_press_course enough students_notice', __( 'The class is full so the enrollment is close. Please contact the site admin.', 'learnpress' ) );
42
 
43
  # -------------------------------
44
  # Finished Course
45
  # -------------------------------
46
  if ( $user->has( 'finished-course', $course->id ) ): ?>
47
  <?php if ( $count = $user->can( 'retake-course', $course->id ) ): ?>
48
- <button
49
- class="button button-retake-course"
50
- data-course_id="<?php echo esc_attr( $course->id ); ?>"
51
- data-security="<?php echo esc_attr( wp_create_nonce( sprintf( 'learn-press-retake-course-%d-%d', $course->id, $user->id ) ) ); ?>">
52
  <?php echo esc_html( sprintf( __( 'Retake course (+%d)', 'learnpress' ), $count ) ); ?>
53
- </button>
54
  <?php endif; ?>
55
  <?php
56
 
57
  # -------------------------------
58
  # Enrolled Course
59
  # -------------------------------
60
- elseif ( $user->has( 'enrolled-course', $course->id ) ): ?>
61
  <?php
62
  $can_finish = $user->can_finish_course( $course->id );
63
  //if ( $can_finish ) {
@@ -66,50 +116,55 @@ $course = LP()->global['course'];
66
  //$finish_course_security = '';
67
  //}
68
  ?>
69
- <button
70
- id="learn-press-finish-course"
71
- class="button-finish-course<?php echo !$can_finish ? ' hide-if-js' : ''; ?>"
72
- data-id="<?php echo esc_attr( $course->id ); ?>"
73
- data-security="<?php echo esc_attr( $finish_course_security ); ?>">
74
  <?php esc_html_e( 'Finish course', 'learnpress' ); ?>
75
- </button>
76
  <?php elseif ( $user->can( 'enroll-course', $course->id ) === true ) : ?>
77
- <form name="enroll-course" class="enroll-course" method="post" enctype="multipart/form-data">
78
  <?php do_action( 'learn_press_before_enroll_button' ); ?>
79
 
80
- <input type="hidden" name="lp-ajax" value="enroll-course" />
81
- <input type="hidden" name="enroll-course" value="<?php echo $course->id; ?>" />
82
- <button class="button enroll-button" data-block-content="yes"><?php echo $enroll_button_text; ?></button>
 
83
 
84
  <?php do_action( 'learn_press_after_enroll_button' ); ?>
85
- </form>
86
- <?php elseif ( $user->can( 'purchase-course', $course->id ) ) : ?>
87
-
88
- <form name="purchase-course" class="purchase-course" method="post" enctype="multipart/form-data">
89
  <?php do_action( 'learn_press_before_purchase_button' ); ?>
90
- <button class="button purchase-button" data-block-content="yes">
91
  <?php echo $course->is_free() ? $enroll_button_text : $purchase_button_text; ?>
92
- </button>
93
  <?php do_action( 'learn_press_after_purchase_button' ); ?>
94
- <input type="hidden" name="purchase-course" value="<?php echo $course->id; ?>" />
95
- <input type="hidden" value="user can purchase course" />
96
- </form>
97
 
98
- <?php elseif ( $user->can( 'enroll-course', $course->id ) === 'enough' ) : ?>
99
- <p class="learn-press-message"><?php echo $notice_enough_student; ?></p>
100
  <?php else: ?>
101
  <?php $order_status = $user->get_order_status( $course->id ); ?>
102
- <?php if ( in_array( $order_status, array( 'lp-pending', 'lp-refunded', 'lp-cancelled', 'lp-failed' ) ) ) { ?>
103
- <form name="purchase-course" class="purchase-course" method="post" enctype="multipart/form-data">
 
 
 
 
 
104
  <?php do_action( 'learn_press_before_purchase_button' ); ?>
105
- <button class="button purchase-button" data-block-content="yes">
106
  <?php echo $course->is_free() ? $enroll_button_text : $purchase_button_text; ?>
107
- </button>
108
  <?php do_action( 'learn_press_after_purchase_button' ); ?>
109
- <input type="hidden" name="purchase-course" value="<?php echo $course->id; ?>" />
110
- <input type="hidden" value="user order cancelled" />
111
 
112
- </form>
113
  <?php } elseif ( in_array( $order_status, array( 'lp-processing', 'lp-on-hold' ) ) ) { ?>
114
  <?php learn_press_display_message( '<p>' . apply_filters( 'learn_press_user_course_pending_message', __( 'Your order is processing. Please wait for approval.', 'learnpress' ), $course, $user ) . '</p>' ); ?>
115
  <?php } elseif ( $order_status && $order_status != 'lp-completed' ) { ?>
@@ -120,4 +175,4 @@ $course = LP()->global['course'];
120
  endif;
121
  ?>
122
  <?php do_action( 'learn_press_after_course_buttons', $course->id ); ?>
123
- </div>
7
  * @version 2.1.6
8
  */
9
 
10
+ if ( ! defined( 'ABSPATH' ) ) {
11
  exit; // Exit if accessed directly
12
  }
13
 
14
+ $course = learn_press_get_course();//LP()->global['course'];
15
+ $lp_user = learn_press_get_current_user();
16
+
17
+ $user = learn_press_get_current_user();
18
+ $in_cart = learn_press_is_added_to_cart( $course->id );
19
+ // only show enroll button if user had not enrolled
20
+ $purchase_button_text = apply_filters( 'learn_press_purchase_button_text', __( 'Buy this course', 'learnpress' ) );
21
+ $enroll_button_text = apply_filters( 'learn_press_enroll_button_text', __( 'Enroll', 'learnpress' ) );
22
+ $retake_button_text = apply_filters( 'learn_press_retake_button_text', __( 'Retake', 'learnpress' ) );
23
+ $notice_enough_student = apply_filters( 'learn_press_course enough students_notice', __( 'The class is full so enrollment is closed. Please contact the site admin.', 'learnpress' ) );
24
  ?>
25
  <div class="learn-press-course-buttons">
26
  <?php do_action( 'learn_press_before_course_buttons', $course->id ); ?>
27
  <?php
28
+
29
+ $course_status = $lp_user->get_course_status( $course->id );
30
+ // var_dump( $course_status );
31
+ $can_purchase = $lp_user->can_purchase_course( $course->id );
32
+ // var_dump( $can_purchase );
33
+ // var_dump( $user->can( 'purchase-course', $course->id ) );
34
+ $can_enroll = $lp_user->can( 'enroll-course', $course->id );
35
+ // var_dump( $can_enroll );
36
+ // var_dump( $lp_user->has_enrolled_course( $course->id, true) );
37
+ $can_retake = $lp_user->can_retake_course( $course->id, true );
38
+ // var_dump( $can_retake );
39
+ if ( $can_purchase ) {
40
+ # todo dispay purchase button
41
+ if ( $external_link = $course->get_external_link() ) {
42
+ $external_button_text = apply_filters( 'learn_press_course_external_link_button_text', __( 'Buy this course', 'learnpress' ) );
43
+ do_action( 'learn_press_before_external_link_buy_course' );
44
+ ?>
45
+ <div class="purchase-course">
46
+ <a href="<?php echo esc_url( $external_link ); ?>" class="purchase-button">
47
+ <?php echo $external_button_text; ?>
48
+ </a>
49
+ </div>
50
+ <?php
51
+ } else {
52
+ ?>
53
+ <form name="purchase-course" class="purchase-course" method="post" enctype="multipart/form-data">
54
+ <?php do_action( 'learn_press_before_purchase_button' ); ?>
55
+ <button class="button purchase-button" data-block-content="yes">
56
+ <?php echo $course->is_free() ? $enroll_button_text : $purchase_button_text; ?>
57
+ </button>
58
+ <?php do_action( 'learn_press_after_purchase_button' ); ?>
59
+ <input type="hidden" name="purchase-course" value="<?php echo $course->id; ?>"/>
60
+ <input type="hidden" value="user can purchase course"/>
61
+ </form>
62
+ <?php
63
+ }
64
+ } elseif ( $can_enroll ) {
65
+ #echo "show can enroll button";
66
+ }
67
+
68
+ // if($lp_user->get_course_status($course->id));
69
  if ( $external_link = $course->get_external_link() ):
70
  $external_button_text = apply_filters( 'learn_press_course_external_link_button_text', __( 'Buy this course', 'learnpress' ) );
71
  ?>
72
  <?php do_action( 'learn_press_before_external_link_buy_course' ); ?>
73
+ <div class="purchase-course">
74
+ <a href="<?php echo esc_url( $external_link ); ?>" class="purchase-button">
75
  <?php echo $external_button_text; ?>
76
+ </a>
77
+ </div>
78
  <?php do_action( 'learn_press_after_external_link_buy_course' ); ?>
79
  <?php else:
80
 
88
  $purchase_button_text = apply_filters( 'learn_press_purchase_button_text', __( 'Buy this course', 'learnpress' ) );
89
  $enroll_button_text = apply_filters( 'learn_press_enroll_button_text', __( 'Enroll', 'learnpress' ) );
90
  $retake_button_text = apply_filters( 'learn_press_retake_button_text', __( 'Retake', 'learnpress' ) );
91
+ $notice_enough_student = apply_filters( 'learn_press_course enough students_notice', __( 'The class is full so enrollment is closed. Please contact the site admin.', 'learnpress' ) );
92
 
93
  # -------------------------------
94
  # Finished Course
95
  # -------------------------------
96
  if ( $user->has( 'finished-course', $course->id ) ): ?>
97
  <?php if ( $count = $user->can( 'retake-course', $course->id ) ): ?>
98
+ <button
99
+ class="button button-retake-course"
100
+ data-course_id="<?php echo esc_attr( $course->id ); ?>"
101
+ data-security="<?php echo esc_attr( wp_create_nonce( sprintf( 'learn-press-retake-course-%d-%d', $course->id, $user->id ) ) ); ?>">
102
  <?php echo esc_html( sprintf( __( 'Retake course (+%d)', 'learnpress' ), $count ) ); ?>
103
+ </button>
104
  <?php endif; ?>
105
  <?php
106
 
107
  # -------------------------------
108
  # Enrolled Course
109
  # -------------------------------
110
+ elseif ( $user->has( 'enrolled-course', $course->id ) ): ?>
111
  <?php
112
  $can_finish = $user->can_finish_course( $course->id );
113
  //if ( $can_finish ) {
116
  //$finish_course_security = '';
117
  //}
118
  ?>
119
+ <button
120
+ id="learn-press-finish-course"
121
+ class="button-finish-course<?php echo ! $can_finish ? ' hide-if-js' : ''; ?>"
122
+ data-id="<?php echo esc_attr( $course->id ); ?>"
123
+ data-security="<?php echo esc_attr( $finish_course_security ); ?>">
124
  <?php esc_html_e( 'Finish course', 'learnpress' ); ?>
125
+ </button>
126
  <?php elseif ( $user->can( 'enroll-course', $course->id ) === true ) : ?>
127
+ <form name="enroll-course" class="enroll-course" method="post" enctype="multipart/form-data">
128
  <?php do_action( 'learn_press_before_enroll_button' ); ?>
129
 
130
+ <input type="hidden" name="lp-ajax" value="enroll-course"/>
131
+ <input type="hidden" name="enroll-course" value="<?php echo $course->id; ?>"/>
132
+ <button class="button enroll-button"
133
+ data-block-content="yes"><?php echo $enroll_button_text; ?></button>
134
 
135
  <?php do_action( 'learn_press_after_enroll_button' ); ?>
136
+ </form>
137
+ <?php elseif ( $user->can( 'purchase-course', $course->id ) && ! $can_purchase ) : ?>
138
+ <form name="purchase-course" class="purchase-course" method="post" enctype="multipart/form-data">
 
139
  <?php do_action( 'learn_press_before_purchase_button' ); ?>
140
+ <button class="button purchase-button" data-block-content="yes">
141
  <?php echo $course->is_free() ? $enroll_button_text : $purchase_button_text; ?>
142
+ </button>
143
  <?php do_action( 'learn_press_after_purchase_button' ); ?>
144
+ <input type="hidden" name="purchase-course" value="<?php echo $course->id; ?>"/>
145
+ <input type="hidden" value="user can purchase course"/>
146
+ </form>
147
 
148
+ <?php elseif ( $course->is_reached_limit()/* $user->can( 'enroll-course', $course->id ) === 'enough'*/ ) : ?>
149
+ <p class="learn-press-message"><?php echo $notice_enough_student; ?></p>
150
  <?php else: ?>
151
  <?php $order_status = $user->get_order_status( $course->id ); ?>
152
+ <?php if ( in_array( $order_status, array(
153
+ 'lp-pending',
154
+ 'lp-refunded',
155
+ 'lp-cancelled',
156
+ 'lp-failed'
157
+ ) ) ) { ?>
158
+ <form name="purchase-course" class="purchase-course" method="post" enctype="multipart/form-data">
159
  <?php do_action( 'learn_press_before_purchase_button' ); ?>
160
+ <button class="button purchase-button" data-block-content="yes">
161
  <?php echo $course->is_free() ? $enroll_button_text : $purchase_button_text; ?>
162
+ </button>
163
  <?php do_action( 'learn_press_after_purchase_button' ); ?>
164
+ <input type="hidden" name="purchase-course" value="<?php echo $course->id; ?>"/>
165
+ <input type="hidden" value="user order cancelled"/>
166
 
167
+ </form>
168
  <?php } elseif ( in_array( $order_status, array( 'lp-processing', 'lp-on-hold' ) ) ) { ?>
169
  <?php learn_press_display_message( '<p>' . apply_filters( 'learn_press_user_course_pending_message', __( 'Your order is processing. Please wait for approval.', 'learnpress' ), $course, $user ) . '</p>' ); ?>
170
  <?php } elseif ( $order_status && $order_status != 'lp-completed' ) { ?>
175
  endif;
176
  ?>
177
  <?php do_action( 'learn_press_after_course_buttons', $course->id ); ?>
178
+ </div>
templates/single-course/content-item-lp_lesson.php CHANGED
@@ -12,10 +12,16 @@ $item = LP()->global['course-item'];
12
  $security = wp_create_nonce( sprintf( 'complete-item-%d-%d-%d', $user->id, $course->id, $item->ID ) );
13
  $can_view_item = $user->can( 'view-item', $item->id, $course->id );
14
 
 
 
 
 
 
 
15
  $block_option = get_post_meta( $course->id, '_lp_block_lesson_content', true );
16
  $duration = $course->get_user_duration_html( $user->id, true );
17
 
18
- if ( ! $duration && ( isset( $block_option ) && $block_option == 'yes' ) ) {
19
  learn_press_get_template( 'content-lesson/block-content.php' );
20
  } else {
21
  ?>
12
  $security = wp_create_nonce( sprintf( 'complete-item-%d-%d-%d', $user->id, $course->id, $item->ID ) );
13
  $can_view_item = $user->can( 'view-item', $item->id, $course->id );
14
 
15
+ $user_data = get_userdata( $user->ID );
16
+ $admin = false;
17
+ if ( $user_data && in_array( 'administrator', $user_data->roles ) ) {
18
+ $admin = true;
19
+ }
20
+
21
  $block_option = get_post_meta( $course->id, '_lp_block_lesson_content', true );
22
  $duration = $course->get_user_duration_html( $user->id, true );
23
 
24
+ if ( ! $admin && ! $duration && ( isset( $block_option ) && $block_option == 'yes' ) ) {
25
  learn_press_get_template( 'content-lesson/block-content.php' );
26
  } else {
27
  ?>
templates/single-course/content-item-only.php CHANGED
@@ -39,25 +39,29 @@ $data = array_merge( $user->get_course_info2( get_the_ID() ), $data );
39
  <?php learn_press_get_template( 'single-course/content-item.php' ); ?>
40
  </div>
41
  <?php ob_start(); ?>
42
- <script>
 
 
 
 
 
43
 
44
- // Ready again!
45
- $(document).ready(function () {
46
- var windowTarget = (parent.window || window),
47
- data = <?php echo wp_json_encode( $data ); ?>;
48
- $('html, body').css('opacity', 1);
49
- windowTarget.LP.unblockContent();
50
 
51
- LP.sendMessage(LP.Hook.applyFilters('learn_press_content_item_send_data', data, windowTarget), windowTarget);
52
- $('a:not(.js-action)').click(function () {
53
- var link = $(this).attr('href');
54
- if (link) {
55
- windowTarget.open(link, "_blank");
56
- return false;
57
- }
58
- });
59
- });
60
 
 
 
 
61
  </script>
62
  <?php LP_Assets::add_script_tag( preg_replace( '!</?script>!', '', ob_get_clean() ), '__all' ); ?>
63
  <?php
39
  <?php learn_press_get_template( 'single-course/content-item.php' ); ?>
40
  </div>
41
  <?php ob_start(); ?>
42
+ <script type="text/javascript">
43
+ jQuery(function($){
44
+ // Ready again!
45
+ $(document).ready(function () {
46
+ var windowTarget = (parent.window || window),
47
+ data = <?php echo wp_json_encode( $data ); ?>;
48
 
49
+ $('#wpadminbar').remove();
50
+ $('html, body').css('opacity', 1);
51
+ windowTarget.LP.unblockContent();
 
 
 
52
 
53
+ LP.sendMessage(LP.Hook.applyFilters('learn_press_content_item_send_data', data, windowTarget), windowTarget);
54
+ $('a:not(.js-action)').click(function () {
55
+ var link = $(this).attr('href');
56
+ if (link) {
57
+ windowTarget.open(link, "_blank");
58
+ return false;
59
+ }
60
+ });
 
61
 
62
+
63
+ });
64
+ });
65
  </script>
66
  <?php LP_Assets::add_script_tag( preg_replace( '!</?script>!', '', ob_get_clean() ), '__all' ); ?>
67
  <?php
templates/single-course/progress.php CHANGED
@@ -13,7 +13,7 @@ if ( !$course ) {
13
  return;
14
  }
15
  $status = $user->get( 'course-status', $course->id );
16
- if ( !$status || !$user->has_purchased_course( $course->id ) ) {
17
  return;
18
  }
19
  $force = isset( $force ) ? $force : false;
13
  return;
14
  }
15
  $status = $user->get( 'course-status', $course->id );
16
+ if ( (!$status || $status =='purchased') || !$user->has_purchased_course( $course->id ) ) {
17
  return;
18
  }
19
  $force = isset( $force ) ? $force : false;
templates/single-course/section/item-lesson.php CHANGED
@@ -5,19 +5,21 @@
5
  * @version 1.0
6
  */
7
 
8
- if ( !defined( 'ABSPATH' ) ) {
9
  exit; // Exit if accessed directly
10
  }
11
- $course = LP()->global['course'];
12
- $viewable = learn_press_user_can_view_lesson( $item->ID, $course->id );//learn_press_is_enrolled_course();
13
- $tag = $viewable ? 'a' : 'span';
14
- $target = apply_filters( 'learn_press_section_item_link_target', '_blank', $item );
15
  $item_title = apply_filters( 'learn_press_section_item_title', get_the_title( $item->ID ), $item );
16
- $item_link = $viewable ? 'href="' . $course->get_item_link( $item->ID ) . '"' : '';
17
  ?>
18
 
19
  <li <?php learn_press_course_item_class( $item->ID ); ?> data-type="<?php echo $item->post_type; ?>">
20
  <?php do_action( 'learn_press_before_section_item_title', $item, $section, $course ); ?>
21
- <<?php echo $tag; ?> class="course-item-title button-load-item" target="<?php echo $target; ?>" <?php echo $item_link; ?> data-id="<?php echo $item->ID; ?>" data-complete-nonce="<?php echo wp_create_nonce( 'learn-press-complete-' . $item->post_type . '-' . $item->ID ); ?>"><?php echo $item_title; ?></<?php echo $tag; ?>>
22
- <?php do_action( 'learn_press_after_section_item_title', $item, $section, $course ); ?>
23
- </li>
 
 
5
  * @version 1.0
6
  */
7
 
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
  exit; // Exit if accessed directly
10
  }
11
+ $course = LP()->global['course'];
12
+ $viewable = learn_press_user_can_view_lesson( $item->ID, $course->id );//learn_press_is_enrolled_course();
13
+ $tag = $viewable ? 'a' : 'span';
14
+ $target = apply_filters( 'learn_press_section_item_link_target', '_blank', $item );
15
  $item_title = apply_filters( 'learn_press_section_item_title', get_the_title( $item->ID ), $item );
16
+ $item_link = $viewable ? 'href="' . $course->get_item_link( $item->ID ) . '"' : '';
17
  ?>
18
 
19
  <li <?php learn_press_course_item_class( $item->ID ); ?> data-type="<?php echo $item->post_type; ?>">
20
  <?php do_action( 'learn_press_before_section_item_title', $item, $section, $course ); ?>
21
+ <<?php echo $tag; ?> class="course-item-title button-load-item" <?php echo $tag == 'a' ? "target=$target" : ''; ?><?php echo $item_link; ?>
22
+ data-id="<?php echo $item->ID; ?>" data-complete-nonce="<?php echo wp_create_nonce( 'learn-press-complete-' . $item->post_type . '-' . $item->ID ); ?>
23
+ "><?php echo $item_title; ?></<?php echo $tag; ?>>
24
+ <?php do_action( 'learn_press_after_section_item_title', $item, $section, $course ); ?>
25
+ </li>
templates/single-course/section/title.php CHANGED
@@ -5,7 +5,7 @@
5
  * @version 1.0
6
  */
7
 
8
- if ( !defined( 'ABSPATH' ) ) {
9
  exit; // Exit if accessed directly
10
  }
11
  $user = learn_press_get_current_user();
@@ -17,13 +17,16 @@ if ( $section_name === false ) {
17
  return;
18
  }
19
  ?>
20
- <h4 class="section-header">
21
- <?php echo $section_name; ?>&nbsp;
 
 
 
22
  <?php if ( $section_description = apply_filters( 'learn_press_curriculum_section_description', $section->section_description, $section ) ) { ?>
23
- <p><?php echo $section_description; ?></p>
24
  <?php } ?>
25
- <span class="meta">
26
- <span class="step"><?php printf( __( '%d/%d', 'learnpress' ), $user->get_completed_items_in_section( $course->id, $section->section_id, $force ), sizeof( $section->items ) ); ?></span>
27
- <span class="collapse"></span>
28
- </span>
29
- </h4>
5
  * @version 1.0
6
  */
7
 
8
+ if ( ! defined( 'ABSPATH' ) ) {
9
  exit; // Exit if accessed directly
10
  }
11
  $user = learn_press_get_current_user();
17
  return;
18
  }
19
  ?>
20
+
21
+ <div class="section-header">
22
+ <?php if ( $section_name ) { ?>
23
+ <h4><?php echo $section_name; ?>&nbsp;</h4>
24
+ <?php } ?>
25
  <?php if ( $section_description = apply_filters( 'learn_press_curriculum_section_description', $section->section_description, $section ) ) { ?>
26
+ <p><?php echo $section_description; ?></p>
27
  <?php } ?>
28
+ <div class="meta">
29
+ <span class="step"><?php printf( __( '%d/%d', 'learnpress' ), $user->get_completed_items_in_section( $course->id, $section->section_id, $force ), sizeof( $section->items ) ); ?></span>
30
+ <span class="collapse"></span>
31
+ </div>
32
+ </div>