@kkcompany/player 2.25.0-canary.0 → 2.25.0-canary.2

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.
package/dist/react.mjs CHANGED
@@ -77,15 +77,15 @@ function getDevice() {
77
77
  if (device.type === undefined && osName === 'Android') device.type = 'tablet';
78
78
  return device;
79
79
  }
80
+
81
+ const isSafari = () => /^((?!chrome|android|X11|Linux).)*(safari|iPad|iPhone|Version)/i.test(navigator.userAgent);
82
+
80
83
  function needNativeHls() {
81
84
  // Don't let Android phones play HLS, even if some of them report supported
82
85
  // This covers Samsung & OPPO special cases
83
- const isAndroid = /android|X11|Linux/i.test(navigator.userAgent); // canPlayType isn't reliable across all iOS verion / device combinations, so also check user agent
84
-
85
- const isSafari = /^((?!chrome|android|X11|Linux).)*(safari|iPad|iPhone|Version)/i.test(navigator.userAgent); // ref: https://stackoverflow.com/a/12905122/4578017
86
- // none of our supported browsers other than Safari response to this
87
-
88
- return isAndroid || /firefox/i.test(navigator.userAgent) ? '' : isSafari ? 'maybe' : document.createElement('video').canPlayType('application/vnd.apple.mpegURL');
86
+ const isAndroid = /android|X11|Linux/i.test(navigator.userAgent);
87
+ return isAndroid || /firefox/i.test(navigator.userAgent) ? '' : // canPlayType isn't reliable across all iOS verion / device combinations, so also check user agent
88
+ isSafari() ? 'maybe' : document.createElement('video').canPlayType('application/vnd.apple.mpegURL');
89
89
  }
90
90
 
91
91
  const isDesktop = () => !getDevice().type; // TODO solve lint error:
@@ -175,7 +175,7 @@ const getDrmOptions$1 = fallbackDrm => {
175
175
  * @typedef {{hls: string, dash: string}} SourceObjectAlt backward compatiable form
176
176
  *
177
177
  * @param {SourceObject[]|SourceObject|SourceObjectAlt|string} sourceOptions
178
- * @param {{preferManifestType?: ('dash'|'hls')}} options
178
+ * @param {{preferManifestType?: ('dash'|'hls'|'platform')}} options
179
179
  * @return {{src: string, type: string, drm: Object}}
180
180
  */
181
181
 
@@ -218,7 +218,8 @@ const getSource = (sourceOptions, {
218
218
  });
219
219
  }
220
220
 
221
- const matched = sourceOptions.find(source => !preferManifestType || matchType(source, preferManifestType));
221
+ const targetType = preferManifestType !== 'platform' ? preferManifestType : isSafari() ? 'hls' : 'dash';
222
+ const matched = sourceOptions.find(source => matchType(source, targetType));
222
223
  const selected = matched || sourceOptions[0];
223
224
 
224
225
  if (!selected) {
@@ -295,7 +296,7 @@ function convertToSeconds(timeString) {
295
296
  function getVersion() {
296
297
  try {
297
298
  // eslint-disable-next-line no-undef
298
- return "2.25.0-canary.0";
299
+ return "2.25.0-canary.2";
299
300
  } catch (e) {
300
301
  return undefined;
301
302
  }
@@ -596,9 +597,8 @@ const load = async (media, {
596
597
  startTime,
597
598
  plugins = []
598
599
  }, source) => {
599
- const preferManifestType = needNativeHls() ? 'hls' : 'dash';
600
600
  const preferred = getSource(source, {
601
- preferManifestType
601
+ preferManifestType: 'platform'
602
602
  }); // There's no use case that changing DRM options without changing manifest URL, just skip
603
603
 
604
604
  if (player.lastSrc === (preferred === null || preferred === void 0 ? void 0 : preferred.src)) {
@@ -618,7 +618,7 @@ const load = async (media, {
618
618
  player,
619
619
  source: currentSource,
620
620
  startTime,
621
- streamFormat: preferManifestType,
621
+ streamFormat: source.type,
622
622
  reload: async () => {
623
623
  // Bitmovin unexpectedly restores muted state, so save to restore
624
624
  const restoreMuted = player.isMuted && {
@@ -821,24 +821,25 @@ const setPlaybackRate = (media, {
821
821
  const getTextTracks = (_, {
822
822
  player
823
823
  }) => {
824
- var _player$getSubtitles;
824
+ var _player$getTextTracks;
825
825
 
826
826
  if (!player) return [];
827
+ return (((_player$getTextTracks = player.getTextTracks) === null || _player$getTextTracks === void 0 ? void 0 : _player$getTextTracks.call(player)) || []).map(track => {
828
+ var _track$label;
827
829
 
828
- if (player.getTextTracks) {
829
- return player.getTextTracks().map(track => {
830
- var _track$label;
831
-
832
- return {
833
- label: ((_track$label = track.label) === null || _track$label === void 0 ? void 0 : _track$label.trim()) || track.language,
834
- language: track.language,
835
- enabled: player.isTextTrackVisible() ? track.active : false,
836
- id: track.id
837
- };
838
- }).filter(track => track.label !== 'unknown' && track.language && !track.language.startsWith('unk'));
839
- }
840
-
841
- return (player === null || player === void 0 ? void 0 : (_player$getSubtitles = player.getSubtitles()) === null || _player$getSubtitles === void 0 ? void 0 : _player$getSubtitles.filter(track => !/un(d|k)/i.test(track.value || '') && track.label)) || [];
830
+ const label = ((_track$label = track.label) === null || _track$label === void 0 ? void 0 : _track$label.trim()) || track.language;
831
+ const id = `${track.language}:${label}`;
832
+ return { ...track,
833
+ label,
834
+ type: 'subtitles',
835
+ selected: player.isTextTrackVisible() ? track.active : false,
836
+ value: {
837
+ id,
838
+ label,
839
+ language: track.language
840
+ }
841
+ };
842
+ }).filter(track => track.label !== 'unknown' && track.language && !/^un/i.test(track.language));
842
843
  };
843
844
 
844
845
  const textTrackLabel = 'playcraft-text-track';
@@ -903,33 +904,7 @@ const syncTextTrack = (media, {
903
904
  player.setTextTrackVisibility(false);
904
905
  }
905
906
  });
906
- };
907
-
908
- const getAudioTracks = (_, {
909
- player
910
- }) => {
911
- if (!player) return []; // Bitmovin support is omitted as it is not needed in near future
912
-
913
- const all = player.getVariantTracks().reduce((result, track) => {
914
- var _track$label2, _result$id;
915
-
916
- const label = ((_track$label2 = track.label) === null || _track$label2 === void 0 ? void 0 : _track$label2.trim()) || track.language;
917
- const id = `${track.language}:${label}`;
918
- result[id] = { ...track,
919
- language: track.language,
920
- label,
921
- enabled: ((_result$id = result[id]) === null || _result$id === void 0 ? void 0 : _result$id.enabled) || track.active
922
- };
923
- return result;
924
- }, {});
925
- return Object.values(all);
926
- };
927
-
928
- const getCurrentAudioTrack = (media, {
929
- player
930
- }) => getAudioTracks(media, {
931
- player
932
- }).find(track => track.enabled); // assume unique labels as defined in spec
907
+ }; // assume unique labels as defined in spec
933
908
 
934
909
 
935
910
  const setAudioTrack = (_, {
@@ -938,19 +913,10 @@ const setAudioTrack = (_, {
938
913
  if (!next) return;
939
914
 
940
915
  try {
941
- const tracks = getAudioTracks({}, {
942
- player
943
- });
944
- const activeTrack = tracks.find(track => track.language === next.language && track.label === next.label) || tracks.find(track => track.language === next.language && track.label === next.language);
916
+ player.selectAudioLanguage(next.language);
945
917
 
946
- if (activeTrack !== null && activeTrack !== void 0 && activeTrack.enabled) {
947
- return;
948
- }
949
-
950
- player.selectAudioLanguage(activeTrack.language);
951
-
952
- if (activeTrack.label) {
953
- player.selectVariantsByLabel(activeTrack.label);
918
+ if (next.label) {
919
+ player.selectVariantsByLabel(next.label);
954
920
  }
955
921
  } catch (error) {
956
922
  console.warn('Unable to set audio', error, next);
@@ -4935,8 +4901,14 @@ const menuItemStyle = {
4935
4901
  padding: 'var(--menu-item-padding, 0.5em 1em) ',
4936
4902
  display: 'flex',
4937
4903
  alignItems: 'center',
4904
+ minWidth: 0,
4938
4905
  color: 'rgba(255, 255, 255, 0.6)',
4939
- background: 'var(--menu-item-background, rgba(255, 255, 255, 0.08))'
4906
+ background: 'var(--menu-item-background, rgba(255, 255, 255, 0.08))',
4907
+ '> div': {
4908
+ overflow: 'hidden',
4909
+ whiteSpace: 'nowrap',
4910
+ textOverflow: 'ellipsis'
4911
+ }
4940
4912
  };
4941
4913
  const menuItemSelectedStyle = {
4942
4914
  color: '#FFF',
@@ -4944,7 +4916,7 @@ const menuItemSelectedStyle = {
4944
4916
  '::after': {
4945
4917
  content: '" "',
4946
4918
  display: 'inline-block',
4947
- width: '1em',
4919
+ flex: '0 0 1em',
4948
4920
  height: '1em',
4949
4921
  marginLeft: '0.5em',
4950
4922
  backgroundColor: 'var(--setting-check-icon-color, #fff)',
@@ -4958,9 +4930,11 @@ const MenuItem = ({
4958
4930
  selected,
4959
4931
  onClick
4960
4932
  }) => jsx$1("div", {
4961
- css: [menuItemStyle, selected && menuItemSelectedStyle, process.env.NODE_ENV === "production" ? "" : ";label:MenuItem;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1lbnVJdGVtLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQThCSSIsImZpbGUiOiJNZW51SXRlbS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuaW1wb3J0IGljb24gZnJvbSAnc3R5bGUvaWNvbidcblxuY29uc3QgbWVudUl0ZW1TdHlsZSA9IHtcbiAgcGFkZGluZzogJ3ZhcigtLW1lbnUtaXRlbS1wYWRkaW5nLCAwLjVlbSAxZW0pICcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG5cbiAgY29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNiknLFxuICBiYWNrZ3JvdW5kOiAndmFyKC0tbWVudS1pdGVtLWJhY2tncm91bmQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpJyxcbn1cblxuY29uc3QgbWVudUl0ZW1TZWxlY3RlZFN0eWxlID0ge1xuICBjb2xvcjogJyNGRkYnLFxuICBmb250V2VpZ2h0OiAnNjAwJyxcbiAgJzo6YWZ0ZXInOiB7XG4gICAgY29udGVudDogJ1wiIFwiJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICB3aWR0aDogJzFlbScsXG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICBtYXJnaW5MZWZ0OiAnMC41ZW0nLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLXNldHRpbmctY2hlY2staWNvbi1jb2xvciwgI2ZmZiknLFxuICAgIG1hc2tTaXplOiAnY29udGFpbicsXG4gICAgbWFza0ltYWdlOiBgdXJsKCR7aWNvbi5jaGVja30pYCxcbiAgfSxcbn1cblxuY29uc3QgTWVudUl0ZW0gPSAoe2xhYmVsLCBzZWxlY3RlZCwgb25DbGlja30pID0+IChcbiAgPGRpdlxuICAgIGNzcz17W21lbnVJdGVtU3R5bGUsIHNlbGVjdGVkICYmIG1lbnVJdGVtU2VsZWN0ZWRTdHlsZV19XG4gICAgb25DbGljaz17b25DbGlja31cbiAgPlxuICAgIHtsYWJlbH1cbiAgPC9kaXY+XG4pXG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtXG4iXX0= */"],
4933
+ css: [menuItemStyle, selected && menuItemSelectedStyle, process.env.NODE_ENV === "production" ? "" : ";label:MenuItem;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1lbnVJdGVtLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1DSSIsImZpbGUiOiJNZW51SXRlbS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuaW1wb3J0IGljb24gZnJvbSAnc3R5bGUvaWNvbidcblxuY29uc3QgbWVudUl0ZW1TdHlsZSA9IHtcbiAgcGFkZGluZzogJ3ZhcigtLW1lbnUtaXRlbS1wYWRkaW5nLCAwLjVlbSAxZW0pICcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIG1pbldpZHRoOiAwLFxuICBjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC42KScsXG4gIGJhY2tncm91bmQ6ICd2YXIoLS1tZW51LWl0ZW0tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSknLCBcbiAgJz4gZGl2Jzoge1xuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIH1cbn1cblxuY29uc3QgbWVudUl0ZW1TZWxlY3RlZFN0eWxlID0ge1xuICBjb2xvcjogJyNGRkYnLFxuICBmb250V2VpZ2h0OiAnNjAwJyxcbiAgJzo6YWZ0ZXInOiB7XG4gICAgY29udGVudDogJ1wiIFwiJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBmbGV4OiAnMCAwIDFlbScsXG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICBtYXJnaW5MZWZ0OiAnMC41ZW0nLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLXNldHRpbmctY2hlY2staWNvbi1jb2xvciwgI2ZmZiknLFxuICAgIG1hc2tTaXplOiAnY29udGFpbicsXG4gICAgbWFza0ltYWdlOiBgdXJsKCR7aWNvbi5jaGVja30pYCxcbiAgfSxcbn1cblxuY29uc3QgTWVudUl0ZW0gPSAoe2xhYmVsLCBzZWxlY3RlZCwgb25DbGlja30pID0+IChcbiAgPGRpdlxuICAgIGNzcz17W21lbnVJdGVtU3R5bGUsIHNlbGVjdGVkICYmIG1lbnVJdGVtU2VsZWN0ZWRTdHlsZV19XG4gICAgb25DbGljaz17b25DbGlja31cbiAgPlxuICAgIDxkaXY+e2xhYmVsfTwvZGl2PlxuICA8L2Rpdj5cbilcblxuZXhwb3J0IGRlZmF1bHQgTWVudUl0ZW1cbiJdfQ== */"],
4962
4934
  onClick: onClick,
4963
- children: label
4935
+ children: jsx$1("div", {
4936
+ children: label
4937
+ })
4964
4938
  });
4965
4939
 
4966
4940
  /* @jsxImportSource @emotion/react */
@@ -4970,7 +4944,8 @@ const landscapeStyle = {
4970
4944
  justifyContent: 'space-between',
4971
4945
  '> div': {
4972
4946
  boxSizing: 'border-box',
4973
- flex: '0 0 50%'
4947
+ flex: '0 0 50%',
4948
+ minWidth: 0
4974
4949
  },
4975
4950
  '> div:not(:first-of-type)': {
4976
4951
  marginTop: 0,
@@ -5063,7 +5038,7 @@ const LanguageMenu = ({
5063
5038
  sectionOptions = [],
5064
5039
  onChange
5065
5040
  }) => jsxs("div", {
5066
- css: [containerStyle$3, twoColumnStyle, uiType === 'desktop' && [desktopContainerStyle, desktop2ColumnStyle], process.env.NODE_ENV === "production" ? "" : ";label:LanguageMenu;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxhbmd1YWdlTWVudS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2R0kiLCJmaWxlIjoiTGFuZ3VhZ2VNZW51LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuaW1wb3J0IHtCdXR0b259IGZyb20gJy4vYnV0dG9ucydcbmltcG9ydCBNZW51SXRlbSBmcm9tICcuL01lbnVJdGVtJ1xuXG5jb25zdCBsYW5kc2NhcGVTdHlsZSA9IHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4V3JhcDogJ3dyYXAnLFxuICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAnPiBkaXYnOiB7XG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgZmxleDogJzAgMCA1MCUnLFxuICB9LFxuICAnPiBkaXY6bm90KDpmaXJzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5Ub3A6IDAsXG4gICAgZmxleDogJzAgMCBjYWxjKDUwJSAtIDFweCknLFxuICB9LFxuICBocjoge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIGJvcmRlckxlZnQ6ICcxcHggc29saWQgdHJhbnNwYXJlbnQnLFxuICB9LFxufVxuXG5jb25zdCBjb250YWluZXJTdHlsZSA9IHtcbiAgZm9udFNpemU6ICcxNnB4JyxcbiAgYmFja2dyb3VuZDogJyMyNjI2MjYnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgaDM6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgJ21hcmdpbi1ibG9jay1zdGFydCc6IDAsXG4gICAgJ21hcmdpbi1ibG9jay1lbmQnOiAwLFxuICAgIHBhZGRpbmc6ICcwLjZlbSAxZW0nLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHggNHB4IDAgMCcsXG4gICAgZm9udFNpemU6ICcxN3B4JyxcbiAgICBidXR0b246IHtcbiAgICAgIGZvbnRTaXplOiAnMC42ZW0nLFxuICAgICAgbWFyZ2luUmlnaHQ6ICcwLjVlbScsXG4gICAgfSxcbiAgfSxcbn1cblxuY29uc3QgdHdvQ29sdW1uU3R5bGUgPSB7XG4gIGhyOiB7XG4gICAgYm9yZGVyOiAnbm9uZScsXG4gIH0sXG4gICc+IGRpdiAnOiB7XG4gICAgJz4gZGl2Om5vdCg6Zmlyc3Qtb2YtdHlwZSknOiB7XG4gICAgICBtYXJnaW5Ub3A6ICcwLjY2ZW0nLFxuICAgIH0sXG4gICAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiBsYW5kc2NhcGVTdHlsZSxcbiAgfSxcbiAgJz4gZGl2ID4gZGl2ID4gZGl2OmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgcGFkZGluZzogJzAuNmVtIDEuMWVtJyxcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGNvbG9yOiAnI2FhYWViNScsXG4gICAgYmFja2dyb3VuZDogJ3ZhcigtLW1lbnUtaXRlbS1iYWNrZ3JvdW5kLCAjMjYyNjI2KScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgfSxcbn1cblxuY29uc3QgZGVza3RvcENvbnRhaW5lclN0eWxlID0ge1xuICBwYWRkaW5nQm90dG9tOiAnMS41ZW0nLFxuICB3aWR0aDogJzM0ZW0nLFxuICBtaW5IZWlnaHQ6ICczMC41JScsXG4gIG1heEhlaWdodDogJzYzLjUlJyxcbiAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC42MCknLFxuICAnLS1tZW51LWl0ZW0tYmFja2dyb3VuZCc6ICd0cmFuc3BhcmVudCcsXG4gICctLW1lbnUtaXRlbS1wYWRkaW5nJzogJzAuNjZlbSAxLjVlbScsXG4gIGgzOiB7XG4gICAgcGFkZGluZzogJzAuNjZlbSAxLjVlbScsXG4gICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICBjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC42MCknLFxuICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuODApJyxcbiAgfSxcbn1cblxuY29uc3QgZGVza3RvcDJDb2x1bW5TdHlsZSA9IHtcbiAgJz4gZGl2JzogbGFuZHNjYXBlU3R5bGUsXG4gICc+IGRpdiBocic6IHtcbiAgICBmb250U2l6ZTogJzE1MCUnLFxuICAgIGJvcmRlckxlZnQ6ICcxcHggc29saWQgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMCknLFxuICB9LFxuICAnPiBkaXYgPiBkaXYnOiB7XG4gICAgcGFkZGluZzogJzAgMWVtJyxcbiAgfSxcbiAgJz4gZGl2ID4gZGl2ID4gZGl2OmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgcGFkZGluZzogJzAuNjZlbSAwLjVlbScsXG4gICAgY29sb3I6ICcjZmZmJyxcbiAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICc2MDAnLFxuICB9LFxufVxuXG5jb25zdCBjbG9zZU1lbnUgPSBldmVudCA9PlxuICBldmVudC5jdXJyZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KCdjbG9zZS1tZW51Jywge2J1YmJsZXM6IHRydWV9KVxuICApXG5cbmNvbnN0IExhbmd1YWdlTWVudSA9ICh7XG4gIHVpVHlwZSA9ICdtb2JpbGUnLFxuICB0aXRsZSA9ICfpn7Plo7Ag44O7IOWtl+W5lScsXG4gIHNlY3Rpb25zID0gWyfpn7Plo7AnLCAn5a2X5bmVJ10sXG4gIHNlY3Rpb25PcHRpb25zID0gW10sXG4gIG9uQ2hhbmdlLFxufSkgPT4gKFxuICA8ZGl2XG4gICAgY3NzPXtbXG4gICAgICBjb250YWluZXJTdHlsZSxcbiAgICAgIHR3b0NvbHVtblN0eWxlLFxuICAgICAgdWlUeXBlID09PSAnZGVza3RvcCcgJiYgW2Rlc2t0b3BDb250YWluZXJTdHlsZSwgZGVza3RvcDJDb2x1bW5TdHlsZV0sXG4gICAgXX1cbiAgPlxuICAgIDxoMz5cbiAgICAgIHt1aVR5cGUgIT09ICdkZXNrdG9wJyAmJiA8QnV0dG9uIHN0YXJ0SWNvbj1cImNsb3NlXCIgb25DbGljaz17Y2xvc2VNZW51fSAvPn1cbiAgICAgIHt0aXRsZX1cbiAgICA8L2gzPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2PntzZWN0aW9uc1swXX08L2Rpdj5cbiAgICAgICAge3NlY3Rpb25PcHRpb25zWzBdLm1hcChvcHRpb24gPT4gKFxuICAgICAgICAgIDxNZW51SXRlbSB7Li4ub3B0aW9ufSBvbkNsaWNrPXtldmVudCA9PiBvbkNoYW5nZShldmVudCwgb3B0aW9uKX0gLz5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxociAvPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdj57c2VjdGlvbnNbMV19PC9kaXY+XG4gICAgICAgIHtzZWN0aW9uT3B0aW9uc1sxXS5tYXAob3B0aW9uID0+IChcbiAgICAgICAgICA8TWVudUl0ZW0gey4uLm9wdGlvbn0gb25DbGljaz17ZXZlbnQgPT4gb25DaGFuZ2UoZXZlbnQsIG9wdGlvbil9IC8+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuKVxuXG5MYW5ndWFnZU1lbnUuc3R5bGVzID0gY29udGFpbmVyU3R5bGVcbkxhbmd1YWdlTWVudS5kZXNrdG9wU3R5bGVzID0gZGVza3RvcENvbnRhaW5lclN0eWxlXG5cbmV4cG9ydCBkZWZhdWx0IExhbmd1YWdlTWVudVxuIl19 */"],
5041
+ css: [containerStyle$3, twoColumnStyle, uiType === 'desktop' && [desktopContainerStyle, desktop2ColumnStyle], process.env.NODE_ENV === "production" ? "" : ";label:LanguageMenu;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxhbmd1YWdlTWVudS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4R0kiLCJmaWxlIjoiTGFuZ3VhZ2VNZW51LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGpzeEltcG9ydFNvdXJjZSBAZW1vdGlvbi9yZWFjdCAqL1xuaW1wb3J0IHtCdXR0b259IGZyb20gJy4vYnV0dG9ucydcbmltcG9ydCBNZW51SXRlbSBmcm9tICcuL01lbnVJdGVtJ1xuXG5jb25zdCBsYW5kc2NhcGVTdHlsZSA9IHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4V3JhcDogJ3dyYXAnLFxuICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAnPiBkaXYnOiB7XG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgZmxleDogJzAgMCA1MCUnLFxuICAgIG1pbldpZHRoOiAwLFxuICB9LFxuICAnPiBkaXY6bm90KDpmaXJzdC1vZi10eXBlKSc6IHtcbiAgICBtYXJnaW5Ub3A6IDAsXG4gICAgZmxleDogJzAgMCBjYWxjKDUwJSAtIDFweCknLFxuICB9LFxuICBocjoge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIGJvcmRlckxlZnQ6ICcxcHggc29saWQgdHJhbnNwYXJlbnQnLFxuICB9LFxufVxuXG5jb25zdCBjb250YWluZXJTdHlsZSA9IHtcbiAgZm9udFNpemU6ICcxNnB4JyxcbiAgYmFja2dyb3VuZDogJyMyNjI2MjYnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgaDM6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgJ21hcmdpbi1ibG9jay1zdGFydCc6IDAsXG4gICAgJ21hcmdpbi1ibG9jay1lbmQnOiAwLFxuICAgIHBhZGRpbmc6ICcwLjZlbSAxZW0nLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHggNHB4IDAgMCcsXG4gICAgZm9udFNpemU6ICcxN3B4JyxcbiAgICBidXR0b246IHtcbiAgICAgIGZvbnRTaXplOiAnMC42ZW0nLFxuICAgICAgbWFyZ2luUmlnaHQ6ICcwLjVlbScsXG4gICAgfSxcbiAgfSxcbn1cblxuY29uc3QgdHdvQ29sdW1uU3R5bGUgPSB7XG4gIGhyOiB7XG4gICAgYm9yZGVyOiAnbm9uZScsXG4gIH0sXG4gICc+IGRpdiAnOiB7XG4gICAgJz4gZGl2Om5vdCg6Zmlyc3Qtb2YtdHlwZSknOiB7XG4gICAgICBtYXJnaW5Ub3A6ICcwLjY2ZW0nLFxuICAgIH0sXG4gICAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiBsYW5kc2NhcGVTdHlsZSxcbiAgfSxcbiAgJz4gZGl2ID4gZGl2ID4gZGl2OmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgcGFkZGluZzogJzAuNmVtIDEuMWVtJyxcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGNvbG9yOiAnI2FhYWViNScsXG4gICAgYmFja2dyb3VuZDogJ3ZhcigtLW1lbnUtaXRlbS1iYWNrZ3JvdW5kLCAjMjYyNjI2KScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgfSxcbn1cblxuY29uc3QgZGVza3RvcENvbnRhaW5lclN0eWxlID0ge1xuICBwYWRkaW5nQm90dG9tOiAnMS41ZW0nLFxuICB3aWR0aDogJzM0ZW0nLFxuICBtaW5IZWlnaHQ6ICczMC41JScsXG4gIG1heEhlaWdodDogJzYzLjUlJyxcbiAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC42MCknLFxuICAnLS1tZW51LWl0ZW0tYmFja2dyb3VuZCc6ICd0cmFuc3BhcmVudCcsXG4gICctLW1lbnUtaXRlbS1wYWRkaW5nJzogJzAuNjZlbSAxLjVlbScsXG4gIGgzOiB7XG4gICAgcGFkZGluZzogJzAuNjZlbSAxLjVlbScsXG4gICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICBjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC42MCknLFxuICAgIGJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuODApJyxcbiAgfSxcbn1cblxuY29uc3QgZGVza3RvcDJDb2x1bW5TdHlsZSA9IHtcbiAgJz4gZGl2JzogbGFuZHNjYXBlU3R5bGUsXG4gICc+IGRpdiBocic6IHtcbiAgICBmb250U2l6ZTogJzE1MCUnLFxuICAgIGJvcmRlckxlZnQ6ICcxcHggc29saWQgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMCknLFxuICB9LFxuICAnPiBkaXYgPiBkaXYnOiB7XG4gICAgcGFkZGluZzogJzAgMWVtJyxcbiAgfSxcbiAgJz4gZGl2ID4gZGl2ID4gZGl2OmZpcnN0LW9mLXR5cGUnOiB7XG4gICAgcGFkZGluZzogJzAuNjZlbSAwLjVlbScsXG4gICAgY29sb3I6ICcjZmZmJyxcbiAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICc2MDAnLFxuICB9LFxufVxuXG5jb25zdCBjbG9zZU1lbnUgPSBldmVudCA9PlxuICBldmVudC5jdXJyZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KCdjbG9zZS1tZW51Jywge2J1YmJsZXM6IHRydWV9KVxuICApXG5cbmNvbnN0IExhbmd1YWdlTWVudSA9ICh7XG4gIHVpVHlwZSA9ICdtb2JpbGUnLFxuICB0aXRsZSA9ICfpn7Plo7Ag44O7IOWtl+W5lScsXG4gIHNlY3Rpb25zID0gWyfpn7Plo7AnLCAn5a2X5bmVJ10sXG4gIHNlY3Rpb25PcHRpb25zID0gW10sXG4gIG9uQ2hhbmdlLFxufSkgPT4gKFxuICA8ZGl2XG4gICAgY3NzPXtbXG4gICAgICBjb250YWluZXJTdHlsZSxcbiAgICAgIHR3b0NvbHVtblN0eWxlLFxuICAgICAgdWlUeXBlID09PSAnZGVza3RvcCcgJiYgW2Rlc2t0b3BDb250YWluZXJTdHlsZSwgZGVza3RvcDJDb2x1bW5TdHlsZV0sXG4gICAgXX1cbiAgPlxuICAgIDxoMz5cbiAgICAgIHt1aVR5cGUgIT09ICdkZXNrdG9wJyAmJiA8QnV0dG9uIHN0YXJ0SWNvbj1cImNsb3NlXCIgb25DbGljaz17Y2xvc2VNZW51fSAvPn1cbiAgICAgIHt0aXRsZX1cbiAgICA8L2gzPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2PntzZWN0aW9uc1swXX08L2Rpdj5cbiAgICAgICAge3NlY3Rpb25PcHRpb25zWzBdLm1hcChvcHRpb24gPT4gKFxuICAgICAgICAgIDxNZW51SXRlbSB7Li4ub3B0aW9ufSBvbkNsaWNrPXtldmVudCA9PiBvbkNoYW5nZShldmVudCwgb3B0aW9uKX0gLz5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxociAvPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdj57c2VjdGlvbnNbMV19PC9kaXY+XG4gICAgICAgIHtzZWN0aW9uT3B0aW9uc1sxXS5tYXAob3B0aW9uID0+IChcbiAgICAgICAgICA8TWVudUl0ZW0gey4uLm9wdGlvbn0gb25DbGljaz17ZXZlbnQgPT4gb25DaGFuZ2UoZXZlbnQsIG9wdGlvbil9IC8+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuKVxuXG5MYW5ndWFnZU1lbnUuc3R5bGVzID0gY29udGFpbmVyU3R5bGVcbkxhbmd1YWdlTWVudS5kZXNrdG9wU3R5bGVzID0gZGVza3RvcENvbnRhaW5lclN0eWxlXG5cbmV4cG9ydCBkZWZhdWx0IExhbmd1YWdlTWVudVxuIl19 */"],
5067
5042
  children: [jsxs("h3", {
5068
5043
  children: [uiType !== 'desktop' && jsx$1(Button, {
5069
5044
  startIcon: "close",
@@ -7846,7 +7821,7 @@ const loadShaka = async (videoElement, config = {}, options = {}) => {
7846
7821
  // See: https://github.com/shaka-project/shaka-player/issues/3526
7847
7822
  safeSeekOffset: 0,
7848
7823
  rebufferingGoal: 0,
7849
- ...(needNativeHls() && {
7824
+ ...(isSafari() && {
7850
7825
  preferNativeHls: true
7851
7826
  }),
7852
7827
  ...config.streaming
@@ -7938,7 +7913,7 @@ const loadShaka = async (videoElement, config = {}, options = {}) => {
7938
7913
  responseHandlers: [rewriteDashManifest]
7939
7914
  };
7940
7915
 
7941
- if (needNativeHls()) {
7916
+ if (isSafari()) {
7942
7917
  setupKKFariplay(player, extensionOptions);
7943
7918
  }
7944
7919
 
@@ -8229,6 +8204,8 @@ const Video = ({
8229
8204
 
8230
8205
  var Video$1 = Video;
8231
8206
 
8207
+ /* eslint-disable no-param-reassign */
8208
+
8232
8209
  const getSpeedItems = items => items.map(value => ({
8233
8210
  label: `${value}x`,
8234
8211
  value
@@ -8271,18 +8248,58 @@ const getQualityItemsFromManifest = player => {
8271
8248
  const getQualitySettings = (options, player) => {
8272
8249
  // With native HLS, manifest rewrite is required to enable quality setting
8273
8250
  // TODO let this covered by test, maybe refactor?
8274
- const items = needNativeHls() && !options.rewriteManifest ? [] : options.items || getQualityItemsFromManifest(player);
8251
+ const items = isSafari() && !options.rewriteManifest ? [] : options.items || getQualityItemsFromManifest(player);
8252
+
8253
+ const getDefault = (preferred = options.default || items[0].value) => {
8254
+ const maxHeight = preferred || items[0].value;
8255
+ return (nearest(items.filter(item => (item.height || item.value) <= maxHeight), item => (item.height || item.value) - maxHeight) || items[0]).value;
8256
+ };
8257
+
8275
8258
  return items.length > 0 && items[0] && {
8276
8259
  name: 'quality',
8277
8260
  title: 'KKS.QUALITY',
8278
8261
  items,
8279
- getDefault: (preferred = options.default || items[0].value) => {
8280
- const maxHeight = preferred || items[0].value;
8281
- return (nearest(items.filter(item => (item.height || item.value) <= maxHeight), item => (item.height || item.value) - maxHeight) || items[0]).value;
8282
- }
8262
+ getDefault
8283
8263
  };
8284
8264
  };
8285
8265
 
8266
+ const getAudioTracks = (_, {
8267
+ player
8268
+ }) => {
8269
+ if (!player) return []; // Bitmovin support is omitted as it is not needed in near future
8270
+
8271
+ const all = player.getVariantTracks().reduce((result, track) => {
8272
+ var _track$label;
8273
+
8274
+ const label = ((_track$label = track.label) === null || _track$label === void 0 ? void 0 : _track$label.trim()) || track.language;
8275
+ const id = `${track.language}:${label}`;
8276
+ result[id] = result[id] || { ...track,
8277
+ type: 'audio',
8278
+ label,
8279
+ value: {
8280
+ id,
8281
+ label,
8282
+ language: track.language
8283
+ }
8284
+ };
8285
+
8286
+ if (track.active) {
8287
+ result[id].selected = true;
8288
+ }
8289
+
8290
+ return result;
8291
+ }, {});
8292
+ const allTracks = Object.values(all);
8293
+ const namedTracks = allTracks.filter(track => !/^un/i.test(track.language || ''));
8294
+ return Object.values(namedTracks.length > 0 ? namedTracks : allTracks);
8295
+ };
8296
+
8297
+ const getCurrentAudioTrack = (media, {
8298
+ player
8299
+ }) => getAudioTracks(media, {
8300
+ player
8301
+ }).find(track => track.selected);
8302
+
8286
8303
  const getSelectedAudioName = player => {
8287
8304
  const track = getCurrentAudioTrack({}, {
8288
8305
  player
@@ -8371,16 +8388,9 @@ const getSettingsData = ({
8371
8388
  // TODO extract base player specific things
8372
8389
  const audioItems = getAudioTracks({}, {
8373
8390
  player
8374
- }).filter(track => track.language && track.language !== 'und').map(track => ({
8375
- label: track.label || track.language,
8376
- value: {
8377
- language: track.language,
8378
- label: track.label,
8379
- id: [track.language, track.label].join(':')
8380
- }
8381
- })) || [];
8391
+ });
8382
8392
  const selectedSource = getSource(source, {
8383
- preferManifestType: needNativeHls() ? 'hls' : 'dash'
8393
+ preferManifestType: 'platform'
8384
8394
  }) || {};
8385
8395
  const currentSpeedItems = getSpeedItems(speedItems);
8386
8396
  const sections = [].concat([quality && getQualitySettings({ ...quality,
@@ -8388,22 +8398,15 @@ const getSettingsData = ({
8388
8398
  }, player), {
8389
8399
  name: 'subtitles',
8390
8400
  title: 'KKS.SUBTITLES',
8391
- items: [...getTextTracks({}, {
8401
+ items: [].concat(getTextTracks({}, {
8392
8402
  player
8393
- }).map(track => ({
8394
- label: track.label || track.language,
8395
- value: {
8396
- language: track.language,
8397
- label: track.label,
8398
- id: [track.language, track.label].join(':')
8399
- }
8400
- })), {
8403
+ }), {
8401
8404
  label: 'OFF',
8402
8405
  value: {
8403
8406
  language: 'off',
8404
8407
  id: 'off'
8405
8408
  }
8406
- }]
8409
+ })
8407
8410
  }, {
8408
8411
  name: 'audio',
8409
8412
  title: 'KKS.AUDIO',
@@ -8455,6 +8458,30 @@ const getSettingsData = ({
8455
8458
  };
8456
8459
  };
8457
8460
 
8461
+ const matchTracks = (tracks, info) => (info === null || info === void 0 ? void 0 : info.map(track => tracks.find(t => t.language === track.language && t.label === track.label)).filter(Boolean)) || tracks;
8462
+
8463
+ const getLanguageOptions = (player, info) => {
8464
+ const audioTracks = player && getAudioTracks({}, {
8465
+ player
8466
+ });
8467
+ const textTracks = getTextTracks({}, {
8468
+ player
8469
+ });
8470
+ const textOptions = [].concat(textTracks, {
8471
+ type: 'subtitles',
8472
+ label: 'OFF',
8473
+ selected: !textTracks.some(track => track.selected),
8474
+ value: {
8475
+ language: 'off',
8476
+ id: 'off'
8477
+ }
8478
+ });
8479
+ return {
8480
+ audioTracks: matchTracks(audioTracks, info.audioTracks),
8481
+ textTracks: matchTracks(textOptions, info.textTracks)
8482
+ };
8483
+ };
8484
+
8458
8485
  const parseVTT = data => {
8459
8486
  const lines = data.split(/\n\n/g).slice(1); // may replace with async parser to prevent blocking render
8460
8487
 
@@ -8632,58 +8659,40 @@ const defaultSettings = {};
8632
8659
  const shouldPause = ({
8633
8660
  userFocus,
8634
8661
  uiType
8635
- }) => uiType === 'mobile' && /settings|chapter-list/.test(userFocus) || /blocking|seekbar|share-inner/.test(userFocus);
8636
-
8637
- const getLanguageOptions = settingState => {
8638
- var _settingState$values$, _settingState$section, _settingState$section2, _settingState$values$2, _settingState$section3, _settingState$section4;
8639
-
8640
- const selectedAudio = settingState === null || settingState === void 0 ? void 0 : (_settingState$values$ = settingState.values.audio) === null || _settingState$values$ === void 0 ? void 0 : _settingState$values$.id;
8641
- const audioTracks = ((settingState === null || settingState === void 0 ? void 0 : (_settingState$section = settingState.sections) === null || _settingState$section === void 0 ? void 0 : (_settingState$section2 = _settingState$section.find(section => section.name === 'audio')) === null || _settingState$section2 === void 0 ? void 0 : _settingState$section2.items) || []).map(item => ({
8642
- section: 'audio',
8643
- ...item,
8644
- ...(item.value.id === selectedAudio && {
8645
- selected: true
8646
- })
8647
- }));
8648
- const selectedSubtitle = settingState === null || settingState === void 0 ? void 0 : (_settingState$values$2 = settingState.values.subtitles) === null || _settingState$values$2 === void 0 ? void 0 : _settingState$values$2.id;
8649
- const subtitleTracks = ((settingState === null || settingState === void 0 ? void 0 : (_settingState$section3 = settingState.sections) === null || _settingState$section3 === void 0 ? void 0 : (_settingState$section4 = _settingState$section3.find(section => section.name === 'subtitles')) === null || _settingState$section4 === void 0 ? void 0 : _settingState$section4.items) || []).map(item => ({
8650
- section: 'subtitles',
8651
- ...item,
8652
- ...(item.value.id === selectedSubtitle && {
8653
- selected: true
8654
- })
8655
- }));
8656
- return {
8657
- audioTracks,
8658
- subtitleTracks
8659
- };
8660
- }; // TODO extract to somewhere else
8662
+ }) => uiType === 'mobile' && /settings|chapter-list/.test(userFocus) || /blocking|seekbar|share-inner/.test(userFocus); // TODO extract to somewhere else
8661
8663
 
8662
8664
 
8663
8665
  const menuClasses = {
8664
- default: /*#__PURE__*/css$1(LanguageMenu.styles, process.env.NODE_ENV === "production" ? "" : ";label:default;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByZW1pdW1QbGF5ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkZXIiwiZmlsZSI6IlByZW1pdW1QbGF5ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtjc3N9IGZyb20gJ0BlbW90aW9uL2NzcydcbmltcG9ydCB1c2VEaW1lbnNpb25zIGZyb20gJ3JlYWN0LWNvb2wtZGltZW5zaW9ucydcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJ9IGZyb20gJ0BqdWdnbGUvcmVzaXplLW9ic2VydmVyJ1xuXG5pbXBvcnQge2hhbmRsZUVycm9yfSBmcm9tICdwbGF5ZXJDb3JlL2Vycm9ycydcbmltcG9ydCB7b259IGZyb20gJ3V0aWwvZXZlbnRzJ1xuaW1wb3J0IHtoYXZlUG9pbnRlciwgaXNEZXNrdG9wfSBmcm9tICd1dGlsL2Vudmlyb25tZW50J1xuaW1wb3J0IG11bHRpUmVmIGZyb20gJ3V0aWwvbXVsdGlSZWYnXG5pbXBvcnQge29uVmlld01vZGVDaGFuZ2UsIHRvZ2dsZUZ1bGxzY3JlZW59IGZyb20gJ3V0aWwvdmlld01vZGVzJ1xuaW1wb3J0IHt1c2VBdXRvSGlkZX0gZnJvbSAnaG9va3MnXG5pbXBvcnQge0ludGxQcm92aWRlcn0gZnJvbSAnY29udGV4dC9JMThuJ1xuaW1wb3J0IHtnZXRNZWRpYVRpbWUsIGlzQnVmZmVyZWR9IGZyb20gJ3BsYXllckNvcmUvbWVkaWFCaW5kaW5ncydcbmltcG9ydCBFcnJvciBmcm9tICdwbGF5ZXJVaS9FcnJvcidcbmltcG9ydCBMYXlvdXQgZnJvbSAncGxheWVyVWkvRGVmYXVsdExheW91dCdcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgTGl2ZUJ1dHRvbixcbiAgRnVsbHNjcmVlbkJ1dHRvbixcbiAgUGxheUJ1dHRvbixcbiAgRm9yd2FyZEJ1dHRvbixcbn0gZnJvbSAncGxheWVyVWkvYnV0dG9ucydcbmltcG9ydCBTZWVrYmFyIGZyb20gJ3BsYXllclVpL1NlZWtiYXInXG5pbXBvcnQgRGlzcGxheVRpbWUgZnJvbSAncGxheWVyVWkvRGlzcGxheVRpbWUnXG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAncGxheWVyVWkvTG9hZGluZ1NwaW5uZXInXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAncGxheWVyVWkvQmFja2Ryb3AnXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSAncGxheWVyVWkvU2V0dGluZ3MnXG5pbXBvcnQgT3ZlcmxheVBhbmVsIGZyb20gJ3BsYXllclVpL092ZXJsYXlQYW5lbCdcbmltcG9ydCBMYW5ndWFnZU1lbnUgZnJvbSAncGxheWVyVWkvTGFuZ3VhZ2VNZW51J1xuaW1wb3J0IFBsYXlQYW5lbCBmcm9tICdwbGF5ZXJVaS9QbGF5UGFuZSdcbmltcG9ydCBWb2x1bWVDb250cm9sIGZyb20gJ2NvbXBvbmVudC9Wb2x1bWVDb250cm9sJ1xuaW1wb3J0IENhc3RVaSBmcm9tICdjYXN0L0Nhc3RVaSdcbmltcG9ydCB7bGlua0Nhc3R9IGZyb20gJ2Nhc3QvZnJhbWV3b3JrJ1xuaW1wb3J0IHtDYXN0U3RhdGV9IGZyb20gJ0VudW0nXG5pbXBvcnQge2Rpc3BhdGNoQ2hhcHRlckV2ZW50c30gZnJvbSAnLi90aW1lbGluZSdcbmltcG9ydCBWaWRlbyBmcm9tICcuLi9WaWRlbydcbmltcG9ydCB7Z2V0UXVhbGl0eU9wdGlvbnMsIGdldFNldHRpbmdzRGF0YX0gZnJvbSAnLi9zZXR0aW5ncydcbmltcG9ydCB7bGlua01lZGlhVm9sdW1lLCBzeW5jVm9sdW1lfSBmcm9tICcuL3ZvbHVtZSdcbmltcG9ydCBTZWVrUHJldmlldyBmcm9tICcuL1NlZWtQcmV2aWV3J1xuXG5jb25zdCBzaXplcyA9IHtcbiAgJ3NtYWxsLWVtYmVkJzogMjAwLFxuICBlbWJlZDogNDAwLFxuICAndGFibGV0LXBvcnRyYWl0JzogNjAwLFxuICAndGFibGV0LWxhbmRzY2FwZSc6IDkwMCxcbiAgZGVza3RvcDogMTIwMCxcbn1cblxuY29uc3QgdXNlTGlua1N0YXRlID0gKHJlcXVlc3QsIGRlcGVuZGVuY2llcyA9IFtdKSA9PiB7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlcXVlc3Qoc2V0U3RhdGUpXG4gIH0sIGRlcGVuZGVuY2llcylcbiAgcmV0dXJuIHN0YXRlXG59XG5cbmNvbnN0IGZsaXBTdGF0ZSA9IHN0YXRlID0+IChzdGF0ZSA9PT0gJ3BsYXlpbmcnID8gJ3BhdXNlZCcgOiAncGxheWluZycpXG5cbi8vIEZJWE1FOiB0b28gZmV3IGxpbmVzIHRvIHNwbGl0IGEgZmlsZSwgbG9va2luZyBhIGJldHRlciBwbGFjZVxuY29uc3QgZ2V0VGh1bWJuYWlsc1VybCA9IHNvdXJjZSA9PlxuICBbXS5jb25jYXQoc291cmNlKS5maW5kKGl0ZW0gPT4gaXRlbS50eXBlID09PSAndGh1bWJuYWlsJyk/LnNyY1xuXG5jb25zdCBkZWZhdWx0U2V0dGluZ3MgPSB7fVxuXG5jb25zdCBzaG91bGRQYXVzZSA9ICh7dXNlckZvY3VzLCB1aVR5cGV9KSA9PlxuICAodWlUeXBlID09PSAnbW9iaWxlJyAmJiAvc2V0dGluZ3N8Y2hhcHRlci1saXN0Ly50ZXN0KHVzZXJGb2N1cykpIHx8XG4gIC9ibG9ja2luZ3xzZWVrYmFyfHNoYXJlLWlubmVyLy50ZXN0KHVzZXJGb2N1cylcblxuY29uc3QgZ2V0TGFuZ3VhZ2VPcHRpb25zID0gc2V0dGluZ1N0YXRlID0+IHtcbiAgY29uc3Qgc2VsZWN0ZWRBdWRpbyA9IHNldHRpbmdTdGF0ZT8udmFsdWVzLmF1ZGlvPy5pZFxuICBjb25zdCBhdWRpb1RyYWNrcyA9IChcbiAgICBzZXR0aW5nU3RhdGU/LnNlY3Rpb25zPy5maW5kKHNlY3Rpb24gPT4gc2VjdGlvbi5uYW1lID09PSAnYXVkaW8nKT8uaXRlbXMgfHxcbiAgICBbXVxuICApLm1hcChpdGVtID0+ICh7XG4gICAgc2VjdGlvbjogJ2F1ZGlvJyxcbiAgICAuLi5pdGVtLFxuICAgIC4uLihpdGVtLnZhbHVlLmlkID09PSBzZWxlY3RlZEF1ZGlvICYmIHtzZWxlY3RlZDogdHJ1ZX0pLFxuICB9KSlcbiAgY29uc3Qgc2VsZWN0ZWRTdWJ0aXRsZSA9IHNldHRpbmdTdGF0ZT8udmFsdWVzLnN1YnRpdGxlcz8uaWRcbiAgY29uc3Qgc3VidGl0bGVUcmFja3MgPSAoXG4gICAgc2V0dGluZ1N0YXRlPy5zZWN0aW9ucz8uZmluZChzZWN0aW9uID0+IHNlY3Rpb24ubmFtZSA9PT0gJ3N1YnRpdGxlcycpXG4gICAgICA/Lml0ZW1zIHx8IFtdXG4gICkubWFwKGl0ZW0gPT4gKHtcbiAgICBzZWN0aW9uOiAnc3VidGl0bGVzJyxcbiAgICAuLi5pdGVtLFxuICAgIC4uLihpdGVtLnZhbHVlLmlkID09PSBzZWxlY3RlZFN1YnRpdGxlICYmIHtzZWxlY3RlZDogdHJ1ZX0pLFxuICB9KSlcbiAgcmV0dXJuIHthdWRpb1RyYWNrcywgc3VidGl0bGVUcmFja3N9XG59XG5cbi8vIFRPRE8gZXh0cmFjdCB0byBzb21ld2hlcmUgZWxzZVxuY29uc3QgbWVudUNsYXNzZXMgPSB7XG4gIGRlZmF1bHQ6IGNzcyhMYW5ndWFnZU1lbnUuc3R5bGVzKSxcbiAgZGVza3RvcDogY3NzKExhbmd1YWdlTWVudS5zdHlsZXMsIExhbmd1YWdlTWVudS5kZXNrdG9wU3R5bGVzKSxcbn1cblxuY29uc3QgTGFuZ3VhZ2VTZXR0aW5ncyA9ICh7XG4gIHVpVHlwZSxcbiAgYXVkaW9UcmFja3MgPSBbXSxcbiAgc3VidGl0bGVUcmFja3MgPSBbXSxcbiAgb25DaGFuZ2UsXG4gIHNsb3RzID0ge0xhbmd1YWdlTWVudX0sXG4gIC4uLnJlc3Rcbn0pID0+IChcbiAgPE92ZXJsYXlQYW5lbCBidXR0b25JY29uPVwic3VidGl0bGVcIj5cbiAgICA8c2xvdHMuTGFuZ3VhZ2VNZW51XG4gICAgICB1aVR5cGU9e3VpVHlwZX1cbiAgICAgIGNsYXNzZXM9e21lbnVDbGFzc2VzfVxuICAgICAgc2VjdGlvbk9wdGlvbnM9e1thdWRpb1RyYWNrcywgc3VidGl0bGVUcmFja3NdfVxuICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgey4uLnJlc3R9XG4gICAgLz5cbiAgPC9PdmVybGF5UGFuZWw+XG4pXG5cbmNvbnN0IFByZW1pdW1QbGF5ZXIgPSAoe1xuICBzb3VyY2UsXG4gIHN0YXJ0VGltZSxcbiAgcXVhbGl0eSA9IHt9LFxuICB0aXRsZSxcbiAgbWV0YWRhdGEsXG4gIGNoYW5uZWxUaXRsZSxcbiAgY2hhcHRlcnMsXG4gIHBsYXliYWNrU3RhdGU6IGFwcFBsYXliYWNrU3RhdGUsXG4gIGN1cnJlbnRUaW1lOiBhcHBDdXJyZW50VGltZSxcbiAgcGxheWJhY2tSYXRlOiBhcHBQbGF5YmFja1JhdGUsXG4gIGxvb3AsXG4gIHZvbHVtZTogYXBwVm9sdW1lLFxuICB0aHVtYm5haWxzVXJsLFxuICBjb250cm9scyA9IHthdXRvaGlkZTogMzAwMH0sXG4gIG1hcmtzID0gW10sXG4gIC8vIFRPRE8gc2VjdGlvbklkXG4gIGludGwsXG4gIHNldHRpbmdzOiBhcHBTZXR0aW5ncyA9IGRlZmF1bHRTZXR0aW5ncyxcbiAgYmxvY2tpbmcsXG4gIHBsdWdpbnMgPSBbXSxcbiAgbW9kdWxlc0NvbmZpZyxcblxuICB1aVR5cGUgPSBpc0Rlc2t0b3AoKSA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnLFxuICBzdHlsZSxcbiAgY2hpbGRyZW4sXG4gIHVpTW9kZSA9ICdzdGFuZGFsb25lJyxcbiAgY2FzdDogY2FzdE9wdGlvbnMgPSAnY29tcGF0aWJsZScsXG4gIHNsb3RzLFxuICBzbG90UHJvcHMgPSB7fSxcbiAgb25FcnJvcixcbiAgb25QbGF5YmFja1N0YXRlQ2hhbmdlLFxuICBvbkJhY2ssXG4gIG9uQ2FzdCxcbiAgb25DaGFuZ2VOZXh0LFxuICBvbkNoYW5nZVByZXZpb3VzLFxuICBvbk9wZW5TZXR0aW5ncyxcbiAgb25DaGFuZ2VTZXR0aW5ncyxcbiAgb25QbGF5ZXJMb2FkZWQsXG4gIG9uQmxvY2tlZEF1dG9wbGF5LFxuICBvblBsYXlsb2dGaXJlZCxcbiAgLi4udmlkZW9Qcm9wc1xufSkgPT4ge1xuICBjb25zdCBjb21wb25lbnRzID0ge1xuICAgIFZvbHVtZUNvbnRyb2wsXG4gICAgQ2FzdFVpLFxuICAgIERpc3BsYXlUaW1lLFxuICAgIExpdmVCdXR0b24sXG4gICAgU2Vla2JhcixcbiAgICBTZXR0aW5ncyxcbiAgICAuLi5zbG90cyxcbiAgfVxuICBjb25zdCB2aWRlb1JlZiA9IHVzZVJlZigpXG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZigpXG4gIGNvbnN0IHBsYXllclJlZiA9IHVzZVJlZigpXG4gIGNvbnN0IGFkQ29udGFpbmVyUmVmID0gdXNlUmVmKClcbiAgY29uc3QgcmVmcyA9IHVzZVJlZih7fSlcbiAgLy8gVE9ETyBtb3ZlIFJXRCByZWxhdGVkIHRvIExheW91dFxuICBjb25zdCB7XG4gICAgY3VycmVudEJyZWFrcG9pbnQ6IHNpemUsXG4gICAgd2lkdGgsXG4gICAgb2JzZXJ2ZSxcbiAgfSA9IHVzZURpbWVuc2lvbnMoe1xuICAgIHBvbHlmaWxsOiBSZXNpemVPYnNlcnZlcixcbiAgICBicmVha3BvaW50czogc2l6ZXMsXG4gIH0pXG4gIGNvbnN0IFtpc1VzZXJBY3RpdmUsIHNldElzVXNlckFjdGl2ZV0gPSB1c2VTdGF0ZShcbiAgICB1aU1vZGUgPT09ICdzdGFuZGFsb25lJyA/IHRydWUgOiB2aWRlb1Byb3BzLmF1dG9wbGF5XG4gIClcbiAgY29uc3QgW3VzZXJGb2N1cywgc2V0VXNlckZvY3VzXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbdGFyZ2V0U3RhdGUsIHNldFRhcmdldFN0YXRlXSA9IHVzZVN0YXRlKCgpID0+ICh7XG4gICAgcGxheWJhY2tTdGF0ZTpcbiAgICAgIGFwcFBsYXliYWNrU3RhdGUgfHwgKHZpZGVvUHJvcHMuYXV0b3BsYXkgPyAncGxheWluZycgOiAncGF1c2VkJyksXG4gICAgY3VycmVudFRpbWU6IHN0YXJ0VGltZSxcbiAgfSkpXG4gIGNvbnN0IFtwbGF5YmFja1RpbWUsIHNldFBsYXliYWNrVGltZV0gPSB1c2VTdGF0ZSh7XG4gICAgY3VycmVudFRpbWU6IDAsXG4gICAgYnVmZmVyVGltZTogMCxcbiAgfSlcbiAgY29uc3QgdG9nZ2xlUGxheSA9IChvdmVycmlkZVN0YXRlLCB7dHJpZ2dlcmVkQnl9ID0ge30pID0+IHtcbiAgICBpZiAodGFyZ2V0U3RhdGUucGxheWJhY2tTdGF0ZSAhPT0gb3ZlcnJpZGVTdGF0ZSkge1xuICAgICAgc2V0VGFyZ2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHBsYXliYWNrU3RhdGU6IG92ZXJyaWRlU3RhdGUgfHwgZmxpcFN0YXRlKHN0YXRlLnBsYXliYWNrU3RhdGUpLFxuICAgICAgICBhbmltYXRpb246XG4gICAgICAgICAgdHJpZ2dlcmVkQnkgPT09ICd1c2VyLWFjdGlvbicgJiYgZmxpcFN0YXRlKHN0YXRlLnBsYXliYWNrU3RhdGUpLFxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXBwUGxheWJhY2tTdGF0ZSkge1xuICAgICAgdG9nZ2xlUGxheShhcHBQbGF5YmFja1N0YXRlKVxuICAgIH1cbiAgfSwgW2FwcFBsYXliYWNrU3RhdGVdKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh1aVR5cGUgPT09ICdtb2JpbGUnKSB7XG4gICAgICBvbihkb2N1bWVudCwgJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB0b2dnbGVQbGF5KCdwYXVzZWQnKSlcbiAgICB9XG4gIH0sIFt1aVR5cGUsIHRhcmdldFN0YXRlLnBsYXliYWNrU3RhdGVdKVxuICBjb25zdCB1cGRhdGVQbGF5YmFja1RpbWUgPSBldmVudCA9PlxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShcbiAgICAgICgpID0+XG4gICAgICAgIChldmVudD8udHlwZSAhPT0gJ3RpbWV1cGRhdGUnIHx8IGlzQnVmZmVyZWQodmlkZW9SZWYuY3VycmVudCkpICYmXG4gICAgICAgIHNldFBsYXliYWNrVGltZShzdGF0ZSA9PiAoe1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIC4uLmdldE1lZGlhVGltZSh2aWRlb1JlZi5jdXJyZW50LCB7XG4gICAgICAgICAgICBwbGF5ZXI6IHBsYXllclJlZi5jdXJyZW50LFxuICAgICAgICAgICAgcGx1Z2lucyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4oZXZlbnQ/LnR5cGUgPT09ICdkdXJhdGlvbmNoYW5nZScgJiYge1xuICAgICAgICAgICAgY3VycmVudFRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSlcbiAgICApXG4gIGNvbnN0IHNldFRhcmdldFRpbWUgPSB0aW1lID0+IHtcbiAgICBjb25zdCB0cmltbWVkID0gTWF0aC5taW4oXG4gICAgICB0aW1lLFxuICAgICAgdmlkZW9SZWYuY3VycmVudD8uaW5pdGlhbER1cmF0aW9uIHx8IEluZmluaXR5XG4gICAgKVxuICAgIHNldFRhcmdldFN0YXRlKHN0YXRlID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIC8vIHNlZWsgdG8gMCByZXBlYXRlZGx5IGVkZ2UgY2FzZVxuICAgICAgY3VycmVudFRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lICE9PSB0cmltbWVkID8gdHJpbW1lZCA6IHRyaW1tZWQgKyAwLjAxLFxuICAgIH0pKVxuICAgIHVwZGF0ZVBsYXliYWNrVGltZSgpXG4gIH1cbiAgY29uc3QgW3BsYXliYWNrU3RhdGUsIHNldFBsYXliYWNrU3RhdGVdID0gdXNlU3RhdGUoJ2luaXQnKVxuICBjb25zdCBbY2FzdFN0YXRlLCBzZXRDYXN0U3RhdGVdID0gdXNlU3RhdGUoJycpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBhcHBDdXJyZW50VGltZSA9PT0gJ251bWJlcicpIHNldFRhcmdldFRpbWUoYXBwQ3VycmVudFRpbWUgfHwgMClcbiAgICBpZiAodHlwZW9mIGFwcEN1cnJlbnRUaW1lID09PSAnb2JqZWN0JylcbiAgICAgIHNldFRhcmdldFRpbWUoYXBwQ3VycmVudFRpbWU/LnZhbHVlIHx8IDApXG4gIH0sIFthcHBDdXJyZW50VGltZV0pXG4gIGNvbnN0IFtlcnJvckRhdGEsIHNldEVycm9yRGF0YV0gPSB1c2VTdGF0ZSgpXG4gIGNvbnN0IGVycm9ySGFuZGxlciA9IHJlYWN0RXZlbnQgPT4ge1xuICAgIG9uRXJyb3I/LihyZWFjdEV2ZW50Lm5hdGl2ZUV2ZW50KVxuICAgIGhhbmRsZUVycm9yKHJlYWN0RXZlbnQsIHtcbiAgICAgIG1lZGlhOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgICAgZGlzcGxheUVycm9yOiBkYXRhID0+IHtcbiAgICAgICAgc2V0UGxheWJhY2tTdGF0ZSgnZXJyb3InKVxuICAgICAgICBzZXRFcnJvckRhdGEoY3VycmVudCA9PiAoY3VycmVudD8uY29kZSA/IGN1cnJlbnQgOiBkYXRhKSlcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuICBjb25zdCBpc0xpdmUgPSBwbGF5YmFja1RpbWUuc3RyZWFtVHlwZSA9PT0gJ2xpdmUnXG4gIGNvbnN0IFtzZXR0aW5ncywgc2V0U2V0dGluZ3NdID0gdXNlU3RhdGUoKCkgPT4gKHtcbiAgICBzZWN0aW9uczogW10sXG4gICAgdmFsdWVzOiB7c3BlZWQ6IDF9LFxuICB9KSlcbiAgY29uc3QgZmV0Y2hTZXR0aW5ncyA9ICgpID0+IHtcbiAgICBpZiAoIXBsYXllclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc3BlZWRJdGVtcyA9IGFwcFNldHRpbmdzLnNwZWVkSXRlbXMgfHwgKGlzTGl2ZSA/IFtdIDogdW5kZWZpbmVkKVxuICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4ge1xuICAgICAgY29uc3Qge3ZhbHVlcywgc2VjdGlvbnN9ID0gZ2V0U2V0dGluZ3NEYXRhKHtcbiAgICAgICAgbWVkaWE6IHZpZGVvUmVmLmN1cnJlbnQsXG4gICAgICAgIHBsYXllcjogcGxheWVyUmVmLmN1cnJlbnQsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgcXVhbGl0eSxcbiAgICAgICAgc3BlZWRJdGVtcyxcbiAgICAgICAgbG9vcCxcbiAgICAgICAgcHJlZmVycmVkOiBjdXJyZW50LnByZWZlcnJlZCxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge3ByZWZlcnJlZDogY3VycmVudC5wcmVmZXJyZWQsIHZhbHVlcywgc2VjdGlvbnN9XG4gICAgfSlcbiAgfVxuICBjb25zdCBsYXN0U3RhdGUgPSB1c2VSZWYocGxheWJhY2tTdGF0ZSlcbiAgY29uc3QgaGFuZGxlUGxheWJhY2tTdGF0ZUNoYW5nZSA9IChldmVudCwgc3RhdGUpID0+IHtcbiAgICBpZiAobGFzdFN0YXRlLmN1cnJlbnQgPT09ICdlcnJvcicpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBvblBsYXliYWNrU3RhdGVDaGFuZ2U/LihldmVudCwgc3RhdGUpXG4gICAgLy8gcHJldmlvdXNseSBVSSBwbGF5YmFjayBzdGF0ZSB3YXMgc3luY2VkIG9ubHkgd2hlblxuICAgIC8vIGV4aXRpbmcgaU9TIHZpZGVvIG9ubHkgZnVsbHNjcmVlbih3ZWJraXRlbmRmdWxsc2NyZWVuKVxuICAgIGlmIChcbiAgICAgIC9wbGF5aW5nfHBhdXNlZC8udGVzdChzdGF0ZSkgJiZcbiAgICAgICEodWlUeXBlID09PSAnbW9iaWxlJyAmJiBibG9ja2luZykgJiZcbiAgICAgICFzaG91bGRQYXVzZSh7dXNlckZvY3VzLCB1aVR5cGV9KVxuICAgICkge1xuICAgICAgdG9nZ2xlUGxheShzdGF0ZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSAnZW5kZWQnKSB7XG4gICAgICB0b2dnbGVQbGF5KCdwYXVzZWQnKVxuICAgIH1cbiAgICBpZiAoc3RhdGUgPT09ICdsb2FkaW5nJyAmJiBsYXN0U3RhdGUuY3VycmVudCAhPT0gJ2luaXQnKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRvZ2dsZVBsYXkoJ3BsYXlpbmcnKSwgMSlcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIHNldElzVXNlckFjdGl2ZSh0cnVlKVxuICAgIH1cbiAgICBpZiAobGFzdFN0YXRlLmN1cnJlbnQgPT09ICdsb2FkaW5nJykge1xuICAgICAgZmV0Y2hTZXR0aW5ncygpXG4gICAgfVxuICAgIGxhc3RTdGF0ZS5jdXJyZW50ID0gc3RhdGVcbiAgICBzZXRQbGF5YmFja1N0YXRlKHN0YXRlKVxuICB9XG5cbiAgY29uc3QgY2hhbmdlU2V0dGluZ3MgPSAobmFtZSwgdmFsdWUsIHtrZWVwT3Blbn0gPSB7fSkgPT4ge1xuICAgIC8vIFRPRE8gY29uc2lkZXIgbWVyZ2UgaW50byB1c2VSZWR1Y2VyP1xuICAgIG9uQ2hhbmdlU2V0dGluZ3M/Lih7bmFtZSwgdmFsdWV9KVxuICAgIHNldFRhcmdldFRpbWUocGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lKVxuICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB2YWx1ZXM6IHsuLi5jdXJyZW50LnZhbHVlcywgW25hbWVdOiB2YWx1ZX0sXG4gICAgICBwcmVmZXJyZWQ6IHsuLi5jdXJyZW50LnByZWZlcnJlZCwgW25hbWVdOiB2YWx1ZX0sXG4gICAgfSkpXG4gICAgaWYgKCFrZWVwT3Blbikge1xuICAgICAgc2V0VXNlckZvY3VzKCcnKVxuICAgIH1cbiAgfVxuICBjb25zdCBvcGVuU2V0dGluZ3MgPSBldmVudCA9PiB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWUgPVxuICAgICAgdXNlckZvY3VzICE9PSAnc2V0dGluZ3MnICYmXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBvbk9wZW5TZXR0aW5ncz8uKGV2ZW50LCBzZXR0aW5ncylcbiAgICAgICAgLy8gSW4gaU9TIFNhZmFyaSwgd2UgbmVlZCB0byB1cGRhdGUgc2V0dGluZ3MgZGF0YVxuICAgICAgICBmZXRjaFNldHRpbmdzKClcbiAgICAgIH0pXG4gICAgc2V0VXNlckZvY3VzKGN1cnJlbnQgPT4gKGN1cnJlbnQgPT09ICdzZXR0aW5ncycgPyAnJyA6ICdzZXR0aW5ncycpKVxuICAgIHJldHVybiBhbmltYXRpb25GcmFtZVxuICB9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFwcFBsYXliYWNrUmF0ZSA+IDApIHtcbiAgICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4gKHtcbiAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgdmFsdWVzOiB7Li4uY3VycmVudC52YWx1ZXMsIHNwZWVkOiBhcHBQbGF5YmFja1JhdGV9LFxuICAgICAgfSkpXG4gICAgfVxuICB9LCBbYXBwUGxheWJhY2tSYXRlXSlcblxuICBjb25zdCBxdWFsaXR5T3B0aW9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0UXVhbGl0eU9wdGlvbnMoc2V0dGluZ3MpLFxuICAgIFtzZXR0aW5ncy52YWx1ZXMucXVhbGl0eV1cbiAgKVxuICBjb25zdCB2aWV3TW9kZSA9IHVzZUxpbmtTdGF0ZSh1cGRhdGUgPT5cbiAgICBvblZpZXdNb2RlQ2hhbmdlKHZpZGVvUmVmLmN1cnJlbnQsIHVwZGF0ZSlcbiAgKVxuICBjb25zdCBzb3VyY2VPdmVycmlkZSA9IHVzZUxpbmtTdGF0ZShcbiAgICBhc3luYyB1cGRhdGUgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgc291cmNlICYmIChhd2FpdCBxdWFsaXR5LnJld3JpdGVNYW5pZmVzdD8uKHNvdXJjZSwgcXVhbGl0eU9wdGlvbnMpKVxuICAgICAgdXBkYXRlKHJlc3VsdCB8fCBzb3VyY2UpXG4gICAgfSxcbiAgICBbc291cmNlLCBxdWFsaXR5T3B0aW9uc11cbiAgKVxuICBjb25zdCB3YWl0aW5nID0gL2VtcHRpZWR8bG9hZGluZ3xidWZmZXJpbmcvLnRlc3QocGxheWJhY2tTdGF0ZSlcbiAgY29uc3QgYWN0aXZlUGxheWJhY2sgPVxuICAgIHBsYXliYWNrU3RhdGUgPT09ICdwbGF5aW5nJyB8fCBwbGF5YmFja1N0YXRlID09PSAnd2FpdGluZydcbiAgY29uc3Qge1xuICAgIG1vZGU6IGF1dG9IaWRlTW9kZSxcbiAgICBvbkNsaWNrLFxuICAgIG9uTW91c2VNb3ZlLFxuICB9ID0gdXNlQXV0b0hpZGUoe1xuICAgIHBpbm5lZDogIWNvbnRyb2xzLmF1dG9oaWRlIHx8IHdhaXRpbmcgfHwgIWFjdGl2ZVBsYXliYWNrIHx8IHVzZXJGb2N1cyxcbiAgICB0YXBUb0hpZGU6IHVpVHlwZSA9PT0gJ21vYmlsZScsXG4gICAgaGlkZVRpbWVNczogY29udHJvbHMuYXV0b2hpZGUsXG4gIH0pXG4gIGNvbnN0IG1vZGUgPVxuICAgIHVzZXJGb2N1cyA9PT0gJ3NlZWtiYXInXG4gICAgICA/ICdoaWRkZW4nXG4gICAgICA6IGNvbnRyb2xzLmF1dG9oaWRlXG4gICAgICA/IGF1dG9IaWRlTW9kZVxuICAgICAgOiBjb250cm9sc1xuICAgICAgPyAnc2hvd24nXG4gICAgICA6ICdoaWRkZW4nXG4gIGNvbnN0IGNvbnRyb2xzRGlzcGxheSA9XG4gICAgdXNlckZvY3VzID09PSAnc2Vla2JhcidcbiAgICAgID8gJ3NlZWtiYXItb25seSdcbiAgICAgIDogY29udHJvbHMgPT09ICd0aXRsZS1vbmx5JyB8fCBwbGF5YmFja1N0YXRlID09PSAnZW1wdGllZCdcbiAgICAgID8gJ2hpZGRlbidcbiAgICAgIDogbW9kZVxuICBjb25zdCBzaG91bGRIaWRlUGFuZWxzID1cbiAgICAoY29udHJvbHMgPT09ICduby1wYW5lbCcgfHwgY29udHJvbHNEaXNwbGF5ID09PSAnaGlkZGVuJykgJiYgdXNlckZvY3VzXG4gIGNvbnN0IGhhdmVQbGF5UGFuZWwgPVxuICAgICFibG9ja2luZyAmJlxuICAgIGhhdmVQb2ludGVyKCkgJiZcbiAgICB1aVR5cGUgPT09ICdkZXNrdG9wJyAmJlxuICAgICF3YWl0aW5nICYmXG4gICAgIS92b2x1bWV8JycvLnRlc3QodXNlckZvY3VzKSAmJlxuICAgICEvdGl0bGUtb25seXxuby1wYW5lbC8udGVzdChjb250cm9scykgJiZcbiAgICAoY29udHJvbHMuYXV0b2hpZGUgfHwgbW9kZSA9PT0gJ3Nob3duJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRIaWRlUGFuZWxzKSB7XG4gICAgICBzZXRVc2VyRm9jdXMoJycpXG4gICAgfVxuICB9LCBbc2hvdWxkSGlkZVBhbmVsc10pXG4gIGNvbnN0IHtzdWJzY3JpYmUsIG9uQ2hhbmdlLCB0b2dnbGVNdXRlfSA9IGxpbmtNZWRpYVZvbHVtZSgoKSA9PiAoe1xuICAgIHZpZGVvOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgIGdldFBsYXllcjogKCkgPT4gcGxheWVyUmVmLmN1cnJlbnQsXG4gIH0pKVxuICBjb25zdCBjaGFuZ2VQcmV2aW91cyA9IGV2ZW50ID0+IHtcbiAgICBvbkNoYW5nZVByZXZpb3VzKGV2ZW50KVxuICAgIHRvZ2dsZVBsYXkoJ3BhdXNlZCcpXG4gICAgdmlkZW9SZWYuY3VycmVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbG9hZHN0YXJ0JykpXG4gIH1cbiAgY29uc3QgY2hhbmdlTmV4dCA9IGV2ZW50ID0+IHtcbiAgICBvbkNoYW5nZU5leHQoZXZlbnQpXG4gICAgdG9nZ2xlUGxheSgncGF1c2VkJylcbiAgICB2aWRlb1JlZi5jdXJyZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdsb2Fkc3RhcnQnKSlcbiAgfVxuXG4gIHVzZUVmZmVjdChmZXRjaFNldHRpbmdzLCBbYXBwU2V0dGluZ3NdKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFRoZSBhZENvbnRhaW5lciBzaG91bGQgYmUgc2V0IGJlZm9yZSBgbG9hZGAgYmVjYXVzZSBJbWFEYWkubG9hZCBuZWVkcyBpdC5cbiAgICBwbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHBsdWdpbi5zZXRBZENvbnRhaW5lcj8uKGFkQ29udGFpbmVyUmVmLmN1cnJlbnQpKVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoXG4gICAgKCkgPT5cbiAgICAgIGRpc3BhdGNoQ2hhcHRlckV2ZW50cyh7XG4gICAgICAgIG1lZGlhOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgICAgICBjaGFwdGVycyxcbiAgICAgICAgZ2V0VGltZTogKCkgPT4gdmlkZW9SZWYuY3VycmVudC5jdXJyZW50VGltZSxcbiAgICAgIH0pLFxuICAgIFtjaGFwdGVyc11cbiAgKVxuXG4gIGNvbnN0IGlzRW5kID0gcGxheWJhY2tTdGF0ZSA9PT0gJ2VuZGVkJ1xuICBjb25zdCBjYW5TZWVrID0gIWlzRW5kICYmIHBsYXliYWNrVGltZS5kdXJhdGlvbiA+IDBcbiAgY29uc3QgZGVyaXZlZFBsYXliYWNrU3RhdGUgPVxuICAgICh1aVR5cGUgPT09ICdtb2JpbGUnICYmIGJsb2NraW5nKSB8fCBzaG91bGRQYXVzZSh7dXNlckZvY3VzLCB1aVR5cGV9KVxuICAgICAgPyAncGF1c2VkJ1xuICAgICAgOiB0YXJnZXRTdGF0ZS5wbGF5YmFja1N0YXRlXG4gIGNvbnN0IGFjdGl2ZVRodW1ibmFpbHNVcmwgPVxuICAgICghdXNlckZvY3VzIHx8IHVzZXJGb2N1cyA9PT0gJ3NlZWtiYXInKSAmJlxuICAgIChnZXRUaHVtYm5haWxzVXJsKHNvdXJjZSkgfHwgdGh1bWJuYWlsc1VybClcbiAgY29uc3QgY3NzVmFyaWFibGVzID0ge1xuICAgICctLXBsYXlpbmcnOiBwbGF5YmFja1N0YXRlID09PSAncGxheWluZycgPyAnMScgOiAnMCcsXG4gIH1cbiAgY29uc3Qgb25SZXdpbmQgPVxuICAgICghaXNMaXZlIHx8IHBsYXliYWNrVGltZS5jdXJyZW50VGltZSA8IDApICYmXG4gICAgIWlzRW5kICYmXG4gICAgKCgpID0+IHNldFRhcmdldFRpbWUocGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lIC0gMTAsICdyZXdpbmQnKSlcbiAgY29uc3Qgb25Gb3J3YXJkID1cbiAgICAoIWlzTGl2ZSB8fCBwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgPCAwKSAmJlxuICAgIGNhblNlZWsgJiZcbiAgICAoKCkgPT4gc2V0VGFyZ2V0VGltZShwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgKyAxMCwgJ2ZvcndhcmQnKSlcbiAgY29uc3Qgb25DbGlja0JsYW5rID1cbiAgICBoYXZlUGxheVBhbmVsICYmICgoKSA9PiB0b2dnbGVQbGF5KCcnLCB7dHJpZ2dlcmVkQnk6ICd1c2VyLWFjdGlvbid9KSlcblxuICBjb25zdCB1aUhhbmRsZXJzID0ge1xuICAgIG9uUGxheTogKCkgPT4ge1xuICAgICAgdG9nZ2xlUGxheSgnJywge3RyaWdnZXJlZEJ5OiAndXNlci1hY3Rpb24nfSlcbiAgICAgIHNldElzVXNlckFjdGl2ZSh0cnVlKVxuICAgIH0sXG4gICAgb25DbGlja0xpdmU6IGlzTGl2ZSAmJiAoKCkgPT4gc2V0VGFyZ2V0VGltZSgwLCAnc2Vla1RvTGl2ZScpKSxcbiAgICBvbkNsaWNrU2Vla2JhcjogKCkgPT4ge1xuICAgICAgcmVmcy5jdXJyZW50LmRlZmVyZWRTZWVrRm9jdXMgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiBzZXRVc2VyRm9jdXMoJ3NlZWtiYXInKSxcbiAgICAgICAgNjZcbiAgICAgIClcbiAgICB9LFxuICAgIG9uU2VlazogdGltZSA9PiB7XG4gICAgICBzZXRUYXJnZXRUaW1lKHRpbWUsICdzZWVrJylcbiAgICAgIGNsZWFyVGltZW91dChyZWZzLmN1cnJlbnQuZGVmZXJlZFNlZWtGb2N1cylcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0VXNlckZvY3VzKCcnKSwgNjYpXG4gICAgfSxcbiAgICBvbkNoYW5nZVNldHRpbmdzOiAoe25hbWUsIHZhbHVlLCBrZWVwT3Blbn0pID0+XG4gICAgICBjaGFuZ2VTZXR0aW5ncyhuYW1lLCB2YWx1ZSwge2tlZXBPcGVufSksXG4gICAgb25DbG9zZVNldHRpbmdzOiBldmVudCA9PiB7XG4gICAgICBzZXRVc2VyRm9jdXMoJycpXG4gICAgICBzbG90UHJvcHM/LnNldHRpbmdzPy5vbkNsb3NlPy4oZXZlbnQpXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IHVpRWxlbWVudHMgPSB7XG4gICAgbGl2ZUJ1dHRvbjogdWlIYW5kbGVycy5vbkNsaWNrTGl2ZSAmJiAoXG4gICAgICA8Y29tcG9uZW50cy5MaXZlQnV0dG9uXG4gICAgICAgIHVzaW5nU3RhcnRPdmVyPXtwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgPCAwfVxuICAgICAgICBvbkNsaWNrPXt1aUhhbmRsZXJzLm9uQ2xpY2tMaXZlfVxuICAgICAgLz5cbiAgICApLFxuICAgIGNvbnRyb2xCdXR0b25zOiB7XG4gICAgICBwbGF5QnV0dG9uOiAoXG4gICAgICAgIDxQbGF5QnV0dG9uXG4gICAgICAgICAgcGxheWJhY2tTdGF0ZT17ZGVyaXZlZFBsYXliYWNrU3RhdGV9XG4gICAgICAgICAgZW5kZWQ9e2lzRW5kfVxuICAgICAgICAgIGhpZGRlbj17XG4gICAgICAgICAgICB1aVR5cGUgPT09ICdtb2JpbGUnICYmICh3YWl0aW5nIHx8IC9sb2FkaW5nLy50ZXN0KHBsYXliYWNrU3RhdGUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXJpYW50PXshaXNVc2VyQWN0aXZlICYmICdmaXJzdHBsYXknfVxuICAgICAgICAgIG9uQ2xpY2s9e3VpSGFuZGxlcnMub25QbGF5fVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICAgIHJld2luZEJ1dHRvbjogb25SZXdpbmQgJiYgKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc3RhcnRJY29uPVwicmV3aW5kMTBcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5SRVdJTkRcIlxuICAgICAgICAgIGRpc2FibGVkPXtpc0VuZH1cbiAgICAgICAgICBvbkNsaWNrPXtvblJld2luZH1cbiAgICAgICAgLz5cbiAgICAgICksXG4gICAgICBmb3J3YXJkQnV0dG9uOiBvbkZvcndhcmQgJiYgKFxuICAgICAgICA8Rm9yd2FyZEJ1dHRvblxuICAgICAgICAgIHN0YXJ0SWNvbj1cImZvcndhcmQxMFwiXG4gICAgICAgICAgdGl0bGU9XCJLS1MuUExBWUVSLkZPUldBUkRcIlxuICAgICAgICAgIGRpc2FibGVkPXshY2FuU2Vla31cbiAgICAgICAgICBvbkNsaWNrPXtvbkZvcndhcmR9XG4gICAgICAgIC8+XG4gICAgICApLFxuICAgICAgbmV4dEVwaXNvZGVCdXR0b246IChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHN0YXJ0SWNvbj1cIm5leHRcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5ORVhUXCJcbiAgICAgICAgICBkaXNhYmxlZD17IW9uQ2hhbmdlTmV4dH1cbiAgICAgICAgICBvbkNsaWNrPXtjaGFuZ2VOZXh0fVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICAgIHByZXZpb3VzRXBpc29kZUJ1dHRvbjogKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc3RhcnRJY29uPVwicHJldmlvdXNcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5QUkVWSU9VU1wiXG4gICAgICAgICAgZGlzYWJsZWQ9eyFvbkNoYW5nZVByZXZpb3VzfVxuICAgICAgICAgIG9uQ2xpY2s9e2NoYW5nZVByZXZpb3VzfVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICB9LFxuICAgIHNlZWtiYXI6IChcbiAgICAgIDxjb21wb25lbnRzLlNlZWtiYXJcbiAgICAgICAgc3R5bGU9ey92b2x1bWUvLnRlc3QodXNlckZvY3VzKSAmJiB7b3BhY2l0eTogJzAnfX1cbiAgICAgICAgc3RhcnRUaW1lPXtwbGF5YmFja1RpbWUuc3RhcnRUaW1lfVxuICAgICAgICBjdXJyZW50VGltZT17cGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lfVxuICAgICAgICBidWZmZXJUaW1lPXtwbGF5YmFja1RpbWUuYnVmZmVyVGltZX1cbiAgICAgICAgZHVyYXRpb249e3BsYXliYWNrVGltZS5kdXJhdGlvbn1cbiAgICAgICAgY2hhcHRlcnM9e2NoYXB0ZXJzfVxuICAgICAgICBvbkNoYW5nZT17dWlIYW5kbGVycy5vbkNsaWNrU2Vla2Jhcn1cbiAgICAgICAgb25DaGFuZ2VDb21taXR0ZWQ9e3VpSGFuZGxlcnMub25TZWVrfVxuICAgICAgICBtYXJrcz17bWFya3N9XG4gICAgICAgIHBsdWdpbnM9e3BsdWdpbnN9XG4gICAgICAgIHsuLi5zbG90UHJvcHMuc2Vla2Jhcn1cbiAgICAgID5cbiAgICAgICAge2FjdGl2ZVRodW1ibmFpbHNVcmwgJiYgKFxuICAgICAgICAgIDxTZWVrUHJldmlld1xuICAgICAgICAgICAgdGh1bWJuYWlsc1VybD17YWN0aXZlVGh1bWJuYWlsc1VybH1cbiAgICAgICAgICAgIGR1cmF0aW9uPXtwbGF5YmFja1RpbWUuZHVyYXRpb259XG4gICAgICAgICAgICBjaGFwdGVycz17Y2hhcHRlcnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvY29tcG9uZW50cy5TZWVrYmFyPlxuICAgICksXG4gICAgZGlzcGxheVRpbWU6IDxjb21wb25lbnRzLkRpc3BsYXlUaW1lIHsuLi5wbGF5YmFja1RpbWV9IC8+LFxuICAgIGZ1bGxzY3JlZW5CdXR0b246IChcbiAgICAgIDxGdWxsc2NyZWVuQnV0dG9uXG4gICAgICAgIHZpZXdNb2RlPXt2aWV3TW9kZX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlRnVsbHNjcmVlbihjb250YWluZXJSZWYuY3VycmVudCl9XG4gICAgICAvPlxuICAgICksXG4gICAgdm9sdW1lQ29udHJvbDogd2lkdGggPj0gc2l6ZXNbJ3NtYWxsLWVtYmVkJ10gJiYgKFxuICAgICAgPGNvbXBvbmVudHMuVm9sdW1lQ29udHJvbFxuICAgICAgICB7Li4ue3N1YnNjcmliZSwgb25DaGFuZ2UsIHRvZ2dsZU11dGV9fVxuICAgICAgICBvbk1vdXNlT3Zlcj17KCkgPT4gc2V0VXNlckZvY3VzKCd2b2x1bWUnKX1cbiAgICAgICAgb25Nb3VzZU91dD17KCkgPT4gc2V0VXNlckZvY3VzKCcnKX1cbiAgICAgICAgey4uLnNsb3RQcm9wcz8udm9sdW1lQ29udHJvbH1cbiAgICAgIC8+XG4gICAgKSxcbiAgICBiYWNrSXRlbXM6IChcbiAgICAgIDxQbGF5UGFuZWwgYW5pbWF0aW9uPXt0YXJnZXRTdGF0ZS5hbmltYXRpb259IG9uQ2xpY2s9e29uQ2xpY2tCbGFua30gLz5cbiAgICApLFxuICB9XG4gIGNvbnN0IGNvbXBhdGliaWxpdHlDYXN0UHJvcHMgPSBjYXN0T3B0aW9ucyA9PT0gJ2NvbXBhdGlibGUnICYmIHtcbiAgICBzb3VyY2UsXG4gICAgdmFsdWVzOiB7dGl0bGUsIC4uLnNldHRpbmdzLnZhbHVlcywgLi4uaW50bCwgbW9kdWxlc0NvbmZpZ30sXG4gICAgb25Mb2FkOiBvbkNhc3QsXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjYXN0T3B0aW9ucyAmJiBjYXN0T3B0aW9ucyAhPT0gJ2NvbXBhdGlibGUnKSB7XG4gICAgICByZXR1cm4gbGlua0Nhc3Qoe3NvdXJjZSwgLi4uY2FzdE9wdGlvbnN9KVxuICAgIH0gLy8gVE9ETyBwbGF5bGlzdCwgYXVkaW8gLyBzdWJ0aXRsZSBzZXR0aW5nXG4gIH0sIFtzb3VyY2UsIGNhc3RPcHRpb25zLmNvbnRlbnRJZCwgY2FzdE9wdGlvbnMuY3VzdG9tRGF0YV0pXG5cbiAgcmV0dXJuIChcbiAgICA8SW50bFByb3ZpZGVyIHsuLi5pbnRsfT5cbiAgICAgIDxMYXlvdXRcbiAgICAgICAgc3R5bGU9e3suLi5zdHlsZSwgY3NzVmFyaWFibGVzfX1cbiAgICAgICAgdHlwZT17dWlUeXBlfVxuICAgICAgICBkaXNwbGF5PXttb2RlfVxuICAgICAgICBjb250cm9sc0Rpc3BsYXk9e2NvbnRyb2xzRGlzcGxheX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgdmlkZW89e1xuICAgICAgICAgIDxWaWRlb1xuICAgICAgICAgICAgey4uLnZpZGVvUHJvcHN9XG4gICAgICAgICAgICB2aWRlb1JlZj17bXVsdGlSZWYodmlkZW9SZWYsIHZpZGVvUHJvcHMudmlkZW9SZWYpfVxuICAgICAgICAgICAgc291cmNlPXtcbiAgICAgICAgICAgICAgY2FzdFN0YXRlICE9PSBDYXN0U3RhdGUuQ09OTkVDVEVEICYmXG4gICAgICAgICAgICAgIHBsYXliYWNrU3RhdGUgIT09ICdlcnJvcicgJiZcbiAgICAgICAgICAgICAgc291cmNlT3ZlcnJpZGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBsYXliYWNrU3RhdGU9e2Rlcml2ZWRQbGF5YmFja1N0YXRlfVxuICAgICAgICAgICAgY3VycmVudFRpbWU9e3RhcmdldFN0YXRlLmN1cnJlbnRUaW1lfVxuICAgICAgICAgICAgey4uLihhcHBWb2x1bWUgPj0gMCAmJiB7dm9sdW1lOiBhcHBWb2x1bWUsIG11dGVkOiBhcHBWb2x1bWUgPD0gMH0pfVxuICAgICAgICAgICAgcGxheWJhY2tSYXRlPXtzZXR0aW5ncy52YWx1ZXMuc3BlZWR9XG4gICAgICAgICAgICB2aWRlb1Jlc29sdXRpb249e3F1YWxpdHlPcHRpb25zfVxuICAgICAgICAgICAgYXVkaW89e3NldHRpbmdzLnZhbHVlcy5hdWRpb31cbiAgICAgICAgICAgIHRleHRUcmFjaz17c2V0dGluZ3MudmFsdWVzLnN1YnRpdGxlc31cbiAgICAgICAgICAgIGxvb3A9e3NldHRpbmdzLnZhbHVlcy5sb29wfVxuICAgICAgICAgICAgcGx1Z2lucz17cGx1Z2luc31cbiAgICAgICAgICAgIG1vZHVsZXNDb25maWc9e21vZHVsZXNDb25maWd9XG4gICAgICAgICAgICBvblBsYXlsb2dGaXJlZD17b25QbGF5bG9nRmlyZWR9XG4gICAgICAgICAgICBvbkVycm9yPXtlcnJvckhhbmRsZXJ9XG4gICAgICAgICAgICBvblBsYXliYWNrU3RhdGVDaGFuZ2U9e2hhbmRsZVBsYXliYWNrU3RhdGVDaGFuZ2V9XG4gICAgICAgICAgICBvbkJsb2NrZWRBdXRvcGxheT17ZXJyb3IgPT4gb25CbG9ja2VkQXV0b3BsYXk/LihlcnJvcil9XG4gICAgICAgICAgICBvbkNhblBsYXk9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlUGxheWJhY2tUaW1lKGV2ZW50KVxuICAgICAgICAgICAgICB2aWRlb1Byb3BzLm9uQ2FuUGxheT8uKGV2ZW50KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uVGltZVVwZGF0ZT17dXBkYXRlUGxheWJhY2tUaW1lfVxuICAgICAgICAgICAgb25EdXJhdGlvbkNoYW5nZT17dXBkYXRlUGxheWJhY2tUaW1lfVxuICAgICAgICAgICAgb25QbGF5ZXJMb2FkZWQ9e3BsYXllciA9PiB7XG4gICAgICAgICAgICAgIHBsYXllclJlZi5jdXJyZW50ID0gcGxheWVyXG4gICAgICAgICAgICAgIG9uUGxheWVyTG9hZGVkPy4ocGxheWVyKVxuICAgICAgICAgICAgICBzeW5jVm9sdW1lKHZpZGVvUmVmLmN1cnJlbnQsIHZpZGVvUHJvcHMubXV0ZWQgPyAwIDogYXBwVm9sdW1lKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lclJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQgPSBlbGVtZW50XG4gICAgICAgICAgb2JzZXJ2ZShlbGVtZW50KVxuICAgICAgICB9fVxuICAgICAgICBiYWNrUmVmPXthZENvbnRhaW5lclJlZn1cbiAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICBjaGFubmVsVGl0bGU9e2NoYW5uZWxUaXRsZX1cbiAgICAgICAgYmFja0J1dHRvbj17b25CYWNrICYmIDxCdXR0b24gc3RhcnRJY29uPVwiYmFja1wiIG9uQ2xpY2s9e29uQmFja30gLz59XG4gICAgICAgIHsuLi4oaXNVc2VyQWN0aXZlICYmIHVpRWxlbWVudHMpfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbk1vdXNlTW92ZT17b25Nb3VzZU1vdmV9XG4gICAgICA+XG4gICAgICAgIDxMb2FkaW5nU3Bpbm5lciBhY3RpdmU9e3dhaXRpbmd9IC8+XG4gICAgICAgIHtlcnJvckRhdGEgJiYgPEVycm9yIGVycm9yPXtlcnJvckRhdGF9IG9uQmFjaz17b25CYWNrfSAvPn1cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICB7LyogVE9ETyBzeW5jIENhc3QgbGFzdCBwbGF5ZWQgdGltZSBiYWNrICovfVxuICAgICAgICB7aXNVc2VyQWN0aXZlICYmIChcbiAgICAgICAgICA8Y29tcG9uZW50cy5DYXN0VWlcbiAgICAgICAgICAgIG9uQmFjaz17b25CYWNrfVxuICAgICAgICAgICAgb25TdGF0ZUNoYW5nZT17c2V0Q2FzdFN0YXRlfVxuICAgICAgICAgICAgb25Mb2FkPXtvbkNhc3R9XG4gICAgICAgICAgICB7Li4uY29tcGF0aWJpbGl0eUNhc3RQcm9wc31cbiAgICAgICAgICAgIHsuLi5zbG90UHJvcHMuY2FzdFVpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtpc1VzZXJBY3RpdmUgJiYgKCAvLyBUT0RPOiBEZXNpZ24gPEV4dGVuc3Rpb24gLz4gZmxhZ1xuICAgICAgICAgIDxjb21wb25lbnRzLlNldHRpbmdzXG4gICAgICAgICAgICB0eXBlPXt1aVR5cGV9XG4gICAgICAgICAgICBzZWN0aW9ucz17c2V0dGluZ3Muc2VjdGlvbnN9XG4gICAgICAgICAgICAvLyBUT0RPIGhhc0JvdHRvbVBhbmVsIGJvdHRvbTogOGVtXG4gICAgICAgICAgICBvcGVuPXt1c2VyRm9jdXMgPT09ICdzZXR0aW5ncyd9XG4gICAgICAgICAgICB2YWx1ZXM9e3NldHRpbmdzLnZhbHVlc31cbiAgICAgICAgICAgIG9uT3Blbj17b3BlblNldHRpbmdzfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3VpSGFuZGxlcnMub25DaGFuZ2VTZXR0aW5nc31cbiAgICAgICAgICAgIHsuLi5zbG90UHJvcHM/LnNldHRpbmdzfVxuICAgICAgICAgICAgb25DbG9zZT17dWlIYW5kbGVycy5vbkNsb3NlU2V0dGluZ3N9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPExhbmd1YWdlU2V0dGluZ3NcbiAgICAgICAgICB1aVR5cGU9e3VpVHlwZX1cbiAgICAgICAgICB7Li4uZ2V0TGFuZ3VhZ2VPcHRpb25zKHNldHRpbmdzKX1cbiAgICAgICAgICBvbkNoYW5nZT17KF9ldmVudCwgaXRlbSkgPT4gY2hhbmdlU2V0dGluZ3MoaXRlbS5zZWN0aW9uLCBpdGVtLnZhbHVlKX1cbiAgICAgICAgICB7Li4uc2xvdFByb3BzLmxhbmd1YWdlU2V0dGluZ3N9XG4gICAgICAgIC8+XG4gICAgICAgIDxCYWNrZHJvcCBvcGVuPXshcGxheWJhY2tTdGF0ZSB8fCBwbGF5YmFja1N0YXRlID09PSAnbG9hZGluZyd9PlxuICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICA8L0JhY2tkcm9wPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9JbnRsUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJlbWl1bVBsYXllclxuIl19 */"),
8665
- desktop: /*#__PURE__*/css$1(LanguageMenu.styles, LanguageMenu.desktopStyles, process.env.NODE_ENV === "production" ? "" : ";label:desktop;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByZW1pdW1QbGF5ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEZXIiwiZmlsZSI6IlByZW1pdW1QbGF5ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtjc3N9IGZyb20gJ0BlbW90aW9uL2NzcydcbmltcG9ydCB1c2VEaW1lbnNpb25zIGZyb20gJ3JlYWN0LWNvb2wtZGltZW5zaW9ucydcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJ9IGZyb20gJ0BqdWdnbGUvcmVzaXplLW9ic2VydmVyJ1xuXG5pbXBvcnQge2hhbmRsZUVycm9yfSBmcm9tICdwbGF5ZXJDb3JlL2Vycm9ycydcbmltcG9ydCB7b259IGZyb20gJ3V0aWwvZXZlbnRzJ1xuaW1wb3J0IHtoYXZlUG9pbnRlciwgaXNEZXNrdG9wfSBmcm9tICd1dGlsL2Vudmlyb25tZW50J1xuaW1wb3J0IG11bHRpUmVmIGZyb20gJ3V0aWwvbXVsdGlSZWYnXG5pbXBvcnQge29uVmlld01vZGVDaGFuZ2UsIHRvZ2dsZUZ1bGxzY3JlZW59IGZyb20gJ3V0aWwvdmlld01vZGVzJ1xuaW1wb3J0IHt1c2VBdXRvSGlkZX0gZnJvbSAnaG9va3MnXG5pbXBvcnQge0ludGxQcm92aWRlcn0gZnJvbSAnY29udGV4dC9JMThuJ1xuaW1wb3J0IHtnZXRNZWRpYVRpbWUsIGlzQnVmZmVyZWR9IGZyb20gJ3BsYXllckNvcmUvbWVkaWFCaW5kaW5ncydcbmltcG9ydCBFcnJvciBmcm9tICdwbGF5ZXJVaS9FcnJvcidcbmltcG9ydCBMYXlvdXQgZnJvbSAncGxheWVyVWkvRGVmYXVsdExheW91dCdcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgTGl2ZUJ1dHRvbixcbiAgRnVsbHNjcmVlbkJ1dHRvbixcbiAgUGxheUJ1dHRvbixcbiAgRm9yd2FyZEJ1dHRvbixcbn0gZnJvbSAncGxheWVyVWkvYnV0dG9ucydcbmltcG9ydCBTZWVrYmFyIGZyb20gJ3BsYXllclVpL1NlZWtiYXInXG5pbXBvcnQgRGlzcGxheVRpbWUgZnJvbSAncGxheWVyVWkvRGlzcGxheVRpbWUnXG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAncGxheWVyVWkvTG9hZGluZ1NwaW5uZXInXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAncGxheWVyVWkvQmFja2Ryb3AnXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSAncGxheWVyVWkvU2V0dGluZ3MnXG5pbXBvcnQgT3ZlcmxheVBhbmVsIGZyb20gJ3BsYXllclVpL092ZXJsYXlQYW5lbCdcbmltcG9ydCBMYW5ndWFnZU1lbnUgZnJvbSAncGxheWVyVWkvTGFuZ3VhZ2VNZW51J1xuaW1wb3J0IFBsYXlQYW5lbCBmcm9tICdwbGF5ZXJVaS9QbGF5UGFuZSdcbmltcG9ydCBWb2x1bWVDb250cm9sIGZyb20gJ2NvbXBvbmVudC9Wb2x1bWVDb250cm9sJ1xuaW1wb3J0IENhc3RVaSBmcm9tICdjYXN0L0Nhc3RVaSdcbmltcG9ydCB7bGlua0Nhc3R9IGZyb20gJ2Nhc3QvZnJhbWV3b3JrJ1xuaW1wb3J0IHtDYXN0U3RhdGV9IGZyb20gJ0VudW0nXG5pbXBvcnQge2Rpc3BhdGNoQ2hhcHRlckV2ZW50c30gZnJvbSAnLi90aW1lbGluZSdcbmltcG9ydCBWaWRlbyBmcm9tICcuLi9WaWRlbydcbmltcG9ydCB7Z2V0UXVhbGl0eU9wdGlvbnMsIGdldFNldHRpbmdzRGF0YX0gZnJvbSAnLi9zZXR0aW5ncydcbmltcG9ydCB7bGlua01lZGlhVm9sdW1lLCBzeW5jVm9sdW1lfSBmcm9tICcuL3ZvbHVtZSdcbmltcG9ydCBTZWVrUHJldmlldyBmcm9tICcuL1NlZWtQcmV2aWV3J1xuXG5jb25zdCBzaXplcyA9IHtcbiAgJ3NtYWxsLWVtYmVkJzogMjAwLFxuICBlbWJlZDogNDAwLFxuICAndGFibGV0LXBvcnRyYWl0JzogNjAwLFxuICAndGFibGV0LWxhbmRzY2FwZSc6IDkwMCxcbiAgZGVza3RvcDogMTIwMCxcbn1cblxuY29uc3QgdXNlTGlua1N0YXRlID0gKHJlcXVlc3QsIGRlcGVuZGVuY2llcyA9IFtdKSA9PiB7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlcXVlc3Qoc2V0U3RhdGUpXG4gIH0sIGRlcGVuZGVuY2llcylcbiAgcmV0dXJuIHN0YXRlXG59XG5cbmNvbnN0IGZsaXBTdGF0ZSA9IHN0YXRlID0+IChzdGF0ZSA9PT0gJ3BsYXlpbmcnID8gJ3BhdXNlZCcgOiAncGxheWluZycpXG5cbi8vIEZJWE1FOiB0b28gZmV3IGxpbmVzIHRvIHNwbGl0IGEgZmlsZSwgbG9va2luZyBhIGJldHRlciBwbGFjZVxuY29uc3QgZ2V0VGh1bWJuYWlsc1VybCA9IHNvdXJjZSA9PlxuICBbXS5jb25jYXQoc291cmNlKS5maW5kKGl0ZW0gPT4gaXRlbS50eXBlID09PSAndGh1bWJuYWlsJyk/LnNyY1xuXG5jb25zdCBkZWZhdWx0U2V0dGluZ3MgPSB7fVxuXG5jb25zdCBzaG91bGRQYXVzZSA9ICh7dXNlckZvY3VzLCB1aVR5cGV9KSA9PlxuICAodWlUeXBlID09PSAnbW9iaWxlJyAmJiAvc2V0dGluZ3N8Y2hhcHRlci1saXN0Ly50ZXN0KHVzZXJGb2N1cykpIHx8XG4gIC9ibG9ja2luZ3xzZWVrYmFyfHNoYXJlLWlubmVyLy50ZXN0KHVzZXJGb2N1cylcblxuY29uc3QgZ2V0TGFuZ3VhZ2VPcHRpb25zID0gc2V0dGluZ1N0YXRlID0+IHtcbiAgY29uc3Qgc2VsZWN0ZWRBdWRpbyA9IHNldHRpbmdTdGF0ZT8udmFsdWVzLmF1ZGlvPy5pZFxuICBjb25zdCBhdWRpb1RyYWNrcyA9IChcbiAgICBzZXR0aW5nU3RhdGU/LnNlY3Rpb25zPy5maW5kKHNlY3Rpb24gPT4gc2VjdGlvbi5uYW1lID09PSAnYXVkaW8nKT8uaXRlbXMgfHxcbiAgICBbXVxuICApLm1hcChpdGVtID0+ICh7XG4gICAgc2VjdGlvbjogJ2F1ZGlvJyxcbiAgICAuLi5pdGVtLFxuICAgIC4uLihpdGVtLnZhbHVlLmlkID09PSBzZWxlY3RlZEF1ZGlvICYmIHtzZWxlY3RlZDogdHJ1ZX0pLFxuICB9KSlcbiAgY29uc3Qgc2VsZWN0ZWRTdWJ0aXRsZSA9IHNldHRpbmdTdGF0ZT8udmFsdWVzLnN1YnRpdGxlcz8uaWRcbiAgY29uc3Qgc3VidGl0bGVUcmFja3MgPSAoXG4gICAgc2V0dGluZ1N0YXRlPy5zZWN0aW9ucz8uZmluZChzZWN0aW9uID0+IHNlY3Rpb24ubmFtZSA9PT0gJ3N1YnRpdGxlcycpXG4gICAgICA/Lml0ZW1zIHx8IFtdXG4gICkubWFwKGl0ZW0gPT4gKHtcbiAgICBzZWN0aW9uOiAnc3VidGl0bGVzJyxcbiAgICAuLi5pdGVtLFxuICAgIC4uLihpdGVtLnZhbHVlLmlkID09PSBzZWxlY3RlZFN1YnRpdGxlICYmIHtzZWxlY3RlZDogdHJ1ZX0pLFxuICB9KSlcbiAgcmV0dXJuIHthdWRpb1RyYWNrcywgc3VidGl0bGVUcmFja3N9XG59XG5cbi8vIFRPRE8gZXh0cmFjdCB0byBzb21ld2hlcmUgZWxzZVxuY29uc3QgbWVudUNsYXNzZXMgPSB7XG4gIGRlZmF1bHQ6IGNzcyhMYW5ndWFnZU1lbnUuc3R5bGVzKSxcbiAgZGVza3RvcDogY3NzKExhbmd1YWdlTWVudS5zdHlsZXMsIExhbmd1YWdlTWVudS5kZXNrdG9wU3R5bGVzKSxcbn1cblxuY29uc3QgTGFuZ3VhZ2VTZXR0aW5ncyA9ICh7XG4gIHVpVHlwZSxcbiAgYXVkaW9UcmFja3MgPSBbXSxcbiAgc3VidGl0bGVUcmFja3MgPSBbXSxcbiAgb25DaGFuZ2UsXG4gIHNsb3RzID0ge0xhbmd1YWdlTWVudX0sXG4gIC4uLnJlc3Rcbn0pID0+IChcbiAgPE92ZXJsYXlQYW5lbCBidXR0b25JY29uPVwic3VidGl0bGVcIj5cbiAgICA8c2xvdHMuTGFuZ3VhZ2VNZW51XG4gICAgICB1aVR5cGU9e3VpVHlwZX1cbiAgICAgIGNsYXNzZXM9e21lbnVDbGFzc2VzfVxuICAgICAgc2VjdGlvbk9wdGlvbnM9e1thdWRpb1RyYWNrcywgc3VidGl0bGVUcmFja3NdfVxuICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgey4uLnJlc3R9XG4gICAgLz5cbiAgPC9PdmVybGF5UGFuZWw+XG4pXG5cbmNvbnN0IFByZW1pdW1QbGF5ZXIgPSAoe1xuICBzb3VyY2UsXG4gIHN0YXJ0VGltZSxcbiAgcXVhbGl0eSA9IHt9LFxuICB0aXRsZSxcbiAgbWV0YWRhdGEsXG4gIGNoYW5uZWxUaXRsZSxcbiAgY2hhcHRlcnMsXG4gIHBsYXliYWNrU3RhdGU6IGFwcFBsYXliYWNrU3RhdGUsXG4gIGN1cnJlbnRUaW1lOiBhcHBDdXJyZW50VGltZSxcbiAgcGxheWJhY2tSYXRlOiBhcHBQbGF5YmFja1JhdGUsXG4gIGxvb3AsXG4gIHZvbHVtZTogYXBwVm9sdW1lLFxuICB0aHVtYm5haWxzVXJsLFxuICBjb250cm9scyA9IHthdXRvaGlkZTogMzAwMH0sXG4gIG1hcmtzID0gW10sXG4gIC8vIFRPRE8gc2VjdGlvbklkXG4gIGludGwsXG4gIHNldHRpbmdzOiBhcHBTZXR0aW5ncyA9IGRlZmF1bHRTZXR0aW5ncyxcbiAgYmxvY2tpbmcsXG4gIHBsdWdpbnMgPSBbXSxcbiAgbW9kdWxlc0NvbmZpZyxcblxuICB1aVR5cGUgPSBpc0Rlc2t0b3AoKSA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnLFxuICBzdHlsZSxcbiAgY2hpbGRyZW4sXG4gIHVpTW9kZSA9ICdzdGFuZGFsb25lJyxcbiAgY2FzdDogY2FzdE9wdGlvbnMgPSAnY29tcGF0aWJsZScsXG4gIHNsb3RzLFxuICBzbG90UHJvcHMgPSB7fSxcbiAgb25FcnJvcixcbiAgb25QbGF5YmFja1N0YXRlQ2hhbmdlLFxuICBvbkJhY2ssXG4gIG9uQ2FzdCxcbiAgb25DaGFuZ2VOZXh0LFxuICBvbkNoYW5nZVByZXZpb3VzLFxuICBvbk9wZW5TZXR0aW5ncyxcbiAgb25DaGFuZ2VTZXR0aW5ncyxcbiAgb25QbGF5ZXJMb2FkZWQsXG4gIG9uQmxvY2tlZEF1dG9wbGF5LFxuICBvblBsYXlsb2dGaXJlZCxcbiAgLi4udmlkZW9Qcm9wc1xufSkgPT4ge1xuICBjb25zdCBjb21wb25lbnRzID0ge1xuICAgIFZvbHVtZUNvbnRyb2wsXG4gICAgQ2FzdFVpLFxuICAgIERpc3BsYXlUaW1lLFxuICAgIExpdmVCdXR0b24sXG4gICAgU2Vla2JhcixcbiAgICBTZXR0aW5ncyxcbiAgICAuLi5zbG90cyxcbiAgfVxuICBjb25zdCB2aWRlb1JlZiA9IHVzZVJlZigpXG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZigpXG4gIGNvbnN0IHBsYXllclJlZiA9IHVzZVJlZigpXG4gIGNvbnN0IGFkQ29udGFpbmVyUmVmID0gdXNlUmVmKClcbiAgY29uc3QgcmVmcyA9IHVzZVJlZih7fSlcbiAgLy8gVE9ETyBtb3ZlIFJXRCByZWxhdGVkIHRvIExheW91dFxuICBjb25zdCB7XG4gICAgY3VycmVudEJyZWFrcG9pbnQ6IHNpemUsXG4gICAgd2lkdGgsXG4gICAgb2JzZXJ2ZSxcbiAgfSA9IHVzZURpbWVuc2lvbnMoe1xuICAgIHBvbHlmaWxsOiBSZXNpemVPYnNlcnZlcixcbiAgICBicmVha3BvaW50czogc2l6ZXMsXG4gIH0pXG4gIGNvbnN0IFtpc1VzZXJBY3RpdmUsIHNldElzVXNlckFjdGl2ZV0gPSB1c2VTdGF0ZShcbiAgICB1aU1vZGUgPT09ICdzdGFuZGFsb25lJyA/IHRydWUgOiB2aWRlb1Byb3BzLmF1dG9wbGF5XG4gIClcbiAgY29uc3QgW3VzZXJGb2N1cywgc2V0VXNlckZvY3VzXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbdGFyZ2V0U3RhdGUsIHNldFRhcmdldFN0YXRlXSA9IHVzZVN0YXRlKCgpID0+ICh7XG4gICAgcGxheWJhY2tTdGF0ZTpcbiAgICAgIGFwcFBsYXliYWNrU3RhdGUgfHwgKHZpZGVvUHJvcHMuYXV0b3BsYXkgPyAncGxheWluZycgOiAncGF1c2VkJyksXG4gICAgY3VycmVudFRpbWU6IHN0YXJ0VGltZSxcbiAgfSkpXG4gIGNvbnN0IFtwbGF5YmFja1RpbWUsIHNldFBsYXliYWNrVGltZV0gPSB1c2VTdGF0ZSh7XG4gICAgY3VycmVudFRpbWU6IDAsXG4gICAgYnVmZmVyVGltZTogMCxcbiAgfSlcbiAgY29uc3QgdG9nZ2xlUGxheSA9IChvdmVycmlkZVN0YXRlLCB7dHJpZ2dlcmVkQnl9ID0ge30pID0+IHtcbiAgICBpZiAodGFyZ2V0U3RhdGUucGxheWJhY2tTdGF0ZSAhPT0gb3ZlcnJpZGVTdGF0ZSkge1xuICAgICAgc2V0VGFyZ2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHBsYXliYWNrU3RhdGU6IG92ZXJyaWRlU3RhdGUgfHwgZmxpcFN0YXRlKHN0YXRlLnBsYXliYWNrU3RhdGUpLFxuICAgICAgICBhbmltYXRpb246XG4gICAgICAgICAgdHJpZ2dlcmVkQnkgPT09ICd1c2VyLWFjdGlvbicgJiYgZmxpcFN0YXRlKHN0YXRlLnBsYXliYWNrU3RhdGUpLFxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXBwUGxheWJhY2tTdGF0ZSkge1xuICAgICAgdG9nZ2xlUGxheShhcHBQbGF5YmFja1N0YXRlKVxuICAgIH1cbiAgfSwgW2FwcFBsYXliYWNrU3RhdGVdKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh1aVR5cGUgPT09ICdtb2JpbGUnKSB7XG4gICAgICBvbihkb2N1bWVudCwgJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB0b2dnbGVQbGF5KCdwYXVzZWQnKSlcbiAgICB9XG4gIH0sIFt1aVR5cGUsIHRhcmdldFN0YXRlLnBsYXliYWNrU3RhdGVdKVxuICBjb25zdCB1cGRhdGVQbGF5YmFja1RpbWUgPSBldmVudCA9PlxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShcbiAgICAgICgpID0+XG4gICAgICAgIChldmVudD8udHlwZSAhPT0gJ3RpbWV1cGRhdGUnIHx8IGlzQnVmZmVyZWQodmlkZW9SZWYuY3VycmVudCkpICYmXG4gICAgICAgIHNldFBsYXliYWNrVGltZShzdGF0ZSA9PiAoe1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIC4uLmdldE1lZGlhVGltZSh2aWRlb1JlZi5jdXJyZW50LCB7XG4gICAgICAgICAgICBwbGF5ZXI6IHBsYXllclJlZi5jdXJyZW50LFxuICAgICAgICAgICAgcGx1Z2lucyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4oZXZlbnQ/LnR5cGUgPT09ICdkdXJhdGlvbmNoYW5nZScgJiYge1xuICAgICAgICAgICAgY3VycmVudFRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSlcbiAgICApXG4gIGNvbnN0IHNldFRhcmdldFRpbWUgPSB0aW1lID0+IHtcbiAgICBjb25zdCB0cmltbWVkID0gTWF0aC5taW4oXG4gICAgICB0aW1lLFxuICAgICAgdmlkZW9SZWYuY3VycmVudD8uaW5pdGlhbER1cmF0aW9uIHx8IEluZmluaXR5XG4gICAgKVxuICAgIHNldFRhcmdldFN0YXRlKHN0YXRlID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIC8vIHNlZWsgdG8gMCByZXBlYXRlZGx5IGVkZ2UgY2FzZVxuICAgICAgY3VycmVudFRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lICE9PSB0cmltbWVkID8gdHJpbW1lZCA6IHRyaW1tZWQgKyAwLjAxLFxuICAgIH0pKVxuICAgIHVwZGF0ZVBsYXliYWNrVGltZSgpXG4gIH1cbiAgY29uc3QgW3BsYXliYWNrU3RhdGUsIHNldFBsYXliYWNrU3RhdGVdID0gdXNlU3RhdGUoJ2luaXQnKVxuICBjb25zdCBbY2FzdFN0YXRlLCBzZXRDYXN0U3RhdGVdID0gdXNlU3RhdGUoJycpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBhcHBDdXJyZW50VGltZSA9PT0gJ251bWJlcicpIHNldFRhcmdldFRpbWUoYXBwQ3VycmVudFRpbWUgfHwgMClcbiAgICBpZiAodHlwZW9mIGFwcEN1cnJlbnRUaW1lID09PSAnb2JqZWN0JylcbiAgICAgIHNldFRhcmdldFRpbWUoYXBwQ3VycmVudFRpbWU/LnZhbHVlIHx8IDApXG4gIH0sIFthcHBDdXJyZW50VGltZV0pXG4gIGNvbnN0IFtlcnJvckRhdGEsIHNldEVycm9yRGF0YV0gPSB1c2VTdGF0ZSgpXG4gIGNvbnN0IGVycm9ySGFuZGxlciA9IHJlYWN0RXZlbnQgPT4ge1xuICAgIG9uRXJyb3I/LihyZWFjdEV2ZW50Lm5hdGl2ZUV2ZW50KVxuICAgIGhhbmRsZUVycm9yKHJlYWN0RXZlbnQsIHtcbiAgICAgIG1lZGlhOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgICAgZGlzcGxheUVycm9yOiBkYXRhID0+IHtcbiAgICAgICAgc2V0UGxheWJhY2tTdGF0ZSgnZXJyb3InKVxuICAgICAgICBzZXRFcnJvckRhdGEoY3VycmVudCA9PiAoY3VycmVudD8uY29kZSA/IGN1cnJlbnQgOiBkYXRhKSlcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuICBjb25zdCBpc0xpdmUgPSBwbGF5YmFja1RpbWUuc3RyZWFtVHlwZSA9PT0gJ2xpdmUnXG4gIGNvbnN0IFtzZXR0aW5ncywgc2V0U2V0dGluZ3NdID0gdXNlU3RhdGUoKCkgPT4gKHtcbiAgICBzZWN0aW9uczogW10sXG4gICAgdmFsdWVzOiB7c3BlZWQ6IDF9LFxuICB9KSlcbiAgY29uc3QgZmV0Y2hTZXR0aW5ncyA9ICgpID0+IHtcbiAgICBpZiAoIXBsYXllclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc3BlZWRJdGVtcyA9IGFwcFNldHRpbmdzLnNwZWVkSXRlbXMgfHwgKGlzTGl2ZSA/IFtdIDogdW5kZWZpbmVkKVxuICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4ge1xuICAgICAgY29uc3Qge3ZhbHVlcywgc2VjdGlvbnN9ID0gZ2V0U2V0dGluZ3NEYXRhKHtcbiAgICAgICAgbWVkaWE6IHZpZGVvUmVmLmN1cnJlbnQsXG4gICAgICAgIHBsYXllcjogcGxheWVyUmVmLmN1cnJlbnQsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgcXVhbGl0eSxcbiAgICAgICAgc3BlZWRJdGVtcyxcbiAgICAgICAgbG9vcCxcbiAgICAgICAgcHJlZmVycmVkOiBjdXJyZW50LnByZWZlcnJlZCxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge3ByZWZlcnJlZDogY3VycmVudC5wcmVmZXJyZWQsIHZhbHVlcywgc2VjdGlvbnN9XG4gICAgfSlcbiAgfVxuICBjb25zdCBsYXN0U3RhdGUgPSB1c2VSZWYocGxheWJhY2tTdGF0ZSlcbiAgY29uc3QgaGFuZGxlUGxheWJhY2tTdGF0ZUNoYW5nZSA9IChldmVudCwgc3RhdGUpID0+IHtcbiAgICBpZiAobGFzdFN0YXRlLmN1cnJlbnQgPT09ICdlcnJvcicpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBvblBsYXliYWNrU3RhdGVDaGFuZ2U/LihldmVudCwgc3RhdGUpXG4gICAgLy8gcHJldmlvdXNseSBVSSBwbGF5YmFjayBzdGF0ZSB3YXMgc3luY2VkIG9ubHkgd2hlblxuICAgIC8vIGV4aXRpbmcgaU9TIHZpZGVvIG9ubHkgZnVsbHNjcmVlbih3ZWJraXRlbmRmdWxsc2NyZWVuKVxuICAgIGlmIChcbiAgICAgIC9wbGF5aW5nfHBhdXNlZC8udGVzdChzdGF0ZSkgJiZcbiAgICAgICEodWlUeXBlID09PSAnbW9iaWxlJyAmJiBibG9ja2luZykgJiZcbiAgICAgICFzaG91bGRQYXVzZSh7dXNlckZvY3VzLCB1aVR5cGV9KVxuICAgICkge1xuICAgICAgdG9nZ2xlUGxheShzdGF0ZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSAnZW5kZWQnKSB7XG4gICAgICB0b2dnbGVQbGF5KCdwYXVzZWQnKVxuICAgIH1cbiAgICBpZiAoc3RhdGUgPT09ICdsb2FkaW5nJyAmJiBsYXN0U3RhdGUuY3VycmVudCAhPT0gJ2luaXQnKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRvZ2dsZVBsYXkoJ3BsYXlpbmcnKSwgMSlcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIHNldElzVXNlckFjdGl2ZSh0cnVlKVxuICAgIH1cbiAgICBpZiAobGFzdFN0YXRlLmN1cnJlbnQgPT09ICdsb2FkaW5nJykge1xuICAgICAgZmV0Y2hTZXR0aW5ncygpXG4gICAgfVxuICAgIGxhc3RTdGF0ZS5jdXJyZW50ID0gc3RhdGVcbiAgICBzZXRQbGF5YmFja1N0YXRlKHN0YXRlKVxuICB9XG5cbiAgY29uc3QgY2hhbmdlU2V0dGluZ3MgPSAobmFtZSwgdmFsdWUsIHtrZWVwT3Blbn0gPSB7fSkgPT4ge1xuICAgIC8vIFRPRE8gY29uc2lkZXIgbWVyZ2UgaW50byB1c2VSZWR1Y2VyP1xuICAgIG9uQ2hhbmdlU2V0dGluZ3M/Lih7bmFtZSwgdmFsdWV9KVxuICAgIHNldFRhcmdldFRpbWUocGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lKVxuICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB2YWx1ZXM6IHsuLi5jdXJyZW50LnZhbHVlcywgW25hbWVdOiB2YWx1ZX0sXG4gICAgICBwcmVmZXJyZWQ6IHsuLi5jdXJyZW50LnByZWZlcnJlZCwgW25hbWVdOiB2YWx1ZX0sXG4gICAgfSkpXG4gICAgaWYgKCFrZWVwT3Blbikge1xuICAgICAgc2V0VXNlckZvY3VzKCcnKVxuICAgIH1cbiAgfVxuICBjb25zdCBvcGVuU2V0dGluZ3MgPSBldmVudCA9PiB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWUgPVxuICAgICAgdXNlckZvY3VzICE9PSAnc2V0dGluZ3MnICYmXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBvbk9wZW5TZXR0aW5ncz8uKGV2ZW50LCBzZXR0aW5ncylcbiAgICAgICAgLy8gSW4gaU9TIFNhZmFyaSwgd2UgbmVlZCB0byB1cGRhdGUgc2V0dGluZ3MgZGF0YVxuICAgICAgICBmZXRjaFNldHRpbmdzKClcbiAgICAgIH0pXG4gICAgc2V0VXNlckZvY3VzKGN1cnJlbnQgPT4gKGN1cnJlbnQgPT09ICdzZXR0aW5ncycgPyAnJyA6ICdzZXR0aW5ncycpKVxuICAgIHJldHVybiBhbmltYXRpb25GcmFtZVxuICB9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFwcFBsYXliYWNrUmF0ZSA+IDApIHtcbiAgICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4gKHtcbiAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgdmFsdWVzOiB7Li4uY3VycmVudC52YWx1ZXMsIHNwZWVkOiBhcHBQbGF5YmFja1JhdGV9LFxuICAgICAgfSkpXG4gICAgfVxuICB9LCBbYXBwUGxheWJhY2tSYXRlXSlcblxuICBjb25zdCBxdWFsaXR5T3B0aW9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0UXVhbGl0eU9wdGlvbnMoc2V0dGluZ3MpLFxuICAgIFtzZXR0aW5ncy52YWx1ZXMucXVhbGl0eV1cbiAgKVxuICBjb25zdCB2aWV3TW9kZSA9IHVzZUxpbmtTdGF0ZSh1cGRhdGUgPT5cbiAgICBvblZpZXdNb2RlQ2hhbmdlKHZpZGVvUmVmLmN1cnJlbnQsIHVwZGF0ZSlcbiAgKVxuICBjb25zdCBzb3VyY2VPdmVycmlkZSA9IHVzZUxpbmtTdGF0ZShcbiAgICBhc3luYyB1cGRhdGUgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgc291cmNlICYmIChhd2FpdCBxdWFsaXR5LnJld3JpdGVNYW5pZmVzdD8uKHNvdXJjZSwgcXVhbGl0eU9wdGlvbnMpKVxuICAgICAgdXBkYXRlKHJlc3VsdCB8fCBzb3VyY2UpXG4gICAgfSxcbiAgICBbc291cmNlLCBxdWFsaXR5T3B0aW9uc11cbiAgKVxuICBjb25zdCB3YWl0aW5nID0gL2VtcHRpZWR8bG9hZGluZ3xidWZmZXJpbmcvLnRlc3QocGxheWJhY2tTdGF0ZSlcbiAgY29uc3QgYWN0aXZlUGxheWJhY2sgPVxuICAgIHBsYXliYWNrU3RhdGUgPT09ICdwbGF5aW5nJyB8fCBwbGF5YmFja1N0YXRlID09PSAnd2FpdGluZydcbiAgY29uc3Qge1xuICAgIG1vZGU6IGF1dG9IaWRlTW9kZSxcbiAgICBvbkNsaWNrLFxuICAgIG9uTW91c2VNb3ZlLFxuICB9ID0gdXNlQXV0b0hpZGUoe1xuICAgIHBpbm5lZDogIWNvbnRyb2xzLmF1dG9oaWRlIHx8IHdhaXRpbmcgfHwgIWFjdGl2ZVBsYXliYWNrIHx8IHVzZXJGb2N1cyxcbiAgICB0YXBUb0hpZGU6IHVpVHlwZSA9PT0gJ21vYmlsZScsXG4gICAgaGlkZVRpbWVNczogY29udHJvbHMuYXV0b2hpZGUsXG4gIH0pXG4gIGNvbnN0IG1vZGUgPVxuICAgIHVzZXJGb2N1cyA9PT0gJ3NlZWtiYXInXG4gICAgICA/ICdoaWRkZW4nXG4gICAgICA6IGNvbnRyb2xzLmF1dG9oaWRlXG4gICAgICA/IGF1dG9IaWRlTW9kZVxuICAgICAgOiBjb250cm9sc1xuICAgICAgPyAnc2hvd24nXG4gICAgICA6ICdoaWRkZW4nXG4gIGNvbnN0IGNvbnRyb2xzRGlzcGxheSA9XG4gICAgdXNlckZvY3VzID09PSAnc2Vla2JhcidcbiAgICAgID8gJ3NlZWtiYXItb25seSdcbiAgICAgIDogY29udHJvbHMgPT09ICd0aXRsZS1vbmx5JyB8fCBwbGF5YmFja1N0YXRlID09PSAnZW1wdGllZCdcbiAgICAgID8gJ2hpZGRlbidcbiAgICAgIDogbW9kZVxuICBjb25zdCBzaG91bGRIaWRlUGFuZWxzID1cbiAgICAoY29udHJvbHMgPT09ICduby1wYW5lbCcgfHwgY29udHJvbHNEaXNwbGF5ID09PSAnaGlkZGVuJykgJiYgdXNlckZvY3VzXG4gIGNvbnN0IGhhdmVQbGF5UGFuZWwgPVxuICAgICFibG9ja2luZyAmJlxuICAgIGhhdmVQb2ludGVyKCkgJiZcbiAgICB1aVR5cGUgPT09ICdkZXNrdG9wJyAmJlxuICAgICF3YWl0aW5nICYmXG4gICAgIS92b2x1bWV8JycvLnRlc3QodXNlckZvY3VzKSAmJlxuICAgICEvdGl0bGUtb25seXxuby1wYW5lbC8udGVzdChjb250cm9scykgJiZcbiAgICAoY29udHJvbHMuYXV0b2hpZGUgfHwgbW9kZSA9PT0gJ3Nob3duJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRIaWRlUGFuZWxzKSB7XG4gICAgICBzZXRVc2VyRm9jdXMoJycpXG4gICAgfVxuICB9LCBbc2hvdWxkSGlkZVBhbmVsc10pXG4gIGNvbnN0IHtzdWJzY3JpYmUsIG9uQ2hhbmdlLCB0b2dnbGVNdXRlfSA9IGxpbmtNZWRpYVZvbHVtZSgoKSA9PiAoe1xuICAgIHZpZGVvOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgIGdldFBsYXllcjogKCkgPT4gcGxheWVyUmVmLmN1cnJlbnQsXG4gIH0pKVxuICBjb25zdCBjaGFuZ2VQcmV2aW91cyA9IGV2ZW50ID0+IHtcbiAgICBvbkNoYW5nZVByZXZpb3VzKGV2ZW50KVxuICAgIHRvZ2dsZVBsYXkoJ3BhdXNlZCcpXG4gICAgdmlkZW9SZWYuY3VycmVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbG9hZHN0YXJ0JykpXG4gIH1cbiAgY29uc3QgY2hhbmdlTmV4dCA9IGV2ZW50ID0+IHtcbiAgICBvbkNoYW5nZU5leHQoZXZlbnQpXG4gICAgdG9nZ2xlUGxheSgncGF1c2VkJylcbiAgICB2aWRlb1JlZi5jdXJyZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdsb2Fkc3RhcnQnKSlcbiAgfVxuXG4gIHVzZUVmZmVjdChmZXRjaFNldHRpbmdzLCBbYXBwU2V0dGluZ3NdKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFRoZSBhZENvbnRhaW5lciBzaG91bGQgYmUgc2V0IGJlZm9yZSBgbG9hZGAgYmVjYXVzZSBJbWFEYWkubG9hZCBuZWVkcyBpdC5cbiAgICBwbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHBsdWdpbi5zZXRBZENvbnRhaW5lcj8uKGFkQ29udGFpbmVyUmVmLmN1cnJlbnQpKVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoXG4gICAgKCkgPT5cbiAgICAgIGRpc3BhdGNoQ2hhcHRlckV2ZW50cyh7XG4gICAgICAgIG1lZGlhOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgICAgICBjaGFwdGVycyxcbiAgICAgICAgZ2V0VGltZTogKCkgPT4gdmlkZW9SZWYuY3VycmVudC5jdXJyZW50VGltZSxcbiAgICAgIH0pLFxuICAgIFtjaGFwdGVyc11cbiAgKVxuXG4gIGNvbnN0IGlzRW5kID0gcGxheWJhY2tTdGF0ZSA9PT0gJ2VuZGVkJ1xuICBjb25zdCBjYW5TZWVrID0gIWlzRW5kICYmIHBsYXliYWNrVGltZS5kdXJhdGlvbiA+IDBcbiAgY29uc3QgZGVyaXZlZFBsYXliYWNrU3RhdGUgPVxuICAgICh1aVR5cGUgPT09ICdtb2JpbGUnICYmIGJsb2NraW5nKSB8fCBzaG91bGRQYXVzZSh7dXNlckZvY3VzLCB1aVR5cGV9KVxuICAgICAgPyAncGF1c2VkJ1xuICAgICAgOiB0YXJnZXRTdGF0ZS5wbGF5YmFja1N0YXRlXG4gIGNvbnN0IGFjdGl2ZVRodW1ibmFpbHNVcmwgPVxuICAgICghdXNlckZvY3VzIHx8IHVzZXJGb2N1cyA9PT0gJ3NlZWtiYXInKSAmJlxuICAgIChnZXRUaHVtYm5haWxzVXJsKHNvdXJjZSkgfHwgdGh1bWJuYWlsc1VybClcbiAgY29uc3QgY3NzVmFyaWFibGVzID0ge1xuICAgICctLXBsYXlpbmcnOiBwbGF5YmFja1N0YXRlID09PSAncGxheWluZycgPyAnMScgOiAnMCcsXG4gIH1cbiAgY29uc3Qgb25SZXdpbmQgPVxuICAgICghaXNMaXZlIHx8IHBsYXliYWNrVGltZS5jdXJyZW50VGltZSA8IDApICYmXG4gICAgIWlzRW5kICYmXG4gICAgKCgpID0+IHNldFRhcmdldFRpbWUocGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lIC0gMTAsICdyZXdpbmQnKSlcbiAgY29uc3Qgb25Gb3J3YXJkID1cbiAgICAoIWlzTGl2ZSB8fCBwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgPCAwKSAmJlxuICAgIGNhblNlZWsgJiZcbiAgICAoKCkgPT4gc2V0VGFyZ2V0VGltZShwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgKyAxMCwgJ2ZvcndhcmQnKSlcbiAgY29uc3Qgb25DbGlja0JsYW5rID1cbiAgICBoYXZlUGxheVBhbmVsICYmICgoKSA9PiB0b2dnbGVQbGF5KCcnLCB7dHJpZ2dlcmVkQnk6ICd1c2VyLWFjdGlvbid9KSlcblxuICBjb25zdCB1aUhhbmRsZXJzID0ge1xuICAgIG9uUGxheTogKCkgPT4ge1xuICAgICAgdG9nZ2xlUGxheSgnJywge3RyaWdnZXJlZEJ5OiAndXNlci1hY3Rpb24nfSlcbiAgICAgIHNldElzVXNlckFjdGl2ZSh0cnVlKVxuICAgIH0sXG4gICAgb25DbGlja0xpdmU6IGlzTGl2ZSAmJiAoKCkgPT4gc2V0VGFyZ2V0VGltZSgwLCAnc2Vla1RvTGl2ZScpKSxcbiAgICBvbkNsaWNrU2Vla2JhcjogKCkgPT4ge1xuICAgICAgcmVmcy5jdXJyZW50LmRlZmVyZWRTZWVrRm9jdXMgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiBzZXRVc2VyRm9jdXMoJ3NlZWtiYXInKSxcbiAgICAgICAgNjZcbiAgICAgIClcbiAgICB9LFxuICAgIG9uU2VlazogdGltZSA9PiB7XG4gICAgICBzZXRUYXJnZXRUaW1lKHRpbWUsICdzZWVrJylcbiAgICAgIGNsZWFyVGltZW91dChyZWZzLmN1cnJlbnQuZGVmZXJlZFNlZWtGb2N1cylcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0VXNlckZvY3VzKCcnKSwgNjYpXG4gICAgfSxcbiAgICBvbkNoYW5nZVNldHRpbmdzOiAoe25hbWUsIHZhbHVlLCBrZWVwT3Blbn0pID0+XG4gICAgICBjaGFuZ2VTZXR0aW5ncyhuYW1lLCB2YWx1ZSwge2tlZXBPcGVufSksXG4gICAgb25DbG9zZVNldHRpbmdzOiBldmVudCA9PiB7XG4gICAgICBzZXRVc2VyRm9jdXMoJycpXG4gICAgICBzbG90UHJvcHM/LnNldHRpbmdzPy5vbkNsb3NlPy4oZXZlbnQpXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IHVpRWxlbWVudHMgPSB7XG4gICAgbGl2ZUJ1dHRvbjogdWlIYW5kbGVycy5vbkNsaWNrTGl2ZSAmJiAoXG4gICAgICA8Y29tcG9uZW50cy5MaXZlQnV0dG9uXG4gICAgICAgIHVzaW5nU3RhcnRPdmVyPXtwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgPCAwfVxuICAgICAgICBvbkNsaWNrPXt1aUhhbmRsZXJzLm9uQ2xpY2tMaXZlfVxuICAgICAgLz5cbiAgICApLFxuICAgIGNvbnRyb2xCdXR0b25zOiB7XG4gICAgICBwbGF5QnV0dG9uOiAoXG4gICAgICAgIDxQbGF5QnV0dG9uXG4gICAgICAgICAgcGxheWJhY2tTdGF0ZT17ZGVyaXZlZFBsYXliYWNrU3RhdGV9XG4gICAgICAgICAgZW5kZWQ9e2lzRW5kfVxuICAgICAgICAgIGhpZGRlbj17XG4gICAgICAgICAgICB1aVR5cGUgPT09ICdtb2JpbGUnICYmICh3YWl0aW5nIHx8IC9sb2FkaW5nLy50ZXN0KHBsYXliYWNrU3RhdGUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXJpYW50PXshaXNVc2VyQWN0aXZlICYmICdmaXJzdHBsYXknfVxuICAgICAgICAgIG9uQ2xpY2s9e3VpSGFuZGxlcnMub25QbGF5fVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICAgIHJld2luZEJ1dHRvbjogb25SZXdpbmQgJiYgKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc3RhcnRJY29uPVwicmV3aW5kMTBcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5SRVdJTkRcIlxuICAgICAgICAgIGRpc2FibGVkPXtpc0VuZH1cbiAgICAgICAgICBvbkNsaWNrPXtvblJld2luZH1cbiAgICAgICAgLz5cbiAgICAgICksXG4gICAgICBmb3J3YXJkQnV0dG9uOiBvbkZvcndhcmQgJiYgKFxuICAgICAgICA8Rm9yd2FyZEJ1dHRvblxuICAgICAgICAgIHN0YXJ0SWNvbj1cImZvcndhcmQxMFwiXG4gICAgICAgICAgdGl0bGU9XCJLS1MuUExBWUVSLkZPUldBUkRcIlxuICAgICAgICAgIGRpc2FibGVkPXshY2FuU2Vla31cbiAgICAgICAgICBvbkNsaWNrPXtvbkZvcndhcmR9XG4gICAgICAgIC8+XG4gICAgICApLFxuICAgICAgbmV4dEVwaXNvZGVCdXR0b246IChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHN0YXJ0SWNvbj1cIm5leHRcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5ORVhUXCJcbiAgICAgICAgICBkaXNhYmxlZD17IW9uQ2hhbmdlTmV4dH1cbiAgICAgICAgICBvbkNsaWNrPXtjaGFuZ2VOZXh0fVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICAgIHByZXZpb3VzRXBpc29kZUJ1dHRvbjogKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc3RhcnRJY29uPVwicHJldmlvdXNcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5QUkVWSU9VU1wiXG4gICAgICAgICAgZGlzYWJsZWQ9eyFvbkNoYW5nZVByZXZpb3VzfVxuICAgICAgICAgIG9uQ2xpY2s9e2NoYW5nZVByZXZpb3VzfVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICB9LFxuICAgIHNlZWtiYXI6IChcbiAgICAgIDxjb21wb25lbnRzLlNlZWtiYXJcbiAgICAgICAgc3R5bGU9ey92b2x1bWUvLnRlc3QodXNlckZvY3VzKSAmJiB7b3BhY2l0eTogJzAnfX1cbiAgICAgICAgc3RhcnRUaW1lPXtwbGF5YmFja1RpbWUuc3RhcnRUaW1lfVxuICAgICAgICBjdXJyZW50VGltZT17cGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lfVxuICAgICAgICBidWZmZXJUaW1lPXtwbGF5YmFja1RpbWUuYnVmZmVyVGltZX1cbiAgICAgICAgZHVyYXRpb249e3BsYXliYWNrVGltZS5kdXJhdGlvbn1cbiAgICAgICAgY2hhcHRlcnM9e2NoYXB0ZXJzfVxuICAgICAgICBvbkNoYW5nZT17dWlIYW5kbGVycy5vbkNsaWNrU2Vla2Jhcn1cbiAgICAgICAgb25DaGFuZ2VDb21taXR0ZWQ9e3VpSGFuZGxlcnMub25TZWVrfVxuICAgICAgICBtYXJrcz17bWFya3N9XG4gICAgICAgIHBsdWdpbnM9e3BsdWdpbnN9XG4gICAgICAgIHsuLi5zbG90UHJvcHMuc2Vla2Jhcn1cbiAgICAgID5cbiAgICAgICAge2FjdGl2ZVRodW1ibmFpbHNVcmwgJiYgKFxuICAgICAgICAgIDxTZWVrUHJldmlld1xuICAgICAgICAgICAgdGh1bWJuYWlsc1VybD17YWN0aXZlVGh1bWJuYWlsc1VybH1cbiAgICAgICAgICAgIGR1cmF0aW9uPXtwbGF5YmFja1RpbWUuZHVyYXRpb259XG4gICAgICAgICAgICBjaGFwdGVycz17Y2hhcHRlcnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvY29tcG9uZW50cy5TZWVrYmFyPlxuICAgICksXG4gICAgZGlzcGxheVRpbWU6IDxjb21wb25lbnRzLkRpc3BsYXlUaW1lIHsuLi5wbGF5YmFja1RpbWV9IC8+LFxuICAgIGZ1bGxzY3JlZW5CdXR0b246IChcbiAgICAgIDxGdWxsc2NyZWVuQnV0dG9uXG4gICAgICAgIHZpZXdNb2RlPXt2aWV3TW9kZX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlRnVsbHNjcmVlbihjb250YWluZXJSZWYuY3VycmVudCl9XG4gICAgICAvPlxuICAgICksXG4gICAgdm9sdW1lQ29udHJvbDogd2lkdGggPj0gc2l6ZXNbJ3NtYWxsLWVtYmVkJ10gJiYgKFxuICAgICAgPGNvbXBvbmVudHMuVm9sdW1lQ29udHJvbFxuICAgICAgICB7Li4ue3N1YnNjcmliZSwgb25DaGFuZ2UsIHRvZ2dsZU11dGV9fVxuICAgICAgICBvbk1vdXNlT3Zlcj17KCkgPT4gc2V0VXNlckZvY3VzKCd2b2x1bWUnKX1cbiAgICAgICAgb25Nb3VzZU91dD17KCkgPT4gc2V0VXNlckZvY3VzKCcnKX1cbiAgICAgICAgey4uLnNsb3RQcm9wcz8udm9sdW1lQ29udHJvbH1cbiAgICAgIC8+XG4gICAgKSxcbiAgICBiYWNrSXRlbXM6IChcbiAgICAgIDxQbGF5UGFuZWwgYW5pbWF0aW9uPXt0YXJnZXRTdGF0ZS5hbmltYXRpb259IG9uQ2xpY2s9e29uQ2xpY2tCbGFua30gLz5cbiAgICApLFxuICB9XG4gIGNvbnN0IGNvbXBhdGliaWxpdHlDYXN0UHJvcHMgPSBjYXN0T3B0aW9ucyA9PT0gJ2NvbXBhdGlibGUnICYmIHtcbiAgICBzb3VyY2UsXG4gICAgdmFsdWVzOiB7dGl0bGUsIC4uLnNldHRpbmdzLnZhbHVlcywgLi4uaW50bCwgbW9kdWxlc0NvbmZpZ30sXG4gICAgb25Mb2FkOiBvbkNhc3QsXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjYXN0T3B0aW9ucyAmJiBjYXN0T3B0aW9ucyAhPT0gJ2NvbXBhdGlibGUnKSB7XG4gICAgICByZXR1cm4gbGlua0Nhc3Qoe3NvdXJjZSwgLi4uY2FzdE9wdGlvbnN9KVxuICAgIH0gLy8gVE9ETyBwbGF5bGlzdCwgYXVkaW8gLyBzdWJ0aXRsZSBzZXR0aW5nXG4gIH0sIFtzb3VyY2UsIGNhc3RPcHRpb25zLmNvbnRlbnRJZCwgY2FzdE9wdGlvbnMuY3VzdG9tRGF0YV0pXG5cbiAgcmV0dXJuIChcbiAgICA8SW50bFByb3ZpZGVyIHsuLi5pbnRsfT5cbiAgICAgIDxMYXlvdXRcbiAgICAgICAgc3R5bGU9e3suLi5zdHlsZSwgY3NzVmFyaWFibGVzfX1cbiAgICAgICAgdHlwZT17dWlUeXBlfVxuICAgICAgICBkaXNwbGF5PXttb2RlfVxuICAgICAgICBjb250cm9sc0Rpc3BsYXk9e2NvbnRyb2xzRGlzcGxheX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgdmlkZW89e1xuICAgICAgICAgIDxWaWRlb1xuICAgICAgICAgICAgey4uLnZpZGVvUHJvcHN9XG4gICAgICAgICAgICB2aWRlb1JlZj17bXVsdGlSZWYodmlkZW9SZWYsIHZpZGVvUHJvcHMudmlkZW9SZWYpfVxuICAgICAgICAgICAgc291cmNlPXtcbiAgICAgICAgICAgICAgY2FzdFN0YXRlICE9PSBDYXN0U3RhdGUuQ09OTkVDVEVEICYmXG4gICAgICAgICAgICAgIHBsYXliYWNrU3RhdGUgIT09ICdlcnJvcicgJiZcbiAgICAgICAgICAgICAgc291cmNlT3ZlcnJpZGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBsYXliYWNrU3RhdGU9e2Rlcml2ZWRQbGF5YmFja1N0YXRlfVxuICAgICAgICAgICAgY3VycmVudFRpbWU9e3RhcmdldFN0YXRlLmN1cnJlbnRUaW1lfVxuICAgICAgICAgICAgey4uLihhcHBWb2x1bWUgPj0gMCAmJiB7dm9sdW1lOiBhcHBWb2x1bWUsIG11dGVkOiBhcHBWb2x1bWUgPD0gMH0pfVxuICAgICAgICAgICAgcGxheWJhY2tSYXRlPXtzZXR0aW5ncy52YWx1ZXMuc3BlZWR9XG4gICAgICAgICAgICB2aWRlb1Jlc29sdXRpb249e3F1YWxpdHlPcHRpb25zfVxuICAgICAgICAgICAgYXVkaW89e3NldHRpbmdzLnZhbHVlcy5hdWRpb31cbiAgICAgICAgICAgIHRleHRUcmFjaz17c2V0dGluZ3MudmFsdWVzLnN1YnRpdGxlc31cbiAgICAgICAgICAgIGxvb3A9e3NldHRpbmdzLnZhbHVlcy5sb29wfVxuICAgICAgICAgICAgcGx1Z2lucz17cGx1Z2luc31cbiAgICAgICAgICAgIG1vZHVsZXNDb25maWc9e21vZHVsZXNDb25maWd9XG4gICAgICAgICAgICBvblBsYXlsb2dGaXJlZD17b25QbGF5bG9nRmlyZWR9XG4gICAgICAgICAgICBvbkVycm9yPXtlcnJvckhhbmRsZXJ9XG4gICAgICAgICAgICBvblBsYXliYWNrU3RhdGVDaGFuZ2U9e2hhbmRsZVBsYXliYWNrU3RhdGVDaGFuZ2V9XG4gICAgICAgICAgICBvbkJsb2NrZWRBdXRvcGxheT17ZXJyb3IgPT4gb25CbG9ja2VkQXV0b3BsYXk/LihlcnJvcil9XG4gICAgICAgICAgICBvbkNhblBsYXk9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlUGxheWJhY2tUaW1lKGV2ZW50KVxuICAgICAgICAgICAgICB2aWRlb1Byb3BzLm9uQ2FuUGxheT8uKGV2ZW50KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uVGltZVVwZGF0ZT17dXBkYXRlUGxheWJhY2tUaW1lfVxuICAgICAgICAgICAgb25EdXJhdGlvbkNoYW5nZT17dXBkYXRlUGxheWJhY2tUaW1lfVxuICAgICAgICAgICAgb25QbGF5ZXJMb2FkZWQ9e3BsYXllciA9PiB7XG4gICAgICAgICAgICAgIHBsYXllclJlZi5jdXJyZW50ID0gcGxheWVyXG4gICAgICAgICAgICAgIG9uUGxheWVyTG9hZGVkPy4ocGxheWVyKVxuICAgICAgICAgICAgICBzeW5jVm9sdW1lKHZpZGVvUmVmLmN1cnJlbnQsIHZpZGVvUHJvcHMubXV0ZWQgPyAwIDogYXBwVm9sdW1lKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lclJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQgPSBlbGVtZW50XG4gICAgICAgICAgb2JzZXJ2ZShlbGVtZW50KVxuICAgICAgICB9fVxuICAgICAgICBiYWNrUmVmPXthZENvbnRhaW5lclJlZn1cbiAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICBjaGFubmVsVGl0bGU9e2NoYW5uZWxUaXRsZX1cbiAgICAgICAgYmFja0J1dHRvbj17b25CYWNrICYmIDxCdXR0b24gc3RhcnRJY29uPVwiYmFja1wiIG9uQ2xpY2s9e29uQmFja30gLz59XG4gICAgICAgIHsuLi4oaXNVc2VyQWN0aXZlICYmIHVpRWxlbWVudHMpfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbk1vdXNlTW92ZT17b25Nb3VzZU1vdmV9XG4gICAgICA+XG4gICAgICAgIDxMb2FkaW5nU3Bpbm5lciBhY3RpdmU9e3dhaXRpbmd9IC8+XG4gICAgICAgIHtlcnJvckRhdGEgJiYgPEVycm9yIGVycm9yPXtlcnJvckRhdGF9IG9uQmFjaz17b25CYWNrfSAvPn1cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICB7LyogVE9ETyBzeW5jIENhc3QgbGFzdCBwbGF5ZWQgdGltZSBiYWNrICovfVxuICAgICAgICB7aXNVc2VyQWN0aXZlICYmIChcbiAgICAgICAgICA8Y29tcG9uZW50cy5DYXN0VWlcbiAgICAgICAgICAgIG9uQmFjaz17b25CYWNrfVxuICAgICAgICAgICAgb25TdGF0ZUNoYW5nZT17c2V0Q2FzdFN0YXRlfVxuICAgICAgICAgICAgb25Mb2FkPXtvbkNhc3R9XG4gICAgICAgICAgICB7Li4uY29tcGF0aWJpbGl0eUNhc3RQcm9wc31cbiAgICAgICAgICAgIHsuLi5zbG90UHJvcHMuY2FzdFVpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtpc1VzZXJBY3RpdmUgJiYgKCAvLyBUT0RPOiBEZXNpZ24gPEV4dGVuc3Rpb24gLz4gZmxhZ1xuICAgICAgICAgIDxjb21wb25lbnRzLlNldHRpbmdzXG4gICAgICAgICAgICB0eXBlPXt1aVR5cGV9XG4gICAgICAgICAgICBzZWN0aW9ucz17c2V0dGluZ3Muc2VjdGlvbnN9XG4gICAgICAgICAgICAvLyBUT0RPIGhhc0JvdHRvbVBhbmVsIGJvdHRvbTogOGVtXG4gICAgICAgICAgICBvcGVuPXt1c2VyRm9jdXMgPT09ICdzZXR0aW5ncyd9XG4gICAgICAgICAgICB2YWx1ZXM9e3NldHRpbmdzLnZhbHVlc31cbiAgICAgICAgICAgIG9uT3Blbj17b3BlblNldHRpbmdzfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3VpSGFuZGxlcnMub25DaGFuZ2VTZXR0aW5nc31cbiAgICAgICAgICAgIHsuLi5zbG90UHJvcHM/LnNldHRpbmdzfVxuICAgICAgICAgICAgb25DbG9zZT17dWlIYW5kbGVycy5vbkNsb3NlU2V0dGluZ3N9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPExhbmd1YWdlU2V0dGluZ3NcbiAgICAgICAgICB1aVR5cGU9e3VpVHlwZX1cbiAgICAgICAgICB7Li4uZ2V0TGFuZ3VhZ2VPcHRpb25zKHNldHRpbmdzKX1cbiAgICAgICAgICBvbkNoYW5nZT17KF9ldmVudCwgaXRlbSkgPT4gY2hhbmdlU2V0dGluZ3MoaXRlbS5zZWN0aW9uLCBpdGVtLnZhbHVlKX1cbiAgICAgICAgICB7Li4uc2xvdFByb3BzLmxhbmd1YWdlU2V0dGluZ3N9XG4gICAgICAgIC8+XG4gICAgICAgIDxCYWNrZHJvcCBvcGVuPXshcGxheWJhY2tTdGF0ZSB8fCBwbGF5YmFja1N0YXRlID09PSAnbG9hZGluZyd9PlxuICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICA8L0JhY2tkcm9wPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9JbnRsUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJlbWl1bVBsYXllclxuIl19 */")
8666
+ default: /*#__PURE__*/css$1(LanguageMenu.styles, process.env.NODE_ENV === "production" ? "" : ";label:default;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByZW1pdW1QbGF5ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUVXIiwiZmlsZSI6IlByZW1pdW1QbGF5ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtjc3N9IGZyb20gJ0BlbW90aW9uL2NzcydcbmltcG9ydCB1c2VEaW1lbnNpb25zIGZyb20gJ3JlYWN0LWNvb2wtZGltZW5zaW9ucydcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJ9IGZyb20gJ0BqdWdnbGUvcmVzaXplLW9ic2VydmVyJ1xuXG5pbXBvcnQge2hhbmRsZUVycm9yfSBmcm9tICdwbGF5ZXJDb3JlL2Vycm9ycydcbmltcG9ydCB7b259IGZyb20gJ3V0aWwvZXZlbnRzJ1xuaW1wb3J0IHtoYXZlUG9pbnRlciwgaXNEZXNrdG9wfSBmcm9tICd1dGlsL2Vudmlyb25tZW50J1xuaW1wb3J0IG11bHRpUmVmIGZyb20gJ3V0aWwvbXVsdGlSZWYnXG5pbXBvcnQge29uVmlld01vZGVDaGFuZ2UsIHRvZ2dsZUZ1bGxzY3JlZW59IGZyb20gJ3V0aWwvdmlld01vZGVzJ1xuaW1wb3J0IHt1c2VBdXRvSGlkZX0gZnJvbSAnaG9va3MnXG5pbXBvcnQge0ludGxQcm92aWRlcn0gZnJvbSAnY29udGV4dC9JMThuJ1xuaW1wb3J0IHtnZXRNZWRpYVRpbWUsIGlzQnVmZmVyZWR9IGZyb20gJ3BsYXllckNvcmUvbWVkaWFCaW5kaW5ncydcbmltcG9ydCBFcnJvciBmcm9tICdwbGF5ZXJVaS9FcnJvcidcbmltcG9ydCBMYXlvdXQgZnJvbSAncGxheWVyVWkvRGVmYXVsdExheW91dCdcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgTGl2ZUJ1dHRvbixcbiAgRnVsbHNjcmVlbkJ1dHRvbixcbiAgUGxheUJ1dHRvbixcbiAgRm9yd2FyZEJ1dHRvbixcbn0gZnJvbSAncGxheWVyVWkvYnV0dG9ucydcbmltcG9ydCBTZWVrYmFyIGZyb20gJ3BsYXllclVpL1NlZWtiYXInXG5pbXBvcnQgRGlzcGxheVRpbWUgZnJvbSAncGxheWVyVWkvRGlzcGxheVRpbWUnXG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAncGxheWVyVWkvTG9hZGluZ1NwaW5uZXInXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAncGxheWVyVWkvQmFja2Ryb3AnXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSAncGxheWVyVWkvU2V0dGluZ3MnXG5pbXBvcnQgT3ZlcmxheVBhbmVsIGZyb20gJ3BsYXllclVpL092ZXJsYXlQYW5lbCdcbmltcG9ydCBMYW5ndWFnZU1lbnUgZnJvbSAncGxheWVyVWkvTGFuZ3VhZ2VNZW51J1xuaW1wb3J0IFBsYXlQYW5lbCBmcm9tICdwbGF5ZXJVaS9QbGF5UGFuZSdcbmltcG9ydCBWb2x1bWVDb250cm9sIGZyb20gJ2NvbXBvbmVudC9Wb2x1bWVDb250cm9sJ1xuaW1wb3J0IENhc3RVaSBmcm9tICdjYXN0L0Nhc3RVaSdcbmltcG9ydCB7bGlua0Nhc3R9IGZyb20gJ2Nhc3QvZnJhbWV3b3JrJ1xuaW1wb3J0IHtDYXN0U3RhdGV9IGZyb20gJ0VudW0nXG5pbXBvcnQge2Rpc3BhdGNoQ2hhcHRlckV2ZW50c30gZnJvbSAnLi90aW1lbGluZSdcbmltcG9ydCBWaWRlbyBmcm9tICcuLi9WaWRlbydcbmltcG9ydCB7Z2V0TGFuZ3VhZ2VPcHRpb25zLCBnZXRRdWFsaXR5T3B0aW9ucywgZ2V0U2V0dGluZ3NEYXRhfSBmcm9tICcuL3NldHRpbmdzJ1xuaW1wb3J0IHtsaW5rTWVkaWFWb2x1bWUsIHN5bmNWb2x1bWV9IGZyb20gJy4vdm9sdW1lJ1xuaW1wb3J0IFNlZWtQcmV2aWV3IGZyb20gJy4vU2Vla1ByZXZpZXcnXG5cbmNvbnN0IHNpemVzID0ge1xuICAnc21hbGwtZW1iZWQnOiAyMDAsXG4gIGVtYmVkOiA0MDAsXG4gICd0YWJsZXQtcG9ydHJhaXQnOiA2MDAsXG4gICd0YWJsZXQtbGFuZHNjYXBlJzogOTAwLFxuICBkZXNrdG9wOiAxMjAwLFxufVxuXG5jb25zdCB1c2VMaW5rU3RhdGUgPSAocmVxdWVzdCwgZGVwZW5kZW5jaWVzID0gW10pID0+IHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZSgpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVxdWVzdChzZXRTdGF0ZSlcbiAgfSwgZGVwZW5kZW5jaWVzKVxuICByZXR1cm4gc3RhdGVcbn1cblxuY29uc3QgZmxpcFN0YXRlID0gc3RhdGUgPT4gKHN0YXRlID09PSAncGxheWluZycgPyAncGF1c2VkJyA6ICdwbGF5aW5nJylcblxuLy8gRklYTUU6IHRvbyBmZXcgbGluZXMgdG8gc3BsaXQgYSBmaWxlLCBsb29raW5nIGEgYmV0dGVyIHBsYWNlXG5jb25zdCBnZXRUaHVtYm5haWxzVXJsID0gc291cmNlID0+XG4gIFtdLmNvbmNhdChzb3VyY2UpLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICd0aHVtYm5haWwnKT8uc3JjXG5cbmNvbnN0IGRlZmF1bHRTZXR0aW5ncyA9IHt9XG5cbmNvbnN0IHNob3VsZFBhdXNlID0gKHt1c2VyRm9jdXMsIHVpVHlwZX0pID0+XG4gICh1aVR5cGUgPT09ICdtb2JpbGUnICYmIC9zZXR0aW5nc3xjaGFwdGVyLWxpc3QvLnRlc3QodXNlckZvY3VzKSkgfHxcbiAgL2Jsb2NraW5nfHNlZWtiYXJ8c2hhcmUtaW5uZXIvLnRlc3QodXNlckZvY3VzKVxuXG4vLyBUT0RPIGV4dHJhY3QgdG8gc29tZXdoZXJlIGVsc2VcbmNvbnN0IG1lbnVDbGFzc2VzID0ge1xuICBkZWZhdWx0OiBjc3MoTGFuZ3VhZ2VNZW51LnN0eWxlcyksXG4gIGRlc2t0b3A6IGNzcyhMYW5ndWFnZU1lbnUuc3R5bGVzLCBMYW5ndWFnZU1lbnUuZGVza3RvcFN0eWxlcyksXG59XG5cbmNvbnN0IExhbmd1YWdlU2V0dGluZ3MgPSAoe1xuICB1aVR5cGUsXG4gIGF1ZGlvVHJhY2tzID0gW10sXG4gIHN1YnRpdGxlVHJhY2tzID0gW10sXG4gIGdldFBsYXllcixcbiAgb25DaGFuZ2UsXG4gIHNsb3RzID0ge0xhbmd1YWdlTWVudX0sXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IGdldExhbmd1YWdlT3B0aW9ucyhnZXRQbGF5ZXIoKSwge2F1ZGlvVHJhY2tzLCBzdWJ0aXRsZVRyYWNrc30pXG4gIHJldHVybiAoXG4gICAgPE92ZXJsYXlQYW5lbCBidXR0b25JY29uPVwic3VidGl0bGVcIj5cbiAgICAgIDxzbG90cy5MYW5ndWFnZU1lbnVcbiAgICAgICAgdWlUeXBlPXt1aVR5cGV9XG4gICAgICAgIGNsYXNzZXM9e21lbnVDbGFzc2VzfVxuICAgICAgICBzZWN0aW9uT3B0aW9ucz17W29wdGlvbnMuYXVkaW9UcmFja3MsIG9wdGlvbnMudGV4dFRyYWNrc119XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAvPlxuICAgIDwvT3ZlcmxheVBhbmVsPlxuICApXG59XG5cbmNvbnN0IFByZW1pdW1QbGF5ZXIgPSAoe1xuICBzb3VyY2UsXG4gIHN0YXJ0VGltZSxcbiAgcXVhbGl0eSA9IHt9LFxuICB0aXRsZSxcbiAgbWV0YWRhdGEsXG4gIGNoYW5uZWxUaXRsZSxcbiAgY2hhcHRlcnMsXG4gIHBsYXliYWNrU3RhdGU6IGFwcFBsYXliYWNrU3RhdGUsXG4gIGN1cnJlbnRUaW1lOiBhcHBDdXJyZW50VGltZSxcbiAgcGxheWJhY2tSYXRlOiBhcHBQbGF5YmFja1JhdGUsXG4gIGxvb3AsXG4gIHZvbHVtZTogYXBwVm9sdW1lLFxuICB0aHVtYm5haWxzVXJsLFxuICBjb250cm9scyA9IHthdXRvaGlkZTogMzAwMH0sXG4gIG1hcmtzID0gW10sXG4gIC8vIFRPRE8gc2VjdGlvbklkXG4gIGludGwsXG4gIHNldHRpbmdzOiBhcHBTZXR0aW5ncyA9IGRlZmF1bHRTZXR0aW5ncyxcbiAgYmxvY2tpbmcsXG4gIHBsdWdpbnMgPSBbXSxcbiAgbW9kdWxlc0NvbmZpZyxcblxuICB1aVR5cGUgPSBpc0Rlc2t0b3AoKSA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnLFxuICBzdHlsZSxcbiAgY2hpbGRyZW4sXG4gIHVpTW9kZSA9ICdzdGFuZGFsb25lJyxcbiAgY2FzdDogY2FzdE9wdGlvbnMgPSAnY29tcGF0aWJsZScsXG4gIHNsb3RzLFxuICBzbG90UHJvcHMgPSB7fSxcbiAgb25FcnJvcixcbiAgb25QbGF5YmFja1N0YXRlQ2hhbmdlLFxuICBvbkJhY2ssXG4gIG9uQ2FzdCxcbiAgb25DaGFuZ2VOZXh0LFxuICBvbkNoYW5nZVByZXZpb3VzLFxuICBvbk9wZW5TZXR0aW5ncyxcbiAgb25DaGFuZ2VTZXR0aW5ncyxcbiAgb25QbGF5ZXJMb2FkZWQsXG4gIG9uQmxvY2tlZEF1dG9wbGF5LFxuICBvblBsYXlsb2dGaXJlZCxcbiAgLi4udmlkZW9Qcm9wc1xufSkgPT4ge1xuICBjb25zdCBjb21wb25lbnRzID0ge1xuICAgIFZvbHVtZUNvbnRyb2wsXG4gICAgQ2FzdFVpLFxuICAgIERpc3BsYXlUaW1lLFxuICAgIExpdmVCdXR0b24sXG4gICAgU2Vla2JhcixcbiAgICBTZXR0aW5ncyxcbiAgICAuLi5zbG90cyxcbiAgfVxuICBjb25zdCB2aWRlb1JlZiA9IHVzZVJlZigpXG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZigpXG4gIGNvbnN0IHBsYXllclJlZiA9IHVzZVJlZigpXG4gIGNvbnN0IGFkQ29udGFpbmVyUmVmID0gdXNlUmVmKClcbiAgY29uc3QgcmVmcyA9IHVzZVJlZih7fSlcbiAgLy8gVE9ETyBtb3ZlIFJXRCByZWxhdGVkIHRvIExheW91dFxuICBjb25zdCB7XG4gICAgY3VycmVudEJyZWFrcG9pbnQ6IHNpemUsXG4gICAgd2lkdGgsXG4gICAgb2JzZXJ2ZSxcbiAgfSA9IHVzZURpbWVuc2lvbnMoe1xuICAgIHBvbHlmaWxsOiBSZXNpemVPYnNlcnZlcixcbiAgICBicmVha3BvaW50czogc2l6ZXMsXG4gIH0pXG4gIGNvbnN0IFtpc1VzZXJBY3RpdmUsIHNldElzVXNlckFjdGl2ZV0gPSB1c2VTdGF0ZShcbiAgICB1aU1vZGUgPT09ICdzdGFuZGFsb25lJyA/IHRydWUgOiB2aWRlb1Byb3BzLmF1dG9wbGF5XG4gIClcbiAgY29uc3QgW3VzZXJGb2N1cywgc2V0VXNlckZvY3VzXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbdGFyZ2V0U3RhdGUsIHNldFRhcmdldFN0YXRlXSA9IHVzZVN0YXRlKCgpID0+ICh7XG4gICAgcGxheWJhY2tTdGF0ZTpcbiAgICAgIGFwcFBsYXliYWNrU3RhdGUgfHwgKHZpZGVvUHJvcHMuYXV0b3BsYXkgPyAncGxheWluZycgOiAncGF1c2VkJyksXG4gICAgY3VycmVudFRpbWU6IHN0YXJ0VGltZSxcbiAgfSkpXG4gIGNvbnN0IFtwbGF5YmFja1RpbWUsIHNldFBsYXliYWNrVGltZV0gPSB1c2VTdGF0ZSh7XG4gICAgY3VycmVudFRpbWU6IDAsXG4gICAgYnVmZmVyVGltZTogMCxcbiAgfSlcbiAgY29uc3QgdG9nZ2xlUGxheSA9IChvdmVycmlkZVN0YXRlLCB7dHJpZ2dlcmVkQnl9ID0ge30pID0+IHtcbiAgICBpZiAodGFyZ2V0U3RhdGUucGxheWJhY2tTdGF0ZSAhPT0gb3ZlcnJpZGVTdGF0ZSkge1xuICAgICAgc2V0VGFyZ2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHBsYXliYWNrU3RhdGU6IG92ZXJyaWRlU3RhdGUgfHwgZmxpcFN0YXRlKHN0YXRlLnBsYXliYWNrU3RhdGUpLFxuICAgICAgICBhbmltYXRpb246XG4gICAgICAgICAgdHJpZ2dlcmVkQnkgPT09ICd1c2VyLWFjdGlvbicgJiYgZmxpcFN0YXRlKHN0YXRlLnBsYXliYWNrU3RhdGUpLFxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXBwUGxheWJhY2tTdGF0ZSkge1xuICAgICAgdG9nZ2xlUGxheShhcHBQbGF5YmFja1N0YXRlKVxuICAgIH1cbiAgfSwgW2FwcFBsYXliYWNrU3RhdGVdKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh1aVR5cGUgPT09ICdtb2JpbGUnKSB7XG4gICAgICBvbihkb2N1bWVudCwgJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB0b2dnbGVQbGF5KCdwYXVzZWQnKSlcbiAgICB9XG4gIH0sIFt1aVR5cGUsIHRhcmdldFN0YXRlLnBsYXliYWNrU3RhdGVdKVxuICBjb25zdCB1cGRhdGVQbGF5YmFja1RpbWUgPSBldmVudCA9PlxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShcbiAgICAgICgpID0+XG4gICAgICAgIChldmVudD8udHlwZSAhPT0gJ3RpbWV1cGRhdGUnIHx8IGlzQnVmZmVyZWQodmlkZW9SZWYuY3VycmVudCkpICYmXG4gICAgICAgIHNldFBsYXliYWNrVGltZShzdGF0ZSA9PiAoe1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIC4uLmdldE1lZGlhVGltZSh2aWRlb1JlZi5jdXJyZW50LCB7XG4gICAgICAgICAgICBwbGF5ZXI6IHBsYXllclJlZi5jdXJyZW50LFxuICAgICAgICAgICAgcGx1Z2lucyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4oZXZlbnQ/LnR5cGUgPT09ICdkdXJhdGlvbmNoYW5nZScgJiYge1xuICAgICAgICAgICAgY3VycmVudFRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSlcbiAgICApXG4gIGNvbnN0IHNldFRhcmdldFRpbWUgPSB0aW1lID0+IHtcbiAgICBjb25zdCB0cmltbWVkID0gTWF0aC5taW4oXG4gICAgICB0aW1lLFxuICAgICAgdmlkZW9SZWYuY3VycmVudD8uaW5pdGlhbER1cmF0aW9uIHx8IEluZmluaXR5XG4gICAgKVxuICAgIHNldFRhcmdldFN0YXRlKHN0YXRlID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIC8vIHNlZWsgdG8gMCByZXBlYXRlZGx5IGVkZ2UgY2FzZVxuICAgICAgY3VycmVudFRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lICE9PSB0cmltbWVkID8gdHJpbW1lZCA6IHRyaW1tZWQgKyAwLjAxLFxuICAgIH0pKVxuICAgIHVwZGF0ZVBsYXliYWNrVGltZSgpXG4gIH1cbiAgY29uc3QgW3BsYXliYWNrU3RhdGUsIHNldFBsYXliYWNrU3RhdGVdID0gdXNlU3RhdGUoJ2luaXQnKVxuICBjb25zdCBbY2FzdFN0YXRlLCBzZXRDYXN0U3RhdGVdID0gdXNlU3RhdGUoJycpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBhcHBDdXJyZW50VGltZSA9PT0gJ251bWJlcicpIHNldFRhcmdldFRpbWUoYXBwQ3VycmVudFRpbWUgfHwgMClcbiAgICBpZiAodHlwZW9mIGFwcEN1cnJlbnRUaW1lID09PSAnb2JqZWN0JylcbiAgICAgIHNldFRhcmdldFRpbWUoYXBwQ3VycmVudFRpbWU/LnZhbHVlIHx8IDApXG4gIH0sIFthcHBDdXJyZW50VGltZV0pXG4gIGNvbnN0IFtlcnJvckRhdGEsIHNldEVycm9yRGF0YV0gPSB1c2VTdGF0ZSgpXG4gIGNvbnN0IGVycm9ySGFuZGxlciA9IHJlYWN0RXZlbnQgPT4ge1xuICAgIG9uRXJyb3I/LihyZWFjdEV2ZW50Lm5hdGl2ZUV2ZW50KVxuICAgIGhhbmRsZUVycm9yKHJlYWN0RXZlbnQsIHtcbiAgICAgIG1lZGlhOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgICAgZGlzcGxheUVycm9yOiBkYXRhID0+IHtcbiAgICAgICAgc2V0UGxheWJhY2tTdGF0ZSgnZXJyb3InKVxuICAgICAgICBzZXRFcnJvckRhdGEoY3VycmVudCA9PiAoY3VycmVudD8uY29kZSA/IGN1cnJlbnQgOiBkYXRhKSlcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuICBjb25zdCBpc0xpdmUgPSBwbGF5YmFja1RpbWUuc3RyZWFtVHlwZSA9PT0gJ2xpdmUnXG4gIGNvbnN0IFtzZXR0aW5ncywgc2V0U2V0dGluZ3NdID0gdXNlU3RhdGUoKCkgPT4gKHtcbiAgICBzZWN0aW9uczogW10sXG4gICAgdmFsdWVzOiB7c3BlZWQ6IDF9LFxuICB9KSlcbiAgY29uc3QgZmV0Y2hTZXR0aW5ncyA9ICgpID0+IHtcbiAgICBpZiAoIXBsYXllclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc3BlZWRJdGVtcyA9IGFwcFNldHRpbmdzLnNwZWVkSXRlbXMgfHwgKGlzTGl2ZSA/IFtdIDogdW5kZWZpbmVkKVxuICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4ge1xuICAgICAgY29uc3Qge3ZhbHVlcywgc2VjdGlvbnN9ID0gZ2V0U2V0dGluZ3NEYXRhKHtcbiAgICAgICAgbWVkaWE6IHZpZGVvUmVmLmN1cnJlbnQsXG4gICAgICAgIHBsYXllcjogcGxheWVyUmVmLmN1cnJlbnQsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgcXVhbGl0eSxcbiAgICAgICAgc3BlZWRJdGVtcyxcbiAgICAgICAgbG9vcCxcbiAgICAgICAgcHJlZmVycmVkOiBjdXJyZW50LnByZWZlcnJlZCxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge3ByZWZlcnJlZDogY3VycmVudC5wcmVmZXJyZWQsIHZhbHVlcywgc2VjdGlvbnN9XG4gICAgfSlcbiAgfVxuICBjb25zdCBsYXN0U3RhdGUgPSB1c2VSZWYocGxheWJhY2tTdGF0ZSlcbiAgY29uc3QgaGFuZGxlUGxheWJhY2tTdGF0ZUNoYW5nZSA9IChldmVudCwgc3RhdGUpID0+IHtcbiAgICBpZiAobGFzdFN0YXRlLmN1cnJlbnQgPT09ICdlcnJvcicpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBvblBsYXliYWNrU3RhdGVDaGFuZ2U/LihldmVudCwgc3RhdGUpXG4gICAgLy8gcHJldmlvdXNseSBVSSBwbGF5YmFjayBzdGF0ZSB3YXMgc3luY2VkIG9ubHkgd2hlblxuICAgIC8vIGV4aXRpbmcgaU9TIHZpZGVvIG9ubHkgZnVsbHNjcmVlbih3ZWJraXRlbmRmdWxsc2NyZWVuKVxuICAgIGlmIChcbiAgICAgIC9wbGF5aW5nfHBhdXNlZC8udGVzdChzdGF0ZSkgJiZcbiAgICAgICEodWlUeXBlID09PSAnbW9iaWxlJyAmJiBibG9ja2luZykgJiZcbiAgICAgICFzaG91bGRQYXVzZSh7dXNlckZvY3VzLCB1aVR5cGV9KVxuICAgICkge1xuICAgICAgdG9nZ2xlUGxheShzdGF0ZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSAnZW5kZWQnKSB7XG4gICAgICB0b2dnbGVQbGF5KCdwYXVzZWQnKVxuICAgIH1cbiAgICBpZiAoc3RhdGUgPT09ICdsb2FkaW5nJyAmJiBsYXN0U3RhdGUuY3VycmVudCAhPT0gJ2luaXQnKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRvZ2dsZVBsYXkoJ3BsYXlpbmcnKSwgMSlcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIHNldElzVXNlckFjdGl2ZSh0cnVlKVxuICAgIH1cbiAgICBpZiAobGFzdFN0YXRlLmN1cnJlbnQgPT09ICdsb2FkaW5nJykge1xuICAgICAgZmV0Y2hTZXR0aW5ncygpXG4gICAgfVxuICAgIGxhc3RTdGF0ZS5jdXJyZW50ID0gc3RhdGVcbiAgICBzZXRQbGF5YmFja1N0YXRlKHN0YXRlKVxuICB9XG5cbiAgY29uc3QgY2hhbmdlU2V0dGluZ3MgPSAobmFtZSwgdmFsdWUsIHtrZWVwT3Blbn0gPSB7fSkgPT4ge1xuICAgIC8vIFRPRE8gY29uc2lkZXIgbWVyZ2UgaW50byB1c2VSZWR1Y2VyP1xuICAgIG9uQ2hhbmdlU2V0dGluZ3M/Lih7bmFtZSwgdmFsdWV9KVxuICAgIHNldFRhcmdldFRpbWUocGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lKVxuICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB2YWx1ZXM6IHsuLi5jdXJyZW50LnZhbHVlcywgW25hbWVdOiB2YWx1ZX0sXG4gICAgICBwcmVmZXJyZWQ6IHsuLi5jdXJyZW50LnByZWZlcnJlZCwgW25hbWVdOiB2YWx1ZX0sXG4gICAgfSkpXG4gICAgaWYgKCFrZWVwT3Blbikge1xuICAgICAgc2V0VXNlckZvY3VzKCcnKVxuICAgIH1cbiAgfVxuICBjb25zdCBvcGVuU2V0dGluZ3MgPSBldmVudCA9PiB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWUgPVxuICAgICAgdXNlckZvY3VzICE9PSAnc2V0dGluZ3MnICYmXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBvbk9wZW5TZXR0aW5ncz8uKGV2ZW50LCBzZXR0aW5ncylcbiAgICAgICAgLy8gSW4gaU9TIFNhZmFyaSwgd2UgbmVlZCB0byB1cGRhdGUgc2V0dGluZ3MgZGF0YVxuICAgICAgICBmZXRjaFNldHRpbmdzKClcbiAgICAgIH0pXG4gICAgc2V0VXNlckZvY3VzKGN1cnJlbnQgPT4gKGN1cnJlbnQgPT09ICdzZXR0aW5ncycgPyAnJyA6ICdzZXR0aW5ncycpKVxuICAgIHJldHVybiBhbmltYXRpb25GcmFtZVxuICB9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFwcFBsYXliYWNrUmF0ZSA+IDApIHtcbiAgICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4gKHtcbiAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgdmFsdWVzOiB7Li4uY3VycmVudC52YWx1ZXMsIHNwZWVkOiBhcHBQbGF5YmFja1JhdGV9LFxuICAgICAgfSkpXG4gICAgfVxuICB9LCBbYXBwUGxheWJhY2tSYXRlXSlcblxuICBjb25zdCBxdWFsaXR5T3B0aW9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0UXVhbGl0eU9wdGlvbnMoc2V0dGluZ3MpLFxuICAgIFtzZXR0aW5ncy52YWx1ZXMucXVhbGl0eV1cbiAgKVxuICBjb25zdCB2aWV3TW9kZSA9IHVzZUxpbmtTdGF0ZSh1cGRhdGUgPT5cbiAgICBvblZpZXdNb2RlQ2hhbmdlKHZpZGVvUmVmLmN1cnJlbnQsIHVwZGF0ZSlcbiAgKVxuICBjb25zdCBzb3VyY2VPdmVycmlkZSA9IHVzZUxpbmtTdGF0ZShcbiAgICBhc3luYyB1cGRhdGUgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgc291cmNlICYmIChhd2FpdCBxdWFsaXR5LnJld3JpdGVNYW5pZmVzdD8uKHNvdXJjZSwgcXVhbGl0eU9wdGlvbnMpKVxuICAgICAgdXBkYXRlKHJlc3VsdCB8fCBzb3VyY2UpXG4gICAgfSxcbiAgICBbc291cmNlLCBxdWFsaXR5T3B0aW9uc11cbiAgKVxuICBjb25zdCB3YWl0aW5nID0gL2VtcHRpZWR8bG9hZGluZ3xidWZmZXJpbmcvLnRlc3QocGxheWJhY2tTdGF0ZSlcbiAgY29uc3QgYWN0aXZlUGxheWJhY2sgPVxuICAgIHBsYXliYWNrU3RhdGUgPT09ICdwbGF5aW5nJyB8fCBwbGF5YmFja1N0YXRlID09PSAnd2FpdGluZydcbiAgY29uc3Qge1xuICAgIG1vZGU6IGF1dG9IaWRlTW9kZSxcbiAgICBvbkNsaWNrLFxuICAgIG9uTW91c2VNb3ZlLFxuICB9ID0gdXNlQXV0b0hpZGUoe1xuICAgIHBpbm5lZDogIWNvbnRyb2xzLmF1dG9oaWRlIHx8IHdhaXRpbmcgfHwgIWFjdGl2ZVBsYXliYWNrIHx8IHVzZXJGb2N1cyxcbiAgICB0YXBUb0hpZGU6IHVpVHlwZSA9PT0gJ21vYmlsZScsXG4gICAgaGlkZVRpbWVNczogY29udHJvbHMuYXV0b2hpZGUsXG4gIH0pXG4gIGNvbnN0IG1vZGUgPVxuICAgIHVzZXJGb2N1cyA9PT0gJ3NlZWtiYXInXG4gICAgICA/ICdoaWRkZW4nXG4gICAgICA6IGNvbnRyb2xzLmF1dG9oaWRlXG4gICAgICA/IGF1dG9IaWRlTW9kZVxuICAgICAgOiBjb250cm9sc1xuICAgICAgPyAnc2hvd24nXG4gICAgICA6ICdoaWRkZW4nXG4gIGNvbnN0IGNvbnRyb2xzRGlzcGxheSA9XG4gICAgdXNlckZvY3VzID09PSAnc2Vla2JhcidcbiAgICAgID8gJ3NlZWtiYXItb25seSdcbiAgICAgIDogY29udHJvbHMgPT09ICd0aXRsZS1vbmx5JyB8fCBwbGF5YmFja1N0YXRlID09PSAnZW1wdGllZCdcbiAgICAgID8gJ2hpZGRlbidcbiAgICAgIDogbW9kZVxuICBjb25zdCBzaG91bGRIaWRlUGFuZWxzID1cbiAgICAoY29udHJvbHMgPT09ICduby1wYW5lbCcgfHwgY29udHJvbHNEaXNwbGF5ID09PSAnaGlkZGVuJykgJiYgdXNlckZvY3VzXG4gIGNvbnN0IGhhdmVQbGF5UGFuZWwgPVxuICAgICFibG9ja2luZyAmJlxuICAgIGhhdmVQb2ludGVyKCkgJiZcbiAgICB1aVR5cGUgPT09ICdkZXNrdG9wJyAmJlxuICAgICF3YWl0aW5nICYmXG4gICAgIS92b2x1bWV8JycvLnRlc3QodXNlckZvY3VzKSAmJlxuICAgICEvdGl0bGUtb25seXxuby1wYW5lbC8udGVzdChjb250cm9scykgJiZcbiAgICAoY29udHJvbHMuYXV0b2hpZGUgfHwgbW9kZSA9PT0gJ3Nob3duJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRIaWRlUGFuZWxzKSB7XG4gICAgICBzZXRVc2VyRm9jdXMoJycpXG4gICAgfVxuICB9LCBbc2hvdWxkSGlkZVBhbmVsc10pXG4gIGNvbnN0IHtzdWJzY3JpYmUsIG9uQ2hhbmdlLCB0b2dnbGVNdXRlfSA9IGxpbmtNZWRpYVZvbHVtZSgoKSA9PiAoe1xuICAgIHZpZGVvOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgIGdldFBsYXllcjogKCkgPT4gcGxheWVyUmVmLmN1cnJlbnQsXG4gIH0pKVxuICBjb25zdCBjaGFuZ2VQcmV2aW91cyA9IGV2ZW50ID0+IHtcbiAgICBvbkNoYW5nZVByZXZpb3VzKGV2ZW50KVxuICAgIHRvZ2dsZVBsYXkoJ3BhdXNlZCcpXG4gICAgdmlkZW9SZWYuY3VycmVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbG9hZHN0YXJ0JykpXG4gIH1cbiAgY29uc3QgY2hhbmdlTmV4dCA9IGV2ZW50ID0+IHtcbiAgICBvbkNoYW5nZU5leHQoZXZlbnQpXG4gICAgdG9nZ2xlUGxheSgncGF1c2VkJylcbiAgICB2aWRlb1JlZi5jdXJyZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdsb2Fkc3RhcnQnKSlcbiAgfVxuXG4gIHVzZUVmZmVjdChmZXRjaFNldHRpbmdzLCBbYXBwU2V0dGluZ3NdKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFRoZSBhZENvbnRhaW5lciBzaG91bGQgYmUgc2V0IGJlZm9yZSBgbG9hZGAgYmVjYXVzZSBJbWFEYWkubG9hZCBuZWVkcyBpdC5cbiAgICBwbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHBsdWdpbi5zZXRBZENvbnRhaW5lcj8uKGFkQ29udGFpbmVyUmVmLmN1cnJlbnQpKVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoXG4gICAgKCkgPT5cbiAgICAgIGRpc3BhdGNoQ2hhcHRlckV2ZW50cyh7XG4gICAgICAgIG1lZGlhOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgICAgICBjaGFwdGVycyxcbiAgICAgICAgZ2V0VGltZTogKCkgPT4gdmlkZW9SZWYuY3VycmVudC5jdXJyZW50VGltZSxcbiAgICAgIH0pLFxuICAgIFtjaGFwdGVyc11cbiAgKVxuXG4gIGNvbnN0IGlzRW5kID0gcGxheWJhY2tTdGF0ZSA9PT0gJ2VuZGVkJ1xuICBjb25zdCBjYW5TZWVrID0gIWlzRW5kICYmIHBsYXliYWNrVGltZS5kdXJhdGlvbiA+IDBcbiAgY29uc3QgZGVyaXZlZFBsYXliYWNrU3RhdGUgPVxuICAgICh1aVR5cGUgPT09ICdtb2JpbGUnICYmIGJsb2NraW5nKSB8fCBzaG91bGRQYXVzZSh7dXNlckZvY3VzLCB1aVR5cGV9KVxuICAgICAgPyAncGF1c2VkJ1xuICAgICAgOiB0YXJnZXRTdGF0ZS5wbGF5YmFja1N0YXRlXG4gIGNvbnN0IGFjdGl2ZVRodW1ibmFpbHNVcmwgPVxuICAgICghdXNlckZvY3VzIHx8IHVzZXJGb2N1cyA9PT0gJ3NlZWtiYXInKSAmJlxuICAgIChnZXRUaHVtYm5haWxzVXJsKHNvdXJjZSkgfHwgdGh1bWJuYWlsc1VybClcbiAgY29uc3QgY3NzVmFyaWFibGVzID0ge1xuICAgICctLXBsYXlpbmcnOiBwbGF5YmFja1N0YXRlID09PSAncGxheWluZycgPyAnMScgOiAnMCcsXG4gIH1cbiAgY29uc3Qgb25SZXdpbmQgPVxuICAgICghaXNMaXZlIHx8IHBsYXliYWNrVGltZS5jdXJyZW50VGltZSA8IDApICYmXG4gICAgIWlzRW5kICYmXG4gICAgKCgpID0+IHNldFRhcmdldFRpbWUocGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lIC0gMTAsICdyZXdpbmQnKSlcbiAgY29uc3Qgb25Gb3J3YXJkID1cbiAgICAoIWlzTGl2ZSB8fCBwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgPCAwKSAmJlxuICAgIGNhblNlZWsgJiZcbiAgICAoKCkgPT4gc2V0VGFyZ2V0VGltZShwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgKyAxMCwgJ2ZvcndhcmQnKSlcbiAgY29uc3Qgb25DbGlja0JsYW5rID1cbiAgICBoYXZlUGxheVBhbmVsICYmICgoKSA9PiB0b2dnbGVQbGF5KCcnLCB7dHJpZ2dlcmVkQnk6ICd1c2VyLWFjdGlvbid9KSlcblxuICBjb25zdCB1aUhhbmRsZXJzID0ge1xuICAgIG9uUGxheTogKCkgPT4ge1xuICAgICAgdG9nZ2xlUGxheSgnJywge3RyaWdnZXJlZEJ5OiAndXNlci1hY3Rpb24nfSlcbiAgICAgIHNldElzVXNlckFjdGl2ZSh0cnVlKVxuICAgIH0sXG4gICAgb25DbGlja0xpdmU6IGlzTGl2ZSAmJiAoKCkgPT4gc2V0VGFyZ2V0VGltZSgwLCAnc2Vla1RvTGl2ZScpKSxcbiAgICBvbkNsaWNrU2Vla2JhcjogKCkgPT4ge1xuICAgICAgcmVmcy5jdXJyZW50LmRlZmVyZWRTZWVrRm9jdXMgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiBzZXRVc2VyRm9jdXMoJ3NlZWtiYXInKSxcbiAgICAgICAgNjZcbiAgICAgIClcbiAgICB9LFxuICAgIG9uU2VlazogdGltZSA9PiB7XG4gICAgICBzZXRUYXJnZXRUaW1lKHRpbWUsICdzZWVrJylcbiAgICAgIGNsZWFyVGltZW91dChyZWZzLmN1cnJlbnQuZGVmZXJlZFNlZWtGb2N1cylcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0VXNlckZvY3VzKCcnKSwgNjYpXG4gICAgfSxcbiAgICBvbkNoYW5nZVNldHRpbmdzOiAoe25hbWUsIHZhbHVlLCBrZWVwT3Blbn0pID0+XG4gICAgICBjaGFuZ2VTZXR0aW5ncyhuYW1lLCB2YWx1ZSwge2tlZXBPcGVufSksXG4gICAgb25DbG9zZVNldHRpbmdzOiBldmVudCA9PiB7XG4gICAgICBzZXRVc2VyRm9jdXMoJycpXG4gICAgICBzbG90UHJvcHM/LnNldHRpbmdzPy5vbkNsb3NlPy4oZXZlbnQpXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IHVpRWxlbWVudHMgPSB7XG4gICAgbGl2ZUJ1dHRvbjogdWlIYW5kbGVycy5vbkNsaWNrTGl2ZSAmJiAoXG4gICAgICA8Y29tcG9uZW50cy5MaXZlQnV0dG9uXG4gICAgICAgIHVzaW5nU3RhcnRPdmVyPXtwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgPCAwfVxuICAgICAgICBvbkNsaWNrPXt1aUhhbmRsZXJzLm9uQ2xpY2tMaXZlfVxuICAgICAgLz5cbiAgICApLFxuICAgIGNvbnRyb2xCdXR0b25zOiB7XG4gICAgICBwbGF5QnV0dG9uOiAoXG4gICAgICAgIDxQbGF5QnV0dG9uXG4gICAgICAgICAgcGxheWJhY2tTdGF0ZT17ZGVyaXZlZFBsYXliYWNrU3RhdGV9XG4gICAgICAgICAgZW5kZWQ9e2lzRW5kfVxuICAgICAgICAgIGhpZGRlbj17XG4gICAgICAgICAgICB1aVR5cGUgPT09ICdtb2JpbGUnICYmICh3YWl0aW5nIHx8IC9sb2FkaW5nLy50ZXN0KHBsYXliYWNrU3RhdGUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXJpYW50PXshaXNVc2VyQWN0aXZlICYmICdmaXJzdHBsYXknfVxuICAgICAgICAgIG9uQ2xpY2s9e3VpSGFuZGxlcnMub25QbGF5fVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICAgIHJld2luZEJ1dHRvbjogb25SZXdpbmQgJiYgKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc3RhcnRJY29uPVwicmV3aW5kMTBcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5SRVdJTkRcIlxuICAgICAgICAgIGRpc2FibGVkPXtpc0VuZH1cbiAgICAgICAgICBvbkNsaWNrPXtvblJld2luZH1cbiAgICAgICAgLz5cbiAgICAgICksXG4gICAgICBmb3J3YXJkQnV0dG9uOiBvbkZvcndhcmQgJiYgKFxuICAgICAgICA8Rm9yd2FyZEJ1dHRvblxuICAgICAgICAgIHN0YXJ0SWNvbj1cImZvcndhcmQxMFwiXG4gICAgICAgICAgdGl0bGU9XCJLS1MuUExBWUVSLkZPUldBUkRcIlxuICAgICAgICAgIGRpc2FibGVkPXshY2FuU2Vla31cbiAgICAgICAgICBvbkNsaWNrPXtvbkZvcndhcmR9XG4gICAgICAgIC8+XG4gICAgICApLFxuICAgICAgbmV4dEVwaXNvZGVCdXR0b246IChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHN0YXJ0SWNvbj1cIm5leHRcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5ORVhUXCJcbiAgICAgICAgICBkaXNhYmxlZD17IW9uQ2hhbmdlTmV4dH1cbiAgICAgICAgICBvbkNsaWNrPXtjaGFuZ2VOZXh0fVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICAgIHByZXZpb3VzRXBpc29kZUJ1dHRvbjogKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc3RhcnRJY29uPVwicHJldmlvdXNcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5QUkVWSU9VU1wiXG4gICAgICAgICAgZGlzYWJsZWQ9eyFvbkNoYW5nZVByZXZpb3VzfVxuICAgICAgICAgIG9uQ2xpY2s9e2NoYW5nZVByZXZpb3VzfVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICB9LFxuICAgIHNlZWtiYXI6IChcbiAgICAgIDxjb21wb25lbnRzLlNlZWtiYXJcbiAgICAgICAgc3R5bGU9ey92b2x1bWUvLnRlc3QodXNlckZvY3VzKSAmJiB7b3BhY2l0eTogJzAnfX1cbiAgICAgICAgc3RhcnRUaW1lPXtwbGF5YmFja1RpbWUuc3RhcnRUaW1lfVxuICAgICAgICBjdXJyZW50VGltZT17cGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lfVxuICAgICAgICBidWZmZXJUaW1lPXtwbGF5YmFja1RpbWUuYnVmZmVyVGltZX1cbiAgICAgICAgZHVyYXRpb249e3BsYXliYWNrVGltZS5kdXJhdGlvbn1cbiAgICAgICAgY2hhcHRlcnM9e2NoYXB0ZXJzfVxuICAgICAgICBvbkNoYW5nZT17dWlIYW5kbGVycy5vbkNsaWNrU2Vla2Jhcn1cbiAgICAgICAgb25DaGFuZ2VDb21taXR0ZWQ9e3VpSGFuZGxlcnMub25TZWVrfVxuICAgICAgICBtYXJrcz17bWFya3N9XG4gICAgICAgIHBsdWdpbnM9e3BsdWdpbnN9XG4gICAgICAgIHsuLi5zbG90UHJvcHMuc2Vla2Jhcn1cbiAgICAgID5cbiAgICAgICAge2FjdGl2ZVRodW1ibmFpbHNVcmwgJiYgKFxuICAgICAgICAgIDxTZWVrUHJldmlld1xuICAgICAgICAgICAgdGh1bWJuYWlsc1VybD17YWN0aXZlVGh1bWJuYWlsc1VybH1cbiAgICAgICAgICAgIGR1cmF0aW9uPXtwbGF5YmFja1RpbWUuZHVyYXRpb259XG4gICAgICAgICAgICBjaGFwdGVycz17Y2hhcHRlcnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvY29tcG9uZW50cy5TZWVrYmFyPlxuICAgICksXG4gICAgZGlzcGxheVRpbWU6IDxjb21wb25lbnRzLkRpc3BsYXlUaW1lIHsuLi5wbGF5YmFja1RpbWV9IC8+LFxuICAgIGZ1bGxzY3JlZW5CdXR0b246IChcbiAgICAgIDxGdWxsc2NyZWVuQnV0dG9uXG4gICAgICAgIHZpZXdNb2RlPXt2aWV3TW9kZX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlRnVsbHNjcmVlbihjb250YWluZXJSZWYuY3VycmVudCl9XG4gICAgICAvPlxuICAgICksXG4gICAgdm9sdW1lQ29udHJvbDogd2lkdGggPj0gc2l6ZXNbJ3NtYWxsLWVtYmVkJ10gJiYgKFxuICAgICAgPGNvbXBvbmVudHMuVm9sdW1lQ29udHJvbFxuICAgICAgICB7Li4ue3N1YnNjcmliZSwgb25DaGFuZ2UsIHRvZ2dsZU11dGV9fVxuICAgICAgICBvbk1vdXNlT3Zlcj17KCkgPT4gc2V0VXNlckZvY3VzKCd2b2x1bWUnKX1cbiAgICAgICAgb25Nb3VzZU91dD17KCkgPT4gc2V0VXNlckZvY3VzKCcnKX1cbiAgICAgICAgey4uLnNsb3RQcm9wcz8udm9sdW1lQ29udHJvbH1cbiAgICAgIC8+XG4gICAgKSxcbiAgICBiYWNrSXRlbXM6IChcbiAgICAgIDxQbGF5UGFuZWwgYW5pbWF0aW9uPXt0YXJnZXRTdGF0ZS5hbmltYXRpb259IG9uQ2xpY2s9e29uQ2xpY2tCbGFua30gLz5cbiAgICApLFxuICB9XG4gIGNvbnN0IGNvbXBhdGliaWxpdHlDYXN0UHJvcHMgPSBjYXN0T3B0aW9ucyA9PT0gJ2NvbXBhdGlibGUnICYmIHtcbiAgICBzb3VyY2UsXG4gICAgdmFsdWVzOiB7dGl0bGUsIC4uLnNldHRpbmdzLnZhbHVlcywgLi4uaW50bCwgbW9kdWxlc0NvbmZpZ30sXG4gICAgb25Mb2FkOiBvbkNhc3QsXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjYXN0T3B0aW9ucyAmJiBjYXN0T3B0aW9ucyAhPT0gJ2NvbXBhdGlibGUnKSB7XG4gICAgICByZXR1cm4gbGlua0Nhc3Qoe3NvdXJjZSwgLi4uY2FzdE9wdGlvbnN9KVxuICAgIH0gLy8gVE9ETyBwbGF5bGlzdCwgYXVkaW8gLyBzdWJ0aXRsZSBzZXR0aW5nXG4gIH0sIFtzb3VyY2UsIGNhc3RPcHRpb25zLmNvbnRlbnRJZCwgY2FzdE9wdGlvbnMuY3VzdG9tRGF0YV0pXG5cbiAgcmV0dXJuIChcbiAgICA8SW50bFByb3ZpZGVyIHsuLi5pbnRsfT5cbiAgICAgIDxMYXlvdXRcbiAgICAgICAgc3R5bGU9e3suLi5zdHlsZSwgY3NzVmFyaWFibGVzfX1cbiAgICAgICAgdHlwZT17dWlUeXBlfVxuICAgICAgICBkaXNwbGF5PXttb2RlfVxuICAgICAgICBjb250cm9sc0Rpc3BsYXk9e2NvbnRyb2xzRGlzcGxheX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgdmlkZW89e1xuICAgICAgICAgIDxWaWRlb1xuICAgICAgICAgICAgey4uLnZpZGVvUHJvcHN9XG4gICAgICAgICAgICB2aWRlb1JlZj17bXVsdGlSZWYodmlkZW9SZWYsIHZpZGVvUHJvcHMudmlkZW9SZWYpfVxuICAgICAgICAgICAgc291cmNlPXtcbiAgICAgICAgICAgICAgY2FzdFN0YXRlICE9PSBDYXN0U3RhdGUuQ09OTkVDVEVEICYmXG4gICAgICAgICAgICAgIHBsYXliYWNrU3RhdGUgIT09ICdlcnJvcicgJiZcbiAgICAgICAgICAgICAgc291cmNlT3ZlcnJpZGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBsYXliYWNrU3RhdGU9e2Rlcml2ZWRQbGF5YmFja1N0YXRlfVxuICAgICAgICAgICAgY3VycmVudFRpbWU9e3RhcmdldFN0YXRlLmN1cnJlbnRUaW1lfVxuICAgICAgICAgICAgey4uLihhcHBWb2x1bWUgPj0gMCAmJiB7dm9sdW1lOiBhcHBWb2x1bWUsIG11dGVkOiBhcHBWb2x1bWUgPD0gMH0pfVxuICAgICAgICAgICAgcGxheWJhY2tSYXRlPXtzZXR0aW5ncy52YWx1ZXMuc3BlZWR9XG4gICAgICAgICAgICB2aWRlb1Jlc29sdXRpb249e3F1YWxpdHlPcHRpb25zfVxuICAgICAgICAgICAgYXVkaW89e3NldHRpbmdzLnZhbHVlcy5hdWRpb31cbiAgICAgICAgICAgIHRleHRUcmFjaz17c2V0dGluZ3MudmFsdWVzLnN1YnRpdGxlc31cbiAgICAgICAgICAgIGxvb3A9e3NldHRpbmdzLnZhbHVlcy5sb29wfVxuICAgICAgICAgICAgcGx1Z2lucz17cGx1Z2luc31cbiAgICAgICAgICAgIG1vZHVsZXNDb25maWc9e21vZHVsZXNDb25maWd9XG4gICAgICAgICAgICBvblBsYXlsb2dGaXJlZD17b25QbGF5bG9nRmlyZWR9XG4gICAgICAgICAgICBvbkVycm9yPXtlcnJvckhhbmRsZXJ9XG4gICAgICAgICAgICBvblBsYXliYWNrU3RhdGVDaGFuZ2U9e2hhbmRsZVBsYXliYWNrU3RhdGVDaGFuZ2V9XG4gICAgICAgICAgICBvbkJsb2NrZWRBdXRvcGxheT17ZXJyb3IgPT4gb25CbG9ja2VkQXV0b3BsYXk/LihlcnJvcil9XG4gICAgICAgICAgICBvbkNhblBsYXk9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlUGxheWJhY2tUaW1lKGV2ZW50KVxuICAgICAgICAgICAgICB2aWRlb1Byb3BzLm9uQ2FuUGxheT8uKGV2ZW50KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uVGltZVVwZGF0ZT17dXBkYXRlUGxheWJhY2tUaW1lfVxuICAgICAgICAgICAgb25EdXJhdGlvbkNoYW5nZT17dXBkYXRlUGxheWJhY2tUaW1lfVxuICAgICAgICAgICAgb25QbGF5ZXJMb2FkZWQ9e3BsYXllciA9PiB7XG4gICAgICAgICAgICAgIHBsYXllclJlZi5jdXJyZW50ID0gcGxheWVyXG4gICAgICAgICAgICAgIG9uUGxheWVyTG9hZGVkPy4ocGxheWVyKVxuICAgICAgICAgICAgICBzeW5jVm9sdW1lKHZpZGVvUmVmLmN1cnJlbnQsIHZpZGVvUHJvcHMubXV0ZWQgPyAwIDogYXBwVm9sdW1lKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lclJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQgPSBlbGVtZW50XG4gICAgICAgICAgb2JzZXJ2ZShlbGVtZW50KVxuICAgICAgICB9fVxuICAgICAgICBiYWNrUmVmPXthZENvbnRhaW5lclJlZn1cbiAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICBjaGFubmVsVGl0bGU9e2NoYW5uZWxUaXRsZX1cbiAgICAgICAgYmFja0J1dHRvbj17b25CYWNrICYmIDxCdXR0b24gc3RhcnRJY29uPVwiYmFja1wiIG9uQ2xpY2s9e29uQmFja30gLz59XG4gICAgICAgIHsuLi4oaXNVc2VyQWN0aXZlICYmIHVpRWxlbWVudHMpfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbk1vdXNlTW92ZT17b25Nb3VzZU1vdmV9XG4gICAgICA+XG4gICAgICAgIDxMb2FkaW5nU3Bpbm5lciBhY3RpdmU9e3dhaXRpbmd9IC8+XG4gICAgICAgIHtlcnJvckRhdGEgJiYgPEVycm9yIGVycm9yPXtlcnJvckRhdGF9IG9uQmFjaz17b25CYWNrfSAvPn1cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICB7LyogVE9ETyBzeW5jIENhc3QgbGFzdCBwbGF5ZWQgdGltZSBiYWNrICovfVxuICAgICAgICB7aXNVc2VyQWN0aXZlICYmIChcbiAgICAgICAgICA8Y29tcG9uZW50cy5DYXN0VWlcbiAgICAgICAgICAgIG9uQmFjaz17b25CYWNrfVxuICAgICAgICAgICAgb25TdGF0ZUNoYW5nZT17c2V0Q2FzdFN0YXRlfVxuICAgICAgICAgICAgb25Mb2FkPXtvbkNhc3R9XG4gICAgICAgICAgICB7Li4uY29tcGF0aWJpbGl0eUNhc3RQcm9wc31cbiAgICAgICAgICAgIHsuLi5zbG90UHJvcHMuY2FzdFVpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtpc1VzZXJBY3RpdmUgJiYgKCAvLyBUT0RPOiBEZXNpZ24gPEV4dGVuc3Rpb24gLz4gZmxhZ1xuICAgICAgICAgIDxjb21wb25lbnRzLlNldHRpbmdzXG4gICAgICAgICAgICB0eXBlPXt1aVR5cGV9XG4gICAgICAgICAgICBzZWN0aW9ucz17c2V0dGluZ3Muc2VjdGlvbnN9XG4gICAgICAgICAgICAvLyBUT0RPIGhhc0JvdHRvbVBhbmVsIGJvdHRvbTogOGVtXG4gICAgICAgICAgICBvcGVuPXt1c2VyRm9jdXMgPT09ICdzZXR0aW5ncyd9XG4gICAgICAgICAgICB2YWx1ZXM9e3NldHRpbmdzLnZhbHVlc31cbiAgICAgICAgICAgIG9uT3Blbj17b3BlblNldHRpbmdzfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3VpSGFuZGxlcnMub25DaGFuZ2VTZXR0aW5nc31cbiAgICAgICAgICAgIHsuLi5zbG90UHJvcHM/LnNldHRpbmdzfVxuICAgICAgICAgICAgb25DbG9zZT17dWlIYW5kbGVycy5vbkNsb3NlU2V0dGluZ3N9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPExhbmd1YWdlU2V0dGluZ3NcbiAgICAgICAgICB1aVR5cGU9e3VpVHlwZX1cbiAgICAgICAgICBnZXRQbGF5ZXI9eygpID0+IHBsYXllclJlZi5jdXJyZW50fVxuICAgICAgICAgIG9uQ2hhbmdlPXsoX2V2ZW50LCBpdGVtKSA9PiBjaGFuZ2VTZXR0aW5ncyhpdGVtLnR5cGUsIGl0ZW0udmFsdWUpfVxuICAgICAgICAgIHsuLi5zbG90UHJvcHMubGFuZ3VhZ2VTZXR0aW5nc31cbiAgICAgICAgLz5cbiAgICAgICAgPEJhY2tkcm9wIG9wZW49eyFwbGF5YmFja1N0YXRlIHx8IHBsYXliYWNrU3RhdGUgPT09ICdsb2FkaW5nJ30+XG4gICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgIDwvQmFja2Ryb3A+XG4gICAgICA8L0xheW91dD5cbiAgICA8L0ludGxQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcmVtaXVtUGxheWVyXG4iXX0= */"),
8667
+ desktop: /*#__PURE__*/css$1(LanguageMenu.styles, LanguageMenu.desktopStyles, process.env.NODE_ENV === "production" ? "" : ";label:desktop;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlByZW1pdW1QbGF5ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0VXIiwiZmlsZSI6IlByZW1pdW1QbGF5ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtjc3N9IGZyb20gJ0BlbW90aW9uL2NzcydcbmltcG9ydCB1c2VEaW1lbnNpb25zIGZyb20gJ3JlYWN0LWNvb2wtZGltZW5zaW9ucydcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJ9IGZyb20gJ0BqdWdnbGUvcmVzaXplLW9ic2VydmVyJ1xuXG5pbXBvcnQge2hhbmRsZUVycm9yfSBmcm9tICdwbGF5ZXJDb3JlL2Vycm9ycydcbmltcG9ydCB7b259IGZyb20gJ3V0aWwvZXZlbnRzJ1xuaW1wb3J0IHtoYXZlUG9pbnRlciwgaXNEZXNrdG9wfSBmcm9tICd1dGlsL2Vudmlyb25tZW50J1xuaW1wb3J0IG11bHRpUmVmIGZyb20gJ3V0aWwvbXVsdGlSZWYnXG5pbXBvcnQge29uVmlld01vZGVDaGFuZ2UsIHRvZ2dsZUZ1bGxzY3JlZW59IGZyb20gJ3V0aWwvdmlld01vZGVzJ1xuaW1wb3J0IHt1c2VBdXRvSGlkZX0gZnJvbSAnaG9va3MnXG5pbXBvcnQge0ludGxQcm92aWRlcn0gZnJvbSAnY29udGV4dC9JMThuJ1xuaW1wb3J0IHtnZXRNZWRpYVRpbWUsIGlzQnVmZmVyZWR9IGZyb20gJ3BsYXllckNvcmUvbWVkaWFCaW5kaW5ncydcbmltcG9ydCBFcnJvciBmcm9tICdwbGF5ZXJVaS9FcnJvcidcbmltcG9ydCBMYXlvdXQgZnJvbSAncGxheWVyVWkvRGVmYXVsdExheW91dCdcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgTGl2ZUJ1dHRvbixcbiAgRnVsbHNjcmVlbkJ1dHRvbixcbiAgUGxheUJ1dHRvbixcbiAgRm9yd2FyZEJ1dHRvbixcbn0gZnJvbSAncGxheWVyVWkvYnV0dG9ucydcbmltcG9ydCBTZWVrYmFyIGZyb20gJ3BsYXllclVpL1NlZWtiYXInXG5pbXBvcnQgRGlzcGxheVRpbWUgZnJvbSAncGxheWVyVWkvRGlzcGxheVRpbWUnXG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAncGxheWVyVWkvTG9hZGluZ1NwaW5uZXInXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAncGxheWVyVWkvQmFja2Ryb3AnXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSAncGxheWVyVWkvU2V0dGluZ3MnXG5pbXBvcnQgT3ZlcmxheVBhbmVsIGZyb20gJ3BsYXllclVpL092ZXJsYXlQYW5lbCdcbmltcG9ydCBMYW5ndWFnZU1lbnUgZnJvbSAncGxheWVyVWkvTGFuZ3VhZ2VNZW51J1xuaW1wb3J0IFBsYXlQYW5lbCBmcm9tICdwbGF5ZXJVaS9QbGF5UGFuZSdcbmltcG9ydCBWb2x1bWVDb250cm9sIGZyb20gJ2NvbXBvbmVudC9Wb2x1bWVDb250cm9sJ1xuaW1wb3J0IENhc3RVaSBmcm9tICdjYXN0L0Nhc3RVaSdcbmltcG9ydCB7bGlua0Nhc3R9IGZyb20gJ2Nhc3QvZnJhbWV3b3JrJ1xuaW1wb3J0IHtDYXN0U3RhdGV9IGZyb20gJ0VudW0nXG5pbXBvcnQge2Rpc3BhdGNoQ2hhcHRlckV2ZW50c30gZnJvbSAnLi90aW1lbGluZSdcbmltcG9ydCBWaWRlbyBmcm9tICcuLi9WaWRlbydcbmltcG9ydCB7Z2V0TGFuZ3VhZ2VPcHRpb25zLCBnZXRRdWFsaXR5T3B0aW9ucywgZ2V0U2V0dGluZ3NEYXRhfSBmcm9tICcuL3NldHRpbmdzJ1xuaW1wb3J0IHtsaW5rTWVkaWFWb2x1bWUsIHN5bmNWb2x1bWV9IGZyb20gJy4vdm9sdW1lJ1xuaW1wb3J0IFNlZWtQcmV2aWV3IGZyb20gJy4vU2Vla1ByZXZpZXcnXG5cbmNvbnN0IHNpemVzID0ge1xuICAnc21hbGwtZW1iZWQnOiAyMDAsXG4gIGVtYmVkOiA0MDAsXG4gICd0YWJsZXQtcG9ydHJhaXQnOiA2MDAsXG4gICd0YWJsZXQtbGFuZHNjYXBlJzogOTAwLFxuICBkZXNrdG9wOiAxMjAwLFxufVxuXG5jb25zdCB1c2VMaW5rU3RhdGUgPSAocmVxdWVzdCwgZGVwZW5kZW5jaWVzID0gW10pID0+IHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZSgpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVxdWVzdChzZXRTdGF0ZSlcbiAgfSwgZGVwZW5kZW5jaWVzKVxuICByZXR1cm4gc3RhdGVcbn1cblxuY29uc3QgZmxpcFN0YXRlID0gc3RhdGUgPT4gKHN0YXRlID09PSAncGxheWluZycgPyAncGF1c2VkJyA6ICdwbGF5aW5nJylcblxuLy8gRklYTUU6IHRvbyBmZXcgbGluZXMgdG8gc3BsaXQgYSBmaWxlLCBsb29raW5nIGEgYmV0dGVyIHBsYWNlXG5jb25zdCBnZXRUaHVtYm5haWxzVXJsID0gc291cmNlID0+XG4gIFtdLmNvbmNhdChzb3VyY2UpLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICd0aHVtYm5haWwnKT8uc3JjXG5cbmNvbnN0IGRlZmF1bHRTZXR0aW5ncyA9IHt9XG5cbmNvbnN0IHNob3VsZFBhdXNlID0gKHt1c2VyRm9jdXMsIHVpVHlwZX0pID0+XG4gICh1aVR5cGUgPT09ICdtb2JpbGUnICYmIC9zZXR0aW5nc3xjaGFwdGVyLWxpc3QvLnRlc3QodXNlckZvY3VzKSkgfHxcbiAgL2Jsb2NraW5nfHNlZWtiYXJ8c2hhcmUtaW5uZXIvLnRlc3QodXNlckZvY3VzKVxuXG4vLyBUT0RPIGV4dHJhY3QgdG8gc29tZXdoZXJlIGVsc2VcbmNvbnN0IG1lbnVDbGFzc2VzID0ge1xuICBkZWZhdWx0OiBjc3MoTGFuZ3VhZ2VNZW51LnN0eWxlcyksXG4gIGRlc2t0b3A6IGNzcyhMYW5ndWFnZU1lbnUuc3R5bGVzLCBMYW5ndWFnZU1lbnUuZGVza3RvcFN0eWxlcyksXG59XG5cbmNvbnN0IExhbmd1YWdlU2V0dGluZ3MgPSAoe1xuICB1aVR5cGUsXG4gIGF1ZGlvVHJhY2tzID0gW10sXG4gIHN1YnRpdGxlVHJhY2tzID0gW10sXG4gIGdldFBsYXllcixcbiAgb25DaGFuZ2UsXG4gIHNsb3RzID0ge0xhbmd1YWdlTWVudX0sXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IGdldExhbmd1YWdlT3B0aW9ucyhnZXRQbGF5ZXIoKSwge2F1ZGlvVHJhY2tzLCBzdWJ0aXRsZVRyYWNrc30pXG4gIHJldHVybiAoXG4gICAgPE92ZXJsYXlQYW5lbCBidXR0b25JY29uPVwic3VidGl0bGVcIj5cbiAgICAgIDxzbG90cy5MYW5ndWFnZU1lbnVcbiAgICAgICAgdWlUeXBlPXt1aVR5cGV9XG4gICAgICAgIGNsYXNzZXM9e21lbnVDbGFzc2VzfVxuICAgICAgICBzZWN0aW9uT3B0aW9ucz17W29wdGlvbnMuYXVkaW9UcmFja3MsIG9wdGlvbnMudGV4dFRyYWNrc119XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAvPlxuICAgIDwvT3ZlcmxheVBhbmVsPlxuICApXG59XG5cbmNvbnN0IFByZW1pdW1QbGF5ZXIgPSAoe1xuICBzb3VyY2UsXG4gIHN0YXJ0VGltZSxcbiAgcXVhbGl0eSA9IHt9LFxuICB0aXRsZSxcbiAgbWV0YWRhdGEsXG4gIGNoYW5uZWxUaXRsZSxcbiAgY2hhcHRlcnMsXG4gIHBsYXliYWNrU3RhdGU6IGFwcFBsYXliYWNrU3RhdGUsXG4gIGN1cnJlbnRUaW1lOiBhcHBDdXJyZW50VGltZSxcbiAgcGxheWJhY2tSYXRlOiBhcHBQbGF5YmFja1JhdGUsXG4gIGxvb3AsXG4gIHZvbHVtZTogYXBwVm9sdW1lLFxuICB0aHVtYm5haWxzVXJsLFxuICBjb250cm9scyA9IHthdXRvaGlkZTogMzAwMH0sXG4gIG1hcmtzID0gW10sXG4gIC8vIFRPRE8gc2VjdGlvbklkXG4gIGludGwsXG4gIHNldHRpbmdzOiBhcHBTZXR0aW5ncyA9IGRlZmF1bHRTZXR0aW5ncyxcbiAgYmxvY2tpbmcsXG4gIHBsdWdpbnMgPSBbXSxcbiAgbW9kdWxlc0NvbmZpZyxcblxuICB1aVR5cGUgPSBpc0Rlc2t0b3AoKSA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnLFxuICBzdHlsZSxcbiAgY2hpbGRyZW4sXG4gIHVpTW9kZSA9ICdzdGFuZGFsb25lJyxcbiAgY2FzdDogY2FzdE9wdGlvbnMgPSAnY29tcGF0aWJsZScsXG4gIHNsb3RzLFxuICBzbG90UHJvcHMgPSB7fSxcbiAgb25FcnJvcixcbiAgb25QbGF5YmFja1N0YXRlQ2hhbmdlLFxuICBvbkJhY2ssXG4gIG9uQ2FzdCxcbiAgb25DaGFuZ2VOZXh0LFxuICBvbkNoYW5nZVByZXZpb3VzLFxuICBvbk9wZW5TZXR0aW5ncyxcbiAgb25DaGFuZ2VTZXR0aW5ncyxcbiAgb25QbGF5ZXJMb2FkZWQsXG4gIG9uQmxvY2tlZEF1dG9wbGF5LFxuICBvblBsYXlsb2dGaXJlZCxcbiAgLi4udmlkZW9Qcm9wc1xufSkgPT4ge1xuICBjb25zdCBjb21wb25lbnRzID0ge1xuICAgIFZvbHVtZUNvbnRyb2wsXG4gICAgQ2FzdFVpLFxuICAgIERpc3BsYXlUaW1lLFxuICAgIExpdmVCdXR0b24sXG4gICAgU2Vla2JhcixcbiAgICBTZXR0aW5ncyxcbiAgICAuLi5zbG90cyxcbiAgfVxuICBjb25zdCB2aWRlb1JlZiA9IHVzZVJlZigpXG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZigpXG4gIGNvbnN0IHBsYXllclJlZiA9IHVzZVJlZigpXG4gIGNvbnN0IGFkQ29udGFpbmVyUmVmID0gdXNlUmVmKClcbiAgY29uc3QgcmVmcyA9IHVzZVJlZih7fSlcbiAgLy8gVE9ETyBtb3ZlIFJXRCByZWxhdGVkIHRvIExheW91dFxuICBjb25zdCB7XG4gICAgY3VycmVudEJyZWFrcG9pbnQ6IHNpemUsXG4gICAgd2lkdGgsXG4gICAgb2JzZXJ2ZSxcbiAgfSA9IHVzZURpbWVuc2lvbnMoe1xuICAgIHBvbHlmaWxsOiBSZXNpemVPYnNlcnZlcixcbiAgICBicmVha3BvaW50czogc2l6ZXMsXG4gIH0pXG4gIGNvbnN0IFtpc1VzZXJBY3RpdmUsIHNldElzVXNlckFjdGl2ZV0gPSB1c2VTdGF0ZShcbiAgICB1aU1vZGUgPT09ICdzdGFuZGFsb25lJyA/IHRydWUgOiB2aWRlb1Byb3BzLmF1dG9wbGF5XG4gIClcbiAgY29uc3QgW3VzZXJGb2N1cywgc2V0VXNlckZvY3VzXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbdGFyZ2V0U3RhdGUsIHNldFRhcmdldFN0YXRlXSA9IHVzZVN0YXRlKCgpID0+ICh7XG4gICAgcGxheWJhY2tTdGF0ZTpcbiAgICAgIGFwcFBsYXliYWNrU3RhdGUgfHwgKHZpZGVvUHJvcHMuYXV0b3BsYXkgPyAncGxheWluZycgOiAncGF1c2VkJyksXG4gICAgY3VycmVudFRpbWU6IHN0YXJ0VGltZSxcbiAgfSkpXG4gIGNvbnN0IFtwbGF5YmFja1RpbWUsIHNldFBsYXliYWNrVGltZV0gPSB1c2VTdGF0ZSh7XG4gICAgY3VycmVudFRpbWU6IDAsXG4gICAgYnVmZmVyVGltZTogMCxcbiAgfSlcbiAgY29uc3QgdG9nZ2xlUGxheSA9IChvdmVycmlkZVN0YXRlLCB7dHJpZ2dlcmVkQnl9ID0ge30pID0+IHtcbiAgICBpZiAodGFyZ2V0U3RhdGUucGxheWJhY2tTdGF0ZSAhPT0gb3ZlcnJpZGVTdGF0ZSkge1xuICAgICAgc2V0VGFyZ2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHBsYXliYWNrU3RhdGU6IG92ZXJyaWRlU3RhdGUgfHwgZmxpcFN0YXRlKHN0YXRlLnBsYXliYWNrU3RhdGUpLFxuICAgICAgICBhbmltYXRpb246XG4gICAgICAgICAgdHJpZ2dlcmVkQnkgPT09ICd1c2VyLWFjdGlvbicgJiYgZmxpcFN0YXRlKHN0YXRlLnBsYXliYWNrU3RhdGUpLFxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXBwUGxheWJhY2tTdGF0ZSkge1xuICAgICAgdG9nZ2xlUGxheShhcHBQbGF5YmFja1N0YXRlKVxuICAgIH1cbiAgfSwgW2FwcFBsYXliYWNrU3RhdGVdKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh1aVR5cGUgPT09ICdtb2JpbGUnKSB7XG4gICAgICBvbihkb2N1bWVudCwgJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB0b2dnbGVQbGF5KCdwYXVzZWQnKSlcbiAgICB9XG4gIH0sIFt1aVR5cGUsIHRhcmdldFN0YXRlLnBsYXliYWNrU3RhdGVdKVxuICBjb25zdCB1cGRhdGVQbGF5YmFja1RpbWUgPSBldmVudCA9PlxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShcbiAgICAgICgpID0+XG4gICAgICAgIChldmVudD8udHlwZSAhPT0gJ3RpbWV1cGRhdGUnIHx8IGlzQnVmZmVyZWQodmlkZW9SZWYuY3VycmVudCkpICYmXG4gICAgICAgIHNldFBsYXliYWNrVGltZShzdGF0ZSA9PiAoe1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIC4uLmdldE1lZGlhVGltZSh2aWRlb1JlZi5jdXJyZW50LCB7XG4gICAgICAgICAgICBwbGF5ZXI6IHBsYXllclJlZi5jdXJyZW50LFxuICAgICAgICAgICAgcGx1Z2lucyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4oZXZlbnQ/LnR5cGUgPT09ICdkdXJhdGlvbmNoYW5nZScgJiYge1xuICAgICAgICAgICAgY3VycmVudFRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSlcbiAgICApXG4gIGNvbnN0IHNldFRhcmdldFRpbWUgPSB0aW1lID0+IHtcbiAgICBjb25zdCB0cmltbWVkID0gTWF0aC5taW4oXG4gICAgICB0aW1lLFxuICAgICAgdmlkZW9SZWYuY3VycmVudD8uaW5pdGlhbER1cmF0aW9uIHx8IEluZmluaXR5XG4gICAgKVxuICAgIHNldFRhcmdldFN0YXRlKHN0YXRlID0+ICh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIC8vIHNlZWsgdG8gMCByZXBlYXRlZGx5IGVkZ2UgY2FzZVxuICAgICAgY3VycmVudFRpbWU6IHN0YXRlLmN1cnJlbnRUaW1lICE9PSB0cmltbWVkID8gdHJpbW1lZCA6IHRyaW1tZWQgKyAwLjAxLFxuICAgIH0pKVxuICAgIHVwZGF0ZVBsYXliYWNrVGltZSgpXG4gIH1cbiAgY29uc3QgW3BsYXliYWNrU3RhdGUsIHNldFBsYXliYWNrU3RhdGVdID0gdXNlU3RhdGUoJ2luaXQnKVxuICBjb25zdCBbY2FzdFN0YXRlLCBzZXRDYXN0U3RhdGVdID0gdXNlU3RhdGUoJycpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBhcHBDdXJyZW50VGltZSA9PT0gJ251bWJlcicpIHNldFRhcmdldFRpbWUoYXBwQ3VycmVudFRpbWUgfHwgMClcbiAgICBpZiAodHlwZW9mIGFwcEN1cnJlbnRUaW1lID09PSAnb2JqZWN0JylcbiAgICAgIHNldFRhcmdldFRpbWUoYXBwQ3VycmVudFRpbWU/LnZhbHVlIHx8IDApXG4gIH0sIFthcHBDdXJyZW50VGltZV0pXG4gIGNvbnN0IFtlcnJvckRhdGEsIHNldEVycm9yRGF0YV0gPSB1c2VTdGF0ZSgpXG4gIGNvbnN0IGVycm9ySGFuZGxlciA9IHJlYWN0RXZlbnQgPT4ge1xuICAgIG9uRXJyb3I/LihyZWFjdEV2ZW50Lm5hdGl2ZUV2ZW50KVxuICAgIGhhbmRsZUVycm9yKHJlYWN0RXZlbnQsIHtcbiAgICAgIG1lZGlhOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgICAgZGlzcGxheUVycm9yOiBkYXRhID0+IHtcbiAgICAgICAgc2V0UGxheWJhY2tTdGF0ZSgnZXJyb3InKVxuICAgICAgICBzZXRFcnJvckRhdGEoY3VycmVudCA9PiAoY3VycmVudD8uY29kZSA/IGN1cnJlbnQgOiBkYXRhKSlcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuICBjb25zdCBpc0xpdmUgPSBwbGF5YmFja1RpbWUuc3RyZWFtVHlwZSA9PT0gJ2xpdmUnXG4gIGNvbnN0IFtzZXR0aW5ncywgc2V0U2V0dGluZ3NdID0gdXNlU3RhdGUoKCkgPT4gKHtcbiAgICBzZWN0aW9uczogW10sXG4gICAgdmFsdWVzOiB7c3BlZWQ6IDF9LFxuICB9KSlcbiAgY29uc3QgZmV0Y2hTZXR0aW5ncyA9ICgpID0+IHtcbiAgICBpZiAoIXBsYXllclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc3BlZWRJdGVtcyA9IGFwcFNldHRpbmdzLnNwZWVkSXRlbXMgfHwgKGlzTGl2ZSA/IFtdIDogdW5kZWZpbmVkKVxuICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4ge1xuICAgICAgY29uc3Qge3ZhbHVlcywgc2VjdGlvbnN9ID0gZ2V0U2V0dGluZ3NEYXRhKHtcbiAgICAgICAgbWVkaWE6IHZpZGVvUmVmLmN1cnJlbnQsXG4gICAgICAgIHBsYXllcjogcGxheWVyUmVmLmN1cnJlbnQsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgcXVhbGl0eSxcbiAgICAgICAgc3BlZWRJdGVtcyxcbiAgICAgICAgbG9vcCxcbiAgICAgICAgcHJlZmVycmVkOiBjdXJyZW50LnByZWZlcnJlZCxcbiAgICAgIH0pXG4gICAgICByZXR1cm4ge3ByZWZlcnJlZDogY3VycmVudC5wcmVmZXJyZWQsIHZhbHVlcywgc2VjdGlvbnN9XG4gICAgfSlcbiAgfVxuICBjb25zdCBsYXN0U3RhdGUgPSB1c2VSZWYocGxheWJhY2tTdGF0ZSlcbiAgY29uc3QgaGFuZGxlUGxheWJhY2tTdGF0ZUNoYW5nZSA9IChldmVudCwgc3RhdGUpID0+IHtcbiAgICBpZiAobGFzdFN0YXRlLmN1cnJlbnQgPT09ICdlcnJvcicpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBvblBsYXliYWNrU3RhdGVDaGFuZ2U/LihldmVudCwgc3RhdGUpXG4gICAgLy8gcHJldmlvdXNseSBVSSBwbGF5YmFjayBzdGF0ZSB3YXMgc3luY2VkIG9ubHkgd2hlblxuICAgIC8vIGV4aXRpbmcgaU9TIHZpZGVvIG9ubHkgZnVsbHNjcmVlbih3ZWJraXRlbmRmdWxsc2NyZWVuKVxuICAgIGlmIChcbiAgICAgIC9wbGF5aW5nfHBhdXNlZC8udGVzdChzdGF0ZSkgJiZcbiAgICAgICEodWlUeXBlID09PSAnbW9iaWxlJyAmJiBibG9ja2luZykgJiZcbiAgICAgICFzaG91bGRQYXVzZSh7dXNlckZvY3VzLCB1aVR5cGV9KVxuICAgICkge1xuICAgICAgdG9nZ2xlUGxheShzdGF0ZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSAnZW5kZWQnKSB7XG4gICAgICB0b2dnbGVQbGF5KCdwYXVzZWQnKVxuICAgIH1cbiAgICBpZiAoc3RhdGUgPT09ICdsb2FkaW5nJyAmJiBsYXN0U3RhdGUuY3VycmVudCAhPT0gJ2luaXQnKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRvZ2dsZVBsYXkoJ3BsYXlpbmcnKSwgMSlcbiAgICB9XG4gICAgaWYgKHN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIHNldElzVXNlckFjdGl2ZSh0cnVlKVxuICAgIH1cbiAgICBpZiAobGFzdFN0YXRlLmN1cnJlbnQgPT09ICdsb2FkaW5nJykge1xuICAgICAgZmV0Y2hTZXR0aW5ncygpXG4gICAgfVxuICAgIGxhc3RTdGF0ZS5jdXJyZW50ID0gc3RhdGVcbiAgICBzZXRQbGF5YmFja1N0YXRlKHN0YXRlKVxuICB9XG5cbiAgY29uc3QgY2hhbmdlU2V0dGluZ3MgPSAobmFtZSwgdmFsdWUsIHtrZWVwT3Blbn0gPSB7fSkgPT4ge1xuICAgIC8vIFRPRE8gY29uc2lkZXIgbWVyZ2UgaW50byB1c2VSZWR1Y2VyP1xuICAgIG9uQ2hhbmdlU2V0dGluZ3M/Lih7bmFtZSwgdmFsdWV9KVxuICAgIHNldFRhcmdldFRpbWUocGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lKVxuICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB2YWx1ZXM6IHsuLi5jdXJyZW50LnZhbHVlcywgW25hbWVdOiB2YWx1ZX0sXG4gICAgICBwcmVmZXJyZWQ6IHsuLi5jdXJyZW50LnByZWZlcnJlZCwgW25hbWVdOiB2YWx1ZX0sXG4gICAgfSkpXG4gICAgaWYgKCFrZWVwT3Blbikge1xuICAgICAgc2V0VXNlckZvY3VzKCcnKVxuICAgIH1cbiAgfVxuICBjb25zdCBvcGVuU2V0dGluZ3MgPSBldmVudCA9PiB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWUgPVxuICAgICAgdXNlckZvY3VzICE9PSAnc2V0dGluZ3MnICYmXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBvbk9wZW5TZXR0aW5ncz8uKGV2ZW50LCBzZXR0aW5ncylcbiAgICAgICAgLy8gSW4gaU9TIFNhZmFyaSwgd2UgbmVlZCB0byB1cGRhdGUgc2V0dGluZ3MgZGF0YVxuICAgICAgICBmZXRjaFNldHRpbmdzKClcbiAgICAgIH0pXG4gICAgc2V0VXNlckZvY3VzKGN1cnJlbnQgPT4gKGN1cnJlbnQgPT09ICdzZXR0aW5ncycgPyAnJyA6ICdzZXR0aW5ncycpKVxuICAgIHJldHVybiBhbmltYXRpb25GcmFtZVxuICB9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFwcFBsYXliYWNrUmF0ZSA+IDApIHtcbiAgICAgIHNldFNldHRpbmdzKGN1cnJlbnQgPT4gKHtcbiAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgdmFsdWVzOiB7Li4uY3VycmVudC52YWx1ZXMsIHNwZWVkOiBhcHBQbGF5YmFja1JhdGV9LFxuICAgICAgfSkpXG4gICAgfVxuICB9LCBbYXBwUGxheWJhY2tSYXRlXSlcblxuICBjb25zdCBxdWFsaXR5T3B0aW9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0UXVhbGl0eU9wdGlvbnMoc2V0dGluZ3MpLFxuICAgIFtzZXR0aW5ncy52YWx1ZXMucXVhbGl0eV1cbiAgKVxuICBjb25zdCB2aWV3TW9kZSA9IHVzZUxpbmtTdGF0ZSh1cGRhdGUgPT5cbiAgICBvblZpZXdNb2RlQ2hhbmdlKHZpZGVvUmVmLmN1cnJlbnQsIHVwZGF0ZSlcbiAgKVxuICBjb25zdCBzb3VyY2VPdmVycmlkZSA9IHVzZUxpbmtTdGF0ZShcbiAgICBhc3luYyB1cGRhdGUgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgc291cmNlICYmIChhd2FpdCBxdWFsaXR5LnJld3JpdGVNYW5pZmVzdD8uKHNvdXJjZSwgcXVhbGl0eU9wdGlvbnMpKVxuICAgICAgdXBkYXRlKHJlc3VsdCB8fCBzb3VyY2UpXG4gICAgfSxcbiAgICBbc291cmNlLCBxdWFsaXR5T3B0aW9uc11cbiAgKVxuICBjb25zdCB3YWl0aW5nID0gL2VtcHRpZWR8bG9hZGluZ3xidWZmZXJpbmcvLnRlc3QocGxheWJhY2tTdGF0ZSlcbiAgY29uc3QgYWN0aXZlUGxheWJhY2sgPVxuICAgIHBsYXliYWNrU3RhdGUgPT09ICdwbGF5aW5nJyB8fCBwbGF5YmFja1N0YXRlID09PSAnd2FpdGluZydcbiAgY29uc3Qge1xuICAgIG1vZGU6IGF1dG9IaWRlTW9kZSxcbiAgICBvbkNsaWNrLFxuICAgIG9uTW91c2VNb3ZlLFxuICB9ID0gdXNlQXV0b0hpZGUoe1xuICAgIHBpbm5lZDogIWNvbnRyb2xzLmF1dG9oaWRlIHx8IHdhaXRpbmcgfHwgIWFjdGl2ZVBsYXliYWNrIHx8IHVzZXJGb2N1cyxcbiAgICB0YXBUb0hpZGU6IHVpVHlwZSA9PT0gJ21vYmlsZScsXG4gICAgaGlkZVRpbWVNczogY29udHJvbHMuYXV0b2hpZGUsXG4gIH0pXG4gIGNvbnN0IG1vZGUgPVxuICAgIHVzZXJGb2N1cyA9PT0gJ3NlZWtiYXInXG4gICAgICA/ICdoaWRkZW4nXG4gICAgICA6IGNvbnRyb2xzLmF1dG9oaWRlXG4gICAgICA/IGF1dG9IaWRlTW9kZVxuICAgICAgOiBjb250cm9sc1xuICAgICAgPyAnc2hvd24nXG4gICAgICA6ICdoaWRkZW4nXG4gIGNvbnN0IGNvbnRyb2xzRGlzcGxheSA9XG4gICAgdXNlckZvY3VzID09PSAnc2Vla2JhcidcbiAgICAgID8gJ3NlZWtiYXItb25seSdcbiAgICAgIDogY29udHJvbHMgPT09ICd0aXRsZS1vbmx5JyB8fCBwbGF5YmFja1N0YXRlID09PSAnZW1wdGllZCdcbiAgICAgID8gJ2hpZGRlbidcbiAgICAgIDogbW9kZVxuICBjb25zdCBzaG91bGRIaWRlUGFuZWxzID1cbiAgICAoY29udHJvbHMgPT09ICduby1wYW5lbCcgfHwgY29udHJvbHNEaXNwbGF5ID09PSAnaGlkZGVuJykgJiYgdXNlckZvY3VzXG4gIGNvbnN0IGhhdmVQbGF5UGFuZWwgPVxuICAgICFibG9ja2luZyAmJlxuICAgIGhhdmVQb2ludGVyKCkgJiZcbiAgICB1aVR5cGUgPT09ICdkZXNrdG9wJyAmJlxuICAgICF3YWl0aW5nICYmXG4gICAgIS92b2x1bWV8JycvLnRlc3QodXNlckZvY3VzKSAmJlxuICAgICEvdGl0bGUtb25seXxuby1wYW5lbC8udGVzdChjb250cm9scykgJiZcbiAgICAoY29udHJvbHMuYXV0b2hpZGUgfHwgbW9kZSA9PT0gJ3Nob3duJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRIaWRlUGFuZWxzKSB7XG4gICAgICBzZXRVc2VyRm9jdXMoJycpXG4gICAgfVxuICB9LCBbc2hvdWxkSGlkZVBhbmVsc10pXG4gIGNvbnN0IHtzdWJzY3JpYmUsIG9uQ2hhbmdlLCB0b2dnbGVNdXRlfSA9IGxpbmtNZWRpYVZvbHVtZSgoKSA9PiAoe1xuICAgIHZpZGVvOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgIGdldFBsYXllcjogKCkgPT4gcGxheWVyUmVmLmN1cnJlbnQsXG4gIH0pKVxuICBjb25zdCBjaGFuZ2VQcmV2aW91cyA9IGV2ZW50ID0+IHtcbiAgICBvbkNoYW5nZVByZXZpb3VzKGV2ZW50KVxuICAgIHRvZ2dsZVBsYXkoJ3BhdXNlZCcpXG4gICAgdmlkZW9SZWYuY3VycmVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbG9hZHN0YXJ0JykpXG4gIH1cbiAgY29uc3QgY2hhbmdlTmV4dCA9IGV2ZW50ID0+IHtcbiAgICBvbkNoYW5nZU5leHQoZXZlbnQpXG4gICAgdG9nZ2xlUGxheSgncGF1c2VkJylcbiAgICB2aWRlb1JlZi5jdXJyZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdsb2Fkc3RhcnQnKSlcbiAgfVxuXG4gIHVzZUVmZmVjdChmZXRjaFNldHRpbmdzLCBbYXBwU2V0dGluZ3NdKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFRoZSBhZENvbnRhaW5lciBzaG91bGQgYmUgc2V0IGJlZm9yZSBgbG9hZGAgYmVjYXVzZSBJbWFEYWkubG9hZCBuZWVkcyBpdC5cbiAgICBwbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHBsdWdpbi5zZXRBZENvbnRhaW5lcj8uKGFkQ29udGFpbmVyUmVmLmN1cnJlbnQpKVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoXG4gICAgKCkgPT5cbiAgICAgIGRpc3BhdGNoQ2hhcHRlckV2ZW50cyh7XG4gICAgICAgIG1lZGlhOiB2aWRlb1JlZi5jdXJyZW50LFxuICAgICAgICBjaGFwdGVycyxcbiAgICAgICAgZ2V0VGltZTogKCkgPT4gdmlkZW9SZWYuY3VycmVudC5jdXJyZW50VGltZSxcbiAgICAgIH0pLFxuICAgIFtjaGFwdGVyc11cbiAgKVxuXG4gIGNvbnN0IGlzRW5kID0gcGxheWJhY2tTdGF0ZSA9PT0gJ2VuZGVkJ1xuICBjb25zdCBjYW5TZWVrID0gIWlzRW5kICYmIHBsYXliYWNrVGltZS5kdXJhdGlvbiA+IDBcbiAgY29uc3QgZGVyaXZlZFBsYXliYWNrU3RhdGUgPVxuICAgICh1aVR5cGUgPT09ICdtb2JpbGUnICYmIGJsb2NraW5nKSB8fCBzaG91bGRQYXVzZSh7dXNlckZvY3VzLCB1aVR5cGV9KVxuICAgICAgPyAncGF1c2VkJ1xuICAgICAgOiB0YXJnZXRTdGF0ZS5wbGF5YmFja1N0YXRlXG4gIGNvbnN0IGFjdGl2ZVRodW1ibmFpbHNVcmwgPVxuICAgICghdXNlckZvY3VzIHx8IHVzZXJGb2N1cyA9PT0gJ3NlZWtiYXInKSAmJlxuICAgIChnZXRUaHVtYm5haWxzVXJsKHNvdXJjZSkgfHwgdGh1bWJuYWlsc1VybClcbiAgY29uc3QgY3NzVmFyaWFibGVzID0ge1xuICAgICctLXBsYXlpbmcnOiBwbGF5YmFja1N0YXRlID09PSAncGxheWluZycgPyAnMScgOiAnMCcsXG4gIH1cbiAgY29uc3Qgb25SZXdpbmQgPVxuICAgICghaXNMaXZlIHx8IHBsYXliYWNrVGltZS5jdXJyZW50VGltZSA8IDApICYmXG4gICAgIWlzRW5kICYmXG4gICAgKCgpID0+IHNldFRhcmdldFRpbWUocGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lIC0gMTAsICdyZXdpbmQnKSlcbiAgY29uc3Qgb25Gb3J3YXJkID1cbiAgICAoIWlzTGl2ZSB8fCBwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgPCAwKSAmJlxuICAgIGNhblNlZWsgJiZcbiAgICAoKCkgPT4gc2V0VGFyZ2V0VGltZShwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgKyAxMCwgJ2ZvcndhcmQnKSlcbiAgY29uc3Qgb25DbGlja0JsYW5rID1cbiAgICBoYXZlUGxheVBhbmVsICYmICgoKSA9PiB0b2dnbGVQbGF5KCcnLCB7dHJpZ2dlcmVkQnk6ICd1c2VyLWFjdGlvbid9KSlcblxuICBjb25zdCB1aUhhbmRsZXJzID0ge1xuICAgIG9uUGxheTogKCkgPT4ge1xuICAgICAgdG9nZ2xlUGxheSgnJywge3RyaWdnZXJlZEJ5OiAndXNlci1hY3Rpb24nfSlcbiAgICAgIHNldElzVXNlckFjdGl2ZSh0cnVlKVxuICAgIH0sXG4gICAgb25DbGlja0xpdmU6IGlzTGl2ZSAmJiAoKCkgPT4gc2V0VGFyZ2V0VGltZSgwLCAnc2Vla1RvTGl2ZScpKSxcbiAgICBvbkNsaWNrU2Vla2JhcjogKCkgPT4ge1xuICAgICAgcmVmcy5jdXJyZW50LmRlZmVyZWRTZWVrRm9jdXMgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiBzZXRVc2VyRm9jdXMoJ3NlZWtiYXInKSxcbiAgICAgICAgNjZcbiAgICAgIClcbiAgICB9LFxuICAgIG9uU2VlazogdGltZSA9PiB7XG4gICAgICBzZXRUYXJnZXRUaW1lKHRpbWUsICdzZWVrJylcbiAgICAgIGNsZWFyVGltZW91dChyZWZzLmN1cnJlbnQuZGVmZXJlZFNlZWtGb2N1cylcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0VXNlckZvY3VzKCcnKSwgNjYpXG4gICAgfSxcbiAgICBvbkNoYW5nZVNldHRpbmdzOiAoe25hbWUsIHZhbHVlLCBrZWVwT3Blbn0pID0+XG4gICAgICBjaGFuZ2VTZXR0aW5ncyhuYW1lLCB2YWx1ZSwge2tlZXBPcGVufSksXG4gICAgb25DbG9zZVNldHRpbmdzOiBldmVudCA9PiB7XG4gICAgICBzZXRVc2VyRm9jdXMoJycpXG4gICAgICBzbG90UHJvcHM/LnNldHRpbmdzPy5vbkNsb3NlPy4oZXZlbnQpXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IHVpRWxlbWVudHMgPSB7XG4gICAgbGl2ZUJ1dHRvbjogdWlIYW5kbGVycy5vbkNsaWNrTGl2ZSAmJiAoXG4gICAgICA8Y29tcG9uZW50cy5MaXZlQnV0dG9uXG4gICAgICAgIHVzaW5nU3RhcnRPdmVyPXtwbGF5YmFja1RpbWUuY3VycmVudFRpbWUgPCAwfVxuICAgICAgICBvbkNsaWNrPXt1aUhhbmRsZXJzLm9uQ2xpY2tMaXZlfVxuICAgICAgLz5cbiAgICApLFxuICAgIGNvbnRyb2xCdXR0b25zOiB7XG4gICAgICBwbGF5QnV0dG9uOiAoXG4gICAgICAgIDxQbGF5QnV0dG9uXG4gICAgICAgICAgcGxheWJhY2tTdGF0ZT17ZGVyaXZlZFBsYXliYWNrU3RhdGV9XG4gICAgICAgICAgZW5kZWQ9e2lzRW5kfVxuICAgICAgICAgIGhpZGRlbj17XG4gICAgICAgICAgICB1aVR5cGUgPT09ICdtb2JpbGUnICYmICh3YWl0aW5nIHx8IC9sb2FkaW5nLy50ZXN0KHBsYXliYWNrU3RhdGUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXJpYW50PXshaXNVc2VyQWN0aXZlICYmICdmaXJzdHBsYXknfVxuICAgICAgICAgIG9uQ2xpY2s9e3VpSGFuZGxlcnMub25QbGF5fVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICAgIHJld2luZEJ1dHRvbjogb25SZXdpbmQgJiYgKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc3RhcnRJY29uPVwicmV3aW5kMTBcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5SRVdJTkRcIlxuICAgICAgICAgIGRpc2FibGVkPXtpc0VuZH1cbiAgICAgICAgICBvbkNsaWNrPXtvblJld2luZH1cbiAgICAgICAgLz5cbiAgICAgICksXG4gICAgICBmb3J3YXJkQnV0dG9uOiBvbkZvcndhcmQgJiYgKFxuICAgICAgICA8Rm9yd2FyZEJ1dHRvblxuICAgICAgICAgIHN0YXJ0SWNvbj1cImZvcndhcmQxMFwiXG4gICAgICAgICAgdGl0bGU9XCJLS1MuUExBWUVSLkZPUldBUkRcIlxuICAgICAgICAgIGRpc2FibGVkPXshY2FuU2Vla31cbiAgICAgICAgICBvbkNsaWNrPXtvbkZvcndhcmR9XG4gICAgICAgIC8+XG4gICAgICApLFxuICAgICAgbmV4dEVwaXNvZGVCdXR0b246IChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHN0YXJ0SWNvbj1cIm5leHRcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5ORVhUXCJcbiAgICAgICAgICBkaXNhYmxlZD17IW9uQ2hhbmdlTmV4dH1cbiAgICAgICAgICBvbkNsaWNrPXtjaGFuZ2VOZXh0fVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICAgIHByZXZpb3VzRXBpc29kZUJ1dHRvbjogKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc3RhcnRJY29uPVwicHJldmlvdXNcIlxuICAgICAgICAgIHRpdGxlPVwiS0tTLlBMQVlFUi5QUkVWSU9VU1wiXG4gICAgICAgICAgZGlzYWJsZWQ9eyFvbkNoYW5nZVByZXZpb3VzfVxuICAgICAgICAgIG9uQ2xpY2s9e2NoYW5nZVByZXZpb3VzfVxuICAgICAgICAvPlxuICAgICAgKSxcbiAgICB9LFxuICAgIHNlZWtiYXI6IChcbiAgICAgIDxjb21wb25lbnRzLlNlZWtiYXJcbiAgICAgICAgc3R5bGU9ey92b2x1bWUvLnRlc3QodXNlckZvY3VzKSAmJiB7b3BhY2l0eTogJzAnfX1cbiAgICAgICAgc3RhcnRUaW1lPXtwbGF5YmFja1RpbWUuc3RhcnRUaW1lfVxuICAgICAgICBjdXJyZW50VGltZT17cGxheWJhY2tUaW1lLmN1cnJlbnRUaW1lfVxuICAgICAgICBidWZmZXJUaW1lPXtwbGF5YmFja1RpbWUuYnVmZmVyVGltZX1cbiAgICAgICAgZHVyYXRpb249e3BsYXliYWNrVGltZS5kdXJhdGlvbn1cbiAgICAgICAgY2hhcHRlcnM9e2NoYXB0ZXJzfVxuICAgICAgICBvbkNoYW5nZT17dWlIYW5kbGVycy5vbkNsaWNrU2Vla2Jhcn1cbiAgICAgICAgb25DaGFuZ2VDb21taXR0ZWQ9e3VpSGFuZGxlcnMub25TZWVrfVxuICAgICAgICBtYXJrcz17bWFya3N9XG4gICAgICAgIHBsdWdpbnM9e3BsdWdpbnN9XG4gICAgICAgIHsuLi5zbG90UHJvcHMuc2Vla2Jhcn1cbiAgICAgID5cbiAgICAgICAge2FjdGl2ZVRodW1ibmFpbHNVcmwgJiYgKFxuICAgICAgICAgIDxTZWVrUHJldmlld1xuICAgICAgICAgICAgdGh1bWJuYWlsc1VybD17YWN0aXZlVGh1bWJuYWlsc1VybH1cbiAgICAgICAgICAgIGR1cmF0aW9uPXtwbGF5YmFja1RpbWUuZHVyYXRpb259XG4gICAgICAgICAgICBjaGFwdGVycz17Y2hhcHRlcnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvY29tcG9uZW50cy5TZWVrYmFyPlxuICAgICksXG4gICAgZGlzcGxheVRpbWU6IDxjb21wb25lbnRzLkRpc3BsYXlUaW1lIHsuLi5wbGF5YmFja1RpbWV9IC8+LFxuICAgIGZ1bGxzY3JlZW5CdXR0b246IChcbiAgICAgIDxGdWxsc2NyZWVuQnV0dG9uXG4gICAgICAgIHZpZXdNb2RlPXt2aWV3TW9kZX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlRnVsbHNjcmVlbihjb250YWluZXJSZWYuY3VycmVudCl9XG4gICAgICAvPlxuICAgICksXG4gICAgdm9sdW1lQ29udHJvbDogd2lkdGggPj0gc2l6ZXNbJ3NtYWxsLWVtYmVkJ10gJiYgKFxuICAgICAgPGNvbXBvbmVudHMuVm9sdW1lQ29udHJvbFxuICAgICAgICB7Li4ue3N1YnNjcmliZSwgb25DaGFuZ2UsIHRvZ2dsZU11dGV9fVxuICAgICAgICBvbk1vdXNlT3Zlcj17KCkgPT4gc2V0VXNlckZvY3VzKCd2b2x1bWUnKX1cbiAgICAgICAgb25Nb3VzZU91dD17KCkgPT4gc2V0VXNlckZvY3VzKCcnKX1cbiAgICAgICAgey4uLnNsb3RQcm9wcz8udm9sdW1lQ29udHJvbH1cbiAgICAgIC8+XG4gICAgKSxcbiAgICBiYWNrSXRlbXM6IChcbiAgICAgIDxQbGF5UGFuZWwgYW5pbWF0aW9uPXt0YXJnZXRTdGF0ZS5hbmltYXRpb259IG9uQ2xpY2s9e29uQ2xpY2tCbGFua30gLz5cbiAgICApLFxuICB9XG4gIGNvbnN0IGNvbXBhdGliaWxpdHlDYXN0UHJvcHMgPSBjYXN0T3B0aW9ucyA9PT0gJ2NvbXBhdGlibGUnICYmIHtcbiAgICBzb3VyY2UsXG4gICAgdmFsdWVzOiB7dGl0bGUsIC4uLnNldHRpbmdzLnZhbHVlcywgLi4uaW50bCwgbW9kdWxlc0NvbmZpZ30sXG4gICAgb25Mb2FkOiBvbkNhc3QsXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjYXN0T3B0aW9ucyAmJiBjYXN0T3B0aW9ucyAhPT0gJ2NvbXBhdGlibGUnKSB7XG4gICAgICByZXR1cm4gbGlua0Nhc3Qoe3NvdXJjZSwgLi4uY2FzdE9wdGlvbnN9KVxuICAgIH0gLy8gVE9ETyBwbGF5bGlzdCwgYXVkaW8gLyBzdWJ0aXRsZSBzZXR0aW5nXG4gIH0sIFtzb3VyY2UsIGNhc3RPcHRpb25zLmNvbnRlbnRJZCwgY2FzdE9wdGlvbnMuY3VzdG9tRGF0YV0pXG5cbiAgcmV0dXJuIChcbiAgICA8SW50bFByb3ZpZGVyIHsuLi5pbnRsfT5cbiAgICAgIDxMYXlvdXRcbiAgICAgICAgc3R5bGU9e3suLi5zdHlsZSwgY3NzVmFyaWFibGVzfX1cbiAgICAgICAgdHlwZT17dWlUeXBlfVxuICAgICAgICBkaXNwbGF5PXttb2RlfVxuICAgICAgICBjb250cm9sc0Rpc3BsYXk9e2NvbnRyb2xzRGlzcGxheX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgdmlkZW89e1xuICAgICAgICAgIDxWaWRlb1xuICAgICAgICAgICAgey4uLnZpZGVvUHJvcHN9XG4gICAgICAgICAgICB2aWRlb1JlZj17bXVsdGlSZWYodmlkZW9SZWYsIHZpZGVvUHJvcHMudmlkZW9SZWYpfVxuICAgICAgICAgICAgc291cmNlPXtcbiAgICAgICAgICAgICAgY2FzdFN0YXRlICE9PSBDYXN0U3RhdGUuQ09OTkVDVEVEICYmXG4gICAgICAgICAgICAgIHBsYXliYWNrU3RhdGUgIT09ICdlcnJvcicgJiZcbiAgICAgICAgICAgICAgc291cmNlT3ZlcnJpZGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBsYXliYWNrU3RhdGU9e2Rlcml2ZWRQbGF5YmFja1N0YXRlfVxuICAgICAgICAgICAgY3VycmVudFRpbWU9e3RhcmdldFN0YXRlLmN1cnJlbnRUaW1lfVxuICAgICAgICAgICAgey4uLihhcHBWb2x1bWUgPj0gMCAmJiB7dm9sdW1lOiBhcHBWb2x1bWUsIG11dGVkOiBhcHBWb2x1bWUgPD0gMH0pfVxuICAgICAgICAgICAgcGxheWJhY2tSYXRlPXtzZXR0aW5ncy52YWx1ZXMuc3BlZWR9XG4gICAgICAgICAgICB2aWRlb1Jlc29sdXRpb249e3F1YWxpdHlPcHRpb25zfVxuICAgICAgICAgICAgYXVkaW89e3NldHRpbmdzLnZhbHVlcy5hdWRpb31cbiAgICAgICAgICAgIHRleHRUcmFjaz17c2V0dGluZ3MudmFsdWVzLnN1YnRpdGxlc31cbiAgICAgICAgICAgIGxvb3A9e3NldHRpbmdzLnZhbHVlcy5sb29wfVxuICAgICAgICAgICAgcGx1Z2lucz17cGx1Z2luc31cbiAgICAgICAgICAgIG1vZHVsZXNDb25maWc9e21vZHVsZXNDb25maWd9XG4gICAgICAgICAgICBvblBsYXlsb2dGaXJlZD17b25QbGF5bG9nRmlyZWR9XG4gICAgICAgICAgICBvbkVycm9yPXtlcnJvckhhbmRsZXJ9XG4gICAgICAgICAgICBvblBsYXliYWNrU3RhdGVDaGFuZ2U9e2hhbmRsZVBsYXliYWNrU3RhdGVDaGFuZ2V9XG4gICAgICAgICAgICBvbkJsb2NrZWRBdXRvcGxheT17ZXJyb3IgPT4gb25CbG9ja2VkQXV0b3BsYXk/LihlcnJvcil9XG4gICAgICAgICAgICBvbkNhblBsYXk9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlUGxheWJhY2tUaW1lKGV2ZW50KVxuICAgICAgICAgICAgICB2aWRlb1Byb3BzLm9uQ2FuUGxheT8uKGV2ZW50KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uVGltZVVwZGF0ZT17dXBkYXRlUGxheWJhY2tUaW1lfVxuICAgICAgICAgICAgb25EdXJhdGlvbkNoYW5nZT17dXBkYXRlUGxheWJhY2tUaW1lfVxuICAgICAgICAgICAgb25QbGF5ZXJMb2FkZWQ9e3BsYXllciA9PiB7XG4gICAgICAgICAgICAgIHBsYXllclJlZi5jdXJyZW50ID0gcGxheWVyXG4gICAgICAgICAgICAgIG9uUGxheWVyTG9hZGVkPy4ocGxheWVyKVxuICAgICAgICAgICAgICBzeW5jVm9sdW1lKHZpZGVvUmVmLmN1cnJlbnQsIHZpZGVvUHJvcHMubXV0ZWQgPyAwIDogYXBwVm9sdW1lKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lclJlZj17ZWxlbWVudCA9PiB7XG4gICAgICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQgPSBlbGVtZW50XG4gICAgICAgICAgb2JzZXJ2ZShlbGVtZW50KVxuICAgICAgICB9fVxuICAgICAgICBiYWNrUmVmPXthZENvbnRhaW5lclJlZn1cbiAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICBjaGFubmVsVGl0bGU9e2NoYW5uZWxUaXRsZX1cbiAgICAgICAgYmFja0J1dHRvbj17b25CYWNrICYmIDxCdXR0b24gc3RhcnRJY29uPVwiYmFja1wiIG9uQ2xpY2s9e29uQmFja30gLz59XG4gICAgICAgIHsuLi4oaXNVc2VyQWN0aXZlICYmIHVpRWxlbWVudHMpfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbk1vdXNlTW92ZT17b25Nb3VzZU1vdmV9XG4gICAgICA+XG4gICAgICAgIDxMb2FkaW5nU3Bpbm5lciBhY3RpdmU9e3dhaXRpbmd9IC8+XG4gICAgICAgIHtlcnJvckRhdGEgJiYgPEVycm9yIGVycm9yPXtlcnJvckRhdGF9IG9uQmFjaz17b25CYWNrfSAvPn1cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICB7LyogVE9ETyBzeW5jIENhc3QgbGFzdCBwbGF5ZWQgdGltZSBiYWNrICovfVxuICAgICAgICB7aXNVc2VyQWN0aXZlICYmIChcbiAgICAgICAgICA8Y29tcG9uZW50cy5DYXN0VWlcbiAgICAgICAgICAgIG9uQmFjaz17b25CYWNrfVxuICAgICAgICAgICAgb25TdGF0ZUNoYW5nZT17c2V0Q2FzdFN0YXRlfVxuICAgICAgICAgICAgb25Mb2FkPXtvbkNhc3R9XG4gICAgICAgICAgICB7Li4uY29tcGF0aWJpbGl0eUNhc3RQcm9wc31cbiAgICAgICAgICAgIHsuLi5zbG90UHJvcHMuY2FzdFVpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtpc1VzZXJBY3RpdmUgJiYgKCAvLyBUT0RPOiBEZXNpZ24gPEV4dGVuc3Rpb24gLz4gZmxhZ1xuICAgICAgICAgIDxjb21wb25lbnRzLlNldHRpbmdzXG4gICAgICAgICAgICB0eXBlPXt1aVR5cGV9XG4gICAgICAgICAgICBzZWN0aW9ucz17c2V0dGluZ3Muc2VjdGlvbnN9XG4gICAgICAgICAgICAvLyBUT0RPIGhhc0JvdHRvbVBhbmVsIGJvdHRvbTogOGVtXG4gICAgICAgICAgICBvcGVuPXt1c2VyRm9jdXMgPT09ICdzZXR0aW5ncyd9XG4gICAgICAgICAgICB2YWx1ZXM9e3NldHRpbmdzLnZhbHVlc31cbiAgICAgICAgICAgIG9uT3Blbj17b3BlblNldHRpbmdzfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3VpSGFuZGxlcnMub25DaGFuZ2VTZXR0aW5nc31cbiAgICAgICAgICAgIHsuLi5zbG90UHJvcHM/LnNldHRpbmdzfVxuICAgICAgICAgICAgb25DbG9zZT17dWlIYW5kbGVycy5vbkNsb3NlU2V0dGluZ3N9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPExhbmd1YWdlU2V0dGluZ3NcbiAgICAgICAgICB1aVR5cGU9e3VpVHlwZX1cbiAgICAgICAgICBnZXRQbGF5ZXI9eygpID0+IHBsYXllclJlZi5jdXJyZW50fVxuICAgICAgICAgIG9uQ2hhbmdlPXsoX2V2ZW50LCBpdGVtKSA9PiBjaGFuZ2VTZXR0aW5ncyhpdGVtLnR5cGUsIGl0ZW0udmFsdWUpfVxuICAgICAgICAgIHsuLi5zbG90UHJvcHMubGFuZ3VhZ2VTZXR0aW5nc31cbiAgICAgICAgLz5cbiAgICAgICAgPEJhY2tkcm9wIG9wZW49eyFwbGF5YmFja1N0YXRlIHx8IHBsYXliYWNrU3RhdGUgPT09ICdsb2FkaW5nJ30+XG4gICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgIDwvQmFja2Ryb3A+XG4gICAgICA8L0xheW91dD5cbiAgICA8L0ludGxQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcmVtaXVtUGxheWVyXG4iXX0= */")
8666
8668
  };
8667
8669
 
8668
8670
  const LanguageSettings = ({
8669
8671
  uiType,
8670
8672
  audioTracks = [],
8671
8673
  subtitleTracks = [],
8674
+ getPlayer,
8672
8675
  onChange,
8673
8676
  slots = {
8674
8677
  LanguageMenu
8675
8678
  },
8676
8679
  ...rest
8677
- }) => /*#__PURE__*/jsx(OverlayPanel, {
8678
- buttonIcon: "subtitle",
8679
- children: /*#__PURE__*/jsx(slots.LanguageMenu, {
8680
- uiType: uiType,
8681
- classes: menuClasses,
8682
- sectionOptions: [audioTracks, subtitleTracks],
8683
- onChange: onChange,
8684
- ...rest
8685
- })
8686
- });
8680
+ }) => {
8681
+ const options = getLanguageOptions(getPlayer(), {
8682
+ audioTracks,
8683
+ subtitleTracks
8684
+ });
8685
+ return /*#__PURE__*/jsx(OverlayPanel, {
8686
+ buttonIcon: "subtitle",
8687
+ children: /*#__PURE__*/jsx(slots.LanguageMenu, {
8688
+ uiType: uiType,
8689
+ classes: menuClasses,
8690
+ sectionOptions: [options.audioTracks, options.textTracks],
8691
+ onChange: onChange,
8692
+ ...rest
8693
+ })
8694
+ });
8695
+ };
8687
8696
 
8688
8697
  const PremiumPlayer = ({
8689
8698
  source,
@@ -9230,8 +9239,8 @@ const PremiumPlayer = ({
9230
9239
  onClose: uiHandlers.onCloseSettings
9231
9240
  }), /*#__PURE__*/jsx(LanguageSettings, {
9232
9241
  uiType: uiType,
9233
- ...getLanguageOptions(settings),
9234
- onChange: (_event, item) => changeSettings(item.section, item.value),
9242
+ getPlayer: () => playerRef.current,
9243
+ onChange: (_event, item) => changeSettings(item.type, item.value),
9235
9244
  ...slotProps.languageSettings
9236
9245
  }), /*#__PURE__*/jsx(Backdrop, {
9237
9246
  open: !playbackState || playbackState === 'loading',
@@ -11146,7 +11155,7 @@ const PremiumPlusPlayer = ({
11146
11155
  const restPlayerName = ['shaka', 'bitmovin'].find(name => name in rest);
11147
11156
  logTarget.current = mapLogEvents({
11148
11157
  playerName: restPlayerName || 'shaka',
11149
- version: "2.25.0-canary.0",
11158
+ version: "2.25.0-canary.2",
11150
11159
  video: videoRef.current,
11151
11160
  getPlaybackStatus: () => getMediaTime(videoRef.current, {
11152
11161
  player: corePlayerRef.current,
@@ -11374,8 +11383,8 @@ const PremiumPlusPlayer = ({
11374
11383
  }
11375
11384
  })
11376
11385
  },
11377
- languageSettings: {
11378
- value: sourceType || ((_playbackInfo$sources = playbackInfo.sources) === null || _playbackInfo$sources === void 0 ? void 0 : (_playbackInfo$sources2 = _playbackInfo$sources[0]) === null || _playbackInfo$sources2 === void 0 ? void 0 : _playbackInfo$sources2.type),
11386
+ languageSettings: ((_playbackInfo$sources = playbackInfo.sources) === null || _playbackInfo$sources === void 0 ? void 0 : _playbackInfo$sources.length) === 2 && {
11387
+ value: sourceType || ((_playbackInfo$sources2 = playbackInfo.sources[0]) === null || _playbackInfo$sources2 === void 0 ? void 0 : _playbackInfo$sources2.type),
11379
11388
  onChange: handleSourceTypeChange
11380
11389
  }
11381
11390
  },