@commercetools-frontend/application-shell 21.23.10 → 21.24.1

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 (208) hide show
  1. package/dist/application-entry-point-47d5c548.cjs.dev.js +116 -0
  2. package/dist/application-entry-point-5619d5aa.cjs.prod.js +99 -0
  3. package/dist/application-entry-point-dc726674.esm.js +101 -0
  4. package/dist/{box-dd9e7e68.esm.js → box-4395623b.esm.js} +1 -3
  5. package/dist/{box-fdb2ccb6.cjs.dev.js → box-6b5be9a9.cjs.dev.js} +1 -3
  6. package/dist/{box-d849ea03.cjs.prod.js → box-8850277f.cjs.prod.js} +1 -3
  7. package/dist/{cart-ad0aba9b.cjs.prod.js → cart-0698b97d.cjs.prod.js} +1 -3
  8. package/dist/{cart-b92f3a8e.cjs.dev.js → cart-41f0b7bc.cjs.dev.js} +1 -3
  9. package/dist/{cart-167fea3b.esm.js → cart-a49faf67.esm.js} +1 -3
  10. package/dist/commercetools-frontend-application-shell.cjs.dev.js +49 -68
  11. package/dist/commercetools-frontend-application-shell.cjs.prod.js +49 -68
  12. package/dist/commercetools-frontend-application-shell.esm.js +39 -58
  13. package/dist/configure-apollo-942ef373.cjs.prod.js +922 -0
  14. package/dist/configure-apollo-a6f03ff8.cjs.dev.js +930 -0
  15. package/dist/configure-apollo-cc0b1668.esm.js +873 -0
  16. package/dist/{connected-square-4743b7de.esm.js → connected-square-3cac6bd7.esm.js} +1 -3
  17. package/dist/connected-square-47233754.cjs.dev.js +32 -0
  18. package/dist/connected-square-b2e25621.cjs.prod.js +32 -0
  19. package/dist/{constants-69249abd.esm.js → constants-7f04db3f.esm.js} +9 -9
  20. package/dist/{constants-88fb9ef8.cjs.prod.js → constants-e6409334.cjs.prod.js} +8 -8
  21. package/dist/{constants-c2d56f3d.cjs.dev.js → constants-e6f058e5.cjs.dev.js} +8 -8
  22. package/dist/declarations/src/apollo-links/utils.d.ts +2 -2
  23. package/dist/declarations/src/components/application-entry-point/application-entry-point.d.ts +4 -4
  24. package/dist/declarations/src/components/application-shell/application-shell.d.ts +7 -15
  25. package/dist/declarations/src/components/application-shell-authenticated/application-shell-authenticated.d.ts +21 -0
  26. package/dist/declarations/src/components/application-shell-provider/application-shell-provider.d.ts +6 -7
  27. package/dist/declarations/src/components/application-shell-provider/use-coerced-environment-values.d.ts +1 -23
  28. package/dist/declarations/src/components/authenticated/authenticated.d.ts +2 -2
  29. package/dist/declarations/src/components/authenticated/oidc-callback.async.d.ts +6 -0
  30. package/dist/declarations/src/components/authenticated/oidc-callback.d.ts +2 -2
  31. package/dist/declarations/src/components/configure-intl-provider/configure-intl-provider.d.ts +1 -1
  32. package/dist/declarations/src/components/error-apologizer/index.d.ts +6 -1
  33. package/dist/declarations/src/components/fetch-project/fetch-project.d.ts +4 -4
  34. package/dist/declarations/src/components/fetch-user/fetch-user.d.ts +3 -3
  35. package/dist/declarations/src/components/inject-reducers/inject-reducers.d.ts +1 -1
  36. package/dist/declarations/src/components/navbar/index.d.ts +100 -1
  37. package/dist/declarations/src/components/navbar/loading-navbar.d.ts +5 -0
  38. package/dist/declarations/src/components/navbar/menu-items.d.ts +99 -0
  39. package/dist/declarations/src/components/navbar/navbar.d.ts +6 -15
  40. package/dist/declarations/src/components/project-container/index.d.ts +78 -1
  41. package/dist/declarations/src/components/project-container/project-container.d.ts +6 -8
  42. package/dist/declarations/src/components/quick-access/butler-command/butler-command.d.ts +1 -1
  43. package/dist/declarations/src/components/quick-access/index.d.ts +2 -2
  44. package/dist/declarations/src/components/quick-access/types.d.ts +1 -1
  45. package/dist/declarations/src/components/redirect-to-login/index.d.ts +6 -0
  46. package/dist/declarations/src/components/redirect-to-logout/index.d.ts +5 -0
  47. package/dist/declarations/src/components/redirect-to-project-create/index.d.ts +6 -1
  48. package/dist/declarations/src/components/requests-in-flight-loader/index.d.ts +6 -1
  49. package/dist/declarations/src/components/route-catch-all/index.d.ts +3 -1
  50. package/dist/declarations/src/components/setup-flop-flip-provider/setup-flop-flip-provider.d.ts +3 -3
  51. package/dist/declarations/src/components/suspended-route/suspended-route.d.ts +1 -1
  52. package/dist/declarations/src/components/user-settings-menu/index.d.ts +12 -1
  53. package/dist/declarations/src/components/version-tracker/index.d.ts +6 -1
  54. package/dist/declarations/src/hooks/apollo-hooks/apollo-hooks.d.ts +1 -1
  55. package/dist/declarations/src/test-utils/test-utils.d.ts +2 -2
  56. package/dist/declarations/src/types/generated/mc.d.ts +3 -3
  57. package/dist/declarations/src/utils/get-mc-origin/get-mc-origin.d.ts +2 -0
  58. package/dist/declarations/src/utils/get-mc-origin/index.d.ts +1 -0
  59. package/dist/error-apologizer-c336db61.cjs.dev.js +56 -0
  60. package/dist/error-apologizer-c55ec6f7.cjs.prod.js +56 -0
  61. package/dist/error-apologizer-f8772b68.esm.js +42 -0
  62. package/dist/gear-2890f7fb.cjs.prod.js +32 -0
  63. package/dist/{gear-8418cd46.esm.js → gear-300dd24c.esm.js} +1 -3
  64. package/dist/gear-e8014c5a.cjs.dev.js +32 -0
  65. package/dist/get-mc-origin-314b77a2.cjs.dev.js +57 -0
  66. package/dist/get-mc-origin-5df60933.esm.js +50 -0
  67. package/dist/get-mc-origin-7968e04f.cjs.prod.js +57 -0
  68. package/dist/heart-000a023d.cjs.prod.js +32 -0
  69. package/dist/{heart-48c28091.esm.js → heart-dded66b4.esm.js} +1 -3
  70. package/dist/heart-f21b7d39.cjs.dev.js +32 -0
  71. package/dist/index-3765c4c9.cjs.prod.js +2870 -0
  72. package/dist/index-3fdf5681.esm.js +2970 -0
  73. package/dist/index-b9b8b690.cjs.dev.js +3054 -0
  74. package/dist/{list-with-search-c154a56e.esm.js → list-with-search-a3302710.esm.js} +1 -3
  75. package/dist/list-with-search-a5b72b33.cjs.prod.js +32 -0
  76. package/dist/list-with-search-ee796e9e.cjs.dev.js +32 -0
  77. package/dist/navbar-08a76df9.cjs.dev.js +670 -0
  78. package/dist/navbar-5384b0c3.esm.js +650 -0
  79. package/dist/navbar-c02843fb.cjs.prod.js +649 -0
  80. package/dist/oidc-0638d0c8.cjs.dev.js +67 -0
  81. package/dist/oidc-10fa96f0.esm.js +59 -0
  82. package/dist/oidc-540a091a.cjs.prod.js +67 -0
  83. package/dist/oidc-callback-152dc622.esm.js +240 -0
  84. package/dist/oidc-callback-784c3a39.cjs.prod.js +251 -0
  85. package/dist/oidc-callback-dc8682c0.cjs.dev.js +254 -0
  86. package/dist/paperclip-23d1e69c.cjs.prod.js +32 -0
  87. package/dist/{paperclip-18785dda.esm.js → paperclip-a61112e8.esm.js} +1 -3
  88. package/dist/paperclip-d653c134.cjs.dev.js +32 -0
  89. package/dist/plugin-0ee6aee4.cjs.dev.js +32 -0
  90. package/dist/{plugin-53c047bb.esm.js → plugin-3d353a5b.esm.js} +1 -3
  91. package/dist/plugin-7e57f237.cjs.prod.js +32 -0
  92. package/dist/project-container-6f0ea904.cjs.dev.js +387 -0
  93. package/dist/project-container-b6b2f6b2.esm.js +368 -0
  94. package/dist/project-container-bf8678e2.cjs.prod.js +369 -0
  95. package/dist/{project-expired-d8eaa253.esm.js → project-expired-6b9b6feb.esm.js} +47 -68
  96. package/dist/{project-expired-adce523b.cjs.dev.js → project-expired-9d71c314.cjs.dev.js} +47 -68
  97. package/dist/{project-expired-576a8329.cjs.prod.js → project-expired-d75d9e84.cjs.prod.js} +47 -68
  98. package/dist/{project-not-found-9a9753f2.cjs.dev.js → project-not-found-4b5b9479.cjs.prod.js} +42 -61
  99. package/dist/{project-not-found-8208c8f1.esm.js → project-not-found-c4634d60.esm.js} +42 -61
  100. package/dist/{project-not-found-daa5200b.cjs.prod.js → project-not-found-c977dbb0.cjs.dev.js} +42 -61
  101. package/dist/{project-not-initialized-4aeafe19.cjs.dev.js → project-not-initialized-4d0badf3.cjs.prod.js} +47 -68
  102. package/dist/{project-not-initialized-3408e87f.esm.js → project-not-initialized-a2f7b46e.esm.js} +47 -68
  103. package/dist/{project-not-initialized-5b416bcf.cjs.prod.js → project-not-initialized-e1533577.cjs.dev.js} +47 -68
  104. package/dist/{project-suspended-d3a6001d.cjs.dev.js → project-suspended-9027fc60.cjs.prod.js} +44 -63
  105. package/dist/{project-suspended-dc9ace34.cjs.prod.js → project-suspended-9e084c21.cjs.dev.js} +44 -63
  106. package/dist/{project-suspended-a7edc962.esm.js → project-suspended-f3d78447.esm.js} +44 -63
  107. package/dist/{quick-access-f42a8e0a.cjs.prod.js → quick-access-517ad7e1.cjs.prod.js} +573 -957
  108. package/dist/quick-access-82e1c9aa.esm.js +1907 -0
  109. package/dist/quick-access-8b2b678f.cjs.dev.js +1937 -0
  110. package/dist/redirect-to-login-1b892ab5.esm.js +147 -0
  111. package/dist/redirect-to-login-2be0e5db.cjs.prod.js +149 -0
  112. package/dist/redirect-to-login-64230f67.cjs.dev.js +149 -0
  113. package/dist/redirect-to-logout-15810ffb.cjs.dev.js +151 -0
  114. package/dist/redirect-to-logout-17e4ba2c.cjs.prod.js +151 -0
  115. package/dist/redirect-to-logout-80e772d1.esm.js +138 -0
  116. package/dist/redirect-to-project-create-048efa71.cjs.prod.js +61 -0
  117. package/dist/redirect-to-project-create-052f293e.esm.js +52 -0
  118. package/dist/redirect-to-project-create-f0e7b35e.cjs.dev.js +61 -0
  119. package/dist/{gear-28ff4f04.cjs.dev.js → redirector-0d98f9df.cjs.dev.js} +44 -5
  120. package/dist/redirector-47a6be71.esm.js +58 -0
  121. package/dist/{gear-6f8c30e3.cjs.prod.js → redirector-77ce2f5c.cjs.prod.js} +44 -5
  122. package/dist/requests-in-flight-loader-5329586b.esm.js +129 -0
  123. package/dist/requests-in-flight-loader-88f14402.cjs.dev.js +144 -0
  124. package/dist/requests-in-flight-loader-a7bc4e12.cjs.prod.js +144 -0
  125. package/dist/rocket-3e3f0a98.cjs.prod.js +32 -0
  126. package/dist/{rocket-ba116b5e.esm.js → rocket-4b088727.esm.js} +1 -3
  127. package/dist/rocket-95b6858d.cjs.dev.js +32 -0
  128. package/dist/route-catch-all-01cf0095.esm.js +41 -0
  129. package/dist/route-catch-all-3b490df1.cjs.prod.js +43 -0
  130. package/dist/route-catch-all-9ac99936.cjs.dev.js +43 -0
  131. package/dist/{service-page-project-switcher-49afafeb.cjs.prod.js → service-page-project-switcher-39dcfee8.cjs.prod.js} +5 -7
  132. package/dist/{service-page-project-switcher-866b2139.cjs.dev.js → service-page-project-switcher-7698339b.cjs.dev.js} +6 -8
  133. package/dist/{service-page-project-switcher-365c4c10.esm.js → service-page-project-switcher-fd30959b.esm.js} +6 -8
  134. package/dist/{speedometer-c1b94505.esm.js → speedometer-08a11d5a.esm.js} +1 -3
  135. package/dist/speedometer-2881cef6.cjs.prod.js +32 -0
  136. package/dist/speedometer-54f872f2.cjs.dev.js +32 -0
  137. package/dist/{star-da9123e0.esm.js → star-15244db1.esm.js} +1 -3
  138. package/dist/star-52bf7a64.cjs.dev.js +32 -0
  139. package/dist/star-f8502efb.cjs.prod.js +32 -0
  140. package/dist/tag-multi-1d1553b6.cjs.dev.js +32 -0
  141. package/dist/{tag-multi-c650b738.esm.js → tag-multi-3be995ac.esm.js} +1 -3
  142. package/dist/tag-multi-f9acb1c2.cjs.prod.js +32 -0
  143. package/dist/tree-structure-4650688d.cjs.dev.js +32 -0
  144. package/dist/{tree-structure-6af6fc3a.esm.js → tree-structure-c8753526.esm.js} +1 -3
  145. package/dist/tree-structure-f24ee3f6.cjs.prod.js +32 -0
  146. package/dist/use-applications-menu-4abb5796.esm.js +172 -0
  147. package/dist/use-applications-menu-68d83733.cjs.dev.js +188 -0
  148. package/dist/use-applications-menu-6b872b83.cjs.prod.js +188 -0
  149. package/dist/use-is-served-by-proxy-2b4916e5.cjs.dev.js +42 -0
  150. package/dist/use-is-served-by-proxy-499bfa16.esm.js +39 -0
  151. package/dist/use-is-served-by-proxy-51e76976.cjs.prod.js +42 -0
  152. package/dist/{user-filled-41729d77.esm.js → user-filled-2dc4e79e.esm.js} +1 -3
  153. package/dist/user-filled-2e6cb25e.cjs.dev.js +32 -0
  154. package/dist/user-filled-815b49a0.cjs.prod.js +32 -0
  155. package/dist/user-settings-menu-79d4cb1e.cjs.dev.js +523 -0
  156. package/dist/user-settings-menu-7bf6f146.cjs.prod.js +496 -0
  157. package/dist/user-settings-menu-ad7c27f0.esm.js +497 -0
  158. package/dist/version-tracker-20bb239d.esm.js +101 -0
  159. package/dist/version-tracker-69607d15.cjs.dev.js +107 -0
  160. package/dist/version-tracker-80e0f8f6.cjs.prod.js +107 -0
  161. package/dist/world-973090a5.cjs.dev.js +32 -0
  162. package/dist/{world-d91df1ee.esm.js → world-c5ea311a.esm.js} +1 -3
  163. package/dist/world-e1f9dbf8.cjs.prod.js +32 -0
  164. package/package.json +27 -27
  165. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.dev.js +2 -3
  166. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.prod.js +2 -3
  167. package/ssr/dist/commercetools-frontend-application-shell-ssr.esm.js +2 -3
  168. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.dev.js +182 -215
  169. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.prod.js +182 -215
  170. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.esm.js +173 -206
  171. package/dist/application-entry-point-307baa50.cjs.prod.js +0 -1225
  172. package/dist/application-entry-point-3e14d46d.cjs.dev.js +0 -1250
  173. package/dist/application-entry-point-8d923438.esm.js +0 -1180
  174. package/dist/connected-square-abf36852.cjs.prod.js +0 -34
  175. package/dist/connected-square-ac52014f.cjs.dev.js +0 -34
  176. package/dist/declarations/src/components/application-shell/helpers.d.ts +0 -1
  177. package/dist/heart-33cd94c6.cjs.prod.js +0 -34
  178. package/dist/heart-fb31cf30.cjs.dev.js +0 -34
  179. package/dist/index-284fb405.esm.js +0 -4809
  180. package/dist/index-37414a3f.cjs.prod.js +0 -4643
  181. package/dist/index-ea32a85e.cjs.dev.js +0 -4888
  182. package/dist/list-with-search-34cd926c.cjs.dev.js +0 -34
  183. package/dist/list-with-search-a0b22169.cjs.prod.js +0 -34
  184. package/dist/oidc-1c91f5ee.cjs.prod.js +0 -67
  185. package/dist/oidc-5b2e4f8f.cjs.dev.js +0 -67
  186. package/dist/oidc-77749f1b.esm.js +0 -59
  187. package/dist/paperclip-2cd45b86.cjs.dev.js +0 -34
  188. package/dist/paperclip-b1b806ab.cjs.prod.js +0 -34
  189. package/dist/plugin-7cb7827e.cjs.dev.js +0 -34
  190. package/dist/plugin-e97ae3e6.cjs.prod.js +0 -34
  191. package/dist/quick-access-457a9f41.esm.js +0 -2290
  192. package/dist/quick-access-d553524e.cjs.dev.js +0 -2321
  193. package/dist/rocket-37c1aa11.cjs.dev.js +0 -34
  194. package/dist/rocket-b2dbda7f.cjs.prod.js +0 -34
  195. package/dist/speedometer-13b393fb.cjs.dev.js +0 -34
  196. package/dist/speedometer-1e69fd13.cjs.prod.js +0 -34
  197. package/dist/star-ab4be629.cjs.prod.js +0 -34
  198. package/dist/star-e165111e.cjs.dev.js +0 -34
  199. package/dist/tag-multi-5f498a7d.cjs.dev.js +0 -34
  200. package/dist/tag-multi-fb817131.cjs.prod.js +0 -34
  201. package/dist/tree-structure-779fcc36.cjs.prod.js +0 -34
  202. package/dist/tree-structure-ed6cdff8.cjs.dev.js +0 -34
  203. package/dist/user-filled-384a2eaf.cjs.prod.js +0 -34
  204. package/dist/user-filled-53d2eae0.cjs.dev.js +0 -34
  205. package/dist/world-12528632.cjs.prod.js +0 -34
  206. package/dist/world-6471d9f6.cjs.dev.js +0 -34
  207. /package/dist/declarations/src/components/{application-shell → redirect-to-login}/redirect-to-login.d.ts +0 -0
  208. /package/dist/declarations/src/components/{application-shell → redirect-to-logout}/redirect-to-logout.d.ts +0 -0
@@ -0,0 +1,1907 @@
1
+ import _taggedTemplateLiteral from '@babel/runtime-corejs3/helpers/esm/taggedTemplateLiteral';
2
+ import _slicedToArray from '@babel/runtime-corejs3/helpers/esm/slicedToArray';
3
+ import _pt from 'prop-types';
4
+ import _mapInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/map';
5
+ import _Array$isArray from '@babel/runtime-corejs3/core-js-stable/array/is-array';
6
+ import _JSON$stringify from '@babel/runtime-corejs3/core-js-stable/json/stringify';
7
+ import _concatInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/concat';
8
+ import _forEachInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/for-each';
9
+ import _trimInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/trim';
10
+ import _startsWithInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/starts-with';
11
+ import { useReducer, useRef, useCallback, useState, useEffect } from 'react';
12
+ import { useApolloClient } from '@apollo/client/react';
13
+ import { useFeatureToggles } from '@flopflip/react-broadcast';
14
+ import { oneLineTrim } from 'common-tags';
15
+ import debounce from 'debounce-async';
16
+ import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
17
+ import { useHistory } from 'react-router-dom';
18
+ import { useApplicationContext } from '@commercetools-frontend/application-shell-connectors';
19
+ import { SUPPORT_PORTAL_URL, LOGOUT_REASONS, GRAPHQL_TARGETS, MC_API_PROXY_TARGETS } from '@commercetools-frontend/constants';
20
+ import { hasSomePermissions } from '@commercetools-frontend/permissions';
21
+ import { useAsyncDispatch, actions } from '@commercetools-frontend/sdk';
22
+ import { l as location } from './use-is-served-by-proxy-499bfa16.esm.js';
23
+ import _Object$keys from '@babel/runtime-corejs3/core-js-stable/object/keys';
24
+ import _Object$getOwnPropertySymbols from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols';
25
+ import _Object$getOwnPropertyDescriptor from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor';
26
+ import _Object$getOwnPropertyDescriptors from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors';
27
+ import _Object$defineProperties from '@babel/runtime-corejs3/core-js-stable/object/define-properties';
28
+ import _Object$defineProperty from '@babel/runtime-corejs3/core-js-stable/object/define-property';
29
+ import _defineProperty from '@babel/runtime-corejs3/helpers/esm/defineProperty';
30
+ import _includesInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/includes';
31
+ import _sliceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/slice';
32
+ import _filterInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/filter';
33
+ import _findIndexInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/find-index';
34
+ import { css, keyframes, ClassNames } from '@emotion/react';
35
+ import Fuse from 'fuse.js';
36
+ import last from 'lodash/last';
37
+ import { customProperties } from '@commercetools-uikit/design-system';
38
+ import { AngleThinRightIcon, SearchIcon } from '@commercetools-uikit/icons';
39
+ import LoadingSpinner from '@commercetools-uikit/loading-spinner';
40
+ import { jsxs, jsx } from '@emotion/react/jsx-runtime';
41
+ import { B as ButlerContainer, p as pimIndexerStates } from './index-3fdf5681.esm.js';
42
+ import _Promise from '@babel/runtime-corejs3/core-js-stable/promise';
43
+ import _reduceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/reduce';
44
+ import _findInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/find';
45
+ import './configure-apollo-cc0b1668.esm.js';
46
+ import '@babel/runtime-corejs3/core-js-stable/object/entries';
47
+ import '@babel/runtime-corejs3/core-js-stable/reflect/has';
48
+ import '@reduxjs/toolkit';
49
+ import 'lodash/mapValues';
50
+ import 'omit-empty-es';
51
+ import 'redux-thunk';
52
+ import '@commercetools-frontend/notifications';
53
+ import '@babel/runtime-corejs3/core-js-stable/instance/index-of';
54
+ import '@commercetools-frontend/sentry';
55
+ import './constants-7f04db3f.esm.js';
56
+ import '@commercetools-frontend/react-notifications';
57
+ import 'redux-logger';
58
+ import '@babel/runtime-corejs3/core-js-stable/url';
59
+ import '@apollo/client';
60
+ import 'apollo-link-logger';
61
+ import '@apollo/client/link/error';
62
+ import '@commercetools-frontend/browser-history';
63
+ import '@babel/runtime-corejs3/core-js-stable/instance/some';
64
+ import '@babel/runtime-corejs3/core-js-stable/object/values';
65
+ import '@commercetools/http-user-agent';
66
+ import 'uuid';
67
+ import '@babel/runtime-corejs3/core-js-stable/reflect/construct';
68
+ import '@babel/runtime-corejs3/helpers/createClass';
69
+ import '@babel/runtime-corejs3/helpers/classCallCheck';
70
+ import '@babel/runtime-corejs3/helpers/assertThisInitialized';
71
+ import '@babel/runtime-corejs3/helpers/inherits';
72
+ import '@babel/runtime-corejs3/helpers/possibleConstructorReturn';
73
+ import '@babel/runtime-corejs3/helpers/getPrototypeOf';
74
+ import '@babel/runtime-corejs3/helpers/wrapNativeSuper';
75
+ import '@apollo/client/link/retry';
76
+ import '@emotion/styled/base';
77
+ import '@commercetools-frontend/application-components';
78
+ import '@commercetools-frontend/i18n';
79
+ import '@commercetools-frontend/assets/images/logo.svg';
80
+ import '@commercetools-uikit/spacings';
81
+ import '@commercetools-uikit/flat-button';
82
+ import '@babel/runtime-corejs3/helpers/objectWithoutProperties';
83
+ import 'memoize-one';
84
+ import '@commercetools-uikit/accessible-hidden';
85
+ import '@commercetools-uikit/select-input';
86
+ import '@commercetools-frontend/assets/images/ct-logo.svg';
87
+ import '@commercetools-frontend/l10n';
88
+ import '@babel/runtime-corejs3/core-js-stable/instance/reverse';
89
+ import 'lodash/camelCase';
90
+ import '@babel/runtime-corejs3/core-js-stable/array/from';
91
+ import '@babel/runtime-corejs3/core-js-stable/instance/every';
92
+ import 'classnames';
93
+ import '@commercetools-frontend/assets/images/diagonal-line.svg';
94
+ import '@commercetools-uikit/icons/inline-svg';
95
+ import 'lodash/isNil';
96
+ import '@babel/runtime-corejs3/core-js-stable/object/from-entries';
97
+ import '@babel/runtime-corejs3/core-js-stable/instance/flags';
98
+ import '@flopflip/combine-adapters';
99
+ import '@flopflip/http-adapter';
100
+ import '@flopflip/launchdarkly-adapter';
101
+ import 'perfume.js';
102
+ import 'react-redux';
103
+ import 'lodash/upperFirst';
104
+ import './oidc-10fa96f0.esm.js';
105
+ import '@commercetools-uikit/design-system/materials/resets.css';
106
+ import '@commercetools-frontend/actions-global';
107
+ import '@commercetools-frontend/application-config/ssr';
108
+
109
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
110
+
111
+ var _ref$1 = process.env.NODE_ENV === "production" ? {
112
+ name: "13n9jnb",
113
+ styles: "align-self:center;>*{display:block;}"
114
+ } : {
115
+ name: "1qkkrpz-ButlerCommand",
116
+ styles: "align-self:center;>*{display:block;};label:ButlerCommand;",
117
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrRGdCIiwiZmlsZSI6ImJ1dGxlci1jb21tYW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vdXNlRXZlbnRIYW5kbGVyIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgQW5nbGVUaGluUmlnaHRJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIFByb3BzID0ge1xuICBjb21tYW5kOiBDb21tYW5kO1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgb25DbGljazogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBvbk1vdXNlRW50ZXI6IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbmNvbnN0IEJ1dGxlckNvbW1hbmQgPSAocHJvcHM6IFByb3BzKSA9PiAoXG4gIDxkaXZcbiAgICBrZXk9e3Byb3BzLmNvbW1hbmQuaWR9XG4gICAgZGF0YS10ZXN0aWQ9e2BxdWljay1hY2Nlc3MtcmVzdWx0KCR7cHJvcHMuY29tbWFuZC5pZH0pYH1cbiAgICBhcmlhLWN1cnJlbnQ9e3Byb3BzLmlzU2VsZWN0ZWQgPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgIGNzcz17Y3NzYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBhZGRpbmc6IDAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfTtcbiAgICAgIGhlaWdodDogMzZweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICR7cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICA/IGBcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvckFjY2VudH07XG4gICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYFxuICAgICAgICA6ICcnfVxuICAgIGB9XG4gICAgb25Nb3VzZUVudGVyPXtwcm9wcy5vbk1vdXNlRW50ZXJ9XG4gICAgb25DbGljaz17cHJvcHMub25DbGlja31cbiAgPlxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBmbGV4OiAxIGF1dG87XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgYH1cbiAgICA+XG4gICAgICB7cHJvcHMuY29tbWFuZC50ZXh0fVxuICAgIDwvZGl2PlxuICAgIHsoKEFycmF5LmlzQXJyYXkocHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcykgJiZcbiAgICAgIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgIHR5cGVvZiBwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzID09PSAnZnVuY3Rpb24nKSAmJiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICA+ICoge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgfVxuICAgICAgICBgfVxuICAgICAgPlxuICAgICAgICA8QW5nbGVUaGluUmlnaHRJY29uXG4gICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgY29sb3I9e3Byb3BzLmlzU2VsZWN0ZWQgPyAnc3VyZmFjZScgOiAnbmV1dHJhbDYwJ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuQnV0bGVyQ29tbWFuZC5kaXNwbGF5TmFtZSA9ICdCdXRsZXJDb21tYW5kJztcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyQ29tbWFuZDtcbiJdfQ== */",
118
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
119
+ };
120
+
121
+ var _ref2 = process.env.NODE_ENV === "production" ? {
122
+ name: "lhzw0z",
123
+ styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis"
124
+ } : {
125
+ name: "zq3ooq-ButlerCommand",
126
+ styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;label:ButlerCommand;",
127
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQ2MiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */",
128
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
129
+ };
130
+
131
+ const ButlerCommand = props => {
132
+ var _context;
133
+
134
+ return jsxs("div", {
135
+ "data-testid": "quick-access-result(".concat(props.command.id, ")"),
136
+ "aria-current": props.isSelected === true ? 'true' : 'false',
137
+ css: /*#__PURE__*/css("display:flex;padding:0 ", customProperties.spacingM, ";height:36px;font-size:16px;font-weight:200;line-height:36px;cursor:default;", props.isSelected === true ? _concatInstanceProperty(_context = "\n background: ".concat(customProperties.colorAccent, ";\n color: ")).call(_context, customProperties.colorSurface, ";\n ") : '', ";" + (process.env.NODE_ENV === "production" ? "" : ";label:ButlerCommand;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQlkiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */"),
138
+ onMouseEnter: props.onMouseEnter,
139
+ onClick: props.onClick,
140
+ children: [jsx("div", {
141
+ css: _ref2,
142
+ children: props.command.text
143
+ }), (_Array$isArray(props.command.subCommands) && props.command.subCommands.length > 0 || typeof props.command.subCommands === 'function') && jsx("div", {
144
+ css: _ref$1,
145
+ children: jsx(AngleThinRightIcon, {
146
+ size: "medium",
147
+ color: props.isSelected ? 'surface' : 'neutral60'
148
+ })
149
+ })]
150
+ }, props.command.id);
151
+ };
152
+
153
+ ButlerCommand.propTypes = process.env.NODE_ENV !== "production" ? {
154
+ command: _pt.any.isRequired,
155
+ isSelected: _pt.bool,
156
+ onClick: _pt.func.isRequired,
157
+ onMouseEnter: _pt.func.isRequired
158
+ } : {};
159
+ ButlerCommand.displayName = 'ButlerCommand';
160
+
161
+ var messages = defineMessages({
162
+ inputPlacehoder: {
163
+ id: 'QuickAccess.inputPlaceholder',
164
+ defaultMessage: 'Go to...'
165
+ },
166
+ offline: {
167
+ id: 'QuickAccess.offline',
168
+ defaultMessage: 'Offline'
169
+ },
170
+ noResults: {
171
+ id: 'QuickAccess.noResults',
172
+ defaultMessage: 'No results found'
173
+ },
174
+ // create-commands
175
+ setResourceLanguage: {
176
+ id: 'QuickAccess.setResourceLanguage',
177
+ defaultMessage: 'Set Resource Language'
178
+ },
179
+ openDashboard: {
180
+ id: 'QuickAccess.openDashboard',
181
+ defaultMessage: 'Open Dashboard'
182
+ },
183
+ openProducts: {
184
+ id: 'QuickAccess.openProducts',
185
+ defaultMessage: 'Open Products'
186
+ },
187
+ openProductList: {
188
+ id: 'QuickAccess.openProductList',
189
+ defaultMessage: 'Open Product List'
190
+ },
191
+ openProductVariantGeneral: {
192
+ id: 'QuickAccess.openProductVariantGeneral',
193
+ defaultMessage: 'General'
194
+ },
195
+ openProductVariantList: {
196
+ id: 'QuickAccess.openProductVariantList',
197
+ defaultMessage: 'Variants'
198
+ },
199
+ openProductVariantSearch: {
200
+ id: 'QuickAccess.openProductVariantSearch',
201
+ defaultMessage: 'Int. / Ext. Search'
202
+ },
203
+ openModifiedProducts: {
204
+ id: 'QuickAccess.openModifiedProducts',
205
+ defaultMessage: 'Open Review Modified Products'
206
+ },
207
+ openPimSearch: {
208
+ id: 'QuickAccess.openPimSearch',
209
+ defaultMessage: 'Open PIM Search'
210
+ },
211
+ openAddProducts: {
212
+ id: 'QuickAccess.openAddProducts',
213
+ defaultMessage: 'Open Add Products'
214
+ },
215
+ openCategories: {
216
+ id: 'QuickAccess.openCategories',
217
+ defaultMessage: 'Open Categories'
218
+ },
219
+ openCategoriesList: {
220
+ id: 'QuickAccess.openCategoriesList',
221
+ defaultMessage: 'Open Categories List'
222
+ },
223
+ openCategoriesSearch: {
224
+ id: 'QuickAccess.openCategoriesSearch',
225
+ defaultMessage: 'Open Categories Search'
226
+ },
227
+ openAddCategory: {
228
+ id: 'QuickAccess.openAddCategory',
229
+ defaultMessage: 'Open Add Category'
230
+ },
231
+ openCustomers: {
232
+ id: 'QuickAccess.openCustomers',
233
+ defaultMessage: 'Open Customers'
234
+ },
235
+ openCustomersList: {
236
+ id: 'QuickAccess.openCustomersList',
237
+ defaultMessage: 'Open Customers List'
238
+ },
239
+ openAddCustomer: {
240
+ id: 'QuickAccess.openAddCustomer',
241
+ defaultMessage: 'Open Add Customer'
242
+ },
243
+ openCustomerGroupsList: {
244
+ id: 'QuickAccess.openCustomerGroupsList',
245
+ defaultMessage: 'Open Customer Groups List'
246
+ },
247
+ openAddCustomerGroup: {
248
+ id: 'QuickAccess.openAddCustomerGroup',
249
+ defaultMessage: 'Open Add Customer Group'
250
+ },
251
+ openOrders: {
252
+ id: 'QuickAccess.openOrders',
253
+ defaultMessage: 'Open Orders'
254
+ },
255
+ openOrdersList: {
256
+ id: 'QuickAccess.openOrdersList',
257
+ defaultMessage: 'Open Orders List'
258
+ },
259
+ openAddOrder: {
260
+ id: 'QuickAccess.openAddOrder',
261
+ defaultMessage: 'Open Add Order'
262
+ },
263
+ openDiscounts: {
264
+ id: 'QuickAccess.openDiscounts',
265
+ defaultMessage: 'Open Discounts'
266
+ },
267
+ openProductDiscountsList: {
268
+ id: 'QuickAccess.openProductDiscountsList',
269
+ defaultMessage: 'Open Product Discounts List'
270
+ },
271
+ openCartDiscountsList: {
272
+ id: 'QuickAccess.openCartDiscountsList',
273
+ defaultMessage: 'Open Cart Discounts List'
274
+ },
275
+ openDiscountCodesList: {
276
+ id: 'QuickAccess.openDiscountCodesList',
277
+ defaultMessage: 'Open Discount Codes List'
278
+ },
279
+ openAddDiscount: {
280
+ id: 'QuickAccess.openAddDiscount',
281
+ defaultMessage: 'Open Add Discount'
282
+ },
283
+ openAddProductDiscount: {
284
+ id: 'QuickAccess.openAddProductDiscount',
285
+ defaultMessage: 'Open Add Product Discount'
286
+ },
287
+ openAddCartDiscount: {
288
+ id: 'QuickAccess.openAddCartDiscount',
289
+ defaultMessage: 'Open Add Cart Discount'
290
+ },
291
+ openAddDiscountCode: {
292
+ id: 'QuickAccess.openAddDiscountCode',
293
+ defaultMessage: 'Open Add Discount Code'
294
+ },
295
+ openSettings: {
296
+ id: 'QuickAccess.openSettings',
297
+ defaultMessage: 'Open Settings'
298
+ },
299
+ openProjectSettings: {
300
+ id: 'QuickAccess.openProjectSettings',
301
+ defaultMessage: 'Open Project Settings'
302
+ },
303
+ openProjectSettingsInternationalTab: {
304
+ id: 'QuickAccess.openProjectSettingsInternationalTab',
305
+ defaultMessage: 'Open Project Settings • International'
306
+ },
307
+ openProjectSettingsTaxesTab: {
308
+ id: 'QuickAccess.openProjectSettingsTaxesTab',
309
+ defaultMessage: 'Open Project Settings • Taxes'
310
+ },
311
+ openProjectSettingsShippingMethodsTab: {
312
+ id: 'QuickAccess.openProjectSettingsShippingMethodsTab',
313
+ defaultMessage: 'Open Project Settings • Shipping Methods'
314
+ },
315
+ openProjectSettingsChannelsTab: {
316
+ id: 'QuickAccess.openProjectSettingsChannelsTab',
317
+ defaultMessage: 'Open Project Settings • Channels'
318
+ },
319
+ openProjectSettingsStoresTab: {
320
+ id: 'QuickAccess.openProjectSettingsStoresTab',
321
+ defaultMessage: 'Open Project Settings • Stores'
322
+ },
323
+ openProductTypesSettings: {
324
+ id: 'QuickAccess.openProductTypesSettings',
325
+ defaultMessage: 'Open Product Types Settings'
326
+ },
327
+ openDeveloperSettings: {
328
+ id: 'QuickAccess.openDeveloperSettings',
329
+ defaultMessage: 'Open Developer Settings'
330
+ },
331
+ openCustomApplicationsSettings: {
332
+ id: 'QuickAccess.openCustomApplicationsSettings',
333
+ defaultMessage: 'Open Custom Applications Settings'
334
+ },
335
+ openApiClientsList: {
336
+ id: 'QuickAccess.openApiClientsList',
337
+ defaultMessage: 'Open API Clients'
338
+ },
339
+ openAddApiClient: {
340
+ id: 'QuickAccess.openAddApiClient',
341
+ defaultMessage: 'Open Add API Client'
342
+ },
343
+ openSupport: {
344
+ id: 'QuickAccess.openSupport',
345
+ defaultMessage: 'Open Support'
346
+ },
347
+ openMyProfile: {
348
+ id: 'QuickAccess.openMyProfile',
349
+ defaultMessage: 'Open My Profile'
350
+ },
351
+ showPrivacyPolicy: {
352
+ id: 'QuickAccess.showPrivacyPolicy',
353
+ defaultMessage: 'Show Privacy Policy'
354
+ },
355
+ logout: {
356
+ id: 'QuickAccess.logout',
357
+ defaultMessage: 'Logout'
358
+ },
359
+ useProject: {
360
+ id: 'QuickAccess.useProject',
361
+ defaultMessage: 'Switch to project "{projectName}"'
362
+ },
363
+ openManageProjects: {
364
+ id: 'QuickAccess.openManageProject',
365
+ defaultMessage: 'Open Manage Projects'
366
+ },
367
+ openManageOrganizations: {
368
+ id: 'QuickAccess.openManageOrganizations',
369
+ defaultMessage: 'Open Manage Organizations'
370
+ },
371
+ // subcommands
372
+ openVariantById: {
373
+ id: 'QuickAccess.openVariantById',
374
+ defaultMessage: 'Open Variant "{id}" (id)'
375
+ },
376
+ openVariantByKey: {
377
+ id: 'QuickAccess.openVariantByKey',
378
+ defaultMessage: 'Open Variant "{key}" (key)'
379
+ },
380
+ openVariantBySku: {
381
+ id: 'QuickAccess.openVariantBySku',
382
+ defaultMessage: 'Open Variant "{sku}" (sku)'
383
+ },
384
+ showProduct: {
385
+ id: 'QuickAccess.showProduct',
386
+ defaultMessage: 'Show Product "{productName}"'
387
+ },
388
+ showProductVariant: {
389
+ id: 'QuickAccess.showProductVariant',
390
+ defaultMessage: 'Show Product Variant "{variantName}"'
391
+ },
392
+ showProductVariantAttributes: {
393
+ id: 'QuickAccess.showProductVariantAttributes',
394
+ defaultMessage: 'Show Attributes'
395
+ },
396
+ showProductVariantImages: {
397
+ id: 'QuickAccess.showProductVariantImages',
398
+ defaultMessage: 'Show Images'
399
+ },
400
+ showProductVariantPrices: {
401
+ id: 'QuickAccess.showProductVariantPrices',
402
+ defaultMessage: 'Show Prices'
403
+ },
404
+ showProductVariantInventory: {
405
+ id: 'QuickAccess.showProductVariantInventory',
406
+ defaultMessage: 'Show Inventory'
407
+ }
408
+ });
409
+
410
+ var _templateObject$3, _templateObject2$2;
411
+
412
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
413
+
414
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context12, _context13; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context12 = ownKeys(Object(source), !0)).call(_context12, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context13 = ownKeys(Object(source))).call(_context13, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
415
+
416
+ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
417
+
418
+ const isSelectAllCombo = event => event.key === 'a' && event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
419
+
420
+ const isCloseCombo = event => event.key === 'Escape' && !event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
421
+
422
+ const getPlatform = () => {
423
+ var _context, _context2, _context3, _context4;
424
+
425
+ if (_includesInstanceProperty(_context = navigator.appVersion).call(_context, 'Win')) return 'windows';
426
+ if (_includesInstanceProperty(_context2 = navigator.appVersion).call(_context2, 'Mac')) return 'macos';
427
+ if (_includesInstanceProperty(_context3 = navigator.appVersion).call(_context3, 'X11')) return 'unix';
428
+ if (_includesInstanceProperty(_context4 = navigator.appVersion).call(_context4, 'Linux')) return 'linux';
429
+ return null;
430
+ };
431
+
432
+ const hasNewWindowModifier = event => {
433
+ const platform = getPlatform();
434
+
435
+ switch (platform) {
436
+ case 'macos':
437
+ return event.metaKey;
438
+
439
+ default:
440
+ return event.ctrlKey;
441
+ }
442
+ };
443
+
444
+ const shakeAnimation = keyframes(_templateObject$3 || (_templateObject$3 = _taggedTemplateLiteral(["\n from,\n to {\n transform: translate3d(0, 0, 0);\n }\n\n 14%,\n 42%,\n 70% {\n transform: translate3d(-3px, 0, 0);\n }\n\n 28%,\n 56%,\n 84% {\n transform: translate3d(3px, 0, 0);\n }\n"])));
445
+ const initialState = {
446
+ hasNetworkError: false,
447
+ isLoading: false,
448
+ searchText: '',
449
+ selectedResult: -1,
450
+ // Used for UX when browsing through history
451
+ enableHistory: true,
452
+ results: [],
453
+ stack: []
454
+ };
455
+
456
+ const reducer = function () {
457
+ var _context5;
458
+
459
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
460
+ let action = arguments.length > 1 ? arguments[1] : undefined;
461
+
462
+ switch (action.type) {
463
+ case 'networkError':
464
+ return _objectSpread(_objectSpread({}, state), {}, {
465
+ hasNetworkError: action.payload
466
+ });
467
+
468
+ case 'loading':
469
+ return _objectSpread(_objectSpread({}, state), {}, {
470
+ isLoading: action.payload
471
+ });
472
+
473
+ case 'selectedResult':
474
+ return _objectSpread(_objectSpread({}, state), {}, {
475
+ selectedResult: action.payload
476
+ });
477
+
478
+ case 'incrementSelectedResult':
479
+ return _objectSpread(_objectSpread({}, state), {}, {
480
+ selectedResult: state.selectedResult === state.results.length - 1 ? 0 : state.selectedResult + 1,
481
+ enableHistory: false
482
+ });
483
+
484
+ case 'decrementSelectedResult':
485
+ return _objectSpread(_objectSpread({}, state), {}, {
486
+ selectedResult: state.selectedResult < 1 ? state.results.length - 1 : state.selectedResult - 1,
487
+ enableHistory: false
488
+ });
489
+
490
+ case 'pickCommandFromHistory':
491
+ return _objectSpread(_objectSpread({}, state), {}, {
492
+ selectedResult: 0,
493
+ searchText: action.payload.searchText,
494
+ results: action.payload.results,
495
+ stack: [] // The history does not get changed here, it will be changed along
496
+ // with the regular flow.
497
+
498
+ });
499
+
500
+ case 'setNextCommands':
501
+ return _objectSpread(_objectSpread({}, state), {}, {
502
+ stack: [...state.stack, {
503
+ searchText: state.searchText,
504
+ results: state.results,
505
+ selectedResult: state.selectedResult
506
+ }],
507
+ selectedResult: 0,
508
+ enableHistory: false,
509
+ results: action.payload.results
510
+ });
511
+
512
+ case 'setPrevCommands':
513
+ return _objectSpread(_objectSpread({}, state), {}, {
514
+ searchText: action.payload.searchText,
515
+ results: action.payload.results,
516
+ selectedResult: 0,
517
+ enableHistory: false,
518
+ // omit last item
519
+ stack: _sliceInstanceProperty(_context5 = state.stack).call(_context5, 0, -1)
520
+ });
521
+
522
+ case 'searchText':
523
+ return _objectSpread(_objectSpread({}, state), {}, {
524
+ searchText: action.payload,
525
+ // clear network error when search text is cleared, so that users
526
+ // are tempted to retry
527
+ hasNetworkError: action.payload.length > 0 && state.hasNetworkError
528
+ });
529
+
530
+ case 'setSearchTextResults':
531
+ return _objectSpread(_objectSpread({}, state), {}, {
532
+ results: action.payload,
533
+ selectedResult: action.payload.length > 0 ? 0 : -1,
534
+ enableHistory: true,
535
+ stack: []
536
+ });
537
+
538
+ case 'resetSearchText':
539
+ return _objectSpread(_objectSpread({}, state), {}, {
540
+ searchText: '',
541
+ results: [],
542
+ selectedResult: -1
543
+ });
544
+
545
+ case 'resetResultsWhenClosing':
546
+ return _objectSpread(_objectSpread({}, state), {}, {
547
+ selectedResult: -1,
548
+ enableHistory: true
549
+ });
550
+
551
+ case 'reset':
552
+ return initialState;
553
+
554
+ default:
555
+ return state;
556
+ }
557
+ };
558
+
559
+ var _ref = process.env.NODE_ENV === "production" ? {
560
+ name: "zjik7",
561
+ styles: "display:flex"
562
+ } : {
563
+ name: "vnvgom-Butler",
564
+ styles: "display:flex;label:Butler;",
565
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ25Ca0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */",
566
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
567
+ };
568
+
569
+ const Butler = props => {
570
+ const intl = useIntl();
571
+
572
+ const _useReducer = useReducer(reducer, initialState),
573
+ _useReducer2 = _slicedToArray(_useReducer, 2),
574
+ state = _useReducer2[0],
575
+ dispatch = _useReducer2[1];
576
+
577
+ const shouldSelectFieldText = useRef(false);
578
+ const isNewWindowCombo = useRef(false);
579
+ const skipNextSelection = useRef(false);
580
+ const searchContainerRef = useRef(null);
581
+ const searchInputRef = useRef(null);
582
+ const setHasNetworkError = useCallback(() => {
583
+ dispatch({
584
+ type: 'networkError',
585
+ payload: true
586
+ });
587
+ }, []);
588
+ const unsetHasNetworkError = useCallback(() => {
589
+ dispatch({
590
+ type: 'networkError',
591
+ payload: false
592
+ });
593
+ }, []);
594
+ const setIsLoading = useCallback(() => {
595
+ dispatch({
596
+ type: 'loading',
597
+ payload: true
598
+ });
599
+ }, []);
600
+ const unsetIsLoading = useCallback(() => {
601
+ dispatch({
602
+ type: 'loading',
603
+ payload: false
604
+ });
605
+ }, []); // Destructure functions from props to reference them in the hook dependency list
606
+
607
+ const searchFromParent = props.search,
608
+ onCloseFromParent = props.onClose,
609
+ executeCommandFromParent = props.executeCommand,
610
+ onHistoryEntriesChangeFromParent = props.onHistoryEntriesChange,
611
+ getNextCommandsFromParent = props.getNextCommands;
612
+ const shake = useCallback(() => {
613
+ if (searchContainerRef.current) {
614
+ searchContainerRef.current.classList.remove(props.classNameShakeAnimation); // -> triggering reflow
615
+ // eslint-disable-next-line no-void
616
+
617
+ void searchContainerRef.current.offsetWidth;
618
+ searchContainerRef.current.classList.add(props.classNameShakeAnimation);
619
+ }
620
+ }, [props.classNameShakeAnimation]);
621
+ const execute = useCallback((command, meta) => {
622
+ var _context6;
623
+
624
+ // Only main entries get added to history, so when a subcommand is executed,
625
+ // we add the main command of it to the history (the top-level command).
626
+ //
627
+ // The key to identify history entries by is always the searchText
628
+ // There will never be two history entries with the same searchText
629
+ const entry = state.stack.length === 0 ? // The stack is empty, so we are executing a top-level command
630
+ {
631
+ searchText: state.searchText,
632
+ results: state.results
633
+ } : // We are executing a subcommand, so we get the top-level command for it,
634
+ // which is at the bottom of the stack.
635
+ {
636
+ searchText: state.stack[0].searchText,
637
+ results: state.stack[0].results
638
+ }; // Add the entry to the history, while excluding any earlier history entry
639
+ // with the same search text. This effectively "moves" that entry to the
640
+ // top of the history (with the most recent results), or appends a new entry
641
+ // when it didn't exist before.
642
+
643
+ onHistoryEntriesChangeFromParent([..._filterInstanceProperty(_context6 = props.historyEntries).call(_context6, command => command.searchText !== entry.searchText), entry]);
644
+ dispatch({
645
+ type: 'resetSearchText'
646
+ });
647
+ onCloseFromParent();
648
+ executeCommandFromParent(command, meta);
649
+ }, [executeCommandFromParent, onCloseFromParent, onHistoryEntriesChangeFromParent, props.historyEntries, state.results, state.searchText, state.stack]);
650
+ const handleKeyDown = useCallback(event => {
651
+ // Preventing cursor jumps can only happen in onKeyDown, but not in onKeyUp
652
+ event.persist(); // We want to know when the user presses cmd+enter (cmd being a meta key).
653
+ // We are only told about this in keyDown, but not in keyUp, so we need
654
+ // to handle it here
655
+
656
+ if (event.key === 'Enter' && hasNewWindowModifier(event)) {
657
+ isNewWindowCombo.current = true;
658
+ return;
659
+ } // Avoid selecting the whole page when user selectes everything with
660
+ // a keyboard shortcut. There is probably a better way to do this though.
661
+ // This prevents the whole page from being selected in case the user
662
+ // 1) opens the search box
663
+ // 2) types into it
664
+ // 3) selects all text using cmd+a
665
+ // 4) closes the search box with esc
666
+ // Without this handling, the whole page would now be selected
667
+
668
+
669
+ if (isSelectAllCombo(event)) {
670
+ // This stops the browser from selecting anything
671
+ event.preventDefault();
672
+
673
+ if (searchInputRef.current) {
674
+ // This selects the text in the search input
675
+ searchInputRef.current.setSelectionRange(0, state.searchText.length);
676
+ }
677
+
678
+ return;
679
+ } // avoid interfering with other key combinations using modifier keys
680
+
681
+
682
+ if (event.ctrlKey || event.altKey || event.shiftKey || event.metaKey) return;
683
+ if (isCloseCombo(event)) return; // skip next mouseEnter to avoid setting selectedResult when cursor just
684
+ // happens to be where the results will pop up
685
+
686
+ skipNextSelection.current = true;
687
+
688
+ if (event.key === 'ArrowDown') {
689
+ // prevent cursor from jumping to end of text input
690
+ event.preventDefault();
691
+ dispatch({
692
+ type: 'incrementSelectedResult'
693
+ });
694
+ return;
695
+ }
696
+
697
+ if (event.key === 'ArrowUp') {
698
+ // browse through history
699
+ if (state.searchText.length === 0 || state.selectedResult < 1 && state.enableHistory) {
700
+ var _context7;
701
+
702
+ shouldSelectFieldText.current = true;
703
+ const selectedIndex = state.searchText.length === 0 ? // When going back the first step
704
+ -1 : // When going back more than one step
705
+ _findIndexInstanceProperty(_context7 = props.historyEntries).call(_context7, command => command.searchText === state.searchText); // Pick the previous command from the history
706
+
707
+ const prevCommand = selectedIndex === -1 ? // previous command on top of the history when going back on
708
+ // first step
709
+ last(props.historyEntries) : // previous command is deeper down
710
+ // When the history does not exist (negative index), then
711
+ // this implicitly returns undefined
712
+ props.historyEntries[selectedIndex - 1]; // Skip when no previous entry exists in the history
713
+
714
+ if (!prevCommand) return;
715
+ dispatch({
716
+ type: 'pickCommandFromHistory',
717
+ payload: {
718
+ searchText: prevCommand.searchText,
719
+ results: prevCommand.results
720
+ }
721
+ });
722
+ return;
723
+ } // prevent cursor from jumping to beginning of text input
724
+
725
+
726
+ event.preventDefault();
727
+ dispatch({
728
+ type: 'decrementSelectedResult'
729
+ });
730
+ return;
731
+ }
732
+
733
+ if (state.selectedResult > -1) {
734
+ if (event.key === 'ArrowRight') {
735
+ const command = state.results[state.selectedResult];
736
+ const searchText = state.searchText;
737
+ const isCursorAtEnd = searchInputRef.current && state.searchText.length === searchInputRef.current.selectionStart;
738
+ const isEverythingSelected = searchInputRef.current && searchInputRef.current.selectionStart === 0 && state.searchText.length === searchInputRef.current.selectionEnd; // only allow diving in when cursor is at end of input or when
739
+ // the complete text is selected (when browsing through history)
740
+
741
+ if (!isCursorAtEnd && !isEverythingSelected) return;
742
+ unsetHasNetworkError(); // NOTE: since we need to fetch the "next command", which is an async operation,
743
+ // we use a IIFE to process that and eventually update the state.
744
+
745
+ (async () => {
746
+ if (command) {
747
+ const nextCommands = await getNextCommandsFromParent(command); // avoid moving cursor when there are sub-options
748
+
749
+ if (nextCommands.length > 0) {
750
+ // Ensure the search text has not changed while we were loading
751
+ // the next results, otherwise we'd interrupt the user.
752
+ // Throw away the results in case the search text has changed.
753
+ if (state.searchText === searchText) {
754
+ dispatch({
755
+ type: 'setNextCommands',
756
+ payload: {
757
+ results: nextCommands
758
+ }
759
+ });
760
+ }
761
+
762
+ return;
763
+ }
764
+ }
765
+
766
+ shake();
767
+ })();
768
+
769
+ return;
770
+ }
771
+
772
+ if (event.key === 'ArrowLeft') {
773
+ // go left in stack
774
+ const prevCommand = last(state.stack); // do nothing when we can't go left anymore
775
+
776
+ if (!prevCommand) return; // prevent cursor from jumping a char to the left in text input
777
+
778
+ event.preventDefault();
779
+ dispatch({
780
+ type: 'setPrevCommands',
781
+ payload: {
782
+ searchText: prevCommand.searchText,
783
+ results: prevCommand.results
784
+ }
785
+ });
786
+ return;
787
+ }
788
+ }
789
+ }, [getNextCommandsFromParent, props.historyEntries, shake, state, unsetHasNetworkError]);
790
+ const handleKeyUp = useCallback(event => {
791
+ // setting the selection can only happen in onKeyUp
792
+ if (shouldSelectFieldText.current) {
793
+ const input = event.target;
794
+ input.focus();
795
+ input.select();
796
+ shouldSelectFieldText.current = false;
797
+ }
798
+
799
+ if (event.key !== 'Enter' && !isNewWindowCombo.current) return true; // User just triggered the search
800
+
801
+ if (state.selectedResult === -1) return true; // User had something selected and wants to go there
802
+
803
+ execute(state.results[state.selectedResult], {
804
+ openInNewTab: isNewWindowCombo.current
805
+ });
806
+ isNewWindowCombo.current = false;
807
+ return true;
808
+ }, [execute, state.results, state.selectedResult]);
809
+ const handleChange = useCallback(event => {
810
+ const searchText = event.target.value;
811
+
812
+ if (_trimInstanceProperty(searchText).call(searchText).length === 0) {
813
+ dispatch({
814
+ type: 'reset'
815
+ });
816
+ return;
817
+ }
818
+
819
+ dispatch({
820
+ type: 'searchText',
821
+ payload: searchText
822
+ }); // A search via network is only triggered when there
823
+ // are more than three characters. So no false loading
824
+ // indication is given.
825
+
826
+ if (_trimInstanceProperty(searchText).call(searchText).length > 3) {
827
+ setIsLoading();
828
+ }
829
+
830
+ searchFromParent(searchText).then(asyncResults => {
831
+ var _context8, _context9;
832
+
833
+ unsetHasNetworkError();
834
+ unsetIsLoading();
835
+ const fuse = new Fuse(asyncResults, {
836
+ keys: [{
837
+ name: 'text',
838
+ weight: 0.6
839
+ }, {
840
+ name: 'keywords',
841
+ weight: 0.4
842
+ }],
843
+ minMatchCharLength: 2,
844
+ includeScore: true
845
+ });
846
+
847
+ const searchResults = _sliceInstanceProperty(_context8 = _filterInstanceProperty(_context9 = fuse.search(searchText) // Filter out results with a matching score over 0.75
848
+ ).call(_context9, result => result.score ? result.score < 0.75 : false) // Keep a maximal of 9 results
849
+ ).call(_context8, 0, 9);
850
+
851
+ dispatch({
852
+ type: 'setSearchTextResults',
853
+ payload: _mapInstanceProperty(searchResults).call(searchResults, result => result.item)
854
+ });
855
+ }, error => {
856
+ // eslint-disable-next-line no-console
857
+ if (process.env.NODE_ENV !== 'production') console.error(error);
858
+ unsetIsLoading();
859
+ setHasNetworkError();
860
+ });
861
+ }, [searchFromParent, setHasNetworkError, setIsLoading, unsetHasNetworkError, unsetIsLoading]);
862
+ const handleContainerClick = useCallback(() => {
863
+ dispatch({
864
+ type: 'resetResultsWhenClosing'
865
+ });
866
+ onCloseFromParent();
867
+ }, [onCloseFromParent]);
868
+ const createCommandMouseEnterHandler = useCallback(index => () => {
869
+ // In case the cursor happened to be in a location where a
870
+ // result would appear, it would trigger onMouseEnter and the
871
+ // result would be selected immediately. This is not something
872
+ // a user would expect, hence we prevent it from happening.
873
+ // The user has to move the cursor to an option explicitly for
874
+ // it to become active. However, the user can always click and
875
+ // that action will be triggered.
876
+ if (skipNextSelection.current) {
877
+ skipNextSelection.current = false;
878
+ return;
879
+ } // sets the selected result, mainly for the hover effect
880
+
881
+
882
+ dispatch({
883
+ type: 'selectedResult',
884
+ payload: index
885
+ });
886
+ }, []);
887
+ const createCommandClickHandler = useCallback(command => event => {
888
+ execute(command, {
889
+ openInNewTab: hasNewWindowModifier(event)
890
+ });
891
+ }, [execute]);
892
+ return jsx(ButlerContainer, {
893
+ onClick: handleContainerClick,
894
+ "data-testid": "quick-access",
895
+ tabIndex: -1,
896
+ children: jsxs("div", {
897
+ ref: searchContainerRef,
898
+ css: /*#__PURE__*/css("background-color:", customProperties.colorSurface, ";border:0;border-radius:", customProperties.borderRadius4, ";min-height:40px;z-index:20002;width:400px;margin:40px auto;overflow:hidden;-webkit-box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);-moz-box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);padding-bottom:", state.hasNetworkError ? '0' : customProperties.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcWxCZ0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
899
+ onClick: event => {
900
+ // Avoid closing when the searchContainer itself is clicked
901
+ // If we don't do this, then the overlay will close when e.g.
902
+ // the search input is clicked.
903
+ event.stopPropagation();
904
+ event.preventDefault();
905
+ },
906
+ children: [jsxs("div", {
907
+ css: _ref,
908
+ children: [jsx("label", {
909
+ htmlFor: "quick-access-search-input",
910
+ css: /*#__PURE__*/css("align-self:center;padding-left:", customProperties.spacingM, ";margin-top:", customProperties.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc25Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
911
+ children: jsx(SearchIcon, {
912
+ color: "neutral60"
913
+ })
914
+ }), jsx("input", {
915
+ id: "quick-access-search-input",
916
+ ref: searchInputRef,
917
+ placeholder: intl.formatMessage(messages.inputPlacehoder),
918
+ type: "text",
919
+ css: /*#__PURE__*/css("width:100%;border:0;outline:0;font-size:22px;font-weight:300;padding:", customProperties.spacingM, " ", customProperties.spacingM, " ", customProperties.spacingS, " ", customProperties.spacingS, ";&::placeholder{color:", customProperties.colorNeutral60, ";}" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbW9Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
920
+ value: state.searchText,
921
+ onChange: handleChange,
922
+ onKeyDown: handleKeyDown,
923
+ onKeyUp: handleKeyUp,
924
+ autoFocus: true,
925
+ autoComplete: "off",
926
+ "data-testid": "quick-access-search-input"
927
+ }), state.isLoading && jsx("div", {
928
+ css: /*#__PURE__*/css("align-self:center;margin-top:", customProperties.spacingS, ";margin-right:", customProperties.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeXBCc0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
929
+ children: jsx(LoadingSpinner, {})
930
+ })]
931
+ }), (() => {
932
+ var _context10, _context11;
933
+
934
+ if (state.hasNetworkError) return jsx("div", {
935
+ css: /*#__PURE__*/css("overflow:hidden;white-space:nowrap;cursor:default;background:", customProperties.colorError, ";text-align:center;text-transform:uppercase;color:", customProperties.colorSurface, ";font-size:", customProperties.fontSizeSmall, ";padding:", customProperties.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdXFCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
936
+ children: jsx(FormattedMessage, _objectSpread({}, messages.offline))
937
+ });
938
+ if (state.results.length === 0 && _trimInstanceProperty(_context10 = state.searchText).call(_context10).length > 0) return jsx("div", {
939
+ css: /*#__PURE__*/css("overflow:hidden;white-space:nowrap;cursor:default;background:", customProperties.colorNeutral, ";color:", customProperties.colorSolid, ";text-align:center;text-transform:uppercase;font-size:", customProperties.fontSizeSmall, ";padding:", customProperties.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMHJCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
940
+ children: jsx(FormattedMessage, _objectSpread({}, messages.noResults))
941
+ });
942
+ return _mapInstanceProperty(_context11 = state.results).call(_context11, (command, index) => jsx(ButlerCommand, {
943
+ command: command,
944
+ isSelected: state.selectedResult === index,
945
+ onMouseEnter: createCommandMouseEnterHandler(index),
946
+ onClick: createCommandClickHandler(command)
947
+ }, command.id));
948
+ })()]
949
+ })
950
+ });
951
+ };
952
+
953
+ Butler.propTypes = process.env.NODE_ENV !== "production" ? {
954
+ historyEntries: _pt.arrayOf(_pt.any).isRequired,
955
+ onHistoryEntriesChange: _pt.func.isRequired,
956
+ search: _pt.func.isRequired,
957
+ getNextCommands: _pt.func.isRequired,
958
+ executeCommand: _pt.func.isRequired,
959
+ onClose: _pt.func.isRequired,
960
+ classNameShakeAnimation: _pt.string.isRequired
961
+ } : {};
962
+ Butler.displayName = 'Butler';
963
+
964
+ const ButlerWithAnimation = props => jsx(ClassNames, {
965
+ children: _ref2 => {
966
+ let css = _ref2.css;
967
+ return jsx(Butler, _objectSpread(_objectSpread({}, props), {}, {
968
+ classNameShakeAnimation: css(_templateObject2$2 || (_templateObject2$2 = _taggedTemplateLiteral(["\n animation-duration: 0.45s;\n animation-fill-mode: both;\n animation-name: ", ";\n "])), shakeAnimation)
969
+ }));
970
+ }
971
+ });
972
+
973
+ // eslint-disable-next-line import/prefer-default-export
974
+ const permissions = {
975
+ ViewOrders: 'ViewOrders',
976
+ ManageOrders: 'ManageOrders',
977
+ ViewProducts: 'ViewProducts',
978
+ ManageProducts: 'ManageProducts',
979
+ ViewCategories: 'ViewCategories',
980
+ ManageCategories: 'ManageCategories',
981
+ ViewCustomers: 'ViewCustomers',
982
+ ManageCustomers: 'ManageCustomers',
983
+ ViewCustomerGroups: 'ViewCustomerGroups',
984
+ ManageCustomerGroups: 'ManageCustomerGroups',
985
+ ViewProductDiscounts: 'ViewProductDiscounts',
986
+ ManageProductDiscounts: 'ManageProductDiscounts',
987
+ ViewDiscountCodes: 'ViewDiscountCodes',
988
+ ManageDiscountCodes: 'ManageDiscountCodes',
989
+ ViewCartDiscounts: 'ViewCartDiscounts',
990
+ ManageCartDiscounts: 'ManageCartDiscounts',
991
+ ViewProjectSettings: 'ViewProjectSettings',
992
+ ManageProjectSettings: 'ManageProjectSettings',
993
+ ViewDeveloperSettings: 'ViewDeveloperSettings',
994
+ ManageDeveloperSettings: 'ManageDeveloperSettings',
995
+ ViewProductTypes: 'ViewProductTypes',
996
+ ManageProductTypes: 'ManageProductTypes'
997
+ };
998
+
999
+ const actionTypes = {
1000
+ go: 'go'
1001
+ };
1002
+
1003
+ var _templateObject$2;
1004
+
1005
+ function nonNullable(value) {
1006
+ return value !== null && value !== undefined && typeof value !== 'boolean';
1007
+ }
1008
+
1009
+ const createCommands = _ref => {
1010
+ var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context13;
1011
+
1012
+ let intl = _ref.intl,
1013
+ applicationContext = _ref.applicationContext,
1014
+ featureToggles = _ref.featureToggles,
1015
+ changeProjectDataLocale = _ref.changeProjectDataLocale;
1016
+ return _filterInstanceProperty(_context = [applicationContext.project && applicationContext.permissions && featureToggles.canViewDashboard && hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1017
+ id: 'go/dashboard',
1018
+ text: intl.formatMessage(messages.openDashboard),
1019
+ keywords: ['Go to Dashboard'],
1020
+ action: {
1021
+ type: actionTypes.go,
1022
+ to: "/".concat(applicationContext.project.key, "/dashboard")
1023
+ }
1024
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
1025
+ id: 'go/products',
1026
+ text: intl.formatMessage(messages.openProducts),
1027
+ keywords: ['Go to Products'],
1028
+ action: {
1029
+ type: actionTypes.go,
1030
+ to: "/".concat(applicationContext.project.key, "/products")
1031
+ },
1032
+ subCommands: _filterInstanceProperty(_context2 = [hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
1033
+ id: 'go/products/list',
1034
+ text: intl.formatMessage(messages.openProductList),
1035
+ action: {
1036
+ type: actionTypes.go,
1037
+ to: "/".concat(applicationContext.project.key, "/products")
1038
+ }
1039
+ }, hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
1040
+ id: 'go/products/modified',
1041
+ text: intl.formatMessage(messages.openModifiedProducts),
1042
+ action: {
1043
+ type: actionTypes.go,
1044
+ to: "/".concat(applicationContext.project.key, "/products/modified")
1045
+ }
1046
+ }, hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && featureToggles.pimSearch && {
1047
+ id: 'go/products/pim-search',
1048
+ text: intl.formatMessage(messages.openPimSearch),
1049
+ action: {
1050
+ type: actionTypes.go,
1051
+ to: "/".concat(applicationContext.project.key, "/products")
1052
+ }
1053
+ }, hasSomePermissions([permissions.ManageProducts], applicationContext.permissions) && {
1054
+ id: 'go/products/add',
1055
+ text: intl.formatMessage(messages.openAddProducts),
1056
+ action: {
1057
+ type: actionTypes.go,
1058
+ to: "/".concat(applicationContext.project.key, "/products/new")
1059
+ }
1060
+ }]).call(_context2, nonNullable)
1061
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1062
+ id: 'go/categories',
1063
+ text: intl.formatMessage(messages.openCategories),
1064
+ keywords: ['Go to Categories'],
1065
+ action: {
1066
+ type: actionTypes.go,
1067
+ to: "/".concat(applicationContext.project.key, "/categories")
1068
+ },
1069
+ subCommands: _filterInstanceProperty(_context3 = [hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1070
+ id: 'go/categories/list',
1071
+ text: intl.formatMessage(messages.openCategoriesList),
1072
+ action: {
1073
+ type: actionTypes.go,
1074
+ to: "/".concat(applicationContext.project.key, "/categories?mode=list")
1075
+ }
1076
+ }, hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1077
+ id: 'go/categories/search',
1078
+ text: intl.formatMessage(messages.openCategoriesSearch),
1079
+ action: {
1080
+ type: actionTypes.go,
1081
+ to: "/".concat(applicationContext.project.key, "/categories?mode=search")
1082
+ }
1083
+ }, hasSomePermissions([permissions.ManageCategories], applicationContext.permissions) && {
1084
+ id: 'go/categories/add',
1085
+ text: intl.formatMessage(messages.openAddCategory),
1086
+ action: {
1087
+ type: actionTypes.go,
1088
+ to: "/".concat(applicationContext.project.key, "/categories/new")
1089
+ }
1090
+ }]).call(_context3, nonNullable)
1091
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewCustomers, permissions.ViewCustomerGroups], applicationContext.permissions) && {
1092
+ id: 'go/customers',
1093
+ text: intl.formatMessage(messages.openCustomers),
1094
+ keywords: ['Go to Customers'],
1095
+ action: {
1096
+ type: actionTypes.go,
1097
+ to: "/".concat(applicationContext.project.key, "/customers")
1098
+ },
1099
+ subCommands: _filterInstanceProperty(_context4 = [hasSomePermissions([permissions.ViewCustomers], applicationContext.permissions) && {
1100
+ id: 'go/customers/list',
1101
+ text: intl.formatMessage(messages.openCustomersList),
1102
+ action: {
1103
+ type: actionTypes.go,
1104
+ to: "/".concat(applicationContext.project.key, "/customers")
1105
+ }
1106
+ }, hasSomePermissions([permissions.ManageCustomers], applicationContext.permissions) && {
1107
+ id: 'go/customers/new',
1108
+ text: intl.formatMessage(messages.openAddCustomer),
1109
+ action: {
1110
+ type: actionTypes.go,
1111
+ to: "/".concat(applicationContext.project.key, "/customers/new")
1112
+ }
1113
+ }, hasSomePermissions([permissions.ViewCustomerGroups], applicationContext.permissions) && {
1114
+ id: 'go/customer/customer-groups',
1115
+ text: intl.formatMessage(messages.openCustomerGroupsList),
1116
+ action: {
1117
+ type: actionTypes.go,
1118
+ to: "/".concat(applicationContext.project.key, "/customers/customer-groups")
1119
+ }
1120
+ }, hasSomePermissions([permissions.ManageCustomerGroups], applicationContext.permissions) && {
1121
+ id: 'go/customers/customer-groups/add',
1122
+ text: intl.formatMessage(messages.openAddCustomerGroup),
1123
+ action: {
1124
+ type: actionTypes.go,
1125
+ to: "/".concat(applicationContext.project.key, "/customers/customer-groups/new")
1126
+ }
1127
+ }]).call(_context4, nonNullable)
1128
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1129
+ id: 'go/orders',
1130
+ text: intl.formatMessage(messages.openOrders),
1131
+ keywords: ['Go to Orders'],
1132
+ action: {
1133
+ type: actionTypes.go,
1134
+ to: "/".concat(applicationContext.project.key, "/orders")
1135
+ },
1136
+ subCommands: _filterInstanceProperty(_context5 = [hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1137
+ id: 'go/orders/list',
1138
+ text: intl.formatMessage(messages.openOrdersList),
1139
+ action: {
1140
+ type: actionTypes.go,
1141
+ to: "/".concat(applicationContext.project.key, "/orders")
1142
+ }
1143
+ }, hasSomePermissions([permissions.ManageOrders], applicationContext.permissions) && {
1144
+ id: 'go/orders/add',
1145
+ text: intl.formatMessage(messages.openAddOrder),
1146
+ action: {
1147
+ type: actionTypes.go,
1148
+ to: "/".concat(applicationContext.project.key, "/orders/new")
1149
+ }
1150
+ }]).call(_context5, nonNullable)
1151
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewDiscountCodes, permissions.ViewProductDiscounts, permissions.ViewCartDiscounts], applicationContext.permissions) && {
1152
+ id: 'go/discounts',
1153
+ text: intl.formatMessage(messages.openDiscounts),
1154
+ keywords: ['Go to Discounts'],
1155
+ action: {
1156
+ type: actionTypes.go,
1157
+ to: "/".concat(applicationContext.project.key, "/discounts")
1158
+ },
1159
+ subCommands: _filterInstanceProperty(_context6 = [hasSomePermissions([permissions.ViewProductDiscounts], applicationContext.permissions) && {
1160
+ id: 'go/discounts/products/list',
1161
+ text: intl.formatMessage(messages.openProductDiscountsList),
1162
+ action: {
1163
+ type: actionTypes.go,
1164
+ to: "/".concat(applicationContext.project.key, "/discounts/products")
1165
+ }
1166
+ }, hasSomePermissions([permissions.ViewCartDiscounts], applicationContext.permissions) && {
1167
+ id: 'go/discounts/carts/list',
1168
+ text: intl.formatMessage(messages.openCartDiscountsList),
1169
+ action: {
1170
+ type: actionTypes.go,
1171
+ to: "/".concat(applicationContext.project.key, "/discounts/carts")
1172
+ }
1173
+ }, hasSomePermissions([permissions.ViewDiscountCodes], applicationContext.permissions) && {
1174
+ id: 'go/discounts/codes/list',
1175
+ text: intl.formatMessage(messages.openDiscountCodesList),
1176
+ action: {
1177
+ type: actionTypes.go,
1178
+ to: "/".concat(applicationContext.project.key, "/discounts/codes")
1179
+ }
1180
+ }, hasSomePermissions([permissions.ManageProductDiscounts, permissions.ManageDiscountCodes, permissions.ManageCartDiscounts], applicationContext.permissions) && {
1181
+ id: 'go/discounts/add',
1182
+ text: intl.formatMessage(messages.openAddDiscount),
1183
+ action: {
1184
+ type: actionTypes.go,
1185
+ to: "/".concat(applicationContext.project.key, "/discounts/new")
1186
+ },
1187
+ subCommands: _filterInstanceProperty(_context7 = [hasSomePermissions([permissions.ManageProductDiscounts], applicationContext.permissions) && {
1188
+ id: 'go/discounts/product/add',
1189
+ text: intl.formatMessage(messages.openAddProductDiscount),
1190
+ action: {
1191
+ type: actionTypes.go,
1192
+ to: "/".concat(applicationContext.project.key, "/discounts/products/new")
1193
+ }
1194
+ }, hasSomePermissions([permissions.ManageCartDiscounts], applicationContext.permissions) && {
1195
+ id: 'go/discounts/cart/add',
1196
+ text: intl.formatMessage(messages.openAddCartDiscount),
1197
+ action: {
1198
+ type: actionTypes.go,
1199
+ to: "/".concat(applicationContext.project.key, "/discounts/carts/new")
1200
+ }
1201
+ }, hasSomePermissions([permissions.ManageDiscountCodes], applicationContext.permissions) && {
1202
+ id: 'go/discounts/code/add',
1203
+ text: intl.formatMessage(messages.openAddCartDiscount),
1204
+ action: {
1205
+ type: actionTypes.go,
1206
+ to: "/".concat(applicationContext.project.key, "/discounts/codes/new")
1207
+ }
1208
+ }]).call(_context7, nonNullable)
1209
+ }]).call(_context6, nonNullable)
1210
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewProjectSettings, permissions.ViewDeveloperSettings, permissions.ViewProductTypes], applicationContext.permissions) && {
1211
+ id: 'go/settings',
1212
+ text: intl.formatMessage(messages.openSettings),
1213
+ keywords: ['Go to Settings'],
1214
+ action: {
1215
+ type: actionTypes.go,
1216
+ to: "/".concat(applicationContext.project.key, "/settings/project")
1217
+ },
1218
+ subCommands: _filterInstanceProperty(_context8 = [hasSomePermissions([permissions.ViewProjectSettings, permissions.ManageProjectSettings], applicationContext.permissions) && {
1219
+ id: 'go/settings/project',
1220
+ text: intl.formatMessage(messages.openProjectSettings),
1221
+ action: {
1222
+ type: actionTypes.go,
1223
+ to: "/".concat(applicationContext.project.key, "/settings/project")
1224
+ },
1225
+ subCommands: _filterInstanceProperty(_context9 = [{
1226
+ id: 'go/settings/project/international',
1227
+ text: intl.formatMessage(messages.openProjectSettingsInternationalTab),
1228
+ action: {
1229
+ type: actionTypes.go,
1230
+ to: "/".concat(applicationContext.project.key, "/settings/project/international")
1231
+ }
1232
+ }, {
1233
+ id: 'go/settings/project/taxes',
1234
+ text: intl.formatMessage(messages.openProjectSettingsTaxesTab),
1235
+ action: {
1236
+ type: actionTypes.go,
1237
+ to: "/".concat(applicationContext.project.key, "/settings/project/taxes")
1238
+ }
1239
+ }, {
1240
+ id: 'go/settings/project/shipping-methods',
1241
+ text: intl.formatMessage(messages.openProjectSettingsShippingMethodsTab),
1242
+ action: {
1243
+ type: actionTypes.go,
1244
+ to: "/".concat(applicationContext.project.key, "/settings/project/shipping-methods")
1245
+ }
1246
+ }, {
1247
+ id: 'go/settings/project/channels',
1248
+ text: intl.formatMessage(messages.openProjectSettingsChannelsTab),
1249
+ action: {
1250
+ type: actionTypes.go,
1251
+ to: "/".concat(applicationContext.project.key, "/settings/project/channels")
1252
+ }
1253
+ }, {
1254
+ id: 'go/settings/project/stores',
1255
+ text: intl.formatMessage(messages.openProjectSettingsStoresTab),
1256
+ action: {
1257
+ type: actionTypes.go,
1258
+ to: "/".concat(applicationContext.project.key, "/settings/project/stores")
1259
+ }
1260
+ }]).call(_context9, nonNullable)
1261
+ }, hasSomePermissions([permissions.ViewProductTypes], applicationContext.permissions) && {
1262
+ id: 'go/settings/product-types',
1263
+ text: intl.formatMessage(messages.openProductTypesSettings),
1264
+ action: {
1265
+ type: actionTypes.go,
1266
+ to: "/".concat(applicationContext.project.key, "/settings/product-types")
1267
+ }
1268
+ }, hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
1269
+ id: 'go/settings/developer',
1270
+ text: intl.formatMessage(messages.openDeveloperSettings),
1271
+ action: {
1272
+ type: actionTypes.go,
1273
+ to: "/".concat(applicationContext.project.key, "/settings/developer")
1274
+ },
1275
+ subCommands: _filterInstanceProperty(_context10 = [hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
1276
+ id: 'go/settings/developer/api-clients/list',
1277
+ text: intl.formatMessage(messages.openApiClientsList),
1278
+ action: {
1279
+ type: actionTypes.go,
1280
+ to: "/".concat(applicationContext.project.key, "/settings/developer/api-clients")
1281
+ }
1282
+ }, hasSomePermissions([permissions.ManageDeveloperSettings], applicationContext.permissions) && {
1283
+ id: 'go/settings/developer/api-clients/add',
1284
+ text: intl.formatMessage(messages.openAddApiClient),
1285
+ action: {
1286
+ type: actionTypes.go,
1287
+ to: "/".concat(applicationContext.project.key, "/settings/developer/api-clients/new")
1288
+ }
1289
+ }]).call(_context10, nonNullable)
1290
+ }, featureToggles.customApplications && hasSomePermissions([permissions.ManageProjectSettings], applicationContext.permissions) && {
1291
+ id: 'go/settings/custom-applications',
1292
+ text: intl.formatMessage(messages.openCustomApplicationsSettings),
1293
+ action: {
1294
+ type: actionTypes.go,
1295
+ to: "/".concat(applicationContext.project.key, "/settings/custom-applications")
1296
+ }
1297
+ }]).call(_context8, nonNullable)
1298
+ }, applicationContext.project && applicationContext.project.languages && applicationContext.project.languages.length > 1 && {
1299
+ id: 'action/set-resource-language',
1300
+ text: intl.formatMessage(messages.setResourceLanguage),
1301
+ keywords: ['set resource locale', 'set project data language', 'set project data locale'],
1302
+ action: () => void 0,
1303
+ // We would know these statically, but we define them here as we don't
1304
+ // want to include them in the top-level search results
1305
+ subCommands: () => {
1306
+ var _context11, _context12;
1307
+
1308
+ return _Promise.resolve(_filterInstanceProperty(_context11 = _mapInstanceProperty(_context12 = applicationContext.project ? applicationContext.project.languages : []).call(_context12, language => changeProjectDataLocale && {
1309
+ id: "action/set-resource-language/".concat(language),
1310
+ text: oneLineTrim(_templateObject$2 || (_templateObject$2 = _taggedTemplateLiteral(["\n ", "\n ", "\n "])), language, language === applicationContext.dataLocale ? ' (active)' : ''),
1311
+ action: () => {
1312
+ changeProjectDataLocale(language); // We reload, since ProjectDataLocale is written in a way where
1313
+ // only the tree under the parent container reloads, but
1314
+ // not all of them reload.
1315
+ // So this action would seem like it had not effect, unless we
1316
+ // reload
1317
+
1318
+ location.reload();
1319
+ }
1320
+ })).call(_context11, nonNullable));
1321
+ }
1322
+ }, {
1323
+ id: 'go/support',
1324
+ text: intl.formatMessage(messages.openSupport),
1325
+ keywords: ['Go to support'],
1326
+ action: {
1327
+ type: actionTypes.go,
1328
+ to: SUPPORT_PORTAL_URL
1329
+ }
1330
+ }, {
1331
+ id: 'go/account-profile',
1332
+ text: intl.formatMessage(messages.openMyProfile),
1333
+ keywords: ['Go to user account', 'Go to profile', 'Open profile'],
1334
+ action: {
1335
+ type: actionTypes.go,
1336
+ to: "/account/profile"
1337
+ }
1338
+ }, {
1339
+ id: 'go/privacy-policy',
1340
+ text: intl.formatMessage(messages.showPrivacyPolicy),
1341
+ keywords: ['Open Privacy Policy'],
1342
+ action: {
1343
+ type: actionTypes.go,
1344
+ to: 'https://commercetools.com/privacy#suppliers'
1345
+ }
1346
+ }, {
1347
+ id: 'go/logout',
1348
+ text: intl.formatMessage(messages.logout),
1349
+ keywords: ['Sign out'],
1350
+ action: {
1351
+ type: actionTypes.go,
1352
+ to: "/logout?reason=".concat(LOGOUT_REASONS.USER)
1353
+ }
1354
+ }, {
1355
+ id: 'go/manage-projects',
1356
+ text: intl.formatMessage(messages.openManageProjects),
1357
+ keywords: ['Go to manage projects', 'Go to projects', 'Open projects list'],
1358
+ action: {
1359
+ type: actionTypes.go,
1360
+ to: "/account/projects"
1361
+ }
1362
+ }, {
1363
+ id: 'go/manage-organizations',
1364
+ text: intl.formatMessage(messages.openManageOrganizations),
1365
+ keywords: ['Go to manage organizations', 'Go to organizations', 'Open organizations list'],
1366
+ action: {
1367
+ type: actionTypes.go,
1368
+ to: "/account/organizations"
1369
+ }
1370
+ }, ...(applicationContext.user ? _mapInstanceProperty(_context13 = applicationContext.user.projects.results).call(_context13, userProject => ({
1371
+ id: "go/project(".concat(userProject.key, ")"),
1372
+ text: intl.formatMessage(messages.useProject, {
1373
+ projectName: userProject.name
1374
+ }),
1375
+ keywords: [userProject.key],
1376
+ action: () => {
1377
+ // Switching projects needs a full redirect so that
1378
+ // the feature flags are reloaded (and things caches get destroyed)
1379
+ window.location.href = "/".concat(userProject.key);
1380
+ }
1381
+ })) : [])]).call(_context, nonNullable);
1382
+ };
1383
+
1384
+ const STORAGE_KEY = 'quickAccessHistoryEntries';
1385
+ const saveHistoryEntries = historyEntries => {
1386
+ try {
1387
+ window.sessionStorage.setItem(STORAGE_KEY, _JSON$stringify(historyEntries));
1388
+ return true;
1389
+ } catch (error) {
1390
+ return false;
1391
+ }
1392
+ };
1393
+ const loadHistoryEntries = () => {
1394
+ try {
1395
+ const value = sessionStorage.getItem(STORAGE_KEY);
1396
+ return value ? JSON.parse(value) : [];
1397
+ } catch (error) {
1398
+ return [];
1399
+ }
1400
+ };
1401
+
1402
+ var _templateObject$1, _templateObject2$1, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
1403
+ var QuickAccessProductQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "QuickAccessProduct" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "productId" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "id" }, value: { kind: "Variable", name: { kind: "Name", value: "productId" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "allVariants" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }], loc: { start: 0, end: 208, source: { body: "query QuickAccessProduct($productId: String!) {\n product(id: $productId) {\n id\n masterData {\n staged {\n allVariants {\n id\n key\n sku\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
1404
+ const createProductVariantSubCommands = _ref => {
1405
+ var _context, _context2, _context3, _context4;
1406
+
1407
+ let intl = _ref.intl,
1408
+ applicationContext = _ref.applicationContext,
1409
+ productId = _ref.productId,
1410
+ variantId = _ref.variantId;
1411
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1412
+ if (!canViewProducts || !applicationContext.project) return [];
1413
+ return [{
1414
+ id: _concatInstanceProperty(_context = "go/product(".concat(productId, ")/variant(")).call(_context, variantId, ")/attributes"),
1415
+ text: intl.formatMessage(messages.showProductVariantAttributes),
1416
+ action: {
1417
+ type: actionTypes.go,
1418
+ to: oneLineTrim(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /attributes\n "])), applicationContext.project.key, productId, variantId)
1419
+ }
1420
+ }, {
1421
+ id: _concatInstanceProperty(_context2 = "go/product(".concat(productId, ")/variant")).call(_context2, variantId, "/images"),
1422
+ text: intl.formatMessage(messages.showProductVariantImages),
1423
+ action: {
1424
+ type: actionTypes.go,
1425
+ to: oneLineTrim(_templateObject2$1 || (_templateObject2$1 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /images\n "])), applicationContext.project.key, productId, variantId)
1426
+ }
1427
+ }, {
1428
+ id: _concatInstanceProperty(_context3 = "go/product(".concat(productId, ")/variant(")).call(_context3, variantId, ")/prices"),
1429
+ text: intl.formatMessage(messages.showProductVariantPrices),
1430
+ action: {
1431
+ type: actionTypes.go,
1432
+ to: oneLineTrim(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /prices\n "])), applicationContext.project.key, productId, variantId)
1433
+ }
1434
+ }, {
1435
+ id: _concatInstanceProperty(_context4 = "go/product(".concat(productId, ")/variant(")).call(_context4, variantId, ")/inventory"),
1436
+ text: intl.formatMessage(messages.showProductVariantInventory),
1437
+ action: {
1438
+ type: actionTypes.go,
1439
+ to: oneLineTrim(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /inventory\n "])), applicationContext.project.key, productId, variantId)
1440
+ }
1441
+ }];
1442
+ };
1443
+
1444
+ const formatVariantMessage = (variant, intl) => {
1445
+ if (variant.sku) return intl.formatMessage(messages.openVariantBySku, {
1446
+ sku: variant.sku
1447
+ });
1448
+ if (variant.key) return intl.formatMessage(messages.openVariantByKey, {
1449
+ key: variant.key
1450
+ });
1451
+ return intl.formatMessage(messages.openVariantById, {
1452
+ id: variant.id
1453
+ });
1454
+ };
1455
+
1456
+ const createProductVariantListSubCommands = async _ref2 => {
1457
+ let intl = _ref2.intl,
1458
+ applicationContext = _ref2.applicationContext,
1459
+ productId = _ref2.productId,
1460
+ execQuery = _ref2.execQuery;
1461
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1462
+ if (!canViewProducts) return [];
1463
+ const data = await execQuery(QuickAccessProductQuery, {
1464
+ productId
1465
+ }, {
1466
+ target: GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1467
+ });
1468
+
1469
+ if (data && data.product && data.product.masterData && data.product.masterData.staged && applicationContext.project) {
1470
+ var _context5;
1471
+
1472
+ const projectKey = applicationContext.project.key;
1473
+ return _mapInstanceProperty(_context5 = data.product.masterData.staged.allVariants).call(_context5, variant => {
1474
+ var _context6;
1475
+
1476
+ return {
1477
+ id: _concatInstanceProperty(_context6 = "go/product(".concat(productId, ")/variant(")).call(_context6, variant.id, ")"),
1478
+ text: formatVariantMessage(variant, intl),
1479
+ subCommands: createProductVariantSubCommands({
1480
+ intl,
1481
+ applicationContext,
1482
+ productId,
1483
+ variantId: variant.id
1484
+ }),
1485
+ action: {
1486
+ type: actionTypes.go,
1487
+ to: oneLineTrim(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), projectKey, productId, variant.id)
1488
+ }
1489
+ };
1490
+ });
1491
+ }
1492
+
1493
+ return [];
1494
+ };
1495
+
1496
+ const createProductTabsSubCommands = _ref3 => {
1497
+ let intl = _ref3.intl,
1498
+ applicationContext = _ref3.applicationContext,
1499
+ productId = _ref3.productId;
1500
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1501
+ if (!canViewProducts || !applicationContext.project) return [];
1502
+ return [{
1503
+ id: "go/product(".concat(productId, ")/general"),
1504
+ text: intl.formatMessage(messages.openProductVariantGeneral),
1505
+ action: {
1506
+ type: actionTypes.go,
1507
+ to: oneLineTrim(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /general\n "])), applicationContext.project.key, productId)
1508
+ }
1509
+ }, {
1510
+ id: "go/product(".concat(productId, ")/variants"),
1511
+ text: intl.formatMessage(messages.openProductVariantList),
1512
+ action: {
1513
+ type: actionTypes.go,
1514
+ to: oneLineTrim(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n "])), applicationContext.project.key, productId)
1515
+ },
1516
+ subCommands: execQuery => createProductVariantListSubCommands({
1517
+ intl,
1518
+ applicationContext,
1519
+ productId,
1520
+ execQuery
1521
+ })
1522
+ }, {
1523
+ id: "go/product(".concat(productId, ")/search"),
1524
+ text: intl.formatMessage(messages.openProductVariantSearch),
1525
+ action: {
1526
+ type: actionTypes.go,
1527
+ to: oneLineTrim(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /search\n "])), applicationContext.project.key, productId)
1528
+ }
1529
+ }];
1530
+ };
1531
+
1532
+ const sanitize = param => param // Replace all \ with \\ (to prevent generate escape characters)
1533
+ .replace(/\\/g, '\\\\') // Replace all " with \"
1534
+ .replace(/"/g, '\\"');
1535
+ const flattenCommands = async (results, execQuery) => {
1536
+ async function flatten(commands) {
1537
+ return _reduceInstanceProperty(commands).call(commands, async (prevPromise, command) => {
1538
+ const prevResults = await prevPromise;
1539
+
1540
+ if (command.subCommands) {
1541
+ if (typeof command.subCommands === 'function') {
1542
+ const subCommands = await command.subCommands(execQuery);
1543
+ const flattenSubCommands = await flatten(subCommands);
1544
+ return [...prevResults, command, ...flattenSubCommands];
1545
+ }
1546
+
1547
+ const flattenSubCommands = await flatten(command.subCommands);
1548
+ return [...prevResults, command, ...flattenSubCommands];
1549
+ }
1550
+
1551
+ return [...prevResults, command];
1552
+ }, _Promise.resolve([]));
1553
+ }
1554
+
1555
+ return await flatten(results);
1556
+ }; // Once ui-kit exposes its fallback mechanism, we can use the same one here
1557
+
1558
+ const translate = (nameAllLocales, projectDataLocale) => {
1559
+ const matchedTranslation = _findInstanceProperty(nameAllLocales).call(nameAllLocales, translation => translation.locale === projectDataLocale && translation.value);
1560
+
1561
+ if (matchedTranslation) return matchedTranslation.value; // Fall back to the first available locale
1562
+
1563
+ if (nameAllLocales.length > 0) return nameAllLocales[0].value;
1564
+ return '';
1565
+ };
1566
+
1567
+ var _templateObject, _templateObject2;
1568
+ var QuickAccessQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "QuickAccess" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "searchText" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "productsWhereClause" } }, type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "includeProductsByIds" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", alias: { kind: "Name", value: "productsByIds" }, name: { kind: "Name", value: "products" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "where" }, value: { kind: "Variable", name: { kind: "Name", value: "productsWhereClause" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "includeProductsByIds" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "results" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productById" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "id" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByKey" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "key" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByVariantSku" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "sku" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "variant" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "sku" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByVariantKey" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "variantKey" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "variant" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "key" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }], loc: { start: 0, end: 1407, source: { body: "query QuickAccess(\n $searchText: String!\n $canViewProducts: Boolean!\n $productsWhereClause: String\n $includeProductsByIds: Boolean!\n) {\n productsByIds: products(where: $productsWhereClause)\n @include(if: $includeProductsByIds) {\n results {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n }\n\n productById: product(id: $searchText) @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n\n productByKey: product(key: $searchText) @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n\n productByVariantSku: product(sku: $searchText)\n @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n variant(sku: $searchText) {\n sku\n key\n id\n }\n }\n }\n }\n\n productByVariantKey: product(variantKey: $searchText)\n @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n variant(key: $searchText) {\n sku\n key\n id\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
1569
+
1570
+ const searchProductIdsAction = (searchText, projectKey, dataLocale) => actions.post({
1571
+ uri: "/".concat(projectKey, "/search/products"),
1572
+ mcApiProxyTarget: MC_API_PROXY_TARGETS.PIM_SEARCH,
1573
+ payload: {
1574
+ query: {
1575
+ fullText: {
1576
+ field: 'name',
1577
+ language: dataLocale,
1578
+ value: searchText
1579
+ }
1580
+ },
1581
+ sort: [{
1582
+ field: 'name',
1583
+ language: dataLocale,
1584
+ order: 'desc'
1585
+ }],
1586
+ limit: 9,
1587
+ offset: 0
1588
+ }
1589
+ });
1590
+
1591
+ const pimIndexerStatusAction = (projectKey, dataLocale) => // TODO this should be sdkActions.head()
1592
+ // and then we should check whether the response code is
1593
+ // - 200 meaning the project is indexed
1594
+ // - 404 meaning the project is not indexed
1595
+ //
1596
+ // But there is a problem in tne node-sdk client as it tries to
1597
+ // .json()-parse the response to HEAD requests which results in an
1598
+ // error, so we send a regular request for now and limit to no results
1599
+ // instead to keep the payload minimal
1600
+ actions.post({
1601
+ uri: "/".concat(projectKey, "/search/products"),
1602
+ mcApiProxyTarget: MC_API_PROXY_TARGETS.PIM_SEARCH,
1603
+ payload: {
1604
+ query: {
1605
+ fullText: {
1606
+ field: 'name',
1607
+ language: dataLocale,
1608
+ value: 'availability-check'
1609
+ }
1610
+ },
1611
+ limit: 0,
1612
+ offset: 0
1613
+ }
1614
+ });
1615
+
1616
+ const QuickAccess = props => {
1617
+ const _useState = useState(loadHistoryEntries()),
1618
+ _useState2 = _slicedToArray(_useState, 2),
1619
+ historyEntries = _useState2[0],
1620
+ setHistoryEntries = _useState2[1];
1621
+
1622
+ const handleHistoryEntriesChange = useCallback(entries => {
1623
+ // Keep the history in sync with the session storage
1624
+ saveHistoryEntries(entries);
1625
+ setHistoryEntries(entries);
1626
+ }, []);
1627
+ const history = useHistory();
1628
+ const apolloClient = useApolloClient();
1629
+ const intl = useIntl();
1630
+
1631
+ const _useFeatureToggles = useFeatureToggles({
1632
+ pimSearch: true,
1633
+ customApplications: true,
1634
+ canViewDashboard: true
1635
+ }),
1636
+ _useFeatureToggles2 = _slicedToArray(_useFeatureToggles, 3),
1637
+ isPimSearchEnabled = _useFeatureToggles2[0],
1638
+ isCustomApplicationsEnabled = _useFeatureToggles2[1],
1639
+ isCanViewDashboardEnabled = _useFeatureToggles2[2];
1640
+
1641
+ const applicationContext = useApplicationContext(); // Destructure functions from props to reference them in the hook dependency list
1642
+
1643
+ const onPimIndexerStateChangeFromParent = props.onPimIndexerStateChange;
1644
+ const dispatchFetchProductIds = useAsyncDispatch();
1645
+ const fetchPimSearchProductIds = useCallback(async searchText => {
1646
+ if (applicationContext.project && applicationContext.dataLocale) {
1647
+ var _context;
1648
+
1649
+ const result = await dispatchFetchProductIds(searchProductIdsAction(searchText, applicationContext.project.key, applicationContext.dataLocale));
1650
+ return result && result.hits ? _mapInstanceProperty(_context = result.hits).call(_context, hit => hit.id) : [];
1651
+ }
1652
+
1653
+ return [];
1654
+ }, [applicationContext.dataLocale, applicationContext.project, dispatchFetchProductIds]);
1655
+ const dispatchFetchPimIndexerStatus = useAsyncDispatch();
1656
+ const fetchPimIndexerStatus = useCallback(async () => {
1657
+ if (applicationContext.project && applicationContext.dataLocale) {
1658
+ try {
1659
+ dispatchFetchPimIndexerStatus(pimIndexerStatusAction(applicationContext.project.key, applicationContext.dataLocale));
1660
+ return pimIndexerStates.INDEXED;
1661
+ } catch (error) {
1662
+ // eslint-disable-next-line no-console
1663
+ if (process.env.NODE_ENV !== 'production') console.error(error); // project is not using pim-indexer when response error code is 404,
1664
+ // but we treat all errors as non-indexed as a safe guard, so we're
1665
+ // not checking the response error code at all
1666
+
1667
+ return pimIndexerStates.NOT_INDEXED;
1668
+ }
1669
+ }
1670
+
1671
+ return pimIndexerStates.NOT_INDEXED;
1672
+ }, [applicationContext.dataLocale, applicationContext.project, dispatchFetchPimIndexerStatus]);
1673
+ const getProjectIndexStatus = useCallback(async () => {
1674
+ // skip when there is no project
1675
+ if (!applicationContext.project) return pimIndexerStates.NOT_INDEXED;
1676
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions); // skip checking when user can't view products anyways
1677
+
1678
+ if (!canViewProducts) return pimIndexerStates.NOT_INDEXED;
1679
+ return await fetchPimIndexerStatus();
1680
+ }, [applicationContext.permissions, applicationContext.project, fetchPimIndexerStatus]);
1681
+ useEffect(() => {
1682
+ if (props.pimIndexerState === pimIndexerStates.UNCHECKED) {
1683
+ getProjectIndexStatus().then(status => {
1684
+ onPimIndexerStateChangeFromParent(status);
1685
+ });
1686
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
1687
+
1688
+ }, []); // <-- run only once, when component mounts
1689
+
1690
+ const execQuery = useCallback((Query, variables, context) => apolloClient.query({
1691
+ query: Query,
1692
+ errorPolicy: 'ignore',
1693
+ variables,
1694
+ context
1695
+ }).then(response => response.data), [apolloClient]);
1696
+ const getNextCommands = useCallback(async command => {
1697
+ if (!command.subCommands) return [];
1698
+ if (_Array$isArray(command.subCommands)) return command.subCommands;
1699
+ return await command.subCommands(execQuery);
1700
+ }, [execQuery]);
1701
+ const getProjectCommands = useCallback(async searchText => {
1702
+ const idsOfProductsMatchingSearchText = props.pimIndexerState === pimIndexerStates.INDEXED ? await fetchPimSearchProductIds(searchText) : [];
1703
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1704
+ const data = await execQuery(QuickAccessQuery, {
1705
+ searchText: sanitize(searchText),
1706
+ // Pass conditional arguments to disable some of the queries
1707
+ canViewProducts,
1708
+ productsWhereClause: "id in (".concat(_mapInstanceProperty(idsOfProductsMatchingSearchText).call(idsOfProductsMatchingSearchText, id => _JSON$stringify(id)).join(', '), ")"),
1709
+ includeProductsByIds: Boolean(canViewProducts && idsOfProductsMatchingSearchText.length > 0)
1710
+ }, {
1711
+ target: GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1712
+ });
1713
+ const commands = [];
1714
+
1715
+ if (data && data.productByVariantKey && data.productByVariantKey.masterData && data.productByVariantKey.masterData.staged && data.productByVariantKey.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
1716
+ var _context2;
1717
+
1718
+ const productId = data.productByVariantKey.id;
1719
+ const variantId = data.productByVariantKey.masterData.staged.variant.id;
1720
+ const variantKey = data.productByVariantKey.masterData.staged.variant.key;
1721
+ commands.push({
1722
+ id: _concatInstanceProperty(_context2 = "go/product-variant-by-key/product(".concat(productId, "/variant(")).call(_context2, variantId, ")"),
1723
+ text: intl.formatMessage(messages.showProductVariant, {
1724
+ variantName: translate(data.productByVariantKey.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1725
+ }),
1726
+ keywords: variantKey ? [variantKey] : undefined,
1727
+ action: {
1728
+ type: actionTypes.go,
1729
+ to: oneLineTrim(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), applicationContext.project.key, productId, variantId)
1730
+ },
1731
+ subCommands: createProductVariantSubCommands({
1732
+ intl,
1733
+ applicationContext,
1734
+ productId,
1735
+ variantId
1736
+ })
1737
+ });
1738
+ }
1739
+
1740
+ if (data && data.productByVariantSku && data.productByVariantSku.masterData && data.productByVariantSku.masterData.staged && data.productByVariantSku.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
1741
+ var _context3;
1742
+
1743
+ const productId = data.productByVariantSku.id;
1744
+ const variantId = data.productByVariantSku.masterData.staged.variant.id;
1745
+ commands.push({
1746
+ id: _concatInstanceProperty(_context3 = "go/product-variant-by-sku/product(".concat(productId, ")/variant(")).call(_context3, variantId, ")"),
1747
+ text: intl.formatMessage(messages.showProductVariant, {
1748
+ variantName: data.productByVariantSku.masterData.staged.variant.sku
1749
+ }),
1750
+ action: {
1751
+ type: actionTypes.go,
1752
+ to: oneLineTrim(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), applicationContext.project.key, productId, variantId)
1753
+ },
1754
+ subCommands: createProductVariantSubCommands({
1755
+ intl,
1756
+ applicationContext,
1757
+ productId,
1758
+ variantId
1759
+ })
1760
+ });
1761
+ }
1762
+
1763
+ if (data && data.productById && data.productById.masterData && data.productById.masterData.staged && data.productById.masterData.staged.nameAllLocales && applicationContext.project && applicationContext.dataLocale) {
1764
+ var _context4;
1765
+
1766
+ const productId = data.productById.id;
1767
+ commands.push({
1768
+ id: "go/product-by-id/product(".concat(productId, ")"),
1769
+ text: intl.formatMessage(messages.showProduct, {
1770
+ productName: translate(data.productById.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1771
+ }),
1772
+ keywords: [productId],
1773
+ action: {
1774
+ type: actionTypes.go,
1775
+ to: _concatInstanceProperty(_context4 = "/".concat(applicationContext.project.key, "/products/")).call(_context4, productId)
1776
+ },
1777
+ subCommands: createProductTabsSubCommands({
1778
+ intl,
1779
+ applicationContext,
1780
+ productId
1781
+ })
1782
+ });
1783
+ }
1784
+
1785
+ if (data && data.productsByIds && data.productsByIds.results) {
1786
+ var _context5;
1787
+
1788
+ _forEachInstanceProperty(_context5 = data.productsByIds.results).call(_context5, product => {
1789
+ if (product.masterData.staged && applicationContext.project && applicationContext.dataLocale) {
1790
+ var _context6;
1791
+
1792
+ commands.push({
1793
+ id: "go/product-by-search-text/product(".concat(product.id, ")"),
1794
+ text: intl.formatMessage(messages.showProduct, {
1795
+ productName: translate(product.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1796
+ }),
1797
+ keywords: [product.id],
1798
+ action: {
1799
+ type: actionTypes.go,
1800
+ to: _concatInstanceProperty(_context6 = "/".concat(applicationContext.project.key, "/products/")).call(_context6, product.id)
1801
+ },
1802
+ subCommands: createProductTabsSubCommands({
1803
+ intl,
1804
+ applicationContext,
1805
+ productId: product.id
1806
+ })
1807
+ });
1808
+ }
1809
+ });
1810
+ }
1811
+
1812
+ if (data && data.productByKey && applicationContext.project && applicationContext.dataLocale) {
1813
+ var _context7;
1814
+
1815
+ const productId = data.productByKey.id;
1816
+ commands.push({
1817
+ id: "go/product-by-key/product(".concat(productId, ")"),
1818
+ text: intl.formatMessage(messages.showProduct, {
1819
+ productName: searchText
1820
+ }),
1821
+ action: {
1822
+ type: actionTypes.go,
1823
+ to: _concatInstanceProperty(_context7 = "/".concat(applicationContext.project.key, "/products/")).call(_context7, productId)
1824
+ },
1825
+ subCommands: createProductTabsSubCommands({
1826
+ intl,
1827
+ applicationContext,
1828
+ productId
1829
+ })
1830
+ });
1831
+ }
1832
+
1833
+ return commands;
1834
+ }, [applicationContext, execQuery, fetchPimSearchProductIds, intl, props.pimIndexerState]);
1835
+ const debouncedGetProjectCommands = debounce(getProjectCommands, 200, {
1836
+ cancelObj: 'canceled'
1837
+ });
1838
+ const search = useCallback(async searchText => {
1839
+ const generalCommands = createCommands({
1840
+ applicationContext,
1841
+ changeProjectDataLocale: props.onChangeProjectDataLocale,
1842
+ intl,
1843
+ featureToggles: {
1844
+ pimSearch: isPimSearchEnabled,
1845
+ customApplications: isCustomApplicationsEnabled,
1846
+ canViewDashboard: isCanViewDashboardEnabled
1847
+ }
1848
+ });
1849
+ if (!applicationContext.project) return generalCommands; // Avoid searching for short texts, as we won't get any good results
1850
+ // anyways. This results in commands popping up immediately when the user
1851
+ // starts typing, which gives the whole search a much more repsonsive
1852
+ // feeling.
1853
+
1854
+ if (_trimInstanceProperty(searchText).call(searchText).length < 3) return generalCommands;
1855
+
1856
+ try {
1857
+ const projectCommands = await debouncedGetProjectCommands(searchText);
1858
+ const allCommands = [...generalCommands, ...projectCommands];
1859
+ return await flattenCommands(allCommands, execQuery);
1860
+ } catch (error) {
1861
+ // When the debounced search is canceled, it throws with "canceled"
1862
+ // In that case we know that another search is going to happen
1863
+ // and we just resolve with the general commands.
1864
+ if (error === 'canceled') return generalCommands;
1865
+ throw error;
1866
+ }
1867
+ }, [applicationContext, debouncedGetProjectCommands, execQuery, intl, isCanViewDashboardEnabled, isCustomApplicationsEnabled, isPimSearchEnabled, props.onChangeProjectDataLocale]);
1868
+ const executeCommand = useCallback((command, meta) => {
1869
+ var _context8;
1870
+
1871
+ if (typeof command.action === 'function') {
1872
+ // Idea: We could handle these errors and set them on status bar of Butler
1873
+ // We can also handle sync/async commands by checking command.action.then
1874
+ command.action();
1875
+ return;
1876
+ } // open in new window
1877
+ // and always open other pages in a new window
1878
+
1879
+
1880
+ if (meta.openInNewTab || !_startsWithInstanceProperty(_context8 = command.action.to).call(_context8, '/')) {
1881
+ // eslint-disable-next-line no-restricted-globals
1882
+ open(command.action.to, '_blank');
1883
+ } else if (applicationContext.environment.useFullRedirectsForLinks) {
1884
+ location.replace(command.action.to);
1885
+ } else {
1886
+ history.push(command.action.to);
1887
+ }
1888
+ }, [applicationContext.environment.useFullRedirectsForLinks, history]);
1889
+ return jsx(ButlerWithAnimation, {
1890
+ historyEntries: historyEntries,
1891
+ onHistoryEntriesChange: handleHistoryEntriesChange,
1892
+ search: search,
1893
+ executeCommand: executeCommand,
1894
+ onClose: props.onClose,
1895
+ getNextCommands: getNextCommands
1896
+ });
1897
+ };
1898
+
1899
+ QuickAccess.propTypes = process.env.NODE_ENV !== "production" ? {
1900
+ pimIndexerState: _pt.any.isRequired,
1901
+ onPimIndexerStateChange: _pt.func.isRequired,
1902
+ onClose: _pt.func.isRequired,
1903
+ onChangeProjectDataLocale: _pt.func
1904
+ } : {};
1905
+ QuickAccess.displayName = 'QuickAccess';
1906
+
1907
+ export { QuickAccess as default };