studiokit-scaffolding-js 7.0.12 → 7.1.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 (390) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +137 -137
  3. package/lib/components/ActionList.d.ts +2 -2
  4. package/lib/components/ActionList.js +166 -87
  5. package/lib/components/AlertDialog.d.ts +3 -3
  6. package/lib/components/AlertDialog.js +133 -18
  7. package/lib/components/AlertWithIcon.js +93 -52
  8. package/lib/components/ConnectedModal.d.ts +1 -2
  9. package/lib/components/ConnectedModal.js +43 -37
  10. package/lib/components/Dropdowns/GroupsDropdown.d.ts +4 -4
  11. package/lib/components/Dropdowns/GroupsDropdown.js +69 -82
  12. package/lib/components/Dropdowns/ManagedNavDropdown.d.ts +2 -2
  13. package/lib/components/Dropdowns/ManagedNavDropdown.js +99 -111
  14. package/lib/components/Dropdowns/UserDropdown.js +109 -70
  15. package/lib/components/Dropdowns/index.js +27 -11
  16. package/lib/components/EntityOwnerList.d.ts +3 -3
  17. package/lib/components/EntityOwnerList.js +52 -60
  18. package/lib/components/Error.js +107 -27
  19. package/lib/components/ErrorBoundary.js +133 -94
  20. package/lib/components/ErrorMessage.d.ts +2 -2
  21. package/lib/components/ErrorMessage.js +44 -14
  22. package/lib/components/Forms/DateField.d.ts +2 -2
  23. package/lib/components/Forms/DateField.js +63 -95
  24. package/lib/components/Forms/TimeField.d.ts +2 -2
  25. package/lib/components/Forms/TimeField.js +84 -108
  26. package/lib/components/Forms/index.js +27 -13
  27. package/lib/components/Groups/CreateEditCopySaveButtons.d.ts +2 -2
  28. package/lib/components/Groups/CreateEditCopySaveButtons.js +102 -14
  29. package/lib/components/Groups/ExternalGroups/Attach.d.ts +6 -7
  30. package/lib/components/Groups/ExternalGroups/Attach.js +213 -188
  31. package/lib/components/Groups/ExternalGroups/Table.js +183 -76
  32. package/lib/components/Groups/GroupCreateOrEditCommonProps.js +5 -1
  33. package/lib/components/Groups/RosterSyncInfo.js +140 -49
  34. package/lib/components/HOC/AccessibleAppComponent.d.ts +2 -2
  35. package/lib/components/HOC/AccessibleAppComponent.js +101 -124
  36. package/lib/components/HOC/ActivityRequiredComponent.d.ts +14 -14
  37. package/lib/components/HOC/ActivityRequiredComponent.js +93 -107
  38. package/lib/components/HOC/AsyncComponent.d.ts +9 -9
  39. package/lib/components/HOC/AsyncComponent.js +53 -129
  40. package/lib/components/HOC/AuthenticatedComponent.d.ts +4 -4
  41. package/lib/components/HOC/AuthenticatedComponent.js +59 -96
  42. package/lib/components/HOC/CollectionComponent.d.ts +12 -12
  43. package/lib/components/HOC/CollectionComponent.js +171 -171
  44. package/lib/components/HOC/CollectionFirstItemComponent.d.ts +13 -13
  45. package/lib/components/HOC/CollectionFirstItemComponent.js +52 -94
  46. package/lib/components/HOC/CollectionItemComponent.d.ts +9 -9
  47. package/lib/components/HOC/CollectionItemComponent.js +169 -168
  48. package/lib/components/HOC/ConnectedModalComponent.d.ts +9 -9
  49. package/lib/components/HOC/ConnectedModalComponent.js +110 -140
  50. package/lib/components/HOC/DataDependentComponent.d.ts +3 -55
  51. package/lib/components/HOC/DataDependentComponent.js +30 -79
  52. package/lib/components/HOC/EntityComponent.d.ts +13 -13
  53. package/lib/components/HOC/EntityComponent.js +74 -112
  54. package/lib/components/HOC/FullscreenModalComponent.d.ts +9 -9
  55. package/lib/components/HOC/FullscreenModalComponent.js +165 -185
  56. package/lib/components/HOC/GroupActivityRequiredComponent.d.ts +2 -2
  57. package/lib/components/HOC/GroupActivityRequiredComponent.js +48 -47
  58. package/lib/components/HOC/GuidComponent.d.ts +1 -1
  59. package/lib/components/HOC/GuidComponent.js +29 -68
  60. package/lib/components/HOC/ModelContextDependencyVerifyComponent.d.ts +28 -29
  61. package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +42 -65
  62. package/lib/components/HOC/ModelErrorRedirectComponent.d.ts +10 -10
  63. package/lib/components/HOC/ModelErrorRedirectComponent.js +51 -94
  64. package/lib/components/HOC/SearchPersistorComponent.d.ts +4 -4
  65. package/lib/components/HOC/SearchPersistorComponent.js +243 -216
  66. package/lib/components/HOC/UnauthenticatedComponent.d.ts +12 -12
  67. package/lib/components/HOC/UnauthenticatedComponent.js +37 -82
  68. package/lib/components/HOC/UserComponent.d.ts +1 -1
  69. package/lib/components/HOC/UserComponent.js +12 -11
  70. package/lib/components/Icons/IconAlphaList.js +34 -20
  71. package/lib/components/Icons/IconExternalUser.js +34 -20
  72. package/lib/components/Icons/IconImpersonation.js +34 -20
  73. package/lib/components/Icons/IconStopImpersonating.js +34 -20
  74. package/lib/components/Icons/IconTable.js +35 -21
  75. package/lib/components/Icons/IconTableDeleteCol.js +34 -20
  76. package/lib/components/Icons/IconTableDeleteRow.js +34 -20
  77. package/lib/components/Icons/IconTableInsertCol.js +34 -20
  78. package/lib/components/Icons/IconTableInsertRow.js +34 -20
  79. package/lib/components/Impersonation/Button.d.ts +2 -2
  80. package/lib/components/Impersonation/Button.js +76 -56
  81. package/lib/components/Impersonation/Link.d.ts +2 -2
  82. package/lib/components/Impersonation/Link.js +76 -53
  83. package/lib/components/Impersonation/UserDetail.css +22 -22
  84. package/lib/components/Impersonation/UserDetail.d.ts +2 -2
  85. package/lib/components/Impersonation/UserDetail.js +66 -17
  86. package/lib/components/Loading.js +27 -21
  87. package/lib/components/LockDownBrowser/Check.js +194 -107
  88. package/lib/components/LockDownBrowser/ExitButton.js +27 -14
  89. package/lib/components/LockDownBrowser/Launch.js +70 -85
  90. package/lib/components/Lti/Confirm.js +152 -33
  91. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.d.ts +4 -2
  92. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +170 -78
  93. package/lib/components/Lti/Launch.js +105 -49
  94. package/lib/components/Lti/LaunchGroup.js +85 -39
  95. package/lib/components/ManageTable.d.ts +1 -2
  96. package/lib/components/ManageTable.js +309 -104
  97. package/lib/components/ManageTableNoDataComponent.js +42 -22
  98. package/lib/components/NewVersionAlert.d.ts +2 -2
  99. package/lib/components/NewVersionAlert.js +82 -91
  100. package/lib/components/NotFound.js +87 -28
  101. package/lib/components/Notifications.d.ts +4 -4
  102. package/lib/components/Notifications.js +187 -169
  103. package/lib/components/PaginationNextButton.js +33 -21
  104. package/lib/components/PaginationPreviousButton.js +33 -21
  105. package/lib/components/Quill/CustomToolbar.d.ts +2 -2
  106. package/lib/components/Quill/CustomToolbar.js +432 -257
  107. package/lib/components/Quill/Formats/Image.d.ts +10 -25
  108. package/lib/components/Quill/Formats/Image.js +80 -86
  109. package/lib/components/Quill/Formats/List.d.ts +6 -3
  110. package/lib/components/Quill/Formats/List.js +52 -74
  111. package/lib/components/Quill/Formats/Video.d.ts +2 -1
  112. package/lib/components/Quill/Formats/Video.js +31 -45
  113. package/lib/components/Quill/ImageDropModule.d.ts +1 -1
  114. package/lib/components/Quill/ImageDropModule.js +149 -122
  115. package/lib/components/Quill/ImageWarning.d.ts +2 -2
  116. package/lib/components/Quill/ImageWarning.js +45 -32
  117. package/lib/components/Quill/ImageWithAltTextModal.d.ts +0 -1
  118. package/lib/components/Quill/ImageWithAltTextModal.js +425 -141
  119. package/lib/components/Quill/Specs/CustomImageSpec.d.ts +1 -1
  120. package/lib/components/Quill/Specs/CustomImageSpec.js +43 -51
  121. package/lib/components/Quill/Specs/CustomVideoSpec.d.ts +1 -1
  122. package/lib/components/Quill/Specs/CustomVideoSpec.js +35 -44
  123. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.d.ts +2 -1
  124. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +105 -121
  125. package/lib/components/Quill/TableModule/Blots/TableBlot.js +53 -66
  126. package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +54 -67
  127. package/lib/components/Quill/TableModule/Blots/TableCellBlot.d.ts +1 -1
  128. package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +225 -241
  129. package/lib/components/Quill/TableModule/Blots/TableContainer.js +82 -99
  130. package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +76 -87
  131. package/lib/components/Quill/TableModule/constants.js +45 -41
  132. package/lib/components/Quill/TableModule/index.css +171 -171
  133. package/lib/components/Quill/TableModule/index.d.ts +14 -5
  134. package/lib/components/Quill/TableModule/index.js +373 -313
  135. package/lib/components/Quill/TableModule/utils.js +45 -45
  136. package/lib/components/Quill/accessibilityFix.d.ts +0 -1
  137. package/lib/components/Quill/accessibilityFix.js +235 -251
  138. package/lib/components/Quill/index.js +36 -32
  139. package/lib/components/RefreshIndicator/Bordered.js +48 -32
  140. package/lib/components/RefreshIndicator/Inline.js +48 -33
  141. package/lib/components/RefreshIndicator/index.d.ts +2 -2
  142. package/lib/components/RefreshIndicator/index.js +263 -113
  143. package/lib/components/SearchControls.js +216 -31
  144. package/lib/components/SentryRoute.js +10 -23
  145. package/lib/components/Tables/RoleFilter.d.ts +3 -4
  146. package/lib/components/Tables/RoleFilter.js +71 -46
  147. package/lib/components/Tables/TextFilter.d.ts +2 -3
  148. package/lib/components/Tables/TextFilter.js +62 -20
  149. package/lib/components/UserRoles/Add.d.ts +3 -3
  150. package/lib/components/UserRoles/Add.js +199 -161
  151. package/lib/components/UserRoles/Context.js +11 -9
  152. package/lib/components/UserRoles/RoleCell.js +180 -100
  153. package/lib/components/UserRoles/Select.js +157 -51
  154. package/lib/components/UserRoles/Table.js +221 -102
  155. package/lib/components/UserRoles/index.d.ts +6 -6
  156. package/lib/components/UserRoles/index.js +537 -466
  157. package/lib/config/eslint/index.d.ts +2 -0
  158. package/lib/config/eslint/index.js +36 -0
  159. package/lib/config/eslint/lib/order.d.ts +3 -0
  160. package/lib/config/eslint/lib/order.js +30 -0
  161. package/lib/config/eslint/lib/prettier.d.ts +3 -0
  162. package/lib/config/eslint/lib/prettier.js +23 -0
  163. package/lib/config/eslint/lib/typescript.d.ts +2 -0
  164. package/lib/config/eslint/lib/typescript.js +98 -0
  165. package/lib/config/eslint/react.d.ts +2 -0
  166. package/lib/config/eslint/react.js +30 -0
  167. package/lib/constants/baseActivity.js +30 -26
  168. package/lib/constants/baseRole.js +14 -10
  169. package/lib/constants/configuration.d.ts +1 -1
  170. package/lib/constants/configuration.js +43 -39
  171. package/lib/constants/externalProviderType.js +10 -6
  172. package/lib/constants/fetchErrorData.js +15 -11
  173. package/lib/constants/index.js +137 -23
  174. package/lib/constants/lockDownBrowser.js +28 -24
  175. package/lib/constants/mockData.d.ts +4 -6
  176. package/lib/constants/mockData.js +385 -326
  177. package/lib/constants/modelStatus.js +15 -11
  178. package/lib/constants/notificationType.js +12 -8
  179. package/lib/constants/operatingSystem.js +12 -8
  180. package/lib/constants/shard.js +11 -7
  181. package/lib/constants/table.js +21 -21
  182. package/lib/constants/tier.js +12 -8
  183. package/lib/constants/userRole.d.ts +1 -2
  184. package/lib/constants/userRole.js +15 -17
  185. package/lib/css/base/_base.css +98 -98
  186. package/lib/css/base/_typography.css +130 -130
  187. package/lib/css/components/_alert.css +86 -86
  188. package/lib/css/components/_bootstrap-grid.css +28 -28
  189. package/lib/css/components/_buttons.css +397 -397
  190. package/lib/css/components/_forms.css +101 -101
  191. package/lib/css/components/_menu.css +56 -56
  192. package/lib/css/components/_modals.css +46 -46
  193. package/lib/css/components/_quill.css +315 -315
  194. package/lib/css/components/_tables.css +497 -497
  195. package/lib/css/components/_tags.css +12 -12
  196. package/lib/css/index-with-variables.css +15 -15
  197. package/lib/css/index.css +14 -14
  198. package/lib/css/utils/_border.css +463 -463
  199. package/lib/css/utils/_color.css +317 -317
  200. package/lib/css/utils/_display.css +305 -312
  201. package/lib/css/utils/_general.css +48 -48
  202. package/lib/css/utils/_icon.css +16 -16
  203. package/lib/css/utils/_text.css +25 -24
  204. package/lib/css/utils/_width.css +60 -60
  205. package/lib/css/variables.css +84 -84
  206. package/lib/endpointMappings.js +197 -193
  207. package/lib/hooks/useCollection.js +83 -65
  208. package/lib/hooks/useCollectionConfiguration.d.ts +0 -1
  209. package/lib/hooks/useCollectionConfiguration.js +185 -88
  210. package/lib/hooks/useCollectionItem.js +155 -58
  211. package/lib/hooks/useEventCalback.d.ts +14 -0
  212. package/lib/hooks/useEventCalback.js +51 -0
  213. package/lib/hooks/useGuid.js +21 -10
  214. package/lib/hooks/usePrevious.d.ts +24 -1
  215. package/lib/hooks/usePrevious.js +84 -14
  216. package/lib/index.js +156 -36
  217. package/lib/redux/actionCreator.d.ts +6 -6
  218. package/lib/redux/actionCreator.js +51 -40
  219. package/lib/redux/actions/AuthAction.js +44 -31
  220. package/lib/redux/actions/ModalAction.d.ts +1 -1
  221. package/lib/redux/actions/ModalAction.js +10 -6
  222. package/lib/redux/actions/ModelAction.d.ts +1 -1
  223. package/lib/redux/actions/ModelAction.js +77 -49
  224. package/lib/redux/actions/NotificationAction.js +10 -6
  225. package/lib/redux/actions/SearchAction.js +9 -5
  226. package/lib/redux/actions/index.js +60 -16
  227. package/lib/redux/configureReducers.d.ts +2 -5
  228. package/lib/redux/configureReducers.js +67 -78
  229. package/lib/redux/configureStore.d.ts +2 -2
  230. package/lib/redux/configureStore.js +83 -115
  231. package/lib/redux/helpers.js +7 -2
  232. package/lib/redux/reducers/authReducer.js +52 -46
  233. package/lib/redux/reducers/index.js +41 -15
  234. package/lib/redux/reducers/modalsReducer.js +49 -52
  235. package/lib/redux/reducers/modelsReducer.d.ts +2 -2
  236. package/lib/redux/reducers/modelsReducer.js +183 -182
  237. package/lib/redux/reducers/notificationsReducer.js +26 -21
  238. package/lib/redux/reducers/searchReducer.js +26 -20
  239. package/lib/redux/sagas/appInsightsSaga.js +24 -62
  240. package/lib/redux/sagas/authSaga.js +287 -414
  241. package/lib/redux/sagas/caliperSaga.js +169 -263
  242. package/lib/redux/sagas/clockOffsetSaga.js +36 -77
  243. package/lib/redux/sagas/configurationSaga.js +13 -46
  244. package/lib/redux/sagas/downtimeApiErrorSaga.d.ts +0 -1
  245. package/lib/redux/sagas/downtimeApiErrorSaga.js +23 -64
  246. package/lib/redux/sagas/errorSaga.d.ts +0 -1
  247. package/lib/redux/sagas/errorSaga.js +29 -63
  248. package/lib/redux/sagas/googleAnalyticsSaga.js +29 -69
  249. package/lib/redux/sagas/identityProviderSaga.js +24 -69
  250. package/lib/redux/sagas/initialDataLoadSaga.js +38 -29
  251. package/lib/redux/sagas/lockDownBrowserErrorSaga.d.ts +0 -1
  252. package/lib/redux/sagas/lockDownBrowserErrorSaga.js +32 -81
  253. package/lib/redux/sagas/modelFetchSaga.js +379 -459
  254. package/lib/redux/sagas/noStoreSaga.d.ts +1 -1
  255. package/lib/redux/sagas/noStoreSaga.js +68 -101
  256. package/lib/redux/sagas/postLoginDataSaga.js +47 -79
  257. package/lib/redux/sagas/postLoginRedirectSaga.js +30 -71
  258. package/lib/redux/sagas/rootSaga.js +85 -137
  259. package/lib/redux/sagas/sentrySaga.js +29 -85
  260. package/lib/redux/sagas/userIdSaga.js +18 -54
  261. package/lib/services/codeProviderService.js +25 -29
  262. package/lib/services/dateService.js +14 -12
  263. package/lib/services/documentService.js +18 -13
  264. package/lib/services/fetchService.js +134 -168
  265. package/lib/services/persistenceService.d.ts +4 -4
  266. package/lib/services/persistenceService.js +45 -43
  267. package/lib/services/ticketProviderService.js +29 -33
  268. package/lib/services/tokenPersistenceService.js +13 -9
  269. package/lib/services/windowService.js +21 -17
  270. package/lib/startup.d.ts +1 -1
  271. package/lib/startup.js +132 -135
  272. package/lib/types/AppConfiguration.js +5 -1
  273. package/lib/types/Artifact.js +11 -7
  274. package/lib/types/BaseReduxState.js +5 -1
  275. package/lib/types/Client.js +5 -1
  276. package/lib/types/Collection.d.ts +3 -3
  277. package/lib/types/Collection.js +5 -1
  278. package/lib/types/Configuration.js +5 -1
  279. package/lib/types/DeepLinkingResponseRequest.js +5 -1
  280. package/lib/types/DeletableModel.js +5 -1
  281. package/lib/types/Event.js +5 -1
  282. package/lib/types/ExternalGroup.js +5 -1
  283. package/lib/types/ExternalProvider.js +5 -1
  284. package/lib/types/ExternalTerm.js +5 -1
  285. package/lib/types/Group.js +5 -1
  286. package/lib/types/IdentityProvider.js +5 -1
  287. package/lib/types/LtiLaunch.js +5 -1
  288. package/lib/types/NameOnlyEntity.js +5 -1
  289. package/lib/types/Notification.d.ts +2 -2
  290. package/lib/types/Notification.js +5 -1
  291. package/lib/types/OptionalRecord.d.ts +1 -1
  292. package/lib/types/OptionalRecord.js +5 -1
  293. package/lib/types/OwnerSchedule.d.ts +3 -1
  294. package/lib/types/OwnerSchedule.js +5 -1
  295. package/lib/types/PropertyOfType.d.ts +3 -3
  296. package/lib/types/PropertyOfType.js +5 -1
  297. package/lib/types/Quill.js +5 -1
  298. package/lib/types/RoleDescription.d.ts +0 -1
  299. package/lib/types/RoleDescription.js +5 -1
  300. package/lib/types/Search.js +5 -1
  301. package/lib/types/SimpleLocation.js +5 -1
  302. package/lib/types/UniTime.js +5 -1
  303. package/lib/types/User.js +5 -1
  304. package/lib/types/UserRole.js +5 -1
  305. package/lib/types/auth/AuthState.js +5 -1
  306. package/lib/types/auth/CasV1LoginRequestBody.js +5 -1
  307. package/lib/types/auth/ClientCredentials.js +5 -1
  308. package/lib/types/auth/CodeProviderService.js +5 -1
  309. package/lib/types/auth/LocalLoginRequestBody.js +5 -1
  310. package/lib/types/auth/TicketProviderService.js +5 -1
  311. package/lib/types/auth/TokenPersistenceService.js +5 -1
  312. package/lib/types/auth/index.js +82 -18
  313. package/lib/types/externals.d.js +2 -0
  314. package/lib/types/index.js +313 -39
  315. package/lib/types/net/EndpointConfig.js +5 -1
  316. package/lib/types/net/EndpointMapping.js +5 -1
  317. package/lib/types/net/EndpointMappings.js +5 -1
  318. package/lib/types/net/ErrorHandler.d.ts +1 -1
  319. package/lib/types/net/ErrorHandler.js +5 -1
  320. package/lib/types/net/FetchConfig.d.ts +1 -1
  321. package/lib/types/net/FetchConfig.js +5 -1
  322. package/lib/types/net/FetchErrorData.js +10 -6
  323. package/lib/types/net/FetchResult.d.ts +2 -2
  324. package/lib/types/net/FetchResult.js +5 -1
  325. package/lib/types/net/HTTPMethod.d.ts +1 -1
  326. package/lib/types/net/HTTPMethod.js +5 -1
  327. package/lib/types/net/HTTPStatusCode.js +16 -12
  328. package/lib/types/net/Metadata.js +5 -1
  329. package/lib/types/net/Model.js +5 -1
  330. package/lib/types/net/ModelCollection.js +5 -1
  331. package/lib/types/net/ModelsState.js +5 -1
  332. package/lib/types/net/OAuthToken.js +5 -1
  333. package/lib/types/net/OAuthTokenOrNull.d.ts +1 -1
  334. package/lib/types/net/OAuthTokenOrNull.js +5 -1
  335. package/lib/types/net/TokenAccessFunction.d.ts +1 -1
  336. package/lib/types/net/TokenAccessFunction.js +5 -1
  337. package/lib/types/net/index.js +181 -27
  338. package/lib/utils/baseActivity.d.ts +2 -2
  339. package/lib/utils/baseActivity.js +138 -136
  340. package/lib/utils/baseRole.js +37 -33
  341. package/lib/utils/collection.js +432 -310
  342. package/lib/utils/cookies.js +22 -37
  343. package/lib/utils/date.js +320 -320
  344. package/lib/utils/dom.js +186 -174
  345. package/lib/utils/domainIdentifier.js +9 -9
  346. package/lib/utils/entityUserRole.js +6 -2
  347. package/lib/utils/error.d.ts +1 -1
  348. package/lib/utils/error.js +18 -16
  349. package/lib/utils/events.js +40 -33
  350. package/lib/utils/externalGroup.js +25 -21
  351. package/lib/utils/externalProviders.js +8 -4
  352. package/lib/utils/externalTerms.js +9 -6
  353. package/lib/utils/fetch.d.ts +1 -1
  354. package/lib/utils/fetch.js +188 -185
  355. package/lib/utils/group.js +17 -9
  356. package/lib/utils/groupDates.d.ts +1 -1
  357. package/lib/utils/groupDates.js +43 -39
  358. package/lib/utils/groupRoles.js +28 -28
  359. package/lib/utils/lockDownBrowser.js +16 -12
  360. package/lib/utils/logger.js +30 -25
  361. package/lib/utils/lti.js +10 -5
  362. package/lib/utils/model.d.ts +2 -2
  363. package/lib/utils/model.js +39 -48
  364. package/lib/utils/number.js +23 -26
  365. package/lib/utils/promise.d.ts +6 -1
  366. package/lib/utils/promise.js +34 -15
  367. package/lib/utils/quill.js +66 -77
  368. package/lib/utils/route.d.ts +2 -2
  369. package/lib/utils/route.js +61 -60
  370. package/lib/utils/search.d.ts +1 -1
  371. package/lib/utils/search.js +78 -85
  372. package/lib/utils/shard.js +38 -41
  373. package/lib/utils/sort.d.ts +3 -3
  374. package/lib/utils/sort.js +62 -58
  375. package/lib/utils/string.js +14 -10
  376. package/lib/utils/table.d.ts +3 -3
  377. package/lib/utils/table.js +39 -36
  378. package/lib/utils/timezone.js +12 -26
  379. package/lib/utils/url.d.ts +2 -1
  380. package/lib/utils/url.js +146 -200
  381. package/lib/utils/user.js +59 -61
  382. package/lib/utils/userAgent.js +11 -11
  383. package/lib/utils/userRole.d.ts +3 -3
  384. package/lib/utils/userRole.js +58 -56
  385. package/package.json +224 -207
  386. package/lib/config/eslint/index.cjs +0 -21
  387. package/lib/config/eslint/lib/order.cjs +0 -22
  388. package/lib/config/eslint/lib/prettier.cjs +0 -18
  389. package/lib/config/eslint/lib/typescript.cjs +0 -86
  390. package/lib/config/eslint/react.cjs +0 -9
@@ -1,377 +1,436 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.badRequestFullErrorData = exports.badRequestErrorData = exports.unauthorizedErrorData = exports.forbiddenErrorData = exports.requestTimedOutErrorData = exports.internalServerErrorData = exports.defaultExternalTerms = exports.defaultExternalProviders = exports.mockPastAndCurrentGroups = exports.mockPastGroups = exports.mockTermAndUniTimeGroups = exports.mockTermGroups = exports.mockLtiGroups = exports.mockSyncedGroups = exports.mockGroups = exports.defaultGroup = exports.defaultAdminUserRoles = exports.defaultGroupUserRoles = exports.defaultGroupGrader = exports.defaultExternalGroupLearner = exports.defaultGroupLearner = exports.defaultNamedGroupLearner = exports.defaultNamelessGroupLearner = exports.defaultGroupOwner = exports.defaultGroupOwnerUserInfo = exports.mockUser = exports.defaultNamedUserInfo = exports.defaultNamelessUserInfo = exports.defaultUser = exports.defaultDate = exports.currentDates = exports.pastDates = exports.mockHistory = exports.defaultLocation = exports.defaultAppConfiguration = void 0;
15
- var lodash_1 = require("lodash");
16
- var externalProviderType_1 = require("../constants/externalProviderType");
17
- var types_1 = require("../types");
18
- var baseRole_1 = require("./baseRole");
19
- var tier_1 = require("./tier");
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.internalServerErrorData = exports.forbiddenErrorData = exports.defaultUser = exports.defaultNamelessUserInfo = exports.defaultNamelessGroupLearner = exports.defaultNamedUserInfo = exports.defaultNamedGroupLearner = exports.defaultLocation = exports.defaultGroupUserRoles = exports.defaultGroupOwnerUserInfo = exports.defaultGroupOwner = exports.defaultGroupLearner = exports.defaultGroupGrader = exports.defaultGroup = exports.defaultExternalTerms = exports.defaultExternalProviders = exports.defaultExternalGroupLearner = exports.defaultDate = exports.defaultAppConfiguration = exports.defaultAdminUserRoles = exports.currentDates = exports.badRequestFullErrorData = exports.badRequestErrorData = void 0;
7
+ exports.mockGroups = mockGroups;
8
+ exports.mockHistory = mockHistory;
9
+ exports.mockLtiGroups = mockLtiGroups;
10
+ exports.mockPastAndCurrentGroups = mockPastAndCurrentGroups;
11
+ exports.mockPastGroups = mockPastGroups;
12
+ exports.mockSyncedGroups = mockSyncedGroups;
13
+ exports.mockTermAndUniTimeGroups = mockTermAndUniTimeGroups;
14
+ exports.mockTermGroups = mockTermGroups;
15
+ exports.mockUser = mockUser;
16
+ exports.unauthorizedErrorData = exports.requestTimedOutErrorData = exports.pastDates = void 0;
17
+ var _lodash = require("lodash");
18
+ var _externalProviderType = require("../constants/externalProviderType");
19
+ var _types = require("../types");
20
+ var _baseRole = require("./baseRole");
21
+ var _tier = require("./tier");
20
22
  //#region General
21
- exports.defaultAppConfiguration = {
22
- NODE_ENV: 'test',
23
- APP_NAME: 'StudioKit',
24
- TIER: tier_1.TIER.LOCAL,
25
- API_BASE_URL: '',
26
- ROOT_DOMAIN: 'studiokit.org',
27
- CLIENT_ID: 'web',
28
- CLIENT_SECRET: '****',
29
- IS_DOWNTIME: false,
30
- LMS_NAME: 'Brightspace',
31
- GRADABLE_DESCRIPTOR: 'assessment'
23
+
24
+ const defaultAppConfiguration = exports.defaultAppConfiguration = {
25
+ NODE_ENV: 'test',
26
+ APP_NAME: 'StudioKit',
27
+ TIER: _tier.TIER.LOCAL,
28
+ API_BASE_URL: '',
29
+ ROOT_DOMAIN: 'studiokit.org',
30
+ CLIENT_ID: 'web',
31
+ CLIENT_SECRET: '****',
32
+ IS_DOWNTIME: false,
33
+ LMS_NAME: 'Brightspace',
34
+ GRADABLE_DESCRIPTOR: 'assessment'
32
35
  };
33
- exports.defaultLocation = {
34
- hash: '',
35
- host: 'purdue.dev.studiokit.org',
36
- hostname: 'purdue.dev.studiokit.org',
37
- href: 'https://purdue.dev.studiokit.org/',
38
- pathname: '/',
39
- port: '',
40
- protocol: 'https:',
41
- search: ''
36
+ const defaultLocation = exports.defaultLocation = {
37
+ hash: '',
38
+ host: 'purdue.dev.studiokit.org',
39
+ hostname: 'purdue.dev.studiokit.org',
40
+ href: 'https://purdue.dev.studiokit.org/',
41
+ pathname: '/',
42
+ port: '',
43
+ protocol: 'https:',
44
+ search: ''
42
45
  };
43
46
  function mockHistory() {
44
- return {
45
- length: 0,
46
- scrollRestoration: 'auto',
47
- state: {},
48
- back: jest.fn(),
49
- forward: jest.fn(),
50
- go: jest.fn(),
51
- pushState: jest.fn(),
52
- replaceState: jest.fn()
53
- };
47
+ return {
48
+ length: 0,
49
+ scrollRestoration: 'auto',
50
+ state: {},
51
+ back: jest.fn(),
52
+ forward: jest.fn(),
53
+ go: jest.fn(),
54
+ pushState: jest.fn(),
55
+ replaceState: jest.fn()
56
+ };
54
57
  }
55
- exports.mockHistory = mockHistory;
58
+
56
59
  //#endregion General
60
+
57
61
  //#region Dates
62
+
58
63
  /** 5/15/18 - 8/14/18 */
59
- exports.pastDates = {
60
- startDate: '2018-05-15T04:00:00.000Z',
61
- endDate: '2018-08-15T03:59:59.999Z'
64
+ const pastDates = exports.pastDates = {
65
+ startDate: '2018-05-15T04:00:00.000Z',
66
+ endDate: '2018-08-15T03:59:59.999Z'
62
67
  };
68
+
63
69
  /** 8/15/18 - 12/31/18: */
64
- exports.currentDates = {
65
- startDate: '2018-08-15T04:00:00.000Z',
66
- endDate: '2019-01-01T04:59:59.999Z'
70
+ const currentDates = exports.currentDates = {
71
+ startDate: '2018-08-15T04:00:00.000Z',
72
+ endDate: '2019-01-01T04:59:59.999Z'
67
73
  };
68
- /**
69
- * The default date and time for all tests. Used by the 'mockdate' package. One month into `currentDates`.
74
+
75
+ /**
76
+ * The default date and time for all tests. Used by the 'mockdate' package. One month into `currentDates`.
70
77
  */
71
- exports.defaultDate = '2018-09-15T04:00:00.000Z';
78
+ const defaultDate = exports.defaultDate = '2018-09-15T04:00:00.000Z';
79
+
72
80
  //#endregion Dates
81
+
73
82
  //#region Users
74
- exports.defaultUser = {
75
- userInfo: {
76
- id: '1',
77
- firstName: null,
78
- lastName: null,
79
- email: null,
80
- uid: null,
81
- activities: [],
82
- roles: [],
83
- dateDemoGenerationSucceeded: null,
84
- dateStored: exports.defaultDate,
85
- dateLastUpdated: exports.defaultDate,
86
- isImpersonated: false,
87
- careerAccountAlias: null,
88
- employeeNumber: null,
89
- userName: 'test',
90
- puid: null,
91
- lockDownBrowserTestLaunchUrl: null
92
- }
83
+
84
+ const defaultUser = exports.defaultUser = {
85
+ userInfo: {
86
+ id: '1',
87
+ firstName: null,
88
+ lastName: null,
89
+ email: null,
90
+ uid: null,
91
+ activities: [],
92
+ roles: [],
93
+ dateDemoGenerationSucceeded: null,
94
+ dateStored: defaultDate,
95
+ dateLastUpdated: defaultDate,
96
+ isImpersonated: false,
97
+ careerAccountAlias: null,
98
+ employeeNumber: null,
99
+ userName: 'test',
100
+ puid: null,
101
+ lockDownBrowserTestLaunchUrl: null
102
+ }
93
103
  };
94
- exports.defaultNamelessUserInfo = __assign(__assign({}, exports.defaultUser.userInfo), {
104
+ const defaultNamelessUserInfo = exports.defaultNamelessUserInfo = {
105
+ ...defaultUser.userInfo,
106
+ ...{
95
107
  email: 'nicki@minaj.superbass',
96
108
  uid: 'nm-nameless'
97
- });
98
- exports.defaultNamedUserInfo = __assign(__assign({}, exports.defaultUser.userInfo), {
109
+ }
110
+ };
111
+ const defaultNamedUserInfo = exports.defaultNamedUserInfo = {
112
+ ...defaultUser.userInfo,
113
+ ...{
99
114
  firstName: 'Nicki',
100
115
  lastName: 'Minaj',
101
116
  uid: 'nm-named'
102
- });
103
- function mockUser(activities) {
104
- if (activities === void 0) { activities = []; }
105
- return lodash_1.merge({ userInfo: { activities: activities } }, exports.defaultUser);
117
+ }
118
+ };
119
+ function mockUser() {
120
+ let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
121
+ return (0, _lodash.merge)({
122
+ userInfo: {
123
+ activities
124
+ }
125
+ }, defaultUser);
106
126
  }
107
- exports.mockUser = mockUser;
108
- exports.defaultGroupOwnerUserInfo = __assign(__assign({}, exports.defaultUser.userInfo), { id: '2', firstName: 'Jane', lastName: 'Doe', email: 'jane@gmail.com' });
109
- exports.defaultGroupOwner = {
110
- id: '1',
111
- userId: '2',
112
- firstName: 'Jane',
113
- lastName: 'Doe',
114
- email: 'jane@gmail.com',
115
- uid: 'jane',
116
- entityId: 1,
117
- role: baseRole_1.BASE_ROLE.GROUP_OWNER,
118
- isExternal: false
127
+ const defaultGroupOwnerUserInfo = exports.defaultGroupOwnerUserInfo = {
128
+ ...defaultUser.userInfo,
129
+ id: '2',
130
+ firstName: 'Jane',
131
+ lastName: 'Doe',
132
+ email: 'jane@gmail.com'
119
133
  };
120
- exports.defaultNamelessGroupLearner = {
121
- id: '2',
122
- userId: '3',
123
- firstName: null,
124
- lastName: null,
125
- email: 'nicki@minaj.superbass',
126
- uid: 'nm-nameless',
127
- entityId: 1,
128
- role: baseRole_1.BASE_ROLE.GROUP_LEARNER,
129
- isExternal: false
134
+ const defaultGroupOwner = exports.defaultGroupOwner = {
135
+ id: '1',
136
+ userId: '2',
137
+ firstName: 'Jane',
138
+ lastName: 'Doe',
139
+ email: 'jane@gmail.com',
140
+ uid: 'jane',
141
+ entityId: 1,
142
+ role: _baseRole.BASE_ROLE.GROUP_OWNER,
143
+ isExternal: false
130
144
  };
131
- exports.defaultNamedGroupLearner = {
132
- id: '3',
133
- userId: '4',
134
- firstName: 'Nicki',
135
- lastName: 'Minaj',
136
- email: null,
137
- uid: 'nm-named',
138
- entityId: 1,
139
- role: baseRole_1.BASE_ROLE.GROUP_LEARNER,
140
- isExternal: false
145
+ const defaultNamelessGroupLearner = exports.defaultNamelessGroupLearner = {
146
+ id: '2',
147
+ userId: '3',
148
+ firstName: null,
149
+ lastName: null,
150
+ email: 'nicki@minaj.superbass',
151
+ uid: 'nm-nameless',
152
+ entityId: 1,
153
+ role: _baseRole.BASE_ROLE.GROUP_LEARNER,
154
+ isExternal: false
141
155
  };
142
- exports.defaultGroupLearner = {
143
- id: '4',
144
- userId: '5',
145
- firstName: 'Joe',
146
- lastName: 'Schmoe',
147
- email: 'nope@gmail.com',
148
- uid: 'nope',
149
- entityId: 1,
150
- role: baseRole_1.BASE_ROLE.GROUP_LEARNER,
151
- isExternal: false
156
+ const defaultNamedGroupLearner = exports.defaultNamedGroupLearner = {
157
+ id: '3',
158
+ userId: '4',
159
+ firstName: 'Nicki',
160
+ lastName: 'Minaj',
161
+ email: null,
162
+ uid: 'nm-named',
163
+ entityId: 1,
164
+ role: _baseRole.BASE_ROLE.GROUP_LEARNER,
165
+ isExternal: false
152
166
  };
153
- exports.defaultExternalGroupLearner = {
154
- id: '5',
155
- userId: '6',
156
- firstName: 'Bob',
157
- lastName: 'Loblaw',
158
- email: 'bobloblaw@lawblog.com',
159
- uid: 'bobloblaw',
160
- entityId: 1,
161
- role: baseRole_1.BASE_ROLE.GROUP_LEARNER,
162
- isExternal: true
167
+ const defaultGroupLearner = exports.defaultGroupLearner = {
168
+ id: '4',
169
+ userId: '5',
170
+ firstName: 'Joe',
171
+ lastName: 'Schmoe',
172
+ email: 'nope@gmail.com',
173
+ uid: 'nope',
174
+ entityId: 1,
175
+ role: _baseRole.BASE_ROLE.GROUP_LEARNER,
176
+ isExternal: false
163
177
  };
164
- exports.defaultGroupGrader = {
165
- id: '6',
166
- userId: '7',
167
- firstName: 'Grader',
168
- lastName: 'McGradeface',
169
- email: 'grader@gmail.com',
170
- uid: 'grader',
171
- entityId: 1,
172
- role: baseRole_1.BASE_ROLE.GROUP_GRADER,
173
- isExternal: false
178
+ const defaultExternalGroupLearner = exports.defaultExternalGroupLearner = {
179
+ id: '5',
180
+ userId: '6',
181
+ firstName: 'Bob',
182
+ lastName: 'Loblaw',
183
+ email: 'bobloblaw@lawblog.com',
184
+ uid: 'bobloblaw',
185
+ entityId: 1,
186
+ role: _baseRole.BASE_ROLE.GROUP_LEARNER,
187
+ isExternal: true
174
188
  };
175
- exports.defaultGroupUserRoles = [exports.defaultGroupOwner, exports.defaultGroupLearner, exports.defaultExternalGroupLearner];
176
- exports.defaultAdminUserRoles = [
177
- {
178
- id: '1',
179
- firstName: 'Joe',
180
- lastName: 'Schmo',
181
- email: null,
182
- uid: null,
183
- role: baseRole_1.BASE_ROLE.ADMIN
184
- },
185
- {
186
- id: '2',
187
- firstName: null,
188
- lastName: null,
189
- email: 'carlysimon@clouds.in.coffee',
190
- uid: 'carlysimon',
191
- role: baseRole_1.BASE_ROLE.ADMIN
192
- }
193
- ];
189
+ const defaultGroupGrader = exports.defaultGroupGrader = {
190
+ id: '6',
191
+ userId: '7',
192
+ firstName: 'Grader',
193
+ lastName: 'McGradeface',
194
+ email: 'grader@gmail.com',
195
+ uid: 'grader',
196
+ entityId: 1,
197
+ role: _baseRole.BASE_ROLE.GROUP_GRADER,
198
+ isExternal: false
199
+ };
200
+ const defaultGroupUserRoles = exports.defaultGroupUserRoles = [defaultGroupOwner, defaultGroupLearner, defaultExternalGroupLearner];
201
+ const defaultAdminUserRoles = exports.defaultAdminUserRoles = [{
202
+ id: '1',
203
+ firstName: 'Joe',
204
+ lastName: 'Schmo',
205
+ email: null,
206
+ uid: null,
207
+ role: _baseRole.BASE_ROLE.ADMIN
208
+ }, {
209
+ id: '2',
210
+ firstName: null,
211
+ lastName: null,
212
+ email: 'carlysimon@clouds.in.coffee',
213
+ uid: 'carlysimon',
214
+ role: _baseRole.BASE_ROLE.ADMIN
215
+ }];
216
+
194
217
  //#endregion Users
218
+
195
219
  //#region Groups
196
- exports.defaultGroup = {
197
- roles: [],
198
- activities: [],
199
- owners: [
200
- {
201
- id: '1',
202
- entityId: 1,
203
- firstName: 'Instructor',
204
- lastName: 'McInstructor',
205
- email: null,
206
- uid: null
207
- }
208
- ],
209
- graders: [],
210
- id: 1,
211
- name: 'McGroup',
212
- externalTermId: null,
213
- startDate: exports.currentDates.startDate,
214
- endDate: exports.currentDates.endDate,
215
- isDeleted: false,
216
- isRosterSyncEnabled: false,
217
- externalGroups: []
220
+
221
+ const defaultGroup = exports.defaultGroup = {
222
+ roles: [],
223
+ activities: [],
224
+ owners: [{
225
+ id: '1',
226
+ entityId: 1,
227
+ firstName: 'Instructor',
228
+ lastName: 'McInstructor',
229
+ email: null,
230
+ uid: null
231
+ }],
232
+ graders: [],
233
+ id: 1,
234
+ name: 'McGroup',
235
+ externalTermId: null,
236
+ startDate: currentDates.startDate,
237
+ endDate: currentDates.endDate,
238
+ isDeleted: false,
239
+ isRosterSyncEnabled: false,
240
+ externalGroups: []
218
241
  };
219
- function mockGroups(activities, roles) {
220
- if (activities === void 0) { activities = []; }
221
- if (roles === void 0) { roles = []; }
222
- return { '1': lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup) };
242
+ function mockGroups() {
243
+ let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
244
+ let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
245
+ return {
246
+ '1': (0, _lodash.merge)({
247
+ activities,
248
+ roles
249
+ }, defaultGroup)
250
+ };
223
251
  }
224
- exports.mockGroups = mockGroups;
225
- function mockSyncedGroups(activities, roles) {
226
- if (activities === void 0) { activities = []; }
227
- if (roles === void 0) { roles = []; }
228
- var rosterSyncEnabledGroup = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup);
229
- rosterSyncEnabledGroup.isRosterSyncEnabled = true;
230
- return { '1': rosterSyncEnabledGroup };
252
+ function mockSyncedGroups() {
253
+ let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
254
+ let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
255
+ const rosterSyncEnabledGroup = (0, _lodash.merge)({
256
+ activities,
257
+ roles
258
+ }, defaultGroup);
259
+ rosterSyncEnabledGroup.isRosterSyncEnabled = true;
260
+ return {
261
+ '1': rosterSyncEnabledGroup
262
+ };
231
263
  }
232
- exports.mockSyncedGroups = mockSyncedGroups;
233
- function mockLtiGroups(activities, roles) {
234
- if (activities === void 0) { activities = []; }
235
- if (roles === void 0) { roles = []; }
236
- var ltiGroup = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup);
237
- ltiGroup.isRosterSyncEnabled = true;
238
- ltiGroup.externalGroups = [
239
- {
240
- id: 1,
241
- externalProviderId: 2,
242
- groupId: 1,
243
- userId: '1',
244
- name: 'LTI ExternalGroup',
245
- description: 'LTI 101',
246
- gradesUrl: 'www.lti.org',
247
- rosterUrl: null,
248
- isAutoGradePushEnabled: false,
249
- externalId: '1',
250
- typename: 'ExternalGroup'
251
- }
252
- ];
253
- return { '1': ltiGroup };
264
+ function mockLtiGroups() {
265
+ let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
266
+ let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
267
+ const ltiGroup = (0, _lodash.merge)({
268
+ activities,
269
+ roles
270
+ }, defaultGroup);
271
+ ltiGroup.isRosterSyncEnabled = true;
272
+ ltiGroup.externalGroups = [{
273
+ id: 1,
274
+ externalProviderId: 2,
275
+ groupId: 1,
276
+ userId: '1',
277
+ name: 'LTI ExternalGroup',
278
+ description: 'LTI 101',
279
+ gradesUrl: 'www.lti.org',
280
+ rosterUrl: null,
281
+ isAutoGradePushEnabled: false,
282
+ externalId: '1',
283
+ typename: 'ExternalGroup'
284
+ }];
285
+ return {
286
+ '1': ltiGroup
287
+ };
254
288
  }
255
- exports.mockLtiGroups = mockLtiGroups;
256
- function mockTermGroups(activities, roles) {
257
- if (activities === void 0) { activities = []; }
258
- if (roles === void 0) { roles = []; }
259
- var group = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup);
260
- group.startDate = null;
261
- group.endDate = null;
262
- group.externalTermId = 1;
263
- return { '1': group };
289
+ function mockTermGroups() {
290
+ let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
291
+ let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
292
+ const group = (0, _lodash.merge)({
293
+ activities,
294
+ roles
295
+ }, defaultGroup);
296
+ group.startDate = null;
297
+ group.endDate = null;
298
+ group.externalTermId = 1;
299
+ return {
300
+ '1': group
301
+ };
264
302
  }
265
- exports.mockTermGroups = mockTermGroups;
266
- function mockTermAndUniTimeGroups(activities, roles) {
267
- if (activities === void 0) { activities = []; }
268
- if (roles === void 0) { roles = []; }
269
- var group = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup);
270
- group.startDate = null;
271
- group.endDate = null;
272
- group.externalTermId = 1;
273
- group.externalGroups = [
274
- {
275
- id: 1,
276
- externalProviderId: 1,
277
- groupId: 1,
278
- userId: '1',
279
- name: 'UniTime ExternalGroup',
280
- description: 'UniTime 101',
281
- gradesUrl: null,
282
- rosterUrl: null,
283
- isAutoGradePushEnabled: false,
284
- externalId: '1',
285
- typename: 'ExternalGroup'
286
- }
287
- ];
288
- return { '1': group };
303
+ function mockTermAndUniTimeGroups() {
304
+ let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
305
+ let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
306
+ const group = (0, _lodash.merge)({
307
+ activities,
308
+ roles
309
+ }, defaultGroup);
310
+ group.startDate = null;
311
+ group.endDate = null;
312
+ group.externalTermId = 1;
313
+ group.externalGroups = [{
314
+ id: 1,
315
+ externalProviderId: 1,
316
+ groupId: 1,
317
+ userId: '1',
318
+ name: 'UniTime ExternalGroup',
319
+ description: 'UniTime 101',
320
+ gradesUrl: null,
321
+ rosterUrl: null,
322
+ isAutoGradePushEnabled: false,
323
+ externalId: '1',
324
+ typename: 'ExternalGroup'
325
+ }];
326
+ return {
327
+ '1': group
328
+ };
289
329
  }
290
- exports.mockTermAndUniTimeGroups = mockTermAndUniTimeGroups;
291
- function mockPastGroups(activities, roles) {
292
- if (activities === void 0) { activities = []; }
293
- if (roles === void 0) { roles = []; }
294
- var pastGroup = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup, exports.pastDates);
295
- return { '1': pastGroup };
330
+ function mockPastGroups() {
331
+ let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
332
+ let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
333
+ const pastGroup = (0, _lodash.merge)({
334
+ activities,
335
+ roles
336
+ }, defaultGroup, pastDates);
337
+ return {
338
+ '1': pastGroup
339
+ };
296
340
  }
297
- exports.mockPastGroups = mockPastGroups;
298
- function mockPastAndCurrentGroups(activities, roles) {
299
- if (activities === void 0) { activities = []; }
300
- if (roles === void 0) { roles = []; }
301
- var pastGroup = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup, exports.pastDates);
302
- var currentGroup = lodash_1.merge({ activities: activities, roles: roles }, exports.defaultGroup, {
303
- id: '2'
304
- }, exports.currentDates);
305
- return { '1': pastGroup, '2': currentGroup };
341
+ function mockPastAndCurrentGroups() {
342
+ let activities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
343
+ let roles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
344
+ const pastGroup = (0, _lodash.merge)({
345
+ activities,
346
+ roles
347
+ }, defaultGroup, pastDates);
348
+ const currentGroup = (0, _lodash.merge)({
349
+ activities,
350
+ roles
351
+ }, defaultGroup, {
352
+ id: '2'
353
+ }, currentDates);
354
+ return {
355
+ '1': pastGroup,
356
+ '2': currentGroup
357
+ };
306
358
  }
307
- exports.mockPastAndCurrentGroups = mockPastAndCurrentGroups;
359
+
308
360
  //#endregion Groups
361
+
309
362
  //#region ExternalTerms + ExternalProviders
310
- exports.defaultExternalProviders = {
311
- '1': {
312
- id: 1,
313
- typename: externalProviderType_1.EXTERNAL_PROVIDER_TYPE.UNITIME,
314
- termSyncEnabled: true,
315
- rosterSyncEnabled: true,
316
- gradePushEnabled: false,
317
- shouldDisplayCreateNonLtiGroupAlert: false
318
- },
319
- '2': {
320
- id: 2,
321
- typename: externalProviderType_1.EXTERNAL_PROVIDER_TYPE.LTI,
322
- termSyncEnabled: false,
323
- rosterSyncEnabled: false,
324
- gradePushEnabled: true,
325
- shouldDisplayCreateNonLtiGroupAlert: true
326
- }
363
+
364
+ const defaultExternalProviders = exports.defaultExternalProviders = {
365
+ '1': {
366
+ id: 1,
367
+ typename: _externalProviderType.EXTERNAL_PROVIDER_TYPE.UNITIME,
368
+ termSyncEnabled: true,
369
+ rosterSyncEnabled: true,
370
+ gradePushEnabled: false,
371
+ shouldDisplayCreateNonLtiGroupAlert: false
372
+ },
373
+ '2': {
374
+ id: 2,
375
+ typename: _externalProviderType.EXTERNAL_PROVIDER_TYPE.LTI,
376
+ termSyncEnabled: false,
377
+ rosterSyncEnabled: false,
378
+ gradePushEnabled: true,
379
+ shouldDisplayCreateNonLtiGroupAlert: true
380
+ }
327
381
  };
328
- exports.defaultExternalTerms = {
329
- '1': {
330
- id: 1,
331
- externalProviderId: 1,
332
- externalId: 'foo',
333
- name: 'UniTime Fall Term',
334
- startDate: exports.currentDates.startDate,
335
- endDate: exports.currentDates.endDate
336
- }
382
+ const defaultExternalTerms = exports.defaultExternalTerms = {
383
+ '1': {
384
+ id: 1,
385
+ externalProviderId: 1,
386
+ externalId: 'foo',
387
+ name: 'UniTime Fall Term',
388
+ startDate: currentDates.startDate,
389
+ endDate: currentDates.endDate
390
+ }
337
391
  };
392
+
338
393
  //#endregion ExternalTerms + ExternalProviders
394
+
339
395
  //#region FetchErrorData
340
- exports.internalServerErrorData = {
341
- status: types_1.HTTP_STATUS_CODE.INTERNAL_SERVER_ERROR,
342
- title: 'Error',
343
- detail: 'An error has occurred.'
396
+
397
+ const internalServerErrorData = exports.internalServerErrorData = {
398
+ status: _types.HTTP_STATUS_CODE.INTERNAL_SERVER_ERROR,
399
+ title: 'Error',
400
+ detail: 'An error has occurred.'
344
401
  };
345
- exports.requestTimedOutErrorData = {
346
- status: types_1.HTTP_STATUS_CODE.REQUEST_TIMEOUT,
347
- title: 'Request Timeout',
348
- detail: null
402
+ const requestTimedOutErrorData = exports.requestTimedOutErrorData = {
403
+ status: _types.HTTP_STATUS_CODE.REQUEST_TIMEOUT,
404
+ title: 'Request Timeout',
405
+ detail: null
349
406
  };
350
- exports.forbiddenErrorData = {
351
- status: types_1.HTTP_STATUS_CODE.FORBIDDEN,
352
- title: 'Forbidden',
353
- detail: 'Your request has been denied. You do not have access.'
407
+ const forbiddenErrorData = exports.forbiddenErrorData = {
408
+ status: _types.HTTP_STATUS_CODE.FORBIDDEN,
409
+ title: 'Forbidden',
410
+ detail: 'Your request has been denied. You do not have access.'
354
411
  };
355
- exports.unauthorizedErrorData = {
356
- status: types_1.HTTP_STATUS_CODE.UNAUTHORIZED,
357
- title: 'Unauthorized',
358
- detail: 'Your request is unauthorized. You must authenticate.'
412
+ const unauthorizedErrorData = exports.unauthorizedErrorData = {
413
+ status: _types.HTTP_STATUS_CODE.UNAUTHORIZED,
414
+ title: 'Unauthorized',
415
+ detail: 'Your request is unauthorized. You must authenticate.'
359
416
  };
360
- exports.badRequestErrorData = {
361
- status: types_1.HTTP_STATUS_CODE.BAD_REQUEST,
362
- title: 'Bad Request',
363
- detail: 'Reasons'
417
+ const badRequestErrorData = exports.badRequestErrorData = {
418
+ status: _types.HTTP_STATUS_CODE.BAD_REQUEST,
419
+ title: 'Bad Request',
420
+ detail: 'Reasons'
364
421
  };
365
- exports.badRequestFullErrorData = {
366
- status: types_1.HTTP_STATUS_CODE.BAD_REQUEST,
367
- title: 'Bad Request',
368
- detail: 'Reasons',
369
- // include all optional properties
370
- type: 'https://tools.ietf.org/html/rfc7231#section-6.5.1',
371
- instance: 'instance',
372
- traceId: '00-3914b43b452b94e3ff4c327922880a03-4cfed6fe42afdd8f-00',
373
- errors: {
374
- password: ['The Password must be at least 6 characters long.']
375
- }
422
+ const badRequestFullErrorData = exports.badRequestFullErrorData = {
423
+ status: _types.HTTP_STATUS_CODE.BAD_REQUEST,
424
+ title: 'Bad Request',
425
+ detail: 'Reasons',
426
+ // include all optional properties
427
+ type: 'https://tools.ietf.org/html/rfc7231#section-6.5.1',
428
+ instance: 'instance',
429
+ traceId: '00-3914b43b452b94e3ff4c327922880a03-4cfed6fe42afdd8f-00',
430
+ errors: {
431
+ password: ['The Password must be at least 6 characters long.']
432
+ }
376
433
  };
434
+
377
435
  //#endregion FetchErrorData
436
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9leHRlcm5hbFByb3ZpZGVyVHlwZSIsIl90eXBlcyIsIl9iYXNlUm9sZSIsIl90aWVyIiwiZGVmYXVsdEFwcENvbmZpZ3VyYXRpb24iLCJleHBvcnRzIiwiTk9ERV9FTlYiLCJBUFBfTkFNRSIsIlRJRVIiLCJMT0NBTCIsIkFQSV9CQVNFX1VSTCIsIlJPT1RfRE9NQUlOIiwiQ0xJRU5UX0lEIiwiQ0xJRU5UX1NFQ1JFVCIsIklTX0RPV05USU1FIiwiTE1TX05BTUUiLCJHUkFEQUJMRV9ERVNDUklQVE9SIiwiZGVmYXVsdExvY2F0aW9uIiwiaGFzaCIsImhvc3QiLCJob3N0bmFtZSIsImhyZWYiLCJwYXRobmFtZSIsInBvcnQiLCJwcm90b2NvbCIsInNlYXJjaCIsIm1vY2tIaXN0b3J5IiwibGVuZ3RoIiwic2Nyb2xsUmVzdG9yYXRpb24iLCJzdGF0ZSIsImJhY2siLCJqZXN0IiwiZm4iLCJmb3J3YXJkIiwiZ28iLCJwdXNoU3RhdGUiLCJyZXBsYWNlU3RhdGUiLCJwYXN0RGF0ZXMiLCJzdGFydERhdGUiLCJlbmREYXRlIiwiY3VycmVudERhdGVzIiwiZGVmYXVsdERhdGUiLCJkZWZhdWx0VXNlciIsInVzZXJJbmZvIiwiaWQiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImVtYWlsIiwidWlkIiwiYWN0aXZpdGllcyIsInJvbGVzIiwiZGF0ZURlbW9HZW5lcmF0aW9uU3VjY2VlZGVkIiwiZGF0ZVN0b3JlZCIsImRhdGVMYXN0VXBkYXRlZCIsImlzSW1wZXJzb25hdGVkIiwiY2FyZWVyQWNjb3VudEFsaWFzIiwiZW1wbG95ZWVOdW1iZXIiLCJ1c2VyTmFtZSIsInB1aWQiLCJsb2NrRG93bkJyb3dzZXJUZXN0TGF1bmNoVXJsIiwiZGVmYXVsdE5hbWVsZXNzVXNlckluZm8iLCJkZWZhdWx0TmFtZWRVc2VySW5mbyIsIm1vY2tVc2VyIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwibWVyZ2UiLCJkZWZhdWx0R3JvdXBPd25lclVzZXJJbmZvIiwiZGVmYXVsdEdyb3VwT3duZXIiLCJ1c2VySWQiLCJlbnRpdHlJZCIsInJvbGUiLCJCQVNFX1JPTEUiLCJHUk9VUF9PV05FUiIsImlzRXh0ZXJuYWwiLCJkZWZhdWx0TmFtZWxlc3NHcm91cExlYXJuZXIiLCJHUk9VUF9MRUFSTkVSIiwiZGVmYXVsdE5hbWVkR3JvdXBMZWFybmVyIiwiZGVmYXVsdEdyb3VwTGVhcm5lciIsImRlZmF1bHRFeHRlcm5hbEdyb3VwTGVhcm5lciIsImRlZmF1bHRHcm91cEdyYWRlciIsIkdST1VQX0dSQURFUiIsImRlZmF1bHRHcm91cFVzZXJSb2xlcyIsImRlZmF1bHRBZG1pblVzZXJSb2xlcyIsIkFETUlOIiwiZGVmYXVsdEdyb3VwIiwib3duZXJzIiwiZ3JhZGVycyIsIm5hbWUiLCJleHRlcm5hbFRlcm1JZCIsImlzRGVsZXRlZCIsImlzUm9zdGVyU3luY0VuYWJsZWQiLCJleHRlcm5hbEdyb3VwcyIsIm1vY2tHcm91cHMiLCJtb2NrU3luY2VkR3JvdXBzIiwicm9zdGVyU3luY0VuYWJsZWRHcm91cCIsIm1vY2tMdGlHcm91cHMiLCJsdGlHcm91cCIsImV4dGVybmFsUHJvdmlkZXJJZCIsImdyb3VwSWQiLCJkZXNjcmlwdGlvbiIsImdyYWRlc1VybCIsInJvc3RlclVybCIsImlzQXV0b0dyYWRlUHVzaEVuYWJsZWQiLCJleHRlcm5hbElkIiwidHlwZW5hbWUiLCJtb2NrVGVybUdyb3VwcyIsImdyb3VwIiwibW9ja1Rlcm1BbmRVbmlUaW1lR3JvdXBzIiwibW9ja1Bhc3RHcm91cHMiLCJwYXN0R3JvdXAiLCJtb2NrUGFzdEFuZEN1cnJlbnRHcm91cHMiLCJjdXJyZW50R3JvdXAiLCJkZWZhdWx0RXh0ZXJuYWxQcm92aWRlcnMiLCJFWFRFUk5BTF9QUk9WSURFUl9UWVBFIiwiVU5JVElNRSIsInRlcm1TeW5jRW5hYmxlZCIsInJvc3RlclN5bmNFbmFibGVkIiwiZ3JhZGVQdXNoRW5hYmxlZCIsInNob3VsZERpc3BsYXlDcmVhdGVOb25MdGlHcm91cEFsZXJ0IiwiTFRJIiwiZGVmYXVsdEV4dGVybmFsVGVybXMiLCJpbnRlcm5hbFNlcnZlckVycm9yRGF0YSIsInN0YXR1cyIsIkhUVFBfU1RBVFVTX0NPREUiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJ0aXRsZSIsImRldGFpbCIsInJlcXVlc3RUaW1lZE91dEVycm9yRGF0YSIsIlJFUVVFU1RfVElNRU9VVCIsImZvcmJpZGRlbkVycm9yRGF0YSIsIkZPUkJJRERFTiIsInVuYXV0aG9yaXplZEVycm9yRGF0YSIsIlVOQVVUSE9SSVpFRCIsImJhZFJlcXVlc3RFcnJvckRhdGEiLCJCQURfUkVRVUVTVCIsImJhZFJlcXVlc3RGdWxsRXJyb3JEYXRhIiwidHlwZSIsImluc3RhbmNlIiwidHJhY2VJZCIsImVycm9ycyIsInBhc3N3b3JkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50cy9tb2NrRGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgRVhURVJOQUxfUFJPVklERVJfVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cy9leHRlcm5hbFByb3ZpZGVyVHlwZSdcclxuaW1wb3J0IHtcclxuXHRBcHBDb25maWd1cmF0aW9uLFxyXG5cdEV4dGVybmFsUHJvdmlkZXIsXHJcblx0RXh0ZXJuYWxUZXJtLFxyXG5cdEZldGNoRXJyb3JEYXRhLFxyXG5cdEdyb3VwLFxyXG5cdEdyb3VwVXNlclJvbGUsXHJcblx0SFRUUF9TVEFUVVNfQ09ERSxcclxuXHRNb2RlbENvbGxlY3Rpb24sXHJcblx0U2ltcGxlTG9jYXRpb24sXHJcblx0VXNlckluZm8sXHJcblx0VXNlclJvbGVcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgQkFTRV9ST0xFIH0gZnJvbSAnLi9iYXNlUm9sZSdcclxuaW1wb3J0IHsgVElFUiB9IGZyb20gJy4vdGllcidcclxuXHJcbi8vI3JlZ2lvbiBHZW5lcmFsXHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEFwcENvbmZpZ3VyYXRpb246IEFwcENvbmZpZ3VyYXRpb24gPSB7XHJcblx0Tk9ERV9FTlY6ICd0ZXN0JyxcclxuXHRBUFBfTkFNRTogJ1N0dWRpb0tpdCcsXHJcblx0VElFUjogVElFUi5MT0NBTCxcclxuXHRBUElfQkFTRV9VUkw6ICcnLFxyXG5cdFJPT1RfRE9NQUlOOiAnc3R1ZGlva2l0Lm9yZycsXHJcblx0Q0xJRU5UX0lEOiAnd2ViJyxcclxuXHRDTElFTlRfU0VDUkVUOiAnKioqKicsXHJcblx0SVNfRE9XTlRJTUU6IGZhbHNlLFxyXG5cdExNU19OQU1FOiAnQnJpZ2h0c3BhY2UnLFxyXG5cdEdSQURBQkxFX0RFU0NSSVBUT1I6ICdhc3Nlc3NtZW50J1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdExvY2F0aW9uOiBTaW1wbGVMb2NhdGlvbiA9IHtcclxuXHRoYXNoOiAnJyxcclxuXHRob3N0OiAncHVyZHVlLmRldi5zdHVkaW9raXQub3JnJyxcclxuXHRob3N0bmFtZTogJ3B1cmR1ZS5kZXYuc3R1ZGlva2l0Lm9yZycsXHJcblx0aHJlZjogJ2h0dHBzOi8vcHVyZHVlLmRldi5zdHVkaW9raXQub3JnLycsXHJcblx0cGF0aG5hbWU6ICcvJyxcclxuXHRwb3J0OiAnJyxcclxuXHRwcm90b2NvbDogJ2h0dHBzOicsXHJcblx0c2VhcmNoOiAnJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9ja0hpc3RvcnkoKTogSGlzdG9yeSB7XHJcblx0cmV0dXJuIHtcclxuXHRcdGxlbmd0aDogMCxcclxuXHRcdHNjcm9sbFJlc3RvcmF0aW9uOiAnYXV0bycsXHJcblx0XHRzdGF0ZToge30sXHJcblx0XHRiYWNrOiBqZXN0LmZuKCksXHJcblx0XHRmb3J3YXJkOiBqZXN0LmZuKCksXHJcblx0XHRnbzogamVzdC5mbigpLFxyXG5cdFx0cHVzaFN0YXRlOiBqZXN0LmZuKCksXHJcblx0XHRyZXBsYWNlU3RhdGU6IGplc3QuZm4oKVxyXG5cdH1cclxufVxyXG5cclxuLy8jZW5kcmVnaW9uIEdlbmVyYWxcclxuXHJcbi8vI3JlZ2lvbiBEYXRlc1xyXG5cclxuLyoqIDUvMTUvMTggLSA4LzE0LzE4ICovXHJcbmV4cG9ydCBjb25zdCBwYXN0RGF0ZXMgPSB7XHJcblx0c3RhcnREYXRlOiAnMjAxOC0wNS0xNVQwNDowMDowMC4wMDBaJyxcclxuXHRlbmREYXRlOiAnMjAxOC0wOC0xNVQwMzo1OTo1OS45OTlaJ1xyXG59XHJcblxyXG4vKiogOC8xNS8xOCAtIDEyLzMxLzE4OiAqL1xyXG5leHBvcnQgY29uc3QgY3VycmVudERhdGVzID0ge1xyXG5cdHN0YXJ0RGF0ZTogJzIwMTgtMDgtMTVUMDQ6MDA6MDAuMDAwWicsXHJcblx0ZW5kRGF0ZTogJzIwMTktMDEtMDFUMDQ6NTk6NTkuOTk5WidcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBkZWZhdWx0IGRhdGUgYW5kIHRpbWUgZm9yIGFsbCB0ZXN0cy4gVXNlZCBieSB0aGUgJ21vY2tkYXRlJyBwYWNrYWdlLiBPbmUgbW9udGggaW50byBgY3VycmVudERhdGVzYC5cclxuICovXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RGF0ZSA9ICcyMDE4LTA5LTE1VDA0OjAwOjAwLjAwMFonXHJcblxyXG4vLyNlbmRyZWdpb24gRGF0ZXNcclxuXHJcbi8vI3JlZ2lvbiBVc2Vyc1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRVc2VyID0ge1xyXG5cdHVzZXJJbmZvOiB7XHJcblx0XHRpZDogJzEnLFxyXG5cdFx0Zmlyc3ROYW1lOiBudWxsLFxyXG5cdFx0bGFzdE5hbWU6IG51bGwsXHJcblx0XHRlbWFpbDogbnVsbCxcclxuXHRcdHVpZDogbnVsbCxcclxuXHRcdGFjdGl2aXRpZXM6IFtdLFxyXG5cdFx0cm9sZXM6IFtdLFxyXG5cdFx0ZGF0ZURlbW9HZW5lcmF0aW9uU3VjY2VlZGVkOiBudWxsLFxyXG5cdFx0ZGF0ZVN0b3JlZDogZGVmYXVsdERhdGUsXHJcblx0XHRkYXRlTGFzdFVwZGF0ZWQ6IGRlZmF1bHREYXRlLFxyXG5cdFx0aXNJbXBlcnNvbmF0ZWQ6IGZhbHNlLFxyXG5cdFx0Y2FyZWVyQWNjb3VudEFsaWFzOiBudWxsLFxyXG5cdFx0ZW1wbG95ZWVOdW1iZXI6IG51bGwsXHJcblx0XHR1c2VyTmFtZTogJ3Rlc3QnLFxyXG5cdFx0cHVpZDogbnVsbCxcclxuXHRcdGxvY2tEb3duQnJvd3NlclRlc3RMYXVuY2hVcmw6IG51bGxcclxuXHR9IGFzIFVzZXJJbmZvXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0TmFtZWxlc3NVc2VySW5mbyA9IHtcclxuXHQuLi5kZWZhdWx0VXNlci51c2VySW5mbyxcclxuXHQuLi57XHJcblx0XHRlbWFpbDogJ25pY2tpQG1pbmFqLnN1cGVyYmFzcycsXHJcblx0XHR1aWQ6ICdubS1uYW1lbGVzcydcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0TmFtZWRVc2VySW5mbyA9IHtcclxuXHQuLi5kZWZhdWx0VXNlci51c2VySW5mbyxcclxuXHQuLi57XHJcblx0XHRmaXJzdE5hbWU6ICdOaWNraScsXHJcblx0XHRsYXN0TmFtZTogJ01pbmFqJyxcclxuXHRcdHVpZDogJ25tLW5hbWVkJ1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tVc2VyKGFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW10pOiB7IHVzZXJJbmZvOiBVc2VySW5mbyB9IHtcclxuXHRyZXR1cm4gbWVyZ2UoeyB1c2VySW5mbzogeyBhY3Rpdml0aWVzIH0gfSwgZGVmYXVsdFVzZXIpXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0R3JvdXBPd25lclVzZXJJbmZvOiBVc2VySW5mbyA9IHtcclxuXHQuLi5kZWZhdWx0VXNlci51c2VySW5mbyxcclxuXHRpZDogJzInLFxyXG5cdGZpcnN0TmFtZTogJ0phbmUnLFxyXG5cdGxhc3ROYW1lOiAnRG9lJyxcclxuXHRlbWFpbDogJ2phbmVAZ21haWwuY29tJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEdyb3VwT3duZXI6IEdyb3VwVXNlclJvbGUgPSB7XHJcblx0aWQ6ICcxJyxcclxuXHR1c2VySWQ6ICcyJyxcclxuXHRmaXJzdE5hbWU6ICdKYW5lJyxcclxuXHRsYXN0TmFtZTogJ0RvZScsXHJcblx0ZW1haWw6ICdqYW5lQGdtYWlsLmNvbScsXHJcblx0dWlkOiAnamFuZScsXHJcblx0ZW50aXR5SWQ6IDEsXHJcblx0cm9sZTogQkFTRV9ST0xFLkdST1VQX09XTkVSLFxyXG5cdGlzRXh0ZXJuYWw6IGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0TmFtZWxlc3NHcm91cExlYXJuZXI6IEdyb3VwVXNlclJvbGUgPSB7XHJcblx0aWQ6ICcyJyxcclxuXHR1c2VySWQ6ICczJyxcclxuXHRmaXJzdE5hbWU6IG51bGwsXHJcblx0bGFzdE5hbWU6IG51bGwsXHJcblx0ZW1haWw6ICduaWNraUBtaW5hai5zdXBlcmJhc3MnLFxyXG5cdHVpZDogJ25tLW5hbWVsZXNzJyxcclxuXHRlbnRpdHlJZDogMSxcclxuXHRyb2xlOiBCQVNFX1JPTEUuR1JPVVBfTEVBUk5FUixcclxuXHRpc0V4dGVybmFsOiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdE5hbWVkR3JvdXBMZWFybmVyOiBHcm91cFVzZXJSb2xlID0ge1xyXG5cdGlkOiAnMycsXHJcblx0dXNlcklkOiAnNCcsXHJcblx0Zmlyc3ROYW1lOiAnTmlja2knLFxyXG5cdGxhc3ROYW1lOiAnTWluYWonLFxyXG5cdGVtYWlsOiBudWxsLFxyXG5cdHVpZDogJ25tLW5hbWVkJyxcclxuXHRlbnRpdHlJZDogMSxcclxuXHRyb2xlOiBCQVNFX1JPTEUuR1JPVVBfTEVBUk5FUixcclxuXHRpc0V4dGVybmFsOiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEdyb3VwTGVhcm5lcjogR3JvdXBVc2VyUm9sZSA9IHtcclxuXHRpZDogJzQnLFxyXG5cdHVzZXJJZDogJzUnLFxyXG5cdGZpcnN0TmFtZTogJ0pvZScsXHJcblx0bGFzdE5hbWU6ICdTY2htb2UnLFxyXG5cdGVtYWlsOiAnbm9wZUBnbWFpbC5jb20nLFxyXG5cdHVpZDogJ25vcGUnLFxyXG5cdGVudGl0eUlkOiAxLFxyXG5cdHJvbGU6IEJBU0VfUk9MRS5HUk9VUF9MRUFSTkVSLFxyXG5cdGlzRXh0ZXJuYWw6IGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RXh0ZXJuYWxHcm91cExlYXJuZXI6IEdyb3VwVXNlclJvbGUgPSB7XHJcblx0aWQ6ICc1JyxcclxuXHR1c2VySWQ6ICc2JyxcclxuXHRmaXJzdE5hbWU6ICdCb2InLFxyXG5cdGxhc3ROYW1lOiAnTG9ibGF3JyxcclxuXHRlbWFpbDogJ2JvYmxvYmxhd0BsYXdibG9nLmNvbScsXHJcblx0dWlkOiAnYm9ibG9ibGF3JyxcclxuXHRlbnRpdHlJZDogMSxcclxuXHRyb2xlOiBCQVNFX1JPTEUuR1JPVVBfTEVBUk5FUixcclxuXHRpc0V4dGVybmFsOiB0cnVlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0R3JvdXBHcmFkZXI6IEdyb3VwVXNlclJvbGUgPSB7XHJcblx0aWQ6ICc2JyxcclxuXHR1c2VySWQ6ICc3JyxcclxuXHRmaXJzdE5hbWU6ICdHcmFkZXInLFxyXG5cdGxhc3ROYW1lOiAnTWNHcmFkZWZhY2UnLFxyXG5cdGVtYWlsOiAnZ3JhZGVyQGdtYWlsLmNvbScsXHJcblx0dWlkOiAnZ3JhZGVyJyxcclxuXHRlbnRpdHlJZDogMSxcclxuXHRyb2xlOiBCQVNFX1JPTEUuR1JPVVBfR1JBREVSLFxyXG5cdGlzRXh0ZXJuYWw6IGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0R3JvdXBVc2VyUm9sZXMgPSBbZGVmYXVsdEdyb3VwT3duZXIsIGRlZmF1bHRHcm91cExlYXJuZXIsIGRlZmF1bHRFeHRlcm5hbEdyb3VwTGVhcm5lcl1cclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0QWRtaW5Vc2VyUm9sZXM6IFVzZXJSb2xlW10gPSBbXHJcblx0e1xyXG5cdFx0aWQ6ICcxJyxcclxuXHRcdGZpcnN0TmFtZTogJ0pvZScsXHJcblx0XHRsYXN0TmFtZTogJ1NjaG1vJyxcclxuXHRcdGVtYWlsOiBudWxsLFxyXG5cdFx0dWlkOiBudWxsLFxyXG5cdFx0cm9sZTogQkFTRV9ST0xFLkFETUlOXHJcblx0fSxcclxuXHR7XHJcblx0XHRpZDogJzInLFxyXG5cdFx0Zmlyc3ROYW1lOiBudWxsLFxyXG5cdFx0bGFzdE5hbWU6IG51bGwsXHJcblx0XHRlbWFpbDogJ2Nhcmx5c2ltb25AY2xvdWRzLmluLmNvZmZlZScsXHJcblx0XHR1aWQ6ICdjYXJseXNpbW9uJyxcclxuXHRcdHJvbGU6IEJBU0VfUk9MRS5BRE1JTlxyXG5cdH1cclxuXVxyXG5cclxuLy8jZW5kcmVnaW9uIFVzZXJzXHJcblxyXG4vLyNyZWdpb24gR3JvdXBzXHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEdyb3VwOiBHcm91cCA9IHtcclxuXHRyb2xlczogW10sXHJcblx0YWN0aXZpdGllczogW10sXHJcblx0b3duZXJzOiBbXHJcblx0XHR7XHJcblx0XHRcdGlkOiAnMScsXHJcblx0XHRcdGVudGl0eUlkOiAxLFxyXG5cdFx0XHRmaXJzdE5hbWU6ICdJbnN0cnVjdG9yJyxcclxuXHRcdFx0bGFzdE5hbWU6ICdNY0luc3RydWN0b3InLFxyXG5cdFx0XHRlbWFpbDogbnVsbCxcclxuXHRcdFx0dWlkOiBudWxsXHJcblx0XHR9XHJcblx0XSxcclxuXHRncmFkZXJzOiBbXSxcclxuXHRpZDogMSxcclxuXHRuYW1lOiAnTWNHcm91cCcsXHJcblx0ZXh0ZXJuYWxUZXJtSWQ6IG51bGwsXHJcblx0c3RhcnREYXRlOiBjdXJyZW50RGF0ZXMuc3RhcnREYXRlLFxyXG5cdGVuZERhdGU6IGN1cnJlbnREYXRlcy5lbmREYXRlLFxyXG5cdGlzRGVsZXRlZDogZmFsc2UsXHJcblx0aXNSb3N0ZXJTeW5jRW5hYmxlZDogZmFsc2UsXHJcblx0ZXh0ZXJuYWxHcm91cHM6IFtdXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb2NrR3JvdXBzKGFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW10sIHJvbGVzOiBzdHJpbmdbXSA9IFtdKTogTW9kZWxDb2xsZWN0aW9uPEdyb3VwPiB7XHJcblx0cmV0dXJuIHsgJzEnOiBtZXJnZSh7IGFjdGl2aXRpZXMsIHJvbGVzIH0sIGRlZmF1bHRHcm91cCkgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9ja1N5bmNlZEdyb3VwcyhhY3Rpdml0aWVzOiBzdHJpbmdbXSA9IFtdLCByb2xlczogc3RyaW5nW10gPSBbXSk6IE1vZGVsQ29sbGVjdGlvbjxHcm91cD4ge1xyXG5cdGNvbnN0IHJvc3RlclN5bmNFbmFibGVkR3JvdXA6IEdyb3VwID0gbWVyZ2UoeyBhY3Rpdml0aWVzLCByb2xlcyB9LCBkZWZhdWx0R3JvdXApXHJcblx0cm9zdGVyU3luY0VuYWJsZWRHcm91cC5pc1Jvc3RlclN5bmNFbmFibGVkID0gdHJ1ZVxyXG5cdHJldHVybiB7ICcxJzogcm9zdGVyU3luY0VuYWJsZWRHcm91cCB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb2NrTHRpR3JvdXBzKGFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW10sIHJvbGVzOiBzdHJpbmdbXSA9IFtdKTogTW9kZWxDb2xsZWN0aW9uPEdyb3VwPiB7XHJcblx0Y29uc3QgbHRpR3JvdXA6IEdyb3VwID0gbWVyZ2UoeyBhY3Rpdml0aWVzLCByb2xlcyB9LCBkZWZhdWx0R3JvdXApXHJcblx0bHRpR3JvdXAuaXNSb3N0ZXJTeW5jRW5hYmxlZCA9IHRydWVcclxuXHRsdGlHcm91cC5leHRlcm5hbEdyb3VwcyA9IFtcclxuXHRcdHtcclxuXHRcdFx0aWQ6IDEsXHJcblx0XHRcdGV4dGVybmFsUHJvdmlkZXJJZDogMixcclxuXHRcdFx0Z3JvdXBJZDogMSxcclxuXHRcdFx0dXNlcklkOiAnMScsXHJcblx0XHRcdG5hbWU6ICdMVEkgRXh0ZXJuYWxHcm91cCcsXHJcblx0XHRcdGRlc2NyaXB0aW9uOiAnTFRJIDEwMScsXHJcblx0XHRcdGdyYWRlc1VybDogJ3d3dy5sdGkub3JnJyxcclxuXHRcdFx0cm9zdGVyVXJsOiBudWxsLFxyXG5cdFx0XHRpc0F1dG9HcmFkZVB1c2hFbmFibGVkOiBmYWxzZSxcclxuXHRcdFx0ZXh0ZXJuYWxJZDogJzEnLFxyXG5cdFx0XHR0eXBlbmFtZTogJ0V4dGVybmFsR3JvdXAnXHJcblx0XHR9XHJcblx0XVxyXG5cdHJldHVybiB7ICcxJzogbHRpR3JvdXAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Rlcm1Hcm91cHMoYWN0aXZpdGllczogc3RyaW5nW10gPSBbXSwgcm9sZXM6IHN0cmluZ1tdID0gW10pOiBNb2RlbENvbGxlY3Rpb248R3JvdXA+IHtcclxuXHRjb25zdCBncm91cDogR3JvdXAgPSBtZXJnZSh7IGFjdGl2aXRpZXMsIHJvbGVzIH0sIGRlZmF1bHRHcm91cClcclxuXHRncm91cC5zdGFydERhdGUgPSBudWxsXHJcblx0Z3JvdXAuZW5kRGF0ZSA9IG51bGxcclxuXHRncm91cC5leHRlcm5hbFRlcm1JZCA9IDFcclxuXHRyZXR1cm4geyAnMSc6IGdyb3VwIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUZXJtQW5kVW5pVGltZUdyb3VwcyhhY3Rpdml0aWVzOiBzdHJpbmdbXSA9IFtdLCByb2xlczogc3RyaW5nW10gPSBbXSk6IE1vZGVsQ29sbGVjdGlvbjxHcm91cD4ge1xyXG5cdGNvbnN0IGdyb3VwOiBHcm91cCA9IG1lcmdlKHsgYWN0aXZpdGllcywgcm9sZXMgfSwgZGVmYXVsdEdyb3VwKVxyXG5cdGdyb3VwLnN0YXJ0RGF0ZSA9IG51bGxcclxuXHRncm91cC5lbmREYXRlID0gbnVsbFxyXG5cdGdyb3VwLmV4dGVybmFsVGVybUlkID0gMVxyXG5cdGdyb3VwLmV4dGVybmFsR3JvdXBzID0gW1xyXG5cdFx0e1xyXG5cdFx0XHRpZDogMSxcclxuXHRcdFx0ZXh0ZXJuYWxQcm92aWRlcklkOiAxLFxyXG5cdFx0XHRncm91cElkOiAxLFxyXG5cdFx0XHR1c2VySWQ6ICcxJyxcclxuXHRcdFx0bmFtZTogJ1VuaVRpbWUgRXh0ZXJuYWxHcm91cCcsXHJcblx0XHRcdGRlc2NyaXB0aW9uOiAnVW5pVGltZSAxMDEnLFxyXG5cdFx0XHRncmFkZXNVcmw6IG51bGwsXHJcblx0XHRcdHJvc3RlclVybDogbnVsbCxcclxuXHRcdFx0aXNBdXRvR3JhZGVQdXNoRW5hYmxlZDogZmFsc2UsXHJcblx0XHRcdGV4dGVybmFsSWQ6ICcxJyxcclxuXHRcdFx0dHlwZW5hbWU6ICdFeHRlcm5hbEdyb3VwJ1xyXG5cdFx0fVxyXG5cdF1cclxuXHRyZXR1cm4geyAnMSc6IGdyb3VwIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tQYXN0R3JvdXBzKGFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW10sIHJvbGVzOiBzdHJpbmdbXSA9IFtdKTogTW9kZWxDb2xsZWN0aW9uPEdyb3VwPiB7XHJcblx0Y29uc3QgcGFzdEdyb3VwOiBHcm91cCA9IG1lcmdlKHsgYWN0aXZpdGllcywgcm9sZXMgfSwgZGVmYXVsdEdyb3VwLCBwYXN0RGF0ZXMpXHJcblx0cmV0dXJuIHsgJzEnOiBwYXN0R3JvdXAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Bhc3RBbmRDdXJyZW50R3JvdXBzKGFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW10sIHJvbGVzOiBzdHJpbmdbXSA9IFtdKTogTW9kZWxDb2xsZWN0aW9uPEdyb3VwPiB7XHJcblx0Y29uc3QgcGFzdEdyb3VwOiBHcm91cCA9IG1lcmdlKHsgYWN0aXZpdGllcywgcm9sZXMgfSwgZGVmYXVsdEdyb3VwLCBwYXN0RGF0ZXMpXHJcblx0Y29uc3QgY3VycmVudEdyb3VwOiBHcm91cCA9IG1lcmdlKFxyXG5cdFx0eyBhY3Rpdml0aWVzLCByb2xlcyB9LFxyXG5cdFx0ZGVmYXVsdEdyb3VwLFxyXG5cdFx0e1xyXG5cdFx0XHRpZDogJzInXHJcblx0XHR9LFxyXG5cdFx0Y3VycmVudERhdGVzXHJcblx0KVxyXG5cdHJldHVybiB7ICcxJzogcGFzdEdyb3VwLCAnMic6IGN1cnJlbnRHcm91cCB9XHJcbn1cclxuXHJcbi8vI2VuZHJlZ2lvbiBHcm91cHNcclxuXHJcbi8vI3JlZ2lvbiBFeHRlcm5hbFRlcm1zICsgRXh0ZXJuYWxQcm92aWRlcnNcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RXh0ZXJuYWxQcm92aWRlcnM6IE1vZGVsQ29sbGVjdGlvbjxFeHRlcm5hbFByb3ZpZGVyPiA9IHtcclxuXHQnMSc6IHtcclxuXHRcdGlkOiAxLFxyXG5cdFx0dHlwZW5hbWU6IEVYVEVSTkFMX1BST1ZJREVSX1RZUEUuVU5JVElNRSxcclxuXHRcdHRlcm1TeW5jRW5hYmxlZDogdHJ1ZSxcclxuXHRcdHJvc3RlclN5bmNFbmFibGVkOiB0cnVlLFxyXG5cdFx0Z3JhZGVQdXNoRW5hYmxlZDogZmFsc2UsXHJcblx0XHRzaG91bGREaXNwbGF5Q3JlYXRlTm9uTHRpR3JvdXBBbGVydDogZmFsc2VcclxuXHR9LFxyXG5cdCcyJzoge1xyXG5cdFx0aWQ6IDIsXHJcblx0XHR0eXBlbmFtZTogRVhURVJOQUxfUFJPVklERVJfVFlQRS5MVEksXHJcblx0XHR0ZXJtU3luY0VuYWJsZWQ6IGZhbHNlLFxyXG5cdFx0cm9zdGVyU3luY0VuYWJsZWQ6IGZhbHNlLFxyXG5cdFx0Z3JhZGVQdXNoRW5hYmxlZDogdHJ1ZSxcclxuXHRcdHNob3VsZERpc3BsYXlDcmVhdGVOb25MdGlHcm91cEFsZXJ0OiB0cnVlXHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEV4dGVybmFsVGVybXM6IE1vZGVsQ29sbGVjdGlvbjxFeHRlcm5hbFRlcm0+ID0ge1xyXG5cdCcxJzoge1xyXG5cdFx0aWQ6IDEsXHJcblx0XHRleHRlcm5hbFByb3ZpZGVySWQ6IDEsXHJcblx0XHRleHRlcm5hbElkOiAnZm9vJyxcclxuXHRcdG5hbWU6ICdVbmlUaW1lIEZhbGwgVGVybScsXHJcblx0XHRzdGFydERhdGU6IGN1cnJlbnREYXRlcy5zdGFydERhdGUsXHJcblx0XHRlbmREYXRlOiBjdXJyZW50RGF0ZXMuZW5kRGF0ZVxyXG5cdH1cclxufVxyXG5cclxuLy8jZW5kcmVnaW9uIEV4dGVybmFsVGVybXMgKyBFeHRlcm5hbFByb3ZpZGVyc1xyXG5cclxuLy8jcmVnaW9uIEZldGNoRXJyb3JEYXRhXHJcblxyXG5leHBvcnQgY29uc3QgaW50ZXJuYWxTZXJ2ZXJFcnJvckRhdGE6IEZldGNoRXJyb3JEYXRhID0ge1xyXG5cdHN0YXR1czogSFRUUF9TVEFUVVNfQ09ERS5JTlRFUk5BTF9TRVJWRVJfRVJST1IsXHJcblx0dGl0bGU6ICdFcnJvcicsXHJcblx0ZGV0YWlsOiAnQW4gZXJyb3IgaGFzIG9jY3VycmVkLidcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHJlcXVlc3RUaW1lZE91dEVycm9yRGF0YTogRmV0Y2hFcnJvckRhdGEgPSB7XHJcblx0c3RhdHVzOiBIVFRQX1NUQVRVU19DT0RFLlJFUVVFU1RfVElNRU9VVCxcclxuXHR0aXRsZTogJ1JlcXVlc3QgVGltZW91dCcsXHJcblx0ZGV0YWlsOiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBmb3JiaWRkZW5FcnJvckRhdGE6IEZldGNoRXJyb3JEYXRhID0ge1xyXG5cdHN0YXR1czogSFRUUF9TVEFUVVNfQ09ERS5GT1JCSURERU4sXHJcblx0dGl0bGU6ICdGb3JiaWRkZW4nLFxyXG5cdGRldGFpbDogJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBkZW5pZWQuIFlvdSBkbyBub3QgaGF2ZSBhY2Nlc3MuJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdW5hdXRob3JpemVkRXJyb3JEYXRhOiBGZXRjaEVycm9yRGF0YSA9IHtcclxuXHRzdGF0dXM6IEhUVFBfU1RBVFVTX0NPREUuVU5BVVRIT1JJWkVELFxyXG5cdHRpdGxlOiAnVW5hdXRob3JpemVkJyxcclxuXHRkZXRhaWw6ICdZb3VyIHJlcXVlc3QgaXMgdW5hdXRob3JpemVkLiBZb3UgbXVzdCBhdXRoZW50aWNhdGUuJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYmFkUmVxdWVzdEVycm9yRGF0YTogRmV0Y2hFcnJvckRhdGEgPSB7XHJcblx0c3RhdHVzOiBIVFRQX1NUQVRVU19DT0RFLkJBRF9SRVFVRVNULFxyXG5cdHRpdGxlOiAnQmFkIFJlcXVlc3QnLFxyXG5cdGRldGFpbDogJ1JlYXNvbnMnXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBiYWRSZXF1ZXN0RnVsbEVycm9yRGF0YTogRmV0Y2hFcnJvckRhdGEgPSB7XHJcblx0c3RhdHVzOiBIVFRQX1NUQVRVU19DT0RFLkJBRF9SRVFVRVNULFxyXG5cdHRpdGxlOiAnQmFkIFJlcXVlc3QnLFxyXG5cdGRldGFpbDogJ1JlYXNvbnMnLFxyXG5cdC8vIGluY2x1ZGUgYWxsIG9wdGlvbmFsIHByb3BlcnRpZXNcclxuXHR0eXBlOiAnaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjUuMScsXHJcblx0aW5zdGFuY2U6ICdpbnN0YW5jZScsXHJcblx0dHJhY2VJZDogJzAwLTM5MTRiNDNiNDUyYjk0ZTNmZjRjMzI3OTIyODgwYTAzLTRjZmVkNmZlNDJhZmRkOGYtMDAnLFxyXG5cdGVycm9yczoge1xyXG5cdFx0cGFzc3dvcmQ6IFsnVGhlIFBhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgNiBjaGFyYWN0ZXJzIGxvbmcuJ11cclxuXHR9XHJcbn1cclxuXHJcbi8vI2VuZHJlZ2lvbiBGZXRjaEVycm9yRGF0YVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxxQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBYUEsSUFBQUcsU0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBSixPQUFBO0FBRUE7O0FBRU8sTUFBTUssdUJBQXlDLEdBQUFDLE9BQUEsQ0FBQUQsdUJBQUEsR0FBRztFQUN4REUsUUFBUSxFQUFFLE1BQU07RUFDaEJDLFFBQVEsRUFBRSxXQUFXO0VBQ3JCQyxJQUFJLEVBQUVB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