new-front-common-library 12.0.0 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/assets/css/_new-global.scss +7 -0
  2. package/assets/css/_themes.scss +8 -6
  3. package/{esm2015/lib/util/array.service.js → esm2022/lib/util/array.service.mjs} +4 -4
  4. package/esm2022/lib/util/component/header/header.component.mjs +210 -0
  5. package/esm2022/lib/util/component/overlay/overlay.component.mjs +40 -0
  6. package/{esm2015/lib/util/component/overlay/overlay.service.js → esm2022/lib/util/component/overlay/overlay.service.mjs} +4 -4
  7. package/esm2022/lib/util/component/popup/popup-login/popup-login.component.mjs +90 -0
  8. package/esm2022/lib/util/component/sub-header/sub-header.component.mjs +44 -0
  9. package/esm2022/lib/util/date/date.util.mjs +218 -0
  10. package/{esm2015/lib/util/directives/my-number-formatter-directive.js → esm2022/lib/util/directives/my-number-formatter-directive.mjs} +4 -4
  11. package/esm2022/lib/util/directives/show-if-truncated.directive.mjs +25 -0
  12. package/{esm2015/lib/util/event/header/header-events.service.js → esm2022/lib/util/event/header/header-events.service.mjs} +4 -4
  13. package/{esm2015/lib/util/event/storage/local-storage-events.service.js → esm2022/lib/util/event/storage/local-storage-events.service.mjs} +4 -4
  14. package/{esm2015/lib/util/event/storage/session-storage-events.service.js → esm2022/lib/util/event/storage/session-storage-events.service.mjs} +4 -4
  15. package/esm2022/lib/util/models/referential/user-form.model.mjs +2 -0
  16. package/{esm2015/lib/util/permissions/permissions.service.js → esm2022/lib/util/permissions/permissions.service.mjs} +4 -4
  17. package/{esm2015/lib/util/pipes/capitalizefirst.pipe.js → esm2022/lib/util/pipes/capitalizefirst.pipe.mjs} +4 -4
  18. package/{esm2015/lib/util/pipes/comma-separated-number.pipe.js → esm2022/lib/util/pipes/comma-separated-number.pipe.mjs} +4 -4
  19. package/{esm2015/lib/util/pipes/common-translate.pipe.js → esm2022/lib/util/pipes/common-translate.pipe.mjs} +4 -4
  20. package/{esm2015/lib/util/pipes/display-html.pipe.js → esm2022/lib/util/pipes/display-html.pipe.mjs} +4 -4
  21. package/{esm2015/lib/util/pipes/display-null.pipe.js → esm2022/lib/util/pipes/display-null.pipe.mjs} +4 -4
  22. package/{esm2015/lib/util/pipes/format-duration.pipe.js → esm2022/lib/util/pipes/format-duration.pipe.mjs} +4 -4
  23. package/{esm2015/lib/util/pipes/format-number-input.pipe.js → esm2022/lib/util/pipes/format-number-input.pipe.mjs} +4 -4
  24. package/{esm2015/lib/util/pipes/local-date.pipe.js → esm2022/lib/util/pipes/local-date.pipe.mjs} +4 -4
  25. package/{esm2015/lib/util/pipes/my-number.pipe.js → esm2022/lib/util/pipes/my-number.pipe.mjs} +4 -4
  26. package/esm2022/lib/util/pipes/third-party-address.pipe.mjs +16 -0
  27. package/{esm2015/lib/util/pipes/trim-string.pipe.js → esm2022/lib/util/pipes/trim-string.pipe.mjs} +4 -4
  28. package/{esm2015/lib/util/regex/regex.service.js → esm2022/lib/util/regex/regex.service.mjs} +4 -4
  29. package/{esm2015/lib/util/services/api/common-api.service.js → esm2022/lib/util/services/api/common-api.service.mjs} +4 -4
  30. package/{esm2015/lib/util/services/elasticsearch/elasticsearch.service.js → esm2022/lib/util/services/elasticsearch/elasticsearch.service.mjs} +4 -4
  31. package/{esm2015/lib/util/services/form-action/form-actions-events.service.js → esm2022/lib/util/services/form-action/form-actions-events.service.mjs} +4 -4
  32. package/esm2022/lib/util/services/guard/auth.guard.mjs +27 -0
  33. package/esm2022/lib/util/services/guard/login.guard.mjs +14 -0
  34. package/{esm2015/lib/util/services/history/history.service.js → esm2022/lib/util/services/history/history.service.mjs} +4 -4
  35. package/{esm2015/lib/util/services/interceptor/auth.interceptor.js → esm2022/lib/util/services/interceptor/auth.interceptor.mjs} +4 -4
  36. package/{esm2015/lib/util/services/jwt-security/aes.service.js → esm2022/lib/util/services/jwt-security/aes.service.mjs} +4 -4
  37. package/{esm2015/lib/util/services/jwt-security/interceptorhttp.service.js → esm2022/lib/util/services/jwt-security/interceptorhttp.service.mjs} +4 -4
  38. package/{esm2015/lib/util/services/storage/local-storage.service.js → esm2022/lib/util/services/storage/local-storage.service.mjs} +4 -4
  39. package/{esm2015/lib/util/services/storage/session-storage.service.js → esm2022/lib/util/services/storage/session-storage.service.mjs} +4 -4
  40. package/{esm2015/lib/util/services/translate-language/lang.service.js → esm2022/lib/util/services/translate-language/lang.service.mjs} +4 -4
  41. package/{esm2015/lib/util/theme/theme-event.service.js → esm2022/lib/util/theme/theme-event.service.mjs} +4 -4
  42. package/{esm2015/lib/util/toaster/toaster-events.service.js → esm2022/lib/util/toaster/toaster-events.service.mjs} +4 -4
  43. package/esm2022/lib/util/util.module.mjs +265 -0
  44. package/esm2022/public-api.mjs +55 -0
  45. package/{fesm2015/new-front-common-library.js → fesm2022/new-front-common-library.mjs} +289 -376
  46. package/fesm2022/new-front-common-library.mjs.map +1 -0
  47. package/lib/util/component/header/header.component.d.ts +4 -4
  48. package/lib/util/component/overlay/overlay.component.d.ts +1 -1
  49. package/lib/util/component/popup/popup-login/popup-login.component.d.ts +8 -5
  50. package/lib/util/component/sub-header/sub-header.component.d.ts +1 -1
  51. package/lib/util/directives/my-number-formatter-directive.d.ts +1 -1
  52. package/lib/util/directives/show-if-truncated.directive.d.ts +2 -2
  53. package/lib/util/models/referential/user-form.model.d.ts +5 -0
  54. package/lib/util/pipes/capitalizefirst.pipe.d.ts +1 -1
  55. package/lib/util/pipes/comma-separated-number.pipe.d.ts +1 -1
  56. package/lib/util/pipes/common-translate.pipe.d.ts +1 -1
  57. package/lib/util/pipes/display-html.pipe.d.ts +1 -1
  58. package/lib/util/pipes/display-null.pipe.d.ts +1 -1
  59. package/lib/util/pipes/format-duration.pipe.d.ts +1 -1
  60. package/lib/util/pipes/format-number-input.pipe.d.ts +1 -1
  61. package/lib/util/pipes/local-date.pipe.d.ts +1 -1
  62. package/lib/util/pipes/my-number.pipe.d.ts +1 -1
  63. package/lib/util/pipes/third-party-address.pipe.d.ts +1 -1
  64. package/lib/util/pipes/trim-string.pipe.d.ts +1 -1
  65. package/lib/util/services/guard/auth.guard.d.ts +1 -18
  66. package/lib/util/services/guard/login.guard.d.ts +1 -18
  67. package/lib/util/util.module.d.ts +12 -12
  68. package/package.json +24 -17
  69. package/public-api.d.ts +0 -1
  70. package/bundles/new-front-common-library.umd.js +0 -5506
  71. package/bundles/new-front-common-library.umd.js.map +0 -1
  72. package/esm2015/lib/util/component/header/header.component.js +0 -214
  73. package/esm2015/lib/util/component/overlay/overlay.component.js +0 -44
  74. package/esm2015/lib/util/component/popup/popup-login/popup-login.component.js +0 -90
  75. package/esm2015/lib/util/component/sub-header/sub-header.component.js +0 -48
  76. package/esm2015/lib/util/date/date-adapter.js +0 -41
  77. package/esm2015/lib/util/date/date.util.js +0 -218
  78. package/esm2015/lib/util/directives/show-if-truncated.directive.js +0 -25
  79. package/esm2015/lib/util/pipes/third-party-address.pipe.js +0 -17
  80. package/esm2015/lib/util/services/guard/auth.guard.js +0 -43
  81. package/esm2015/lib/util/services/guard/login.guard.js +0 -34
  82. package/esm2015/lib/util/util.module.js +0 -270
  83. package/esm2015/public-api.js +0 -56
  84. package/fesm2015/new-front-common-library.js.map +0 -1
  85. package/lib/util/date/date-adapter.d.ts +0 -8
  86. /package/{esm2015/lib/util/config.js → esm2022/lib/util/config.mjs} +0 -0
  87. /package/{esm2015/lib/util/date/PeriodModel.js → esm2022/lib/util/date/PeriodModel.mjs} +0 -0
  88. /package/{esm2015/lib/util/date/date-format-constants.js → esm2022/lib/util/date/date-format-constants.mjs} +0 -0
  89. /package/{esm2015/lib/util/decorators/theme.decorator.js → esm2022/lib/util/decorators/theme.decorator.mjs} +0 -0
  90. /package/{esm2015/lib/util/decorators/user.decorator.js → esm2022/lib/util/decorators/user.decorator.mjs} +0 -0
  91. /package/{esm2015/lib/util/enums/rapid-search-item-type.enum.js → esm2022/lib/util/enums/rapid-search-item-type.enum.mjs} +0 -0
  92. /package/{esm2015/lib/util/enums/status-color.enum.js → esm2022/lib/util/enums/status-color.enum.mjs} +0 -0
  93. /package/{esm2015/lib/util/http/http-params.builder.js → esm2022/lib/util/http/http-params.builder.mjs} +0 -0
  94. /package/{esm2015/lib/util/i18n/de.js → esm2022/lib/util/i18n/de.mjs} +0 -0
  95. /package/{esm2015/lib/util/i18n/en.js → esm2022/lib/util/i18n/en.mjs} +0 -0
  96. /package/{esm2015/lib/util/i18n/fr.js → esm2022/lib/util/i18n/fr.mjs} +0 -0
  97. /package/{esm2015/lib/util/i18n/multi-translate-http-loader.js → esm2022/lib/util/i18n/multi-translate-http-loader.mjs} +0 -0
  98. /package/{esm2015/lib/util/interfaces/permissions.interface.js → esm2022/lib/util/interfaces/permissions.interface.mjs} +0 -0
  99. /package/{esm2015/lib/util/models/any-line.model.js → esm2022/lib/util/models/any-line.model.mjs} +0 -0
  100. /package/{esm2015/lib/util/models/audio-content.model.js → esm2022/lib/util/models/audio-content.model.mjs} +0 -0
  101. /package/{esm2015/lib/util/models/authPermission.model.js → esm2022/lib/util/models/authPermission.model.mjs} +0 -0
  102. /package/{esm2015/lib/util/models/authUser.model.js → esm2022/lib/util/models/authUser.model.mjs} +0 -0
  103. /package/{esm2015/lib/util/models/basic.model.js → esm2022/lib/util/models/basic.model.mjs} +0 -0
  104. /package/{esm2015/lib/util/models/box-set-item.model.js → esm2022/lib/util/models/box-set-item.model.mjs} +0 -0
  105. /package/{esm2015/lib/util/models/commercial/deal-rapid-search-model.js → esm2022/lib/util/models/commercial/deal-rapid-search-model.mjs} +0 -0
  106. /package/{esm2015/lib/util/models/commercial/invoice-rapid-search-model.js → esm2022/lib/util/models/commercial/invoice-rapid-search-model.mjs} +0 -0
  107. /package/{esm2015/lib/util/models/commercial/work-record-rapid-search-model.js → esm2022/lib/util/models/commercial/work-record-rapid-search-model.mjs} +0 -0
  108. /package/{esm2015/lib/util/models/disc-program.model.js → esm2022/lib/util/models/disc-program.model.mjs} +0 -0
  109. /package/{esm2015/lib/util/models/disc.model.js → esm2022/lib/util/models/disc.model.mjs} +0 -0
  110. /package/{esm2015/lib/util/models/eventType.model.js → esm2022/lib/util/models/eventType.model.mjs} +0 -0
  111. /package/{esm2015/lib/util/models/expenditure-commitment/purchase-order-file.model.js → esm2022/lib/util/models/expenditure-commitment/purchase-order-file.model.mjs} +0 -0
  112. /package/{esm2015/lib/util/models/expenditure-commitment/purchase-order-rapid-search.model.js → esm2022/lib/util/models/expenditure-commitment/purchase-order-rapid-search.model.mjs} +0 -0
  113. /package/{esm2015/lib/util/models/index.js → esm2022/lib/util/models/index.mjs} +0 -0
  114. /package/{esm2015/lib/util/models/lang-line.model.js → esm2022/lib/util/models/lang-line.model.mjs} +0 -0
  115. /package/{esm2015/lib/util/models/legal/contract-rapid-search-model.js → esm2022/lib/util/models/legal/contract-rapid-search-model.mjs} +0 -0
  116. /package/{esm2015/lib/util/models/legal/contract-work.model.js → esm2022/lib/util/models/legal/contract-work.model.mjs} +0 -0
  117. /package/{esm2015/lib/util/models/legal/contract-work2.model.js → esm2022/lib/util/models/legal/contract-work2.model.mjs} +0 -0
  118. /package/{esm2015/lib/util/models/legal/type-status-rapid-search.model.js → esm2022/lib/util/models/legal/type-status-rapid-search.model.mjs} +0 -0
  119. /package/{esm2015/lib/util/models/media-line.model.js → esm2022/lib/util/models/media-line.model.mjs} +0 -0
  120. /package/{esm2015/lib/util/models/menu-language.model.js → esm2022/lib/util/models/menu-language.model.mjs} +0 -0
  121. /package/{esm2015/lib/util/models/permission.model.js → esm2022/lib/util/models/permission.model.mjs} +0 -0
  122. /package/{esm2015/lib/util/models/product-box-set.model.js → esm2022/lib/util/models/product-box-set.model.mjs} +0 -0
  123. /package/{esm2015/lib/util/models/product-disc-detail.model.js → esm2022/lib/util/models/product-disc-detail.model.mjs} +0 -0
  124. /package/{esm2015/lib/util/models/product-disc.model.js → esm2022/lib/util/models/product-disc.model.mjs} +0 -0
  125. /package/{esm2015/lib/util/models/product-division.model.js → esm2022/lib/util/models/product-division.model.mjs} +0 -0
  126. /package/{esm2015/lib/util/models/product-type.model.js → esm2022/lib/util/models/product-type.model.mjs} +0 -0
  127. /package/{esm2015/lib/util/models/product.model.js → esm2022/lib/util/models/product.model.mjs} +0 -0
  128. /package/{esm2015/lib/util/models/program.model.js → esm2022/lib/util/models/program.model.mjs} +0 -0
  129. /package/{esm2015/lib/util/models/purchase-order/purchase-order.model.js → esm2022/lib/util/models/purchase-order/purchase-order.model.mjs} +0 -0
  130. /package/{esm2015/lib/util/models/referential/WorkVersionArticleDto.js → esm2022/lib/util/models/referential/WorkVersionArticleDto.mjs} +0 -0
  131. /package/{esm2015/lib/util/models/referential/adress-type.model.js → esm2022/lib/util/models/referential/adress-type.model.mjs} +0 -0
  132. /package/{esm2015/lib/util/models/referential/adress.model.js → esm2022/lib/util/models/referential/adress.model.mjs} +0 -0
  133. /package/{esm2015/lib/util/models/referential/attached-file.model.js → esm2022/lib/util/models/referential/attached-file.model.mjs} +0 -0
  134. /package/{esm2015/lib/util/models/referential/bank-account.model.js → esm2022/lib/util/models/referential/bank-account.model.mjs} +0 -0
  135. /package/{esm2015/lib/util/models/referential/bank-accounts.model.js → esm2022/lib/util/models/referential/bank-accounts.model.mjs} +0 -0
  136. /package/{esm2015/lib/util/models/referential/basic-hierarchy.model.js → esm2022/lib/util/models/referential/basic-hierarchy.model.mjs} +0 -0
  137. /package/{esm2015/lib/util/models/referential/broadcast-list-item.model.js → esm2022/lib/util/models/referential/broadcast-list-item.model.mjs} +0 -0
  138. /package/{esm2015/lib/util/models/referential/color.model.js → esm2022/lib/util/models/referential/color.model.mjs} +0 -0
  139. /package/{esm2015/lib/util/models/referential/company.model.js → esm2022/lib/util/models/referential/company.model.mjs} +0 -0
  140. /package/{esm2015/lib/util/models/referential/content-type.model.js → esm2022/lib/util/models/referential/content-type.model.mjs} +0 -0
  141. /package/{esm2015/lib/util/models/referential/content.model.js → esm2022/lib/util/models/referential/content.model.mjs} +0 -0
  142. /package/{esm2015/lib/util/models/referential/cost-center-criteria-values.model.js → esm2022/lib/util/models/referential/cost-center-criteria-values.model.mjs} +0 -0
  143. /package/{esm2015/lib/util/models/referential/cost-center-criteria.model.js → esm2022/lib/util/models/referential/cost-center-criteria.model.mjs} +0 -0
  144. /package/{esm2015/lib/util/models/referential/cost-center.model.js → esm2022/lib/util/models/referential/cost-center.model.mjs} +0 -0
  145. /package/{esm2015/lib/util/models/referential/coutry.model.js → esm2022/lib/util/models/referential/coutry.model.mjs} +0 -0
  146. /package/{esm2015/lib/util/models/referential/currency.model.js → esm2022/lib/util/models/referential/currency.model.mjs} +0 -0
  147. /package/{esm2015/lib/util/models/referential/editorial-content.model.js → esm2022/lib/util/models/referential/editorial-content.model.mjs} +0 -0
  148. /package/{esm2015/lib/util/models/referential/fixing.model.js → esm2022/lib/util/models/referential/fixing.model.mjs} +0 -0
  149. /package/{esm2015/lib/util/models/referential/flat-media.model.js → esm2022/lib/util/models/referential/flat-media.model.mjs} +0 -0
  150. /package/{esm2015/lib/util/models/referential/format-image.model.js → esm2022/lib/util/models/referential/format-image.model.mjs} +0 -0
  151. /package/{esm2015/lib/util/models/referential/format-type.model.js → esm2022/lib/util/models/referential/format-type.model.mjs} +0 -0
  152. /package/{esm2015/lib/util/models/referential/format.model.js → esm2022/lib/util/models/referential/format.model.mjs} +0 -0
  153. /package/{esm2015/lib/util/models/referential/fsk-index.model.js → esm2022/lib/util/models/referential/fsk-index.model.mjs} +0 -0
  154. /package/{esm2015/lib/util/models/referential/fsk.model.js → esm2022/lib/util/models/referential/fsk.model.mjs} +0 -0
  155. /package/{esm2015/lib/util/models/referential/function.model.js → esm2022/lib/util/models/referential/function.model.mjs} +0 -0
  156. /package/{esm2015/lib/util/models/referential/genre.model.js → esm2022/lib/util/models/referential/genre.model.mjs} +0 -0
  157. /package/{esm2015/lib/util/models/referential/invoice-product-type.model.js → esm2022/lib/util/models/referential/invoice-product-type.model.mjs} +0 -0
  158. /package/{esm2015/lib/util/models/referential/keywords.model.js → esm2022/lib/util/models/referential/keywords.model.mjs} +0 -0
  159. /package/{esm2015/lib/util/models/referential/language.model.js → esm2022/lib/util/models/referential/language.model.mjs} +0 -0
  160. /package/{esm2015/lib/util/models/referential/media-filter.model.js → esm2022/lib/util/models/referential/media-filter.model.mjs} +0 -0
  161. /package/{esm2015/lib/util/models/referential/media.model.js → esm2022/lib/util/models/referential/media.model.mjs} +0 -0
  162. /package/{esm2015/lib/util/models/referential/module.model.js → esm2022/lib/util/models/referential/module.model.mjs} +0 -0
  163. /package/{esm2015/lib/util/models/referential/parameter.model.js → esm2022/lib/util/models/referential/parameter.model.mjs} +0 -0
  164. /package/{esm2015/lib/util/models/referential/participant.model.js → esm2022/lib/util/models/referential/participant.model.mjs} +0 -0
  165. /package/{esm2015/lib/util/models/referential/person.model.js → esm2022/lib/util/models/referential/person.model.mjs} +0 -0
  166. /package/{esm2015/lib/util/models/referential/project-status.model.js → esm2022/lib/util/models/referential/project-status.model.mjs} +0 -0
  167. /package/{esm2015/lib/util/models/referential/quota.model.js → esm2022/lib/util/models/referential/quota.model.mjs} +0 -0
  168. /package/{esm2015/lib/util/models/referential/referential-entity-state.model.js → esm2022/lib/util/models/referential/referential-entity-state.model.mjs} +0 -0
  169. /package/{esm2015/lib/util/models/referential/referential-value.model.js → esm2022/lib/util/models/referential/referential-value.model.mjs} +0 -0
  170. /package/{esm2015/lib/util/models/referential/referentiel.model.js → esm2022/lib/util/models/referential/referentiel.model.mjs} +0 -0
  171. /package/{esm2015/lib/util/models/referential/restriction.model.js → esm2022/lib/util/models/referential/restriction.model.mjs} +0 -0
  172. /package/{esm2015/lib/util/models/referential/sap-order.model.js → esm2022/lib/util/models/referential/sap-order.model.mjs} +0 -0
  173. /package/{esm2015/lib/util/models/referential/service-error.model.js → esm2022/lib/util/models/referential/service-error.model.mjs} +0 -0
  174. /package/{esm2015/lib/util/models/referential/sound.model.js → esm2022/lib/util/models/referential/sound.model.mjs} +0 -0
  175. /package/{esm2015/lib/util/models/referential/territories-languages.model.js → esm2022/lib/util/models/referential/territories-languages.model.mjs} +0 -0
  176. /package/{esm2015/lib/util/models/referential/territory-filter.model.js → esm2022/lib/util/models/referential/territory-filter.model.mjs} +0 -0
  177. /package/{esm2015/lib/util/models/referential/territory.model.js → esm2022/lib/util/models/referential/territory.model.mjs} +0 -0
  178. /package/{esm2015/lib/util/models/referential/theme.model.js → esm2022/lib/util/models/referential/theme.model.mjs} +0 -0
  179. /package/{esm2015/lib/util/models/referential/third-party-creation-request.model.js → esm2022/lib/util/models/referential/third-party-creation-request.model.mjs} +0 -0
  180. /package/{esm2015/lib/util/models/referential/third-party-module.model.js → esm2022/lib/util/models/referential/third-party-module.model.mjs} +0 -0
  181. /package/{esm2015/lib/util/models/referential/third-party-rapid-search.model.js → esm2022/lib/util/models/referential/third-party-rapid-search.model.mjs} +0 -0
  182. /package/{esm2015/lib/util/models/referential/third-party.model.js → esm2022/lib/util/models/referential/third-party.model.mjs} +0 -0
  183. /package/{esm2015/lib/util/models/referential/translated-value-model.js → esm2022/lib/util/models/referential/translated-value-model.mjs} +0 -0
  184. /package/{esm2015/lib/util/models/referential/tva.model.js → esm2022/lib/util/models/referential/tva.model.mjs} +0 -0
  185. /package/{esm2015/lib/util/models/referential/type-export.model.js → esm2022/lib/util/models/referential/type-export.model.mjs} +0 -0
  186. /package/{esm2015/lib/util/models/referential/type-tva-company-territory.model.js → esm2022/lib/util/models/referential/type-tva-company-territory.model.mjs} +0 -0
  187. /package/{esm2015/lib/util/models/referential/type-tva.model.js → esm2022/lib/util/models/referential/type-tva.model.mjs} +0 -0
  188. /package/{esm2015/lib/util/models/referential/work-addons-model.js → esm2022/lib/util/models/referential/work-addons-model.mjs} +0 -0
  189. /package/{esm2015/lib/util/models/referential/work-appartenance.model.js → esm2022/lib/util/models/referential/work-appartenance.model.mjs} +0 -0
  190. /package/{esm2015/lib/util/models/referential/work-genre.model.js → esm2022/lib/util/models/referential/work-genre.model.mjs} +0 -0
  191. /package/{esm2015/lib/util/models/referential/work-language.model.js → esm2022/lib/util/models/referential/work-language.model.mjs} +0 -0
  192. /package/{esm2015/lib/util/models/referential/work-milo.model.js → esm2022/lib/util/models/referential/work-milo.model.mjs} +0 -0
  193. /package/{esm2015/lib/util/models/referential/work-participant.model.js → esm2022/lib/util/models/referential/work-participant.model.mjs} +0 -0
  194. /package/{esm2015/lib/util/models/referential/work-restrictions-model.js → esm2022/lib/util/models/referential/work-restrictions-model.mjs} +0 -0
  195. /package/{esm2015/lib/util/models/referential/work-theme.model.js → esm2022/lib/util/models/referential/work-theme.model.mjs} +0 -0
  196. /package/{esm2015/lib/util/models/referential/work-title.model.js → esm2022/lib/util/models/referential/work-title.model.mjs} +0 -0
  197. /package/{esm2015/lib/util/models/referential/work-version-origin.model.js → esm2022/lib/util/models/referential/work-version-origin.model.mjs} +0 -0
  198. /package/{esm2015/lib/util/models/referential/work-version-rapid-search.model.js → esm2022/lib/util/models/referential/work-version-rapid-search.model.mjs} +0 -0
  199. /package/{esm2015/lib/util/models/referential/work-versions-used.model.js → esm2022/lib/util/models/referential/work-versions-used.model.mjs} +0 -0
  200. /package/{esm2015/lib/util/models/referential/work-versions.model.js → esm2022/lib/util/models/referential/work-versions.model.mjs} +0 -0
  201. /package/{esm2015/lib/util/models/referential/work-year-production.model.js → esm2022/lib/util/models/referential/work-year-production.model.mjs} +0 -0
  202. /package/{esm2015/lib/util/models/referential/work.model.js → esm2022/lib/util/models/referential/work.model.mjs} +0 -0
  203. /package/{esm2015/lib/util/models/referential/zone.model.js → esm2022/lib/util/models/referential/zone.model.mjs} +0 -0
  204. /package/{esm2015/lib/util/models/referentiel.model.js → esm2022/lib/util/models/referentiel.model.mjs} +0 -0
  205. /package/{esm2015/lib/util/models/search-response.model.js → esm2022/lib/util/models/search-response.model.mjs} +0 -0
  206. /package/{esm2015/lib/util/models/section.model.js → esm2022/lib/util/models/section.model.mjs} +0 -0
  207. /package/{esm2015/lib/util/models/select/options.model.js → esm2022/lib/util/models/select/options.model.mjs} +0 -0
  208. /package/{esm2015/lib/util/models/select/select.model.js → esm2022/lib/util/models/select/select.model.mjs} +0 -0
  209. /package/{esm2015/lib/util/models/subtitle-content.model.js → esm2022/lib/util/models/subtitle-content.model.mjs} +0 -0
  210. /package/{esm2015/lib/util/models/user-video.model.js → esm2022/lib/util/models/user-video.model.mjs} +0 -0
  211. /package/{esm2015/lib/util/models/user.model.js → esm2022/lib/util/models/user.model.mjs} +0 -0
  212. /package/{esm2015/lib/util/models/video/product-rapid-search.model.js → esm2022/lib/util/models/video/product-rapid-search.model.mjs} +0 -0
  213. /package/{esm2015/lib/util/models/video/support-rapid-search.model.js → esm2022/lib/util/models/video/support-rapid-search.model.mjs} +0 -0
  214. /package/{esm2015/lib/util/models/video-content.model.js → esm2022/lib/util/models/video-content.model.mjs} +0 -0
  215. /package/{esm2015/lib/util/number.validator.js → esm2022/lib/util/number.validator.mjs} +0 -0
  216. /package/{esm2015/lib/util/services/jwt-security/jwt.helpher.js → esm2022/lib/util/services/jwt-security/jwt.helpher.mjs} +0 -0
  217. /package/{esm2015/lib/util/sort.js → esm2022/lib/util/sort.mjs} +0 -0
  218. /package/{esm2015/new-front-common-library.js → esm2022/new-front-common-library.mjs} +0 -0
  219. /package/{new-front-common-library.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,7 @@
1
+
2
+ .mat-form-field-suffix .mat-mdc-icon-button {
3
+ font-size: 15px !important;
4
+ width: 1em !important;
5
+ padding-right: 20px !important;
6
+ padding-top: 0 !important;
7
+ }
@@ -1,6 +1,7 @@
1
1
  @use '@angular/material' as mat;
2
2
 
3
- @include mat.core();
3
+
4
+ @include mat.legacy-core();
4
5
  //Fonts
5
6
  @import url('https://fonts.googleapis.com/css?family=Poppins');
6
7
  @import url('https://fonts.googleapis.com/css?family=Source+Sans+Pro');
@@ -9,13 +10,14 @@
9
10
  //Imports
10
11
  @import "mat-palettes";
11
12
  @import "global";
13
+ @import "new-global";
12
14
  @import '@angular/material/theming';
13
15
 
14
16
  // Define a light theme
15
-
17
+ $mat-theme-ignore-duplication-warnings: true;
16
18
  $light-primary: mat.define-palette($light-unity-palette);
17
19
  $light-accent: mat.define-palette($light-unity-palette);
18
- $light-typography: mat.define-typography-config(
20
+ $light-typography: mat.define-legacy-typography-config(
19
21
  $font-family: '"Roboto","Source Sans Pro",Poppins'
20
22
  );
21
23
  $light-theme: mat.define-light-theme((
@@ -37,16 +39,16 @@ $dark-theme: mat.define-dark-theme((
37
39
  ));
38
40
 
39
41
  .dark-theme {
40
- @include mat.all-component-themes($dark-theme);
42
+ @include mat.all-legacy-component-themes($dark-theme);
41
43
 
42
44
  }
43
45
 
44
46
  .light-theme {
45
- @include mat.all-component-themes($light-theme);
47
+ @include mat.all-legacy-component-themes($light-theme);
46
48
 
47
49
  }
48
50
 
49
- @include mat.all-component-themes($light-theme);
51
+ @include mat.all-legacy-component-themes($light-theme);
50
52
  @import "dark-theme";
51
53
  @import "light-theme";
52
54
  @import "flex";
@@ -10,10 +10,10 @@ export class ArrayService {
10
10
  return array.indexOf(value) !== -1;
11
11
  }
12
12
  }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ArrayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ArrayService }); }
13
15
  }
14
- ArrayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ArrayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
15
- ArrayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ArrayService });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ArrayService, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ArrayService, decorators: [{
17
17
  type: Injectable
18
18
  }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldy1mcm9udC1jb21tb24tbGlicmFyeS9zcmMvbGliL3V0aWwvYXJyYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8sWUFBWTtJQUVyQixtQ0FBbUM7SUFDNUIsT0FBTyxDQUFDLEtBQVUsRUFBRSxLQUFVO1FBQ2pDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO2FBQU07WUFDSCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDdEM7SUFDTCxDQUFDOzswR0FUUSxZQUFZOzhHQUFaLFlBQVk7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFycmF5U2VydmljZSB7XG5cbiAgICAvKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBpbiBhcnJheSAqL1xuICAgIHB1YmxpYyBpbkFycmF5KHZhbHVlOiBhbnksIGFycmF5OiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IGFycmF5ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldy1mcm9udC1jb21tb24tbGlicmFyeS9zcmMvbGliL3V0aWwvYXJyYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8sWUFBWTtJQUVyQixtQ0FBbUM7SUFDNUIsT0FBTyxDQUFDLEtBQVUsRUFBRSxLQUFVO1FBQ2pDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO2FBQU07WUFDSCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDdEM7SUFDTCxDQUFDOytHQVRRLFlBQVk7bUhBQVosWUFBWTs7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFycmF5U2VydmljZSB7XG5cbiAgICAvKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBpbiBhcnJheSAqL1xuICAgIHB1YmxpYyBpbkFycmF5KHZhbHVlOiBhbnksIGFycmF5OiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IGFycmF5ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -0,0 +1,210 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, EventEmitter, HostListener, Inject, Output } from '@angular/core';
3
+ import { Theme } from "../../decorators/theme.decorator";
4
+ import { User } from "../../decorators/user.decorator";
5
+ import { WEB_CONFIG } from "../../config";
6
+ import { RapidSearchItemType } from "../../enums/rapid-search-item-type.enum";
7
+ import { FormControl } from '@angular/forms';
8
+ import { debounceTime, map, switchMap } from 'rxjs/operators';
9
+ import { of } from 'rxjs';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/router";
12
+ import * as i2 from "../../event/storage/local-storage-events.service";
13
+ import * as i3 from "../../services/storage/local-storage.service";
14
+ import * as i4 from "../../toaster/toaster-events.service";
15
+ import * as i5 from "@ngx-translate/core";
16
+ import * as i6 from "../../services/api/common-api.service";
17
+ import * as i7 from "../../services/storage/session-storage.service";
18
+ import * as i8 from "../../permissions/permissions.service";
19
+ import * as i9 from "@angular/cdk/overlay";
20
+ import * as i10 from "ngx-cookie-service";
21
+ import * as i11 from "../../services/translate-language/lang.service";
22
+ import * as i12 from "../../services/elasticsearch/elasticsearch.service";
23
+ import * as i13 from "@angular/material/legacy-form-field";
24
+ import * as i14 from "@angular/material/legacy-input";
25
+ import * as i15 from "@angular/material/legacy-core";
26
+ import * as i16 from "@angular/material/legacy-button";
27
+ import * as i17 from "@angular/material/toolbar";
28
+ import * as i18 from "@angular/common";
29
+ import * as i19 from "ngx-permissions";
30
+ import * as i20 from "@angular/forms";
31
+ import * as i21 from "@angular/material/icon";
32
+ import * as i22 from "@angular/material/legacy-menu";
33
+ import * as i23 from "@angular/material/legacy-autocomplete";
34
+ import * as i24 from "../../pipes/common-translate.pipe";
35
+ export class HeaderComponent {
36
+ constructor(router, localStorageEvents, localStorage, toasterService, translate, commonApiService, sessionStorageService, permissionsService, overlayContainer, cookieService, langService, elasticsearchService, config) {
37
+ this.router = router;
38
+ this.localStorageEvents = localStorageEvents;
39
+ this.localStorage = localStorage;
40
+ this.toasterService = toasterService;
41
+ this.translate = translate;
42
+ this.commonApiService = commonApiService;
43
+ this.sessionStorageService = sessionStorageService;
44
+ this.permissionsService = permissionsService;
45
+ this.overlayContainer = overlayContainer;
46
+ this.cookieService = cookieService;
47
+ this.langService = langService;
48
+ this.elasticsearchService = elasticsearchService;
49
+ this.config = config;
50
+ this.toogleMenuEvent = new EventEmitter();
51
+ this.labelLang = 'labelFr';
52
+ this.isHide = false;
53
+ this.currentScroll = 0;
54
+ this.historyList = [];
55
+ this.RapidSearchItemType = RapidSearchItemType;
56
+ this.apiUrl = this.config.api_url;
57
+ }
58
+ ngOnInit() {
59
+ this.formControlSearch = new FormControl(null);
60
+ this.initPermissionsService();
61
+ this.lang = this.localStorage.get('lang') || 'fr';
62
+ this.updateLabelLang(this.lang);
63
+ this.env = this.config.env.toLowerCase();
64
+ this.localStorageEvents.localStorageEvent.subscribe(() => {
65
+ this.lang = this.localStorage.get('lang');
66
+ this.updateLabelLang(this.lang);
67
+ });
68
+ this.documents$ = this.formControlSearch.valueChanges.pipe(debounceTime(500), switchMap(term => {
69
+ if (!term) {
70
+ return of([]);
71
+ }
72
+ return this.elasticsearchService
73
+ .getSearchResponse(term)
74
+ .pipe(map(searchResponse => {
75
+ return this.elasticsearchService.getDocuments(searchResponse);
76
+ }));
77
+ }));
78
+ }
79
+ onWindowScroll() {
80
+ const numberVar = document.documentElement.scrollTop;
81
+ if (numberVar > this.currentScroll) {
82
+ this.isHide = true;
83
+ }
84
+ if (numberVar < this.currentScroll) {
85
+ this.isHide = false;
86
+ }
87
+ this.currentScroll = numberVar;
88
+ }
89
+ initPermissionsService() {
90
+ this.permissionsService.init();
91
+ }
92
+ switchTheme() {
93
+ if (this.theme === 'dark') {
94
+ this.localStorage.post('newTheme', 'light');
95
+ this.overlayContainer
96
+ .getContainerElement()
97
+ .classList.remove('dark-theme');
98
+ this.overlayContainer.getContainerElement().classList.add('light-theme');
99
+ }
100
+ else {
101
+ this.localStorage.post('newTheme', 'dark');
102
+ this.overlayContainer
103
+ .getContainerElement()
104
+ .classList.remove('light-theme');
105
+ this.overlayContainer.getContainerElement().classList.add('dark-theme');
106
+ }
107
+ }
108
+ stopIdentityTheft() {
109
+ sessionStorage.removeItem('authTokenSecondary');
110
+ }
111
+ navigate(module = '', route) {
112
+ if (!route.startsWith('/')) {
113
+ route = '/' + route;
114
+ }
115
+ const url = this.config.api_url + (module ? `/${module}` : '') + route;
116
+ if (window.location.href === url) {
117
+ window.location.reload();
118
+ }
119
+ else if (window.location.pathname.startsWith(`/${module}`)) {
120
+ this.router
121
+ .navigateByUrl('/', { skipLocationChange: true })
122
+ .then(() => this.router.navigate([route]));
123
+ }
124
+ else {
125
+ window.location.href = url;
126
+ }
127
+ }
128
+ getHistory() {
129
+ this.historyList = [];
130
+ if (this.localStorage.exist('history')) {
131
+ this.historyList = this.localStorage.get('history');
132
+ }
133
+ if (this.historyList.length === 0) {
134
+ this.historyList.push({ type: 'NO_HISTORY_AVAILABLE', id: null, ref: null });
135
+ }
136
+ }
137
+ switchLang(lang) {
138
+ this.localStorage.post('lang', lang);
139
+ this.translate.use(lang);
140
+ this.langService.switchLang();
141
+ }
142
+ updateLabelLang(lang) {
143
+ if ('en' === lang) {
144
+ this.labelLang = 'labelEn';
145
+ }
146
+ else if ('de' === lang) {
147
+ this.labelLang = 'labelDe';
148
+ }
149
+ else {
150
+ this.labelLang = 'labelFr';
151
+ }
152
+ }
153
+ getContractType(type) {
154
+ return type === 'Sale' ? 'cess' : type === 'Acquisition' ? 'acq' : 'auth';
155
+ }
156
+ onSelectSearch($event, doc) {
157
+ switch (doc.docType) {
158
+ case RapidSearchItemType.PURCHASE_ORDER:
159
+ this.navigate('expenditure-commitment', '/purchase-orders/' + doc.poId);
160
+ break;
161
+ case RapidSearchItemType.PRODUCT:
162
+ this.navigate('video', '/product/consult/' + doc.productId);
163
+ break;
164
+ case RapidSearchItemType.WORK_VERSION:
165
+ this.navigate(null, '/work-summary/' + doc.id + '/info');
166
+ break;
167
+ case RapidSearchItemType.DEAL:
168
+ this.navigate(null, '/commercial/deal/consult/' + doc.id);
169
+ break;
170
+ case RapidSearchItemType.THIRD_PARTY:
171
+ this.navigate(null, '/referential/third-party/' + doc.id);
172
+ break;
173
+ case RapidSearchItemType.WORK_RECORD:
174
+ this.navigate(null, '/commercial/work-record/consult/' + doc.id + '/general');
175
+ break;
176
+ case RapidSearchItemType.CONTRACT:
177
+ this.navigate(null, '/legal/contracts-details/' + this.getContractType(doc.type.labelEn) + '/' + doc.contractId);
178
+ break;
179
+ case RapidSearchItemType.INVOICE:
180
+ if (doc.right) {
181
+ this.navigate(null, '/commercial/invoice/right-payment-consult?idEcheance=' + doc.invoiceId);
182
+ }
183
+ else {
184
+ this.navigate(null, '/commercial/invoice/material-payment-consult?idEcheance=' + doc.invoiceId);
185
+ }
186
+ break;
187
+ }
188
+ }
189
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.Router }, { token: i2.LocalStorageEventsService }, { token: i3.LocalStorageService }, { token: i4.ToasterEventsService }, { token: i5.TranslateService }, { token: i6.CommonApiService }, { token: i7.SessionStorageService }, { token: i8.PermissionsService }, { token: i9.OverlayContainer }, { token: i10.CookieService }, { token: i11.LangService }, { token: i12.ElasticsearchService }, { token: WEB_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
190
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HeaderComponent, selector: "sc-header", outputs: { toogleMenuEvent: "toogleMenuEvent" }, host: { listeners: { "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<mat-toolbar [ngClass]=\"{ 'light-header': theme !== 'dark' }\"\n class=\"sc-header d-flex align-items-center\">\n <span class=\"d-flex align-items-end\">\n <a\n [href]=\"env === 'prod' ? 'https://unity.studiocanal.com/dashboard' : (env === 'sbx' ? 'https://unity-sbx.cplus/dashboard' : 'https://unity-' + env + '.studiocanal.com/dashboard')\">\n <img class=\"logo-unity\" src=\"./assets/img/unity_logo_48x48.png\">\n </a>\n <span *ngIf=\"env != 'prod'\" [attr.id]=\"'env-' + env\" class=\"env\">{{env}}</span>\n </span>\n <span class=\"header-separator\"></span>\n <span [matMenuTriggerFor]=\"menu_global\" class=\"material-icons header-icon max-width-5\">apps</span>\n <mat-menu #menu_global=\"matMenu\" class=\"action-menu\">\n <!--DASHBOARD-->\n <button (click)=\"navigate(null, '/dashboard')\" mat-menu-item>\n <span class=\"material-icons-outlined\">apps</span>\n <span>{{ 'COMMON.HEADER.MENU.DASHBOARD' | commonTranslate: lang }}</span>\n </button>\n <!--COMMERCIAL-->\n <span *ngxPermissionsOnly=\"['COMMERCIAL']\">\n <button (click)=\"navigate('commercial', '/deal/search')\" mat-menu-item>\n <span class=\"material-icons-outlined\">local_offer</span>\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL' | commonTranslate: lang }}</span>\n </button>\n <button (click)=\"navigate('commercial', '/turnover/search')\"\n *ngxPermissionsOnly=\"['ACCOUNTANT', 'ADMINISTRATIVE_CONTROLLER']\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">request_quote</span>\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.FINANCE' | commonTranslate: lang }}</span>\n </button>\n </span>\n <!--USER-->\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\n <span class=\"material-icons-outlined\">manage_accounts</span>\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\n </button>\n <!--MY PREFERENCES-->\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\n <span class=\"material-icons-outlined\">settings</span>\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\n </button>\n <!--BATCH-->\n <button (click)=\"navigate('batch', '/jobs/referential')\" *ngxPermissionsOnly=\"['MODULE REF']\" mat-menu-item>\n <span class=\"material-icons-outlined\">autorenew</span>\n <span>{{ 'COMMON.HEADER.MENU.REFERENTIAL.BATCH' | commonTranslate: lang }}</span>\n </button>\n <!--TV DATA-->\n <button (click)=\"navigate('tvdata', '/infos-center')\" *ngxPermissionsOnly=\"['TVDATA']\" mat-menu-item>\n <span class=\"material-icons-outlined\">source</span>\n <span>{{ 'COMMON.HEADER.MENU.TV-DATA' | commonTranslate: lang }}</span>\n </button>\n <!--EXPENDITURE COMMITMENT-->\n <button (click)=\"navigate('expenditure-commitment', '/home/commands')\" *ngxPermissionsExcept=\"['UNIVERSAL_ROLE']\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">receipt_long</span>\n <span>{{ 'COMMON.HEADER.MENU.EXPENDITURE_COMMITMENT' | commonTranslate: lang }}</span>\n </button>\n <!--BI-->\n <button (click)=\"navigate('bi', '/simple-search/form')\" *ngxPermissionsOnly=\"['MODULE BI']\" mat-menu-item>\n <span class=\"material-icons-outlined\">travel_explore</span>\n <span>{{ 'COMMON.HEADER.MENU.BI.SEARCH' | commonTranslate: lang }}</span>\n </button>\n <!--LEGAL-->\n <button (click)=\"navigate('legal', '/contracts/menu/legals-det')\" *ngxPermissionsOnly=\"['LEGAL']\" mat-menu-item>\n <span class=\"material-icons-outlined\">gavel</span>\n <span>{{ 'COMMON.HEADER.MENU.LEGAL' | commonTranslate: lang }}</span>\n </button>\n <!--CALENDAR-->\n <button (click)=\"navigate('calendar', '')\" mat-menu-item>\n <span class=\"material-icons-outlined\">calendar_month</span>\n <span>{{ 'COMMON.HEADER.MENU.CALENDAR' | commonTranslate: lang }}</span>\n </button>\n </mat-menu>\n <span class=\"header-separator\"></span>\n <span [matMenuTriggerFor]=\"menu\" class=\"material-icons-outlined header-icon max-width-5\">add_box</span>\n <mat-menu #menu=\"matMenu\" class=\"action-menu\">\n <button (click)=\"navigate('video', '/product/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">theaters</span>\n {{ 'COMMON.HEADER.CREATION.PRODUCT' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">receipt_long</span>\n {{ 'COMMON.HEADER.CREATION.PO' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('commercial', '/deal/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">local_offer</span>\n {{ 'COMMON.HEADER.CREATION.DEAL' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('legal', '/createContract/acq')\" mat-menu-item>\n <span class=\"material-icons-outlined\">shop_two</span>\n {{ 'COMMON.HEADER.CREATION.CREATION_ACQ' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('legal', '/createContract/sales')\" mat-menu-item>\n <span class=\"material-icons-outlined\">article</span>\n {{ 'COMMON.HEADER.CREATION.CREATION_CESS' | commonTranslate: lang }}\n </button>\n\t <button (click)=\"navigate('legal', '/createContract/auth')\" mat-menu-item>\n <span class=\"material-icons-outlined\">account_circle</span>\n {{ 'COMMON.HEADER.CREATION.CREATION_AUTH' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('pa', '/campaign/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">campaign</span>\n {{ 'COMMON.HEADER.CREATION.CAMPAIGN' | commonTranslate: lang }}\n </button>\n </mat-menu>\n <span class=\"header-separator\"></span>\n <span (click)=\"getHistory()\" [matMenuTriggerFor]=\"menuHistory\"\n class=\"material-icons header-icon max-width-5\">history</span>\n <mat-menu #menuHistory=\"matMenu\" class=\"action-menu\">\n <ng-container *ngFor=\"let history of historyList\" [ngSwitch]=\"history.type\">\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PRODUCT'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">theaters</span>\n {{ 'COMMON.HEADER.HISTORY.PRODUCT' | commonTranslate : lang }}{{history.type}} {{history.ref}}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PO'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">receipt_long</span>\n {{ 'COMMON.HEADER.HISTORY.PO' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('commercial', '/deal/consult/' + history.id)\" *ngSwitchCase=\"'DEAL'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">local_offer</span>\n {{ 'COMMON.HEADER.HISTORY.DEAL' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('commercial', '/work-record/consult/'+ history.id +'/general')\" *ngSwitchCase=\"'WORK'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">assignment</span>\n {{ 'COMMON.HEADER.HISTORY.WORK_RECORD' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/acq/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">shop_two</span>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_ACQ' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/cess/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_CESS'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">receipt</span>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_CESS' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/auth/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_AUTH'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">account_circle</span>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_AUTH' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">payments</span>\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\n <span class=\"material-icons-outlined\">not_interested</span>\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\n </button>\n </ng-container>\n </mat-menu>\n\n <div class=\"global-search d-flex max-width-60\">\n <i class=\"material-icons global-search-icon header-icon\">search</i>\n <span class=\"global-search-separator\"></span>\n <mat-form-field class=\"max-width-100\" floatLabel=\"never\">\n <div class=\"d-flex\">\n <input [formControl]=\"formControlSearch\" [matAutocomplete]=\"autoSearch\"\n class=\"global-search-input max-width-85\"\n id=\"search-input\"\n matInput\n placeholder=\"search ...\"/>\n <button (click)=\"navigate(null, '/advanced-search')\"\n class=\"btn advanced-button\" mat-raised-button>\n <span class=\"material-icons icon\">flash_on</span>\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\n </button>\n\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"56vw\">\n <mat-option (onSelectionChange)=\"onSelectSearch($event, doc)\"\n *ngFor=\"let doc of documents$ | async\"\n class=\"mat-option-global-search\">\n <!--PURCHASE_ORDER-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PURCHASE_ORDER\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt_long</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PURCHASE_ORDER' | commonTranslate: lang }}</span>\n <span>{{ doc.poNumber }}\n - {{ doc.totalAmount | currency: doc.currencyCode:'symbol':undefined:'fr-FR'}}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.BASKET_NUMBER' | commonTranslate: lang }}</span>\n <span>{{ doc?.basketNumber ? doc.basketNumber : '-' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc?.ean ? doc.ean : '-' }}</span>\n </div>\n </div>\n </div>\n <!--PRODUCT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PRODUCT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">movie</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"ellipsis d-flex flex-column max-width-60\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.SUPPORT' | commonTranslate: lang }}</span>\n <span>{{doc.support[labelLang]}}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc.ean }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.RELEASE_DATE' | commonTranslate: lang }}</span>\n <span>{{ doc?.releaseDate ? doc.releaseDate : '-' }}</span>\n </div>\n </div>\n </div>\n <!--WORK-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_VERSION\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">theaters</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-75 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }} ({{doc.codeIso}})</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }}</span>\n <span>{{doc.miloCode}}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCTION_YEAR' | commonTranslate: lang }}</span>\n <span>{{ doc.yearOfProduction }}</span>\n </div>\n </div>\n </div>\n <!--DEAL-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.DEAL\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">local_offer</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }} - {{doc.thirdPartyClientName}} ({{doc.thirdPartyClientSap}})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{doc.calculatedAmount | currency: doc.currencyCode:'symbol'}}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.VALIDATION_DATE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.validationDate }}</span>\n </div>\n </div>\n </div>\n <!--WORK_RECORD-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_RECORD\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">assignment</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK_RECORD' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.id }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{doc.amount | currency: doc.currencyCode:'symbol'}}</span>\n </div>\n </div>\n </div>\n <!--INVOICE-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.number }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{doc.amount | currency: doc.currencyCode:'symbol'}}</span>\n </div>\n </div>\n </div>\n <!--THIRD_PARTY-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.THIRD_PARTY\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">person</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-85 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.THIRD_PARTY' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.companyOrPersonName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CODE' | commonTranslate: lang }}</span>\n <span>{{doc.code}}</span>\n </div>\n </div>\n </div>\n <!--CONTRACT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'cess'\" class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'acq'\" class=\"material-icons-outlined rapid-search-type-icon\">shop_two</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'auth'\" class=\"material-icons-outlined rapid-search-type-icon\">account_circle</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.lisaId }} </span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TYPE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.type[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.STATUS' | commonTranslate: lang\n }}</span>\n <span>{{ doc.status[labelLang] }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn !== 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.LICENSOR' | commonTranslate: lang\n }}</span>\n <span>{{ doc.licensor ? doc.licensor : '-' }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn === 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CUSTOMER' | commonTranslate: lang\n }}</span>\n <span>{{ doc.customer ? doc.customer : '-' }}</span>\n </div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n </div>\n\n </mat-form-field>\n\n </div>\n\n <span class=\"d-flex flex-column max-width-15\"></span>\n <div *ngIf=\"user && user.secondary\" class=\"connected-as d-flex justify-content-between align-items-center\">\n <span style=\"margin-right: 10px\">\n {{ 'COMMON.HEADER.CONNECTED_AS' | commonTranslate: lang }} {{user.login + ' - ' + user.firstName + ' ' + user.name }}\n </span>\n\n <button (click)=\"stopIdentityTheft()\" *ngIf=\"user.secondary\" color=\"warn\" mat-raised-button>\n {{ 'CORE.STOP' | commonTranslate: lang }}\n </button>\n </div>\n <span class=\"header-separator\"></span>\n\n <span [matMenuTriggerFor]=\"settings\" class=\"material-icons-outlined header-icon max-width-5\">settings</span>\n\n <!-- #enddocregion mat-menu-trigger-for -->\n <mat-menu #settings=\"matMenu\" class=\"action-menu\">\n <button (click)=\"switchTheme()\" mat-menu-item>\n <mat-icon class=\"menu-icon mat-icon\">toggle_on</mat-icon>\n <span>{{'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang}}</span>\n </button>\n <button (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\n <img src=\"assets/img/flag/en-flag.png\">\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}\n </button>\n <button (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\n <img src=\"assets/img/flag/fr-flag.png\">\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}\n </button>\n <button (click)='switchLang(\"de\")' *ngIf='lang !== \"de\" ' mat-menu-item>\n <img src=\"assets/img/flag/de-flag.png\">\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}\n </button>\n </mat-menu>\n</mat-toolbar>\n\n", styles: [".sc-header{height:64px;position:fixed;z-index:999}mat-toolbar{width:100%}.logo-unity{height:48px;width:48px}.header-icon{width:22px;height:20px}.global-search{height:40px;background:#eff3f6;padding:0;margin-left:30px;border-radius:8px}.global-search-icon{width:18px;height:18px;margin:10px 12px 10px 10px}.global-search-input{background:#eff3f6;border:none;margin-left:10px;font-size:14px!important}.global-search-input:focus{outline:none}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC;margin-top:6px}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{width:90px!important;min-width:90px!important;height:24px!important;background:#7c87ff;border:none;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;border-radius:4px;line-height:12px;color:#fff;margin:auto 5px auto auto;cursor:pointer;padding:0!important}.advanced-button .icon{font-size:12px;vertical-align:middle}.sc-header .header-icon{color:#009ef7;cursor:pointer;text-align:center}.header-separator{display:inline-block;height:25%;margin-top:6px}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-uat,#env-dev,#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}:host ::ng-deep .global-search .mat-form-field-appearance-legacy .mat-form-field-label{top:2.2em!important;margin-left:10px;font-family:Roboto;font-style:italic;font-weight:700;font-size:14px;line-height:14px}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}.center{text-align:center}.mr-10{margin-right:10px}.mr-20{margin-right:20px}.mr-30{margin-right:30px}.mb-2{margin-bottom:2px}.mat-menu-item img{height:12px!important;margin-right:13px;margin-bottom:-2px;margin-left:3px}.max-width-0{flex:1 1 0%;max-width:0%}.max-width-5{flex:1 1 5%;max-width:5%}.max-width-10{flex:1 1 10%;max-width:10%}.max-width-15{flex:1 1 15%;max-width:15%}.max-width-20{flex:1 1 20%;max-width:20%}.max-width-25{flex:1 1 25%;max-width:25%}.max-width-30{flex:1 1 30%;max-width:30%}.max-width-35{flex:1 1 35%;max-width:35%}.max-width-40{flex:1 1 40%;max-width:40%}.max-width-45{flex:1 1 45%;max-width:45%}.max-width-50{flex:1 1 50%;max-width:50%}.max-width-55{flex:1 1 55%;max-width:55%}.max-width-60{flex:1 1 60%;max-width:60%}.max-width-65{flex:1 1 65%;max-width:65%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-80{flex:1 1 80%;max-width:80%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-90{flex:1 1 90%;max-width:90%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}\n"], dependencies: [{ kind: "component", type: i13.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i14.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i15.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i16.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i17.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i18.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i18.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i18.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i18.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i19.NgxPermissionsDirective, selector: "[ngxPermissionsOnly],[ngxPermissionsExcept]", inputs: ["ngxPermissionsOnly", "ngxPermissionsOnlyThen", "ngxPermissionsOnlyElse", "ngxPermissionsExcept", "ngxPermissionsExceptElse", "ngxPermissionsExceptThen", "ngxPermissionsThen", "ngxPermissionsElse", "ngxPermissionsOnlyAuthorisedStrategy", "ngxPermissionsOnlyUnauthorisedStrategy", "ngxPermissionsExceptUnauthorisedStrategy", "ngxPermissionsExceptAuthorisedStrategy", "ngxPermissionsUnauthorisedStrategy", "ngxPermissionsAuthorisedStrategy"], outputs: ["permissionsAuthorized", "permissionsUnauthorized"] }, { kind: "directive", type: i20.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i20.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i20.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i21.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i22.MatLegacyMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i22.MatLegacyMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i22.MatLegacyMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i23.MatLegacyAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i23.MatLegacyAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "pipe", type: i18.AsyncPipe, name: "async" }, { kind: "pipe", type: i18.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i24.CommonTranslatePipe, name: "commonTranslate" }] }); }
191
+ }
192
+ __decorate([
193
+ Theme()
194
+ ], HeaderComponent.prototype, "theme", void 0);
195
+ __decorate([
196
+ User()
197
+ ], HeaderComponent.prototype, "user", void 0);
198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeaderComponent, decorators: [{
199
+ type: Component,
200
+ args: [{ selector: 'sc-header', template: "<mat-toolbar [ngClass]=\"{ 'light-header': theme !== 'dark' }\"\n class=\"sc-header d-flex align-items-center\">\n <span class=\"d-flex align-items-end\">\n <a\n [href]=\"env === 'prod' ? 'https://unity.studiocanal.com/dashboard' : (env === 'sbx' ? 'https://unity-sbx.cplus/dashboard' : 'https://unity-' + env + '.studiocanal.com/dashboard')\">\n <img class=\"logo-unity\" src=\"./assets/img/unity_logo_48x48.png\">\n </a>\n <span *ngIf=\"env != 'prod'\" [attr.id]=\"'env-' + env\" class=\"env\">{{env}}</span>\n </span>\n <span class=\"header-separator\"></span>\n <span [matMenuTriggerFor]=\"menu_global\" class=\"material-icons header-icon max-width-5\">apps</span>\n <mat-menu #menu_global=\"matMenu\" class=\"action-menu\">\n <!--DASHBOARD-->\n <button (click)=\"navigate(null, '/dashboard')\" mat-menu-item>\n <span class=\"material-icons-outlined\">apps</span>\n <span>{{ 'COMMON.HEADER.MENU.DASHBOARD' | commonTranslate: lang }}</span>\n </button>\n <!--COMMERCIAL-->\n <span *ngxPermissionsOnly=\"['COMMERCIAL']\">\n <button (click)=\"navigate('commercial', '/deal/search')\" mat-menu-item>\n <span class=\"material-icons-outlined\">local_offer</span>\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL' | commonTranslate: lang }}</span>\n </button>\n <button (click)=\"navigate('commercial', '/turnover/search')\"\n *ngxPermissionsOnly=\"['ACCOUNTANT', 'ADMINISTRATIVE_CONTROLLER']\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">request_quote</span>\n <span>{{ 'COMMON.HEADER.MENU.COMMERCIAL.FINANCE' | commonTranslate: lang }}</span>\n </button>\n </span>\n <!--USER-->\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\n <span class=\"material-icons-outlined\">manage_accounts</span>\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\n </button>\n <!--MY PREFERENCES-->\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\n <span class=\"material-icons-outlined\">settings</span>\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\n </button>\n <!--BATCH-->\n <button (click)=\"navigate('batch', '/jobs/referential')\" *ngxPermissionsOnly=\"['MODULE REF']\" mat-menu-item>\n <span class=\"material-icons-outlined\">autorenew</span>\n <span>{{ 'COMMON.HEADER.MENU.REFERENTIAL.BATCH' | commonTranslate: lang }}</span>\n </button>\n <!--TV DATA-->\n <button (click)=\"navigate('tvdata', '/infos-center')\" *ngxPermissionsOnly=\"['TVDATA']\" mat-menu-item>\n <span class=\"material-icons-outlined\">source</span>\n <span>{{ 'COMMON.HEADER.MENU.TV-DATA' | commonTranslate: lang }}</span>\n </button>\n <!--EXPENDITURE COMMITMENT-->\n <button (click)=\"navigate('expenditure-commitment', '/home/commands')\" *ngxPermissionsExcept=\"['UNIVERSAL_ROLE']\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">receipt_long</span>\n <span>{{ 'COMMON.HEADER.MENU.EXPENDITURE_COMMITMENT' | commonTranslate: lang }}</span>\n </button>\n <!--BI-->\n <button (click)=\"navigate('bi', '/simple-search/form')\" *ngxPermissionsOnly=\"['MODULE BI']\" mat-menu-item>\n <span class=\"material-icons-outlined\">travel_explore</span>\n <span>{{ 'COMMON.HEADER.MENU.BI.SEARCH' | commonTranslate: lang }}</span>\n </button>\n <!--LEGAL-->\n <button (click)=\"navigate('legal', '/contracts/menu/legals-det')\" *ngxPermissionsOnly=\"['LEGAL']\" mat-menu-item>\n <span class=\"material-icons-outlined\">gavel</span>\n <span>{{ 'COMMON.HEADER.MENU.LEGAL' | commonTranslate: lang }}</span>\n </button>\n <!--CALENDAR-->\n <button (click)=\"navigate('calendar', '')\" mat-menu-item>\n <span class=\"material-icons-outlined\">calendar_month</span>\n <span>{{ 'COMMON.HEADER.MENU.CALENDAR' | commonTranslate: lang }}</span>\n </button>\n </mat-menu>\n <span class=\"header-separator\"></span>\n <span [matMenuTriggerFor]=\"menu\" class=\"material-icons-outlined header-icon max-width-5\">add_box</span>\n <mat-menu #menu=\"matMenu\" class=\"action-menu\">\n <button (click)=\"navigate('video', '/product/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">theaters</span>\n {{ 'COMMON.HEADER.CREATION.PRODUCT' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">receipt_long</span>\n {{ 'COMMON.HEADER.CREATION.PO' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('commercial', '/deal/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">local_offer</span>\n {{ 'COMMON.HEADER.CREATION.DEAL' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('legal', '/createContract/acq')\" mat-menu-item>\n <span class=\"material-icons-outlined\">shop_two</span>\n {{ 'COMMON.HEADER.CREATION.CREATION_ACQ' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('legal', '/createContract/sales')\" mat-menu-item>\n <span class=\"material-icons-outlined\">article</span>\n {{ 'COMMON.HEADER.CREATION.CREATION_CESS' | commonTranslate: lang }}\n </button>\n\t <button (click)=\"navigate('legal', '/createContract/auth')\" mat-menu-item>\n <span class=\"material-icons-outlined\">account_circle</span>\n {{ 'COMMON.HEADER.CREATION.CREATION_AUTH' | commonTranslate: lang }}\n </button>\n <button (click)=\"navigate('pa', '/campaign/form')\" mat-menu-item>\n <span class=\"material-icons-outlined\">campaign</span>\n {{ 'COMMON.HEADER.CREATION.CAMPAIGN' | commonTranslate: lang }}\n </button>\n </mat-menu>\n <span class=\"header-separator\"></span>\n <span (click)=\"getHistory()\" [matMenuTriggerFor]=\"menuHistory\"\n class=\"material-icons header-icon max-width-5\">history</span>\n <mat-menu #menuHistory=\"matMenu\" class=\"action-menu\">\n <ng-container *ngFor=\"let history of historyList\" [ngSwitch]=\"history.type\">\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PRODUCT'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">theaters</span>\n {{ 'COMMON.HEADER.HISTORY.PRODUCT' | commonTranslate : lang }}{{history.type}} {{history.ref}}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PO'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">receipt_long</span>\n {{ 'COMMON.HEADER.HISTORY.PO' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('commercial', '/deal/consult/' + history.id)\" *ngSwitchCase=\"'DEAL'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">local_offer</span>\n {{ 'COMMON.HEADER.HISTORY.DEAL' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('commercial', '/work-record/consult/'+ history.id +'/general')\" *ngSwitchCase=\"'WORK'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">assignment</span>\n {{ 'COMMON.HEADER.HISTORY.WORK_RECORD' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/acq/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">shop_two</span>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_ACQ' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/cess/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_CESS'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">receipt</span>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_CESS' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/auth/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_AUTH'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">account_circle</span>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_AUTH' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\n mat-menu-item>\n <span class=\"material-icons-outlined\">payments</span>\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{history.ref}}\n </button>\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\n <span class=\"material-icons-outlined\">not_interested</span>\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\n </button>\n </ng-container>\n </mat-menu>\n\n <div class=\"global-search d-flex max-width-60\">\n <i class=\"material-icons global-search-icon header-icon\">search</i>\n <span class=\"global-search-separator\"></span>\n <mat-form-field class=\"max-width-100\" floatLabel=\"never\">\n <div class=\"d-flex\">\n <input [formControl]=\"formControlSearch\" [matAutocomplete]=\"autoSearch\"\n class=\"global-search-input max-width-85\"\n id=\"search-input\"\n matInput\n placeholder=\"search ...\"/>\n <button (click)=\"navigate(null, '/advanced-search')\"\n class=\"btn advanced-button\" mat-raised-button>\n <span class=\"material-icons icon\">flash_on</span>\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\n </button>\n\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"56vw\">\n <mat-option (onSelectionChange)=\"onSelectSearch($event, doc)\"\n *ngFor=\"let doc of documents$ | async\"\n class=\"mat-option-global-search\">\n <!--PURCHASE_ORDER-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PURCHASE_ORDER\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt_long</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PURCHASE_ORDER' | commonTranslate: lang }}</span>\n <span>{{ doc.poNumber }}\n - {{ doc.totalAmount | currency: doc.currencyCode:'symbol':undefined:'fr-FR'}}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.BASKET_NUMBER' | commonTranslate: lang }}</span>\n <span>{{ doc?.basketNumber ? doc.basketNumber : '-' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc?.ean ? doc.ean : '-' }}</span>\n </div>\n </div>\n </div>\n <!--PRODUCT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PRODUCT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">movie</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"ellipsis d-flex flex-column max-width-60\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.SUPPORT' | commonTranslate: lang }}</span>\n <span>{{doc.support[labelLang]}}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc.ean }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.RELEASE_DATE' | commonTranslate: lang }}</span>\n <span>{{ doc?.releaseDate ? doc.releaseDate : '-' }}</span>\n </div>\n </div>\n </div>\n <!--WORK-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_VERSION\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">theaters</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-75 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }} ({{doc.codeIso}})</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }}</span>\n <span>{{doc.miloCode}}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCTION_YEAR' | commonTranslate: lang }}</span>\n <span>{{ doc.yearOfProduction }}</span>\n </div>\n </div>\n </div>\n <!--DEAL-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.DEAL\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">local_offer</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }} - {{doc.thirdPartyClientName}} ({{doc.thirdPartyClientSap}})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{doc.calculatedAmount | currency: doc.currencyCode:'symbol'}}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.VALIDATION_DATE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.validationDate }}</span>\n </div>\n </div>\n </div>\n <!--WORK_RECORD-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_RECORD\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">assignment</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK_RECORD' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.id }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{doc.amount | currency: doc.currencyCode:'symbol'}}</span>\n </div>\n </div>\n </div>\n <!--INVOICE-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.number }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{doc.amount | currency: doc.currencyCode:'symbol'}}</span>\n </div>\n </div>\n </div>\n <!--THIRD_PARTY-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.THIRD_PARTY\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">person</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-85 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.THIRD_PARTY' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.companyOrPersonName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CODE' | commonTranslate: lang }}</span>\n <span>{{doc.code}}</span>\n </div>\n </div>\n </div>\n <!--CONTRACT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'cess'\" class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'acq'\" class=\"material-icons-outlined rapid-search-type-icon\">shop_two</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'auth'\" class=\"material-icons-outlined rapid-search-type-icon\">account_circle</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.lisaId }} </span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TYPE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.type[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.STATUS' | commonTranslate: lang\n }}</span>\n <span>{{ doc.status[labelLang] }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn !== 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.LICENSOR' | commonTranslate: lang\n }}</span>\n <span>{{ doc.licensor ? doc.licensor : '-' }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn === 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CUSTOMER' | commonTranslate: lang\n }}</span>\n <span>{{ doc.customer ? doc.customer : '-' }}</span>\n </div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n </div>\n\n </mat-form-field>\n\n </div>\n\n <span class=\"d-flex flex-column max-width-15\"></span>\n <div *ngIf=\"user && user.secondary\" class=\"connected-as d-flex justify-content-between align-items-center\">\n <span style=\"margin-right: 10px\">\n {{ 'COMMON.HEADER.CONNECTED_AS' | commonTranslate: lang }} {{user.login + ' - ' + user.firstName + ' ' + user.name }}\n </span>\n\n <button (click)=\"stopIdentityTheft()\" *ngIf=\"user.secondary\" color=\"warn\" mat-raised-button>\n {{ 'CORE.STOP' | commonTranslate: lang }}\n </button>\n </div>\n <span class=\"header-separator\"></span>\n\n <span [matMenuTriggerFor]=\"settings\" class=\"material-icons-outlined header-icon max-width-5\">settings</span>\n\n <!-- #enddocregion mat-menu-trigger-for -->\n <mat-menu #settings=\"matMenu\" class=\"action-menu\">\n <button (click)=\"switchTheme()\" mat-menu-item>\n <mat-icon class=\"menu-icon mat-icon\">toggle_on</mat-icon>\n <span>{{'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang}}</span>\n </button>\n <button (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\n <img src=\"assets/img/flag/en-flag.png\">\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}\n </button>\n <button (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\n <img src=\"assets/img/flag/fr-flag.png\">\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}\n </button>\n <button (click)='switchLang(\"de\")' *ngIf='lang !== \"de\" ' mat-menu-item>\n <img src=\"assets/img/flag/de-flag.png\">\n {{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}\n </button>\n </mat-menu>\n</mat-toolbar>\n\n", styles: [".sc-header{height:64px;position:fixed;z-index:999}mat-toolbar{width:100%}.logo-unity{height:48px;width:48px}.header-icon{width:22px;height:20px}.global-search{height:40px;background:#eff3f6;padding:0;margin-left:30px;border-radius:8px}.global-search-icon{width:18px;height:18px;margin:10px 12px 10px 10px}.global-search-input{background:#eff3f6;border:none;margin-left:10px;font-size:14px!important}.global-search-input:focus{outline:none}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC;margin-top:6px}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{width:90px!important;min-width:90px!important;height:24px!important;background:#7c87ff;border:none;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;border-radius:4px;line-height:12px;color:#fff;margin:auto 5px auto auto;cursor:pointer;padding:0!important}.advanced-button .icon{font-size:12px;vertical-align:middle}.sc-header .header-icon{color:#009ef7;cursor:pointer;text-align:center}.header-separator{display:inline-block;height:25%;margin-top:6px}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-uat,#env-dev,#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}:host ::ng-deep .global-search .mat-form-field-appearance-legacy .mat-form-field-label{top:2.2em!important;margin-left:10px;font-family:Roboto;font-style:italic;font-weight:700;font-size:14px;line-height:14px}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}.center{text-align:center}.mr-10{margin-right:10px}.mr-20{margin-right:20px}.mr-30{margin-right:30px}.mb-2{margin-bottom:2px}.mat-menu-item img{height:12px!important;margin-right:13px;margin-bottom:-2px;margin-left:3px}.max-width-0{flex:1 1 0%;max-width:0%}.max-width-5{flex:1 1 5%;max-width:5%}.max-width-10{flex:1 1 10%;max-width:10%}.max-width-15{flex:1 1 15%;max-width:15%}.max-width-20{flex:1 1 20%;max-width:20%}.max-width-25{flex:1 1 25%;max-width:25%}.max-width-30{flex:1 1 30%;max-width:30%}.max-width-35{flex:1 1 35%;max-width:35%}.max-width-40{flex:1 1 40%;max-width:40%}.max-width-45{flex:1 1 45%;max-width:45%}.max-width-50{flex:1 1 50%;max-width:50%}.max-width-55{flex:1 1 55%;max-width:55%}.max-width-60{flex:1 1 60%;max-width:60%}.max-width-65{flex:1 1 65%;max-width:65%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-80{flex:1 1 80%;max-width:80%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-90{flex:1 1 90%;max-width:90%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}\n"] }]
201
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.LocalStorageEventsService }, { type: i3.LocalStorageService }, { type: i4.ToasterEventsService }, { type: i5.TranslateService }, { type: i6.CommonApiService }, { type: i7.SessionStorageService }, { type: i8.PermissionsService }, { type: i9.OverlayContainer }, { type: i10.CookieService }, { type: i11.LangService }, { type: i12.ElasticsearchService }, { type: undefined, decorators: [{
202
+ type: Inject,
203
+ args: [WEB_CONFIG]
204
+ }] }]; }, propDecorators: { theme: [], user: [], toogleMenuEvent: [{
205
+ type: Output
206
+ }], onWindowScroll: [{
207
+ type: HostListener,
208
+ args: ['window:scroll', []]
209
+ }] } });
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldy1mcm9udC1jb21tb24tbGlicmFyeS9zcmMvbGliL3V0aWwvY29tcG9uZW50L2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV3LWZyb250LWNvbW1vbi1saWJyYXJ5L3NyYy9saWIvdXRpbC9jb21wb25lbnQvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNNUYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQVFyRCxPQUFPLEVBQVMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBS2hELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFBO0FBQzNFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNwQyxNQUFNLE9BQU8sZUFBZTtJQXlCMUIsWUFDVSxNQUFjLEVBQ2Qsa0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLGNBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLGdCQUFrQyxFQUNsQyxxQkFBNEMsRUFDNUMsa0JBQXNDLEVBQ3RDLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixXQUF3QixFQUN4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K0JBQ0UsV0FBVzs7MEJBMENsQixNQUFNOzJCQUFDLFVBQVU7NENBckNKLEtBQUssTUFDTixJQUFJLE1BRVQsZUFBZTtzQkFBeEIsTUFBTTtnQkFxRUEsY0FBYztzQkFEcEIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Q29va2llU2VydmljZX0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge092ZXJsYXlDb250YWluZXJ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7UGVybWlzc2lvbnNJbnRlcmZhY2V9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL3Blcm1pc3Npb25zLmludGVyZmFjZVwiO1xuaW1wb3J0IHtUaGVtZX0gZnJvbSBcIi4uLy4uL2RlY29yYXRvcnMvdGhlbWUuZGVjb3JhdG9yXCI7XG5pbXBvcnQge1VzZXJ9IGZyb20gXCIuLi8uLi9kZWNvcmF0b3JzL3VzZXIuZGVjb3JhdG9yXCI7XG5pbXBvcnQge0F1dGhVc2VyTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHNcIjtcbmltcG9ydCB7TG9jYWxTdG9yYWdlRXZlbnRzU2VydmljZX0gZnJvbSBcIi4uLy4uL2V2ZW50L3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS1ldmVudHMuc2VydmljZVwiO1xuaW1wb3J0IHtMb2NhbFN0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RvcmFnZS9sb2NhbC1zdG9yYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7VG9hc3RlckV2ZW50c1NlcnZpY2V9IGZyb20gXCIuLi8uLi90b2FzdGVyL3RvYXN0ZXItZXZlbnRzLnNlcnZpY2VcIjtcbmltcG9ydCB7Q29tbW9uQXBpU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2FwaS9jb21tb24tYXBpLnNlcnZpY2VcIjtcbmltcG9ydCB7U2Vzc2lvblN0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RvcmFnZS9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHtQZXJtaXNzaW9uc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlXCI7XG5pbXBvcnQge0NvbmZpZywgV0VCX0NPTkZJR30gZnJvbSBcIi4uLy4uL2NvbmZpZ1wiO1xuaW1wb3J0IHtMYW5nU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS1sYW5ndWFnZS9sYW5nLnNlcnZpY2VcIjtcbmltcG9ydCB7RWxhc3RpY3NlYXJjaFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9lbGFzdGljc2VhcmNoL2VsYXN0aWNzZWFyY2guc2VydmljZVwiO1xuaW1wb3J0IHtQdXJjaGFzZU9yZGVyUmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9leHBlbmRpdHVyZS1jb21taXRtZW50L3B1cmNoYXNlLW9yZGVyLXJhcGlkLXNlYXJjaC5tb2RlbFwiO1xuaW1wb3J0IHtQcm9kdWN0UmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy92aWRlby9wcm9kdWN0LXJhcGlkLXNlYXJjaC5tb2RlbFwiO1xuaW1wb3J0IHtSYXBpZFNlYXJjaEl0ZW1UeXBlfSBmcm9tIFwiLi4vLi4vZW51bXMvcmFwaWQtc2VhcmNoLWl0ZW0tdHlwZS5lbnVtXCJcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7V29ya1ZlcnNpb25SYXBpZFNlYXJjaE1vZGVsfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3JlZmVyZW50aWFsL3dvcmstdmVyc2lvbi1yYXBpZC1zZWFyY2gubW9kZWxcIjtcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBtYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge01hdExlZ2FjeU9wdGlvblNlbGVjdGlvbkNoYW5nZSBhcyBNYXRPcHRpb25TZWxlY3Rpb25DaGFuZ2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1jb3JlJztcbmltcG9ydCB7RGVhbFJhcGlkU2VhcmNoTW9kZWx9IGZyb20gJy4uLy4uL21vZGVscy9jb21tZXJjaWFsL2RlYWwtcmFwaWQtc2VhcmNoLW1vZGVsJztcbmltcG9ydCB7VGhpcmRQYXJ0eVJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvcmVmZXJlbnRpYWwvdGhpcmQtcGFydHktcmFwaWQtc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQge1dvcmtSZWNvcmRSYXBpZFNlYXJjaE1vZGVsfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbW1lcmNpYWwvd29yay1yZWNvcmQtcmFwaWQtc2VhcmNoLW1vZGVsXCI7XG5pbXBvcnQge0NvbnRyYWN0UmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9sZWdhbC9jb250cmFjdC1yYXBpZC1zZWFyY2gtbW9kZWxcIjtcbmltcG9ydCB7SW52b2ljZVJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29tbWVyY2lhbC9pbnZvaWNlLXJhcGlkLXNlYXJjaC1tb2RlbFwiO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NjLWhlYWRlcicsXG4gIHN0eWxlVXJsczogWycuL2hlYWRlci5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVhZGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIFBlcm1pc3Npb25zSW50ZXJmYWNlIHtcbiAgQFRoZW1lKCkgcHVibGljIHRoZW1lOiBzdHJpbmc7XG4gIEBVc2VyKCkgcHVibGljIHVzZXI6IEF1dGhVc2VyTW9kZWw7XG5cbiAgQE91dHB1dCgpIHRvb2dsZU1lbnVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgbGFuZzogc3RyaW5nO1xuICBwdWJsaWMgbGFiZWxMYW5nID0gJ2xhYmVsRnInO1xuICBwdWJsaWMgaXNIaWRlID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50U2Nyb2xsID0gMDtcbiAgcHVibGljIGVudjogc3RyaW5nO1xuICBwdWJsaWMgaGlzdG9yeUxpc3QgPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlVcmw6IHN0cmluZztcblxuICBwdWJsaWMgUmFwaWRTZWFyY2hJdGVtVHlwZSA9IFJhcGlkU2VhcmNoSXRlbVR5cGU7XG4gIHB1YmxpYyBmb3JtQ29udHJvbFNlYXJjaDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbiAgcHVibGljIGRvY3VtZW50cyQ6IE9ic2VydmFibGU8KFB1cmNoYXNlT3JkZXJSYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBQcm9kdWN0UmFwaWRTZWFyY2hNb2RlbFxuICAgIHwgV29ya1ZlcnNpb25SYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBEZWFsUmFwaWRTZWFyY2hNb2RlbFxuICAgIHwgV29ya1JlY29yZFJhcGlkU2VhcmNoTW9kZWxcbiAgICB8IFRoaXJkUGFydHlSYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBDb250cmFjdFJhcGlkU2VhcmNoTW9kZWxcbiAgICB8IEludm9pY2VSYXBpZFNlYXJjaE1vZGVsKVtdPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlRXZlbnRzOiBMb2NhbFN0b3JhZ2VFdmVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJFdmVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbW9uQXBpU2VydmljZTogQ29tbW9uQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBvdmVybGF5Q29udGFpbmVyOiBPdmVybGF5Q29udGFpbmVyLFxuICAgIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcbiAgICBwcml2YXRlIGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSxcbiAgICBwcml2YXRlIGVsYXN0aWNzZWFyY2hTZXJ2aWNlOiBFbGFzdGljc2VhcmNoU2VydmljZSxcbiAgICBASW5qZWN0KFdFQl9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBDb25maWdcbiAgKSB7XG4gICAgdGhpcy5hcGlVcmwgPSB0aGlzLmNvbmZpZy5hcGlfdXJsO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybUNvbnRyb2xTZWFyY2ggPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPihudWxsKTtcblxuICAgIHRoaXMuaW5pdFBlcm1pc3Npb25zU2VydmljZSgpO1xuICAgIHRoaXMubGFuZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldCgnbGFuZycpIHx8ICdmcic7XG4gICAgdGhpcy51cGRhdGVMYWJlbExhbmcodGhpcy5sYW5nKTtcbiAgICB0aGlzLmVudiA9IHRoaXMuY29uZmlnLmVudi50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMubG9jYWxTdG9yYWdlRXZlbnRzLmxvY2FsU3RvcmFnZUV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmxhbmcgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXQoJ2xhbmcnKTtcbiAgICAgIHRoaXMudXBkYXRlTGFiZWxMYW5nKHRoaXMubGFuZyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRvY3VtZW50cyQgPSB0aGlzLmZvcm1Db250cm9sU2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICBzd2l0Y2hNYXAodGVybSA9PiB7XG4gICAgICAgIGlmICghdGVybSkge1xuICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZWxhc3RpY3NlYXJjaFNlcnZpY2VcbiAgICAgICAgICAuZ2V0U2VhcmNoUmVzcG9uc2UodGVybSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcChzZWFyY2hSZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmVsYXN0aWNzZWFyY2hTZXJ2aWNlLmdldERvY3VtZW50cyhzZWFyY2hSZXNwb25zZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgW10pXG4gIHB1YmxpYyBvbldpbmRvd1Njcm9sbCgpIHtcbiAgICBjb25zdCBudW1iZXJWYXIgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIGlmIChudW1iZXJWYXIgPiB0aGlzLmN1cnJlbnRTY3JvbGwpIHtcbiAgICAgIHRoaXMuaXNIaWRlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG51bWJlclZhciA8IHRoaXMuY3VycmVudFNjcm9sbCkge1xuICAgICAgdGhpcy5pc0hpZGUgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50U2Nyb2xsID0gbnVtYmVyVmFyO1xuICB9XG5cblxuICBwdWJsaWMgaW5pdFBlcm1pc3Npb25zU2VydmljZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5pbml0KCk7XG4gIH1cblxuICBwdWJsaWMgc3dpdGNoVGhlbWUoKSB7XG4gICAgaWYgKHRoaXMudGhlbWUgPT09ICdkYXJrJykge1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UucG9zdCgnbmV3VGhlbWUnLCAnbGlnaHQnKTtcbiAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lclxuICAgICAgICAuZ2V0Q29udGFpbmVyRWxlbWVudCgpXG4gICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKCdkYXJrLXRoZW1lJyk7XG4gICAgICB0aGlzLm92ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmNsYXNzTGlzdC5hZGQoJ2xpZ2h0LXRoZW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnBvc3QoJ25ld1RoZW1lJywgJ2RhcmsnKTtcbiAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lclxuICAgICAgICAuZ2V0Q29udGFpbmVyRWxlbWVudCgpXG4gICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKCdsaWdodC10aGVtZScpO1xuICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKCdkYXJrLXRoZW1lJyk7XG4gICAgfVxuICB9XG5cbiAgc3RvcElkZW50aXR5VGhlZnQoKSB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnYXV0aFRva2VuU2Vjb25kYXJ5Jyk7XG4gIH1cblxuICBwdWJsaWMgbmF2aWdhdGUobW9kdWxlID0gJycsIHJvdXRlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXJvdXRlLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcm91dGUgPSAnLycgKyByb3V0ZTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5hcGlfdXJsICsgKG1vZHVsZSA/IGAvJHttb2R1bGV9YCA6ICcnKSArIHJvdXRlO1xuXG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZiA9PT0gdXJsKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoYC8ke21vZHVsZX1gKSkge1xuICAgICAgICAgIHRoaXMucm91dGVyXG4gICAgICAgICAgICAubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGVdKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICAgICAgfVxuICAgIH1cblxuICBwdWJsaWMgZ2V0SGlzdG9yeSgpIHtcbiAgICB0aGlzLmhpc3RvcnlMaXN0ID0gW107XG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlLmV4aXN0KCdoaXN0b3J5JykpIHtcbiAgICAgIHRoaXMuaGlzdG9yeUxpc3QgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXQoJ2hpc3RvcnknKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaXN0b3J5TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaGlzdG9yeUxpc3QucHVzaCh7dHlwZTogJ05PX0hJU1RPUllfQVZBSUxBQkxFJywgaWQ6IG51bGwsIHJlZjogbnVsbH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzd2l0Y2hMYW5nKGxhbmcpIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5wb3N0KCdsYW5nJywgbGFuZyk7XG4gICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xuICAgIHRoaXMubGFuZ1NlcnZpY2Uuc3dpdGNoTGFuZygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbExhbmcobGFuZzogc3RyaW5nKSB7XG4gICAgaWYgKCdlbicgPT09IGxhbmcpIHtcbiAgICAgIHRoaXMubGFiZWxMYW5nID0gJ2xhYmVsRW4nO1xuICAgIH0gZWxzZSBpZiAoJ2RlJyA9PT0gbGFuZykge1xuICAgICAgdGhpcy5sYWJlbExhbmcgPSAnbGFiZWxEZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFiZWxMYW5nID0gJ2xhYmVsRnInO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250cmFjdFR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAnU2FsZScgPyAnY2VzcycgOiB0eXBlID09PSdBY3F1aXNpdGlvbicgPyAnYWNxJyA6ICdhdXRoJztcbiAgfVxuXG4gIG9uU2VsZWN0U2VhcmNoKCRldmVudDogTWF0T3B0aW9uU2VsZWN0aW9uQ2hhbmdlLCBkb2M6IGFueSkge1xuICAgIHN3aXRjaCAoZG9jLmRvY1R5cGUpIHtcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5QVVJDSEFTRV9PUkRFUjpcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvcHVyY2hhc2Utb3JkZXJzLycgKyBkb2MucG9JZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlBST0RVQ1Q6XG4gICAgICAgIHRoaXMubmF2aWdhdGUoJ3ZpZGVvJywgJy9wcm9kdWN0L2NvbnN1bHQvJyArIGRvYy5wcm9kdWN0SWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5XT1JLX1ZFUlNJT046XG4gICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy93b3JrLXN1bW1hcnkvJyArIGRvYy5pZCArICcvaW5mbycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5ERUFMOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvY29tbWVyY2lhbC9kZWFsL2NvbnN1bHQvJyArIGRvYy5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlRISVJEX1BBUlRZOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvcmVmZXJlbnRpYWwvdGhpcmQtcGFydHkvJyArIGRvYy5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLldPUktfUkVDT1JEOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvY29tbWVyY2lhbC93b3JrLXJlY29yZC9jb25zdWx0LycgKyBkb2MuaWQgKyAnL2dlbmVyYWwnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLkNPTlRSQUNUOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvbGVnYWwvY29udHJhY3RzLWRldGFpbHMvJyArIHRoaXMuZ2V0Q29udHJhY3RUeXBlKGRvYy50eXBlLmxhYmVsRW4pICsgJy8nKyBkb2MuY29udHJhY3RJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLklOVk9JQ0U6XG4gICAgICAgIGlmIChkb2MucmlnaHQpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvY29tbWVyY2lhbC9pbnZvaWNlL3JpZ2h0LXBheW1lbnQtY29uc3VsdD9pZEVjaGVhbmNlPScgKyBkb2MuaW52b2ljZUlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvY29tbWVyY2lhbC9pbnZvaWNlL21hdGVyaWFsLXBheW1lbnQtY29uc3VsdD9pZEVjaGVhbmNlPScgKyBkb2MuaW52b2ljZUlkKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cbiIsIjxtYXQtdG9vbGJhciBbbmdDbGFzc109XCJ7ICdsaWdodC1oZWFkZXInOiB0aGVtZSAhPT0gJ2RhcmsnIH1cIlxuICAgICAgICAgICAgIGNsYXNzPVwic2MtaGVhZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kXCI+XG4gICAgPGFcbiAgICAgIFtocmVmXT1cImVudiA9PT0gJ3Byb2QnID8gJ2h0dHBzOi8vdW5pdHkuc3R1ZGlvY2FuYWwuY29tL2Rhc2hib2FyZCcgOiAoZW52ID09PSAnc2J4JyA/ICdodHRwczovL3VuaXR5LXNieC5jcGx1cy9kYXNoYm9hcmQnIDogJ2h0dHBzOi8vdW5pdHktJyArIGVudiArICcuc3R1ZGlvY2FuYWwuY29tL2Rhc2hib2FyZCcpXCI+XG4gICAgICA8aW1nIGNsYXNzPVwibG9nby11bml0eVwiIHNyYz1cIi4vYXNzZXRzL2ltZy91bml0eV9sb2dvXzQ4eDQ4LnBuZ1wiPlxuICAgIDwvYT5cbiAgICA8c3BhbiAqbmdJZj1cImVudiAhPSAncHJvZCdcIiBbYXR0ci5pZF09XCInZW52LScgKyBlbnZcIiBjbGFzcz1cImVudlwiPnt7ZW52fX08L3NwYW4+XG4gIDwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2VwYXJhdG9yXCI+PC9zcGFuPlxuICA8c3BhbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudV9nbG9iYWxcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGhlYWRlci1pY29uIG1heC13aWR0aC01XCI+YXBwczwvc3Bhbj5cbiAgPG1hdC1tZW51ICNtZW51X2dsb2JhbD1cIm1hdE1lbnVcIiBjbGFzcz1cImFjdGlvbi1tZW51XCI+XG4gICAgPCEtLURBU0hCT0FSRC0tPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKG51bGwsICcvZGFzaGJvYXJkJylcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmFwcHM8L3NwYW4+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkRBU0hCT0FSRCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPCEtLUNPTU1FUkNJQUwtLT5cbiAgICA8c3BhbiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydDT01NRVJDSUFMJ11cIj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdjb21tZXJjaWFsJywgJy9kZWFsL3NlYXJjaCcpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmxvY2FsX29mZmVyPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkNPTU1FUkNJQUwnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvdHVybm92ZXIvc2VhcmNoJylcIlxuICAgICAgICAgICAgICAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydBQ0NPVU5UQU5UJywgJ0FETUlOSVNUUkFUSVZFX0NPTlRST0xMRVInXVwiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5yZXF1ZXN0X3F1b3RlPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkNPTU1FUkNJQUwuRklOQU5DRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NwYW4+XG4gICAgPCEtLVVTRVItLT5cbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgndXNlcicsICcvYWNjb3VudC9hdXRob3JpemF0aW9uL3NlYXJjaCcpXCIgKm5nSWY9XCJ1c2VyICYmIHVzZXIuYWRtaW5cIiBtYXQtbWVudS1pdGVtPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPm1hbmFnZV9hY2NvdW50czwvc3Bhbj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuVVNFUi5TRUNUSU9OX1RJVExFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8IS0tTVkgUFJFRkVSRU5DRVMtLT5cbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgndXNlcicsICcvYWNjb3VudC9zZXR0aW5ncycpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5zZXR0aW5nczwvc3Bhbj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuVVNFUi5TRVRUSU5HUycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPCEtLUJBVENILS0+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2JhdGNoJywgJy9qb2JzL3JlZmVyZW50aWFsJylcIiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydNT0RVTEUgUkVGJ11cIiBtYXQtbWVudS1pdGVtPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmF1dG9yZW5ldzwvc3Bhbj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuUkVGRVJFTlRJQUwuQkFUQ0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS1UViBEQVRBLS0+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ3R2ZGF0YScsICcvaW5mb3MtY2VudGVyJylcIiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydUVkRBVEEnXVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+c291cmNlPC9zcGFuPlxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5UVi1EQVRBJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8IS0tRVhQRU5ESVRVUkUgQ09NTUlUTUVOVC0tPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdleHBlbmRpdHVyZS1jb21taXRtZW50JywgJy9ob21lL2NvbW1hbmRzJylcIiAqbmd4UGVybWlzc2lvbnNFeGNlcHQ9XCJbJ1VOSVZFUlNBTF9ST0xFJ11cIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5yZWNlaXB0X2xvbmc8L3NwYW4+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkVYUEVORElUVVJFX0NPTU1JVE1FTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS1CSS0tPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdiaScsICcvc2ltcGxlLXNlYXJjaC9mb3JtJylcIiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydNT0RVTEUgQkknXVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+dHJhdmVsX2V4cGxvcmU8L3NwYW4+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkJJLlNFQVJDSCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPCEtLUxFR0FMLS0+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMvbWVudS9sZWdhbHMtZGV0JylcIiAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWydMRUdBTCddXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5nYXZlbDwvc3Bhbj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLk1FTlUuTEVHQUwnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS1DQUxFTkRBUi0tPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdjYWxlbmRhcicsICcnKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+Y2FsZW5kYXJfbW9udGg8L3NwYW4+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5NRU5VLkNBTEVOREFSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtbWVudT5cbiAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2VwYXJhdG9yXCI+PC9zcGFuPlxuICA8c3BhbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgaGVhZGVyLWljb24gbWF4LXdpZHRoLTVcIj5hZGRfYm94PC9zcGFuPlxuICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJhY3Rpb24tbWVudVwiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCd2aWRlbycsICcvcHJvZHVjdC9mb3JtJylcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnRoZWF0ZXJzPC9zcGFuPlxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ1JFQVRJT04uUFJPRFVDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvcHVyY2hhc2Utb3JkZXJzL2Zvcm0nKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+cmVjZWlwdF9sb25nPC9zcGFuPlxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ1JFQVRJT04uUE8nIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL2RlYWwvZm9ybScpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5sb2NhbF9vZmZlcjwvc3Bhbj5cbiAgICAgIHt7ICdDT01NT04uSEVBREVSLkNSRUFUSU9OLkRFQUwnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jcmVhdGVDb250cmFjdC9hY3EnKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+c2hvcF90d288L3NwYW4+XG4gICAgICB7eyAnQ09NTU9OLkhFQURFUi5DUkVBVElPTi5DUkVBVElPTl9BQ1EnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jcmVhdGVDb250cmFjdC9zYWxlcycpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5hcnRpY2xlPC9zcGFuPlxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ1JFQVRJT04uQ1JFQVRJT05fQ0VTUycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICA8L2J1dHRvbj5cblx0ICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnbGVnYWwnLCAnL2NyZWF0ZUNvbnRyYWN0L2F1dGgnKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+YWNjb3VudF9jaXJjbGU8L3NwYW4+XG4gICAgICB7eyAnQ09NTU9OLkhFQURFUi5DUkVBVElPTi5DUkVBVElPTl9BVVRIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdwYScsICcvY2FtcGFpZ24vZm9ybScpXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5jYW1wYWlnbjwvc3Bhbj5cbiAgICAgIHt7ICdDT01NT04uSEVBREVSLkNSRUFUSU9OLkNBTVBBSUdOJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1tZW51PlxuICA8c3BhbiBjbGFzcz1cImhlYWRlci1zZXBhcmF0b3JcIj48L3NwYW4+XG4gIDxzcGFuIChjbGljayk9XCJnZXRIaXN0b3J5KClcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudUhpc3RvcnlcIlxuICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGhlYWRlci1pY29uIG1heC13aWR0aC01XCI+aGlzdG9yeTwvc3Bhbj5cbiAgPG1hdC1tZW51ICNtZW51SGlzdG9yeT1cIm1hdE1lbnVcIiBjbGFzcz1cImFjdGlvbi1tZW51XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGlzdG9yeSBvZiBoaXN0b3J5TGlzdFwiIFtuZ1N3aXRjaF09XCJoaXN0b3J5LnR5cGVcIj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdleHBlbmRpdHVyZS1jb21taXRtZW50JywgJy9wdXJjaGFzZS1vcmRlcnMvJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidQUk9EVUNUJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj50aGVhdGVyczwvc3Bhbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5QUk9EVUNUJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX17e2hpc3RvcnkudHlwZX19IHt7aGlzdG9yeS5yZWZ9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvcHVyY2hhc2Utb3JkZXJzLycgKyBoaXN0b3J5LmlkKVwiICpuZ1N3aXRjaENhc2U9XCInUE8nXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnJlY2VpcHRfbG9uZzwvc3Bhbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5QTycgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nICB9fSB7e2hpc3RvcnkucmVmfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL2RlYWwvY29uc3VsdC8nICsgaGlzdG9yeS5pZClcIiAqbmdTd2l0Y2hDYXNlPVwiJ0RFQUwnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmxvY2FsX29mZmVyPC9zcGFuPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkRFQUwnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyAgfX0ge3toaXN0b3J5LnJlZn19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdjb21tZXJjaWFsJywgJy93b3JrLXJlY29yZC9jb25zdWx0LycrIGhpc3RvcnkuaWQgKycvZ2VuZXJhbCcpXCIgKm5nU3dpdGNoQ2FzZT1cIidXT1JLJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5hc3NpZ25tZW50PC9zcGFuPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLldPUktfUkVDT1JEJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3toaXN0b3J5LnJlZn19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdsZWdhbCcsICcvY29udHJhY3RzLWRldGFpbHMvYWNxLycgKyBoaXN0b3J5LmlkKVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQ09OVFJBQ1RfQUNRJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5zaG9wX3R3bzwvc3Bhbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5DT05UUkFDVF9BQ1EnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyAgfX0ge3toaXN0b3J5LnJlZn19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdsZWdhbCcsICcvY29udHJhY3RzLWRldGFpbHMvY2Vzcy8nICsgaGlzdG9yeS5pZClcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0NPTlRSQUNUX0NFU1MnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnJlY2VpcHQ8L3NwYW4+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuQ09OVFJBQ1RfQ0VTUycgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nICB9fSB7e2hpc3RvcnkucmVmfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMtZGV0YWlscy9hdXRoLycgKyBoaXN0b3J5LmlkKVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQ09OVFJBQ1RfQVVUSCdcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+YWNjb3VudF9jaXJjbGU8L3NwYW4+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuQ09OVFJBQ1RfQVVUSCcgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nICB9fSB7e2hpc3RvcnkucmVmfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQnLCAnL2J1ZGdldC9mb3JtLycgKyBoaXN0b3J5LmlkKVwiICpuZ1N3aXRjaENhc2U9XCInQlVER0VUJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5wYXltZW50czwvc3Bhbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5CVURHRVQnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyAgfX0ge3toaXN0b3J5LnJlZn19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKm5nU3dpdGNoQ2FzZT1cIidOT19ISVNUT1JZX0FWQUlMQUJMRSdcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+bm90X2ludGVyZXN0ZWQ8L3NwYW4+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuTk9fSElTVE9SWV9BVkFJTEFCTEUnIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyAgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L21hdC1tZW51PlxuXG4gIDxkaXYgY2xhc3M9XCJnbG9iYWwtc2VhcmNoIGQtZmxleCBtYXgtd2lkdGgtNjBcIj5cbiAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGdsb2JhbC1zZWFyY2gtaWNvbiBoZWFkZXItaWNvblwiPnNlYXJjaDwvaT5cbiAgICA8c3BhbiBjbGFzcz1cImdsb2JhbC1zZWFyY2gtc2VwYXJhdG9yXCI+PC9zcGFuPlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1heC13aWR0aC0xMDBcIiBmbG9hdExhYmVsPVwibmV2ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFNlYXJjaFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1NlYXJjaFwiXG4gICAgICAgICAgICAgICBjbGFzcz1cImdsb2JhbC1zZWFyY2gtaW5wdXQgbWF4LXdpZHRoLTg1XCJcbiAgICAgICAgICAgICAgIGlkPVwic2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInNlYXJjaCAuLi5cIi8+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKG51bGwsICcvYWR2YW5jZWQtc2VhcmNoJylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGFkdmFuY2VkLWJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaWNvblwiPmZsYXNoX29uPC9zcGFuPlxuICAgICAgICAgIHt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guQURWQU5DRUQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvU2VhcmNoPVwibWF0QXV0b2NvbXBsZXRlXCIgY2xhc3M9XCJtYXQtYXV0b2NvbXBsZXRlLWdsb2JhbC1zZWFyY2hcIiBwYW5lbFdpZHRoPVwiNTZ2d1wiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIChvblNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQsIGRvYylcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkb2Mgb2YgZG9jdW1lbnRzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1vcHRpb24tZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICAgICAgPCEtLVBVUkNIQVNFX09SREVSLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuUFVSQ0hBU0VfT1JERVJcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+cmVjZWlwdF9sb25nPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC03MFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlBVUkNIQVNFX09SREVSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5wb051bWJlciB9fVxuICAgICAgICAgICAgICAgICAgICAtIHt7IGRvYy50b3RhbEFtb3VudCB8IGN1cnJlbmN5OiBkb2MuY3VycmVuY3lDb2RlOidzeW1ib2wnOnVuZGVmaW5lZDonZnItRlInfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5CQVNLRVRfTlVNQkVSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYz8uYmFza2V0TnVtYmVyID8gZG9jLmJhc2tldE51bWJlciA6ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkVBTicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2M/LmVhbiA/IGRvYy5lYW4gOiAnLScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tUFJPRFVDVC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlBST0RVQ1RcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+bW92aWU8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGxpcHNpcyBkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTYwXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFJPRFVDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uU1VQUE9SVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57e2RvYy5zdXBwb3J0W2xhYmVsTGFuZ119fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkVBTicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MuZWFuIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUkVMRUFTRV9EQVRFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYz8ucmVsZWFzZURhdGUgPyBkb2MucmVsZWFzZURhdGUgOiAnLScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tV09SSy0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLldPUktfVkVSU0lPTlwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj50aGVhdGVyczwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNzUgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5XT1JLJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MudGl0bGUgfX0gKHt7ZG9jLmNvZGVJc299fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5NSUxPX0NPREUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkb2MubWlsb0NvZGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlBST0RVQ1RJT05fWUVBUicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MueWVhck9mUHJvZHVjdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS1ERUFMLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuREVBTFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5sb2NhbF9vZmZlcjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNzAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuZGVhbE51bWJlciB9fSAtIHt7ZG9jLnRoaXJkUGFydHlDbGllbnROYW1lfX0gKHt7ZG9jLnRoaXJkUGFydHlDbGllbnRTYXB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5BTU9VTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkb2MuY2FsY3VsYXRlZEFtb3VudCB8IGN1cnJlbmN5OiBkb2MuY3VycmVuY3lDb2RlOidzeW1ib2wnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5WQUxJREFUSU9OX0RBVEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLnZhbGlkYXRpb25EYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLVdPUktfUkVDT1JELS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuV09SS19SRUNPUkRcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+YXNzaWdubWVudDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5XT1JLX1JFQ09SRCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmlkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uREVBTCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmRlYWxOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DTElFTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy50aGlyZFBhcnR5Q2xpZW50TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0zNVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5USVRMRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICAgICAgICAgICAgICAgICAgKHt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5NSUxPX0NPREUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19KVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5nZXRUaXRsZShsYW5nKSB9fSAoe3sgZG9jLm1pbG9Db2RlIH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkFNT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57e2RvYy5hbW91bnQgfCBjdXJyZW5jeTogZG9jLmN1cnJlbmN5Q29kZTonc3ltYm9sJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLUlOVk9JQ0UtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5JTlZPSUNFXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnJlY2VpcHQ8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1IGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uSU5WT0lDRScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLm51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNSBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkRFQUwnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5kZWFsTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTIwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ0xJRU5UJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MudGhpcmRQYXJ0eUNsaWVudE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uVElUTEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgICAgICAgICAgICAgICAgICh7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uTUlMT19DT0RFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fSlcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuZ2V0VGl0bGUobGFuZykgfX0gKHt7IGRvYy5taWxvQ29kZSB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5BTU9VTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkb2MuYW1vdW50IHwgY3VycmVuY3k6IGRvYy5jdXJyZW5jeUNvZGU6J3N5bWJvbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS1USElSRF9QQVJUWS0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlRISVJEX1BBUlRZXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnBlcnNvbjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtODUgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5USElSRF9QQVJUWScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmNvbXBhbnlPclBlcnNvbk5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DT0RFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZG9jLmNvZGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS1DT05UUkFDVC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLkNPTlRSQUNUXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q29udHJhY3RUeXBlKGRvYy50eXBlLmxhYmVsRW4pID09PSAnY2VzcydcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5yZWNlaXB0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q29udHJhY3RUeXBlKGRvYy50eXBlLmxhYmVsRW4pID09PSAnYWNxJ1wiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnNob3BfdHdvPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q29udHJhY3RUeXBlKGRvYy50eXBlLmxhYmVsRW4pID09PSAnYXV0aCdcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5hY2NvdW50X2NpcmNsZTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DT05UUkFDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmxpc2FJZCB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5UWVBFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZ1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy50eXBlW2xhYmVsTGFuZ10gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5TVEFUVVMnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLnN0YXR1c1tsYWJlbExhbmddIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MudHlwZS5sYWJlbEVuICE9PSAnU2FsZSdcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNDAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5MSUNFTlNPUicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MubGljZW5zb3IgPyBkb2MubGljZW5zb3IgOiAnLScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy50eXBlLmxhYmVsRW4gPT09ICdTYWxlJ1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC00MCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNVU1RPTUVSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZ1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5jdXN0b21lciA/IGRvYy5jdXN0b21lciA6ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8L2Rpdj5cblxuICA8c3BhbiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj48L3NwYW4+XG4gIDxkaXYgKm5nSWY9XCJ1c2VyICYmIHVzZXIuc2Vjb25kYXJ5XCIgY2xhc3M9XCJjb25uZWN0ZWQtYXMgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuQ09OTkVDVEVEX0FTJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fSAge3t1c2VyLmxvZ2luICsgJyAtICcgKyB1c2VyLmZpcnN0TmFtZSArICcgJyArIHVzZXIubmFtZSB9fVxuICAgICAgPC9zcGFuPlxuXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic3RvcElkZW50aXR5VGhlZnQoKVwiICpuZ0lmPVwidXNlci5zZWNvbmRhcnlcIiBjb2xvcj1cIndhcm5cIiBtYXQtcmFpc2VkLWJ1dHRvbj5cbiAgICAgIHt7ICdDT1JFLlNUT1AnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8c3BhbiBjbGFzcz1cImhlYWRlci1zZXBhcmF0b3JcIj48L3NwYW4+XG5cbiAgPHNwYW4gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInNldHRpbmdzXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCBoZWFkZXItaWNvbiBtYXgtd2lkdGgtNVwiPnNldHRpbmdzPC9zcGFuPlxuXG4gIDwhLS0gI2VuZGRvY3JlZ2lvbiBtYXQtbWVudS10cmlnZ2VyLWZvciAtLT5cbiAgPG1hdC1tZW51ICNzZXR0aW5ncz1cIm1hdE1lbnVcIiBjbGFzcz1cImFjdGlvbi1tZW51XCI+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic3dpdGNoVGhlbWUoKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJtZW51LWljb24gbWF0LWljb25cIj50b2dnbGVfb248L21hdC1pY29uPlxuICAgICAgPHNwYW4+e3snQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRIRU1FJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZ319PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKGNsaWNrKT0nc3dpdGNoTGFuZyhcImVuXCIpJyAqbmdJZj0nbGFuZyAhPT0gXCJlblwiJyBtYXQtbWVudS1pdGVtPlxuICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1nL2ZsYWcvZW4tZmxhZy5wbmdcIj5cbiAgICAgIHt7ICdDT01NT04uSEVBREVSLlBBUkFNRVRFUlMuVElUTEUuTEFOR1VBR0VTLkVOR0xJU0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPSdzd2l0Y2hMYW5nKFwiZnJcIiknICpuZ0lmPSdsYW5nICE9PSBcImZyXCInIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWcvZmxhZy9mci1mbGFnLnBuZ1wiPlxuICAgICAge3sgJ0NPTU1PTi5IRUFERVIuUEFSQU1FVEVSUy5USVRMRS5MQU5HVUFHRVMuRlJFTkNIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKGNsaWNrKT0nc3dpdGNoTGFuZyhcImRlXCIpJyAqbmdJZj0nbGFuZyAhPT0gXCJkZVwiICcgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ltZy9mbGFnL2RlLWZsYWcucG5nXCI+XG4gICAgICB7eyAnQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRJVExFLkxBTkdVQUdFUy5ERVVUQ0gnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LW1lbnU+XG48L21hdC10b29sYmFyPlxuXG4iXX0=