@adstore/templates 2.0.12 → 2.0.13

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.
@@ -365,29 +365,30 @@ options.diffed = function(n) {
365
365
  var t2 = n.props, e2 = n.__e;
366
366
  null != e2 && "textarea" === n.type && "value" in t2 && t2.value !== e2.value && (e2.value = null == t2.value ? "" : t2.value);
367
367
  };
368
- const root$i = "_root_241qx_1";
369
- const icon$1 = "_icon_241qx_5";
370
- const iconTarget$1 = "_iconTarget_241qx_17";
371
- const body$6 = "_body_241qx_22";
372
- const bodyOpen$1 = "_bodyOpen_241qx_30";
373
- const simpleGift_in = "_simpleGift_in_241qx_1";
374
- const close$1 = "_close_241qx_43";
375
- const arrow$1 = "_arrow_241qx_57";
376
- const container$2 = "_container_241qx_67";
377
- const inner$1 = "_inner_241qx_73";
378
- const logo$6 = "_logo_241qx_80";
379
- const text$4 = "_text_241qx_86";
380
- const button$6 = "_button_241qx_101";
381
- const buttonAnimated = "_buttonAnimated_241qx_110";
382
- const increase$1 = "_increase_241qx_1";
383
- const legal$5 = "_legal_241qx_114";
384
- const legalOpen$1 = "_legalOpen_241qx_131";
385
- const legalText$1 = "_legalText_241qx_139";
386
- const legalButton$1 = "_legalButton_241qx_155";
387
- const fadein$1 = "_fadein_241qx_1";
388
- const pulse$1 = "_pulse_241qx_1";
389
- const gradient$1 = "_gradient_241qx_1";
390
- const wiggle$1 = "_wiggle_241qx_1";
368
+ const root$i = "_root_1scoi_1";
369
+ const icon$1 = "_icon_1scoi_5";
370
+ const iconTarget$1 = "_iconTarget_1scoi_17";
371
+ const body$6 = "_body_1scoi_22";
372
+ const bodyOpen$1 = "_bodyOpen_1scoi_30";
373
+ const simpleGift_in = "_simpleGift_in_1scoi_1";
374
+ const close$1 = "_close_1scoi_43";
375
+ const arrow$1 = "_arrow_1scoi_57";
376
+ const container$2 = "_container_1scoi_67";
377
+ const inner$1 = "_inner_1scoi_73";
378
+ const logo$6 = "_logo_1scoi_80";
379
+ const text$4 = "_text_1scoi_87";
380
+ const button$6 = "_button_1scoi_102";
381
+ const buttonAnimated = "_buttonAnimated_1scoi_111";
382
+ const increase$1 = "_increase_1scoi_1";
383
+ const legalWrapper = "_legalWrapper_1scoi_115";
384
+ const legal$5 = "_legal_1scoi_115";
385
+ const legalOpen$1 = "_legalOpen_1scoi_135";
386
+ const legalText$1 = "_legalText_1scoi_143";
387
+ const legalButton$1 = "_legalButton_1scoi_159";
388
+ const fadein$1 = "_fadein_1scoi_1";
389
+ const pulse$1 = "_pulse_1scoi_1";
390
+ const gradient$1 = "_gradient_1scoi_1";
391
+ const wiggle$1 = "_wiggle_1scoi_1";
391
392
  const styles$d = {
392
393
  root: root$i,
393
394
  icon: icon$1,
@@ -404,6 +405,7 @@ const styles$d = {
404
405
  button: button$6,
405
406
  buttonAnimated,
406
407
  increase: increase$1,
408
+ legalWrapper,
407
409
  legal: legal$5,
408
410
  legalOpen: legalOpen$1,
409
411
  legalText: legalText$1,
@@ -1379,13 +1381,17 @@ const injectLink = (options2) => {
1379
1381
  Object.entries(options2).forEach(([key, value]) => link.setAttribute(key, value));
1380
1382
  head2.appendChild(link);
1381
1383
  };
1382
- const iterator = (input, visitor) => {
1384
+ const iterator = (input, visitor, path) => {
1383
1385
  if (Array.isArray(input)) {
1384
- return input.map((el, index2) => iterator(visitor(index2, el), visitor));
1386
+ return input.map((el, index2) => {
1387
+ const newPath = [path, index2].filter(isValue).join(".");
1388
+ return iterator(visitor(index2, el, newPath), visitor, newPath);
1389
+ });
1385
1390
  }
1386
1391
  if (typeof input === "object" && input) {
1387
1392
  return Object.entries(input).reduce((acc, [key, value]) => {
1388
- acc[key] = iterator(visitor(key, value), visitor);
1393
+ const newPath = [path, key].filter(isValue).join(".");
1394
+ acc[key] = iterator(visitor(key, value, newPath), visitor, newPath);
1389
1395
  return acc;
1390
1396
  }, {});
1391
1397
  }
@@ -1743,7 +1749,9 @@ const SimpleGift = () => {
1743
1749
  });
1744
1750
  useExtractFonts(deviceState);
1745
1751
  return o("div", {
1746
- className: styles$d.root,
1752
+ className: classNames(styles$d.root, {
1753
+ [styles$d.legalOpen]: legalIsOpen
1754
+ }),
1747
1755
  ref: rootRef,
1748
1756
  children: [o("div", {
1749
1757
  className: styles$d.icon,
@@ -1792,19 +1800,20 @@ const SimpleGift = () => {
1792
1800
  children: (_d = rules.button) == null ? void 0 : _d.children
1793
1801
  })]
1794
1802
  }), o("div", {
1795
- className: classNames(styles$d.legal, {
1796
- [styles$d.legalOpen]: legalIsOpen
1797
- }),
1798
- style: rules.legal,
1799
- children: o("span", {
1800
- className: styles$d.legalText,
1801
- children: [o("span", {
1802
- children: (_e = rules == null ? void 0 : rules.legal) == null ? void 0 : _e.children
1803
- }), o("span", {
1804
- className: styles$d.legalButton,
1805
- onClick: toggleLegalIsOpen,
1806
- children: legalIsOpen ? (_f = rules == null ? void 0 : rules.legal) == null ? void 0 : _f.buttonOpenText : (_g = rules == null ? void 0 : rules.legal) == null ? void 0 : _g.buttonHideText
1807
- })]
1803
+ className: styles$d.legalWrapper,
1804
+ children: o("div", {
1805
+ className: styles$d.legal,
1806
+ style: rules.legal,
1807
+ children: o("span", {
1808
+ className: styles$d.legalText,
1809
+ children: [o("span", {
1810
+ children: (_e = rules == null ? void 0 : rules.legal) == null ? void 0 : _e.children
1811
+ }), o("span", {
1812
+ className: styles$d.legalButton,
1813
+ onClick: toggleLegalIsOpen,
1814
+ children: legalIsOpen ? (_f = rules == null ? void 0 : rules.legal) == null ? void 0 : _f.buttonOpenText : (_g = rules == null ? void 0 : rules.legal) == null ? void 0 : _g.buttonHideText
1815
+ })]
1816
+ })
1808
1817
  })
1809
1818
  })]
1810
1819
  })]
@@ -1856,16 +1865,16 @@ const styles$c = {
1856
1865
  gradient,
1857
1866
  wiggle
1858
1867
  };
1859
- const root$b = "_root_5vnui_1";
1860
- const body$4 = "_body_5vnui_30";
1861
- const bodyInner = "_bodyInner_5vnui_38";
1862
- const line = "_line_5vnui_43";
1863
- const text$3 = "_text_5vnui_53";
1864
- const button$5 = "_button_5vnui_69";
1865
- const logo$5 = "_logo_5vnui_81";
1866
- const variant2$1 = "_variant2_5vnui_87";
1867
- const buttonText = "_buttonText_5vnui_91";
1868
- const legal$4 = "_legal_5vnui_107";
1868
+ const root$b = "_root_1dvwc_1";
1869
+ const body$4 = "_body_1dvwc_30";
1870
+ const bodyInner = "_bodyInner_1dvwc_38";
1871
+ const line = "_line_1dvwc_43";
1872
+ const text$3 = "_text_1dvwc_53";
1873
+ const button$5 = "_button_1dvwc_69";
1874
+ const logo$5 = "_logo_1dvwc_81";
1875
+ const variant2$1 = "_variant2_1dvwc_87";
1876
+ const buttonText = "_buttonText_1dvwc_91";
1877
+ const legal$4 = "_legal_1dvwc_108";
1869
1878
  const styles$b = {
1870
1879
  root: root$b,
1871
1880
  body: body$4,
@@ -2011,15 +2020,15 @@ const ComplexGift = () => {
2011
2020
  });
2012
2021
  };
2013
2022
  const index$5 = render(o(ComplexGift, {}));
2014
- const root$a = "_root_10an1_1";
2015
- const laptop$3 = "_laptop_10an1_11";
2016
- const tablet$2 = "_tablet_10an1_16";
2017
- const desktop$7 = "_desktop_10an1_21";
2018
- const body$3 = "_body_10an1_26";
2019
- const logo$4 = "_logo_10an1_37";
2020
- const text$2 = "_text_10an1_43";
2021
- const button$4 = "_button_10an1_47";
2022
- const legal$3 = "_legal_10an1_62";
2023
+ const root$a = "_root_1l0ud_1";
2024
+ const laptop$3 = "_laptop_1l0ud_11";
2025
+ const tablet$2 = "_tablet_1l0ud_16";
2026
+ const desktop$7 = "_desktop_1l0ud_21";
2027
+ const body$3 = "_body_1l0ud_26";
2028
+ const logo$4 = "_logo_1l0ud_37";
2029
+ const text$2 = "_text_1l0ud_43";
2030
+ const button$4 = "_button_1l0ud_47";
2031
+ const legal$3 = "_legal_1l0ud_62";
2023
2032
  const styles$a = {
2024
2033
  root: root$a,
2025
2034
  laptop: laptop$3,
@@ -2122,15 +2131,15 @@ const styles$8 = {
2122
2131
  title: title$2,
2123
2132
  wrapper: wrapper$1
2124
2133
  };
2125
- const root$7 = "_root_17kc6_1";
2126
- const desktop$5 = "_desktop_17kc6_10";
2127
- const header = "_header_17kc6_15";
2128
- const logo$3 = "_logo_17kc6_26";
2129
- const container = "_container_17kc6_32";
2130
- const body$2 = "_body_17kc6_43";
2131
- const text$1 = "_text_17kc6_60";
2132
- const button$3 = "_button_17kc6_83";
2133
- const legal$2 = "_legal_17kc6_101";
2134
+ const root$7 = "_root_1ska4_1";
2135
+ const desktop$5 = "_desktop_1ska4_10";
2136
+ const header = "_header_1ska4_15";
2137
+ const logo$3 = "_logo_1ska4_26";
2138
+ const container = "_container_1ska4_33";
2139
+ const body$2 = "_body_1ska4_44";
2140
+ const text$1 = "_text_1ska4_61";
2141
+ const button$3 = "_button_1ska4_84";
2142
+ const legal$2 = "_legal_1ska4_102";
2134
2143
  const styles$7 = {
2135
2144
  root: root$7,
2136
2145
  desktop: desktop$5,
@@ -2253,20 +2262,20 @@ const styles$6 = {
2253
2262
  buttonTarget,
2254
2263
  legal: legal$1
2255
2264
  };
2256
- const root$5 = "_root_10yn9_1";
2257
- const left$1 = "_left_10yn9_8";
2258
- const desktop$3 = "_desktop_10yn9_15";
2259
- const teams = "_teams_10yn9_19";
2260
- const logo$1 = "_logo_10yn9_25";
2261
- const league = "_league_10yn9_31";
2262
- const name = "_name_10yn9_36";
2263
- const right$1 = "_right_10yn9_42";
2264
- const odd$1 = "_odd_10yn9_53";
2265
- const oddLabel$1 = "_oddLabel_10yn9_66";
2266
- const oddValue = "_oddValue_10yn9_75";
2267
- const team$1 = "_team_10yn9_19";
2268
- const teamLogo$1 = "_teamLogo_10yn9_99";
2269
- const teamName$1 = "_teamName_10yn9_105";
2265
+ const root$5 = "_root_14sq5_1";
2266
+ const left$1 = "_left_14sq5_8";
2267
+ const desktop$3 = "_desktop_14sq5_15";
2268
+ const teams = "_teams_14sq5_19";
2269
+ const logo$1 = "_logo_14sq5_25";
2270
+ const league = "_league_14sq5_32";
2271
+ const name = "_name_14sq5_37";
2272
+ const right$1 = "_right_14sq5_43";
2273
+ const odd$1 = "_odd_14sq5_54";
2274
+ const oddLabel$1 = "_oddLabel_14sq5_67";
2275
+ const oddValue = "_oddValue_14sq5_76";
2276
+ const team$1 = "_team_14sq5_19";
2277
+ const teamLogo$1 = "_teamLogo_14sq5_100";
2278
+ const teamName$1 = "_teamName_14sq5_106";
2270
2279
  const styles$5 = {
2271
2280
  root: root$5,
2272
2281
  left: left$1,
@@ -2867,4 +2876,4 @@ export {
2867
2876
  index as WideCard,
2868
2877
  modifyState
2869
2878
  };
2870
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCIuLi9zcmMvaG9va3MvdXNlR2lmdE9wZW4udHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL2Rpc3QvanN4UnVudGltZS5tb2R1bGUuanMiLCIuLi9zcmMvU3RhdGVDb250ZXh0LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3JlbmRlci50c3giLCIuLi9zcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnbk1lcmdlVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zYWZlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2VEZWVwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi91dGlscy9kb20udHMiLCIuLi8uLi91dGlscy9pdGVyYXRvci50cyIsIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlLnRzIiwiLi4vc3JjL2hlbHBlcnMvcGFyc2VSdWxlcy50cyIsIi4uL3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQudHN4IiwiLi4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbi50c3giLCIuLi9zcmMvY29tcG9uZW50cy9HaWZ0SWNvbi50c3giLCIuLi9zcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcy50cyIsIi4uL3NyYy9oZWxwZXJzL2NvbnN0YW50cy50cyIsIi4uL3NyYy9ob29rcy91c2VNZXRyaWNzLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cy50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlR2lmdC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2NvbXBvbmVudHMvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4LnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9jb21wb25lbnRzL2xpbmUvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2NvbXBvbmVudHMvTWF0Y2gvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvVGV4dC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlcy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3by9pbmRleC50c3giLCIuLi9zcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0LnRzIiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cdHZhciBuYXRpdmVDb2RlU3RyaW5nID0gJ1tuYXRpdmUgY29kZV0nO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiaW1wb3J0e29wdGlvbnMgYXMgbn1mcm9tXCJwcmVhY3RcIjt2YXIgdCxyLHUsaSxvPTAsZj1bXSxjPVtdLGU9bi5fX2IsYT1uLl9fcix2PW4uZGlmZmVkLGw9bi5fX2MsbT1uLnVubW91bnQ7ZnVuY3Rpb24gZCh0LHUpe24uX19oJiZuLl9faChyLHQsb3x8dSksbz0wO3ZhciBpPXIuX19IfHwoci5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiB0Pj1pLl9fLmxlbmd0aCYmaS5fXy5wdXNoKHtfX1Y6Y30pLGkuX19bdF19ZnVuY3Rpb24gaChuKXtyZXR1cm4gbz0xLHMoQixuKX1mdW5jdGlvbiBzKG4sdSxpKXt2YXIgbz1kKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6Qih2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIudSkpe3ZhciBmPWZ1bmN0aW9uKG4sdCxyKXtpZighby5fX2MuX19IKXJldHVybiEwO3ZhciB1PW8uX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uX19jfSk7aWYodS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4hbi5fX059KSlyZXR1cm4hY3x8Yy5jYWxsKHRoaXMsbix0LHIpO3ZhciBpPSExO3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSwhKCFpJiZvLl9fYy5wcm9wcz09PW4pJiYoIWN8fGMuY2FsbCh0aGlzLG4sdCxyKSl9O3IudT0hMDt2YXIgYz1yLnNob3VsZENvbXBvbmVudFVwZGF0ZSxlPXIuY29tcG9uZW50V2lsbFVwZGF0ZTtyLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24obix0LHIpe2lmKHRoaXMuX19lKXt2YXIgdT1jO2M9dm9pZCAwLGYobix0LHIpLGM9dX1lJiZlLmNhbGwodGhpcyxuLHQscil9LHIuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ9cmV0dXJuIG8uX19OfHxvLl9ffWZ1bmN0aW9uIHAodSxpKXt2YXIgbz1kKHQrKywzKTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX0guX19oLnB1c2gobykpfWZ1bmN0aW9uIHkodSxpKXt2YXIgbz1kKHQrKyw0KTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX2gucHVzaChvKSl9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gbz01LEYoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpufX0sW10pfWZ1bmN0aW9uIEEobix0LHIpe289Nix5KGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj8obih0KCkpLGZ1bmN0aW9uKCl7cmV0dXJuIG4obnVsbCl9KTpuPyhuLmN1cnJlbnQ9dCgpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uY3VycmVudD1udWxsfSk6dm9pZCAwfSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIEYobixyKXt2YXIgdT1kKHQrKyw3KTtyZXR1cm4geih1Ll9fSCxyKT8odS5fX1Y9bigpLHUuaT1yLHUuX19oPW4sdS5fX1YpOnUuX199ZnVuY3Rpb24gVChuLHQpe3JldHVybiBvPTgsRihmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiBxKG4pe3ZhciB1PXIuY29udGV4dFtuLl9fY10saT1kKHQrKyw5KTtyZXR1cm4gaS5jPW4sdT8obnVsbD09aS5fXyYmKGkuX189ITAsdS5zdWIocikpLHUucHJvcHMudmFsdWUpOm4uX199ZnVuY3Rpb24geCh0LHIpe24udXNlRGVidWdWYWx1ZSYmbi51c2VEZWJ1Z1ZhbHVlKHI/cih0KTp0KX1mdW5jdGlvbiBQKG4pe3ZhciB1PWQodCsrLDEwKSxpPWgoKTtyZXR1cm4gdS5fXz1uLHIuY29tcG9uZW50RGlkQ2F0Y2h8fChyLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKG4sdCl7dS5fXyYmdS5fXyhuLHQpLGlbMV0obil9KSxbaVswXSxmdW5jdGlvbigpe2lbMV0odm9pZCAwKX1dfWZ1bmN0aW9uIFYoKXt2YXIgbj1kKHQrKywxMSk7aWYoIW4uX18pe2Zvcih2YXIgdT1yLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO3ZhciBpPXUuX19tfHwodS5fX209WzAsMF0pO24uX189XCJQXCIraVswXStcIi1cIitpWzFdKyt9cmV0dXJuIG4uX199ZnVuY3Rpb24gYigpe2Zvcih2YXIgdDt0PWYuc2hpZnQoKTspaWYodC5fX1AmJnQuX19IKXRyeXt0Ll9fSC5fX2guZm9yRWFjaChrKSx0Ll9fSC5fX2guZm9yRWFjaCh3KSx0Ll9fSC5fX2g9W119Y2F0Y2gocil7dC5fX0guX19oPVtdLG4uX19lKHIsdC5fX3YpfX1uLl9fYj1mdW5jdGlvbihuKXtyPW51bGwsZSYmZShuKX0sbi5fX3I9ZnVuY3Rpb24obil7YSYmYShuKSx0PTA7dmFyIGk9KHI9bi5fX2MpLl9fSDtpJiYodT09PXI/KGkuX19oPVtdLHIuX19oPVtdLGkuX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLl9fTiYmKG4uX189bi5fX04pLG4uX19WPWMsbi5fX049bi5pPXZvaWQgMH0pKTooaS5fX2guZm9yRWFjaChrKSxpLl9faC5mb3JFYWNoKHcpLGkuX19oPVtdKSksdT1yfSxuLmRpZmZlZD1mdW5jdGlvbih0KXt2JiZ2KHQpO3ZhciBvPXQuX19jO28mJm8uX19IJiYoby5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2gobykmJmk9PT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8aikoYikpLG8uX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5pJiYobi5fX0g9bi5pKSxuLl9fViE9PWMmJihuLl9fPW4uX19WKSxuLmk9dm9pZCAwLG4uX19WPWN9KSksdT1yPW51bGx9LG4uX19jPWZ1bmN0aW9uKHQscil7ci5zb21lKGZ1bmN0aW9uKHQpe3RyeXt0Ll9faC5mb3JFYWNoKGspLHQuX19oPXQuX19oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hbi5fX3x8dyhuKX0pfWNhdGNoKHUpe3Iuc29tZShmdW5jdGlvbihuKXtuLl9faCYmKG4uX19oPVtdKX0pLHI9W10sbi5fX2UodSx0Ll9fdil9fSksbCYmbCh0LHIpfSxuLnVubW91bnQ9ZnVuY3Rpb24odCl7bSYmbSh0KTt2YXIgcix1PXQuX19jO3UmJnUuX19IJiYodS5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXt0cnl7ayhuKX1jYXRjaChuKXtyPW59fSksdS5fX0g9dm9pZCAwLHImJm4uX19lKHIsdS5fX3YpKX07dmFyIGc9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGoobil7dmFyIHQscj1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KSxnJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0KSxzZXRUaW1lb3V0KG4pfSx1PXNldFRpbWVvdXQociwxMDApO2cmJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24gayhuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiB3KG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiB6KG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7VCBhcyB1c2VDYWxsYmFjayxxIGFzIHVzZUNvbnRleHQseCBhcyB1c2VEZWJ1Z1ZhbHVlLHAgYXMgdXNlRWZmZWN0LFAgYXMgdXNlRXJyb3JCb3VuZGFyeSxWIGFzIHVzZUlkLEEgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSx5IGFzIHVzZUxheW91dEVmZmVjdCxGIGFzIHVzZU1lbW8scyBhcyB1c2VSZWR1Y2VyLF8gYXMgdXNlUmVmLGggYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsY3JlYXRlQ29udGV4dCxjcmVhdGVFbGVtZW50LGNyZWF0ZVJlZn1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlU3RhdGUgYXMgYSx1c2VJZCBhcyBzLHVzZVJlZHVjZXIgYXMgaCx1c2VFZmZlY3QgYXMgdix1c2VMYXlvdXRFZmZlY3QgYXMgZCx1c2VSZWYgYXMgcCx1c2VJbXBlcmF0aXZlSGFuZGxlIGFzIG0sdXNlTWVtbyBhcyB5LHVzZUNhbGxiYWNrIGFzIF8sdXNlQ29udGV4dCBhcyBiLHVzZURlYnVnVmFsdWUgYXMgU31mcm9tXCJwcmVhY3QvaG9va3NcIjtleHBvcnQqZnJvbVwicHJlYWN0L2hvb2tzXCI7ZnVuY3Rpb24gZyhuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXTtyZXR1cm4gbn1mdW5jdGlvbiBDKG4sdCl7Zm9yKHZhciBlIGluIG4paWYoXCJfX3NvdXJjZVwiIT09ZSYmIShlIGluIHQpKXJldHVybiEwO2Zvcih2YXIgciBpbiB0KWlmKFwiX19zb3VyY2VcIiE9PXImJm5bcl0hPT10W3JdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEUobix0KXtyZXR1cm4gbj09PXQmJigwIT09bnx8MS9uPT0xL3QpfHxuIT1uJiZ0IT10fWZ1bmN0aW9uIHcobil7dGhpcy5wcm9wcz1ufWZ1bmN0aW9uIHgobixlKXtmdW5jdGlvbiByKG4pe3ZhciB0PXRoaXMucHJvcHMucmVmLHI9dD09bi5yZWY7cmV0dXJuIXImJnQmJih0LmNhbGw/dChudWxsKTp0LmN1cnJlbnQ9bnVsbCksZT8hZSh0aGlzLnByb3BzLG4pfHwhcjpDKHRoaXMucHJvcHMsbil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9cix0KG4sZSl9cmV0dXJuIHUuZGlzcGxheU5hbWU9XCJNZW1vKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsdS5fX2Y9ITAsdX0ody5wcm90b3R5cGU9bmV3IG4pLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLHcucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBDKHRoaXMucHJvcHMsbil8fEModGhpcy5zdGF0ZSx0KX07dmFyIFI9ZS5fX2I7ZS5fX2I9ZnVuY3Rpb24obil7bi50eXBlJiZuLnR5cGUuX19mJiZuLnJlZiYmKG4ucHJvcHMucmVmPW4ucmVmLG4ucmVmPW51bGwpLFImJlIobil9O3ZhciBOPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKXx8MzkxMTtmdW5jdGlvbiBrKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9Zyh7fSx0KTtyZXR1cm4gZGVsZXRlIGUucmVmLG4oZSx0LnJlZnx8bnVsbCl9cmV0dXJuIHQuJCR0eXBlb2Y9Tix0LnJlbmRlcj10LHQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9dC5fX2Y9ITAsdC5kaXNwbGF5TmFtZT1cIkZvcndhcmRSZWYoXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdH12YXIgQT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1uP251bGw6cihyKG4pLm1hcCh0KSl9LE89e21hcDpBLGZvckVhY2g6QSxjb3VudDpmdW5jdGlvbihuKXtyZXR1cm4gbj9yKG4pLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKG4pe3ZhciB0PXIobik7aWYoMSE9PXQubGVuZ3RoKXRocm93XCJDaGlsZHJlbi5vbmx5XCI7cmV0dXJuIHRbMF19LHRvQXJyYXk6cn0sVD1lLl9fZTtlLl9fZT1mdW5jdGlvbihuLHQsZSxyKXtpZihuLnRoZW4pZm9yKHZhciB1LG89dDtvPW8uX187KWlmKCh1PW8uX19jKSYmdS5fX2MpcmV0dXJuIG51bGw9PXQuX19lJiYodC5fX2U9ZS5fX2UsdC5fX2s9ZS5fX2spLHUuX19jKG4sdCk7VChuLHQsZSxyKX07dmFyIEk9ZS51bm1vdW50O2Z1bmN0aW9uIEwobix0LGUpe3JldHVybiBuJiYobi5fX2MmJm4uX19jLl9fSCYmKG4uX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpfSksbi5fX2MuX19IPW51bGwpLG51bGwhPShuPWcoe30sbikpLl9fYyYmKG4uX19jLl9fUD09PWUmJihuLl9fYy5fX1A9dCksbi5fX2M9bnVsbCksbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gTChuLHQsZSl9KSksbn1mdW5jdGlvbiBVKG4sdCxlKXtyZXR1cm4gbiYmKG4uX192PW51bGwsbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVShuLHQsZSl9KSxuLl9fYyYmbi5fX2MuX19QPT09dCYmKG4uX19lJiZlLmluc2VydEJlZm9yZShuLl9fZSxuLl9fZCksbi5fX2MuX19lPSEwLG4uX19jLl9fUD1lKSksbn1mdW5jdGlvbiBEKCl7dGhpcy5fX3U9MCx0aGlzLnQ9bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEYobil7dmFyIHQ9bi5fXy5fX2M7cmV0dXJuIHQmJnQuX19hJiZ0Ll9fYShuKX1mdW5jdGlvbiBNKG4pe3ZhciBlLHIsdTtmdW5jdGlvbiBvKG8pe2lmKGV8fChlPW4oKSkudGhlbihmdW5jdGlvbihuKXtyPW4uZGVmYXVsdHx8bn0sZnVuY3Rpb24obil7dT1ufSksdSl0aHJvdyB1O2lmKCFyKXRocm93IGU7cmV0dXJuIHQocixvKX1yZXR1cm4gby5kaXNwbGF5TmFtZT1cIkxhenlcIixvLl9fZj0hMCxvfWZ1bmN0aW9uIFYoKXt0aGlzLnU9bnVsbCx0aGlzLm89bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmdC5fX1ImJnQuX19SKCksdCYmITA9PT1uLl9faCYmKG4udHlwZT1udWxsKSxJJiZJKG4pfSwoRC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLnQmJihyLnQ9W10pLHIudC5wdXNoKGUpO3ZhciB1PUYoci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fChvPSEwLGUuX19SPW51bGwsdT91KGwpOmwoKSl9O2UuX19SPWk7dmFyIGw9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1VKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLnQucG9wKCk7KXQuZm9yY2VVcGRhdGUoKX19LGM9ITA9PT10Ll9faDtyLl9fdSsrfHxjfHxyLnNldFN0YXRlKHtfX2E6ci5fX2I9ci5fX3YuX19rWzBdfSksbi50aGVuKGksaSl9LEQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy50PVtdfSxELnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obixlKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG89dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09TCh0aGlzLl9fYixyLG8uX19PPW8uX19QKX10aGlzLl9fYj1udWxsfXZhciBpPWUuX19hJiZ0KHUsbnVsbCxuLmZhbGxiYWNrKTtyZXR1cm4gaSYmKGkuX19oPW51bGwpLFt0KHUsbnVsbCxlLl9fYT9udWxsOm4uY2hpbGRyZW4pLGldfTt2YXIgVz1mdW5jdGlvbihuLHQsZSl7aWYoKytlWzFdPT09ZVswXSYmbi5vLmRlbGV0ZSh0KSxuLnByb3BzLnJldmVhbE9yZGVyJiYoXCJ0XCIhPT1uLnByb3BzLnJldmVhbE9yZGVyWzBdfHwhbi5vLnNpemUpKWZvcihlPW4udTtlOyl7Zm9yKDtlLmxlbmd0aD4zOyllLnBvcCgpKCk7aWYoZVsxXTxlWzBdKWJyZWFrO24udT1lPWVbMl19fTtmdW5jdGlvbiBQKG4pe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHR9LG4uY2hpbGRyZW59ZnVuY3Rpb24gaihuKXt2YXIgZT10aGlzLHI9bi5pO2UuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtvKG51bGwsZS5sKSxlLmw9bnVsbCxlLmk9bnVsbH0sZS5pJiZlLmkhPT1yJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCksbi5fX3Y/KGUubHx8KGUuaT1yLGUubD17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxhcHBlbmRDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaS5hcHBlbmRDaGlsZChuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihuKT4+PjEsMSksZS5pLnJlbW92ZUNoaWxkKG4pfX0pLG8odChQLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUubCkpOmUubCYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWZ1bmN0aW9uIHoobixlKXt2YXIgcj10KGose19fdjpuLGk6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShWLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1GKHQuX192KSxyPXQuby5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxXKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sVi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMudT1udWxsLHRoaXMubz1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLm8uc2V0KHRbZV0sdGhpcy51PVsxLDAsdGhpcy51XSk7cmV0dXJuIG4uY2hpbGRyZW59LFYucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1WLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5vLmZvckVhY2goZnVuY3Rpb24odCxlKXtXKG4sZSx0KX0pfTt2YXIgQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsSD0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxaPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sWT0vW0EtWjAtOV0vZywkPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxxPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIEcobix0LGUpe3JldHVybiBudWxsPT10Ll9fayYmKHQudGV4dENvbnRlbnQ9XCJcIiksbyhuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9ZnVuY3Rpb24gSihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgSz1lLmV2ZW50O2Z1bmN0aW9uIFEoKXt9ZnVuY3Rpb24gWCgpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX1mdW5jdGlvbiBubigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gSyYmKG49SyhuKSksbi5wZXJzaXN0PVEsbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1YLG4uaXNEZWZhdWx0UHJldmVudGVkPW5uLG4ubmF0aXZlRXZlbnQ9bn07dmFyIHRuLGVuPXtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHJuPWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbihuKXtcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiZmdW5jdGlvbihuKXt2YXIgdD1uLnByb3BzLGU9bi50eXBlLHU9e307Zm9yKHZhciBvIGluIHQpe3ZhciBpPXRbb107aWYoIShcInZhbHVlXCI9PT1vJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09aXx8JCYmXCJjaGlsZHJlblwiPT09byYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09b3x8XCJjbGFzc05hbWVcIj09PW8pKXt2YXIgbD1vLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PW8mJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/bz1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09byYmITA9PT1pP2k9XCJcIjpcIm9uZG91YmxlY2xpY2tcIj09PWw/bz1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1sfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxxKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1sP289XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09bD9vPVwib25mb2N1c291dFwiOloudGVzdChvKT9vPWw6LTE9PT1lLmluZGV4T2YoXCItXCIpJiZILnRlc3Qobyk/bz1vLnJlcGxhY2UoWSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpOm51bGw9PT1pJiYoaT12b2lkIDApOmw9bz1cIm9uaW5wdXRcIixcIm9uaW5wdXRcIj09PWwmJnVbbz1sXSYmKG89XCJvbmlucHV0Q2FwdHVyZVwiKSx1W29dPWl9fVwic2VsZWN0XCI9PWUmJnUubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodS52YWx1ZSkmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPS0xIT11LnZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSl9KSksXCJzZWxlY3RcIj09ZSYmbnVsbCE9dS5kZWZhdWx0VmFsdWUmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPXUubXVsdGlwbGU/LTEhPXUuZGVmYXVsdFZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSk6dS5kZWZhdWx0VmFsdWU9PW4ucHJvcHMudmFsdWV9KSksdC5jbGFzcyYmIXQuY2xhc3NOYW1lPyh1LmNsYXNzPXQuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJjbGFzc05hbWVcIixlbikpOih0LmNsYXNzTmFtZSYmIXQuY2xhc3N8fHQuY2xhc3MmJnQuY2xhc3NOYW1lKSYmKHUuY2xhc3M9dS5jbGFzc05hbWU9dC5jbGFzc05hbWUpLG4ucHJvcHM9dX0obiksbi4kJHR5cGVvZj1CLHJuJiZybihuKX07dmFyIHVuPWUuX19yO2UuX19yPWZ1bmN0aW9uKG4pe3VuJiZ1bihuKSx0bj1uLl9fY307dmFyIG9uPWUuZGlmZmVkO2UuZGlmZmVkPWZ1bmN0aW9uKG4pe29uJiZvbihuKTt2YXIgdD1uLnByb3BzLGU9bi5fX2U7bnVsbCE9ZSYmXCJ0ZXh0YXJlYVwiPT09bi50eXBlJiZcInZhbHVlXCJpbiB0JiZ0LnZhbHVlIT09ZS52YWx1ZSYmKGUudmFsdWU9bnVsbD09dC52YWx1ZT9cIlwiOnQudmFsdWUpLHRuPW51bGx9O3ZhciBsbj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRuLl9fbltuLl9fY10ucHJvcHMudmFsdWV9fX19LGNuPVwiMTcuMC4yXCI7ZnVuY3Rpb24gZm4obil7cmV0dXJuIHQuYmluZChudWxsLG4pfWZ1bmN0aW9uIGFuKG4pe3JldHVybiEhbiYmbi4kJHR5cGVvZj09PUJ9ZnVuY3Rpb24gc24obil7cmV0dXJuIGFuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24gdm4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgZG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0scG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sbW49dTtmdW5jdGlvbiB5bihuKXtuKCl9ZnVuY3Rpb24gX24obil7cmV0dXJuIG59ZnVuY3Rpb24gYm4oKXtyZXR1cm5bITEseW5dfXZhciBTbj1kO2Z1bmN0aW9uIGduKG4sdCl7dmFyIGU9dCgpLHI9YSh7aDp7X186ZSx2OnR9fSksdT1yWzBdLmgsbz1yWzFdO3JldHVybiBkKGZ1bmN0aW9uKCl7dS5fXz1lLHUudj10LEUodS5fXyx0KCkpfHxvKHtoOnV9KX0sW24sZSx0XSksdihmdW5jdGlvbigpe3JldHVybiBFKHUuX18sdS52KCkpfHxvKHtoOnV9KSxuKGZ1bmN0aW9uKCl7RSh1Ll9fLHUudigpKXx8byh7aDp1fSl9KX0sW25dKSxlfXZhciBDbj17dXNlU3RhdGU6YSx1c2VJZDpzLHVzZVJlZHVjZXI6aCx1c2VFZmZlY3Q6dix1c2VMYXlvdXRFZmZlY3Q6ZCx1c2VJbnNlcnRpb25FZmZlY3Q6U24sdXNlVHJhbnNpdGlvbjpibix1c2VEZWZlcnJlZFZhbHVlOl9uLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmduLHN0YXJ0VHJhbnNpdGlvbjp5bix1c2VSZWY6cCx1c2VJbXBlcmF0aXZlSGFuZGxlOm0sdXNlTWVtbzp5LHVzZUNhbGxiYWNrOl8sdXNlQ29udGV4dDpiLHVzZURlYnVnVmFsdWU6Uyx2ZXJzaW9uOlwiMTcuMC4yXCIsQ2hpbGRyZW46TyxyZW5kZXI6RyxoeWRyYXRlOkosdW5tb3VudENvbXBvbmVudEF0Tm9kZTpobixjcmVhdGVQb3J0YWw6eixjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6Zm4sY2xvbmVFbGVtZW50OnNuLGNyZWF0ZVJlZjpjLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6YW4sZmluZERPTU5vZGU6dm4sQ29tcG9uZW50Om4sUHVyZUNvbXBvbmVudDp3LG1lbW86eCxmb3J3YXJkUmVmOmssZmx1c2hTeW5jOnBuLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmRuLFN0cmljdE1vZGU6bW4sU3VzcGVuc2U6RCxTdXNwZW5zZUxpc3Q6VixsYXp5Ok0sX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6bG59O2V4cG9ydHtPIGFzIENoaWxkcmVuLHcgYXMgUHVyZUNvbXBvbmVudCxtbiBhcyBTdHJpY3RNb2RlLEQgYXMgU3VzcGVuc2UsViBhcyBTdXNwZW5zZUxpc3QsbG4gYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc24gYXMgY2xvbmVFbGVtZW50LGZuIGFzIGNyZWF0ZUZhY3RvcnkseiBhcyBjcmVhdGVQb3J0YWwsQ24gYXMgZGVmYXVsdCx2biBhcyBmaW5kRE9NTm9kZSxwbiBhcyBmbHVzaFN5bmMsayBhcyBmb3J3YXJkUmVmLEogYXMgaHlkcmF0ZSxhbiBhcyBpc1ZhbGlkRWxlbWVudCxNIGFzIGxhenkseCBhcyBtZW1vLEcgYXMgcmVuZGVyLHluIGFzIHN0YXJ0VHJhbnNpdGlvbixobiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLGRuIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLF9uIGFzIHVzZURlZmVycmVkVmFsdWUsU24gYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LGduIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGJuIGFzIHVzZVRyYW5zaXRpb24sY24gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRPcGVuID0gKGRlbGF5ID0gMTAwMCkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3Qgb25Ub2dnbGUgPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpXG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzT3Blbih0cnVlKVxuICAgIH0sIGRlbGF5KVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICB9LCBbZGVsYXldKVxuXG4gIHJldHVybiB7XG4gICAgaXNPcGVuLFxuICAgIG9uVG9nZ2xlXG4gIH1cbn1cbiIsImltcG9ydHtvcHRpb25zIGFzIHJ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciBfPTA7ZnVuY3Rpb24gbyhvLGUsbix0LGYsbCl7dmFyIHMsdSxhPXt9O2Zvcih1IGluIGUpXCJyZWZcIj09dT9zPWVbdV06YVt1XT1lW3VdO3ZhciBpPXt0eXBlOm8scHJvcHM6YSxrZXk6bixyZWY6cyxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fZDp2b2lkIDAsX19jOm51bGwsX19oOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLV8sX19zb3VyY2U6ZixfX3NlbGY6bH07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbyYmKHM9by5kZWZhdWx0UHJvcHMpKWZvcih1IGluIHMpdm9pZCAwPT09YVt1XSYmKGFbdV09c1t1XSk7cmV0dXJuIHIudm5vZGUmJnIudm5vZGUoaSksaX1leHBvcnR7byBhcyBqc3gsbyBhcyBqc3hERVYsbyBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ByZWFjdCdcblxuZXhwb3J0IGNvbnN0IFN0YXRlID0gY3JlYXRlQ29udGV4dCgpXG5cbmNvbnN0IFN0YXRlQ29udGV4dCA9ICh7IGNoaWxkcmVuLCB2YWx1ZSB9KSA9PiB7XG4gIHJldHVybiA8U3RhdGUuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9TdGF0ZS5Qcm92aWRlcj5cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250ZXh0XG4iLCJpbXBvcnQgeyBDb21wb25lbnRDaGlsZCwgQ29udGFpbmVyTm9kZSwgcmVuZGVyIGFzIHByZWFjdFJlbmRlciB9IGZyb20gJ3ByZWFjdCdcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vU3RhdGVDb250ZXh0J1xuXG5leHBvcnQgY29uc3QgcmVuZGVyID0gKHZOb2RlOiBDb21wb25lbnRDaGlsZCkgPT4gKHRhcmdldDogQ29udGFpbmVyTm9kZSwgc3RhdGU/OiBhbnkpID0+XG4gIHByZWFjdFJlbmRlcig8U3RhdGVDb250ZXh0IHZhbHVlPXtzdGF0ZX0+e3ZOb2RlfTwvU3RhdGVDb250ZXh0PiwgdGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gXCIuLi9TdGF0ZUNvbnRleHRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUN1cnJlbnRTdGF0ZSA9IDxUVmFsdWUgPSB1bmtub3duPigpID0+IHVzZUNvbnRleHQ8VFZhbHVlPihTdGF0ZSlcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbk1lcmdlVmFsdWU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZU9iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlR2V0O1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9QbGFpbk9iamVjdDtcbiIsInZhciBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0JyksXG4gICAgdG9QbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vdG9QbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZURlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFzc2lnbk1lcmdlVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25NZXJnZVZhbHVlJyksXG4gICAgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBiYXNlTWVyZ2VEZWVwID0gcmVxdWlyZSgnLi9fYmFzZU1lcmdlRGVlcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyksXG4gICAgc2FmZUdldCA9IHJlcXVpcmUoJy4vX3NhZmVHZXQnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBrZXlzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0l0ZXJhdGVlQ2FsbDtcbiIsInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2lnbmVyO1xuIiwidmFyIGJhc2VNZXJnZSA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZScpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2U7XG4iLCJcbmludGVyZmFjZSBJbmplY3RMaW5rT3B0aW9ucyB7XG4gIHJlbDogc3RyaW5nXG4gIGhyZWY6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgaW5qZWN0TGluayA9KG9wdGlvbnM6IEluamVjdExpbmtPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpXG5cbiAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBsaW5rLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSlcblxuICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xufVxuIiwiaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tICcuL3R5cGVzJ1xuXG50eXBlIFZpc2l0b3IgPSBDYWxsYmFjazxbUHJvcGVydHlLZXksIHVua25vd25dPlxuXG5leHBvcnQgY29uc3QgaXRlcmF0b3IgPSAoaW5wdXQ6IHVua25vd24sIHZpc2l0b3I6IFZpc2l0b3IpOiBhbnkgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXQubWFwKChlbCwgaW5kZXgpID0+IGl0ZXJhdG9yKHZpc2l0b3IoaW5kZXgsIGVsKSwgdmlzaXRvcikpXG4gIH1cblxuICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpbnB1dCkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBpdGVyYXRvcih2aXNpdG9yKGtleSwgdmFsdWUpLCB2aXNpdG9yKVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30gYXMgYW55KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0XG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IGxvZGFzaE1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSdcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT5cbiAgIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGlzVmFsdWUgPSA8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBFeGNsdWRlPFQsIG51bGwgfCB1bmRlZmluZWQ+ID0+ICFpc0VtcHR5VmFsdWUodmFsdWUpXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3QgY3JlYXRlQ29uc3RhbnRzID0gPEsgZXh0ZW5kcyBzdHJpbmc+KC4uLmNvbnN0YW50czogS1tdKSA9PiB7XG4gIHJldHVybiBjb25zdGFudHMucmVkdWNlPHsgW1AgaW4gS106IFAgfT4oKGFjYywgY29uc3RhbnQpID0+IHtcbiAgICBhY2NbY29uc3RhbnRdID0gY29uc3RhbnRcbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9IGFzIHsgW1AgaW4gS106IFAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IHBpY2sgPSA8VFZhbHVlIGV4dGVuZHMgQW55T2JqZWN0PihvYmo6IFRWYWx1ZSwgLi4ucHJvcHM6IChrZXlvZiBUVmFsdWUpW10pID0+IHtcbiAgcmV0dXJuIHByb3BzLnJlZHVjZSgocmVzdWx0LCBwcm9wKSA9PiB7XG4gICAgcmVzdWx0W3Byb3BdID0gb2JqW3Byb3BdXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LCB7fSBhcyBhbnkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbWl0PFQgZXh0ZW5kcyBBbnlPYmplY3QsIFAgZXh0ZW5kcyBzdHJpbmdbXT4ob2JqOiBULCAuLi5wcm9wczogUCk6IE9taXQ8VCwgUFtudW1iZXJdPiB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cbiAgcHJvcHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICBkZWxldGUgcmVzdWx0W3Byb3BdXG4gIH0pXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IGdldCA9IChvYmo6IEFueU9iamVjdCwgcGF0aDogc3RyaW5nLCBkZWZWYWx1ZT86IHVua25vd24pOiBhbnkgPT4ge1xuICBpZiAoIXBhdGgpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG4gIGNvbnN0IHJlc3VsdCA9IHBhdGhBcnJheS5yZWR1Y2UoKHByZXZPYmo6IEFueU9iamVjdCwga2V5OiBzdHJpbmcpID0+IHByZXZPYmogJiYgcHJldk9ialtrZXldLCBvYmopXG4gIC8vIElmIGZvdW5kIHZhbHVlIGlzIHVuZGVmaW5lZCByZXR1cm4gZGVmYXVsdCB2YWx1ZTsgb3RoZXJ3aXNlIHJldHVybiB0aGUgdmFsdWVcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmVmFsdWUgOiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IHNldCA9IChvYmo6IEFueU9iamVjdCwgcGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBwYXRoQXJyYXkgPSAoQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKSkgYXMgc3RyaW5nW11cblxuICByZXR1cm4gcGF0aEFycmF5LnJlZHVjZSgoYWNjLCBrZXksIGkpID0+IHtcbiAgICBpZiAoYWNjW2tleV0gPT09IHVuZGVmaW5lZCkgYWNjW2tleV0gPSB7fVxuICAgIGlmIChpID09PSBwYXRoQXJyYXkubGVuZ3RoIC0gMSkgYWNjW2tleV0gPSB2YWx1ZVxuICAgIHJldHVybiBhY2Nba2V5XVxuICB9LCBvYmopXG59XG5cbmV4cG9ydCBjb25zdCBoZXhUb1JnYiA9IChoZXg6IHN0cmluZykgPT4ge1xuICBjb25zdCBjaGFycyA9IGhleC5zbGljZSgxKVxuXG4gIGlmIChjaGFycy5sZW5ndGggPT09IDMpIHtcbiAgICBoZXggPSBjaGFyc1xuICAgICAgLnNwbGl0KCcnKVxuICAgICAgLm1hcCh2YWwgPT4gYCR7dmFsfSR7dmFsfWApXG4gICAgICAuam9pbignJylcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpXG5cbiAgcmV0dXJuIHJlc3VsdFxuICAgID8ge1xuICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcbiAgICAgICAgZzogcGFyc2VJbnQocmVzdWx0WzJdLCAxNiksXG4gICAgICAgIGI6IHBhcnNlSW50KHJlc3VsdFszXSwgMTYpXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IGlzSnNvblNhbWUgPSAoLi4udmFsdWVzOiB1bmtub3duW10pID0+IHtcbiAgcmV0dXJuIHZhbHVlcy5tYXAodmFsdWUgPT4gSlNPTi5zdHJpbmdpZnkodmFsdWUpKS5ldmVyeSgodmFsLCBfLCBhcnIpID0+IHZhbCA9PT0gYXJyWzBdKVxufVxuXG5leHBvcnQgY29uc3QgcmdiVG9SZ2JhID0gKHJnYjogc3RyaW5nLCBhbHBoYSA9IDEpOiBzdHJpbmcgPT4gcmdiLnJlcGxhY2UoJyknLCBgLCAke2FscGhhfSlgKS5yZXBsYWNlKCdyZ2InLCAncmdiYScpXG5cbmV4cG9ydCBjb25zdCBtZXJnZSA9IGxvZGFzaE1lcmdlXG5cbmV4cG9ydCBjb25zdCBkZXZpY2VzID0gWydkZXNrdG9wJywgJ2xhcHRvcCcsICd0YWJsZXQnLCAnbW9iaWxlJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IEJSRUFLUE9JTlRTID0ge1xuICBtb2JpbGU6IDMyMCxcbiAgdGFibGV0OiA3NjgsXG4gIGxhcHRvcDogMTAyNCxcbiAgZGVza3RvcDogMTkyMFxufSBhcyBjb25zdFxuXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJ1xuZXhwb3J0ICogZnJvbSAnLi9kb20nXG5leHBvcnQgKiBmcm9tICcuL2l0ZXJhdG9yJ1xuIiwiaW1wb3J0IHsgQW55T2JqZWN0LCBEZXZpY2UsIGRldmljZXMsIEV4dHJhY3RSdWxlcywgaXNWYWx1ZSwgaXRlcmF0b3IsIExheWVyLCBSdWxlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBBbnlTdGF0ZSB9IGZyb20gJy4uL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBpc1ZhbGlkTGF5ZXIgPSAoc3RhdGU6IEFueU9iamVjdCA9IHt9KTogc3RhdGUgaXMgTGF5ZXIgPT5cbiAgdHlwZW9mIHN0YXRlID09PSAnb2JqZWN0JyAmJiBpc1ZhbHVlKHN0YXRlKSAmJiBkZXZpY2VzLmV2ZXJ5KGRldmljZSA9PiBkZXZpY2UgaW4gc3RhdGUpXG5cbmV4cG9ydCBjb25zdCBnZXRSdWxlcyA9IDxUU3RhdGUgZXh0ZW5kcyBBbnlTdGF0ZSwgVERldmljZSBleHRlbmRzIERldmljZSA9ICdkZXNrdG9wJz4oXG4gIHN0YXRlOiBUU3RhdGUsXG4gIGRldmljZTogVERldmljZVxuKTogRXh0cmFjdFJ1bGVzPFRTdGF0ZSwgVERldmljZT4gPT4ge1xuICBpZiAoIXN0YXRlKSByZXR1cm4gc3RhdGVcblxuICByZXR1cm4gaXRlcmF0b3Ioc3RhdGUsIChfa2V5LCB2YWx1ZTogYW55KSA9PiB7XG4gICAgaWYgKGlzVmFsaWRMYXllcih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdFJ1bGVzID0gdmFsdWVbZGV2aWNlXVxuICAgICAgaWYgKCdwYXJlbnQnIGluIHJlc3VsdFJ1bGVzICYmIGlzVmFsdWUocmVzdWx0UnVsZXMucGFyZW50KSkge1xuICAgICAgICByZXR1cm4gdmFsdWVbcmVzdWx0UnVsZXMucGFyZW50XVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdFJ1bGVzXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0pIGFzIEV4dHJhY3RSdWxlczxUU3RhdGUsIFREZXZpY2U+XG59XG4iLCJpbXBvcnQgeyBEZXZpY2UgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IGdldFJ1bGVzIH0gZnJvbSAnLi4vaGVscGVycy9nZXREZXZpY2VTdGF0ZSdcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnLi4vcHJvbW9zL1NpbXBsZUdpZnQvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCB1c2VHZXRSdWxlcyA9IDxUU3RhdGUgZXh0ZW5kcyBBbnlTdGF0ZSwgVERldmljZSBleHRlbmRzIERldmljZT4oc3RhdGU6IFRTdGF0ZSwgZGV2aWNlOiBURGV2aWNlKSA9PlxuICBnZXRSdWxlczxUU3RhdGUsIFREZXZpY2U+KHN0YXRlLCBkZXZpY2UpXG4iLCJpbXBvcnQgeyBCUkVBS1BPSU5UUywgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IE11dGFibGVSZWYgfSBmcm9tICdwcmVhY3QvaG9va3MnXG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgdGFyZ2V0UmVmOiBNdXRhYmxlUmVmPEhUTUxEaXZFbGVtZW50PlxuICAvKipcbiAgICogUHJvbW8g0LLRgdGC0YDQsNC40LLQsNC10YLRgdGPINCyINGA0LDQt9C90YvQtSBET00g0Lgg0LzRiyDQvdC1INC30L3QsNC10Lwg0YDQsNC30LzQtdGAINC60LDQutC+0LPQviDQutC+0L3RgtC10LnQvdC10YDQsFxuICAgKiDRj9Cy0LvRj9C10YLRgdGPINC90YPQttC90YvQvC4g0J3QsNC/0YDQuNC80LXRgCBHaWZ0KiDQt9Cw0L3QuNC80LDQtdGCINCy0YHQtdCz0L4gMzBweCwg0Lgg0L3QtdC+0LHRhdC+0LTQuNC80YvQuSDQutC+0L3RgtC10LnQvdC10YBcbiAgICog0LzQvtC20LXRgiDQvdCw0YXQvtC00LjRgtGM0YHRjyDQs9C+0YDQsNC30LTQviDQstGL0YjQtS5cbiAgICovXG4gIHBhcmVudEtleT86IHN0cmluZ1xuICBicmVha3BvaW50cz86IHR5cGVvZiBCUkVBS1BPSU5UU1xufVxuXG5leHBvcnQgY29uc3QgdXNlQ29udGFpbmVyRGV2aWNlID0gKHtcbiAgdGFyZ2V0UmVmLFxuICBwYXJlbnRLZXkgPSAnZGV2aWNlLWNvbnRhaW5lcicsXG4gIGJyZWFrcG9pbnRzID0gQlJFQUtQT0lOVFNcbn06IE9wdGlvbnMpID0+IHtcbiAgY29uc3QgW2RldmljZSwgc2V0RGV2aWNlXSA9IHVzZVN0YXRlPERldmljZT4oJ2Rlc2t0b3AnKVxuXG4gIGNvbnN0IGNoZWNrRGV2aWNlID0gKHBhcmVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBwYXJlbnRXaWR0aCA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwXG4gICAgY29uc3Qgc29ydGVkQnJlYWtwb2ludHMgPSBPYmplY3QuZW50cmllcyh7IC4uLmJyZWFrcG9pbnRzIH0pLnNvcnQoKFtfMSwgdmFsdWVBXSwgW18yLCB2YWx1ZUJdKSA9PiB2YWx1ZUEgLSB2YWx1ZUIpXG5cbiAgICBjb25zdCBmaW5kRGV2aWNlID1cbiAgICAgIChzb3J0ZWRCcmVha3BvaW50cy5maW5kKChbXzEsIHZhbHVlXSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgW18yLCBuZXh0VmFsdWVdID0gc29ydGVkQnJlYWtwb2ludHNbaW5kZXggKyAxXSB8fCBbXVxuXG4gICAgICAgIHJldHVybiBwYXJlbnRXaWR0aCA+PSB2YWx1ZSAmJiBwYXJlbnRXaWR0aCA8IG5leHRWYWx1ZVxuICAgICAgfSk/LlswXSBhcyBEZXZpY2UpIHx8ICdkZXNrdG9wJ1xuXG4gICAgc2V0RGV2aWNlKGZpbmREZXZpY2UpXG4gIH1cblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0YXJnZXRSZWYuY3VycmVudC5jbG9zZXN0KGBbZGF0YS0ke3BhcmVudEtleX1dYClcblxuICAgIGlmIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiBjaGVja0RldmljZShwYXJlbnRFbGVtZW50KSlcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocGFyZW50RWxlbWVudClcblxuICAgICAgY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHJldHVybiBkZXZpY2Vcbn1cbiIsImltcG9ydCB7IEFueU9iamVjdCwgZGV2aWNlcywgRml0T3B0aW9uLCBoZXhUb1JnYiwgaXNFbXB0eVZhbHVlLCBpc1ZhbHVlLCByZ2JUb1JnYmEgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IEVtaXR0ZXJUeXBlIH0gZnJvbSAnc3JjL3JlbmRlckRyaXZlcidcbmltcG9ydCB7IGluamVjdFN0eWxlUnVsZXMsIFN0eWxlUnVsZXMgfSBmcm9tICdzcmMvdXRpbHMvaW5qZWN0U3R5bGVSdWxlcydcbmltcG9ydCB7IGlzVmFsaWRTdHlsZUtleSB9IGZyb20gJy4vaXNWYWxpZFN0eWxlS2V5J1xuXG4vKipcbiAqINCf0LvQsNCz0LjQvSDQv9GA0LjQvNC10L3Rj9C10YIg0L/RgNCw0LLQuNC70LA6INGB0YLQuNC70LgsIGlubmVyVGV4dCAuLi5cbiAqINCV0YHQu9C4INC60L7QvdGC0LXQvdGC0LAg0L3QtdGCLCDRgtC+INCd0L7QtNCwINGB0LrRgNGL0LLQsNC10YLRgdGPXG4gKi9cblxudHlwZSBDdXN0b21TdHlsZXMgPSBQYXJ0aWFsPFxuICBPbWl0PFN0eWxlUnVsZXMsICdib3JkZXJXaWR0aCcgfCAnbWluSGVpZ2h0JyB8ICdtaW5XaWR0aCcgfCAnZm9udFNpemUnPiAmIHtcbiAgICBtaW5IZWlnaHQ6IG51bWJlclxuICAgIG1pbldpZHRoOiBudW1iZXJcbiAgICBmb250U2l6ZTogbnVtYmVyXG4gIH1cbj5cblxuZGVjbGFyZSBtb2R1bGUgJ3NyYy9yZW5kZXJEcml2ZXInIHtcbiAgaW50ZXJmYWNlIFJlbmRlckRyaXZlclJ1bGUgZXh0ZW5kcyBDdXN0b21TdHlsZXMge1xuICAgIGlubmVySFRNTD86IHN0cmluZ1xuICAgIGlubmVyVGV4dD86IHN0cmluZ1xuICAgIGNvcm5lcj86IG51bWJlclxuICAgIGJhY2tncm91bmRGaXQ/OiBGaXRPcHRpb25cbiAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5PzogbnVtYmVyXG4gICAgaXNCb2xkPzogYm9vbGVhblxuICAgIGlzSXRhbGljPzogYm9vbGVhblxuICAgIGlzVGhyb3VnaD86IGJvb2xlYW5cbiAgICAkYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XG4gIH1cbn1cblxuY29uc3Qgd3JhcFRvID0gKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIHVudGlsOiAnJScgfCAncHgnKSA9PiBgJHt2YWx1ZX0ke3VudGlsfWBcblxuY29uc3QgdG9QeCA9IChrZXk6IHN0cmluZykgPT4ga2V5LnN0YXJ0c1dpdGgoJ3B4XycpXG5jb25zdCB0b1BlcmNlbnQgPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdwZXJjZW50XycpXG5cbmNvbnN0IGZvcm1hdFJ1bGUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgbGV0IG5ld0tleSA9IGtleVxuICBsZXQgbmV3VmFsdWUgPSB2YWx1ZVxuXG4gIGlmICh0b1B4KG5ld0tleSkpIHtcbiAgICBuZXdLZXkgPSBuZXdLZXkucmVwbGFjZSgncHhfJywgJycpXG4gICAgbmV3VmFsdWUgPSB3cmFwVG8odmFsdWUsICdweCcpXG4gIH1cbiAgaWYgKHRvUGVyY2VudChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3BlcmNlbnRfJywgJycpXG4gICAgbmV3VmFsdWUgPSB3cmFwVG8odmFsdWUsICclJylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAga2V5OiBuZXdLZXksXG4gICAgdmFsdWU6IG5ld1ZhbHVlXG4gIH1cbn1cblxuY29uc3QgREVGQVVMVF9UT19QWCA9IFtcbiAgJ2JvcmRlcldpZHRoJyxcbiAgJ2JvcmRlckxlZnRXaWR0aCcsXG4gICdib3JkZXJSaWdodFdpZHRoJyxcbiAgJ2JvcmRlclRvcFdpZHRoJyxcbiAgJ2JvcmRlckJvdHRvbVdpZHRoJyxcbiAgJ21pbkhlaWdodCcsXG4gICdtaW5XaWR0aCcsXG4gICdtYXhXaWR0aCcsXG4gICdtYXhIZWlnaHQnLFxuICAnZm9udFNpemUnLFxuICAnaGVpZ2h0JyxcbiAgJ3dpZHRoJyxcbiAgJ2xldHRlclNwYWNpbmcnLFxuICAnZm9udFNpemUnLFxuICAnbGVmdCcsXG4gICdyaWdodCcsXG4gICd0b3AnLFxuICAnYm90dG9tJyxcbiAgJ21hcmdpblRvcCcsXG4gICdtYXJnaW5Cb3R0b20nLFxuICAnbWFyZ2luTGVmdCcsXG4gICdtYXJnaW5SaWdodCcsXG4gICdwYWRkaW5nVG9wJyxcbiAgJ3BhZGRpbmdCb3R0b20nLFxuICAncGFkZGluZ0xlZnQnLFxuICAncGFkZGluZ1JpZ2h0J1xuXVxuXG5leHBvcnQgY29uc3QgcGFyc2VSdWxlcyA9IChydWxlczogQW55T2JqZWN0LCBsYXllcj86IHN0cmluZykgPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocnVsZXMpXG5cbiAgaWYgKGtleXMuaW5jbHVkZXMoJ2lubmVySFRNTCcpIHx8IGtleXMuaW5jbHVkZXMoJ2lubmVyVGV4dCcpKSB7XG4gICAgY29uc29sZS53YXJuKGBXYXJuaW5nISBJbm5lckhUTUwgYW5kIGlubmVyVGV4dCBpcyBkZXByZWNhdGVkLiBVc2UgXCJjaGlsZHJlblwiIHByb3BlcnR5LmAsIGxheWVyKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBydWxlcyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gcnVsZXNcbiAgfVxuXG4gIGlmICgndHlwb2dyYXBoeScgaW4gcnVsZXMgJiYgJ2FjY2VudFR5cG9ncmFwaHknIGluIHJ1bGVzKSB7XG4gICAgY29uc3QgdHlwb2dyYXBoeSA9IHJ1bGVzLnR5cG9ncmFwaHlcbiAgICBjb25zdCBhY2NlbnRUeXBvZ3JhcGh5ID0gcnVsZXMuYWNjZW50VHlwb2dyYXBoeVxuXG4gICAgcnVsZXMgPSB7XG4gICAgICAuLi5ydWxlcyxcbiAgICAgIC4uLnR5cG9ncmFwaHksXG4gICAgICAnLS1mb250LWZhbWlseSc6IGFjY2VudFR5cG9ncmFwaHkuZm9udEZhbWlseSxcbiAgICAgICctLWFjY2VudC1jb2xvcic6IGFjY2VudFR5cG9ncmFwaHkuY29sb3IsXG4gICAgICAncHhfLS1hY2NlbnQtc2l6ZSc6IGFjY2VudFR5cG9ncmFwaHkuZm9udFNpemVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocnVsZXMpLnJlZHVjZSgoYWNjLCBbcHJvcEtleSwgcHJvcFZhbHVlXSkgPT4ge1xuICAgIGlmIChERUZBVUxUX1RPX1BYLmluY2x1ZGVzKHByb3BLZXkpKSB7XG4gICAgICBwcm9wVmFsdWUgPSB3cmFwVG8ocHJvcFZhbHVlLCAncHgnKVxuICAgIH1cblxuICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gZm9ybWF0UnVsZShwcm9wS2V5LCBwcm9wVmFsdWUpXG4gICAgYWNjW2tleV0gPSB2YWx1ZVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgIGFjYy5pbm5lckhUTUwgPSBpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lclRleHQnKSB7XG4gICAgICBhY2MuaW5uZXJUZXh0ID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBhY2MuY2hpbGRyZW4gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gKGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnKSA6IHZhbHVlXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcgfHwga2V5ID09PSAnaW5uZXJUZXh0JyB8fCBrZXkgPT09ICdjaGlsZHJlbicpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfSBlbHNlIGlmIChpc0VtcHR5VmFsdWUodmFsdWUpKSB7XG4gICAgICAgIGFjYy5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleS5pbmNsdWRlcygnYm9yZGVyV2lkdGgnKSkge1xuICAgICAgYWNjLmJvcmRlclN0eWxlID0gJ3NvbGlkJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdjb3JuZXInKSB7XG4gICAgICBhY2MuYm9yZGVyUmFkaXVzID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kRml0Jykge1xuICAgICAgYWNjLmJhY2tncm91bmRTaXplID0gdmFsdWUgYXMgRml0T3B0aW9uXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRJbWFnZScgJiYgaXNWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7dmFsdWV9KWBcbiAgICAgIGFjYy5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZENvbG9yT3BhY2l0eScgJiYgaXNWYWx1ZShhY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSkgJiYgaXNWYWx1ZShhY2MuYmFja2dyb3VuZENvbG9yKSkge1xuICAgICAgY29uc3QgcmdiID0gaGV4VG9SZ2IoYWNjLmJhY2tncm91bmRDb2xvcilcbiAgICAgIGlmIChyZ2IpIHtcbiAgICAgICAgYWNjLmJhY2tncm91bmRDb2xvciA9IHJnYlRvUmdiYShgcmdiKCR7cmdiLnJ9LCAke3JnYi5nfSwgJHtyZ2IuYn0pYCwgK2FjYy5iYWNrZ3JvdW5kQ29sb3JPcGFjaXR5IC8gMTAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0JvbGQnKSB7XG4gICAgICBhY2MuZm9udFdlaWdodCA9IHZhbHVlID8gJ2JvbGQnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzSXRhbGljJykge1xuICAgICAgYWNjLmZvbnRTdHlsZSA9IHZhbHVlID8gJ2l0YWxpYycgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNUaHJvdWdoJykge1xuICAgICAgYWNjLnRleHREZWNvcmF0aW9uID0gdmFsdWUgPyAnbGluZS10aHJvdWdoJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIHJldHVybiBhY2NcbiAgfSwgcnVsZXMpXG59XG4iLCJpbXBvcnQgeyBwYXJzZVJ1bGVzIH0gZnJvbSAnLi4vaGVscGVycy9wYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5cbmNvbnN0IGlzVmFsaWRSdWxlID0gKHJ1bGU6IEFueU9iamVjdCkgPT4gdHlwZW9mIHJ1bGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJ1bGUpICYmICdwYXJlbnQnIGluIHJ1bGVcblxuZXhwb3J0IGNvbnN0IHVzZVBhcnNlUnVsZXMgPSAoc3RhdGU6IHVua25vd24pID0+XG4gIE9iamVjdC5lbnRyaWVzKHN0YXRlKS5yZWR1Y2UoKGFjYywgW2xheWVyLCBydWxlXSkgPT4ge1xuICAgIGFjY1tsYXllcl0gPSBpc1ZhbGlkUnVsZShydWxlKSA/IHBhcnNlUnVsZXMoeyAuLi5zdGF0ZVtsYXllcl0gfSwgbGF5ZXIpIDogcnVsZVxuXG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSlcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgY2hpbGRyZW46IHN0cmluZ1xufVxuXG5jb25zdCBEaXNwbGF5VGV4dDogRkM8UHJvcHM+ID0gKHsgY2hpbGRyZW4sIC4uLnJlc3QgfSkgPT4ge1xuICBjb25zdCBmb3JtYXRWYWx1ZSA9IGNoaWxkcmVuPy5yZXBsYWNlKCdzY3JpcHQnLCAnJyk/LnJlcGxhY2UoL3t7KC4qPyl9fS9nLCBgPHNwYW4+JDE8L3NwYW4+YClcblxuICByZXR1cm4gPGRpdiB7Li4ucmVzdH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBmb3JtYXRWYWx1ZSB9fSAvPlxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXNwbGF5VGV4dFxuIiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5leHBvcnQgY29uc3QgdXNlVG9nZ2xlID0gKCkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgcmV0dXJuIFtpc09wZW4sICgpID0+IHNldElzT3BlbihwcmV2ID0+ICFwcmV2KV1cbn1cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgQ2xvc2VJY29uOiBGQyA9ICgpID0+IChcbiAgPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDI0IDI0Jz5cbiAgICA8cGF0aFxuICAgICAgZD0nTTE3LjY1OSA0LjkyOWExIDEgMCAxIDEgMS40MTQgMS40MTRMMTMuNDE2IDEybDUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNSAxLjQxNGwtNS42NTYtNS42NTctNS42NTcgNS42NTdhMSAxIDAgMCAxLTEuNDE0LTEuNDE0TDEwLjU4NyAxMiA0LjkzMSA2LjM0M0ExIDEgMCAxIDEgNi4zNDUgNC45M2w1LjY1NyA1LjY1NyA1LjY1Ni01LjY1N1onXG4gICAgICBmaWxsPSdjdXJyZW50Q29sb3InXG4gICAgPjwvcGF0aD5cbiAgPC9zdmc+XG4pXG5cbmV4cG9ydCBkZWZhdWx0IENsb3NlSWNvblxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuXG5jb25zdCBHaWZ0SWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgdmlld0JveD0nMCAwIDE2IDE2Jz5cbiAgICA8cGF0aFxuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgICAgZmlsbFJ1bGU9J2V2ZW5vZGQnXG4gICAgICBkPSdNMi4xMyA4SDd2Ny4zMUgzLjIyYTEuMDkgMS4wOSAwIDAxLTEuMDktMS4wOXpNOSAxNS4zNGgzLjgxYTEuMDkgMS4wOSAwIDAwMS4wOS0xLjA5VjhIOXptNS44LTkuOTR2MS4xOWEuNDguNDggMCAwMS0uNDguNDhIMS43MWEuNDguNDggMCAwMS0uNDgtLjQ4VjUuNGMwLS41OTYuNDg0LTEuMDggMS4wOC0xLjA4SDVhMi40OCAyLjQ4IDAgMDEtMS40Ny0xLjY1IDEuNjIgMS42MiAwIDAxLjI2LTEuNCAxLjU3IDEuNTcgMCAwMTEtLjU4Yy4xMS0uMDEuMjItLjAxLjMzIDBhMi41IDIuNSAwIDAxMiAxQTkgOSAwIDAxOCAzLjIyYTEwLjM4IDEwLjM4IDAgMDEuOTEtMS41NCAyLjQ5IDIuNDkgMCAwMTEuOTMtMWguMzZjLjM2OS4wNjUuNzAyLjI2Ljk0LjU1LjMxLjQwNy40MTQuOTM2LjI4IDEuNDNhMi40OCAyLjQ4IDAgMDEtMS40NSAxLjY0aDIuNzdhMS4wOCAxLjA4IDAgMDExLjAzIDEuMXpNOC42NiA0YTkuODEgOS44MSAwIDAwMS45LS41NSAxLjUyIDEuNTIgMCAwMC44OC0xIC42OC42OCAwIDAwLS4xLS41OS42LjYgMCAwMC0uMzQtLjIyLjU4LjU4IDAgMDAtLjE4IDAgMS41MiAxLjUyIDAgMDAtMS4xNy42M0E5LjA2IDkuMDYgMCAwMDguNjYgNHptLTMuMzItLjU4QTkuNjIgOS42MiAwIDAwNy4yNSA0YTguNTkgOC41OSAwIDAwLTEtMS43MiAxLjUxIDEuNTEgMCAwMC0xLjE4LS42M2gtLjEzYS42Ni42NiAwIDAwLS4zOS4yMi42Ni42NiAwIDAwLS4wOS41N2MuMTMuNDQzLjQ1My44MDQuODguOTh6J1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBHaWZ0SWNvblxuIiwiaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJy4uL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbHVlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5cbnR5cGUgQW5pbWF0aW9uTmFtZSA9ICdmYWRlJyB8ICdwdWxzZScgfCAnd2lnZ2xlJyB8ICdncmFkaWVudCdcblxuY29uc3QgYW5pbWF0aW9uc01hcCA9IChhbmltYXRpb25zOiBSZWNvcmQ8QW5pbWF0aW9uTmFtZSwgc3RyaW5nPikgPT4gKHtcbiAgZmFkZTogYCR7YW5pbWF0aW9ucy5mYWRlfSAycyBsaW5lYXIgaW5maW5pdGVgLFxuICBwdWxzZTogYCR7YW5pbWF0aW9ucy5wdWxzZX0gLjNzIGxpbmVhciAwcyBpbmZpbml0ZSBhbHRlcm5hdGUgZm9yd2FyZHNgLFxuICB3aWdnbGU6IGAke2FuaW1hdGlvbnMud2lnZ2xlfSAycyBsaW5lYXIgaW5maW5pdGVgLFxuICBncmFkaWVudDogYCR7YW5pbWF0aW9ucy5ncmFkaWVudH0gM3MgZWFzZSBpbmZpbml0ZWAsXG59KVxuXG5leHBvcnQgY29uc3QgdXNlR2lmdFJ1bGVzID0gKGRldmljZVN0YXRlOiB1bmtub3duLCBhbmltYXRpb25zOiBSZWNvcmQ8QW5pbWF0aW9uTmFtZSwgc3RyaW5nPikgPT4ge1xuICBjb25zdCBmdWxsQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnNNYXAoYW5pbWF0aW9ucylcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBoYXNJY29uID0gcnVsZXM/Lmljb24/Lmhhc0ljb25cblxuICBjb25zdCBhcnJvd1J1bGVzID0ge1xuICAgIGxlZnQ6IGAkeysoZGV2aWNlU3RhdGU/LmNvbnRhaW5lcj8ubGVmdCB8fCAwKSAqIC0xICsgOH1weGAsXG4gICAgYmFja2dyb3VuZENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wV2lkdGg6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlcldpZHRoLFxuICAgIGJvcmRlclRvcENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJDb2xvcixcbiAgICBib3JkZXJUb3BTdHlsZTogJ3NvbGlkJyxcbiAgICBib3JkZXJMZWZ0V2lkdGg6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlcldpZHRoLFxuICAgIGJvcmRlckxlZnRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyTGVmdFN0eWxlOiAnc29saWQnXG4gIH1cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgbGVmdDogcnVsZXM/LmNvbnRhaW5lcj8ubGVmdFxuICB9XG5cbiAgY29uc3QgYWxsQW5pbWF0aW9ucyA9IChydWxlcz8uaWNvbj8uYW5pbWF0aW9ucyB8fCBbXSlcbiAgICAubWFwKChhbmltYXRpb246IEFuaW1hdGlvbk5hbWUpID0+IGZ1bGxBbmltYXRpb25zW2FuaW1hdGlvbl0pXG4gICAgLmpvaW4oJywgJylcblxuICBjb25zdCBiYWNrZ3JvdW5kU3R5bGVzID1cbiAgICBpc1ZhbHVlKHJ1bGVzPy5pY29uPy5ncmFkaWVudENvbG9yKSAmJiBydWxlcz8uaWNvbj8uYW5pbWF0aW9ucy5pbmNsdWRlcygnZ3JhZGllbnQnKVxuICAgICAgPyB7XG4gICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgtOTBkZWcsICR7cnVsZXMuaWNvbj8uYmFja2dyb3VuZENvbG9yfSAwJSwgJHtydWxlcz8uaWNvbj8uZ3JhZGllbnRDb2xvcn0gMTAwJSkgMCUgMCUgLyA0MDAlIDQwMCVgLFxuICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnNDAwJSA0MDAlJ1xuICAgICAgICB9XG4gICAgICA6IHt9XG5cbiAgY29uc3QgaWNvblJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5pY29uIHx8IHt9LFxuICAgIGFuaW1hdGlvbjogYWxsQW5pbWF0aW9ucyxcbiAgICAuLi5iYWNrZ3JvdW5kU3R5bGVzXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhhc0ljb24sXG4gICAgYXJyb3dSdWxlcyxcbiAgICBib2R5UnVsZXMsXG4gICAgaWNvblJ1bGVzXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kT3B0aW9ucyA9IFsnYmFja2dyb3VuZENvbG9yJywgJ2JhY2tncm91bmRDb2xvck9wYWNpdHknLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRGaXQnXVxuXG5leHBvcnQgY29uc3Qgc3BhY2luZ09wdGlvbnMgPSBbXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCdcbl1cblxuXG5leHBvcnQgY29uc3Qgbm9vcFlhTWV0cmlrYSA9IChnb2FsOiBzdHJpbmcpID0+IGNvbnNvbGUubG9nKGBOb29wIFlhTWVrdGlrYSByZWFjaCBnb2FsOiAke2dvYWx9YClcbmV4cG9ydCBjb25zdCBub29wQWRGb3ggPSAoZ29hbDogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhgTm9vcCBBZEZveCByZWFjaCBnb2FsOiAke2dvYWx9YClcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IGlzSnNvblNhbWUsIHBpY2sgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IG5vb3BBZEZveCwgbm9vcFlhTWV0cmlrYSB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IHVzZU1ldHJpY3MgPSAoc3RhdGU6IHVua25vd24sIGxheWVyTmFtZSA9ICdyb290JykgPT4ge1xuICBjb25zdCBzYXZlTWV0cmljcyA9IHVzZVJlZigpXG4gIGNvbnN0IHlhUmVhY2hHb2FsID0gc3RhdGUueWFSZWFjaEdvYWwgfHwgbm9vcFlhTWV0cmlrYVxuICBjb25zdCBhZGZveFJlYWNoR29hbCA9IHN0YXRlLmFkZm94UmVhY2hHb2FsIHx8IG5vb3BBZEZveFxuICBjb25zdCBtZXRyaWNzID0gcGljayhzdGF0ZVtsYXllck5hbWVdLCAneWFTaG93JywgJ3lhQ2xpY2snLCAnYWRmb3hTaG93JywgJ2FkZm94Q2xpY2snKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0pzb25TYW1lKHNhdmVNZXRyaWNzLmN1cnJlbnQsIG1ldHJpY3MpKSB7XG4gICAgICBpZiAobWV0cmljcy55YVNob3cpIHtcbiAgICAgICAgeWFSZWFjaEdvYWwobWV0cmljcy55YVNob3cpXG4gICAgICB9XG4gICAgICBpZiAobWV0cmljcy55YVNob3cpIHtcbiAgICAgICAgYWRmb3hSZWFjaEdvYWwobWV0cmljcy5hZGZveFNob3cpXG4gICAgICB9XG4gICAgfVxuICAgIHNhdmVNZXRyaWNzLmN1cnJlbnQgPSBtZXRyaWNzXG4gIH0sIFttZXRyaWNzXSlcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChtZXRyaWNzLnlhQ2xpY2spIHtcbiAgICAgIHlhUmVhY2hHb2FsKG1ldHJpY3MueWFDbGljaylcbiAgICB9XG4gICAgaWYgKG1ldHJpY3MuYWRmb3hDbGljaykge1xuICAgICAgYWRmb3hSZWFjaEdvYWwobWV0cmljcy5hZGZveENsaWNrKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaW5qZWN0TGluaywgaXRlcmF0b3IgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Eb3dubG9hZC9wcmVhY3QtaGVsbWV0L2lzc3Vlcy8zNFxuXG5leHBvcnQgY29uc3QgdXNlRXh0cmFjdEZvbnRzID0gKHN0YXRlOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IGZvbnRzID0gbmV3IFNldChbXSlcblxuICBpdGVyYXRvcihzdGF0ZSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICBpZiAoa2V5ID09PSAnZm9udEZhbWlseScpIHtcbiAgICAgIGZvbnRzLmFkZCh2YWx1ZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfSlcblxuICBjb25zdCBmb250TGlua3MgPSB1c2VNZW1vKCgpID0+IEFycmF5LmZyb20oZm9udHMudmFsdWVzKCkpLm1hcChmb250ID0+ICh7XG4gICAgcmVsOiAnc3R5bGVzaGVldCcsXG4gICAgaHJlZjogYGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT0ke2ZvbnR9OjMwMCw0MDAsNTAwLDcwMCZkaXNwbGF5PXN3YXBgXG4gIH0pKSwgW2ZvbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZvbnRMaW5rcy5mb3JFYWNoKChsaW5rKSA9PiBpbmplY3RMaW5rKGxpbmspKVxuICB9LCBbZm9udExpbmtzXSlcbn1cbiIsImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VHaWZ0T3BlbiB9IGZyb20gJ3NyYy9ob29rcy91c2VHaWZ0T3BlbidcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tICdzcmMvaG9va3MvdXNlVG9nZ2xlJ1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9DbG9zZUljb24nXG5pbXBvcnQgR2lmdEljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvR2lmdEljb24nXG5pbXBvcnQgeyB1c2VHaWZ0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcydcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcbmltcG9ydCB7IHVzZUV4dHJhY3RGb250cyB9IGZyb20gJ3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMnXG5cbmNvbnN0IFNpbXBsZUdpZnQ6IEZDPFN0YXRlPiA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBbbGVnYWxJc09wZW4sIHRvZ2dsZUxlZ2FsSXNPcGVuXSA9IHVzZVRvZ2dsZSgpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlPFN0YXRlPigpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IHsgaXNPcGVuLCBvblRvZ2dsZSB9ID0gdXNlR2lmdE9wZW4oZGV2aWNlU3RhdGU/LmNvbnRhaW5lcj8uZGVsYXkpXG4gIGNvbnN0IHsgaGFzSWNvbiwgaWNvblJ1bGVzLCBib2R5UnVsZXMsIGFycm93UnVsZXMgfSA9IHVzZUdpZnRSdWxlcyhkZXZpY2VTdGF0ZSwge1xuICAgIGZhZGU6IHN0eWxlcy5mYWRlaW4sXG4gICAgcHVsc2U6IHN0eWxlcy5wdWxzZSxcbiAgICB3aWdnbGU6IHN0eWxlcy53aWdnbGUsXG4gICAgZ3JhZGllbnQ6IHN0eWxlcy5ncmFkaWVudFxuICB9KVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9IHJlZj17cm9vdFJlZn0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb259IHN0eWxlPXtpY29uUnVsZXN9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAge2hhc0ljb24gJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblRhcmdldH0+XG4gICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJvZHksIHsgW3N0eWxlcy5ib2R5T3Blbl06IGlzT3BlbiB9KX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9IHN0eWxlPXthcnJvd1J1bGVzfT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZX0gc3R5bGU9e3J1bGVzLmNsb3NlfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtydWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgIDxhIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfSB0YXJnZXQ9J19ibGFuaycgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJyBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5uZXJ9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfT48L2Rpdj5cbiAgICAgICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgICAgICB7cnVsZXM/LnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgW3N0eWxlcy5idXR0b25BbmltYXRlZF06IHJ1bGVzLmJ1dHRvbi5pc0FuaW1hdGVkXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICBzdHlsZT17cnVsZXMuYnV0dG9ufVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmxlZ2FsLCB7XG4gICAgICAgICAgICAgIFtzdHlsZXMubGVnYWxPcGVuXTogbGVnYWxJc09wZW5cbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgc3R5bGU9e3J1bGVzLmxlZ2FsfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgICAgIDxzcGFuPntydWxlcz8ubGVnYWw/LmNoaWxkcmVufTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxCdXR0b259IG9uQ2xpY2s9e3RvZ2dsZUxlZ2FsSXNPcGVufT5cbiAgICAgICAgICAgICAgICB7bGVnYWxJc09wZW4gPyBydWxlcz8ubGVnYWw/LmJ1dHRvbk9wZW5UZXh0IDogcnVsZXM/LmxlZ2FsPy5idXR0b25IaWRlVGV4dH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlR2lmdCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcblxuY29uc3QgQm9udXNDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGluZX0gc3R5bGU9e3J1bGVzLmxpbmV9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keUlubmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAgPERpc3BsYXlUZXh0PntydWxlcy50ZXh0Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvblRleHR9PntydWxlcy5idXR0b24/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c0NhcmRcbiIsImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUdpZnRPcGVuIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUdpZnRPcGVuJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IEJvbnVzQ2FyZCBmcm9tICcuL2NvbXBvbmVudHMvQm9udXNDYXJkJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcbmltcG9ydCB7IHVzZUdpZnRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy9wcm9tb3MvdXNlR2lmdFJ1bGVzJ1xuaW1wb3J0IHsgcGljayB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuXG5jb25zdCBDb21wbGV4R2lmdCA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCB7IGlzT3Blbiwgb25Ub2dnbGUgfSA9IHVzZUdpZnRPcGVuKClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgeyBoYXNJY29uLCBpY29uUnVsZXMsIGJvZHlSdWxlcywgYXJyb3dSdWxlcyB9ID0gdXNlR2lmdFJ1bGVzKGRldmljZVN0YXRlLCB7XG4gICAgZmFkZTogc3R5bGVzLmZhZGVpbixcbiAgICBwdWxzZTogc3R5bGVzLnB1bHNlLFxuICAgIHdpZ2dsZTogc3R5bGVzLndpZ2dsZSxcbiAgICBncmFkaWVudDogc3R5bGVzLmdyYWRpZW50XG4gIH0pXG4gIGNvbnN0IGhhc1RpdGxlSWNvbiA9IHJ1bGVzPy50aXRsZT8uaGFzSWNvblxuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3Jvb3RSZWZ9IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgfSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBzdHlsZT17aWNvblJ1bGVzfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgIHtoYXNJY29uICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25UYXJnZXR9PlxuICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5ib2R5LCB7XG4gICAgICAgICAgW3N0eWxlcy5ib2R5T3Blbl06IGlzT3BlblxuICAgICAgICB9KX1cbiAgICAgICAgc3R5bGU9e2JvZHlSdWxlc31cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cnVsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlfSBzdHlsZT17cnVsZXMuY2xvc2V9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnByb21vdGlvbn0gc3R5bGU9e3J1bGVzLnByb21vdGlvbn0+XG4gICAgICAgICAgICB7cnVsZXMucHJvbW90aW9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWR9PlxuICAgICAgICAgICAge2hhc1RpdGxlSWNvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZEljb259IHN0eWxlPXtwaWNrKHJ1bGVzLnRpdGxlLCAnY29sb3InKX0+XG4gICAgICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZFRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PntydWxlcy50aXRsZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICAgICAgICA8Qm9udXNDYXJkIC8+XG4gICAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxDb21wbGV4R2lmdCAvPilcblxuLy8gaW1wb3J0IHsgRW1pdHRlclR5cGUgfSBmcm9tIFwic3JjXCI7XG4vLyBpbXBvcnQgeyBpc0VtcHR5VmFsdWUsIGlzVmFsdWUgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbi8vXG5cbi8vXG4vLyBleHBvcnQgZGVmYXVsdCAoZW1pdHRlcjogRW1pdHRlclR5cGUpID0+IHtcbi8vICAgZW1pdHRlci5vbigncmVuZGVyTm9kZScsICh7IHJ1bGUsIGxheWVyIH0pID0+IHtcbi8vICAgICBpZiAoJyRhbmltYXRpb25zJyBpbiBydWxlKSB7XG4vLyAgICAgICBjb25zdCBhbGxBbmltYXRpb25zID0gcnVsZS4kYW5pbWF0aW9uc1xuLy8gICAgICAgICAubWFwKChhbmltYXRpb246IGtleW9mIHR5cGVvZiBhbmltYXRpb25zTWFwKSA9PiBhbmltYXRpb25zTWFwW2FuaW1hdGlvbl0pXG4vLyAgICAgICAgIC5qb2luKCcsICcpXG4vL1xuLy8gICAgICAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4vLyAgICAgICAgIGlzVmFsdWUocnVsZS4kZ3JhZGllbnRDb2xvcikgJiYgcnVsZS4kYW5pbWF0aW9ucy5pbmNsdWRlcygnZ3JhZGllbnQnKVxuLy8gICAgICAgICAgID8ge1xuLy8gICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgtOTBkZWcsICR7cnVsZS5iYWNrZ3JvdW5kQ29sb3J9IDAlLCAke3J1bGUuJGdyYWRpZW50Q29sb3J9IDEwMCUpYCxcbi8vICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnNDAwJSA0MDAlJ1xuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgICA6IHt9XG4vL1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGljb246IHtcbi8vICAgICAgICAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4vLyAgICAgICAgICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAnaWNvbicgJiYgIWlzRW1wdHlWYWx1ZShydWxlLmhhc0ljb24pKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaWNvblRhcmdldDoge1xuLy8gICAgICAgICAgIGRpc3BsYXk6IHJ1bGUuaGFzSWNvbiA/ICdmbGV4JyA6ICdub25lJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAndGl0bGUnKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaGVhZGVySWNvbjoge1xuLy8gICAgICAgICAgIGRpc3BsYXk6IHJ1bGUuaGFzSWNvbiA/ICdibG9jaycgOiAnbm9uZSdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ2NvbnRhaW5lcicpIHtcbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBib2R5OiB7XG4vLyAgICAgICAgICAgJGRlbGF5OiBydWxlLmRlbGF5LFxuLy8gICAgICAgICAgIGxlZnQ6IHJ1bGUubGVmdFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICBhcnJvdzoge1xuLy8gICAgICAgICAgIGxlZnQ6IGAkeysocnVsZS5sZWZ0IHx8IDApICogLTEgKyA4fWAsXG4vLyAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBydWxlLmJhY2tncm91bmRDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJUb3BXaWR0aDogcnVsZS5ib3JkZXJXaWR0aCxcbi8vICAgICAgICAgICBib3JkZXJUb3BDb2xvcjogcnVsZS5ib3JkZXJDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJUb3BTdHlsZTogJ3NvbGlkJyxcbi8vICAgICAgICAgICBib3JkZXJMZWZ0V2lkdGg6IHJ1bGUuYm9yZGVyV2lkdGgsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdENvbG9yOiBydWxlLmJvcmRlckNvbG9yLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vICAgfSlcbi8vIH1cbiIsImV4cG9ydCBjb25zdCBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggPSAodGV4dEFsaWduPzogc3RyaW5nKSA9PlxuICB0ZXh0QWxpZ24gPyB7IGxlZnQ6ICdmbGV4LXN0YXJ0JywgY2VudGVyOiAnY2VudGVyJywgcmlnaHQ6ICdmbGV4LWVuZCcgfVt0ZXh0QWxpZ25dIDogdGV4dEFsaWduXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTGluZTogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8RGlzcGxheVRleHQ+e3J1bGVzPy5yb290Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tIFwic3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4XCI7XG5pbXBvcnQgTGluZSBmcm9tICcuL2NvbXBvbmVudHMvbGluZSdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tIFwic3JjL2hvb2tzL3VzZU1ldHJpY3NcIjtcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfS8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgeyhydWxlcz8uY2hpbGRyZW4gfHwgW10pLm1hcChlbCA9PiAoXG4gICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtlbH0+XG4gICAgICAgICAgICAgIDxMaW5lIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgIHtidXR0b25SdWxlcz8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17bGVnYWxSdWxlc30+XG4gICAgICAgICAge2xlZ2FsUnVsZXM/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQsIHBpY2sgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgc3BhY2luZ09wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSBcInNyYy9ob29rcy91c2VNZXRyaWNzXCI7XG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLnNwYWNpbmdPcHRpb25zKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IHN0eWxlPXtydWxlcy5oZWFkZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3BpY2socnVsZXMucm9vdCwgLi4uc3BhY2luZ09wdGlvbnMpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299PjwvZGl2PlxuICAgICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICB7cnVsZXMudGV4dD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IE1hdGNoOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICB9KX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1zfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlYWd1ZX0gc3R5bGU9e3J1bGVzLmxlYWd1ZX0+e3J1bGVzLmxlYWd1ZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5uYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUF9IOKAlCB7cnVsZXMudGVhbXM/LnRlYW1CfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUF9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cnVsZXMub2RkTGFiZWx9PntydWxlcy5vZGRMYWJlbD8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRWYWx1ZX0gc3R5bGU9e3J1bGVzLm9kZFZhbHVlfT57cnVsZXMub2RkVmFsdWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299Lz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUJ9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tICdzcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgnXG5pbXBvcnQgTWF0Y2ggZnJvbSAnLi9jb21wb25lbnRzL01hdGNoJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBzZXQoZGV2aWNlU3RhdGUsICdidXR0b25XcmFwcGVyLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uV3JhcHBlcj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5yb290LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5jb250ZW50LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IHRleHRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy50ZXh0LFxuICAgIHRleHRBbGlnbjogcnVsZXMucm9vdD8uYWxpZ25cbiAgfVxuXG4gIGNvbnN0IGJ1dHRvblJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5idXR0b24sXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICBjb25zdCBsZWdhbFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5sZWdhbCxcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnXG4gICAgICB9KX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfSBzdHlsZT17Y29udGVudFJ1bGVzfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PlxuICAgICAgICAgICAgICA8TWF0Y2ggLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3RleHRSdWxlc30+XG4gICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uSGVhZH0gc3R5bGU9e3J1bGVzLmJ1dHRvbkhlYWR9PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbkhlYWQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uVGFyZ2V0fSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17bGVnYWxSdWxlc30+XG4gICAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VUb2dnbGUnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZUlzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17cnVsZXMuYmFja2dyb3VuZH0gLz5cbiAgICAgIDxhXG4gICAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93Rmlyc3R9IHN0eWxlPXtydWxlcy5yb3dGaXJzdH0+XG4gICAgICAgICAgICB7cnVsZXMucm93Rmlyc3Q/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93U2Vjb25kfSBzdHlsZT17cnVsZXMucm93U2Vjb25kfT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dTZWNvbmQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9va21ha2VyfT53aW5saW5lPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmxlZ2FsLCB7XG4gICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbEluZm99XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgPHNwYW4+e3J1bGVzLmxlZ2FsSW5mbz8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBzdHlsZT17cnVsZXMubGVnYWxJbmZvQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVJc09wZW59PlxuICAgICAgICAgICAge2lzT3BlbiA/IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8ub3BlblRleHQgOiBydWxlcy5sZWdhbEluZm9CdXR0b24/LmNsb3NlVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSAnZGVza3RvcCdcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0+XG4gICAgICB7KHJ1bGVzPy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Qm9udXNDYXJkIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IFRleHQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIHtydWxlcy5yb290Py5jaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlczogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIGNvbnN0IHJvb3RSdWxlcyA9IG9taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZU9uZX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmSGVhZH0gc3R5bGU9e3J1bGVzLmNvZWZ9Plg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmVmFsdWV9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZVh9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5vZGQsIHN0eWxlcy5vZGRSZXZlcnNlKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVUd299PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlc09uZVR3bzogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBzdGF0ZT8uZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucyl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVMYWJlbH0gc3R5bGU9e3J1bGVzLnRpdGxlTGFiZWx9PlxuICAgICAgICAgIHtydWxlcy50aXRsZUxhYmVsLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZVZhbHVlfSBzdHlsZT17cnVsZXMudGl0bGVWYWx1ZX0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlVmFsdWUuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTFOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1OYW1lfT5cbiAgICAgICAgICAgIHtydWxlcy50ZWFtMk5hbWUuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtVmFsdWV9IHN0eWxlPXtydWxlcy52YWx1ZX0+XG4gICAgICAgICAgICB7cnVsZXMudmFsdWUyLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoZXNPbmVUd29cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5pbnRlcmZhY2UgU2xpZGUge1xuICBhbmltYXRpb25EdXJhdGlvbjogbnVtYmVyXG59XG5cbmNvbnN0IHVzZUFuaW1hdGVkTGlzdCA9IChzbGlkZXM6IFNsaWRlW10gPSBbXSkgPT4ge1xuICBjb25zdCBpdGVtc0NvdW50ID0gc2xpZGVzLmxlbmd0aFxuICBjb25zdCBbYW5pbWF0ZWRJZHgsIHNldEFuaW1hdGVkSWR4XSA9IHVzZVN0YXRlPG51bWJlcj4oMClcbiAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSBzbGlkZXNbYW5pbWF0ZWRJZHggfHwgMF0/LmFuaW1hdGlvbkR1cmF0aW9uXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBnb05leHQgPSAoKSA9PiB7XG4gICAgICBzZXRBbmltYXRlZElkeChpbmRleCA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPCBpdGVtc0NvdW50KSByZXR1cm4gaW5kZXggKyAxXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGdvTmV4dCwgYW5pbWF0aW9uRHVyYXRpb24pXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gIH0sIFtzZXRBbmltYXRlZElkeCwgaXRlbXNDb3VudCwgYW5pbWF0aW9uRHVyYXRpb24sIGFuaW1hdGVkSWR4XSlcblxuICByZXR1cm4gYW5pbWF0ZWRJZHhcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlQW5pbWF0ZWRMaXN0XG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IFRleHQgZnJvbSAnLi9jb21wb25lbnRzL1RleHQnXG5pbXBvcnQgTWF0Y2hlcyBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlcydcbmltcG9ydCBNYXRjaGVzT25lVHdvIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaGVzT25lVHdvJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB1c2VBbmltYXRlZExpc3QgZnJvbSAnc3JjL2hvb2tzL3VzZUFuaW1hdGVkTGlzdCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSAnc3JjL2hlbHBlcnMvY29uc3RhbnRzJ1xuXG5jb25zdCBERUZBVUxUX0FOSU1BVElPTl9TUEVFRCA9IDM3MDBcblxuY29uc3QgV2lkZUNhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBnZXRDaGlsZCA9IChuYW1lOiBzdHJpbmcpID0+XG4gICAgKHtcbiAgICAgIHRleHQ6IDxUZXh0IC8+LFxuICAgICAgbWF0Y2hlczogPE1hdGNoZXMgLz4sXG4gICAgICBtYXRjaGVzT25lVHdvOiA8TWF0Y2hlc09uZVR3byAvPlxuICAgIH1bbmFtZV0pXG5cbiAgY29uc3Qgc2xpZGVzTGlzdCA9IChydWxlcy5jaGlsZHJlbiB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLm1hcChzbGlkZSA9PiAoe1xuICAgIC4uLnNsaWRlLFxuICAgIGFuaW1hdGlvbk5hbWU6IHNsaWRlPy5yb290Py5hbmltYXRpb25OYW1lLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uRHVyYXRpb24gfHwgREVGQVVMVF9BTklNQVRJT05fU1BFRURcbiAgfSkpXG5cbiAgY29uc3QgY3VycmVudFNsaWRlID0gdXNlQW5pbWF0ZWRMaXN0KHNsaWRlc0xpc3QpXG4gIGNvbnN0IHNsaWRlUnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHNsaWRlc0xpc3RbY3VycmVudFNsaWRlXSB8fCB7fSlcblxuICBjb25zdCBiYWNrZ3JvdW5kUnVsZXMgPSBzbGlkZVJ1bGVzPy5yb290Py5oYXNDdXN0b21CYWNrZ3JvdW5kXG4gICAgPyBwaWNrKHNsaWRlUnVsZXM/LnJvb3QgfHwge30sIC4uLmJhY2tncm91bmRPcHRpb25zKVxuICAgIDogcGljayhydWxlcy5iYWNrZ3JvdW5kLCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYmFja2dyb3VuZH0gc3R5bGU9e2JhY2tncm91bmRSdWxlc30gLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jZW50ZXJ9PlxuICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcCgoY2hpbGQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNsaWRlfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWU6IGN1cnJlbnRTbGlkZSA9PT0gaW5kZXggPyBzdHlsZXNbY2hpbGQucm9vdD8uYW5pbWF0aW9uTmFtZSB8fCAnZmFkZS1pbi1vdXQnXSA6ICdub25lJyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogYCR7Y2hpbGQucm9vdD8uYW5pbWF0aW9uRHVyYXRpb259bXNgXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT57Z2V0Q2hpbGQoY2hpbGQubmFtZSl9PC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmlnaHR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFdpZGVDYXJkIC8+KVxuIiwiaW1wb3J0IHsgQ2FsbGJhY2ssIGRldmljZXMgYXMgZGV2aWNlc0xpc3QsIGdldCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICdzcmMvcHJvbW9zL1NpbXBsZUdpZnQvdHlwZXMnXG5cbmNvbnN0IG1vZGlmeVN0YXRlID0gKFxuICBzdGF0ZTogQW55U3RhdGUsXG4gIGxheWVyOiBzdHJpbmcsXG4gIHJ1bGU6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24gfCBDYWxsYmFjazxbcHJldlZhbHVlOiB1bmtub3duXT4sXG4gIGRldmljZXMgPSBkZXZpY2VzTGlzdFxuKSA9PiB7XG4gIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9XG5cbiAgZGV2aWNlcy5mb3JFYWNoKGRldmljZSA9PiB7XG4gICAgbmV3U3RhdGVbbGF5ZXJdID0ge1xuICAgICAgLi4ubmV3U3RhdGVbbGF5ZXJdLFxuICAgICAgW2RldmljZV06IHtcbiAgICAgICAgLi4ubmV3U3RhdGVbbGF5ZXJdW2RldmljZV0sXG4gICAgICAgIFtydWxlXTogdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUoZ2V0KG5ld1N0YXRlLCBgJHtsYXllcn0uJHtkZXZpY2V9LiR7cnVsZX1gKSkgOiB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG5ld1N0YXRlXG59XG5cbmV4cG9ydCB7IG1vZGlmeVN0YXRlIH1cbiJdLCJuYW1lcyI6WyJjbGFzc05hbWVzIiwiaSIsImlubmVyIiwibyIsIm4iLCJ0IiwidSIsIkIiLCJyIiwiZiIsImMiLCJlIiwiXyIsIkYiLCJxIiwidyIsImciLCJsIiwidXNlR2lmdE9wZW4iLCJkZWxheSIsImlzT3BlbiIsInNldElzT3BlbiIsInVzZVN0YXRlIiwidGltZXJSZWYiLCJ1c2VSZWYiLCJvblRvZ2dsZSIsImNsZWFyVGltZW91dCIsImN1cnJlbnQiLCJwcmV2IiwidXNlRWZmZWN0Iiwic2V0VGltZW91dCIsInMiLCJhIiwiU3RhdGUiLCJjcmVhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIsIl9qc3giLCJQcm92aWRlciIsInJlbmRlciIsInZOb2RlIiwidGFyZ2V0Iiwic3RhdGUiLCJwcmVhY3RSZW5kZXIiLCJ1c2VDdXJyZW50U3RhdGUiLCJ1c2VDb250ZXh0IiwibGlzdENhY2hlQ2xlYXIiLCJlcSIsInJlcXVpcmUkJDAiLCJhc3NvY0luZGV4T2YiLCJsaXN0Q2FjaGVEZWxldGUiLCJpbmRleCIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJMaXN0Q2FjaGUiLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsInJvb3QiLCJTeW1ib2wiLCJvYmplY3RQcm90byIsImhhc093blByb3BlcnR5IiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0IiwiZnVuY1RhZyIsImlzRnVuY3Rpb24iLCJjb3JlSnNEYXRhIiwiaXNNYXNrZWQiLCJmdW5jUHJvdG8iLCJmdW5jVG9TdHJpbmciLCJ0b1NvdXJjZSIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwiZ2V0TmF0aXZlIiwiTWFwIiwibmF0aXZlQ3JlYXRlIiwiaGFzaENsZWFyIiwiaGFzaERlbGV0ZSIsIkhBU0hfVU5ERUZJTkVEIiwiaGFzaEdldCIsImhhc2hIYXMiLCJoYXNoU2V0IiwiSGFzaCIsIm1hcENhY2hlQ2xlYXIiLCJpc0tleWFibGUiLCJnZXRNYXBEYXRhIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsInN0YWNrU2V0IiwicmVxdWlyZSQkNSIsIlN0YWNrIiwiZGVmaW5lUHJvcGVydHkiLCJiYXNlQXNzaWduVmFsdWUiLCJhc3NpZ25NZXJnZVZhbHVlIiwiY3JlYXRlQmFzZUZvciIsImJhc2VGb3IiLCJjbG9uZUJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJjbG9uZUFycmF5QnVmZmVyIiwiY2xvbmVUeXBlZEFycmF5IiwiY29weUFycmF5IiwiYmFzZUNyZWF0ZSIsIm92ZXJBcmciLCJnZXRQcm90b3R5cGUiLCJpc1Byb3RvdHlwZSIsImluaXRDbG9uZU9iamVjdCIsImlzT2JqZWN0TGlrZSIsImFyZ3NUYWciLCJiYXNlSXNBcmd1bWVudHMiLCJpc0FyZ3VtZW50cyIsImlzQXJyYXkiLCJNQVhfU0FGRV9JTlRFR0VSIiwiaXNMZW5ndGgiLCJpc0FycmF5TGlrZSIsImlzQXJyYXlMaWtlT2JqZWN0Iiwic3R1YkZhbHNlIiwiaXNCdWZmZXIiLCJvYmplY3RUYWciLCJpc1BsYWluT2JqZWN0IiwiYmFzZUlzVHlwZWRBcnJheSIsImJhc2VVbmFyeSIsIm5vZGVVdGlsIiwiaXNUeXBlZEFycmF5Iiwic2FmZUdldCIsImFzc2lnblZhbHVlIiwiY29weU9iamVjdCIsImJhc2VUaW1lcyIsImlzSW5kZXgiLCJhcnJheUxpa2VLZXlzIiwibmF0aXZlS2V5c0luIiwiYmFzZUtleXNJbiIsImtleXNJbiIsInRvUGxhaW5PYmplY3QiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsImJhc2VNZXJnZURlZXAiLCJiYXNlTWVyZ2UiLCJpZGVudGl0eSIsImFwcGx5Iiwib3ZlclJlc3QiLCJjb25zdGFudCIsImJhc2VTZXRUb1N0cmluZyIsInNob3J0T3V0Iiwic2V0VG9TdHJpbmciLCJiYXNlUmVzdCIsImlzSXRlcmF0ZWVDYWxsIiwiY3JlYXRlQXNzaWduZXIiLCJpbmplY3RMaW5rIiwib3B0aW9ucyIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGluayIsImNyZWF0ZUVsZW1lbnQiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImtleSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaXRlcmF0b3IiLCJpbnB1dCIsInZpc2l0b3IiLCJBcnJheSIsIm1hcCIsImVsIiwicmVkdWNlIiwiYWNjIiwiaXNFbXB0eVZhbHVlIiwidW5kZWZpbmVkIiwiaXNWYWx1ZSIsInBpY2siLCJvYmoiLCJwcm9wcyIsInJlc3VsdCIsInByb3AiLCJvbWl0IiwiZ2V0IiwicGF0aCIsImRlZlZhbHVlIiwicGF0aEFycmF5IiwibWF0Y2giLCJwcmV2T2JqIiwic2V0IiwibGVuZ3RoIiwiaGV4VG9SZ2IiLCJoZXgiLCJjaGFycyIsInNsaWNlIiwic3BsaXQiLCJ2YWwiLCJqb2luIiwiZXhlYyIsInBhcnNlSW50IiwiYiIsImlzSnNvblNhbWUiLCJ2YWx1ZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlcnkiLCJhcnIiLCJyZ2JUb1JnYmEiLCJyZ2IiLCJhbHBoYSIsInJlcGxhY2UiLCJkZXZpY2VzIiwiQlJFQUtQT0lOVFMiLCJtb2JpbGUiLCJ0YWJsZXQiLCJsYXB0b3AiLCJkZXNrdG9wIiwiaXNWYWxpZExheWVyIiwiZGV2aWNlIiwiZ2V0UnVsZXMiLCJfa2V5IiwicmVzdWx0UnVsZXMiLCJwYXJlbnQiLCJ1c2VHZXRSdWxlcyIsInVzZUNvbnRhaW5lckRldmljZSIsInRhcmdldFJlZiIsInBhcmVudEtleSIsImJyZWFrcG9pbnRzIiwic2V0RGV2aWNlIiwiY2hlY2tEZXZpY2UiLCJwYXJlbnRXaWR0aCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwic29ydGVkQnJlYWtwb2ludHMiLCJzb3J0IiwiXzEiLCJ2YWx1ZUEiLCJfMiIsInZhbHVlQiIsImZpbmREZXZpY2UiLCJmaW5kIiwibmV4dFZhbHVlIiwidXNlTGF5b3V0RWZmZWN0IiwicGFyZW50RWxlbWVudCIsImNsb3Nlc3QiLCJyZXNpemVPYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsIndyYXBUbyIsInVudGlsIiwidG9QeCIsInN0YXJ0c1dpdGgiLCJ0b1BlcmNlbnQiLCJmb3JtYXRSdWxlIiwibmV3S2V5IiwibmV3VmFsdWUiLCJERUZBVUxUX1RPX1BYIiwicGFyc2VSdWxlcyIsInJ1bGVzIiwibGF5ZXIiLCJrZXlzIiwiaW5jbHVkZXMiLCJ3YXJuIiwidHlwb2dyYXBoeSIsImFjY2VudFR5cG9ncmFwaHkiLCJmb250RmFtaWx5IiwiY29sb3IiLCJmb250U2l6ZSIsInByb3BLZXkiLCJwcm9wVmFsdWUiLCJpbm5lckhUTUwiLCJpbm5lclRleHQiLCJkaXNwbGF5IiwiYm9yZGVyU3R5bGUiLCJib3JkZXJSYWRpdXMiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5IiwiYmFja2dyb3VuZENvbG9yIiwiZm9udFdlaWdodCIsImZvbnRTdHlsZSIsInRleHREZWNvcmF0aW9uIiwiaXNWYWxpZFJ1bGUiLCJydWxlIiwidXNlUGFyc2VSdWxlcyIsIkRpc3BsYXlUZXh0IiwicmVzdCIsImZvcm1hdFZhbHVlIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJ1c2VUb2dnbGUiLCJDbG9zZUljb24iLCJ4bWxucyIsImhlaWdodCIsInZpZXdCb3giLCJkIiwiZmlsbCIsIkdpZnRJY29uIiwiZmlsbFJ1bGUiLCJhbmltYXRpb25zTWFwIiwiYW5pbWF0aW9ucyIsImZhZGUiLCJwdWxzZSIsIndpZ2dsZSIsImdyYWRpZW50IiwidXNlR2lmdFJ1bGVzIiwiZGV2aWNlU3RhdGUiLCJmdWxsQW5pbWF0aW9ucyIsImhhc0ljb24iLCJpY29uIiwiYXJyb3dSdWxlcyIsImxlZnQiLCJjb250YWluZXIiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJDb2xvciIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdENvbG9yIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9keVJ1bGVzIiwiYWxsQW5pbWF0aW9ucyIsImFuaW1hdGlvbiIsImJhY2tncm91bmRTdHlsZXMiLCJncmFkaWVudENvbG9yIiwiYmFja2dyb3VuZCIsImljb25SdWxlcyIsImJhY2tncm91bmRPcHRpb25zIiwic3BhY2luZ09wdGlvbnMiLCJub29wWWFNZXRyaWthIiwiZ29hbCIsImNvbnNvbGUiLCJsb2ciLCJub29wQWRGb3giLCJ1c2VNZXRyaWNzIiwibGF5ZXJOYW1lIiwic2F2ZU1ldHJpY3MiLCJ5YVJlYWNoR29hbCIsImFkZm94UmVhY2hHb2FsIiwibWV0cmljcyIsInlhU2hvdyIsImFkZm94U2hvdyIsInlhQ2xpY2siLCJhZGZveENsaWNrIiwidXNlRXh0cmFjdEZvbnRzIiwiZm9udHMiLCJTZXQiLCJhZGQiLCJmb250TGlua3MiLCJ1c2VNZW1vIiwiZnJvbSIsImZvbnQiLCJyZWwiLCJocmVmIiwiU2ltcGxlR2lmdCIsInJvb3RSZWYiLCJsZWdhbElzT3BlbiIsInRvZ2dsZUxlZ2FsSXNPcGVuIiwib25DbGljayIsInN0eWxlcyIsImZhZGVpbiIsIl9qc3hzIiwiY2xhc3NOYW1lIiwicmVmIiwic3R5bGUiLCJpY29uVGFyZ2V0IiwiYm9keSIsImJvZHlPcGVuIiwiYXJyb3ciLCJjbG9zZSIsIm9mZmVyIiwibG9nbyIsInRleHQiLCJidXR0b24iLCJidXR0b25BbmltYXRlZCIsImlzQW5pbWF0ZWQiLCJsZWdhbCIsImxlZ2FsT3BlbiIsImxlZ2FsVGV4dCIsImxlZ2FsQnV0dG9uIiwiYnV0dG9uT3BlblRleHQiLCJidXR0b25IaWRlVGV4dCIsIkJvbnVzQ2FyZCIsInZhcmlhbnQyIiwidmFyaWFudCIsImxpbmUiLCJib2R5SW5uZXIiLCJidXR0b25UZXh0IiwiQ29tcGxleEdpZnQiLCJoYXNUaXRsZUljb24iLCJ0aXRsZSIsInByb21vdGlvbiIsImhlYWRJY29uIiwiaGVhZFRpdGxlIiwiY2hpbGQiLCJzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgiLCJ0ZXh0QWxpZ24iLCJjZW50ZXIiLCJyaWdodCIsIkxpbmUiLCJTaW1wbGVQb3B1cCIsImFsaWduSXRlbXMiLCJhbGlnbiIsImJ1dHRvblJ1bGVzIiwianVzdGlmeUNvbnRlbnQiLCJsZWdhbFJ1bGVzIiwiQm9udXMiLCJoZWFkZXIiLCJ3cmFwcGVyIiwiTWF0Y2giLCJ0ZWFtcyIsImxlYWd1ZSIsIm5hbWUiLCJ0ZWFtQSIsInRlYW1CIiwidGVhbSIsInRlYW1Mb2dvIiwidGVhbU5hbWUiLCJvZGQiLCJvZGRMYWJlbCIsIm9kZFZhbHVlIiwiYnV0dG9uV3JhcHBlciIsImNvbnRlbnRSdWxlcyIsImNvbnRlbnQiLCJ0ZXh0UnVsZXMiLCJidXR0b25IZWFkIiwiYnV0dG9uVGFyZ2V0IiwidG9nZ2xlSXNPcGVuIiwicm93Rmlyc3QiLCJyb3dTZWNvbmQiLCJib29rbWFrZXIiLCJsZWdhbEluZm8iLCJsZWdhbEluZm9CdXR0b24iLCJvcGVuVGV4dCIsImNsb3NlVGV4dCIsIlRleHQiLCJNYXRjaGVzIiwicm9vdFJ1bGVzIiwib2RkTG9nbyIsInZhbHVlT25lIiwiY29lZiIsImNvZWZIZWFkIiwiY29lZlZhbHVlIiwidmFsdWVYIiwib2RkUmV2ZXJzZSIsInZhbHVlVHdvIiwiTWF0Y2hlc09uZVR3byIsInRpdGxlTGFiZWwiLCJ0aXRsZVZhbHVlIiwidGVhbTFOYW1lIiwidGVhbVZhbHVlIiwidmFsdWUxIiwidGVhbTJOYW1lIiwidmFsdWUyIiwidXNlQW5pbWF0ZWRMaXN0Iiwic2xpZGVzIiwiaXRlbXNDb3VudCIsImFuaW1hdGVkSWR4Iiwic2V0QW5pbWF0ZWRJZHgiLCJhbmltYXRpb25EdXJhdGlvbiIsImdvTmV4dCIsInRpbWVvdXQiLCJERUZBVUxUX0FOSU1BVElPTl9TUEVFRCIsIldpZGVDYXJkIiwiZ2V0Q2hpbGQiLCJtYXRjaGVzIiwibWF0Y2hlc09uZVR3byIsInNsaWRlc0xpc3QiLCJmaWx0ZXIiLCJCb29sZWFuIiwic2xpZGUiLCJhbmltYXRpb25OYW1lIiwiY3VycmVudFNsaWRlIiwic2xpZGVSdWxlcyIsImJhY2tncm91bmRSdWxlcyIsImhhc0N1c3RvbUJhY2tncm91bmQiLCJtb2RpZnlTdGF0ZSIsImRldmljZXNMaXN0IiwibmV3U3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsR0FBQyxXQUFZO0FBR1osUUFBSSxTQUFTLENBQUUsRUFBQztBQUdoQixhQUFTQSxjQUFhO0FBQ3JCLFVBQUksVUFBVSxDQUFBO0FBRWQsZUFBU0MsS0FBSSxHQUFHQSxLQUFJLFVBQVUsUUFBUUEsTUFBSztBQUMxQyxZQUFJLE1BQU0sVUFBVUEsRUFBQztBQUNyQixZQUFJLENBQUM7QUFBSztBQUVWLFlBQUksVUFBVSxPQUFPO0FBRXJCLFlBQUksWUFBWSxZQUFZLFlBQVksVUFBVTtBQUNqRCxrQkFBUSxLQUFLLEdBQUc7QUFBQSxRQUNoQixXQUFVLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFDOUIsY0FBSSxJQUFJLFFBQVE7QUFDZixnQkFBSUMsU0FBUUYsWUFBVyxNQUFNLE1BQU0sR0FBRztBQUN0QyxnQkFBSUUsUUFBTztBQUNWLHNCQUFRLEtBQUtBLE1BQUs7QUFBQSxZQUNsQjtBQUFBLFVBQ0Q7QUFBQSxRQUNMLFdBQWMsWUFBWSxVQUFVO0FBQ2hDLGNBQUksSUFBSSxhQUFhLE9BQU8sVUFBVSxZQUFZLENBQUMsSUFBSSxTQUFTLFNBQVEsRUFBRyxTQUFTLGVBQWUsR0FBRztBQUNyRyxvQkFBUSxLQUFLLElBQUksU0FBVSxDQUFBO0FBQzNCO0FBQUEsVUFDQTtBQUVELG1CQUFTLE9BQU8sS0FBSztBQUNwQixnQkFBSSxPQUFPLEtBQUssS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLEdBQUc7QUFDdEMsc0JBQVEsS0FBSyxHQUFHO0FBQUEsWUFDaEI7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFFRCxhQUFPLFFBQVEsS0FBSyxHQUFHO0FBQUEsSUFDdkI7QUFFRCxRQUFxQyxPQUFPLFNBQVM7QUFDcEQsTUFBQUYsWUFBVyxVQUFVQTtBQUNyQixhQUFBLFVBQWlCQTtBQUFBLElBQ25CLE9BS1E7QUFDTixhQUFPLGFBQWFBO0FBQUEsSUFDcEI7QUFBQSxFQUNGOzs7QUMzRGlDLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRUcsTUFBRSxHQUFFLElBQUUsQ0FBQSxHQUFHLElBQUUsSUFBRyxJQUFFQyxRQUFFLEtBQUksSUFBRUEsUUFBRSxLQUFJLElBQUVBLFFBQUUsUUFBTyxJQUFFQSxRQUFFLEtBQUksSUFBRUEsUUFBRTtBQUFRLFNBQVMsRUFBRUMsSUFBRUMsSUFBRTtBQUFDRixVQUFFLE9BQUtBLFFBQUUsSUFBSSxHQUFFQyxJQUFFRixPQUFHRyxFQUFDLEdBQUVILE1BQUU7QUFBRSxNQUFJRixLQUFFLEVBQUUsUUFBTSxFQUFFLE1BQUksRUFBQyxJQUFHLElBQUcsS0FBSSxDQUFFLEVBQUE7QUFBRyxTQUFPSSxNQUFHSixHQUFFLEdBQUcsVUFBUUEsR0FBRSxHQUFHLEtBQUssRUFBQyxLQUFJLEVBQUMsQ0FBQyxHQUFFQSxHQUFFLEdBQUdJLEVBQUM7QUFBQztBQUFDLFNBQVMsRUFBRSxHQUFFO0FBQUMsU0FBT0YsTUFBRSxHQUFFLEVBQUVJLEtBQUUsQ0FBQztBQUFDO0FBQUMsU0FBUyxFQUFFLEdBQUVELElBQUVMLElBQUU7QUFBQyxNQUFJRSxLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsTUFBR0EsR0FBRSxJQUFFLEdBQUUsQ0FBQ0EsR0FBRSxRQUFNQSxHQUFFLEtBQUcsQ0FBQ0YsS0FBRUEsR0FBRUssRUFBQyxJQUFFQyxJQUFFLFFBQU9ELEVBQUMsR0FBRSxTQUFTRixJQUFFO0FBQUMsUUFBSUMsS0FBRUYsR0FBRSxNQUFJQSxHQUFFLElBQUksQ0FBQyxJQUFFQSxHQUFFLEdBQUcsQ0FBQyxHQUFFSyxLQUFFTCxHQUFFLEVBQUVFLElBQUVELEVBQUM7QUFBRSxJQUFBQyxPQUFJRyxPQUFJTCxHQUFFLE1BQUksQ0FBQ0ssSUFBRUwsR0FBRSxHQUFHLENBQUMsQ0FBQyxHQUFFQSxHQUFFLElBQUksU0FBUyxDQUFFLENBQUE7QUFBQSxFQUFFLENBQUMsR0FBRUEsR0FBRSxNQUFJLEdBQUUsQ0FBQyxFQUFFLElBQUc7QUFBQyxRQUFJTSxLQUFFLFNBQVNMLElBQUVDLElBQUVHLElBQUU7QUFBQyxVQUFHLENBQUNMLEdBQUUsSUFBSTtBQUFJLGVBQU07QUFBRyxVQUFJRyxLQUFFSCxHQUFFLElBQUksSUFBSSxHQUFHLE9BQU8sU0FBU0MsSUFBRTtBQUFDLGVBQU9BLEdBQUU7QUFBQSxNQUFHLENBQUM7QUFBRSxVQUFHRSxHQUFFLE1BQU0sU0FBU0YsSUFBRTtBQUFDLGVBQU0sQ0FBQ0EsR0FBRTtBQUFBLE1BQUcsQ0FBQztBQUFFLGVBQU0sQ0FBQ00sTUFBR0EsR0FBRSxLQUFLLE1BQUtOLElBQUVDLElBQUVHLEVBQUM7QUFBRSxVQUFJUCxLQUFFO0FBQUcsYUFBT0ssR0FBRSxRQUFRLFNBQVNGLElBQUU7QUFBQyxZQUFHQSxHQUFFLEtBQUk7QUFBQyxjQUFJQyxLQUFFRCxHQUFFLEdBQUcsQ0FBQztBQUFFLFVBQUFBLEdBQUUsS0FBR0EsR0FBRSxLQUFJQSxHQUFFLE1BQUksUUFBT0MsT0FBSUQsR0FBRSxHQUFHLENBQUMsTUFBSUgsS0FBRTtBQUFBLFFBQUc7QUFBQSxNQUFDLENBQUMsR0FBRSxFQUFFLENBQUNBLE1BQUdFLEdBQUUsSUFBSSxVQUFRQyxRQUFLLENBQUNNLE1BQUdBLEdBQUUsS0FBSyxNQUFLTixJQUFFQyxJQUFFRyxFQUFDO0FBQUEsSUFBRTtBQUFFLE1BQUUsSUFBRTtBQUFHLFFBQUlFLEtBQUUsRUFBRSx1QkFBc0JDLEtBQUUsRUFBRTtBQUFvQixNQUFFLHNCQUFvQixTQUFTUCxJQUFFQyxJQUFFRyxJQUFFO0FBQUMsVUFBRyxLQUFLLEtBQUk7QUFBQyxZQUFJRixLQUFFSTtBQUFFLFFBQUFBLEtBQUUsUUFBT0QsR0FBRUwsSUFBRUMsSUFBRUcsRUFBQyxHQUFFRSxLQUFFSjtBQUFBLE1BQUM7QUFBQyxNQUFBSyxNQUFHQSxHQUFFLEtBQUssTUFBS1AsSUFBRUMsSUFBRUcsRUFBQztBQUFBLElBQUMsR0FBRSxFQUFFLHdCQUFzQkM7QUFBQSxFQUFDO0FBQUMsU0FBT04sR0FBRSxPQUFLQSxHQUFFO0FBQUU7QUFBQyxTQUFTLEVBQUVHLElBQUVMLElBQUU7QUFBQyxNQUFJRSxLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsR0FBQ0MsUUFBRSxPQUFLLEVBQUVELEdBQUUsS0FBSUYsRUFBQyxNQUFJRSxHQUFFLEtBQUdHLElBQUVILEdBQUUsSUFBRUYsSUFBRSxFQUFFLElBQUksSUFBSSxLQUFLRSxFQUFDO0FBQUU7QUFBQyxTQUFTLEVBQUVHLElBQUVMLElBQUU7QUFBQyxNQUFJRSxLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsR0FBQ0MsUUFBRSxPQUFLLEVBQUVELEdBQUUsS0FBSUYsRUFBQyxNQUFJRSxHQUFFLEtBQUdHLElBQUVILEdBQUUsSUFBRUYsSUFBRSxFQUFFLElBQUksS0FBS0UsRUFBQztBQUFFO0FBQUMsU0FBU1MsSUFBRSxHQUFFO0FBQUMsU0FBT1QsTUFBRSxHQUFFVSxJQUFFLFdBQVU7QUFBQyxXQUFNLEVBQUMsU0FBUSxFQUFDO0FBQUEsRUFBQyxHQUFFLEVBQUU7QUFBQztBQUFzTCxTQUFTQSxJQUFFLEdBQUVMLElBQUU7QUFBQyxNQUFJRixLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsU0FBTyxFQUFFQSxHQUFFLEtBQUlFLEVBQUMsS0FBR0YsR0FBRSxNQUFJLEVBQUcsR0FBQ0EsR0FBRSxJQUFFRSxJQUFFRixHQUFFLE1BQUksR0FBRUEsR0FBRSxPQUFLQSxHQUFFO0FBQUU7QUFBc0QsU0FBU1EsSUFBRSxHQUFFO0FBQUMsTUFBSVIsS0FBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUVMLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxTQUFPQSxHQUFFLElBQUUsR0FBRUssTUFBRyxRQUFNTCxHQUFFLE9BQUtBLEdBQUUsS0FBRyxNQUFHSyxHQUFFLElBQUksQ0FBQyxJQUFHQSxHQUFFLE1BQU0sU0FB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LEVBQUVBLElBQUVDLElBQUVNLEVBQUM7QUFBQSxFQUFDLENBQUMsSUFBRztBQUFDO0FBQUMsU0FBUyxFQUFFLEdBQUVOLElBQUVNLElBQUU7QUFBQyxTQUFPLE1BQUksRUFBRSxNQUFJLE1BQUssRUFBRSxNQUFJLEVBQUUsT0FBSyxFQUFFLElBQUksSUFBSSxTQUFTUCxJQUFFO0FBQUMsV0FBTyxFQUFFQSxJQUFFQyxJQUFFTSxFQUFDO0FBQUEsRUFBQyxDQUFDLEdBQUUsRUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNTixPQUFJLEVBQUUsT0FBS00sR0FBRSxhQUFhLEVBQUUsS0FBSSxFQUFFLEdBQUcsR0FBRSxFQUFFLElBQUksTUFBSSxNQUFHLEVBQUUsSUFBSSxNQUFJQSxNQUFJO0FBQUM7QUFBQyxTQUFTLElBQUc7QUFBQyxPQUFLLE1BQUksR0FBRSxLQUFLLElBQUUsTUFBSyxLQUFLLE1BQUk7QUFBSTtBQUFDLFNBQVMsRUFBRSxHQUFFO0FBQUMsTUFBSU4sS0FBRSxFQUFFLEdBQUc7QUFBSSxTQUFPQSxNQUFHQSxHQUFFLE9BQUtBLEdBQUUsSUFBSSxDQUFDO0FBQUM7QUFBcUwsU0FBUyxJQUFHO0FBQUMsT0FBSyxJQUFFLE1BQUssS0FBSyxJQUFFO0FBQUk7QUFBQ00sUUFBRSxVQUFRLFNBQVMsR0FBRTtBQUFDLE1BQUlOLEtBQUUsRUFBRTtBQUFJLEVBQUFBLE1BQUdBLEdBQUUsT0FBS0EsR0FBRSxJQUFHLEdBQUdBLE1BQUcsU0FBSyxFQUFFLFFBQU0sRUFBRSxPQUFLLE9BQU0sS0FBRyxFQUFFLENBQUM7QUFBQyxJQUFHLEVBQUUsWUFBVSxJQUFJRCxhQUFHLE1BQUksU0FBUyxHQUFFQyxJQUFFO0FBQUMsTUFBSU0sS0FBRU4sR0FBRSxLQUFJRyxLQUFFO0FBQUssVUFBTUEsR0FBRSxNQUFJQSxHQUFFLElBQUUsQ0FBRSxJQUFFQSxHQUFFLEVBQUUsS0FBS0csRUFBQztBQUFFLE1BQUlMLEtBQUUsRUFBRUUsR0FBRSxHQUFHLEdBQUVMLEtBQUUsT0FBR0YsS0FBRSxXQUFVO0FBQUMsSUFB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RSxFQUFBLE9BQUE7QUFBQSxVQUFLdVYsV0FBV0gsU0FBT1k7QUFBQUEsVUFBTVAsT0FBTzVHLE1BQU1tSDtBQUFBQSxRQUFBQSxDQUFLLEdBRS9DaFcsRUFBQSxPQUFBO0FBQUEsVUFBS3VWLFdBQVdILFNBQU84RDtBQUFBQSxVQUFjcFosVUFDbkN3VixFQUFBLE9BQUE7QUFBQSxZQUFLQyxXQUFXSCxTQUFPYztBQUFBQSxZQUFRVCxPQUFPNUcsTUFBTXFIO0FBQUFBLFlBQU9wVyxXQUNqREUsRUFBQSxPQUFBO0FBQUEsY0FBS3VWLFdBQVdILFNBQU9ZO0FBQUFBLGNBQU1QLE9BQU81RyxNQUFNbUg7QUFBQUEsWUFBQUEsQ0FBSyxJQUM5Q25ILFdBQU1xSCxXQUFOckgsbUJBQWMvTyxRQUFRO0FBQUEsVUFBQSxDQUFBO0FBQUEsUUFBQSxDQUVyQixDQUFBO0FBQUEsTUFBQSxDQUNGLENBQUE7QUFBQSxJQUFBLENBQ0YsQ0FBQTtBQUFBLEVBQUEsQ0FDSjtBQUVSO0FBRUEsTUFBZUksUUFBQUEsT0FBT0YsRUFBQzRiLGFBQVc7QUNoR2xDLE1BQU1hLGNBQWNBLENBQ2xCcGMsT0FDQXlPLE9BQ0F5QixNQUNBeFEsT0FDQStMLFlBQVU0USxZQUNQO0FBQ0gsUUFBTUMsV0FBVztBQUFBLElBQUUsR0FBR3RjO0FBQUFBLEVBQUFBO0FBRXRCeUwsWUFBUWpELFFBQVF3RCxDQUFVLFdBQUE7QUFDeEJzUSxhQUFTN04sS0FBSyxJQUFJO0FBQUEsTUFDaEIsR0FBRzZOLFNBQVM3TixLQUFLO0FBQUEsTUFDakIsQ0FBQ3pDLE1BQU0sR0FBRztBQUFBLFFBQ1IsR0FBR3NRLFNBQVM3TixLQUFLLEVBQUV6QyxNQUFNO0FBQUEsUUFDekIsQ0FBQ2tFLElBQUksR0FBRyxPQUFPeFEsVUFBVSxhQUFhQSxNQUFNbUssSUFBSXlTLFVBQVcsR0FBRTdOLFNBQVN6QyxVQUFVa0UsTUFBTSxDQUFDLElBQUl4UTtBQUFBQSxNQUM3RjtBQUFBLElBQUE7QUFBQSxFQUNGLENBQ0Q7QUFDTTRjLFNBQUFBO0FBQ1Q7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDQsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwM119
2879
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCIuLi9zcmMvaG9va3MvdXNlR2lmdE9wZW4udHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL2Rpc3QvanN4UnVudGltZS5tb2R1bGUuanMiLCIuLi9zcmMvU3RhdGVDb250ZXh0LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3JlbmRlci50c3giLCIuLi9zcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnbk1lcmdlVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zYWZlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2VEZWVwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi91dGlscy9kb20udHMiLCIuLi8uLi91dGlscy9pdGVyYXRvci50cyIsIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlLnRzIiwiLi4vc3JjL2hlbHBlcnMvcGFyc2VSdWxlcy50cyIsIi4uL3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQudHN4IiwiLi4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbi50c3giLCIuLi9zcmMvY29tcG9uZW50cy9HaWZ0SWNvbi50c3giLCIuLi9zcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcy50cyIsIi4uL3NyYy9oZWxwZXJzL2NvbnN0YW50cy50cyIsIi4uL3NyYy9ob29rcy91c2VNZXRyaWNzLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cy50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlR2lmdC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2NvbXBvbmVudHMvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4LnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9jb21wb25lbnRzL2xpbmUvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2NvbXBvbmVudHMvTWF0Y2gvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvVGV4dC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlcy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3by9pbmRleC50c3giLCIuLi9zcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0LnRzIiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cdHZhciBuYXRpdmVDb2RlU3RyaW5nID0gJ1tuYXRpdmUgY29kZV0nO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiaW1wb3J0e29wdGlvbnMgYXMgbn1mcm9tXCJwcmVhY3RcIjt2YXIgdCxyLHUsaSxvPTAsZj1bXSxjPVtdLGU9bi5fX2IsYT1uLl9fcix2PW4uZGlmZmVkLGw9bi5fX2MsbT1uLnVubW91bnQ7ZnVuY3Rpb24gZCh0LHUpe24uX19oJiZuLl9faChyLHQsb3x8dSksbz0wO3ZhciBpPXIuX19IfHwoci5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiB0Pj1pLl9fLmxlbmd0aCYmaS5fXy5wdXNoKHtfX1Y6Y30pLGkuX19bdF19ZnVuY3Rpb24gaChuKXtyZXR1cm4gbz0xLHMoQixuKX1mdW5jdGlvbiBzKG4sdSxpKXt2YXIgbz1kKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6Qih2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIudSkpe3ZhciBmPWZ1bmN0aW9uKG4sdCxyKXtpZighby5fX2MuX19IKXJldHVybiEwO3ZhciB1PW8uX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uX19jfSk7aWYodS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4hbi5fX059KSlyZXR1cm4hY3x8Yy5jYWxsKHRoaXMsbix0LHIpO3ZhciBpPSExO3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSwhKCFpJiZvLl9fYy5wcm9wcz09PW4pJiYoIWN8fGMuY2FsbCh0aGlzLG4sdCxyKSl9O3IudT0hMDt2YXIgYz1yLnNob3VsZENvbXBvbmVudFVwZGF0ZSxlPXIuY29tcG9uZW50V2lsbFVwZGF0ZTtyLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24obix0LHIpe2lmKHRoaXMuX19lKXt2YXIgdT1jO2M9dm9pZCAwLGYobix0LHIpLGM9dX1lJiZlLmNhbGwodGhpcyxuLHQscil9LHIuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ9cmV0dXJuIG8uX19OfHxvLl9ffWZ1bmN0aW9uIHAodSxpKXt2YXIgbz1kKHQrKywzKTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX0guX19oLnB1c2gobykpfWZ1bmN0aW9uIHkodSxpKXt2YXIgbz1kKHQrKyw0KTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX2gucHVzaChvKSl9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gbz01LEYoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpufX0sW10pfWZ1bmN0aW9uIEEobix0LHIpe289Nix5KGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj8obih0KCkpLGZ1bmN0aW9uKCl7cmV0dXJuIG4obnVsbCl9KTpuPyhuLmN1cnJlbnQ9dCgpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uY3VycmVudD1udWxsfSk6dm9pZCAwfSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIEYobixyKXt2YXIgdT1kKHQrKyw3KTtyZXR1cm4geih1Ll9fSCxyKT8odS5fX1Y9bigpLHUuaT1yLHUuX19oPW4sdS5fX1YpOnUuX199ZnVuY3Rpb24gVChuLHQpe3JldHVybiBvPTgsRihmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiBxKG4pe3ZhciB1PXIuY29udGV4dFtuLl9fY10saT1kKHQrKyw5KTtyZXR1cm4gaS5jPW4sdT8obnVsbD09aS5fXyYmKGkuX189ITAsdS5zdWIocikpLHUucHJvcHMudmFsdWUpOm4uX199ZnVuY3Rpb24geCh0LHIpe24udXNlRGVidWdWYWx1ZSYmbi51c2VEZWJ1Z1ZhbHVlKHI/cih0KTp0KX1mdW5jdGlvbiBQKG4pe3ZhciB1PWQodCsrLDEwKSxpPWgoKTtyZXR1cm4gdS5fXz1uLHIuY29tcG9uZW50RGlkQ2F0Y2h8fChyLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKG4sdCl7dS5fXyYmdS5fXyhuLHQpLGlbMV0obil9KSxbaVswXSxmdW5jdGlvbigpe2lbMV0odm9pZCAwKX1dfWZ1bmN0aW9uIFYoKXt2YXIgbj1kKHQrKywxMSk7aWYoIW4uX18pe2Zvcih2YXIgdT1yLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO3ZhciBpPXUuX19tfHwodS5fX209WzAsMF0pO24uX189XCJQXCIraVswXStcIi1cIitpWzFdKyt9cmV0dXJuIG4uX199ZnVuY3Rpb24gYigpe2Zvcih2YXIgdDt0PWYuc2hpZnQoKTspaWYodC5fX1AmJnQuX19IKXRyeXt0Ll9fSC5fX2guZm9yRWFjaChrKSx0Ll9fSC5fX2guZm9yRWFjaCh3KSx0Ll9fSC5fX2g9W119Y2F0Y2gocil7dC5fX0guX19oPVtdLG4uX19lKHIsdC5fX3YpfX1uLl9fYj1mdW5jdGlvbihuKXtyPW51bGwsZSYmZShuKX0sbi5fX3I9ZnVuY3Rpb24obil7YSYmYShuKSx0PTA7dmFyIGk9KHI9bi5fX2MpLl9fSDtpJiYodT09PXI/KGkuX19oPVtdLHIuX19oPVtdLGkuX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLl9fTiYmKG4uX189bi5fX04pLG4uX19WPWMsbi5fX049bi5pPXZvaWQgMH0pKTooaS5fX2guZm9yRWFjaChrKSxpLl9faC5mb3JFYWNoKHcpLGkuX19oPVtdKSksdT1yfSxuLmRpZmZlZD1mdW5jdGlvbih0KXt2JiZ2KHQpO3ZhciBvPXQuX19jO28mJm8uX19IJiYoby5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2gobykmJmk9PT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8aikoYikpLG8uX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5pJiYobi5fX0g9bi5pKSxuLl9fViE9PWMmJihuLl9fPW4uX19WKSxuLmk9dm9pZCAwLG4uX19WPWN9KSksdT1yPW51bGx9LG4uX19jPWZ1bmN0aW9uKHQscil7ci5zb21lKGZ1bmN0aW9uKHQpe3RyeXt0Ll9faC5mb3JFYWNoKGspLHQuX19oPXQuX19oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hbi5fX3x8dyhuKX0pfWNhdGNoKHUpe3Iuc29tZShmdW5jdGlvbihuKXtuLl9faCYmKG4uX19oPVtdKX0pLHI9W10sbi5fX2UodSx0Ll9fdil9fSksbCYmbCh0LHIpfSxuLnVubW91bnQ9ZnVuY3Rpb24odCl7bSYmbSh0KTt2YXIgcix1PXQuX19jO3UmJnUuX19IJiYodS5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXt0cnl7ayhuKX1jYXRjaChuKXtyPW59fSksdS5fX0g9dm9pZCAwLHImJm4uX19lKHIsdS5fX3YpKX07dmFyIGc9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGoobil7dmFyIHQscj1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KSxnJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0KSxzZXRUaW1lb3V0KG4pfSx1PXNldFRpbWVvdXQociwxMDApO2cmJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24gayhuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiB3KG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiB6KG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7VCBhcyB1c2VDYWxsYmFjayxxIGFzIHVzZUNvbnRleHQseCBhcyB1c2VEZWJ1Z1ZhbHVlLHAgYXMgdXNlRWZmZWN0LFAgYXMgdXNlRXJyb3JCb3VuZGFyeSxWIGFzIHVzZUlkLEEgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSx5IGFzIHVzZUxheW91dEVmZmVjdCxGIGFzIHVzZU1lbW8scyBhcyB1c2VSZWR1Y2VyLF8gYXMgdXNlUmVmLGggYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsY3JlYXRlQ29udGV4dCxjcmVhdGVFbGVtZW50LGNyZWF0ZVJlZn1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlU3RhdGUgYXMgYSx1c2VJZCBhcyBzLHVzZVJlZHVjZXIgYXMgaCx1c2VFZmZlY3QgYXMgdix1c2VMYXlvdXRFZmZlY3QgYXMgZCx1c2VSZWYgYXMgcCx1c2VJbXBlcmF0aXZlSGFuZGxlIGFzIG0sdXNlTWVtbyBhcyB5LHVzZUNhbGxiYWNrIGFzIF8sdXNlQ29udGV4dCBhcyBiLHVzZURlYnVnVmFsdWUgYXMgU31mcm9tXCJwcmVhY3QvaG9va3NcIjtleHBvcnQqZnJvbVwicHJlYWN0L2hvb2tzXCI7ZnVuY3Rpb24gZyhuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXTtyZXR1cm4gbn1mdW5jdGlvbiBDKG4sdCl7Zm9yKHZhciBlIGluIG4paWYoXCJfX3NvdXJjZVwiIT09ZSYmIShlIGluIHQpKXJldHVybiEwO2Zvcih2YXIgciBpbiB0KWlmKFwiX19zb3VyY2VcIiE9PXImJm5bcl0hPT10W3JdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEUobix0KXtyZXR1cm4gbj09PXQmJigwIT09bnx8MS9uPT0xL3QpfHxuIT1uJiZ0IT10fWZ1bmN0aW9uIHcobil7dGhpcy5wcm9wcz1ufWZ1bmN0aW9uIHgobixlKXtmdW5jdGlvbiByKG4pe3ZhciB0PXRoaXMucHJvcHMucmVmLHI9dD09bi5yZWY7cmV0dXJuIXImJnQmJih0LmNhbGw/dChudWxsKTp0LmN1cnJlbnQ9bnVsbCksZT8hZSh0aGlzLnByb3BzLG4pfHwhcjpDKHRoaXMucHJvcHMsbil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9cix0KG4sZSl9cmV0dXJuIHUuZGlzcGxheU5hbWU9XCJNZW1vKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsdS5fX2Y9ITAsdX0ody5wcm90b3R5cGU9bmV3IG4pLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLHcucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBDKHRoaXMucHJvcHMsbil8fEModGhpcy5zdGF0ZSx0KX07dmFyIFI9ZS5fX2I7ZS5fX2I9ZnVuY3Rpb24obil7bi50eXBlJiZuLnR5cGUuX19mJiZuLnJlZiYmKG4ucHJvcHMucmVmPW4ucmVmLG4ucmVmPW51bGwpLFImJlIobil9O3ZhciBOPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKXx8MzkxMTtmdW5jdGlvbiBrKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9Zyh7fSx0KTtyZXR1cm4gZGVsZXRlIGUucmVmLG4oZSx0LnJlZnx8bnVsbCl9cmV0dXJuIHQuJCR0eXBlb2Y9Tix0LnJlbmRlcj10LHQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9dC5fX2Y9ITAsdC5kaXNwbGF5TmFtZT1cIkZvcndhcmRSZWYoXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdH12YXIgQT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1uP251bGw6cihyKG4pLm1hcCh0KSl9LE89e21hcDpBLGZvckVhY2g6QSxjb3VudDpmdW5jdGlvbihuKXtyZXR1cm4gbj9yKG4pLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKG4pe3ZhciB0PXIobik7aWYoMSE9PXQubGVuZ3RoKXRocm93XCJDaGlsZHJlbi5vbmx5XCI7cmV0dXJuIHRbMF19LHRvQXJyYXk6cn0sVD1lLl9fZTtlLl9fZT1mdW5jdGlvbihuLHQsZSxyKXtpZihuLnRoZW4pZm9yKHZhciB1LG89dDtvPW8uX187KWlmKCh1PW8uX19jKSYmdS5fX2MpcmV0dXJuIG51bGw9PXQuX19lJiYodC5fX2U9ZS5fX2UsdC5fX2s9ZS5fX2spLHUuX19jKG4sdCk7VChuLHQsZSxyKX07dmFyIEk9ZS51bm1vdW50O2Z1bmN0aW9uIEwobix0LGUpe3JldHVybiBuJiYobi5fX2MmJm4uX19jLl9fSCYmKG4uX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpfSksbi5fX2MuX19IPW51bGwpLG51bGwhPShuPWcoe30sbikpLl9fYyYmKG4uX19jLl9fUD09PWUmJihuLl9fYy5fX1A9dCksbi5fX2M9bnVsbCksbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gTChuLHQsZSl9KSksbn1mdW5jdGlvbiBVKG4sdCxlKXtyZXR1cm4gbiYmKG4uX192PW51bGwsbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVShuLHQsZSl9KSxuLl9fYyYmbi5fX2MuX19QPT09dCYmKG4uX19lJiZlLmluc2VydEJlZm9yZShuLl9fZSxuLl9fZCksbi5fX2MuX19lPSEwLG4uX19jLl9fUD1lKSksbn1mdW5jdGlvbiBEKCl7dGhpcy5fX3U9MCx0aGlzLnQ9bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEYobil7dmFyIHQ9bi5fXy5fX2M7cmV0dXJuIHQmJnQuX19hJiZ0Ll9fYShuKX1mdW5jdGlvbiBNKG4pe3ZhciBlLHIsdTtmdW5jdGlvbiBvKG8pe2lmKGV8fChlPW4oKSkudGhlbihmdW5jdGlvbihuKXtyPW4uZGVmYXVsdHx8bn0sZnVuY3Rpb24obil7dT1ufSksdSl0aHJvdyB1O2lmKCFyKXRocm93IGU7cmV0dXJuIHQocixvKX1yZXR1cm4gby5kaXNwbGF5TmFtZT1cIkxhenlcIixvLl9fZj0hMCxvfWZ1bmN0aW9uIFYoKXt0aGlzLnU9bnVsbCx0aGlzLm89bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmdC5fX1ImJnQuX19SKCksdCYmITA9PT1uLl9faCYmKG4udHlwZT1udWxsKSxJJiZJKG4pfSwoRC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLnQmJihyLnQ9W10pLHIudC5wdXNoKGUpO3ZhciB1PUYoci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fChvPSEwLGUuX19SPW51bGwsdT91KGwpOmwoKSl9O2UuX19SPWk7dmFyIGw9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1VKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLnQucG9wKCk7KXQuZm9yY2VVcGRhdGUoKX19LGM9ITA9PT10Ll9faDtyLl9fdSsrfHxjfHxyLnNldFN0YXRlKHtfX2E6ci5fX2I9ci5fX3YuX19rWzBdfSksbi50aGVuKGksaSl9LEQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy50PVtdfSxELnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obixlKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG89dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09TCh0aGlzLl9fYixyLG8uX19PPW8uX19QKX10aGlzLl9fYj1udWxsfXZhciBpPWUuX19hJiZ0KHUsbnVsbCxuLmZhbGxiYWNrKTtyZXR1cm4gaSYmKGkuX19oPW51bGwpLFt0KHUsbnVsbCxlLl9fYT9udWxsOm4uY2hpbGRyZW4pLGldfTt2YXIgVz1mdW5jdGlvbihuLHQsZSl7aWYoKytlWzFdPT09ZVswXSYmbi5vLmRlbGV0ZSh0KSxuLnByb3BzLnJldmVhbE9yZGVyJiYoXCJ0XCIhPT1uLnByb3BzLnJldmVhbE9yZGVyWzBdfHwhbi5vLnNpemUpKWZvcihlPW4udTtlOyl7Zm9yKDtlLmxlbmd0aD4zOyllLnBvcCgpKCk7aWYoZVsxXTxlWzBdKWJyZWFrO24udT1lPWVbMl19fTtmdW5jdGlvbiBQKG4pe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHR9LG4uY2hpbGRyZW59ZnVuY3Rpb24gaihuKXt2YXIgZT10aGlzLHI9bi5pO2UuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtvKG51bGwsZS5sKSxlLmw9bnVsbCxlLmk9bnVsbH0sZS5pJiZlLmkhPT1yJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCksbi5fX3Y/KGUubHx8KGUuaT1yLGUubD17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxhcHBlbmRDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaS5hcHBlbmRDaGlsZChuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihuKT4+PjEsMSksZS5pLnJlbW92ZUNoaWxkKG4pfX0pLG8odChQLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUubCkpOmUubCYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWZ1bmN0aW9uIHoobixlKXt2YXIgcj10KGose19fdjpuLGk6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShWLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1GKHQuX192KSxyPXQuby5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxXKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sVi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMudT1udWxsLHRoaXMubz1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLm8uc2V0KHRbZV0sdGhpcy51PVsxLDAsdGhpcy51XSk7cmV0dXJuIG4uY2hpbGRyZW59LFYucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1WLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5vLmZvckVhY2goZnVuY3Rpb24odCxlKXtXKG4sZSx0KX0pfTt2YXIgQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsSD0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxaPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sWT0vW0EtWjAtOV0vZywkPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxxPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIEcobix0LGUpe3JldHVybiBudWxsPT10Ll9fayYmKHQudGV4dENvbnRlbnQ9XCJcIiksbyhuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9ZnVuY3Rpb24gSihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgSz1lLmV2ZW50O2Z1bmN0aW9uIFEoKXt9ZnVuY3Rpb24gWCgpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX1mdW5jdGlvbiBubigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gSyYmKG49SyhuKSksbi5wZXJzaXN0PVEsbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1YLG4uaXNEZWZhdWx0UHJldmVudGVkPW5uLG4ubmF0aXZlRXZlbnQ9bn07dmFyIHRuLGVuPXtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHJuPWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbihuKXtcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiZmdW5jdGlvbihuKXt2YXIgdD1uLnByb3BzLGU9bi50eXBlLHU9e307Zm9yKHZhciBvIGluIHQpe3ZhciBpPXRbb107aWYoIShcInZhbHVlXCI9PT1vJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09aXx8JCYmXCJjaGlsZHJlblwiPT09byYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09b3x8XCJjbGFzc05hbWVcIj09PW8pKXt2YXIgbD1vLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PW8mJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/bz1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09byYmITA9PT1pP2k9XCJcIjpcIm9uZG91YmxlY2xpY2tcIj09PWw/bz1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1sfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxxKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1sP289XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09bD9vPVwib25mb2N1c291dFwiOloudGVzdChvKT9vPWw6LTE9PT1lLmluZGV4T2YoXCItXCIpJiZILnRlc3Qobyk/bz1vLnJlcGxhY2UoWSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpOm51bGw9PT1pJiYoaT12b2lkIDApOmw9bz1cIm9uaW5wdXRcIixcIm9uaW5wdXRcIj09PWwmJnVbbz1sXSYmKG89XCJvbmlucHV0Q2FwdHVyZVwiKSx1W29dPWl9fVwic2VsZWN0XCI9PWUmJnUubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodS52YWx1ZSkmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPS0xIT11LnZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSl9KSksXCJzZWxlY3RcIj09ZSYmbnVsbCE9dS5kZWZhdWx0VmFsdWUmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPXUubXVsdGlwbGU/LTEhPXUuZGVmYXVsdFZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSk6dS5kZWZhdWx0VmFsdWU9PW4ucHJvcHMudmFsdWV9KSksdC5jbGFzcyYmIXQuY2xhc3NOYW1lPyh1LmNsYXNzPXQuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJjbGFzc05hbWVcIixlbikpOih0LmNsYXNzTmFtZSYmIXQuY2xhc3N8fHQuY2xhc3MmJnQuY2xhc3NOYW1lKSYmKHUuY2xhc3M9dS5jbGFzc05hbWU9dC5jbGFzc05hbWUpLG4ucHJvcHM9dX0obiksbi4kJHR5cGVvZj1CLHJuJiZybihuKX07dmFyIHVuPWUuX19yO2UuX19yPWZ1bmN0aW9uKG4pe3VuJiZ1bihuKSx0bj1uLl9fY307dmFyIG9uPWUuZGlmZmVkO2UuZGlmZmVkPWZ1bmN0aW9uKG4pe29uJiZvbihuKTt2YXIgdD1uLnByb3BzLGU9bi5fX2U7bnVsbCE9ZSYmXCJ0ZXh0YXJlYVwiPT09bi50eXBlJiZcInZhbHVlXCJpbiB0JiZ0LnZhbHVlIT09ZS52YWx1ZSYmKGUudmFsdWU9bnVsbD09dC52YWx1ZT9cIlwiOnQudmFsdWUpLHRuPW51bGx9O3ZhciBsbj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRuLl9fbltuLl9fY10ucHJvcHMudmFsdWV9fX19LGNuPVwiMTcuMC4yXCI7ZnVuY3Rpb24gZm4obil7cmV0dXJuIHQuYmluZChudWxsLG4pfWZ1bmN0aW9uIGFuKG4pe3JldHVybiEhbiYmbi4kJHR5cGVvZj09PUJ9ZnVuY3Rpb24gc24obil7cmV0dXJuIGFuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24gdm4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgZG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0scG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sbW49dTtmdW5jdGlvbiB5bihuKXtuKCl9ZnVuY3Rpb24gX24obil7cmV0dXJuIG59ZnVuY3Rpb24gYm4oKXtyZXR1cm5bITEseW5dfXZhciBTbj1kO2Z1bmN0aW9uIGduKG4sdCl7dmFyIGU9dCgpLHI9YSh7aDp7X186ZSx2OnR9fSksdT1yWzBdLmgsbz1yWzFdO3JldHVybiBkKGZ1bmN0aW9uKCl7dS5fXz1lLHUudj10LEUodS5fXyx0KCkpfHxvKHtoOnV9KX0sW24sZSx0XSksdihmdW5jdGlvbigpe3JldHVybiBFKHUuX18sdS52KCkpfHxvKHtoOnV9KSxuKGZ1bmN0aW9uKCl7RSh1Ll9fLHUudigpKXx8byh7aDp1fSl9KX0sW25dKSxlfXZhciBDbj17dXNlU3RhdGU6YSx1c2VJZDpzLHVzZVJlZHVjZXI6aCx1c2VFZmZlY3Q6dix1c2VMYXlvdXRFZmZlY3Q6ZCx1c2VJbnNlcnRpb25FZmZlY3Q6U24sdXNlVHJhbnNpdGlvbjpibix1c2VEZWZlcnJlZFZhbHVlOl9uLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmduLHN0YXJ0VHJhbnNpdGlvbjp5bix1c2VSZWY6cCx1c2VJbXBlcmF0aXZlSGFuZGxlOm0sdXNlTWVtbzp5LHVzZUNhbGxiYWNrOl8sdXNlQ29udGV4dDpiLHVzZURlYnVnVmFsdWU6Uyx2ZXJzaW9uOlwiMTcuMC4yXCIsQ2hpbGRyZW46TyxyZW5kZXI6RyxoeWRyYXRlOkosdW5tb3VudENvbXBvbmVudEF0Tm9kZTpobixjcmVhdGVQb3J0YWw6eixjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6Zm4sY2xvbmVFbGVtZW50OnNuLGNyZWF0ZVJlZjpjLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6YW4sZmluZERPTU5vZGU6dm4sQ29tcG9uZW50Om4sUHVyZUNvbXBvbmVudDp3LG1lbW86eCxmb3J3YXJkUmVmOmssZmx1c2hTeW5jOnBuLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmRuLFN0cmljdE1vZGU6bW4sU3VzcGVuc2U6RCxTdXNwZW5zZUxpc3Q6VixsYXp5Ok0sX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6bG59O2V4cG9ydHtPIGFzIENoaWxkcmVuLHcgYXMgUHVyZUNvbXBvbmVudCxtbiBhcyBTdHJpY3RNb2RlLEQgYXMgU3VzcGVuc2UsViBhcyBTdXNwZW5zZUxpc3QsbG4gYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc24gYXMgY2xvbmVFbGVtZW50LGZuIGFzIGNyZWF0ZUZhY3RvcnkseiBhcyBjcmVhdGVQb3J0YWwsQ24gYXMgZGVmYXVsdCx2biBhcyBmaW5kRE9NTm9kZSxwbiBhcyBmbHVzaFN5bmMsayBhcyBmb3J3YXJkUmVmLEogYXMgaHlkcmF0ZSxhbiBhcyBpc1ZhbGlkRWxlbWVudCxNIGFzIGxhenkseCBhcyBtZW1vLEcgYXMgcmVuZGVyLHluIGFzIHN0YXJ0VHJhbnNpdGlvbixobiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLGRuIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLF9uIGFzIHVzZURlZmVycmVkVmFsdWUsU24gYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LGduIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGJuIGFzIHVzZVRyYW5zaXRpb24sY24gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRPcGVuID0gKGRlbGF5ID0gMTAwMCkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3Qgb25Ub2dnbGUgPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpXG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzT3Blbih0cnVlKVxuICAgIH0sIGRlbGF5KVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICB9LCBbZGVsYXldKVxuXG4gIHJldHVybiB7XG4gICAgaXNPcGVuLFxuICAgIG9uVG9nZ2xlXG4gIH1cbn1cbiIsImltcG9ydHtvcHRpb25zIGFzIHJ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciBfPTA7ZnVuY3Rpb24gbyhvLGUsbix0LGYsbCl7dmFyIHMsdSxhPXt9O2Zvcih1IGluIGUpXCJyZWZcIj09dT9zPWVbdV06YVt1XT1lW3VdO3ZhciBpPXt0eXBlOm8scHJvcHM6YSxrZXk6bixyZWY6cyxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fZDp2b2lkIDAsX19jOm51bGwsX19oOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLV8sX19zb3VyY2U6ZixfX3NlbGY6bH07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbyYmKHM9by5kZWZhdWx0UHJvcHMpKWZvcih1IGluIHMpdm9pZCAwPT09YVt1XSYmKGFbdV09c1t1XSk7cmV0dXJuIHIudm5vZGUmJnIudm5vZGUoaSksaX1leHBvcnR7byBhcyBqc3gsbyBhcyBqc3hERVYsbyBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ByZWFjdCdcblxuZXhwb3J0IGNvbnN0IFN0YXRlID0gY3JlYXRlQ29udGV4dCgpXG5cbmNvbnN0IFN0YXRlQ29udGV4dCA9ICh7IGNoaWxkcmVuLCB2YWx1ZSB9KSA9PiB7XG4gIHJldHVybiA8U3RhdGUuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9TdGF0ZS5Qcm92aWRlcj5cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250ZXh0XG4iLCJpbXBvcnQgeyBDb21wb25lbnRDaGlsZCwgQ29udGFpbmVyTm9kZSwgcmVuZGVyIGFzIHByZWFjdFJlbmRlciB9IGZyb20gJ3ByZWFjdCdcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vU3RhdGVDb250ZXh0J1xuXG5leHBvcnQgY29uc3QgcmVuZGVyID0gKHZOb2RlOiBDb21wb25lbnRDaGlsZCkgPT4gKHRhcmdldDogQ29udGFpbmVyTm9kZSwgc3RhdGU/OiBhbnkpID0+XG4gIHByZWFjdFJlbmRlcig8U3RhdGVDb250ZXh0IHZhbHVlPXtzdGF0ZX0+e3ZOb2RlfTwvU3RhdGVDb250ZXh0PiwgdGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gXCIuLi9TdGF0ZUNvbnRleHRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUN1cnJlbnRTdGF0ZSA9IDxUVmFsdWUgPSB1bmtub3duPigpID0+IHVzZUNvbnRleHQ8VFZhbHVlPihTdGF0ZSlcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbk1lcmdlVmFsdWU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZU9iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlR2V0O1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9QbGFpbk9iamVjdDtcbiIsInZhciBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0JyksXG4gICAgdG9QbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vdG9QbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZURlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFzc2lnbk1lcmdlVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25NZXJnZVZhbHVlJyksXG4gICAgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBiYXNlTWVyZ2VEZWVwID0gcmVxdWlyZSgnLi9fYmFzZU1lcmdlRGVlcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyksXG4gICAgc2FmZUdldCA9IHJlcXVpcmUoJy4vX3NhZmVHZXQnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBrZXlzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0l0ZXJhdGVlQ2FsbDtcbiIsInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2lnbmVyO1xuIiwidmFyIGJhc2VNZXJnZSA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZScpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2U7XG4iLCJcbmludGVyZmFjZSBJbmplY3RMaW5rT3B0aW9ucyB7XG4gIHJlbDogc3RyaW5nXG4gIGhyZWY6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgaW5qZWN0TGluayA9KG9wdGlvbnM6IEluamVjdExpbmtPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpXG5cbiAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBsaW5rLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSlcblxuICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xufVxuIiwiaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gXCIuL2luZGV4XCI7XG5cbnR5cGUgVmlzaXRvciA9IENhbGxiYWNrPFtQcm9wZXJ0eUtleSwgdW5rbm93biwgc3RyaW5nXT5cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yID0gKGlucHV0OiB1bmtub3duLCB2aXNpdG9yOiBWaXNpdG9yLCBwYXRoPzogc3RyaW5nKTogYW55ID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG5cbiAgICByZXR1cm4gaW5wdXQubWFwKChlbCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1BhdGggPSBbcGF0aCwgaW5kZXhdLmZpbHRlcihpc1ZhbHVlKS5qb2luKCcuJylcbiAgICAgIHJldHVybiBpdGVyYXRvcih2aXNpdG9yKGluZGV4LCBlbCwgbmV3UGF0aCksIHZpc2l0b3IsIG5ld1BhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGlucHV0KS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBuZXdQYXRoID0gW3BhdGgsIGtleV0uZmlsdGVyKGlzVmFsdWUpLmpvaW4oJy4nKVxuICAgICAgYWNjW2tleV0gPSBpdGVyYXRvcih2aXNpdG9yKGtleSwgdmFsdWUsIG5ld1BhdGgpLCB2aXNpdG9yLCBuZXdQYXRoKVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30gYXMgYW55KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0XG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IGxvZGFzaE1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSdcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT5cbiAgIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGlzVmFsdWUgPSA8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBFeGNsdWRlPFQsIG51bGwgfCB1bmRlZmluZWQ+ID0+ICFpc0VtcHR5VmFsdWUodmFsdWUpXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+XG4gICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgfHwgdmFsdWUgPT09IG51bGxcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnN0YW50cyA9IDxLIGV4dGVuZHMgc3RyaW5nPiguLi5jb25zdGFudHM6IEtbXSkgPT4ge1xuICByZXR1cm4gY29uc3RhbnRzLnJlZHVjZTx7IFtQIGluIEtdOiBQIH0+KChhY2MsIGNvbnN0YW50KSA9PiB7XG4gICAgYWNjW2NvbnN0YW50XSA9IGNvbnN0YW50XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSBhcyB7IFtQIGluIEtdOiBQIH0pXG59XG5cbmV4cG9ydCBjb25zdCBwaWNrID0gPFRWYWx1ZSBleHRlbmRzIEFueU9iamVjdD4ob2JqOiBUVmFsdWUsIC4uLnByb3BzOiAoa2V5b2YgVFZhbHVlKVtdKSA9PiB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKHJlc3VsdCwgcHJvcCkgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9ialtwcm9wXVxuICAgIHJldHVybiByZXN1bHRcbiAgfSwge30gYXMgYW55KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgQW55T2JqZWN0LCBQIGV4dGVuZHMgc3RyaW5nW10+KG9iajogVCwgLi4ucHJvcHM6IFApOiBPbWl0PFQsIFBbbnVtYmVyXT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgZGVsZXRlIHJlc3VsdFtwcm9wXVxuICB9KVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmVmFsdWU/OiB1bmtub3duKTogYW55ID0+IHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuICBjb25zdCByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqOiBBbnlPYmplY3QsIGtleTogc3RyaW5nKSA9PiBwcmV2T2JqICYmIHByZXZPYmpba2V5XSwgb2JqKVxuICAvLyBJZiBmb3VuZCB2YWx1ZSBpcyB1bmRlZmluZWQgcmV0dXJuIGRlZmF1bHQgdmFsdWU7IG90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlXG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZlZhbHVlIDogcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBzZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG5cbiAgcmV0dXJuIHBhdGhBcnJheS5yZWR1Y2UoKGFjYywga2V5LCBpKSA9PiB7XG4gICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge31cbiAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWVcbiAgICByZXR1cm4gYWNjW2tleV1cbiAgfSwgb2JqKVxufVxuXG5leHBvcnQgY29uc3QgaGV4VG9SZ2IgPSAoaGV4OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgY2hhcnMgPSBoZXguc2xpY2UoMSlcblxuICBpZiAoY2hhcnMubGVuZ3RoID09PSAzKSB7XG4gICAgaGV4ID0gY2hhcnNcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5tYXAodmFsID0+IGAke3ZhbH0ke3ZhbH1gKVxuICAgICAgLmpvaW4oJycpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBpc0pzb25TYW1lID0gKC4uLnZhbHVlczogdW5rbm93bltdKSA9PiB7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZXZlcnkoKHZhbCwgXywgYXJyKSA9PiB2YWwgPT09IGFyclswXSlcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvUmdiYSA9IChyZ2I6IHN0cmluZywgYWxwaGEgPSAxKTogc3RyaW5nID0+IHJnYi5yZXBsYWNlKCcpJywgYCwgJHthbHBoYX0pYCkucmVwbGFjZSgncmdiJywgJ3JnYmEnKVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBsb2Rhc2hNZXJnZVxuXG5leHBvcnQgY29uc3QgZGV2aWNlcyA9IFsnZGVza3RvcCcsICdsYXB0b3AnLCAndGFibGV0JywgJ21vYmlsZSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UUyA9IHtcbiAgbW9iaWxlOiAzMjAsXG4gIHRhYmxldDogNzY4LFxuICBsYXB0b3A6IDEwMjQsXG4gIGRlc2t0b3A6IDE5MjBcbn0gYXMgY29uc3RcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vZG9tJ1xuZXhwb3J0ICogZnJvbSAnLi9pdGVyYXRvcidcbiIsImltcG9ydCB7IEFueU9iamVjdCwgRGV2aWNlLCBkZXZpY2VzLCBFeHRyYWN0UnVsZXMsIGlzVmFsdWUsIGl0ZXJhdG9yLCBMYXllciwgUnVsZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuY29uc3QgaXNWYWxpZExheWVyID0gKHN0YXRlOiBBbnlPYmplY3QgPSB7fSk6IHN0YXRlIGlzIExheWVyID0+XG4gIHR5cGVvZiBzdGF0ZSA9PT0gJ29iamVjdCcgJiYgaXNWYWx1ZShzdGF0ZSkgJiYgZGV2aWNlcy5ldmVyeShkZXZpY2UgPT4gZGV2aWNlIGluIHN0YXRlKVxuXG5leHBvcnQgY29uc3QgZ2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2UgPSAnZGVza3RvcCc+KFxuICBzdGF0ZTogVFN0YXRlLFxuICBkZXZpY2U6IFREZXZpY2Vcbik6IEV4dHJhY3RSdWxlczxUU3RhdGUsIFREZXZpY2U+ID0+IHtcbiAgaWYgKCFzdGF0ZSkgcmV0dXJuIHN0YXRlXG5cbiAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRlLCAoX2tleSwgdmFsdWU6IGFueSkgPT4ge1xuICAgIGlmIChpc1ZhbGlkTGF5ZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCByZXN1bHRSdWxlcyA9IHZhbHVlW2RldmljZV1cbiAgICAgIGlmICgncGFyZW50JyBpbiByZXN1bHRSdWxlcyAmJiBpc1ZhbHVlKHJlc3VsdFJ1bGVzLnBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlW3Jlc3VsdFJ1bGVzLnBhcmVudF1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRSdWxlc1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KSBhcyBFeHRyYWN0UnVsZXM8VFN0YXRlLCBURGV2aWNlPlxufVxuIiwiaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBnZXRSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUnXG5pbXBvcnQgeyBBbnlTdGF0ZSB9IGZyb20gJy4uL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgdXNlR2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2U+KHN0YXRlOiBUU3RhdGUsIGRldmljZTogVERldmljZSkgPT5cbiAgZ2V0UnVsZXM8VFN0YXRlLCBURGV2aWNlPihzdGF0ZSwgZGV2aWNlKVxuIiwiaW1wb3J0IHsgQlJFQUtQT0lOVFMsIERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBNdXRhYmxlUmVmIH0gZnJvbSAncHJlYWN0L2hvb2tzJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRhcmdldFJlZjogTXV0YWJsZVJlZjxIVE1MRGl2RWxlbWVudD5cbiAgLyoqXG4gICAqIFByb21vINCy0YHRgtGA0LDQuNCy0LDQtdGC0YHRjyDQsiDRgNCw0LfQvdGL0LUgRE9NINC4INC80Ysg0L3QtSDQt9C90LDQtdC8INGA0LDQt9C80LXRgCDQutCw0LrQvtCz0L4g0LrQvtC90YLQtdC50L3QtdGA0LBcbiAgICog0Y/QstC70Y/QtdGC0YHRjyDQvdGD0LbQvdGL0LwuINCd0LDQv9GA0LjQvNC10YAgR2lmdCog0LfQsNC90LjQvNCw0LXRgiDQstGB0LXQs9C+IDMwcHgsINC4INC90LXQvtCx0YXQvtC00LjQvNGL0Lkg0LrQvtC90YLQtdC50L3QtdGAXG4gICAqINC80L7QttC10YIg0L3QsNGF0L7QtNC40YLRjNGB0Y8g0LPQvtGA0LDQt9C00L4g0LLRi9GI0LUuXG4gICAqL1xuICBwYXJlbnRLZXk/OiBzdHJpbmdcbiAgYnJlYWtwb2ludHM/OiB0eXBlb2YgQlJFQUtQT0lOVFNcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNvbnRhaW5lckRldmljZSA9ICh7XG4gIHRhcmdldFJlZixcbiAgcGFyZW50S2V5ID0gJ2RldmljZS1jb250YWluZXInLFxuICBicmVha3BvaW50cyA9IEJSRUFLUE9JTlRTXG59OiBPcHRpb25zKSA9PiB7XG4gIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSB1c2VTdGF0ZTxEZXZpY2U+KCdkZXNrdG9wJylcblxuICBjb25zdCBjaGVja0RldmljZSA9IChwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMFxuICAgIGNvbnN0IHNvcnRlZEJyZWFrcG9pbnRzID0gT2JqZWN0LmVudHJpZXMoeyAuLi5icmVha3BvaW50cyB9KS5zb3J0KChbXzEsIHZhbHVlQV0sIFtfMiwgdmFsdWVCXSkgPT4gdmFsdWVBIC0gdmFsdWVCKVxuXG4gICAgY29uc3QgZmluZERldmljZSA9XG4gICAgICAoc29ydGVkQnJlYWtwb2ludHMuZmluZCgoW18xLCB2YWx1ZV0sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IFtfMiwgbmV4dFZhbHVlXSA9IHNvcnRlZEJyZWFrcG9pbnRzW2luZGV4ICsgMV0gfHwgW11cblxuICAgICAgICByZXR1cm4gcGFyZW50V2lkdGggPj0gdmFsdWUgJiYgcGFyZW50V2lkdGggPCBuZXh0VmFsdWVcbiAgICAgIH0pPy5bMF0gYXMgRGV2aWNlKSB8fCAnZGVza3RvcCdcblxuICAgIHNldERldmljZShmaW5kRGV2aWNlKVxuICB9XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGFyZ2V0UmVmLmN1cnJlbnQuY2xvc2VzdChgW2RhdGEtJHtwYXJlbnRLZXl9XWApXG5cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudCkpXG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQpXG5cbiAgICAgIGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gZGV2aWNlXG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIGRldmljZXMsIEZpdE9wdGlvbiwgaGV4VG9SZ2IsIGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSwgcmdiVG9SZ2JhIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gJ3NyYy9yZW5kZXJEcml2ZXInXG5pbXBvcnQgeyBpbmplY3RTdHlsZVJ1bGVzLCBTdHlsZVJ1bGVzIH0gZnJvbSAnc3JjL3V0aWxzL2luamVjdFN0eWxlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbGlkU3R5bGVLZXkgfSBmcm9tICcuL2lzVmFsaWRTdHlsZUtleSdcblxuLyoqXG4gKiDQn9C70LDQs9C40L0g0L/RgNC40LzQtdC90Y/QtdGCINC/0YDQsNCy0LjQu9CwOiDRgdGC0LjQu9C4LCBpbm5lclRleHQgLi4uXG4gKiDQldGB0LvQuCDQutC+0L3RgtC10L3RgtCwINC90LXRgiwg0YLQviDQndC+0LTQsCDRgdC60YDRi9Cy0LDQtdGC0YHRj1xuICovXG5cbnR5cGUgQ3VzdG9tU3R5bGVzID0gUGFydGlhbDxcbiAgT21pdDxTdHlsZVJ1bGVzLCAnYm9yZGVyV2lkdGgnIHwgJ21pbkhlaWdodCcgfCAnbWluV2lkdGgnIHwgJ2ZvbnRTaXplJz4gJiB7XG4gICAgbWluSGVpZ2h0OiBudW1iZXJcbiAgICBtaW5XaWR0aDogbnVtYmVyXG4gICAgZm9udFNpemU6IG51bWJlclxuICB9XG4+XG5cbmRlY2xhcmUgbW9kdWxlICdzcmMvcmVuZGVyRHJpdmVyJyB7XG4gIGludGVyZmFjZSBSZW5kZXJEcml2ZXJSdWxlIGV4dGVuZHMgQ3VzdG9tU3R5bGVzIHtcbiAgICBpbm5lckhUTUw/OiBzdHJpbmdcbiAgICBpbm5lclRleHQ/OiBzdHJpbmdcbiAgICBjb3JuZXI/OiBudW1iZXJcbiAgICBiYWNrZ3JvdW5kRml0PzogRml0T3B0aW9uXG4gICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eT86IG51bWJlclxuICAgIGlzQm9sZD86IGJvb2xlYW5cbiAgICBpc0l0YWxpYz86IGJvb2xlYW5cbiAgICBpc1Rocm91Z2g/OiBib29sZWFuXG4gICAgJGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICB9XG59XG5cbmNvbnN0IHdyYXBUbyA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1bnRpbDogJyUnIHwgJ3B4JykgPT4gYCR7dmFsdWV9JHt1bnRpbH1gXG5cbmNvbnN0IHRvUHggPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdweF8nKVxuY29uc3QgdG9QZXJjZW50ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncGVyY2VudF8nKVxuXG5jb25zdCBmb3JtYXRSdWxlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGxldCBuZXdLZXkgPSBrZXlcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWVcblxuICBpZiAodG9QeChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3B4XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICB9XG4gIGlmICh0b1BlcmNlbnQobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdwZXJjZW50XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAnJScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleTogbmV3S2V5LFxuICAgIHZhbHVlOiBuZXdWYWx1ZVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfVE9fUFggPSBbXG4gICdib3JkZXJXaWR0aCcsXG4gICdib3JkZXJMZWZ0V2lkdGgnLFxuICAnYm9yZGVyUmlnaHRXaWR0aCcsXG4gICdib3JkZXJUb3BXaWR0aCcsXG4gICdib3JkZXJCb3R0b21XaWR0aCcsXG4gICdtaW5IZWlnaHQnLFxuICAnbWluV2lkdGgnLFxuICAnbWF4V2lkdGgnLFxuICAnbWF4SGVpZ2h0JyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2hlaWdodCcsXG4gICd3aWR0aCcsXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ2JvdHRvbScsXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCdcbl1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUnVsZXMgPSAocnVsZXM6IEFueU9iamVjdCwgbGF5ZXI/OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJ1bGVzKVxuXG4gIGlmIChrZXlzLmluY2x1ZGVzKCdpbm5lckhUTUwnKSB8fCBrZXlzLmluY2x1ZGVzKCdpbm5lclRleHQnKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZyEgSW5uZXJIVE1MIGFuZCBpbm5lclRleHQgaXMgZGVwcmVjYXRlZC4gVXNlIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eS5gLCBsYXllcilcbiAgfVxuXG4gIGlmICh0eXBlb2YgcnVsZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHJ1bGVzXG4gIH1cblxuICBpZiAoJ3R5cG9ncmFwaHknIGluIHJ1bGVzICYmICdhY2NlbnRUeXBvZ3JhcGh5JyBpbiBydWxlcykge1xuICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBydWxlcy50eXBvZ3JhcGh5XG4gICAgY29uc3QgYWNjZW50VHlwb2dyYXBoeSA9IHJ1bGVzLmFjY2VudFR5cG9ncmFwaHlcblxuICAgIHJ1bGVzID0ge1xuICAgICAgLi4ucnVsZXMsXG4gICAgICAuLi50eXBvZ3JhcGh5LFxuICAgICAgJy0tZm9udC1mYW1pbHknOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gICAgICAnLS1hY2NlbnQtY29sb3InOiBhY2NlbnRUeXBvZ3JhcGh5LmNvbG9yLFxuICAgICAgJ3B4Xy0tYWNjZW50LXNpemUnOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRTaXplXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJ1bGVzKS5yZWR1Y2UoKGFjYywgW3Byb3BLZXksIHByb3BWYWx1ZV0pID0+IHtcbiAgICBpZiAoREVGQVVMVF9UT19QWC5pbmNsdWRlcyhwcm9wS2V5KSkge1xuICAgICAgcHJvcFZhbHVlID0gd3JhcFRvKHByb3BWYWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IGZvcm1hdFJ1bGUocHJvcEtleSwgcHJvcFZhbHVlKVxuICAgIGFjY1trZXldID0gdmFsdWVcblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBhY2MuaW5uZXJIVE1MID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJUZXh0Jykge1xuICAgICAgYWNjLmlubmVyVGV4dCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgYWNjLmNoaWxkcmVuID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IChpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJykgOiB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnIHx8IGtleSA9PT0gJ2lubmVyVGV4dCcgfHwga2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYWNjLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIH0gZWxzZSBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2JvcmRlcldpZHRoJykpIHtcbiAgICAgIGFjYy5ib3JkZXJTdHlsZSA9ICdzb2xpZCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY29ybmVyJykge1xuICAgICAgYWNjLmJvcmRlclJhZGl1cyA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEZpdCcpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kU2l6ZSA9IHZhbHVlIGFzIEZpdE9wdGlvblxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kSW1hZ2UnICYmIGlzVmFsdWUodmFsdWUpKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3ZhbHVlfSlgXG4gICAgICBhY2MuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRDb2xvck9wYWNpdHknICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkpICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvcikpIHtcbiAgICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGFjYy5iYWNrZ3JvdW5kQ29sb3IpXG4gICAgICBpZiAocmdiKSB7XG4gICAgICAgIGFjYy5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb1JnYmEoYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAsICthY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSAvIDEwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNCb2xkJykge1xuICAgICAgYWNjLmZvbnRXZWlnaHQgPSB2YWx1ZSA/ICdib2xkJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0l0YWxpYycpIHtcbiAgICAgIGFjYy5mb250U3R5bGUgPSB2YWx1ZSA/ICdpdGFsaWMnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzVGhyb3VnaCcpIHtcbiAgICAgIGFjYy50ZXh0RGVjb3JhdGlvbiA9IHZhbHVlID8gJ2xpbmUtdGhyb3VnaCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHJ1bGVzKVxufVxuIiwiaW1wb3J0IHsgcGFyc2VSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvcGFyc2VSdWxlcydcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5jb25zdCBpc1ZhbGlkUnVsZSA9IChydWxlOiBBbnlPYmplY3QpID0+IHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShydWxlKSAmJiAncGFyZW50JyBpbiBydWxlXG5cbmV4cG9ydCBjb25zdCB1c2VQYXJzZVJ1bGVzID0gKHN0YXRlOiB1bmtub3duKSA9PlxuICBPYmplY3QuZW50cmllcyhzdGF0ZSkucmVkdWNlKChhY2MsIFtsYXllciwgcnVsZV0pID0+IHtcbiAgICBhY2NbbGF5ZXJdID0gaXNWYWxpZFJ1bGUocnVsZSkgPyBwYXJzZVJ1bGVzKHsgLi4uc3RhdGVbbGF5ZXJdIH0sIGxheWVyKSA6IHJ1bGVcblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY29uc3QgRGlzcGxheVRleHQ6IEZDPFByb3BzPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBjaGlsZHJlbj8ucmVwbGFjZSgnc2NyaXB0JywgJycpPy5yZXBsYWNlKC97eyguKj8pfX0vZywgYDxzcGFuPiQxPC9zcGFuPmApXG5cbiAgcmV0dXJuIDxkaXYgey4uLnJlc3R9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZm9ybWF0VmFsdWUgfX0gLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVRleHRcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZVRvZ2dsZSA9ICgpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHJldHVybiBbaXNPcGVuLCAoKSA9PiBzZXRJc09wZW4ocHJldiA9PiAhcHJldildXG59XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IENsb3NlSWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCc+XG4gICAgPHBhdGhcbiAgICAgIGQ9J00xNy42NTkgNC45MjlhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDEzLjQxNiAxMmw1LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTUgMS40MTRsLTUuNjU2LTUuNjU3LTUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEwxMC41ODcgMTIgNC45MzEgNi4zNDNBMSAxIDAgMSAxIDYuMzQ1IDQuOTNsNS42NTcgNS42NTcgNS42NTYtNS42NTdaJ1xuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBDbG9zZUljb25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgR2lmdEljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHZpZXdCb3g9JzAgMCAxNiAxNic+XG4gICAgPHBhdGhcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgIGZpbGxSdWxlPSdldmVub2RkJ1xuICAgICAgZD0nTTIuMTMgOEg3djcuMzFIMy4yMmExLjA5IDEuMDkgMCAwMS0xLjA5LTEuMDl6TTkgMTUuMzRoMy44MWExLjA5IDEuMDkgMCAwMDEuMDktMS4wOVY4SDl6bTUuOC05Ljk0djEuMTlhLjQ4LjQ4IDAgMDEtLjQ4LjQ4SDEuNzFhLjQ4LjQ4IDAgMDEtLjQ4LS40OFY1LjRjMC0uNTk2LjQ4NC0xLjA4IDEuMDgtMS4wOEg1YTIuNDggMi40OCAwIDAxLTEuNDctMS42NSAxLjYyIDEuNjIgMCAwMS4yNi0xLjQgMS41NyAxLjU3IDAgMDExLS41OGMuMTEtLjAxLjIyLS4wMS4zMyAwYTIuNSAyLjUgMCAwMTIgMUE5IDkgMCAwMTggMy4yMmExMC4zOCAxMC4zOCAwIDAxLjkxLTEuNTQgMi40OSAyLjQ5IDAgMDExLjkzLTFoLjM2Yy4zNjkuMDY1LjcwMi4yNi45NC41NS4zMS40MDcuNDE0LjkzNi4yOCAxLjQzYTIuNDggMi40OCAwIDAxLTEuNDUgMS42NGgyLjc3YTEuMDggMS4wOCAwIDAxMS4wMyAxLjF6TTguNjYgNGE5LjgxIDkuODEgMCAwMDEuOS0uNTUgMS41MiAxLjUyIDAgMDAuODgtMSAuNjguNjggMCAwMC0uMS0uNTkuNi42IDAgMDAtLjM0LS4yMi41OC41OCAwIDAwLS4xOCAwIDEuNTIgMS41MiAwIDAwLTEuMTcuNjNBOS4wNiA5LjA2IDAgMDA4LjY2IDR6bS0zLjMyLS41OEE5LjYyIDkuNjIgMCAwMDcuMjUgNGE4LjU5IDguNTkgMCAwMC0xLTEuNzIgMS41MSAxLjUxIDAgMDAtMS4xOC0uNjNoLS4xM2EuNjYuNjYgMCAwMC0uMzkuMjIuNjYuNjYgMCAwMC0uMDkuNTdjLjEzLjQ0My40NTMuODA0Ljg4Ljk4eidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgR2lmdEljb25cbiIsImltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICcuLi91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG50eXBlIEFuaW1hdGlvbk5hbWUgPSAnZmFkZScgfCAncHVsc2UnIHwgJ3dpZ2dsZScgfCAnZ3JhZGllbnQnXG5cbmNvbnN0IGFuaW1hdGlvbnNNYXAgPSAoYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+ICh7XG4gIGZhZGU6IGAke2FuaW1hdGlvbnMuZmFkZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgcHVsc2U6IGAke2FuaW1hdGlvbnMucHVsc2V9IC4zcyBsaW5lYXIgMHMgaW5maW5pdGUgYWx0ZXJuYXRlIGZvcndhcmRzYCxcbiAgd2lnZ2xlOiBgJHthbmltYXRpb25zLndpZ2dsZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgZ3JhZGllbnQ6IGAke2FuaW1hdGlvbnMuZ3JhZGllbnR9IDNzIGVhc2UgaW5maW5pdGVgLFxufSlcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRSdWxlcyA9IChkZXZpY2VTdGF0ZTogdW5rbm93biwgYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+IHtcbiAgY29uc3QgZnVsbEFuaW1hdGlvbnMgPSBhbmltYXRpb25zTWFwKGFuaW1hdGlvbnMpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIGNvbnN0IGFsbEFuaW1hdGlvbnMgPSAocnVsZXM/Lmljb24/LmFuaW1hdGlvbnMgfHwgW10pXG4gICAgLm1hcCgoYW5pbWF0aW9uOiBBbmltYXRpb25OYW1lKSA9PiBmdWxsQW5pbWF0aW9uc1thbmltYXRpb25dKVxuICAgIC5qb2luKCcsICcpXG5cbiAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4gICAgaXNWYWx1ZShydWxlcz8uaWNvbj8uZ3JhZGllbnRDb2xvcikgJiYgcnVsZXM/Lmljb24/LmFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50JylcbiAgICAgID8ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGVzLmljb24/LmJhY2tncm91bmRDb2xvcn0gMCUsICR7cnVsZXM/Lmljb24/LmdyYWRpZW50Q29sb3J9IDEwMCUpIDAlIDAlIC8gNDAwJSA0MDAlYCxcbiAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbiAgICAgICAgfVxuICAgICAgOiB7fVxuXG4gIGNvbnN0IGljb25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uaWNvbiB8fCB7fSxcbiAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4gICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNJY29uLFxuICAgIGFycm93UnVsZXMsXG4gICAgYm9keVJ1bGVzLFxuICAgIGljb25SdWxlc1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgYmFja2dyb3VuZE9wdGlvbnMgPSBbJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kRml0J11cblxuZXhwb3J0IGNvbnN0IHNwYWNpbmdPcHRpb25zID0gW1xuICAnbWFyZ2luVG9wJyxcbiAgJ21hcmdpbkJvdHRvbScsXG4gICdtYXJnaW5MZWZ0JyxcbiAgJ21hcmdpblJpZ2h0JyxcbiAgJ3BhZGRpbmdUb3AnLFxuICAncGFkZGluZ0JvdHRvbScsXG4gICdwYWRkaW5nTGVmdCcsXG4gICdwYWRkaW5nUmlnaHQnXG5dXG5cblxuZXhwb3J0IGNvbnN0IG5vb3BZYU1ldHJpa2EgPSAoZ29hbDogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhgTm9vcCBZYU1la3Rpa2EgcmVhY2ggZ29hbDogJHtnb2FsfWApXG5leHBvcnQgY29uc3Qgbm9vcEFkRm94ID0gKGdvYWw6IHN0cmluZykgPT4gY29uc29sZS5sb2coYE5vb3AgQWRGb3ggcmVhY2ggZ29hbDogJHtnb2FsfWApXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBpc0pzb25TYW1lLCBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBub29wQWRGb3gsIG5vb3BZYU1ldHJpa2EgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VNZXRyaWNzID0gKHN0YXRlOiB1bmtub3duLCBsYXllck5hbWUgPSAncm9vdCcpID0+IHtcbiAgY29uc3Qgc2F2ZU1ldHJpY3MgPSB1c2VSZWYoKVxuICBjb25zdCB5YVJlYWNoR29hbCA9IHN0YXRlLnlhUmVhY2hHb2FsIHx8IG5vb3BZYU1ldHJpa2FcbiAgY29uc3QgYWRmb3hSZWFjaEdvYWwgPSBzdGF0ZS5hZGZveFJlYWNoR29hbCB8fCBub29wQWRGb3hcbiAgY29uc3QgbWV0cmljcyA9IHBpY2soc3RhdGVbbGF5ZXJOYW1lXSwgJ3lhU2hvdycsICd5YUNsaWNrJywgJ2FkZm94U2hvdycsICdhZGZveENsaWNrJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNKc29uU2FtZShzYXZlTWV0cmljcy5jdXJyZW50LCBtZXRyaWNzKSkge1xuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIHlhUmVhY2hHb2FsKG1ldHJpY3MueWFTaG93KVxuICAgICAgfVxuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hTaG93KVxuICAgICAgfVxuICAgIH1cbiAgICBzYXZlTWV0cmljcy5jdXJyZW50ID0gbWV0cmljc1xuICB9LCBbbWV0cmljc10pXG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAobWV0cmljcy55YUNsaWNrKSB7XG4gICAgICB5YVJlYWNoR29hbChtZXRyaWNzLnlhQ2xpY2spXG4gICAgfVxuICAgIGlmIChtZXRyaWNzLmFkZm94Q2xpY2spIHtcbiAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hDbGljaylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGluamVjdExpbmssIGl0ZXJhdG9yIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiOyAvLyBodHRwczovL2dpdGh1Yi5jb20vRG93bmxvYWQvcHJlYWN0LWhlbG1ldC9pc3N1ZXMvMzRcblxuZXhwb3J0IGNvbnN0IHVzZUV4dHJhY3RGb250cyA9IChzdGF0ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBmb250cyA9IG5ldyBTZXQoW10pXG5cbiAgaXRlcmF0b3Ioc3RhdGUsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2ZvbnRGYW1pbHknKSB7XG4gICAgICBmb250cy5hZGQodmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0pXG5cbiAgY29uc3QgZm9udExpbmtzID0gdXNlTWVtbygoKSA9PiBBcnJheS5mcm9tKGZvbnRzLnZhbHVlcygpKS5tYXAoZm9udCA9PiAoe1xuICAgIHJlbDogJ3N0eWxlc2hlZXQnLFxuICAgIGhyZWY6IGBodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9JHtmb250fTozMDAsNDAwLDUwMCw3MDAmZGlzcGxheT1zd2FwYFxuICB9KSksIFtmb250c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmb250TGlua3MuZm9yRWFjaCgobGluaykgPT4gaW5qZWN0TGluayhsaW5rKSlcbiAgfSwgW2ZvbnRMaW5rc10pXG59XG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuaW1wb3J0IHsgdXNlR2lmdFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMnXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuXG5jb25zdCBTaW1wbGVHaWZ0OiBGQzxTdGF0ZT4gPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgW2xlZ2FsSXNPcGVuLCB0b2dnbGVMZWdhbElzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZTxTdGF0ZT4oKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuICBjb25zdCB7IGlzT3Blbiwgb25Ub2dnbGUgfSA9IHVzZUdpZnRPcGVuKGRldmljZVN0YXRlPy5jb250YWluZXI/LmRlbGF5KVxuICBjb25zdCB7IGhhc0ljb24sIGljb25SdWxlcywgYm9keVJ1bGVzLCBhcnJvd1J1bGVzIH0gPSB1c2VHaWZ0UnVsZXMoZGV2aWNlU3RhdGUsIHtcbiAgICBmYWRlOiBzdHlsZXMuZmFkZWluLFxuICAgIHB1bHNlOiBzdHlsZXMucHVsc2UsXG4gICAgd2lnZ2xlOiBzdHlsZXMud2lnZ2xlLFxuICAgIGdyYWRpZW50OiBzdHlsZXMuZ3JhZGllbnRcbiAgfSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMubGVnYWxPcGVuXTogbGVnYWxJc09wZW5cbiAgICAgIH0pfVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwgeyBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuIH0pfSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cnVsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8YSBocmVmPXtydWxlcy5yb290Py5vZmZlcn0gdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcicgb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgICAgICB7cnVsZXM/LnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgW3N0eWxlcy5idXR0b25BbmltYXRlZF06IHJ1bGVzLmJ1dHRvbi5pc0FuaW1hdGVkXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICBzdHlsZT17cnVsZXMuYnV0dG9ufVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsV3JhcHBlcn0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgICAgICAgIDxzcGFuPntydWxlcz8ubGVnYWw/LmNoaWxkcmVufTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gb25DbGljaz17dG9nZ2xlTGVnYWxJc09wZW59PlxuICAgICAgICAgICAgICAgICAge2xlZ2FsSXNPcGVuID8gcnVsZXM/LmxlZ2FsPy5idXR0b25PcGVuVGV4dCA6IHJ1bGVzPy5sZWdhbD8uYnV0dG9uSGlkZVRleHR9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZUdpZnQgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMudmFyaWFudDJdOiBydWxlcy5yb290Py52YXJpYW50ID09PSAndmFyaWFudDInXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxpbmV9IHN0eWxlPXtydWxlcy5saW5lfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHlJbm5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgIDxEaXNwbGF5VGV4dD57cnVsZXMudGV4dD8uY2hpbGRyZW59PC9EaXNwbGF5VGV4dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25UZXh0fT57cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNDYXJkXG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VHaWZ0T3BlbiB9IGZyb20gJ3NyYy9ob29rcy91c2VHaWZ0T3BlbidcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251c0NhcmQgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzQ2FyZCdcbmltcG9ydCB7IHVzZUV4dHJhY3RGb250cyB9IGZyb20gJ3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMnXG5pbXBvcnQgeyB1c2VHaWZ0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcydcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcblxuY29uc3QgQ29tcGxleEdpZnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbigpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IHsgaGFzSWNvbiwgaWNvblJ1bGVzLCBib2R5UnVsZXMsIGFycm93UnVsZXMgfSA9IHVzZUdpZnRSdWxlcyhkZXZpY2VTdGF0ZSwge1xuICAgIGZhZGU6IHN0eWxlcy5mYWRlaW4sXG4gICAgcHVsc2U6IHN0eWxlcy5wdWxzZSxcbiAgICB3aWdnbGU6IHN0eWxlcy53aWdnbGUsXG4gICAgZ3JhZGllbnQ6IHN0eWxlcy5ncmFkaWVudFxuICB9KVxuICBjb25zdCBoYXNUaXRsZUljb24gPSBydWxlcz8udGl0bGU/Lmhhc0ljb25cblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnLFxuICAgIH0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwge1xuICAgICAgICAgIFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtib2R5UnVsZXN9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9IHN0eWxlPXthcnJvd1J1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZX0gc3R5bGU9e3J1bGVzLmNsb3NlfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcm9tb3Rpb259IHN0eWxlPXtydWxlcy5wcm9tb3Rpb259PlxuICAgICAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfT5cbiAgICAgICAgICAgIHtoYXNUaXRsZUljb24gJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRJY29ufSBzdHlsZT17cGljayhydWxlcy50aXRsZSwgJ2NvbG9yJyl9PlxuICAgICAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRUaXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT57cnVsZXMudGl0bGU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbm5lcn0+XG4gICAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtjaGlsZH0+XG4gICAgICAgICAgICAgICAgPEJvbnVzQ2FyZCAvPlxuICAgICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Q29tcGxleEdpZnQgLz4pXG5cbi8vIGltcG9ydCB7IEVtaXR0ZXJUeXBlIH0gZnJvbSBcInNyY1wiO1xuLy8gaW1wb3J0IHsgaXNFbXB0eVZhbHVlLCBpc1ZhbHVlIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG4vL1xuXG4vL1xuLy8gZXhwb3J0IGRlZmF1bHQgKGVtaXR0ZXI6IEVtaXR0ZXJUeXBlKSA9PiB7XG4vLyAgIGVtaXR0ZXIub24oJ3JlbmRlck5vZGUnLCAoeyBydWxlLCBsYXllciB9KSA9PiB7XG4vLyAgICAgaWYgKCckYW5pbWF0aW9ucycgaW4gcnVsZSkge1xuLy8gICAgICAgY29uc3QgYWxsQW5pbWF0aW9ucyA9IHJ1bGUuJGFuaW1hdGlvbnNcbi8vICAgICAgICAgLm1hcCgoYW5pbWF0aW9uOiBrZXlvZiB0eXBlb2YgYW5pbWF0aW9uc01hcCkgPT4gYW5pbWF0aW9uc01hcFthbmltYXRpb25dKVxuLy8gICAgICAgICAuam9pbignLCAnKVxuLy9cbi8vICAgICAgIGNvbnN0IGJhY2tncm91bmRTdHlsZXMgPVxuLy8gICAgICAgICBpc1ZhbHVlKHJ1bGUuJGdyYWRpZW50Q29sb3IpICYmIHJ1bGUuJGFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50Jylcbi8vICAgICAgICAgICA/IHtcbi8vICAgICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGUuYmFja2dyb3VuZENvbG9yfSAwJSwgJHtydWxlLiRncmFkaWVudENvbG9yfSAxMDAlKWAsXG4vLyAgICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbi8vICAgICAgICAgICB9XG4vLyAgICAgICAgICAgOiB7fVxuLy9cbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBpY29uOiB7XG4vLyAgICAgICAgICAgYW5pbWF0aW9uOiBhbGxBbmltYXRpb25zLFxuLy8gICAgICAgICAgIC4uLmJhY2tncm91bmRTdHlsZXNcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ2ljb24nICYmICFpc0VtcHR5VmFsdWUocnVsZS5oYXNJY29uKSkge1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGljb25UYXJnZXQ6IHtcbi8vICAgICAgICAgICBkaXNwbGF5OiBydWxlLmhhc0ljb24gPyAnZmxleCcgOiAnbm9uZSdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ3RpdGxlJykge1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGhlYWRlckljb246IHtcbi8vICAgICAgICAgICBkaXNwbGF5OiBydWxlLmhhc0ljb24gPyAnYmxvY2snIDogJ25vbmUnXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pXG4vLyAgICAgfVxuLy9cbi8vICAgICBpZiAobGF5ZXIubGF5ZXIgPT09ICdjb250YWluZXInKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgYm9keToge1xuLy8gICAgICAgICAgICRkZWxheTogcnVsZS5kZWxheSxcbi8vICAgICAgICAgICBsZWZ0OiBydWxlLmxlZnRcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAgYXJyb3c6IHtcbi8vICAgICAgICAgICBsZWZ0OiBgJHsrKHJ1bGUubGVmdCB8fCAwKSAqIC0xICsgOH1gLFxuLy8gICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcnVsZS5iYWNrZ3JvdW5kQ29sb3IsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IHJ1bGUuYm9yZGVyV2lkdGgsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wQ29sb3I6IHJ1bGUuYm9yZGVyQ29sb3IsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlLmJvcmRlcldpZHRoLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRDb2xvcjogcnVsZS5ib3JkZXJDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJMZWZ0U3R5bGU6ICdzb2xpZCdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vLyAgIH0pXG4vLyB9XG4iLCJleHBvcnQgY29uc3Qgc3dpdGNoVGV4dEFsaWduVG9GbGV4ID0gKHRleHRBbGlnbj86IHN0cmluZykgPT5cbiAgdGV4dEFsaWduID8geyBsZWZ0OiAnZmxleC1zdGFydCcsIGNlbnRlcjogJ2NlbnRlcicsIHJpZ2h0OiAnZmxleC1lbmQnIH1bdGV4dEFsaWduXSA6IHRleHRBbGlnblxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IExpbmU6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPERpc3BsYXlUZXh0PntydWxlcz8ucm9vdD8uY2hpbGRyZW59PC9EaXNwbGF5VGV4dD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaW5lXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBzZXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgc3dpdGNoVGV4dEFsaWduVG9GbGV4IH0gZnJvbSBcInNyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleFwiO1xuaW1wb3J0IExpbmUgZnJvbSAnLi9jb21wb25lbnRzL2xpbmUnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSBcInNyYy9ob29rcy91c2VNZXRyaWNzXCI7XG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbi5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgYnV0dG9uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmJ1dHRvbixcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIGNvbnN0IGxlZ2FsUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmxlZ2FsLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9PlxuICAgICAgICAgIHsocnVsZXM/LmNoaWxkcmVuIHx8IFtdKS5tYXAoZWwgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17ZWx9PlxuICAgICAgICAgICAgICA8TGluZSAvPlxuICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICB7YnV0dG9uUnVsZXM/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgIHtsZWdhbFJ1bGVzPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IHNwYWNpbmdPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gXCJzcmMvaG9va3MvdXNlTWV0cmljc1wiO1xuXG5jb25zdCBCb251czogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBkZXZpY2UgPSBzdGF0ZT8uZGV2aWNlIHx8ICdkZXNrdG9wJ1xuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5zcGFjaW5nT3B0aW9ucyl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfSBzdHlsZT17cnVsZXMuaGVhZGVyfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtwaWNrKHJ1bGVzLnJvb3QsIC4uLnNwYWNpbmdPcHRpb25zKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfT48L2Rpdj5cbiAgICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c1xuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgQm9udXMgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+XG4gICAgICAgICAgICA8Qm9udXMgLz5cbiAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuXG5jb25zdCBNYXRjaDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBkZXZpY2UgPSBzdGF0ZT8uZGV2aWNlIHx8ICdkZXNrdG9wJ1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgfSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWFndWV9IHN0eWxlPXtydWxlcy5sZWFndWV9PntydWxlcy5sZWFndWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1BfSDigJQge3J1bGVzLnRlYW1zPy50ZWFtQn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmlnaHR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1BfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3J1bGVzLm9kZExhYmVsfT57cnVsZXMub2RkTGFiZWw/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkVmFsdWV9IHN0eWxlPXtydWxlcy5vZGRWYWx1ZX0+e3J1bGVzLm9kZFZhbHVlPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfS8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1CfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBzZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgc3dpdGNoVGV4dEFsaWduVG9GbGV4IH0gZnJvbSAnc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4J1xuaW1wb3J0IE1hdGNoIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uV3JhcHBlci5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbldyYXBwZXI/LndpZHRoKVxuICBzZXQoZGV2aWNlU3RhdGUsICdsZWdhbC5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmxlZ2FsPy53aWR0aClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMucm9vdCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBjb250ZW50UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMuY29udGVudCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCB0ZXh0UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMudGV4dCxcbiAgICB0ZXh0QWxpZ246IHJ1bGVzLnJvb3Q/LmFsaWduXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAgICAgIHtydWxlcy50aXRsZT8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0gc3R5bGU9e2NvbnRlbnRSdWxlc30+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgICAgPE1hdGNoIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXt0ZXh0UnVsZXN9PlxuICAgICAgICAgIHtydWxlcy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b25XcmFwcGVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbkhlYWR9IHN0eWxlPXtydWxlcy5idXR0b25IZWFkfT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b25IZWFkPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvblRhcmdldH0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tICdzcmMvaG9va3MvdXNlVG9nZ2xlJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBCb251czogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBbaXNPcGVuLCB0b2dnbGVJc09wZW5dID0gdXNlVG9nZ2xlKClcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9IHN0eWxlPXtydWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYmFja2dyb3VuZH0gc3R5bGU9e3J1bGVzLmJhY2tncm91bmR9IC8+XG4gICAgICA8YVxuICAgICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX1cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd0ZpcnN0fSBzdHlsZT17cnVsZXMucm93Rmlyc3R9PlxuICAgICAgICAgICAge3J1bGVzLnJvd0ZpcnN0Py5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd1NlY29uZH0gc3R5bGU9e3J1bGVzLnJvd1NlY29uZH0+XG4gICAgICAgICAgICB7cnVsZXMucm93U2Vjb25kPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvb2ttYWtlcn0+d2lubGluZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5sZWdhbCwge1xuICAgICAgICAgIFtzdHlsZXMubGVnYWxPcGVuXTogaXNPcGVuXG4gICAgICAgIH0pfVxuICAgICAgICBzdHlsZT17cnVsZXMubGVnYWxJbmZvfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgIDxzcGFuPntydWxlcy5sZWdhbEluZm8/LmNoaWxkcmVufTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gc3R5bGU9e3J1bGVzLmxlZ2FsSW5mb0J1dHRvbn0gb25DbGljaz17dG9nZ2xlSXNPcGVufT5cbiAgICAgICAgICAgIHtpc09wZW4gPyBydWxlcy5sZWdhbEluZm9CdXR0b24/Lm9wZW5UZXh0IDogcnVsZXMubGVnYWxJbmZvQnV0dG9uPy5jbG9zZVRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c1xuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgQm9udXMgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzJ1xuXG5jb25zdCBCb251c0NhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gJ2Rlc2t0b3AnXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3Jvb3RSZWZ9PlxuICAgICAgeyhydWxlcz8uY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICA8Qm9udXMgLz5cbiAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPEJvbnVzQ2FyZCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBUZXh0OiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKX1cbiAgICA+XG4gICAgICB7cnVsZXMucm9vdD8uY2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dFxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IE1hdGNoZXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICBjb25zdCByb290UnVsZXMgPSBvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMb2dvfSBzdHlsZT17cm9vdFJ1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVPbmV9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZkhlYWR9IHN0eWxlPXtydWxlcy5jb2VmfT5YPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZlZhbHVlfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVYfTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMub2RkLCBzdHlsZXMub2RkUmV2ZXJzZSl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9Lz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3Jvb3RSdWxlc30+e3J1bGVzLnJvb3Q/LnZhbHVlVHdvfTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hlc1xuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IE1hdGNoZXNPbmVUd286IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogc3RhdGU/LmRldmljZSA9PT0gJ3RhYmxldCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlTGFiZWx9IHN0eWxlPXtydWxlcy50aXRsZUxhYmVsfT5cbiAgICAgICAgICB7cnVsZXMudGl0bGVMYWJlbC5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVWYWx1ZX0gc3R5bGU9e3J1bGVzLnRpdGxlVmFsdWV9PlxuICAgICAgICAgIHtydWxlcy50aXRsZVZhbHVlLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbU5hbWV9PlxuICAgICAgICAgICAge3J1bGVzLnRlYW0xTmFtZS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1WYWx1ZX0gc3R5bGU9e3J1bGVzLnZhbHVlfT5cbiAgICAgICAgICAgIHtydWxlcy52YWx1ZTEuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTJOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMi5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzT25lVHdvXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuaW50ZXJmYWNlIFNsaWRlIHtcbiAgYW5pbWF0aW9uRHVyYXRpb246IG51bWJlclxufVxuXG5jb25zdCB1c2VBbmltYXRlZExpc3QgPSAoc2xpZGVzOiBTbGlkZVtdID0gW10pID0+IHtcbiAgY29uc3QgaXRlbXNDb3VudCA9IHNsaWRlcy5sZW5ndGhcbiAgY29uc3QgW2FuaW1hdGVkSWR4LCBzZXRBbmltYXRlZElkeF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG4gIGNvbnN0IGFuaW1hdGlvbkR1cmF0aW9uID0gc2xpZGVzW2FuaW1hdGVkSWR4IHx8IDBdPy5hbmltYXRpb25EdXJhdGlvblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZ29OZXh0ID0gKCkgPT4ge1xuICAgICAgc2V0QW5pbWF0ZWRJZHgoaW5kZXggPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxIDwgaXRlbXNDb3VudCkgcmV0dXJuIGluZGV4ICsgMVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChnb05leHQsIGFuaW1hdGlvbkR1cmF0aW9uKVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICB9LCBbc2V0QW5pbWF0ZWRJZHgsIGl0ZW1zQ291bnQsIGFuaW1hdGlvbkR1cmF0aW9uLCBhbmltYXRlZElkeF0pXG5cbiAgcmV0dXJuIGFuaW1hdGVkSWR4XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUFuaW1hdGVkTGlzdFxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgcGljayB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBUZXh0IGZyb20gJy4vY29tcG9uZW50cy9UZXh0J1xuaW1wb3J0IE1hdGNoZXMgZnJvbSAnLi9jb21wb25lbnRzL01hdGNoZXMnXG5pbXBvcnQgTWF0Y2hlc09uZVR3byBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3bydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgdXNlQW5pbWF0ZWRMaXN0IGZyb20gJ3NyYy9ob29rcy91c2VBbmltYXRlZExpc3QnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gJ3NyYy9oZWxwZXJzL2NvbnN0YW50cydcblxuY29uc3QgREVGQVVMVF9BTklNQVRJT05fU1BFRUQgPSAzNzAwXG5cbmNvbnN0IFdpZGVDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgZ2V0Q2hpbGQgPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICh7XG4gICAgICB0ZXh0OiA8VGV4dCAvPixcbiAgICAgIG1hdGNoZXM6IDxNYXRjaGVzIC8+LFxuICAgICAgbWF0Y2hlc09uZVR3bzogPE1hdGNoZXNPbmVUd28gLz5cbiAgICB9W25hbWVdKVxuXG4gIGNvbnN0IHNsaWRlc0xpc3QgPSAocnVsZXMuY2hpbGRyZW4gfHwgW10pLmZpbHRlcihCb29sZWFuKS5tYXAoc2xpZGUgPT4gKHtcbiAgICAuLi5zbGlkZSxcbiAgICBhbmltYXRpb25OYW1lOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uTmFtZSxcbiAgICBhbmltYXRpb25EdXJhdGlvbjogc2xpZGU/LnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9uIHx8IERFRkFVTFRfQU5JTUFUSU9OX1NQRUVEXG4gIH0pKVxuXG4gIGNvbnN0IGN1cnJlbnRTbGlkZSA9IHVzZUFuaW1hdGVkTGlzdChzbGlkZXNMaXN0KVxuICBjb25zdCBzbGlkZVJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzbGlkZXNMaXN0W2N1cnJlbnRTbGlkZV0gfHwge30pXG5cbiAgY29uc3QgYmFja2dyb3VuZFJ1bGVzID0gc2xpZGVSdWxlcz8ucm9vdD8uaGFzQ3VzdG9tQmFja2dyb3VuZFxuICAgID8gcGljayhzbGlkZVJ1bGVzPy5yb290IHx8IHt9LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcbiAgICA6IHBpY2socnVsZXMuYmFja2dyb3VuZCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgICAgIFtzdHlsZXMudmFyaWFudDJdOiBydWxlcy5yb290Py52YXJpYW50ID09PSAndmFyaWFudDInXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJhY2tncm91bmR9IHN0eWxlPXtiYWNrZ3JvdW5kUnVsZXN9IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnByb21vdGlvbn0gc3R5bGU9e3J1bGVzLnByb21vdGlvbn0+XG4gICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVmdH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2VudGVyfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoKGNoaWxkLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zbGlkZX1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lOiBjdXJyZW50U2xpZGUgPT09IGluZGV4ID8gc3R5bGVzW2NoaWxkLnJvb3Q/LmFuaW1hdGlvbk5hbWUgfHwgJ2ZhZGUtaW4tb3V0J10gOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGAke2NoaWxkLnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9ufW1zYFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+e2dldENoaWxkKGNoaWxkLm5hbWUpfTwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJpZ2h0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25XcmFwcGVyfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxXaWRlQ2FyZCAvPilcbiIsImltcG9ydCB7IENhbGxiYWNrLCBkZXZpY2VzIGFzIGRldmljZXNMaXN0LCBnZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnc3JjL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBtb2RpZnlTdGF0ZSA9IChcbiAgc3RhdGU6IEFueVN0YXRlLFxuICBsYXllcjogc3RyaW5nLFxuICBydWxlOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duIHwgQ2FsbGJhY2s8W3ByZXZWYWx1ZTogdW5rbm93bl0+LFxuICBkZXZpY2VzID0gZGV2aWNlc0xpc3RcbikgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuXG4gIGRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xuICAgIG5ld1N0YXRlW2xheWVyXSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlW2xheWVyXSxcbiAgICAgIFtkZXZpY2VdOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlW2xheWVyXVtkZXZpY2VdLFxuICAgICAgICBbcnVsZV06IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKGdldChuZXdTdGF0ZSwgYCR7bGF5ZXJ9LiR7ZGV2aWNlfS4ke3J1bGV9YCkpIDogdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBuZXdTdGF0ZVxufVxuXG5leHBvcnQgeyBtb2RpZnlTdGF0ZSB9XG4iXSwibmFtZXMiOlsiY2xhc3NOYW1lcyIsImkiLCJpbm5lciIsIm8iLCJuIiwidCIsInUiLCJCIiwiciIsImYiLCJjIiwiZSIsIl8iLCJGIiwicSIsInciLCJnIiwibCIsInVzZUdpZnRPcGVuIiwiZGVsYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ1c2VTdGF0ZSIsInRpbWVyUmVmIiwidXNlUmVmIiwib25Ub2dnbGUiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50IiwicHJldiIsInVzZUVmZmVjdCIsInNldFRpbWVvdXQiLCJzIiwiYSIsIlN0YXRlIiwiY3JlYXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsImNoaWxkcmVuIiwidmFsdWUiLCJfanN4IiwiUHJvdmlkZXIiLCJyZW5kZXIiLCJ2Tm9kZSIsInRhcmdldCIsInN0YXRlIiwicHJlYWN0UmVuZGVyIiwidXNlQ3VycmVudFN0YXRlIiwidXNlQ29udGV4dCIsImxpc3RDYWNoZUNsZWFyIiwiZXEiLCJyZXF1aXJlJCQwIiwiYXNzb2NJbmRleE9mIiwibGlzdENhY2hlRGVsZXRlIiwiaW5kZXgiLCJsaXN0Q2FjaGVHZXQiLCJsaXN0Q2FjaGVIYXMiLCJsaXN0Q2FjaGVTZXQiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwiTGlzdENhY2hlIiwic3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJzdGFja0hhcyIsImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJyb290IiwiU3ltYm9sIiwib2JqZWN0UHJvdG8iLCJoYXNPd25Qcm9wZXJ0eSIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImJhc2VHZXRUYWciLCJpc09iamVjdCIsImZ1bmNUYWciLCJpc0Z1bmN0aW9uIiwiY29yZUpzRGF0YSIsImlzTWFza2VkIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwidG9Tb3VyY2UiLCJiYXNlSXNOYXRpdmUiLCJnZXRWYWx1ZSIsImdldE5hdGl2ZSIsIk1hcCIsIm5hdGl2ZUNyZWF0ZSIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJIQVNIX1VOREVGSU5FRCIsImhhc2hHZXQiLCJoYXNoSGFzIiwiaGFzaFNldCIsIkhhc2giLCJtYXBDYWNoZUNsZWFyIiwiaXNLZXlhYmxlIiwiZ2V0TWFwRGF0YSIsIm1hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJzdGFja1NldCIsInJlcXVpcmUkJDUiLCJTdGFjayIsImRlZmluZVByb3BlcnR5IiwiYmFzZUFzc2lnblZhbHVlIiwiYXNzaWduTWVyZ2VWYWx1ZSIsImNyZWF0ZUJhc2VGb3IiLCJiYXNlRm9yIiwiY2xvbmVCdWZmZXIiLCJVaW50OEFycmF5IiwiY2xvbmVBcnJheUJ1ZmZlciIsImNsb25lVHlwZWRBcnJheSIsImNvcHlBcnJheSIsImJhc2VDcmVhdGUiLCJvdmVyQXJnIiwiZ2V0UHJvdG90eXBlIiwiaXNQcm90b3R5cGUiLCJpbml0Q2xvbmVPYmplY3QiLCJpc09iamVjdExpa2UiLCJhcmdzVGFnIiwiYmFzZUlzQXJndW1lbnRzIiwiaXNBcmd1bWVudHMiLCJpc0FycmF5IiwiTUFYX1NBRkVfSU5URUdFUiIsImlzTGVuZ3RoIiwiaXNBcnJheUxpa2UiLCJpc0FycmF5TGlrZU9iamVjdCIsInN0dWJGYWxzZSIsImlzQnVmZmVyIiwib2JqZWN0VGFnIiwiaXNQbGFpbk9iamVjdCIsImJhc2VJc1R5cGVkQXJyYXkiLCJiYXNlVW5hcnkiLCJub2RlVXRpbCIsImlzVHlwZWRBcnJheSIsInNhZmVHZXQiLCJhc3NpZ25WYWx1ZSIsImNvcHlPYmplY3QiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiYXJyYXlMaWtlS2V5cyIsIm5hdGl2ZUtleXNJbiIsImJhc2VLZXlzSW4iLCJrZXlzSW4iLCJ0b1BsYWluT2JqZWN0IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsInJlcXVpcmUkJDEwIiwicmVxdWlyZSQkMTEiLCJyZXF1aXJlJCQxMiIsInJlcXVpcmUkJDEzIiwicmVxdWlyZSQkMTQiLCJiYXNlTWVyZ2VEZWVwIiwiYmFzZU1lcmdlIiwiaWRlbnRpdHkiLCJhcHBseSIsIm92ZXJSZXN0IiwiY29uc3RhbnQiLCJiYXNlU2V0VG9TdHJpbmciLCJzaG9ydE91dCIsInNldFRvU3RyaW5nIiwiYmFzZVJlc3QiLCJpc0l0ZXJhdGVlQ2FsbCIsImNyZWF0ZUFzc2lnbmVyIiwiaW5qZWN0TGluayIsIm9wdGlvbnMiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImxpbmsiLCJjcmVhdGVFbGVtZW50IiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrZXkiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsIml0ZXJhdG9yIiwiaW5wdXQiLCJ2aXNpdG9yIiwicGF0aCIsIkFycmF5IiwibWFwIiwiZWwiLCJuZXdQYXRoIiwiZmlsdGVyIiwiaXNWYWx1ZSIsImpvaW4iLCJyZWR1Y2UiLCJhY2MiLCJpc0VtcHR5VmFsdWUiLCJ1bmRlZmluZWQiLCJwaWNrIiwib2JqIiwicHJvcHMiLCJyZXN1bHQiLCJwcm9wIiwib21pdCIsImdldCIsImRlZlZhbHVlIiwicGF0aEFycmF5IiwibWF0Y2giLCJwcmV2T2JqIiwic2V0IiwibGVuZ3RoIiwiaGV4VG9SZ2IiLCJoZXgiLCJjaGFycyIsInNsaWNlIiwic3BsaXQiLCJ2YWwiLCJleGVjIiwicGFyc2VJbnQiLCJiIiwiaXNKc29uU2FtZSIsInZhbHVlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVyeSIsImFyciIsInJnYlRvUmdiYSIsInJnYiIsImFscGhhIiwicmVwbGFjZSIsImRldmljZXMiLCJCUkVBS1BPSU5UUyIsIm1vYmlsZSIsInRhYmxldCIsImxhcHRvcCIsImRlc2t0b3AiLCJpc1ZhbGlkTGF5ZXIiLCJkZXZpY2UiLCJnZXRSdWxlcyIsIl9rZXkiLCJyZXN1bHRSdWxlcyIsInBhcmVudCIsInVzZUdldFJ1bGVzIiwidXNlQ29udGFpbmVyRGV2aWNlIiwidGFyZ2V0UmVmIiwicGFyZW50S2V5IiwiYnJlYWtwb2ludHMiLCJzZXREZXZpY2UiLCJjaGVja0RldmljZSIsInBhcmVudFdpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJzb3J0ZWRCcmVha3BvaW50cyIsInNvcnQiLCJfMSIsInZhbHVlQSIsIl8yIiwidmFsdWVCIiwiZmluZERldmljZSIsImZpbmQiLCJuZXh0VmFsdWUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJwYXJlbnRFbGVtZW50IiwiY2xvc2VzdCIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwid3JhcFRvIiwidW50aWwiLCJ0b1B4Iiwic3RhcnRzV2l0aCIsInRvUGVyY2VudCIsImZvcm1hdFJ1bGUiLCJuZXdLZXkiLCJuZXdWYWx1ZSIsIkRFRkFVTFRfVE9fUFgiLCJwYXJzZVJ1bGVzIiwicnVsZXMiLCJsYXllciIsImtleXMiLCJpbmNsdWRlcyIsIndhcm4iLCJ0eXBvZ3JhcGh5IiwiYWNjZW50VHlwb2dyYXBoeSIsImZvbnRGYW1pbHkiLCJjb2xvciIsImZvbnRTaXplIiwicHJvcEtleSIsInByb3BWYWx1ZSIsImlubmVySFRNTCIsImlubmVyVGV4dCIsImRpc3BsYXkiLCJib3JkZXJTdHlsZSIsImJvcmRlclJhZGl1cyIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91bmRDb2xvck9wYWNpdHkiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250V2VpZ2h0IiwiZm9udFN0eWxlIiwidGV4dERlY29yYXRpb24iLCJpc1ZhbGlkUnVsZSIsInJ1bGUiLCJ1c2VQYXJzZVJ1bGVzIiwiRGlzcGxheVRleHQiLCJyZXN0IiwiZm9ybWF0VmFsdWUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsInVzZVRvZ2dsZSIsIkNsb3NlSWNvbiIsInhtbG5zIiwiaGVpZ2h0Iiwidmlld0JveCIsImQiLCJmaWxsIiwiR2lmdEljb24iLCJmaWxsUnVsZSIsImFuaW1hdGlvbnNNYXAiLCJhbmltYXRpb25zIiwiZmFkZSIsInB1bHNlIiwid2lnZ2xlIiwiZ3JhZGllbnQiLCJ1c2VHaWZ0UnVsZXMiLCJkZXZpY2VTdGF0ZSIsImZ1bGxBbmltYXRpb25zIiwiaGFzSWNvbiIsImljb24iLCJhcnJvd1J1bGVzIiwibGVmdCIsImNvbnRhaW5lciIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib2R5UnVsZXMiLCJhbGxBbmltYXRpb25zIiwiYW5pbWF0aW9uIiwiYmFja2dyb3VuZFN0eWxlcyIsImdyYWRpZW50Q29sb3IiLCJiYWNrZ3JvdW5kIiwiaWNvblJ1bGVzIiwiYmFja2dyb3VuZE9wdGlvbnMiLCJzcGFjaW5nT3B0aW9ucyIsIm5vb3BZYU1ldHJpa2EiLCJnb2FsIiwiY29uc29sZSIsImxvZyIsIm5vb3BBZEZveCIsInVzZU1ldHJpY3MiLCJsYXllck5hbWUiLCJzYXZlTWV0cmljcyIsInlhUmVhY2hHb2FsIiwiYWRmb3hSZWFjaEdvYWwiLCJtZXRyaWNzIiwieWFTaG93IiwiYWRmb3hTaG93IiwieWFDbGljayIsImFkZm94Q2xpY2siLCJ1c2VFeHRyYWN0Rm9udHMiLCJmb250cyIsIlNldCIsImFkZCIsImZvbnRMaW5rcyIsInVzZU1lbW8iLCJmcm9tIiwiZm9udCIsInJlbCIsImhyZWYiLCJTaW1wbGVHaWZ0Iiwicm9vdFJlZiIsImxlZ2FsSXNPcGVuIiwidG9nZ2xlTGVnYWxJc09wZW4iLCJvbkNsaWNrIiwic3R5bGVzIiwiZmFkZWluIiwiX2pzeHMiLCJjbGFzc05hbWUiLCJsZWdhbE9wZW4iLCJyZWYiLCJzdHlsZSIsImljb25UYXJnZXQiLCJib2R5IiwiYm9keU9wZW4iLCJhcnJvdyIsImNsb3NlIiwib2ZmZXIiLCJsb2dvIiwidGV4dCIsImJ1dHRvbiIsImJ1dHRvbkFuaW1hdGVkIiwiaXNBbmltYXRlZCIsImxlZ2FsV3JhcHBlciIsImxlZ2FsIiwibGVnYWxUZXh0IiwibGVnYWxCdXR0b24iLCJidXR0b25PcGVuVGV4dCIsImJ1dHRvbkhpZGVUZXh0IiwiQm9udXNDYXJkIiwidmFyaWFudDIiLCJ2YXJpYW50IiwibGluZSIsImJvZHlJbm5lciIsImJ1dHRvblRleHQiLCJDb21wbGV4R2lmdCIsImhhc1RpdGxlSWNvbiIsInRpdGxlIiwicHJvbW90aW9uIiwiaGVhZEljb24iLCJoZWFkVGl0bGUiLCJjaGlsZCIsInN3aXRjaFRleHRBbGlnblRvRmxleCIsInRleHRBbGlnbiIsImNlbnRlciIsInJpZ2h0IiwiTGluZSIsIlNpbXBsZVBvcHVwIiwiYWxpZ25JdGVtcyIsImFsaWduIiwiYnV0dG9uUnVsZXMiLCJqdXN0aWZ5Q29udGVudCIsImxlZ2FsUnVsZXMiLCJCb251cyIsImhlYWRlciIsIndyYXBwZXIiLCJNYXRjaCIsInRlYW1zIiwibGVhZ3VlIiwibmFtZSIsInRlYW1BIiwidGVhbUIiLCJ0ZWFtIiwidGVhbUxvZ28iLCJ0ZWFtTmFtZSIsIm9kZCIsIm9kZExhYmVsIiwib2RkVmFsdWUiLCJidXR0b25XcmFwcGVyIiwiY29udGVudFJ1bGVzIiwiY29udGVudCIsInRleHRSdWxlcyIsImJ1dHRvbkhlYWQiLCJidXR0b25UYXJnZXQiLCJ0b2dnbGVJc09wZW4iLCJyb3dGaXJzdCIsInJvd1NlY29uZCIsImJvb2ttYWtlciIsImxlZ2FsSW5mbyIsImxlZ2FsSW5mb0J1dHRvbiIsIm9wZW5UZXh0IiwiY2xvc2VUZXh0IiwiVGV4dCIsIk1hdGNoZXMiLCJyb290UnVsZXMiLCJvZGRMb2dvIiwidmFsdWVPbmUiLCJjb2VmIiwiY29lZkhlYWQiLCJjb2VmVmFsdWUiLCJ2YWx1ZVgiLCJvZGRSZXZlcnNlIiwidmFsdWVUd28iLCJNYXRjaGVzT25lVHdvIiwidGl0bGVMYWJlbCIsInRpdGxlVmFsdWUiLCJ0ZWFtMU5hbWUiLCJ0ZWFtVmFsdWUiLCJ2YWx1ZTEiLCJ0ZWFtMk5hbWUiLCJ2YWx1ZTIiLCJ1c2VBbmltYXRlZExpc3QiLCJzbGlkZXMiLCJpdGVtc0NvdW50IiwiYW5pbWF0ZWRJZHgiLCJzZXRBbmltYXRlZElkeCIsImFuaW1hdGlvbkR1cmF0aW9uIiwiZ29OZXh0IiwidGltZW91dCIsIkRFRkFVTFRfQU5JTUFUSU9OX1NQRUVEIiwiV2lkZUNhcmQiLCJnZXRDaGlsZCIsIm1hdGNoZXMiLCJtYXRjaGVzT25lVHdvIiwic2xpZGVzTGlzdCIsIkJvb2xlYW4iLCJzbGlkZSIsImFuaW1hdGlvbk5hbWUiLCJjdXJyZW50U2xpZGUiLCJzbGlkZVJ1bGVzIiwiYmFja2dyb3VuZFJ1bGVzIiwiaGFzQ3VzdG9tQmFja2dyb3VuZCIsIm1vZGlmeVN0YXRlIiwiZGV2aWNlc0xpc3QiLCJuZXdTdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxHQUFDLFdBQVk7QUFHWixRQUFJLFNBQVMsQ0FBRSxFQUFDO0FBR2hCLGFBQVNBLGNBQWE7QUFDckIsVUFBSSxVQUFVLENBQUE7QUFFZCxlQUFTQyxLQUFJLEdBQUdBLEtBQUksVUFBVSxRQUFRQSxNQUFLO0FBQzFDLFlBQUksTUFBTSxVQUFVQSxFQUFDO0FBQ3JCLFlBQUksQ0FBQztBQUFLO0FBRVYsWUFBSSxVQUFVLE9BQU87QUFFckIsWUFBSSxZQUFZLFlBQVksWUFBWSxVQUFVO0FBQ2pELGtCQUFRLEtBQUssR0FBRztBQUFBLFFBQ2hCLFdBQVUsTUFBTSxRQUFRLEdBQUcsR0FBRztBQUM5QixjQUFJLElBQUksUUFBUTtBQUNmLGdCQUFJQyxTQUFRRixZQUFXLE1BQU0sTUFBTSxHQUFHO0FBQ3RDLGdCQUFJRSxRQUFPO0FBQ1Ysc0JBQVEsS0FBS0EsTUFBSztBQUFBLFlBQ2xCO0FBQUEsVUFDRDtBQUFBLFFBQ0wsV0FBYyxZQUFZLFVBQVU7QUFDaEMsY0FBSSxJQUFJLGFBQWEsT0FBTyxVQUFVLFlBQVksQ0FBQyxJQUFJLFNBQVMsU0FBUSxFQUFHLFNBQVMsZUFBZSxHQUFHO0FBQ3JHLG9CQUFRLEtBQUssSUFBSSxTQUFVLENBQUE7QUFDM0I7QUFBQSxVQUNBO0FBRUQsbUJBQVMsT0FBTyxLQUFLO0FBQ3BCLGdCQUFJLE9BQU8sS0FBSyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsR0FBRztBQUN0QyxzQkFBUSxLQUFLLEdBQUc7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVELGFBQU8sUUFBUSxLQUFLLEdBQUc7QUFBQSxJQUN2QjtBQUVELFFBQXFDLE9BQU8sU0FBUztBQUNwRCxNQUFBRixZQUFXLFVBQVVBO0FBQ3JCLGFBQUEsVUFBaUJBO0FBQUEsSUFDbkIsT0FLUTtBQUNOLGFBQU8sYUFBYUE7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7OztBQzNEaUMsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFRyxNQUFFLEdBQUUsSUFBRSxDQUFBLEdBQUcsSUFBRSxJQUFHLElBQUVDLFFBQUUsS0FBSSxJQUFFQSxRQUFFLEtBQUksSUFBRUEsUUFBRSxRQUFPLElBQUVBLFFBQUUsS0FBSSxJQUFFQSxRQUFFO0FBQVEsU0FBUyxFQUFFQyxJQUFFQyxJQUFFO0FBQUNGLFVBQUUsT0FBS0EsUUFBRSxJQUFJLEdBQUVDLElBQUVGLE9BQUdHLEVBQUMsR0FBRUgsTUFBRTtBQUFFLE1BQUlGLEtBQUUsRUFBRSxRQUFNLEVBQUUsTUFBSSxFQUFDLElBQUcsSUFBRyxLQUFJLENBQUUsRUFBQTtBQUFHLFNBQU9JLE1BQUdKLEdBQUUsR0FBRyxVQUFRQSxHQUFFLEdBQUcsS0FBSyxFQUFDLEtBQUksRUFBQyxDQUFDLEdBQUVBLEdBQUUsR0FBR0ksRUFBQztBQUFDO0FBQUMsU0FBUyxFQUFFLEdBQUU7QUFBQyxTQUFPRixNQUFFLEdBQUUsRUFBRUksS0FBRSxDQUFDO0FBQUM7QUFBQyxTQUFTLEVBQUUsR0FBRUQsSUFBRUwsSUFBRTtBQUFDLE1BQUlFLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxNQUFHQSxHQUFFLElBQUUsR0FBRSxDQUFDQSxHQUFFLFFBQU1BLEdBQUUsS0FBRyxDQUFDRixLQUFFQSxHQUFFSyxFQUFDLElBQUVDLElBQUUsUUFBT0QsRUFBQyxHQUFFLFNBQVNGLElBQUU7QUFBQyxRQUFJQyxLQUFFRixHQUFFLE1BQUlBLEdBQUUsSUFBSSxDQUFDLElBQUVBLEdBQUUsR0FBRyxDQUFDLEdBQUVLLEtBQUVMLEdBQUUsRUFBRUUsSUFBRUQsRUFBQztBQUFFLElBQUFDLE9BQUlHLE9BQUlMLEdBQUUsTUFBSSxDQUFDSyxJQUFFTCxHQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUVBLEdBQUUsSUFBSSxTQUFTLENBQUUsQ0FBQTtBQUFBLEVBQUUsQ0FBQyxHQUFFQSxHQUFFLE1BQUksR0FBRSxDQUFDLEVBQUUsSUFBRztBQUFDLFFBQUlNLEtBQUUsU0FBU0wsSUFBRUMsSUFBRUcsSUFBRTtBQUFDLFVBQUcsQ0FBQ0wsR0FBRSxJQUFJO0FBQUksZUFBTTtBQUFHLFVBQUlHLEtBQUVILEdBQUUsSUFBSSxJQUFJLEdBQUcsT0FBTyxTQUFTQyxJQUFFO0FBQUMsZUFBT0EsR0FBRTtBQUFBLE1BQUcsQ0FBQztBQUFFLFVBQUdFLEdBQUUsTUFBTSxTQUFTRixJQUFFO0FBQUMsZUFBTSxDQUFDQSxHQUFFO0FBQUEsTUFBRyxDQUFDO0FBQUUsZUFBTSxDQUFDTSxNQUFHQSxHQUFFLEtBQUssTUFBS04sSUFBRUMsSUFBRUcsRUFBQztBQUFFLFVBQUlQLEtBQUU7QUFBRyxhQUFPSyxHQUFFLFFBQVEsU0FBU0YsSUFBRTtBQUFDLFlBQUdBLEdBQUUsS0FBSTtBQUFDLGNBQUlDLEtBQUVELEdBQUUsR0FBRyxDQUFDO0FBQUUsVUFBQUEsR0FBRSxLQUFHQSxHQUFFLEtBQUlBLEdBQUUsTUFBSSxRQUFPQyxPQUFJRCxHQUFFLEdBQUcsQ0FBQyxNQUFJSCxLQUFFO0FBQUEsUUFBRztBQUFBLE1BQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQ0EsTUFBR0UsR0FBRSxJQUFJLFVBQVFDLFFBQUssQ0FBQ00sTUFBR0EsR0FBRSxLQUFLLE1BQUtOLElBQUVDLElBQUVHLEVBQUM7QUFBQSxJQUFFO0FBQUUsTUFBRSxJQUFFO0FBQUcsUUFBSUUsS0FBRSxFQUFFLHVCQUFzQkMsS0FBRSxFQUFFO0FBQW9CLE1BQUUsc0JBQW9CLFNBQVNQLElBQUVDLElBQUVHLElBQUU7QUFBQyxVQUFHLEtBQUssS0FBSTtBQUFDLFlBQUlGLEtBQUVJO0FBQUUsUUFBQUEsS0FBRSxRQUFPRCxHQUFFTCxJQUFFQyxJQUFFRyxFQUFDLEdBQUVFLEtBQUVKO0FBQUEsTUFBQztBQUFDLE1BQUFLLE1BQUdBLEdBQUUsS0FBSyxNQUFLUCxJQUFFQyxJQUFFRyxFQUFDO0FBQUEsSUFBQyxHQUFFLEVBQUUsd0JBQXNCQztBQUFBLEVBQUM7QUFBQyxTQUFPTixHQUFFLE9BQUtBLEdBQUU7QUFBRTtBQUFDLFNBQVMsRUFBRUcsSUFBRUwsSUFBRTtBQUFDLE1BQUlFLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxHQUFDQyxRQUFFLE9BQUssRUFBRUQsR0FBRSxLQUFJRixFQUFDLE1BQUlFLEdBQUUsS0FBR0csSUFBRUgsR0FBRSxJQUFFRixJQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUtFLEVBQUM7QUFBRTtBQUFDLFNBQVMsRUFBRUcsSUFBRUwsSUFBRTtBQUFDLE1BQUlFLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxHQUFDQyxRQUFFLE9BQUssRUFBRUQsR0FBRSxLQUFJRixFQUFDLE1BQUlFLEdBQUUsS0FBR0csSUFBRUgsR0FBRSxJQUFFRixJQUFFLEVBQUUsSUFBSSxLQUFLRSxFQUFDO0FBQUU7QUFBQyxTQUFTUyxJQUFFLEdBQUU7QUFBQyxTQUFPVCxNQUFFLEdBQUVVLElBQUUsV0FBVTtBQUFDLFdBQU0sRUFBQyxTQUFRLEVBQUM7QUFBQSxFQUFDLEdBQUUsRUFBRTtBQUFDO0FBQXNMLFNBQVNBLElBQUUsR0FBRUwsSUFBRTtBQUFDLE1BQUlGLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxTQUFPLEVBQUVBLEdBQUUsS0FBSUUsRUFBQyxLQUFHRixHQUFFLE1BQUksRUFBRyxHQUFDQSxHQUFFLElBQUVFLElBQUVGLEdBQUUsTUFBSSxHQUFFQSxHQUFFLE9BQUtBLEdBQUU7QUFBRTtBQUFzRCxTQUFTUSxJQUFFLEdBQUU7QUFBQyxNQUFJUixLQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRUwsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLFNBQU9BLEdBQUUsSUFBRSxHQUFFSyxNQUFHLFFBQU1MLEdBQUUsT0FBS0EsR0FBRSxLQUFHLE1BQUdLLEdBQUUsSUFBSSxDQUFDLElBQUdBLEdBQUUsTUFBTSxTQUFPLEVBQUU7QUFBRTtBQUE2WCxTQUFTLElBQUc7QUFBQyxXQUFRRCxJQUFFQSxLQUFFLEVBQUU7QUFBUyxRQUFHQSxHQUFFLE9BQUtBLEdBQUU7QUFBSSxVQUFHO0FBQUMsUUFBQUEsR0FBRSxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUVBLEdBQUUsSUFBSSxJQUFJLFFBQVFVLEdBQUMsR0FBRVYsR0FBRSxJQUFJLE1BQUksQ0FBQTtBQUFBLE1BQUUsU0FBT0csSUFBTjtBQUFTLFFBQUFILEdBQUUsSUFBSSxNQUFJLENBQUEsR0FBR0QsUUFBRSxJQUFJSSxJQUFFSCxHQUFFLEdBQUc7QUFBQSxNQUFDO0FBQUM7QUFBQ0QsUUFBRSxNQUFJLFNBQVMsR0FBRTtBQUFDLE1BQUUsTUFBSyxLQUFHLEVBQUUsQ0FBQztBQUFDLEdBQUVBLFFBQUUsTUFBSSxTQUFTLEdBQUU7QUFBQyxPQUFHLEVBQUUsQ0FBQyxHQUFFLElBQUU7QUFBRSxNQUFJSCxNQUFHLElBQUUsRUFBRSxLQUFLO0FBQUksRUFBQUEsT0FBSSxNQUFJLEtBQUdBLEdBQUUsTUFBSSxDQUFBLEdBQUcsRUFBRSxNQUFJLENBQUEsR0FBR0EsR0FBRSxHQUFHLFFBQVEsU0FBU0csSUFBRTtBQUFDLElBQUFBLEdBQUUsUUFBTUEsR0FBRSxLQUFHQSxHQUFFLE1BQUtBLEdBQUUsTUFBSSxHQUFFQSxHQUFFLE1BQUlBLEdBQUUsSUFBRTtBQUFBLEVBQU0sQ0FBQyxNQUFJSCxHQUFFLElBQUksUUFBUSxDQUFDLEdBQUVBLEdBQUUsSUFBSSxRQUFRYyxHQUFDLEdBQUVkLEdBQUUsTUFBSSxDQUFBLEtBQUssSUFBRTtBQUFDLEdBQUVHLFFBQUUsU0FBTyxTQUFTQyxJQUFFO0FBQUMsT0FBRyxFQUFFQSxFQUFDO0FBQUUsTUFBSUYsS0FBRUUsR0FBRTtBQUFJLEVBQUFGLE1BQUdBLEdBQUUsUUFBTUEsR0FBRSxJQUFJLElBQUksV0FBUyxNQUFJLEVBQUUsS0FBS0EsRUFBQyxLQUFHLE1BQUlDLFFBQUUsMkJBQXlCLElBQUVBLFFBQUUsMEJBQXdCLEdBQUcsQ0FBQyxJQUFHRCxHQUFFLElBQUksR0FBRyxRQUFRLFNBQVMsR0FBRTtBQUFDLE1BQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxJQUFHLEVBQUUsUUFBTSxNQUFJLEVBQUUsS0FBRyxFQUFFLE1BQUssRUFBRSxJQUFFLFFBQU8sRUFBRSxNQUFJO0FBQUEsRUFBQyxDQUFDLElBQUcsSUFBRSxJQUFFO0FBQUksR0FBRUMsUUFBRSxNQUFJLFNBQVNDLElBQUVHLElBQUU7QUFBQyxFQUFBQSxHQUFFLEtBQUssU0FBU0gsSUFBRTtBQUFDLFFBQUc7QUFBQyxNQUFBQSxHQUFFLElBQUksUUFBUSxDQUFDLEdBQUVBLEdBQUUsTUFBSUEsR0FBRSxJQUFJLE9BQU8sU0FBUyxHQUFFO0FBQUMsZUFBTSxDQUFDLEVBQUUsTUFBSVUsSUFBRSxDQUFDO0FBQUEsTUFBQyxDQUFDO0FBQUEsSUFBQyxTQUFPVCxJQUFOO0FBQVMsTUFBQUUsR0FBRSxLQUFLLFNBQVMsR0FBRTtBQUFDLFVBQUUsUUFBTSxFQUFFLE1BQUks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QUFFLEtBQUlOLEdBQUUsTUFBSU0sR0FBRSxNQUFLTCxHQUFFLElBQUksR0FBRUQsRUFBQztBQUFBO0FBQUUsSUFBRSxHQUFFQSxJQUFFTSxJQUFFSCxFQUFDO0FBQUM7QUFBRSxJQUFJLElBQUVHLFFBQUU7QUFBUSxTQUFTLEVBQUUsR0FBRU4sSUFBRU0sSUFBRTtBQUFDLFNBQU8sTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU0sRUFBRSxJQUFJLElBQUksR0FBRyxRQUFRLFNBQVNQLElBQUU7QUFBQyxrQkFBWSxPQUFPQSxHQUFFLE9BQUtBLEdBQUUsSUFBSztBQUFBLEVBQUEsQ0FBQyxHQUFFLEVBQUUsSUFBSSxNQUFJLE9BQU0sU0FBTyxJQUFFLEVBQUUsQ0FBQSxHQUFHLENBQUMsR0FBRyxRQUFNLEVBQUUsSUFBSSxRQUFNTyxPQUFJLEVBQUUsSUFBSSxNQUFJTixLQUFHLEVBQUUsTUFBSSxPQUFNLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksU0FBU0QsSUFBRTtBQUFDLFdBQU8sRUFBRUEsSUFBRUMsSUFBRU0sRUFBQztBQUFBLEVBQUMsQ0FBQyxJQUFHO0FBQUM7QUFBQyxTQUFTLEVBQUUsR0FBRU4sSUFBRU0sSUFBRTtBQUFDLFNBQU8sTUFBSSxFQUFFLE1BQUksTUFBSyxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFNBQVNQLElBQUU7QUFBQyxXQUFPLEVBQUVBLElBQUVDLElBQUVNLEVBQUM7QUFBQSxFQUFDLENBQUMsR0FBRSxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU1OLE9BQUksRUFBRSxPQUFLTSxHQUFFLGFBQWEsRUFBRSxLQUFJLEVBQUUsR0FBRyxHQUFFLEVBQUUsSUFBSSxNQUFJLE1BQUcsRUFBRSxJQUFJLE1BQUlBLE1BQUk7QUFBQztBQUFDLFNBQVMsSUFBRztBQUFDLE9BQUssTUFBSSxHQUFFLEtBQUssSUFBRSxNQUFLLEtBQUssTUFBSTtBQUFJO0FBQUMsU0FBUyxFQUFFLEdBQUU7QUFBQyxNQUFJTixLQUFFLEVBQUUsR0FBRztB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QUFBLFlBQVFULE9BQU83RyxNQUFNc0g7QUFBQUEsWUFBT3ZXLFdBQ2pERSxFQUFBLE9BQUE7QUFBQSxjQUFLeVYsV0FBV0gsU0FBT2E7QUFBQUEsY0FBTVAsT0FBTzdHLE1BQU1vSDtBQUFBQSxZQUFBQSxDQUFLLElBQzlDcEgsV0FBTXNILFdBQU50SCxtQkFBY2pQLFFBQVE7QUFBQSxVQUFBLENBQUE7QUFBQSxRQUFBLENBRXJCLENBQUE7QUFBQSxNQUFBLENBQ0YsQ0FBQTtBQUFBLElBQUEsQ0FDRixDQUFBO0FBQUEsRUFBQSxDQUNKO0FBRVI7QUFFQSxNQUFlSSxRQUFBQSxPQUFPRixFQUFDK2IsYUFBVztBQ2hHbEMsTUFBTVksY0FBY0EsQ0FDbEJ0YyxPQUNBMk8sT0FDQXlCLE1BQ0ExUSxPQUNBaU0sWUFBVTRRLFlBQ1A7QUFDSCxRQUFNQyxXQUFXO0FBQUEsSUFBRSxHQUFHeGM7QUFBQUEsRUFBQUE7QUFFdEIyTCxZQUFRbkQsUUFBUTBELENBQVUsV0FBQTtBQUN4QnNRLGFBQVM3TixLQUFLLElBQUk7QUFBQSxNQUNoQixHQUFHNk4sU0FBUzdOLEtBQUs7QUFBQSxNQUNqQixDQUFDekMsTUFBTSxHQUFHO0FBQUEsUUFDUixHQUFHc1EsU0FBUzdOLEtBQUssRUFBRXpDLE1BQU07QUFBQSxRQUN6QixDQUFDa0UsSUFBSSxHQUFHLE9BQU8xUSxVQUFVLGFBQWFBLE1BQU11SyxJQUFJdVMsVUFBVyxHQUFFN04sU0FBU3pDLFVBQVVrRSxNQUFNLENBQUMsSUFBSTFRO0FBQUFBLE1BQzdGO0FBQUEsSUFBQTtBQUFBLEVBQ0YsQ0FDRDtBQUNNOGMsU0FBQUE7QUFDVDsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsNCw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzXX0=