kepler.gl 3.1.5 → 3.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/dist/src/actions/src/action-types.d.ts +2 -2
  2. package/dist/src/actions/src/action-wrapper.d.ts +2 -2
  3. package/dist/src/actions/src/actions.d.ts +3 -3
  4. package/dist/src/actions/src/map-state-actions.d.ts +4 -4
  5. package/dist/src/actions/src/vis-state-actions.d.ts +2 -2
  6. package/dist/src/ai-assistant/src/tools/kepler-tools/index.d.ts +1 -1
  7. package/dist/src/ai-assistant/src/tools/tools.d.ts +1 -1
  8. package/dist/src/components/src/kepler-gl.d.ts +1 -1
  9. package/dist/src/components/src/side-panel/layer-panel/layer-configurator.d.ts +4 -4
  10. package/dist/src/constants/src/default-settings.d.ts +8 -6
  11. package/dist/src/duckdb/src/table/duckdb-table.d.ts +1 -1
  12. package/dist/src/effects/src/effect.d.ts +1 -0
  13. package/dist/src/reducers/src/index.d.ts +1 -0
  14. package/dist/src/reducers/src/layer-utils.d.ts +2 -0
  15. package/dist/src/reducers/src/map-style-updaters.d.ts +1 -0
  16. package/dist/src/reducers/src/vis-state.d.ts +4 -4
  17. package/dist/src/styles/src/base.d.ts +4 -0
  18. package/dist/src/table/src/kepler-table.d.ts +2 -2
  19. package/dist/src/utils/src/application-config.d.ts +1 -0
  20. package/package.json +2 -2
  21. package/src/actions/dist/action-types.d.ts +2 -2
  22. package/src/actions/dist/action-types.js +3 -3
  23. package/src/actions/dist/action-wrapper.d.ts +2 -2
  24. package/src/actions/dist/action-wrapper.js +3 -3
  25. package/src/actions/dist/actions.d.ts +3 -3
  26. package/src/actions/dist/actions.js +4 -4
  27. package/src/actions/dist/map-state-actions.d.ts +4 -4
  28. package/src/actions/dist/map-state-actions.js +5 -5
  29. package/src/actions/dist/vis-state-actions.d.ts +2 -2
  30. package/src/actions/dist/vis-state-actions.js +3 -3
  31. package/src/actions/package.json +8 -8
  32. package/src/actions/src/action-types.ts +2 -2
  33. package/src/actions/src/action-wrapper.ts +2 -2
  34. package/src/actions/src/actions.ts +3 -3
  35. package/src/actions/src/map-state-actions.ts +4 -4
  36. package/src/actions/src/vis-state-actions.ts +2 -2
  37. package/src/ai-assistant/dist/tools/kepler-tools/index.d.ts +1 -1
  38. package/src/ai-assistant/dist/tools/tools.d.ts +1 -1
  39. package/src/ai-assistant/package.json +7 -7
  40. package/src/cloud-providers/package.json +2 -2
  41. package/src/common-utils/package.json +3 -3
  42. package/src/components/dist/effects/effect-type-list-item.js +4 -8
  43. package/src/components/dist/kepler-gl.d.ts +1 -1
  44. package/src/components/dist/loading-indicator.js +7 -3
  45. package/src/components/dist/map-container.js +18 -3
  46. package/src/components/dist/modals/add-map-style-modal.js +2 -2
  47. package/src/components/dist/modals/export-image-modal.js +1 -2
  48. package/src/components/dist/plot-container.js +15 -1
  49. package/src/components/dist/side-panel/layer-panel/layer-configurator.d.ts +4 -4
  50. package/src/components/dist/side-panel/layer-panel/layer-list.js +2 -4
  51. package/src/components/dist/side-panel/layer-panel/layer-type-list-item.js +8 -5
  52. package/src/components/dist/side-panel/layer-panel/raster-tile-colormap-list-item.js +2 -3
  53. package/src/components/dist/side-panel/layer-panel/vis-config-slider.js +10 -5
  54. package/src/components/dist/side-panel/map-style-panel/map-style-selector.js +3 -2
  55. package/src/components/package.json +15 -15
  56. package/src/components/src/effects/effect-type-list-item.tsx +2 -5
  57. package/src/components/src/loading-indicator.tsx +13 -3
  58. package/src/components/src/map-container.tsx +20 -6
  59. package/src/components/src/modals/add-map-style-modal.tsx +1 -1
  60. package/src/components/src/modals/export-image-modal.tsx +0 -1
  61. package/src/components/src/plot-container.tsx +19 -2
  62. package/src/components/src/side-panel/layer-panel/layer-list.tsx +0 -1
  63. package/src/components/src/side-panel/layer-panel/layer-type-list-item.tsx +11 -4
  64. package/src/components/src/side-panel/layer-panel/raster-tile-colormap-list-item.tsx +2 -3
  65. package/src/components/src/side-panel/layer-panel/vis-config-slider.tsx +12 -5
  66. package/src/components/src/side-panel/map-style-panel/map-style-selector.tsx +7 -1
  67. package/src/constants/dist/default-settings.d.ts +8 -6
  68. package/src/constants/dist/default-settings.js +9 -13
  69. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/14/ab/1fbe8d595eaf6f179613022ba62b99ba41fe2f6b8061293406468a705d53002cfb0ba12e6833df2aa9c4c55b7061e239395129a1515da317d57e518b1dc7 +1 -0
  70. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/37/b0/3745c4bb4b6114fa3433e4871042f7db966b48b29cde3301afe38370cecfe41f5aac801adc6fa93f6cd05411c521215e58542853414a81c0904ba4291e09 +1 -0
  71. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a6/24/e627b9d220d419ebbcd587d4a259bfdefa4e2a415bffa609a2388ad0b2f98ff87bc25b05959f5523f920d81c80d22ea832fea3de26f385bf3980061f6192 +1 -0
  72. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/68/bb/2c3d5cb60ef7b9e6d889b7d9b75b05761c58ee43b954df1a262102d3a106 +2 -0
  73. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/93/38/f167b214acd87fc28cf533f463b7423ce65340878809b494323fae359cb4 +2 -0
  74. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/c9/15/fa84924a275687fd07d9edc843fb826bd3d3733dc8f56523787fb2cba9b4 +2 -0
  75. package/src/constants/package.json +2 -2
  76. package/src/constants/src/default-settings.ts +5 -10
  77. package/src/constants/umd/keplergl.min.js +1 -1
  78. package/src/deckgl-arrow-layers/package.json +2 -2
  79. package/src/deckgl-layers/dist/raster/images.js +3 -3
  80. package/src/deckgl-layers/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.d.ts +1 -1
  81. package/src/deckgl-layers/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +2 -2
  82. package/src/deckgl-layers/dist/raster/raster-mesh-layer/raster-mesh-layer.js +3 -9
  83. package/src/deckgl-layers/package.json +4 -4
  84. package/src/deckgl-layers/src/raster/images.ts +1 -1
  85. package/src/deckgl-layers/src/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.ts +12 -33
  86. package/src/deckgl-layers/src/raster/raster-mesh-layer/raster-mesh-layer.ts +2 -5
  87. package/src/duckdb/dist/table/duckdb-table.d.ts +1 -1
  88. package/src/duckdb/package.json +6 -6
  89. package/src/effects/dist/effect.d.ts +1 -0
  90. package/src/effects/dist/effect.js +7 -1
  91. package/src/effects/package.json +5 -5
  92. package/src/effects/src/effect.ts +5 -0
  93. package/src/layers/dist/base-layer.d.ts +1 -1
  94. package/src/layers/dist/geojson-layer/geojson-layer.d.ts +1 -1
  95. package/src/layers/dist/geojson-layer/geojson-utils.d.ts +3 -3
  96. package/src/layers/dist/icon-layer/icon-layer.d.ts +0 -1
  97. package/src/layers/dist/icon-layer/icon-layer.js +3 -4
  98. package/src/layers/dist/index.d.ts +2 -1
  99. package/src/layers/dist/index.js +16 -8
  100. package/src/layers/dist/raster-tile/image.d.ts +6 -0
  101. package/src/layers/dist/raster-tile/image.js +39 -22
  102. package/src/layers/dist/raster-tile/raster-tile-layer.d.ts +2 -8
  103. package/src/layers/dist/raster-tile/raster-tile-layer.js +20 -35
  104. package/src/layers/dist/raster-tile/types.d.ts +1 -0
  105. package/src/layers/dist/raster-tile/types.js +1 -1
  106. package/src/layers/dist/raster-tile/url.d.ts +3 -0
  107. package/src/layers/dist/raster-tile/url.js +7 -1
  108. package/src/layers/dist/trip-layer/trip-layer.d.ts +1 -1
  109. package/src/layers/package.json +9 -9
  110. package/src/layers/src/icon-layer/icon-layer.ts +3 -5
  111. package/src/layers/src/index.ts +2 -1
  112. package/src/layers/src/raster-tile/image.ts +17 -5
  113. package/src/layers/src/raster-tile/raster-tile-layer.ts +18 -29
  114. package/src/layers/src/raster-tile/types.ts +1 -0
  115. package/src/layers/src/raster-tile/url.ts +6 -0
  116. package/src/localization/package.json +1 -1
  117. package/src/processors/package.json +7 -7
  118. package/src/reducers/dist/index.d.ts +1 -0
  119. package/src/reducers/dist/index.js +8 -1
  120. package/src/reducers/dist/layer-utils.d.ts +2 -0
  121. package/src/reducers/dist/layer-utils.js +23 -4
  122. package/src/reducers/dist/map-style-updaters.d.ts +1 -0
  123. package/src/reducers/dist/map-style-updaters.js +10 -5
  124. package/src/reducers/dist/vis-state-updaters.js +3 -12
  125. package/src/reducers/dist/vis-state.d.ts +4 -4
  126. package/src/reducers/package.json +16 -16
  127. package/src/reducers/src/index.ts +1 -0
  128. package/src/reducers/src/layer-utils.ts +22 -4
  129. package/src/reducers/src/map-style-updaters.ts +16 -8
  130. package/src/reducers/src/vis-state-updaters.ts +0 -8
  131. package/src/schemas/package.json +7 -7
  132. package/src/styles/dist/base.d.ts +4 -0
  133. package/src/styles/dist/base.js +10 -5
  134. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/15/ff/0d5d265a9aac90d367588258e15bade446b406199e4f89eebe00a15f0ae15cb46533e3490a435bd3c2028c11baf5cf980129b56fbc9df269850d75f36930 +1 -0
  135. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/4b/ee/673360e4b8362fe8483486f8fa132c6b9d9abf45a240d54f76bc3d60d2b01e530c4efd92baad3479d54e7fa48474cb9d52e633ceb9dfec546588b6981cfc +1 -0
  136. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a5/1f/7149cdcef3cb8e64025c197e3a6a47482bf1027c0991969349c7f1ec68e76f091966010bb72674850b48ed8361c1953b1b08da7dd66143642b32ce467635 +1 -0
  137. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/b7/6d/49546dbc3e903a5e6771b0ead707e4f4605454ac2bc718d0f0bf801b96a7 +2 -0
  138. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/bf/bd/77b9889db712486a6db4f34442ad9371c8a7a6a8ea20d4d0f484df4dc841 +2 -0
  139. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/c3/91/45735456a88c6ecc20a341b94971da9d02562b936da95a407f157b2f0ece +2 -0
  140. package/src/styles/package.json +2 -2
  141. package/src/styles/src/base.ts +6 -0
  142. package/src/styles/umd/keplergl.min.js +1 -1
  143. package/src/table/dist/{src/table/src/kepler-table.d.ts → kepler-table.d.ts} +2 -2
  144. package/src/table/dist/kepler-table.js +6 -4
  145. package/src/table/dist/tileset/vector-tile-utils.js +2 -2
  146. package/src/table/package.json +5 -5
  147. package/src/table/src/kepler-table.ts +4 -3
  148. package/src/table/src/tileset/vector-tile-utils.ts +1 -1
  149. package/src/table/tsconfig.production.json +2 -1
  150. package/src/tasks/package.json +2 -2
  151. package/src/types/effects.d.ts +1 -0
  152. package/src/types/package.json +1 -1
  153. package/src/utils/dist/application-config.d.ts +1 -0
  154. package/src/utils/dist/application-config.js +4 -4
  155. package/src/utils/package.json +4 -4
  156. package/src/utils/src/application-config.ts +6 -0
  157. package/umd/keplergl.min.js +1226 -1251
  158. package/src/table/dist/src/table/src/tileset/vector-tile-utils.spec.d.ts +0 -1
  159. package/src/table/dist/test/fixtures/tile-metadata.d.ts +0 -65
  160. /package/src/table/dist/{src/table/src/dataset-utils.d.ts → dataset-utils.d.ts} +0 -0
  161. /package/src/table/dist/{src/table/src/gpu-filter-utils.d.ts → gpu-filter-utils.d.ts} +0 -0
  162. /package/src/table/dist/{src/table/src/index.d.ts → index.d.ts} +0 -0
  163. /package/src/table/dist/{src/table/src/tileset → tileset}/raster-tile-utils.d.ts +0 -0
  164. /package/src/table/dist/{src/table/src/tileset → tileset}/tileset-utils.d.ts +0 -0
  165. /package/src/table/dist/{src/table/src/tileset → tileset}/vector-tile-utils.d.ts +0 -0
@@ -43,7 +43,7 @@ export declare type TimeFieldFilterProps = TimeRangeFieldDomain & {
43
43
  };
44
44
  export declare function maybeToDate(isTime: boolean, fieldIdx: number, format: string, dc: DataContainerInterface, d: {
45
45
  index: number;
46
- }): any;
46
+ } | any[]): any;
47
47
  declare class KeplerTable<F extends Field = Field> {
48
48
  readonly id: string;
49
49
  type?: string;
@@ -187,7 +187,7 @@ export declare function copyTableAndUpdate(original: KeplerTable<Field>, options
187
187
  export declare function getFieldValueAccessor<F extends {
188
188
  type?: Field['type'];
189
189
  format?: Field['format'];
190
- }>(f: F, i: number, dc: DataContainerInterface): (d: {
190
+ }>(f: F, i: number, dc: DataContainerInterface): (d: any[] | {
191
191
  index: number;
192
192
  }) => any;
193
193
  export default KeplerTable;
@@ -34,11 +34,13 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
34
34
 
35
35
  // Unique identifier of each field
36
36
  var FID_KEY = 'name';
37
- function maybeToDate(isTime, fieldIdx, format, dc, d) {
37
+ function maybeToDate(isTime, fieldIdx, format, dc,
38
+ // An object with row index or a materialized row array (for materialized hover info from trip layer)
39
+ d) {
38
40
  if (isTime) {
39
- return (0, _utils.timeToUnixMilli)(dc.valueAt(d.index, fieldIdx), format);
41
+ return (0, _utils.timeToUnixMilli)(Array.isArray(d) ? d[fieldIdx] : dc.valueAt(d.index, fieldIdx), format);
40
42
  }
41
- return dc.valueAt(d.index, fieldIdx);
43
+ return Array.isArray(d) ? d[fieldIdx] : dc.valueAt(d.index, fieldIdx);
42
44
  }
43
45
  var KeplerTable = /*#__PURE__*/function () {
44
46
  function KeplerTable(_ref) {
@@ -642,4 +644,4 @@ function getFieldValueAccessor(f, i, dc) {
642
644
  f.type === _constants.ALL_FIELD_TYPES.timestamp, i, f.format || '', dc);
643
645
  }
644
646
  var _default = exports["default"] = KeplerTable;
645
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2QzQXJyYXkiLCJfY29uc3RhbnRzIiwiX2dwdUZpbHRlclV0aWxzIiwiX3V0aWxzIiwiX2NvbW1vblV0aWxzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiRklEX0tFWSIsIm1heWJlVG9EYXRlIiwiaXNUaW1lIiwiZmllbGRJZHgiLCJmb3JtYXQiLCJkYyIsImQiLCJ0aW1lVG9Vbml4TWlsbGkiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJLZXBsZXJUYWJsZSIsIl9yZWYiLCJpbmZvIiwiY29sb3IiLCJtZXRhZGF0YSIsIl9yZWYkc3VwcG9ydGVkRmlsdGVyVCIsInN1cHBvcnRlZEZpbHRlclR5cGVzIiwiX3JlZiRkaXNhYmxlRGF0YU9wZXJhIiwiZGlzYWJsZURhdGFPcGVyYXRpb24iLCJfY2xhc3NDYWxsQ2hlY2syIiwiZGF0YXNldEluZm8iLCJpZCIsImdlbmVyYXRlSGFzaElkIiwibGFiZWwiLCJ0eXBlIiwiZGVmYXVsdE1ldGFkYXRhIiwiZGF0YUNvbnRhaW5lciIsImNyZWF0ZURhdGFDb250YWluZXIiLCJncHVGaWx0ZXIiLCJnZXRHcHVGaWx0ZXJQcm9wcyIsInVuZGVmaW5lZCIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJfaW1wb3J0RGF0YSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3JlZjIiLCJkYXRhIiwiZGF0YUNvbnRhaW5lckRhdGEiLCJpbnB1dERhdGFGb3JtYXQiLCJmaWVsZHMiLCJhbGxJbmRleGVzIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwiY29scyIsInJvd3MiLCJEYXRhRm9ybSIsIkNPTFNfQVJSQVkiLCJST1dTX0FSUkFZIiwibWFwIiwiaSIsImRpc3BsYXlOYW1lIiwiYW5hbHl6ZXJUeXBlIiwiQUxMX0ZJRUxEX1RZUEVTIiwic3RyaW5nIiwidmFsdWVBY2Nlc3NvciIsImdldEZpZWxkVmFsdWVBY2Nlc3NvciIsImdldFBsYWluSW5kZXgiLCJmaWx0ZXJlZEluZGV4IiwiZmlsdGVyZWRJbmRleEZvckRvbWFpbiIsImZpZWxkUGFpcnMiLCJmaW5kUG9pbnRGaWVsZFBhaXJzIiwic3RvcCIsImltcG9ydERhdGEiLCJfeCIsIl91cGRhdGUiLCJfY2FsbGVlMiIsIl90aGlzJGRhdGFDb250YWluZXIkdSIsIl90aGlzJGRhdGFDb250YWluZXIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJ1cGRhdGUiLCJhYnJ1cHQiLCJfeDIiLCJnZXQiLCJudW1Sb3dzIiwiZ2V0Q29sdW1uRmllbGQiLCJjb2x1bW5OYW1lIiwiZmllbGQiLCJmaW5kIiwiZmQiLCJfYXNzZXRGaWVsZCIsImdldENvbHVtbkZpZWxkSWR4IiwiZmluZEluZGV4IiwiQm9vbGVhbiIsImdldENvbHVtbkRpc3BsYXlGb3JtYXQiLCJkaXNwbGF5Rm9ybWF0IiwiZ2V0VmFsdWUiLCJyb3dJZHgiLCJ1cGRhdGVDb2x1bW5GaWVsZCIsIm5ld0ZpZWxkIiwiYXNzaWduIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInVwZGF0ZVRhYmxlQ29sb3IiLCJuZXdDb2xvciIsImdldENvbHVtbkZpbHRlclByb3BzIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJmaWx0ZXJQcm9wcyIsImZpZWxkRG9tYWluIiwiZ2V0Q29sdW1uRmlsdGVyRG9tYWluIiwiZ2V0RmlsdGVyUHJvcHMiLCJmaWx0ZXJUYWJsZSIsImZpbHRlcnMiLCJsYXllcnMiLCJvcHQiLCJfdGhpcyIsImRhdGFJZCIsIm9sZEZpbHRlclJlY29yZCIsImZpbHRlclJlY29yZCIsImdldEZpbHRlclJlY29yZCIsImNoYW5nZWRGaWx0ZXJzIiwiZGlmZkZpbHRlcnMiLCJzaG91bGRDYWxEb21haW4iLCJkeW5hbWljRG9tYWluIiwic2hvdWxkQ2FsSW5kZXgiLCJjcHUiLCJmaWx0ZXJSZXN1bHQiLCJkeW5hbWljRG9tYWluRmlsdGVycyIsImNwdUZpbHRlcnMiLCJmaWx0ZXJGdW5jcyIsInJlZHVjZSIsImFjYyIsImZpZWxkSW5kZXgiLCJnZXREYXRhc2V0RmllbGRJbmRleEZvckZpbHRlciIsImdldEZpbHRlckZ1bmN0aW9uIiwiZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMiLCJmaWx0ZXJUYWJsZUNQVSIsImNwdU9ubHkiLCJpZ25vcmVEb21haW4iLCJmaWx0ZXJlZElkeENQVSIsImZpbHRlclJlY29yZENQVSIsImdwdSIsImNvcGllZCIsImNvcHlUYWJsZSIsImZpbHRlcmVkIiwiZG9tYWluIiwicmVhbCIsImludGVnZXIiLCJnZXROdW1lcmljRmllbGREb21haW4iLCJoMyIsImRhdGUiLCJnZXRPcmRpbmFsRG9tYWluIiwidGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wRmllbGREb21haW4iLCJnZXRDb2x1bW5MYXllckRvbWFpbiIsInNjYWxlVHlwZSIsIlNDQUxFX1RZUEVTIiwiQ29uc29sZSIsImVycm9yIiwiY29uY2F0IiwiaW5kZXhWYWx1ZUFjY2Vzc29yIiwic29ydEZ1bmN0aW9uIiwiZ2V0U29ydGluZ0Z1bmN0aW9uIiwib3JkaW5hbCIsImN1c3RvbU9yZGluYWwiLCJwb2ludCIsInF1YW50aWxlIiwiZ2V0UXVhbnRpbGVEb21haW4iLCJsb2ciLCJnZXRMb2dEb21haW4iLCJxdWFudGl6ZSIsImxpbmVhciIsInNxcnQiLCJjdXN0b20iLCJnZXRMaW5lYXJEb21haW4iLCJmaWVsZE5hbWUiLCJjb25kaXRpb24iLCJzcGVjaWFsQ2hhcmFjdGVyU2V0IiwiZm91bmRNYXRjaGluZ0ZpZWxkcyIsInJlIiwic3VmZml4UGFpciIsImFsbE5hbWVzIiwicGFydG5lcklkeCIsInJlcGxhY2UiLCJtYXRjaCIsImFsdElkeCIsIkFMVElUVURFX0ZJRUxEUyIsInNvbWUiLCJhbHQiLCJ0b0xvd2VyQ2FzZSIsImNhcnJ5IiwiaWR4IiwiX2l0ZXJhdG9yIiwiVFJJUF9QT0lOVF9GSUVMRFMiLCJfc3RlcCIsIlJlZ0V4cCIsIl9mb3VuZE1hdGNoaW5nRmllbGRzIiwidHJpbU5hbWUiLCJ0cmltIiwiZGVmYXVsdE5hbWUiLCJwYWlyIiwibGF0IiwibG5nIiwiYWx0aXR1ZGUiLCJzdWZmaXgiLCJlcnIiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwiZGF0YXNldCIsImNvbHVtbiIsIm1vZGUiLCJzb3J0QnkiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwiVU5TT1JUIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsImFzY2VuZGluZyIsImRlc2NlbmRpbmciLCJzb3J0IiwiYiIsInZhbHVlMSIsInZhbHVlMiIsIm5vdE51bGxvclVuZGVmaW5lZCIsInBpblRhYmxlQ29sdW1ucyIsInBpbm5lZENvbHVtbnMiLCJpbmNsdWRlcyIsImNvIiwiY29weVRhYmxlQW5kVXBkYXRlIiwib3JpZ2luYWwiLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsIm9wdGlvbnMiLCJlbnRyaWVzIiwiZW50cnkiLCJiaW5kIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2tlcGxlci10YWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQge2FzY2VuZGluZywgZGVzY2VuZGluZ30gZnJvbSAnZDMtYXJyYXknO1xuXG5pbXBvcnQge1xuICBUUklQX1BPSU5UX0ZJRUxEUyxcbiAgU09SVF9PUkRFUixcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBBTFRJVFVERV9GSUVMRFMsXG4gIFNDQUxFX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIFJHQkNvbG9yLFxuICBGaWVsZCxcbiAgRmllbGRQYWlyLFxuICBGaWVsZERvbWFpbixcbiAgRmlsdGVyLFxuICBQcm90b0RhdGFzZXQsXG4gIEZpbHRlclJlY29yZCxcbiAgRmlsdGVyRGF0YXNldE9wdCxcbiAgUmFuZ2VGaWVsZERvbWFpbixcbiAgU2VsZWN0RmllbGREb21haW4sXG4gIE11bHRpU2VsZWN0RmllbGREb21haW4sXG4gIFRpbWVSYW5nZUZpZWxkRG9tYWluXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge2dldEdwdUZpbHRlclByb3BzLCBnZXREYXRhc2V0RmllbGRJbmRleEZvckZpbHRlcn0gZnJvbSAnLi9ncHUtZmlsdGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgZ2V0U29ydGluZ0Z1bmN0aW9uLFxuICB0aW1lVG9Vbml4TWlsbGksXG4gIGNyZWF0ZURhdGFDb250YWluZXIsXG4gIERhdGFGb3JtLFxuICBkaWZmRmlsdGVycyxcbiAgZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMsXG4gIEZpbHRlclJlc3VsdCxcbiAgZ2V0RmlsdGVyRnVuY3Rpb24sXG4gIGdldEZpbHRlclByb3BzLFxuICBnZXRGaWx0ZXJSZWNvcmQsXG4gIGdldE51bWVyaWNGaWVsZERvbWFpbixcbiAgZ2V0VGltZXN0YW1wRmllbGREb21haW4sXG4gIGdldExpbmVhckRvbWFpbixcbiAgZ2V0TG9nRG9tYWluLFxuICBnZXRPcmRpbmFsRG9tYWluLFxuICBnZXRRdWFudGlsZURvbWFpbixcbiAgRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgRmlsdGVyQ2hhbmdlZFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIG5vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuXG4vLyBUT0RPIGlzb2xhdGUgbGF5ZXIgdHlwZSwgZGVwZW5kcyBvbiBAa2VwbGVyLmdsL2xheWVyc1xudHlwZSBMYXllciA9IGFueTtcblxuZXhwb3J0IHR5cGUgR3B1RmlsdGVyID0ge1xuICBmaWx0ZXJSYW5nZTogbnVtYmVyW11bXTtcbiAgZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2Vyczoge1xuICAgIFtpZDogc3RyaW5nXToge25hbWU6IHN0cmluZzsgZG9tYWluMDogbnVtYmVyfSB8IG51bGw7XG4gIH07XG4gIGZpbHRlclZhbHVlQWNjZXNzb3I6IChcbiAgICBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuICApID0+IChcbiAgICBnZXRJbmRleD86IChhbnkpID0+IG51bWJlcixcbiAgICBnZXREYXRhPzogKGRjXzogRGF0YUNvbnRhaW5lckludGVyZmFjZSwgZDogYW55LCBmaWVsZEluZGV4OiBudW1iZXIpID0+IGFueVxuICApID0+IChkOiBhbnksIG9iamVjdEluZm8/OiB7aW5kZXg6IG51bWJlcn0pID0+IChudW1iZXIgfCBudW1iZXJbXSlbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlclByb3BzID1cbiAgfCBOdW1lcmljRmllbGRGaWx0ZXJQcm9wc1xuICB8IEJvb2xlYW5GaWVsZEZpbHRlclByb3BzXG4gIHwgU3RyaW5nRmllbGRGaWx0ZXJQcm9wc1xuICB8IFRpbWVGaWVsZEZpbHRlclByb3BzO1xuXG5leHBvcnQgdHlwZSBOdW1lcmljRmllbGRGaWx0ZXJQcm9wcyA9IFJhbmdlRmllbGREb21haW4gJiB7XG4gIHZhbHVlOiBbbnVtYmVyLCBudW1iZXJdO1xuICB0eXBlOiBzdHJpbmc7XG4gIHR5cGVPcHRpb25zOiBzdHJpbmdbXTtcbiAgZ3B1OiBib29sZWFuO1xuICBjb2x1bW5TdGF0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuZXhwb3J0IHR5cGUgQm9vbGVhbkZpZWxkRmlsdGVyUHJvcHMgPSBTZWxlY3RGaWVsZERvbWFpbiAmIHtcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogYm9vbGVhbjtcbiAgZ3B1OiBib29sZWFuO1xuICBjb2x1bW5TdGF0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuZXhwb3J0IHR5cGUgU3RyaW5nRmllbGRGaWx0ZXJQcm9wcyA9IE11bHRpU2VsZWN0RmllbGREb21haW4gJiB7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZ1tdO1xuICBncHU6IGJvb2xlYW47XG4gIGNvbHVtblN0YXRzPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn07XG5leHBvcnQgdHlwZSBUaW1lRmllbGRGaWx0ZXJQcm9wcyA9IFRpbWVSYW5nZUZpZWxkRG9tYWluICYge1xuICB0eXBlOiBzdHJpbmc7XG4gIHZpZXc6IEZpbHRlclsndmlldyddO1xuICBmaXhlZERvbWFpbjogYm9vbGVhbjtcbiAgdmFsdWU6IG51bWJlcltdO1xuICBncHU6IGJvb2xlYW47XG4gIGNvbHVtblN0YXRzPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn07XG5cbi8vIFVuaXF1ZSBpZGVudGlmaWVyIG9mIGVhY2ggZmllbGRcbmNvbnN0IEZJRF9LRVkgPSAnbmFtZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVRvRGF0ZShcbiAgaXNUaW1lOiBib29sZWFuLFxuICBmaWVsZElkeDogbnVtYmVyLFxuICBmb3JtYXQ6IHN0cmluZyxcbiAgZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIGQ6IHtpbmRleDogbnVtYmVyfVxuKSB7XG4gIGlmIChpc1RpbWUpIHtcbiAgICByZXR1cm4gdGltZVRvVW5peE1pbGxpKGRjLnZhbHVlQXQoZC5pbmRleCwgZmllbGRJZHgpLCBmb3JtYXQpO1xuICB9XG5cbiAgcmV0dXJuIGRjLnZhbHVlQXQoZC5pbmRleCwgZmllbGRJZHgpO1xufVxuXG5jbGFzcyBLZXBsZXJUYWJsZTxGIGV4dGVuZHMgRmllbGQgPSBGaWVsZD4ge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIHR5cGU/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGNvbG9yOiBSR0JDb2xvcjtcblxuICAvLyBmaWVsZHMgYW5kIGRhdGFcbiAgZmllbGRzOiBGW10gPSBbXTtcblxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlO1xuXG4gIGFsbEluZGV4ZXM6IG51bWJlcltdID0gW107XG4gIGZpbHRlcmVkSW5kZXg6IG51bWJlcltdID0gW107XG4gIGZpbHRlcmVkSWR4Q1BVPzogbnVtYmVyW107XG4gIGZpbHRlcmVkSW5kZXhGb3JEb21haW46IG51bWJlcltdID0gW107XG4gIGZpZWxkUGFpcnM6IEZpZWxkUGFpcltdID0gW107XG4gIGdwdUZpbHRlcjogR3B1RmlsdGVyO1xuICBmaWx0ZXJSZWNvcmQ/OiBGaWx0ZXJSZWNvcmQ7XG4gIGZpbHRlclJlY29yZENQVT86IEZpbHRlclJlY29yZDtcbiAgY2hhbmdlZEZpbHRlcnM/OiBGaWx0ZXJDaGFuZ2VkO1xuXG4gIC8vIHRhYmxlLWluamVjdGVkIG1ldGFkYXRhXG4gIHNvcnRDb2x1bW4/OiB7XG4gICAgLy8gY29sdW1uIG5hbWU6IHNvcnRlZCBpZHhcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7IC8vIEFTQ0VORElORyB8IERFU0NFTkRJTkcgfCBVTlNPUlRcbiAgfTtcbiAgc29ydE9yZGVyPzogbnVtYmVyW10gfCBudWxsO1xuXG4gIHBpbm5lZENvbHVtbnM/OiBzdHJpbmdbXTtcbiAgc3VwcG9ydGVkRmlsdGVyVHlwZXM/OiBzdHJpbmdbXSB8IG51bGw7XG4gIGRpc2FibGVEYXRhT3BlcmF0aW9uPzogYm9vbGVhbjtcblxuICAvLyB0YWJsZS1pbmplY3RlZCBtZXRhZGF0YVxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICBnZXRGaWxlUHJvY2Vzc29yPzogKGRhdGE6IGFueSwgaW5wdXRGb3JtYXQ/OiBzdHJpbmcpID0+IHtkYXRhOiBhbnk7IGZvcm1hdDogc3RyaW5nfTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgaW5mbyxcbiAgICBjb2xvcixcbiAgICBtZXRhZGF0YSxcbiAgICBzdXBwb3J0ZWRGaWx0ZXJUeXBlcyA9IG51bGwsXG4gICAgZGlzYWJsZURhdGFPcGVyYXRpb24gPSBmYWxzZVxuICB9OiB7XG4gICAgaW5mbz86IFByb3RvRGF0YXNldFsnaW5mbyddO1xuICAgIGNvbG9yOiBSR0JDb2xvcjtcbiAgICBtZXRhZGF0YT86IFByb3RvRGF0YXNldFsnbWV0YWRhdGEnXTtcbiAgICBzdXBwb3J0ZWRGaWx0ZXJUeXBlcz86IFByb3RvRGF0YXNldFsnc3VwcG9ydGVkRmlsdGVyVHlwZXMnXTtcbiAgICBkaXNhYmxlRGF0YU9wZXJhdGlvbj86IFByb3RvRGF0YXNldFsnZGlzYWJsZURhdGFPcGVyYXRpb24nXTtcbiAgfSkge1xuICAgIC8vIFRPRE8gLSB3aGF0IHRvIGRvIGlmIHZhbGlkYXRpb24gZmFpbHM/IENhbiBrZXBsZXIgaGFuZGxlIGV4Y2VwdGlvbnM/XG4gICAgLy8gY29uc3QgdmFsaWRhdGVkRGF0YSA9IHZhbGlkYXRlSW5wdXREYXRhKGRhdGEpO1xuICAgIC8vIGlmICghdmFsaWRhdGVkRGF0YSkge1xuICAgIC8vICAgcmV0dXJuIHRoaXM7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgZGF0YXNldEluZm8gPSB7XG4gICAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNCksXG4gICAgICBsYWJlbDogJ25ldyBkYXRhc2V0JyxcbiAgICAgIHR5cGU6ICcnLFxuICAgICAgLi4uaW5mb1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TWV0YWRhdGEgPSB7XG4gICAgICBpZDogZGF0YXNldEluZm8uaWQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBmb3JtYXQ6IGRhdGFzZXRJbmZvLmZvcm1hdCB8fCAnJyxcbiAgICAgIGxhYmVsOiBkYXRhc2V0SW5mby5sYWJlbCB8fCAnJ1xuICAgIH07XG5cbiAgICB0aGlzLmlkID0gZGF0YXNldEluZm8uaWQ7XG4gICAgdGhpcy50eXBlID0gZGF0YXNldEluZm8udHlwZTtcbiAgICB0aGlzLmxhYmVsID0gZGF0YXNldEluZm8ubGFiZWw7XG4gICAgdGhpcy5jb2xvciA9IGNvbG9yO1xuICAgIHRoaXMubWV0YWRhdGEgPSB7XG4gICAgICAuLi5kZWZhdWx0TWV0YWRhdGEsXG4gICAgICAuLi5tZXRhZGF0YVxuICAgIH07XG5cbiAgICB0aGlzLnN1cHBvcnRlZEZpbHRlclR5cGVzID0gc3VwcG9ydGVkRmlsdGVyVHlwZXM7XG4gICAgdGhpcy5kaXNhYmxlRGF0YU9wZXJhdGlvbiA9IGRpc2FibGVEYXRhT3BlcmF0aW9uO1xuXG4gICAgdGhpcy5kYXRhQ29udGFpbmVyID0gY3JlYXRlRGF0YUNvbnRhaW5lcihbXSk7XG4gICAgdGhpcy5ncHVGaWx0ZXIgPSBnZXRHcHVGaWx0ZXJQcm9wcyhbXSwgdGhpcy5pZCwgW10sIHVuZGVmaW5lZCk7XG4gIH1cblxuICBhc3luYyBpbXBvcnREYXRhKHtkYXRhfToge2RhdGE6IFByb3RvRGF0YXNldFsnZGF0YSddfSkge1xuICAgIGNvbnN0IGRhdGFDb250YWluZXJEYXRhID0gZGF0YS5jb2xzID8gZGF0YS5jb2xzIDogZGF0YS5yb3dzO1xuICAgIGNvbnN0IGlucHV0RGF0YUZvcm1hdCA9IGRhdGEuY29scyA/IERhdGFGb3JtLkNPTFNfQVJSQVkgOiBEYXRhRm9ybS5ST1dTX0FSUkFZO1xuXG4gICAgY29uc3QgZGF0YUNvbnRhaW5lciA9IGNyZWF0ZURhdGFDb250YWluZXIoZGF0YUNvbnRhaW5lckRhdGEsIHtcbiAgICAgIGZpZWxkczogZGF0YS5maWVsZHMsXG4gICAgICBpbnB1dERhdGFGb3JtYXRcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpZWxkczogRmllbGRbXSA9IGRhdGEuZmllbGRzLm1hcCgoZiwgaSkgPT4gKHtcbiAgICAgIC4uLmYsXG4gICAgICBmaWVsZElkeDogaSxcbiAgICAgIGlkOiBmLm5hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogZi5kaXNwbGF5TmFtZSB8fCBmLm5hbWUsXG4gICAgICBhbmFseXplclR5cGU6IGYuYW5hbHl6ZXJUeXBlIHx8IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmcsXG4gICAgICBmb3JtYXQ6IGYuZm9ybWF0IHx8ICcnLFxuICAgICAgdmFsdWVBY2Nlc3NvcjogZ2V0RmllbGRWYWx1ZUFjY2Vzc29yKGYsIGksIGRhdGFDb250YWluZXIpXG4gICAgfSkpO1xuXG4gICAgY29uc3QgYWxsSW5kZXhlcyA9IGRhdGFDb250YWluZXIuZ2V0UGxhaW5JbmRleCgpO1xuICAgIHRoaXMuZGF0YUNvbnRhaW5lciA9IGRhdGFDb250YWluZXI7XG4gICAgdGhpcy5hbGxJbmRleGVzID0gYWxsSW5kZXhlcztcbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBhbGxJbmRleGVzO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9IGFsbEluZGV4ZXM7XG4gICAgdGhpcy5maWVsZFBhaXJzID0gZmluZFBvaW50RmllbGRQYWlycyhmaWVsZHMpO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTWFrZSBzdXJlIHRoYXQgZmllbGRzIHNhdGlzZmllcyBGIGV4dGVuZHMgRmllbGRcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcbiAgICB0aGlzLmdwdUZpbHRlciA9IGdldEdwdUZpbHRlclByb3BzKFtdLCB0aGlzLmlkLCBmaWVsZHMsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlIHRhYmxlIHdpdGggbmV3IGRhdGFcbiAgICogQHBhcmFtIGRhdGEgLSBuZXcgZGF0YSBlLmcuIHRoZSBhcnJvdyBkYXRhIHdpdGggbmV3IGJhdGNoZXMgbG9hZGVkXG4gICAqL1xuICBhc3luYyB1cGRhdGUoZGF0YTogUHJvdG9EYXRhc2V0WydkYXRhJ10pIHtcbiAgICBjb25zdCBkYXRhQ29udGFpbmVyRGF0YSA9IGRhdGEuY29scyA/IGRhdGEuY29scyA6IGRhdGEucm93cztcbiAgICB0aGlzLmRhdGFDb250YWluZXIudXBkYXRlPy4oZGF0YUNvbnRhaW5lckRhdGEpO1xuICAgIHRoaXMuYWxsSW5kZXhlcyA9IHRoaXMuZGF0YUNvbnRhaW5lci5nZXRQbGFpbkluZGV4KCk7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gdGhpcy5hbGxJbmRleGVzO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9IHRoaXMuYWxsSW5kZXhlcztcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmllbGRcbiAgICogQHBhcmFtIGNvbHVtbk5hbWVcbiAgICovXG4gIGdldENvbHVtbkZpZWxkKGNvbHVtbk5hbWU6IHN0cmluZyk6IEYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZChmZCA9PiBmZFtGSURfS0VZXSA9PT0gY29sdW1uTmFtZSk7XG4gICAgdGhpcy5fYXNzZXRGaWVsZChjb2x1bW5OYW1lLCBmaWVsZCk7XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZElkeFxuICAgKiBAcGFyYW0gY29sdW1uTmFtZVxuICAgKi9cbiAgZ2V0Q29sdW1uRmllbGRJZHgoY29sdW1uTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuZmllbGRzLmZpbmRJbmRleChmZCA9PiBmZFtGSURfS0VZXSA9PT0gY29sdW1uTmFtZSk7XG4gICAgdGhpcy5fYXNzZXRGaWVsZChjb2x1bW5OYW1lLCBCb29sZWFuKGZpZWxkSWR4ID4gLTEpKTtcbiAgICByZXR1cm4gZmllbGRJZHg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRpc3BsYXlGb3JtYXRcbiAgICogQHBhcmFtIGNvbHVtbk5hbWVcbiAgICovXG4gIGdldENvbHVtbkRpc3BsYXlGb3JtYXQoY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZChmZCA9PiBmZFtGSURfS0VZXSA9PT0gY29sdW1uTmFtZSk7XG4gICAgdGhpcy5fYXNzZXRGaWVsZChjb2x1bW5OYW1lLCBmaWVsZCk7XG4gICAgcmV0dXJuIGZpZWxkPy5kaXNwbGF5Rm9ybWF0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgYSBjZWxsXG4gICAqL1xuICBnZXRWYWx1ZShjb2x1bW5OYW1lOiBzdHJpbmcsIHJvd0lkeDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0Q29sdW1uRmllbGQoY29sdW1uTmFtZSk7XG4gICAgcmV0dXJuIGZpZWxkID8gZmllbGQudmFsdWVBY2Nlc3Nvcih7aW5kZXg6IHJvd0lkeH0pIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGV4aXN0aW5nIGZpZWxkIHdpdGggYSBuZXcgb2JqZWN0XG4gICAqIEBwYXJhbSBmaWVsZElkeFxuICAgKiBAcGFyYW0gbmV3RmllbGRcbiAgICovXG4gIHVwZGF0ZUNvbHVtbkZpZWxkKGZpZWxkSWR4OiBudW1iZXIsIG5ld0ZpZWxkOiBGKTogdm9pZCB7XG4gICAgdGhpcy5maWVsZHMgPSBPYmplY3QuYXNzaWduKFsuLi50aGlzLmZpZWxkc10sIHtbZmllbGRJZHhdOiBuZXdGaWVsZH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBkYXRhc2V0IGNvbG9yIGJ5IGN1c3RvbSBjb2xvclxuICAgKiBAcGFyYW0gbmV3Q29sb3JcbiAgICovXG4gIHVwZGF0ZVRhYmxlQ29sb3IobmV3Q29sb3I6IFJHQkNvbG9yKTogdm9pZCB7XG4gICAgdGhpcy5jb2xvciA9IG5ld0NvbG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgZmlsdGVyUHJvcHMgdG8gZmllbGQgYW5kIHJldHJpZXZlIGl0XG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWx0ZXJQcm9wcyhjb2x1bW5OYW1lOiBzdHJpbmcpOiBGWydmaWx0ZXJQcm9wcyddIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmllbGRJZHggPSB0aGlzLmdldENvbHVtbkZpZWxkSWR4KGNvbHVtbk5hbWUpO1xuICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzW2ZpZWxkSWR4XTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZpZWxkLCAnZmlsdGVyUHJvcHMnKSkge1xuICAgICAgcmV0dXJuIGZpZWxkLmZpbHRlclByb3BzO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkRG9tYWluID0gdGhpcy5nZXRDb2x1bW5GaWx0ZXJEb21haW4oZmllbGQpO1xuICAgIGlmICghZmllbGREb21haW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZ2V0RmlsdGVyUHJvcHMoZmllbGQsIGZpZWxkRG9tYWluKTtcbiAgICBjb25zdCBuZXdGaWVsZCA9IHtcbiAgICAgIC4uLmZpZWxkLFxuICAgICAgZmlsdGVyUHJvcHNcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5GaWVsZChmaWVsZElkeCwgbmV3RmllbGQpO1xuXG4gICAgcmV0dXJuIGZpbHRlclByb3BzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGZpbHRlcnMgdG8gZGF0YXNldCwgcmV0dXJuIHRoZSBmaWx0ZXJlZCBkYXRhc2V0IHdpdGggdXBkYXRlZCBgZ3B1RmlsdGVyYCwgYGZpbHRlclJlY29yZGAsIGBmaWx0ZXJlZEluZGV4YCwgYGZpbHRlcmVkSW5kZXhGb3JEb21haW5gXG4gICAqIEBwYXJhbSBmaWx0ZXJzXG4gICAqIEBwYXJhbSBsYXllcnNcbiAgICogQHBhcmFtIG9wdFxuICAgKi9cbiAgZmlsdGVyVGFibGUoZmlsdGVyczogRmlsdGVyW10sIGxheWVyczogTGF5ZXJbXSwgb3B0PzogRmlsdGVyRGF0YXNldE9wdCk6IEtlcGxlclRhYmxlPEZpZWxkPiB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXIsIGlkOiBkYXRhSWQsIGZpbHRlclJlY29yZDogb2xkRmlsdGVyUmVjb3JkLCBmaWVsZHN9ID0gdGhpcztcblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZpbHRlcnNcbiAgICBjb25zdCBmaWx0ZXJSZWNvcmQgPSBnZXRGaWx0ZXJSZWNvcmQoZGF0YUlkLCBmaWx0ZXJzLCBvcHQgfHwge30pO1xuXG4gICAgdGhpcy5maWx0ZXJSZWNvcmQgPSBmaWx0ZXJSZWNvcmQ7XG4gICAgdGhpcy5ncHVGaWx0ZXIgPSBnZXRHcHVGaWx0ZXJQcm9wcyhmaWx0ZXJzLCBkYXRhSWQsIGZpZWxkcywgdGhpcy5ncHVGaWx0ZXIpO1xuXG4gICAgdGhpcy5jaGFuZ2VkRmlsdGVycyA9IGRpZmZGaWx0ZXJzKGZpbHRlclJlY29yZCwgb2xkRmlsdGVyUmVjb3JkKTtcblxuICAgIGlmICghZmlsdGVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJbmRleCA9IHRoaXMuYWxsSW5kZXhlcztcbiAgICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9IHRoaXMuYWxsSW5kZXhlcztcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRlIDIgc2V0cyBvZiBmaWx0ZXIgcmVzdWx0XG4gICAgLy8gZmlsdGVyZWRJbmRleCB1c2VkIHRvIGNhbGN1bGF0ZSBsYXllciBkYXRhXG4gICAgLy8gZmlsdGVyZWRJbmRleEZvckRvbWFpbiB1c2VkIHRvIGNhbGN1bGF0ZSBsYXllciBEb21haW5cbiAgICBjb25zdCBzaG91bGRDYWxEb21haW4gPSBCb29sZWFuKHRoaXMuY2hhbmdlZEZpbHRlcnMuZHluYW1pY0RvbWFpbik7XG4gICAgY29uc3Qgc2hvdWxkQ2FsSW5kZXggPSBCb29sZWFuKHRoaXMuY2hhbmdlZEZpbHRlcnMuY3B1KTtcblxuICAgIGxldCBmaWx0ZXJSZXN1bHQ6IEZpbHRlclJlc3VsdCA9IHt9O1xuICAgIGlmIChzaG91bGRDYWxEb21haW4gfHwgc2hvdWxkQ2FsSW5kZXgpIHtcbiAgICAgIGNvbnN0IGR5bmFtaWNEb21haW5GaWx0ZXJzID0gc2hvdWxkQ2FsRG9tYWluID8gZmlsdGVyUmVjb3JkLmR5bmFtaWNEb21haW4gOiBudWxsO1xuICAgICAgY29uc3QgY3B1RmlsdGVycyA9IHNob3VsZENhbEluZGV4ID8gZmlsdGVyUmVjb3JkLmNwdSA6IG51bGw7XG5cbiAgICAgIGNvbnN0IGZpbHRlckZ1bmNzID0gZmlsdGVycy5yZWR1Y2UoKGFjYywgZmlsdGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkSW5kZXggPSBnZXREYXRhc2V0RmllbGRJbmRleEZvckZpbHRlcih0aGlzLmlkLCBmaWx0ZXIpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkSW5kZXggIT09IC0xID8gZmllbGRzW2ZpZWxkSW5kZXhdIDogbnVsbDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICBbZmlsdGVyLmlkXTogZ2V0RmlsdGVyRnVuY3Rpb24oZmllbGQsIHRoaXMuaWQsIGZpbHRlciwgbGF5ZXJzLCBkYXRhQ29udGFpbmVyKVxuICAgICAgICB9O1xuICAgICAgfSwge30pO1xuXG4gICAgICBmaWx0ZXJSZXN1bHQgPSBmaWx0ZXJEYXRhQnlGaWx0ZXJUeXBlcyhcbiAgICAgICAge2R5bmFtaWNEb21haW5GaWx0ZXJzLCBjcHVGaWx0ZXJzLCBmaWx0ZXJGdW5jc30sXG4gICAgICAgIGRhdGFDb250YWluZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gZmlsdGVyUmVzdWx0LmZpbHRlcmVkSW5kZXggfHwgdGhpcy5maWx0ZXJlZEluZGV4O1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9XG4gICAgICBmaWx0ZXJSZXN1bHQuZmlsdGVyZWRJbmRleEZvckRvbWFpbiB8fCB0aGlzLmZpbHRlcmVkSW5kZXhGb3JEb21haW47XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBmaWx0ZXJzIHRvIGEgZGF0YXNldCBhbGwgb24gQ1BVLCBhc3NpZ24gdG8gYGZpbHRlcmVkSWR4Q1BVYCwgYGZpbHRlclJlY29yZENQVWBcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogQHBhcmFtIGxheWVyc1xuICAgKi9cbiAgZmlsdGVyVGFibGVDUFUoZmlsdGVyczogRmlsdGVyW10sIGxheWVyczogTGF5ZXJbXSk6IEtlcGxlclRhYmxlPEZpZWxkPiB7XG4gICAgY29uc3Qgb3B0ID0ge1xuICAgICAgY3B1T25seTogdHJ1ZSxcbiAgICAgIGlnbm9yZURvbWFpbjogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyBubyBmaWx0ZXJcbiAgICBpZiAoIWZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSWR4Q1BVID0gdGhpcy5hbGxJbmRleGVzO1xuICAgICAgdGhpcy5maWx0ZXJSZWNvcmRDUFUgPSBnZXRGaWx0ZXJSZWNvcmQodGhpcy5pZCwgZmlsdGVycywgb3B0KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIG5vIGdwdSBmaWx0ZXJcbiAgICBpZiAoIWZpbHRlcnMuZmluZChmID0+IGYuZ3B1KSkge1xuICAgICAgdGhpcy5maWx0ZXJlZElkeENQVSA9IHRoaXMuZmlsdGVyZWRJbmRleDtcbiAgICAgIHRoaXMuZmlsdGVyUmVjb3JkQ1BVID0gZ2V0RmlsdGVyUmVjb3JkKHRoaXMuaWQsIGZpbHRlcnMsIG9wdCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBtYWtlIGEgY29weSBmb3IgY3B1IGZpbHRlcmluZ1xuICAgIGNvbnN0IGNvcGllZCA9IGNvcHlUYWJsZSh0aGlzKTtcblxuICAgIGNvcGllZC5maWx0ZXJSZWNvcmQgPSB0aGlzLmZpbHRlclJlY29yZENQVTtcbiAgICBjb3BpZWQuZmlsdGVyZWRJbmRleCA9IHRoaXMuZmlsdGVyZWRJZHhDUFUgfHwgW107XG5cbiAgICBjb25zdCBmaWx0ZXJlZCA9IGNvcGllZC5maWx0ZXJUYWJsZShmaWx0ZXJzLCBsYXllcnMsIG9wdCk7XG5cbiAgICB0aGlzLmZpbHRlcmVkSWR4Q1BVID0gZmlsdGVyZWQuZmlsdGVyZWRJbmRleDtcbiAgICB0aGlzLmZpbHRlclJlY29yZENQVSA9IGZpbHRlcmVkLmZpbHRlclJlY29yZDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBmaWVsZCBkb21haW4gYmFzZWQgb24gZmllbGQgdHlwZSBhbmQgZGF0YVxuICAgKiBmb3IgRmlsdGVyXG4gICAqL1xuICBnZXRDb2x1bW5GaWx0ZXJEb21haW4oZmllbGQ6IEYpOiBGaWVsZERvbWFpbiB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gdGhpcztcbiAgICBjb25zdCB7dmFsdWVBY2Nlc3Nvcn0gPSBmaWVsZDtcblxuICAgIGxldCBkb21haW47XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgICAvLyBjYWxjdWxhdGUgZG9tYWluIGFuZCBzdGVwXG4gICAgICAgIHJldHVybiBnZXROdW1lcmljRmllbGREb21haW4oZGF0YUNvbnRhaW5lciwgdmFsdWVBY2Nlc3Nvcik7XG5cbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW46XG4gICAgICAgIHJldHVybiB7ZG9tYWluOiBbdHJ1ZSwgZmFsc2VdfTtcblxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuaDM6XG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgICAgICBkb21haW4gPSBnZXRPcmRpbmFsRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuICAgICAgICByZXR1cm4ge2RvbWFpbn07XG5cbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgICAgcmV0dXJuIGdldFRpbWVzdGFtcEZpZWxkRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge2RvbWFpbjogZ2V0T3JkaW5hbERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKX07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBHZXQgdGhlIGRvbWFpbiBvZiB0aGlzIGNvbHVtbiBiYXNlZCBvbiBzY2FsZSB0eXBlXG4gICAqL1xuICBnZXRDb2x1bW5MYXllckRvbWFpbihmaWVsZDogRiwgc2NhbGVUeXBlOiBzdHJpbmcpOiBudW1iZXJbXSB8IHN0cmluZ1tdIHwgW251bWJlciwgbnVtYmVyXSB8IG51bGwge1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4Rm9yRG9tYWlufSA9IHRoaXM7XG5cbiAgICBpZiAoIVNDQUxFX1RZUEVTW3NjYWxlVHlwZV0pIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoYHNjYWxlIHR5cGUgJHtzY2FsZVR5cGV9IG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHt2YWx1ZUFjY2Vzc29yfSA9IGZpZWxkO1xuICAgIGNvbnN0IGluZGV4VmFsdWVBY2Nlc3NvciA9IGkgPT4gdmFsdWVBY2Nlc3Nvcih7aW5kZXg6IGl9KTtcbiAgICBjb25zdCBzb3J0RnVuY3Rpb24gPSBnZXRTb3J0aW5nRnVuY3Rpb24oZmllbGQudHlwZSk7XG5cbiAgICBzd2l0Y2ggKHNjYWxlVHlwZSkge1xuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5vcmRpbmFsOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5wb2ludDpcbiAgICAgICAgLy8gZG8gbm90IHJlY2FsY3VsYXRlIG9yZGluYWwgZG9tYWluIGJhc2VkIG9uIGZpbHRlcmVkIGRhdGFcbiAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgb3JkaW5hbCBkb21haW4gZXZlcnkgdGltZVxuICAgICAgICByZXR1cm4gZ2V0T3JkaW5hbERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5xdWFudGlsZTpcbiAgICAgICAgcmV0dXJuIGdldFF1YW50aWxlRG9tYWluKGZpbHRlcmVkSW5kZXhGb3JEb21haW4sIGluZGV4VmFsdWVBY2Nlc3Nvciwgc29ydEZ1bmN0aW9uKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5sb2c6XG4gICAgICAgIHJldHVybiBnZXRMb2dEb21haW4oZmlsdGVyZWRJbmRleEZvckRvbWFpbiwgaW5kZXhWYWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5xdWFudGl6ZTpcbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMubGluZWFyOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5zcXJ0OlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5jdXN0b206XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZ2V0TGluZWFyRG9tYWluKGZpbHRlcmVkSW5kZXhGb3JEb21haW4sIGluZGV4VmFsdWVBY2Nlc3Nvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNhbXBsZSBvZiByb3dzIHRvIGNhbGN1bGF0ZSBsYXllciBib3VuZGFyaWVzXG4gICAqL1xuICAvLyBnZXRTYW1wbGVEYXRhKHJvd3MpXG5cbiAgLyoqXG4gICAqIFBhcnNlIGNlbGwgdmFsdWUgYmFzZWQgb24gY29sdW1uIHR5cGUgYW5kIHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBWYWx1ZSB0aGUgZmllbGQgdmFsdWUsIHR5cGUgdGhlIGZpZWxkIHR5cGVcbiAgICovXG4gIC8vIHBhcnNlRmllbGRWYWx1ZSh2YWx1ZSwgdHlwZSlcblxuICAvLyBzb3J0RGF0YXNldEJ5Q29sdW1uKClcblxuICAvKipcbiAgICogQXNzZXJ0IHdoZXRoZXIgZmllbGQgZXhpc3RcbiAgICogQHBhcmFtIGZpZWxkTmFtZVxuICAgKiBAcGFyYW0gY29uZGl0aW9uXG4gICAqL1xuICBfYXNzZXRGaWVsZChmaWVsZE5hbWU6IHN0cmluZywgY29uZGl0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgQ29uc29sZS5lcnJvcihgJHtmaWVsZE5hbWV9IGRvZXNudCBleGlzdCBpbiBkYXRhc2V0ICR7dGhpcy5pZH1gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgRGF0YXNldHMgPSB7XG4gIFtrZXk6IHN0cmluZ106IEtlcGxlclRhYmxlPEZpZWxkPjtcbn07XG5cbi8vIEhFTFBFUiBGVU5DVElPTlMgKE1BSU5MWSBFWFBPUlRFRCBGT1IgVEVTVC4uLilcbi8vIGhhdmUgdG8gZG91YmxlIGV4Y2FwZVxuY29uc3Qgc3BlY2lhbENoYXJhY3RlclNldCA9IGBbI18mQFxcXFwuXFxcXC1cXFxcIF1gO1xuXG5mdW5jdGlvbiBmb3VuZE1hdGNoaW5nRmllbGRzKHJlLCBzdWZmaXhQYWlyLCBhbGxOYW1lcywgZmllbGROYW1lKSB7XG4gIGNvbnN0IHBhcnRuZXJJZHggPSBhbGxOYW1lcy5maW5kSW5kZXgoXG4gICAgZCA9PiBkID09PSBmaWVsZE5hbWUucmVwbGFjZShyZSwgbWF0Y2ggPT4gbWF0Y2gucmVwbGFjZShzdWZmaXhQYWlyWzBdLCBzdWZmaXhQYWlyWzFdKSlcbiAgKTtcbiAgbGV0IGFsdElkeCA9IC0xO1xuICBpZiAocGFydG5lcklkeCA+IC0xKSB7XG4gICAgLy8gaWYgZm91bmQgcGFydG5lciwgZ28gb24gYW5kIGxvb2sgZm9yIGFsdGl0dWRlXG4gICAgQUxUSVRVREVfRklFTERTLnNvbWUoYWx0ID0+IHtcbiAgICAgIGFsdElkeCA9IGFsbE5hbWVzLmZpbmRJbmRleChcbiAgICAgICAgZCA9PiBkID09PSBmaWVsZE5hbWUucmVwbGFjZShyZSwgbWF0Y2ggPT4gbWF0Y2gucmVwbGFjZShzdWZmaXhQYWlyWzBdLCBhbHQpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhbHRJZHggPiAtMTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge3BhcnRuZXJJZHgsIGFsdElkeH07XG59XG4vKipcbiAqIEZpbmQgcG9pbnQgZmllbGRzIHBhaXJzIGZyb20gZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHJldHVybnMgZm91bmQgcG9pbnQgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUG9pbnRGaWVsZFBhaXJzKGZpZWxkczogRmllbGRbXSk6IEZpZWxkUGFpcltdIHtcbiAgY29uc3QgYWxsTmFtZXMgPSBmaWVsZHMubWFwKGYgPT4gZi5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gIC8vIGdldCBsaXN0IG9mIGFsbCBmaWVsZHMgd2l0aCBtYXRjaGluZyBzdWZmaXhlc1xuICBjb25zdCBhY2M6IEZpZWxkUGFpcltdID0gW107XG4gIHJldHVybiBhbGxOYW1lcy5yZWR1Y2UoKGNhcnJ5LCBmaWVsZE5hbWUsIGlkeCkgPT4ge1xuICAgIC8vIFRoaXMgc2VhcmNoIGZvciBwYWlycyB3aWxsIGVhcmx5IGV4aXQgaWYgZm91bmQuXG4gICAgZm9yIChjb25zdCBzdWZmaXhQYWlyIG9mIFRSSVBfUE9JTlRfRklFTERTKSB7XG4gICAgICAvLyBtYXRjaCBmaXJzdCBzdWZmaXhcbiAgICAgIC8vIChefFsjXyZAXFwuXFwtXFwgXSlsYXQoWyNfJkBcXC5cXC1cXCBdfCQpXG4gICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYChefCR7c3BlY2lhbENoYXJhY3RlclNldH0pJHtzdWZmaXhQYWlyWzBdfSgke3NwZWNpYWxDaGFyYWN0ZXJTZXR9fCQpYCk7XG5cbiAgICAgIGlmIChyZS50ZXN0KGZpZWxkTmFtZSkpIHtcbiAgICAgICAgY29uc3Qge3BhcnRuZXJJZHgsIGFsdElkeH0gPSBmb3VuZE1hdGNoaW5nRmllbGRzKHJlLCBzdWZmaXhQYWlyLCBhbGxOYW1lcywgZmllbGROYW1lKTtcblxuICAgICAgICBpZiAocGFydG5lcklkeCA+IC0xKSB7XG4gICAgICAgICAgY29uc3QgdHJpbU5hbWUgPSBmaWVsZE5hbWUucmVwbGFjZShyZSwgJycpLnRyaW0oKTtcblxuICAgICAgICAgIGNhcnJ5LnB1c2goe1xuICAgICAgICAgICAgZGVmYXVsdE5hbWU6IHRyaW1OYW1lIHx8ICdwb2ludCcsXG4gICAgICAgICAgICBwYWlyOiB7XG4gICAgICAgICAgICAgIGxhdDoge1xuICAgICAgICAgICAgICAgIGZpZWxkSWR4OiBpZHgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkc1tpZHhdLm5hbWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbG5nOiB7XG4gICAgICAgICAgICAgICAgZmllbGRJZHg6IHBhcnRuZXJJZHgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkc1twYXJ0bmVySWR4XS5uYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC4uLihhbHRJZHggPiAtMVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBhbHRpdHVkZToge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkSWR4OiBhbHRJZHgsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkc1thbHRJZHhdLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VmZml4OiBzdWZmaXhQYWlyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGNhcnJ5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYXJyeTtcbiAgfSwgYWNjKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFzZXRcbiAqIEBwYXJhbSBjb2x1bW5cbiAqIEBwYXJhbSBtb2RlXG4gKiBAdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydERhdGFzZXRCeUNvbHVtbihcbiAgZGF0YXNldDogS2VwbGVyVGFibGU8RmllbGQ+LFxuICBjb2x1bW46IHN0cmluZyxcbiAgbW9kZT86IHN0cmluZ1xuKTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgY29uc3Qge2FsbEluZGV4ZXMsIGZpZWxkcywgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0O1xuICBjb25zdCBmaWVsZEluZGV4ID0gZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICBjb25zdCBzb3J0QnkgPSBTT1JUX09SREVSW21vZGUgfHwgJyddIHx8IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuXG4gIGlmIChzb3J0QnkgPT09IFNPUlRfT1JERVIuVU5TT1JUKSB7XG4gICAgZGF0YXNldC5zb3J0Q29sdW1uID0ge307XG4gICAgZGF0YXNldC5zb3J0T3JkZXIgPSBudWxsO1xuXG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICBjb25zdCBzb3J0RnVuY3Rpb24gPSBzb3J0QnkgPT09IFNPUlRfT1JERVIuQVNDRU5ESU5HID8gYXNjZW5kaW5nIDogZGVzY2VuZGluZztcbiAgY29uc3Qgc29ydE9yZGVyID0gYWxsSW5kZXhlcy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCB2YWx1ZTEgPSBkYXRhQ29udGFpbmVyLnZhbHVlQXQoYSwgZmllbGRJbmRleCk7XG4gICAgY29uc3QgdmFsdWUyID0gZGF0YUNvbnRhaW5lci52YWx1ZUF0KGIsIGZpZWxkSW5kZXgpO1xuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlMSkgJiYgbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlMikpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlMSkgJiYgIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZTIpKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBzb3J0RnVuY3Rpb24odmFsdWUxLCB2YWx1ZTIpO1xuICB9KTtcblxuICBkYXRhc2V0LnNvcnRDb2x1bW4gPSB7XG4gICAgW2NvbHVtbl06IHNvcnRCeVxuICB9O1xuICBkYXRhc2V0LnNvcnRPcmRlciA9IHNvcnRPcmRlcjtcblxuICByZXR1cm4gZGF0YXNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0OiBLZXBsZXJUYWJsZTxGaWVsZD4sIGNvbHVtbjogc3RyaW5nKTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgY29uc3QgZmllbGQgPSBkYXRhc2V0LmdldENvbHVtbkZpZWxkKGNvbHVtbik7XG4gIGlmICghZmllbGQpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuXG4gIGxldCBwaW5uZWRDb2x1bW5zO1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhc2V0LnBpbm5lZENvbHVtbnMpICYmIGRhdGFzZXQucGlubmVkQ29sdW1ucy5pbmNsdWRlcyhmaWVsZC5uYW1lKSkge1xuICAgIC8vIHVucGluIGl0XG4gICAgcGlubmVkQ29sdW1ucyA9IGRhdGFzZXQucGlubmVkQ29sdW1ucy5maWx0ZXIoY28gPT4gY28gIT09IGZpZWxkLm5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHBpbm5lZENvbHVtbnMgPSAoZGF0YXNldC5waW5uZWRDb2x1bW5zIHx8IFtdKS5jb25jYXQoZmllbGQubmFtZSk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge3Bpbm5lZENvbHVtbnN9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZShvcmlnaW5hbDogS2VwbGVyVGFibGU8RmllbGQ+KTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpKSwgb3JpZ2luYWwpO1xufVxuXG4vKipcbiAqIEB0eXBlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQW5kVXBkYXRlKFxuICBvcmlnaW5hbDogS2VwbGVyVGFibGU8RmllbGQ+LFxuICBvcHRpb25zOiBQYXJ0aWFsPEtlcGxlclRhYmxlPEZpZWxkPj4gPSB7fVxuKTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGFjY1tlbnRyeVswXV0gPSBlbnRyeVsxXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBjb3B5VGFibGUob3JpZ2luYWwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkVmFsdWVBY2Nlc3NvcjxcbiAgRiBleHRlbmRzIHtcbiAgICB0eXBlPzogRmllbGRbJ3R5cGUnXTtcbiAgICBmb3JtYXQ/OiBGaWVsZFsnZm9ybWF0J107XG4gIH1cbj4oZjogRiwgaTogbnVtYmVyLCBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZSkge1xuICByZXR1cm4gbWF5YmVUb0RhdGUuYmluZChcbiAgICBudWxsLFxuICAgIC8vIGlzIHRpbWVcbiAgICBmLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXAsXG4gICAgaSxcbiAgICBmLmZvcm1hdCB8fCAnJyxcbiAgICBkY1xuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBLZXBsZXJUYWJsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFzQkEsSUFBQUcsZUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBb0JBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQUEyRSxTQUFBTSwyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUFRLE1BQUEsSUFBQU4sQ0FBQSxLQUFBRixDQUFBLEdBQUFFLENBQUEsT0FBQU8sRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUEsRUFBQSxXQUFBSCxFQUFBLElBQUFULENBQUEsQ0FBQVEsTUFBQSxLQUFBSyxJQUFBLFdBQUFBLElBQUEsTUFBQUMsS0FBQSxFQUFBZCxDQUFBLENBQUFTLEVBQUEsVUFBQVIsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLFVBQUFBLENBQUEsS0FBQWUsQ0FBQSxFQUFBTCxDQUFBLGdCQUFBTSxTQUFBLGlKQUFBQyxDQUFBLEVBQUFDLENBQUEsT0FBQUMsQ0FBQSxnQkFBQVIsQ0FBQSxXQUFBQSxFQUFBLElBQUFULENBQUEsR0FBQUEsQ0FBQSxDQUFBa0IsSUFBQSxDQUFBcEIsQ0FBQSxNQUFBWSxDQUFBLFdBQUFBLEVBQUEsUUFBQVosQ0FBQSxHQUFBRSxDQUFBLENBQUFtQixJQUFBLFdBQUFILENBQUEsR0FBQWxCLENBQUEsQ0FBQWEsSUFBQSxFQUFBYixDQUFBLEtBQUFDLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxJQUFBbUIsQ0FBQSxPQUFBRixDQUFBLEdBQUFqQixDQUFBLEtBQUFlLENBQUEsV0FBQUEsRUFBQSxVQUFBRyxDQUFBLFlBQUFoQixDQUFBLGNBQUFBLENBQUEsOEJBQUFpQixDQUFBLFFBQUFGLENBQUE7QUFBQSxTQUFBViw0QkFBQVAsQ0FBQSxFQUFBa0IsQ0FBQSxRQUFBbEIsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBc0IsaUJBQUEsQ0FBQXRCLENBQUEsRUFBQWtCLENBQUEsT0FBQWhCLENBQUEsTUFBQXFCLFFBQUEsQ0FBQUgsSUFBQSxDQUFBcEIsQ0FBQSxFQUFBd0IsS0FBQSw2QkFBQXRCLENBQUEsSUFBQUYsQ0FBQSxDQUFBeUIsV0FBQSxLQUFBdkIsQ0FBQSxHQUFBRixDQUFBLENBQUF5QixXQUFBLENBQUFDLElBQUEsYUFBQXhCLENBQUEsY0FBQUEsQ0FBQSxHQUFBRyxLQUFBLENBQUFzQixJQUFBLENBQUEzQixDQUFBLG9CQUFBRSxDQUFBLCtDQUFBMEIsSUFBQSxDQUFBMUIsQ0FBQSxJQUFBb0IsaUJBQUEsQ0FBQXRCLENBQUEsRUFBQWtCLENBQUE7QUFBQSxTQUFBSSxrQkFBQXRCLENBQUEsRUFBQWtCLENBQUEsYUFBQUEsQ0FBQSxJQUFBQSxDQUFBLEdBQUFsQixDQUFBLENBQUFRLE1BQUEsTUFBQVUsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBUSxNQUFBLFlBQUFQLENBQUEsTUFBQVcsQ0FBQSxHQUFBUCxLQUFBLENBQUFhLENBQUEsR0FBQWpCLENBQUEsR0FBQWlCLENBQUEsRUFBQWpCLENBQUEsSUFBQVcsQ0FBQSxDQUFBWCxDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxVQUFBVyxDQUFBO0FBQUEsU0FBQWlCLFFBQUE1QixDQUFBLEVBQUFELENBQUEsUUFBQUUsQ0FBQSxHQUFBNEIsTUFBQSxDQUFBQyxJQUFBLENBQUE5QixDQUFBLE9BQUE2QixNQUFBLENBQUFFLHFCQUFBLFFBQUFmLENBQUEsR0FBQWEsTUFBQSxDQUFBRSxxQkFBQSxDQUFBL0IsQ0FBQSxHQUFBRCxDQUFBLEtBQUFpQixDQUFBLEdBQUFBLENBQUEsQ0FBQWdCLE1BQUEsV0FBQWpDLENBQUEsV0FBQThCLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQWpDLENBQUEsRUFBQUQsQ0FBQSxFQUFBbUMsVUFBQSxPQUFBakMsQ0FBQSxDQUFBa0MsSUFBQSxDQUFBQyxLQUFBLENBQUFuQyxDQUFBLEVBQUFlLENBQUEsWUFBQWYsQ0FBQTtBQUFBLFNBQUFvQyxjQUFBckMsQ0FBQSxhQUFBRCxDQUFBLE1BQUFBLENBQUEsR0FBQXVDLFNBQUEsQ0FBQS9CLE1BQUEsRUFBQVIsQ0FBQSxVQUFBRSxDQUFBLFdBQUFxQyxTQUFBLENBQUF2QyxDQUFBLElBQUF1QyxTQUFBLENBQUF2QyxDQUFBLFFBQUFBLENBQUEsT0FBQTZCLE9BQUEsQ0FBQUMsTUFBQSxDQUFBNUIsQ0FBQSxPQUFBc0MsT0FBQSxXQUFBeEMsQ0FBQSxRQUFBeUMsZ0JBQUEsYUFBQXhDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLENBQUFGLENBQUEsU0FBQThCLE1BQUEsQ0FBQVkseUJBQUEsR0FBQVosTUFBQSxDQUFBYSxnQkFBQSxDQUFBMUMsQ0FBQSxFQUFBNkIsTUFBQSxDQUFBWSx5QkFBQSxDQUFBeEMsQ0FBQSxLQUFBMkIsT0FBQSxDQUFBQyxNQUFBLENBQUE1QixDQUFBLEdBQUFzQyxPQUFBLFdBQUF4QyxDQUFBLElBQUE4QixNQUFBLENBQUFjLGNBQUEsQ0FBQTNDLENBQUEsRUFBQUQsQ0FBQSxFQUFBOEIsTUFBQSxDQUFBSSx3QkFBQSxDQUFBaEMsQ0FBQSxFQUFBRixDQUFBLGlCQUFBQyxDQUFBLElBbEQzRTtBQUNBO0FBbURBOztBQWtEQTtBQUNBLElBQU00QyxPQUFPLEdBQUcsTUFBTTtBQUVmLFNBQVNDLFdBQVdBLENBQ3pCQyxNQUFlLEVBQ2ZDLFFBQWdCLEVBQ2hCQyxNQUFjLEVBQ2RDLEVBQTBCLEVBQzFCQyxDQUFrQixFQUNsQjtFQUNBLElBQUlKLE1BQU0sRUFBRTtJQUNWLE9BQU8sSUFBQUssc0JBQWUsRUFBQ0YsRUFBRSxDQUFDRyxPQUFPLENBQUNGLENBQUMsQ0FBQ0csS0FBSyxFQUFFTixRQUFRLENBQUMsRUFBRUMsTUFBTSxDQUFDO0VBQy9EO0VBRUEsT0FBT0MsRUFBRSxDQUFDRyxPQUFPLENBQUNGLENBQUMsQ0FBQ0csS0FBSyxFQUFFTixRQUFRLENBQUM7QUFDdEM7QUFBQyxJQUVLTyxXQUFXO0VBc0NmLFNBQUFBLFlBQUFDLElBQUEsRUFZRztJQUFBLElBWERDLElBQUksR0FBQUQsSUFBQSxDQUFKQyxJQUFJO01BQ0pDLEtBQUssR0FBQUYsSUFBQSxDQUFMRSxLQUFLO01BQ0xDLFFBQVEsR0FBQUgsSUFBQSxDQUFSRyxRQUFRO01BQUFDLHFCQUFBLEdBQUFKLElBQUEsQ0FDUkssb0JBQW9CO01BQXBCQSxvQkFBb0IsR0FBQUQscUJBQUEsY0FBRyxJQUFJLEdBQUFBLHFCQUFBO01BQUFFLHFCQUFBLEdBQUFOLElBQUEsQ0FDM0JPLG9CQUFvQjtNQUFwQkEsb0JBQW9CLEdBQUFELHFCQUFBLGNBQUcsS0FBSyxHQUFBQSxxQkFBQTtJQUFBLElBQUFFLGdCQUFBLG1CQUFBVCxXQUFBO0lBQUEsSUFBQWQsZ0JBQUE7SUFBQSxJQUFBQSxnQkFBQTtJQUFBLElBQUFBLGdCQUFBO0lBQUEsSUFBQUEsZ0JBQUE7SUFwQzlCO0lBQUEsSUFBQUEsZ0JBQUEsNkJBQ2MsRUFBRTtJQUFBLElBQUFBLGdCQUFBO0lBQUEsSUFBQUEsZ0JBQUEsaUNBSU8sRUFBRTtJQUFBLElBQUFBLGdCQUFBLG9DQUNDLEVBQUU7SUFBQSxJQUFBQSxnQkFBQTtJQUFBLElBQUFBLGdCQUFBLDZDQUVPLEVBQUU7SUFBQSxJQUFBQSxnQkFBQSxpQ0FDWCxFQUFFO0lBQUEsSUFBQUEsZ0JBQUE7SUFBQSxJQUFBQSxnQkFBQTtJQUFBLElBQUFBLGdCQUFBO0lBQUEsSUFBQUEsZ0JBQUE7SUFNNUI7SUFBQSxJQUFBQSxnQkFBQTtJQUFBLElBQUFBLGdCQUFBO0lBQUEsSUFBQUEsZ0JBQUE7SUFBQSxJQUFBQSxnQkFBQTtJQUFBLElBQUFBLGdCQUFBO0lBV0E7SUFBQSxJQUFBQSxnQkFBQTtJQUFBLElBQUFBLGdCQUFBO0lBa0JFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7O0lBRUEsSUFBTXdCLFdBQVcsR0FBQTNCLGFBQUE7TUFDZjRCLEVBQUUsRUFBRSxJQUFBQywyQkFBYyxFQUFDLENBQUMsQ0FBQztNQUNyQkMsS0FBSyxFQUFFLGFBQWE7TUFDcEJDLElBQUksRUFBRTtJQUFFLEdBQ0xaLElBQUksQ0FDUjtJQUVELElBQU1hLGVBQWUsR0FBRztNQUN0QkosRUFBRSxFQUFFRCxXQUFXLENBQUNDLEVBQUU7TUFDbEI7TUFDQWpCLE1BQU0sRUFBRWdCLFdBQVcsQ0FBQ2hCLE1BQU0sSUFBSSxFQUFFO01BQ2hDbUIsS0FBSyxFQUFFSCxXQUFXLENBQUNHLEtBQUssSUFBSTtJQUM5QixDQUFDO0lBRUQsSUFBSSxDQUFDRixFQUFFLEdBQUdELFdBQVcsQ0FBQ0MsRUFBRTtJQUN4QixJQUFJLENBQUNHLElBQUksR0FBR0osV0FBVyxDQUFDSSxJQUFJO0lBQzVCLElBQUksQ0FBQ0QsS0FBSyxHQUFHSCxXQUFXLENBQUNHLEtBQUs7SUFDOUIsSUFBSSxDQUFDVixLQUFLLEdBQUdBLEtBQUs7SUFDbEIsSUFBSSxDQUFDQyxRQUFRLEdBQUFyQixhQUFBLENBQUFBLGFBQUEsS0FDUmdDLGVBQWUsR0FDZlgsUUFBUSxDQUNaO0lBRUQsSUFBSSxDQUFDRSxvQkFBb0IsR0FBR0Esb0JBQW9CO0lBQ2hELElBQUksQ0FBQ0Usb0JBQW9CLEdBQUdBLG9CQUFvQjtJQUVoRCxJQUFJLENBQUNRLGFBQWEsR0FBRyxJQUFBQywwQkFBbUIsRUFBQyxFQUFFLENBQUM7SUFDNUMsSUFBSSxDQUFDQyxTQUFTLEdBQUcsSUFBQUMsaUNBQWlCLEVBQUMsRUFBRSxFQUFFLElBQUksQ0FBQ1IsRUFBRSxFQUFFLEVBQUUsRUFBRVMsU0FBUyxDQUFDO0VBQ2hFO0VBQUMsV0FBQUMsYUFBQSxhQUFBckIsV0FBQTtJQUFBc0IsR0FBQTtJQUFBL0QsS0FBQTtNQUFBLElBQUFnRSxXQUFBLE9BQUFDLGtCQUFBLDJCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FFRCxTQUFBQyxRQUFBQyxLQUFBO1FBQUEsSUFBQUMsSUFBQSxFQUFBQyxpQkFBQSxFQUFBQyxlQUFBLEVBQUFmLGFBQUEsRUFBQWdCLE1BQUEsRUFBQUMsVUFBQTtRQUFBLE9BQUFSLFlBQUEsWUFBQVMsSUFBQSxVQUFBQyxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUF0RSxJQUFBO1lBQUE7Y0FBa0IrRCxJQUFJLEdBQUFELEtBQUEsQ0FBSkMsSUFBSTtjQUNkQyxpQkFBaUIsR0FBR0QsSUFBSSxDQUFDUyxJQUFJLEdBQUdULElBQUksQ0FBQ1MsSUFBSSxHQUFHVCxJQUFJLENBQUNVLElBQUk7Y0FDckRSLGVBQWUsR0FBR0YsSUFBSSxDQUFDUyxJQUFJLEdBQUdFLGVBQVEsQ0FBQ0MsVUFBVSxHQUFHRCxlQUFRLENBQUNFLFVBQVU7Y0FFdkUxQixhQUFhLEdBQUcsSUFBQUMsMEJBQW1CLEVBQUNhLGlCQUFpQixFQUFFO2dCQUMzREUsTUFBTSxFQUFFSCxJQUFJLENBQUNHLE1BQU07Z0JBQ25CRCxlQUFlLEVBQWZBO2NBQ0YsQ0FBQyxDQUFDO2NBRUlDLE1BQWUsR0FBR0gsSUFBSSxDQUFDRyxNQUFNLENBQUNXLEdBQUcsQ0FBQyxVQUFDbkYsQ0FBQyxFQUFFb0YsQ0FBQztnQkFBQSxPQUFBN0QsYUFBQSxDQUFBQSxhQUFBLEtBQ3hDdkIsQ0FBQztrQkFDSmlDLFFBQVEsRUFBRW1ELENBQUM7a0JBQ1hqQyxFQUFFLEVBQUVuRCxDQUFDLENBQUNXLElBQUk7a0JBQ1YwRSxXQUFXLEVBQUVyRixDQUFDLENBQUNxRixXQUFXLElBQUlyRixDQUFDLENBQUNXLElBQUk7a0JBQ3BDMkUsWUFBWSxFQUFFdEYsQ0FBQyxDQUFDc0YsWUFBWSxJQUFJQywwQkFBZSxDQUFDQyxNQUFNO2tCQUN0RHRELE1BQU0sRUFBRWxDLENBQUMsQ0FBQ2tDLE1BQU0sSUFBSSxFQUFFO2tCQUN0QnVELGFBQWEsRUFBRUMscUJBQXFCLENBQUMxRixDQUFDLEVBQUVvRixDQUFDLEVBQUU1QixhQUFhO2dCQUFDO2NBQUEsQ0FDekQsQ0FBQztjQUVHaUIsVUFBVSxHQUFHakIsYUFBYSxDQUFDbUMsYUFBYSxDQUFDLENBQUM7Y0FDaEQsSUFBSSxDQUFDbkMsYUFBYSxHQUFHQSxhQUFhO2NBQ2xDLElBQUksQ0FBQ2lCLFVBQVUsR0FBR0EsVUFBVTtjQUM1QixJQUFJLENBQUNtQixhQUFhLEdBQUduQixVQUFVO2NBQy9CLElBQUksQ0FBQ29CLHNCQUFzQixHQUFHcEIsVUFBVTtjQUN4QyxJQUFJLENBQUNxQixVQUFVLEdBQUdDLG1CQUFtQixDQUFDdkIsTUFBTSxDQUFDO2NBQzdDO2NBQ0EsSUFBSSxDQUFDQSxNQUFNLEdBQUdBLE1BQU07Y0FDcEIsSUFBSSxDQUFDZCxTQUFTLEdBQUcsSUFBQUMsaUNBQWlCLEVBQUMsRUFBRSxFQUFFLElBQUksQ0FBQ1IsRUFBRSxFQUFFcUIsTUFBTSxFQUFFWixTQUFTLENBQUM7WUFBQztZQUFBO2NBQUEsT0FBQWdCLFFBQUEsQ0FBQW9CLElBQUE7VUFBQTtRQUFBLEdBQUE3QixPQUFBO01BQUEsQ0FDcEU7TUFBQSxTQTVCSzhCLFVBQVVBLENBQUFDLEVBQUE7UUFBQSxPQUFBbkMsV0FBQSxDQUFBekMsS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFWeUUsVUFBVTtJQUFBO0lBOEJoQjtBQUNGO0FBQ0E7QUFDQTtFQUhFO0lBQUFuQyxHQUFBO0lBQUEvRCxLQUFBO01BQUEsSUFBQW9HLE9BQUEsT0FBQW5DLGtCQUFBLDJCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FJQSxTQUFBa0MsU0FBYS9CLElBQTBCO1FBQUEsSUFBQWdDLHFCQUFBLEVBQUFDLG1CQUFBO1FBQUEsSUFBQWhDLGlCQUFBO1FBQUEsT0FBQUwsWUFBQSxZQUFBUyxJQUFBLFVBQUE2QixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQTNCLElBQUEsR0FBQTJCLFNBQUEsQ0FBQWxHLElBQUE7WUFBQTtjQUMvQmdFLGlCQUFpQixHQUFHRCxJQUFJLENBQUNTLElBQUksR0FBR1QsSUFBSSxDQUFDUyxJQUFJLEdBQUdULElBQUksQ0FBQ1UsSUFBSTtjQUMzRCxDQUFBc0IscUJBQUEsSUFBQUMsbUJBQUEsT0FBSSxDQUFDOUMsYUFBYSxFQUFDaUQsTUFBTSxjQUFBSixxQkFBQSxlQUF6QkEscUJBQUEsQ0FBQWhHLElBQUEsQ0FBQWlHLG1CQUFBLEVBQTRCaEMsaUJBQWlCLENBQUM7Y0FDOUMsSUFBSSxDQUFDRyxVQUFVLEdBQUcsSUFBSSxDQUFDakIsYUFBYSxDQUFDbUMsYUFBYSxDQUFDLENBQUM7Y0FDcEQsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSSxDQUFDbkIsVUFBVTtjQUNwQyxJQUFJLENBQUNvQixzQkFBc0IsR0FBRyxJQUFJLENBQUNwQixVQUFVO2NBQUMsT0FBQStCLFNBQUEsQ0FBQUUsTUFBQSxXQUV2QyxJQUFJO1lBQUE7WUFBQTtjQUFBLE9BQUFGLFNBQUEsQ0FBQVIsSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ1o7TUFBQSxTQVJLSyxNQUFNQSxDQUFBRSxHQUFBO1FBQUEsT0FBQVIsT0FBQSxDQUFBN0UsS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFOaUYsTUFBTTtJQUFBO0VBQUE7SUFBQTNDLEdBQUE7SUFBQThDLEdBQUEsRUFVWixTQUFBQSxJQUFBLEVBQWE7TUFDWCxPQUFPLElBQUksQ0FBQ3BELGFBQWEsQ0FBQ3FELE9BQU8sQ0FBQyxDQUFDO0lBQ3JDOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0VBSEU7SUFBQS9DLEdBQUE7SUFBQS9ELEtBQUEsRUFJQSxTQUFBK0csY0FBY0EsQ0FBQ0MsVUFBa0IsRUFBaUI7TUFDaEQsSUFBTUMsS0FBSyxHQUFHLElBQUksQ0FBQ3hDLE1BQU0sQ0FBQ3lDLElBQUksQ0FBQyxVQUFBQyxFQUFFO1FBQUEsT0FBSUEsRUFBRSxDQUFDcEYsT0FBTyxDQUFDLEtBQUtpRixVQUFVO01BQUEsRUFBQztNQUNoRSxJQUFJLENBQUNJLFdBQVcsQ0FBQ0osVUFBVSxFQUFFQyxLQUFLLENBQUM7TUFDbkMsT0FBT0EsS0FBSztJQUNkOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0VBSEU7SUFBQWxELEdBQUE7SUFBQS9ELEtBQUEsRUFJQSxTQUFBcUgsaUJBQWlCQSxDQUFDTCxVQUFrQixFQUFVO01BQzVDLElBQU05RSxRQUFRLEdBQUcsSUFBSSxDQUFDdUMsTUFBTSxDQUFDNkMsU0FBUyxDQUFDLFVBQUFILEVBQUU7UUFBQSxPQUFJQSxFQUFFLENBQUNwRixPQUFPLENBQUMsS0FBS2lGLFVBQVU7TUFBQSxFQUFDO01BQ3hFLElBQUksQ0FBQ0ksV0FBVyxDQUFDSixVQUFVLEVBQUVPLE9BQU8sQ0FBQ3JGLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3BELE9BQU9BLFFBQVE7SUFDakI7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7RUFIRTtJQUFBNkIsR0FBQTtJQUFBL0QsS0FBQSxFQUlBLFNBQUF3SCxzQkFBc0JBLENBQUNSLFVBQVUsRUFBRTtNQUNqQyxJQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDeEMsTUFBTSxDQUFDeUMsSUFBSSxDQUFDLFVBQUFDLEVBQUU7UUFBQSxPQUFJQSxFQUFFLENBQUNwRixPQUFPLENBQUMsS0FBS2lGLFVBQVU7TUFBQSxFQUFDO01BQ2hFLElBQUksQ0FBQ0ksV0FBVyxDQUFDSixVQUFVLEVBQUVDLEtBQUssQ0FBQztNQUNuQyxPQUFPQSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRVEsYUFBYTtJQUM3Qjs7SUFFQTtBQUNGO0FBQ0E7RUFGRTtJQUFBMUQsR0FBQTtJQUFBL0QsS0FBQSxFQUdBLFNBQUEwSCxRQUFRQSxDQUFDVixVQUFrQixFQUFFVyxNQUFjLEVBQU87TUFDaEQsSUFBTVYsS0FBSyxHQUFHLElBQUksQ0FBQ0YsY0FBYyxDQUFDQyxVQUFVLENBQUM7TUFDN0MsT0FBT0MsS0FBSyxHQUFHQSxLQUFLLENBQUN2QixhQUFhLENBQUM7UUFBQ2xELEtBQUssRUFBRW1GO01BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSTtJQUM1RDs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBSkU7SUFBQTVELEdBQUE7SUFBQS9ELEtBQUEsRUFLQSxTQUFBNEgsaUJBQWlCQSxDQUFDMUYsUUFBZ0IsRUFBRTJGLFFBQVcsRUFBUTtNQUNyRCxJQUFJLENBQUNwRCxNQUFNLEdBQUd6RCxNQUFNLENBQUM4RyxNQUFNLEtBQUFDLG1CQUFBLGFBQUssSUFBSSxDQUFDdEQsTUFBTSxPQUFBOUMsZ0JBQUEsaUJBQUtPLFFBQVEsRUFBRzJGLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZFOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0VBSEU7SUFBQTlELEdBQUE7SUFBQS9ELEtBQUEsRUFJQSxTQUFBZ0ksZ0JBQWdCQSxDQUFDQyxRQUFrQixFQUFRO01BQ3pDLElBQUksQ0FBQ3JGLEtBQUssR0FBR3FGLFFBQVE7SUFDdkI7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7RUFIRTtJQUFBbEUsR0FBQTtJQUFBL0QsS0FBQSxFQUlBLFNBQUFrSSxvQkFBb0JBLENBQUNsQixVQUFrQixFQUF1QztNQUM1RSxJQUFNOUUsUUFBUSxHQUFHLElBQUksQ0FBQ21GLGlCQUFpQixDQUFDTCxVQUFVLENBQUM7TUFDbkQsSUFBSTlFLFFBQVEsR0FBRyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxJQUFJO01BQ2I7TUFDQSxJQUFNK0UsS0FBSyxHQUFHLElBQUksQ0FBQ3hDLE1BQU0sQ0FBQ3ZDLFFBQVEsQ0FBQztNQUNuQyxJQUFJbEIsTUFBTSxDQUFDbUgsU0FBUyxDQUFDQyxjQUFjLENBQUM5SCxJQUFJLENBQUMyRyxLQUFLLEVBQUUsYUFBYSxDQUFDLEVBQUU7UUFDOUQsT0FBT0EsS0FBSyxDQUFDb0IsV0FBVztNQUMxQjtNQUVBLElBQU1DLFdBQVcsR0FBRyxJQUFJLENBQUNDLHFCQUFxQixDQUFDdEIsS0FBSyxDQUFDO01BQ3JELElBQUksQ0FBQ3FCLFdBQVcsRUFBRTtRQUNoQixPQUFPLElBQUk7TUFDYjtNQUVBLElBQU1ELFdBQVcsR0FBRyxJQUFBRyxxQkFBYyxFQUFDdkIsS0FBSyxFQUFFcUIsV0FBVyxDQUFDO01BQ3RELElBQU1ULFFBQVEsR0FBQXJHLGFBQUEsQ0FBQUEsYUFBQSxLQUNUeUYsS0FBSztRQUNSb0IsV0FBVyxFQUFYQTtNQUFXLEVBQ1o7TUFFRCxJQUFJLENBQUNULGlCQUFpQixDQUFDMUYsUUFBUSxFQUFFMkYsUUFBUSxDQUFDO01BRTFDLE9BQU9RLFdBQVc7SUFDcEI7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEU7SUFBQXRFLEdBQUE7SUFBQS9ELEtBQUEsRUFNQSxTQUFBeUksV0FBV0EsQ0FBQ0MsT0FBaUIsRUFBRUMsTUFBZSxFQUFFQyxHQUFzQixFQUFzQjtNQUFBLElBQUFDLEtBQUE7TUFDMUYsSUFBT3BGLGFBQWEsR0FBdUQsSUFBSSxDQUF4RUEsYUFBYTtRQUFNcUYsTUFBTSxHQUEyQyxJQUFJLENBQXpEMUYsRUFBRTtRQUF3QjJGLGVBQWUsR0FBWSxJQUFJLENBQTdDQyxZQUFZO1FBQW1CdkUsTUFBTSxHQUFJLElBQUksQ0FBZEEsTUFBTTs7TUFFdkU7TUFDQSxJQUFNdUUsWUFBWSxHQUFHLElBQUFDLHNCQUFlLEVBQUNILE1BQU0sRUFBRUosT0FBTyxFQUFFRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7TUFFaEUsSUFBSSxDQUFDSSxZQUFZLEdBQUdBLFlBQVk7TUFDaEMsSUFBSSxDQUFDckYsU0FBUyxHQUFHLElBQUFDLGlDQUFpQixFQUFDOEUsT0FBTyxFQUFFSSxNQUFNLEVBQUVyRSxNQUFNLEVBQUUsSUFBSSxDQUFDZCxTQUFTLENBQUM7TUFFM0UsSUFBSSxDQUFDdUYsY0FBYyxHQUFHLElBQUFDLGtCQUFXLEVBQUNILFlBQVksRUFBRUQsZUFBZSxDQUFDO01BRWhFLElBQUksQ0FBQ0wsT0FBTyxDQUFDaEosTUFBTSxFQUFFO1FBQ25CLElBQUksQ0FBQ21HLGFBQWEsR0FBRyxJQUFJLENBQUNuQixVQUFVO1FBQ3BDLElBQUksQ0FBQ29CLHNCQUFzQixHQUFHLElBQUksQ0FBQ3BCLFVBQVU7UUFDN0MsT0FBTyxJQUFJO01BQ2I7O01BRUE7TUFDQTtNQUNBO01BQ0EsSUFBTTBFLGVBQWUsR0FBRzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMyQixjQUFjLENBQUNHLGFBQWEsQ0FBQztNQUNsRSxJQUFNQyxjQUFjLEdBQUcvQixPQUFPLENBQUMsSUFBSSxDQUFDMkIsY0FBYyxDQUFDSyxHQUFHLENBQUM7TUFFdkQsSUFBSUMsWUFBMEIsR0FBRyxDQUFDLENBQUM7TUFDbkMsSUFBSUosZUFBZSxJQUFJRSxjQUFjLEVBQUU7UUFDckMsSUFBTUcsb0JBQW9CLEdBQUdMLGVBQWUsR0FBR0osWUFBWSxDQUFDSyxhQUFhLEdBQUcsSUFBSTtRQUNoRixJQUFNSyxVQUFVLEdBQUdKLGNBQWMsR0FBR04sWUFBWSxDQUFDTyxHQUFHLEdBQUcsSUFBSTtRQUUzRCxJQUFNSSxXQUFXLEdBQUdqQixPQUFPLENBQUNrQixNQUFNLENBQUMsVUFBQ0MsR0FBRyxFQUFFMUksTUFBTSxFQUFLO1VBQ2xELElBQU0ySSxVQUFVLEdBQUcsSUFBQUMsNkNBQTZCLEVBQUNsQixLQUFJLENBQUN6RixFQUFFLEVBQUVqQyxNQUFNLENBQUM7VUFDakUsSUFBTThGLEtBQUssR0FBRzZDLFVBQVUsS0FBSyxDQUFDLENBQUMsR0FBR3JGLE1BQU0sQ0FBQ3FGLFVBQVUsQ0FBQyxHQUFHLElBQUk7VUFFM0QsT0FBQXRJLGFBQUEsQ0FBQUEsYUFBQSxLQUNLcUksR0FBRyxXQUFBbEksZ0JBQUEsaUJBQ0xSLE1BQU0sQ0FBQ2lDLEVBQUUsRUFBRyxJQUFBNEcsd0JBQWlCLEVBQUMvQyxLQUFLLEVBQUU0QixLQUFJLENBQUN6RixFQUFFLEVBQUVqQyxNQUFNLEVBQUV3SCxNQUFNLEVBQUVsRixhQUFhLENBQUM7UUFFakYsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRU4rRixZQUFZLEdBQUcsSUFBQVMsOEJBQXVCLEVBQ3BDO1VBQUNSLG9CQUFvQixFQUFwQkEsb0JBQW9CO1VBQUVDLFVBQVUsRUFBVkEsVUFBVTtVQUFFQyxXQUFXLEVBQVhBO1FBQVcsQ0FBQyxFQUMvQ2xHLGFBQ0YsQ0FBQztNQUNIO01BRUEsSUFBSSxDQUFDb0MsYUFBYSxHQUFHMkQsWUFBWSxDQUFDM0QsYUFBYSxJQUFJLElBQUksQ0FBQ0EsYUFBYTtNQUNyRSxJQUFJLENBQUNDLHNCQUFzQixHQUN6QjBELFlBQVksQ0FBQzFELHNCQUFzQixJQUFJLElBQUksQ0FBQ0Esc0JBQXNCO01BRXBFLE9BQU8sSUFBSTtJQUNiOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFKRTtJQUFBL0IsR0FBQTtJQUFBL0QsS0FBQSxFQUtBLFNBQUFrSyxjQUFjQSxDQUFDeEIsT0FBaUIsRUFBRUMsTUFBZSxFQUFzQjtNQUNyRSxJQUFNQyxHQUFHLEdBQUc7UUFDVnVCLE9BQU8sRUFBRSxJQUFJO1FBQ2JDLFlBQVksRUFBRTtNQUNoQixDQUFDOztNQUVEO01BQ0EsSUFBSSxDQUFDMUIsT0FBTyxDQUFDaEosTUFBTSxFQUFFO1FBQ25CLElBQUksQ0FBQzJLLGNBQWMsR0FBRyxJQUFJLENBQUMzRixVQUFVO1FBQ3JDLElBQUksQ0FBQzRGLGVBQWUsR0FBRyxJQUFBckIsc0JBQWUsRUFBQyxJQUFJLENBQUM3RixFQUFFLEVBQUVzRixPQUFPLEVBQUVFLEdBQUcsQ0FBQztRQUM3RCxPQUFPLElBQUk7TUFDYjs7TUFFQTtNQUNBLElBQUksQ0FBQ0YsT0FBTyxDQUFDeEIsSUFBSSxDQUFDLFVBQUFqSCxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDc0ssR0FBRztNQUFBLEVBQUMsRUFBRTtRQUM3QixJQUFJLENBQUNGLGNBQWMsR0FBRyxJQUFJLENBQUN4RSxhQUFhO1FBQ3hDLElBQUksQ0FBQ3lFLGVBQWUsR0FBRyxJQUFBckIsc0JBQWUsRUFBQyxJQUFJLENBQUM3RixFQUFFLEVBQUVzRixPQUFPLEVBQUVFLEdBQUcsQ0FBQztRQUM3RCxPQUFPLElBQUk7TUFDYjs7TUFFQTtNQUNBLElBQU00QixNQUFNLEdBQUdDLFNBQVMsQ0FBQyxJQUFJLENBQUM7TUFFOUJELE1BQU0sQ0FBQ3hCLFlBQVksR0FBRyxJQUFJLENBQUNzQixlQUFlO01BQzFDRSxNQUFNLENBQUMzRSxhQUFhLEdBQUcsSUFBSSxDQUFDd0UsY0FBYyxJQUFJLEVBQUU7TUFFaEQsSUFBTUssUUFBUSxHQUFHRixNQUFNLENBQUMvQixXQUFXLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxHQUFHLENBQUM7TUFFekQsSUFBSSxDQUFDeUIsY0FBYyxHQUFHSyxRQUFRLENBQUM3RSxhQUFhO01BQzVDLElBQUksQ0FBQ3lFLGVBQWUsR0FBR0ksUUFBUSxDQUFDMUIsWUFBWTtNQUU1QyxPQUFPLElBQUk7SUFDYjs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUhFO0lBQUFqRixHQUFBO0lBQUEvRCxLQUFBLEVBSUEsU0FBQXVJLHFCQUFxQkEsQ0FBQ3RCLEtBQVEsRUFBZTtNQUMzQyxJQUFPeEQsYUFBYSxHQUFJLElBQUksQ0FBckJBLGFBQWE7TUFDcEIsSUFBT2lDLGFBQWEsR0FBSXVCLEtBQUssQ0FBdEJ2QixhQUFhO01BRXBCLElBQUlpRixNQUFNO01BRVYsUUFBUTFELEtBQUssQ0FBQzFELElBQUk7UUFDaEIsS0FBS2lDLDBCQUFlLENBQUNvRixJQUFJO1FBQ3pCLEtBQUtwRiwwQkFBZSxDQUFDcUYsT0FBTztVQUMxQjtVQUNBLE9BQU8sSUFBQUMsNEJBQXFCLEVBQUNySCxhQUFhLEVBQUVpQyxhQUFhLENBQUM7UUFFNUQsS0FBS0YsMEJBQWUsV0FBUTtVQUMxQixPQUFPO1lBQUNtRixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSztVQUFDLENBQUM7UUFFaEMsS0FBS25GLDBCQUFlLENBQUNDLE1BQU07UUFDM0IsS0FBS0QsMEJBQWUsQ0FBQ3VGLEVBQUU7UUFDdkIsS0FBS3ZGLDBCQUFlLENBQUN3RixJQUFJO1VBQ3ZCTCxNQUFNLEdBQUcsSUFBQU0sdUJBQWdCLEVBQUN4SCxhQUFhLEVBQUVpQyxhQUFhLENBQUM7VUFDdkQsT0FBTztZQUFDaUYsTUFBTSxFQUFOQTtVQUFNLENBQUM7UUFFakIsS0FBS25GLDBCQUFlLENBQUMwRixTQUFTO1VBQzVCLE9BQU8sSUFBQUMsOEJBQXVCLEVBQUMxSCxhQUFhLEVBQUVpQyxhQUFhLENBQUM7UUFFOUQ7VUFDRSxPQUFPO1lBQUNpRixNQUFNLEVBQUUsSUFBQU0sdUJBQWdCLEVBQUN4SCxhQUFhLEVBQUVpQyxhQUFhO1VBQUMsQ0FBQztNQUNuRTtJQUNGOztJQUVBO0FBQ0Y7QUFDQTtFQUZFO0lBQUEzQixHQUFBO0lBQUEvRCxLQUFBLEVBR0EsU0FBQW9MLG9CQUFvQkEsQ0FBQ25FLEtBQVEsRUFBRW9FLFNBQWlCLEVBQWlEO01BQy9GLElBQU81SCxhQUFhLEdBQTRCLElBQUksQ0FBN0NBLGFBQWE7UUFBRXFDLHNCQUFzQixHQUFJLElBQUksQ0FBOUJBLHNCQUFzQjtNQUU1QyxJQUFJLENBQUN3RixzQkFBVyxDQUFDRCxTQUFTLENBQUMsRUFBRTtRQUMzQkUsbUJBQU8sQ0FBQ0MsS0FBSyxlQUFBQyxNQUFBLENBQWVKLFNBQVMsbUJBQWdCLENBQUM7UUFDdEQsT0FBTyxJQUFJO01BQ2I7TUFFQSxJQUFPM0YsYUFBYSxHQUFJdUIsS0FBSyxDQUF0QnZCLGFBQWE7TUFDcEIsSUFBTWdHLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUdyRyxDQUFDO1FBQUEsT0FBSUssYUFBYSxDQUFDO1VBQUNsRCxLQUFLLEVBQUU2QztRQUFDLENBQUMsQ0FBQztNQUFBO01BQ3pELElBQU1zRyxZQUFZLEdBQUcsSUFBQUMseUJBQWtCLEVBQUMzRSxLQUFLLENBQUMxRCxJQUFJLENBQUM7TUFFbkQsUUFBUThILFNBQVM7UUFDZixLQUFLQyxzQkFBVyxDQUFDTyxPQUFPO1FBQ3hCLEtBQUtQLHNCQUFXLENBQUNRLGFBQWE7UUFDOUIsS0FBS1Isc0JBQVcsQ0FBQ1MsS0FBSztVQUNwQjtVQUNBO1VBQ0EsT0FBTyxJQUFBZCx1QkFBZ0IsRUFBQ3hILGFBQWEsRUFBRWlDLGFBQWEsQ0FBQztRQUV2RCxLQUFLNEYsc0JBQVcsQ0FBQ1UsUUFBUTtVQUN2QixPQUFPLElBQUFDLHdCQUFpQixFQUFDbkcsc0JBQXNCLEVBQUU0RixrQkFBa0IsRUFBRUMsWUFBWSxDQUFDO1FBRXBGLEtBQUtMLHNCQUFXLENBQUNZLEdBQUc7VUFDbEIsT0FBTyxJQUFBQyxtQkFBWSxFQUFDckcsc0JBQXNCLEVBQUU0RixrQkFBa0IsQ0FBQztRQUVqRSxLQUFLSixzQkFBVyxDQUFDYyxRQUFRO1FBQ3pCLEtBQUtkLHNCQUFXLENBQUNlLE1BQU07UUFDdkIsS0FBS2Ysc0JBQVcsQ0FBQ2dCLElBQUk7UUFDckIsS0FBS2hCLHNCQUFXLENBQUNpQixNQUFNO1FBQ3ZCO1VBQ0UsT0FBTyxJQUFBQyxzQkFBZSxFQUFDMUcsc0JBQXNCLEVBQUU0RixrQkFBa0IsQ0FBQztNQUN0RTtJQUNGOztJQUVBO0FBQ0Y7QUFDQTtJQUNFOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0lBQ0U7O0lBRUE7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUpFO0lBQUEzSCxHQUFBO0lBQUEvRCxLQUFBLEVBS0EsU0FBQW9ILFdBQVdBLENBQUNxRixTQUFpQixFQUFFQyxTQUFjLEVBQVE7TUFDbkQsSUFBSSxDQUFDQSxTQUFTLEVBQUU7UUFDZG5CLG1CQUFPLENBQUNDLEtBQUssSUFBQUMsTUFBQSxDQUFJZ0IsU0FBUywrQkFBQWhCLE1BQUEsQ0FBNEIsSUFBSSxDQUFDckksRUFBRSxDQUFFLENBQUM7TUFDbEU7SUFDRjtFQUFDO0FBQUE7QUFPSDtBQUNBO0FBQ0EsSUFBTXVKLG1CQUFtQixvQkFBb0I7QUFFN0MsU0FBU0MsbUJBQW1CQSxDQUFDQyxFQUFFLEVBQUVDLFVBQVUsRUFBRUMsUUFBUSxFQUFFTixTQUFTLEVBQUU7RUFDaEUsSUFBTU8sVUFBVSxHQUFHRCxRQUFRLENBQUN6RixTQUFTLENBQ25DLFVBQUFqRixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxLQUFLb0ssU0FBUyxDQUFDUSxPQUFPLENBQUNKLEVBQUUsRUFBRSxVQUFBSyxLQUFLO01BQUEsT0FBSUEsS0FBSyxDQUFDRCxPQUFPLENBQUNILFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRUEsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsRUFBQztFQUFBLENBQ3hGLENBQUM7RUFDRCxJQUFJSyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsSUFBSUgsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ25CO0lBQ0FJLDBCQUFlLENBQUNDLElBQUksQ0FBQyxVQUFBQyxHQUFHLEVBQUk7TUFDMUJILE1BQU0sR0FBR0osUUFBUSxDQUFDekYsU0FBUyxDQUN6QixVQUFBakYsQ0FBQztRQUFBLE9BQUlBLENBQUMsS0FBS29LLFNBQVMsQ0FBQ1EsT0FBTyxDQUFDSixFQUFFLEVBQUUsVUFBQUssS0FBSztVQUFBLE9BQUlBLEtBQUssQ0FBQ0QsT0FBTyxDQUFDSCxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUVRLEdBQUcsQ0FBQztRQUFBLEVBQUM7TUFBQSxDQUM5RSxDQUFDO01BQ0QsT0FBT0gsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUM7RUFDSjtFQUNBLE9BQU87SUFBQ0gsVUFBVSxFQUFWQSxVQUFVO0lBQUVHLE1BQU0sRUFBTkE7RUFBTSxDQUFDO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU25ILG1CQUFtQkEsQ0FBQ3ZCLE1BQWUsRUFBZTtFQUNoRSxJQUFNc0ksUUFBUSxHQUFHdEksTUFBTSxDQUFDVyxHQUFHLENBQUMsVUFBQW5GLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNXLElBQUksQ0FBQzJNLFdBQVcsQ0FBQyxDQUFDO0VBQUEsRUFBQzs7RUFFdEQ7RUFDQSxJQUFNMUQsR0FBZ0IsR0FBRyxFQUFFO0VBQzNCLE9BQU9rRCxRQUFRLENBQUNuRCxNQUFNLENBQUMsVUFBQzRELEtBQUssRUFBRWYsU0FBUyxFQUFFZ0IsR0FBRyxFQUFLO0lBQ2hEO0lBQUEsSUFBQUMsU0FBQSxHQUFBek8sMEJBQUEsQ0FDeUIwTyw0QkFBaUI7TUFBQUMsS0FBQTtJQUFBO01BQTFDLEtBQUFGLFNBQUEsQ0FBQTdOLENBQUEsTUFBQStOLEtBQUEsR0FBQUYsU0FBQSxDQUFBNU4sQ0FBQSxJQUFBQyxJQUFBLEdBQTRDO1FBQUEsSUFBakMrTSxVQUFVLEdBQUFjLEtBQUEsQ0FBQTVOLEtBQUE7UUFDbkI7UUFDQTtRQUNBLElBQU02TSxFQUFFLEdBQUcsSUFBSWdCLE1BQU0sT0FBQXBDLE1BQUEsQ0FBT2tCLG1CQUFtQixPQUFBbEIsTUFBQSxDQUFJcUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFBckIsTUFBQSxDQUFJa0IsbUJBQW1CLFFBQUssQ0FBQztRQUU3RixJQUFJRSxFQUFFLENBQUMvTCxJQUFJLENBQUMyTCxTQUFTLENBQUMsRUFBRTtVQUN0QixJQUFBcUIsb0JBQUEsR0FBNkJsQixtQkFBbUIsQ0FBQ0MsRUFBRSxFQUFFQyxVQUFVLEVBQUVDLFFBQVEsRUFBRU4sU0FBUyxDQUFDO1lBQTlFTyxVQUFVLEdBQUFjLG9CQUFBLENBQVZkLFVBQVU7WUFBRUcsTUFBTSxHQUFBVyxvQkFBQSxDQUFOWCxNQUFNO1VBRXpCLElBQUlILFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNuQixJQUFNZSxRQUFRLEdBQUd0QixTQUFTLENBQUNRLE9BQU8sQ0FBQ0osRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDbUIsSUFBSSxDQUFDLENBQUM7WUFFakRSLEtBQUssQ0FBQ2xNLElBQUksQ0FBQztjQUNUMk0sV0FBVyxFQUFFRixRQUFRLElBQUksT0FBTztjQUNoQ0csSUFBSSxFQUFBMU0sYUFBQTtnQkFDRjJNLEdBQUcsRUFBRTtrQkFDSGpNLFFBQVEsRUFBRXVMLEdBQUc7a0JBQ2J6TixLQUFLLEVBQUV5RSxNQUFNLENBQUNnSixHQUFHLENBQUMsQ0FBQzdNO2dCQUNyQixDQUFDO2dCQUNEd04sR0FBRyxFQUFFO2tCQUNIbE0sUUFBUSxFQUFFOEssVUFBVTtrQkFDcEJoTixLQUFLLEVBQUV5RSxNQUFNLENBQUN1SSxVQUFVLENBQUMsQ0FBQ3BNO2dCQUM1QjtjQUFDLEdBQ0d1TSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQ1g7Z0JBQ0VrQixRQUFRLEVBQUU7a0JBQ1JuTSxRQUFRLEVBQUVpTCxNQUFNO2tCQUNoQm5OLEtBQUssRUFBRXlFLE1BQU0sQ0FBQzBJLE1BQU0sQ0FBQyxDQUFDdk07Z0JBQ3hCO2NBQ0YsQ0FBQyxHQUNELENBQUMsQ0FBQyxDQUNQO2NBQ0QwTixNQUFNLEVBQUV4QjtZQUNWLENBQUMsQ0FBQztZQUNGLE9BQU9VLEtBQUs7VUFDZDtRQUNGO01BQ0Y7SUFBQyxTQUFBZSxHQUFBO01BQUFiLFNBQUEsQ0FBQXZPLENBQUEsQ0FBQW9QLEdBQUE7SUFBQTtNQUFBYixTQUFBLENBQUF6TixDQUFBO0lBQUE7SUFDRCxPQUFPdU4sS0FBSztFQUNkLENBQUMsRUFBRTNELEdBQUcsQ0FBQztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzJFLG1CQUFtQkEsQ0FDakNDLE9BQTJCLEVBQzNCQyxNQUFjLEVBQ2RDLElBQWEsRUFDTztFQUNwQixJQUFPakssVUFBVSxHQUEyQitKLE9BQU8sQ0FBNUMvSixVQUFVO0lBQUVELE1BQU0sR0FBbUJnSyxPQUFPLENBQWhDaEssTUFBTTtJQUFFaEIsYUFBYSxHQUFJZ0wsT0FBTyxDQUF4QmhMLGFBQWE7RUFDeEMsSUFBTXFHLFVBQVUsR0FBR3JGLE1BQU0sQ0FBQzZDLFNBQVMsQ0FBQyxVQUFBckgsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ1csSUFBSSxLQUFLOE4sTUFBTTtFQUFBLEVBQUM7RUFDM0QsSUFBSTVFLFVBQVUsR0FBRyxDQUFDLEVBQUU7SUFDbEIsT0FBTzJFLE9BQU87RUFDaEI7RUFFQSxJQUFNRyxNQUFNLEdBQUdDLHFCQUFVLENBQUNGLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSUUscUJBQVUsQ0FBQ0MsU0FBUztFQUU3RCxJQUFJRixNQUFNLEtBQUtDLHFCQUFVLENBQUNFLE1BQU0sRUFBRTtJQUNoQ04sT0FBTyxDQUFDTyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCUCxPQUFPLENBQUNRLFNBQVMsR0FBRyxJQUFJO0lBRXhCLE9BQU9SLE9BQU87RUFDaEI7RUFFQSxJQUFNOUMsWUFBWSxHQUFHaUQsTUFBTSxLQUFLQyxxQkFBVSxDQUFDQyxTQUFTLEdBQUdJLGtCQUFTLEdBQUdDLG1CQUFVO0VBQzdFLElBQU1GLFNBQVMsR0FBR3ZLLFVBQVUsQ0FBQ2hFLEtBQUssQ0FBQyxDQUFDLENBQUMwTyxJQUFJLENBQUMsVUFBQ2hQLENBQUMsRUFBRWlQLENBQUMsRUFBSztJQUNsRCxJQUFNQyxNQUFNLEdBQUc3TCxhQUFhLENBQUNsQixPQUFPLENBQUNuQyxDQUFDLEVBQUUwSixVQUFVLENBQUM7SUFDbkQsSUFBTXlGLE1BQU0sR0FBRzlMLGFBQWEsQ0FBQ2xCLE9BQU8sQ0FBQzhNLENBQUMsRUFBRXZGLFVBQVUsQ0FBQztJQUNuRCxJQUFJLENBQUMsSUFBQTBGLCtCQUFrQixFQUFDRixNQUFNLENBQUMsSUFBSSxJQUFBRSwrQkFBa0IsRUFBQ0QsTUFBTSxDQUFDLEVBQUU7TUFDN0QsT0FBTyxDQUFDO0lBQ1YsQ0FBQyxNQUFNLElBQUksSUFBQUMsK0JBQWtCLEVBQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBQUUsK0JBQWtCLEVBQUNELE1BQU0sQ0FBQyxFQUFFO01BQ3BFLE9BQU8sQ0FBQyxDQUFDO0lBQ1g7SUFDQSxPQUFPNUQsWUFBWSxDQUFDMkQsTUFBTSxFQUFFQyxNQUFNLENBQUM7RUFDckMsQ0FBQyxDQUFDO0VBRUZkLE9BQU8sQ0FBQ08sVUFBVSxPQUFBck4sZ0JBQUEsaUJBQ2YrTSxNQUFNLEVBQUdFLE1BQU0sQ0FDakI7RUFDREgsT0FBTyxDQUFDUSxTQUFTLEdBQUdBLFNBQVM7RUFFN0IsT0FBT1IsT0FBTztBQUNoQjtBQUVPLFNBQVNnQixlQUFlQSxDQUFDaEIsT0FBMkIsRUFBRUMsTUFBYyxFQUFzQjtFQUMvRixJQUFNekgsS0FBSyxHQUFHd0gsT0FBTyxDQUFDMUgsY0FBYyxDQUFDMkgsTUFBTSxDQUFDO0VBQzVDLElBQUksQ0FBQ3pILEtBQUssRUFBRTtJQUNWLE9BQU93SCxPQUFPO0VBQ2hCO0VBRUEsSUFBSWlCLGFBQWE7RUFDakIsSUFBSW5RLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaVAsT0FBTyxDQUFDaUIsYUFBYSxDQUFDLElBQUlqQixPQUFPLENBQUNpQixhQUFhLENBQUNDLFFBQVEsQ0FBQzFJLEtBQUssQ0FBQ3JHLElBQUksQ0FBQyxFQUFFO0lBQ3RGO0lBQ0E4TyxhQUFhLEdBQUdqQixPQUFPLENBQUNpQixhQUFhLENBQUN2TyxNQUFNLENBQUMsVUFBQXlPLEVBQUU7TUFBQSxPQUFJQSxFQUFFLEtBQUszSSxLQUFLLENBQUNyRyxJQUFJO0lBQUEsRUFBQztFQUN2RSxDQUFDLE1BQU07SUFDTDhPLGFBQWEsR0FBRyxDQUFDakIsT0FBTyxDQUFDaUIsYUFBYSxJQUFJLEVBQUUsRUFBRWpFLE1BQU0sQ0FBQ3hFLEtBQUssQ0FBQ3JHLElBQUksQ0FBQztFQUNsRTs7RUFFQTtFQUNBLE9BQU9pUCxrQkFBa0IsQ0FBQ3BCLE9BQU8sRUFBRTtJQUFDaUIsYUFBYSxFQUFiQTtFQUFhLENBQUMsQ0FBQztBQUNyRDtBQUVPLFNBQVNqRixTQUFTQSxDQUFDcUYsUUFBNEIsRUFBc0I7RUFDMUUsT0FBTzlPLE1BQU0sQ0FBQzhHLE1BQU0sQ0FBQzlHLE1BQU0sQ0FBQytPLE1BQU0sQ0FBQy9PLE1BQU0sQ0FBQ2dQLGNBQWMsQ0FBQ0YsUUFBUSxDQUFDLENBQUMsRUFBRUEsUUFBUSxDQUFDO0FBQ2hGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0Qsa0JBQWtCQSxDQUNoQ0MsUUFBNEIsRUFFUjtFQUFBLElBRHBCRyxPQUFvQyxHQUFBeE8sU0FBQSxDQUFBL0IsTUFBQSxRQUFBK0IsU0FBQSxRQUFBb0MsU0FBQSxHQUFBcEMsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUV6QyxPQUFPVCxNQUFNLENBQUNrUCxPQUFPLENBQUNELE9BQU8sQ0FBQyxDQUFDckcsTUFBTSxDQUFDLFVBQUNDLEdBQUcsRUFBRXNHLEtBQUssRUFBSztJQUNwRHRHLEdBQUcsQ0FBQ3NHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE9BQU90RyxHQUFHO0VBQ1osQ0FBQyxFQUFFWSxTQUFTLENBQUNxRixRQUFRLENBQUMsQ0FBQztBQUN6QjtBQUVPLFNBQVNuSyxxQkFBcUJBLENBS25DMUYsQ0FBSSxFQUFFb0YsQ0FBUyxFQUFFakQsRUFBMEIsRUFBRTtFQUM3QyxPQUFPSixXQUFXLENBQUNvTyxJQUFJLENBQ3JCLElBQUk7RUFDSjtFQUNBblEsQ0FBQyxDQUFDc0QsSUFBSSxLQUFLaUMsMEJBQWUsQ0FBQzBGLFNBQVMsRUFDcEM3RixDQUFDLEVBQ0RwRixDQUFDLENBQUNrQyxNQUFNLElBQUksRUFBRSxFQUNkQyxFQUNGLENBQUM7QUFDSDtBQUFDLElBQUFpTyxRQUFBLEdBQUFDLE9BQUEsY0FFYzdOLFdBQVciLCJpZ25vcmVMaXN0IjpbXX0=
647
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2QzQXJyYXkiLCJfY29uc3RhbnRzIiwiX2dwdUZpbHRlclV0aWxzIiwiX3V0aWxzIiwiX2NvbW1vblV0aWxzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiRklEX0tFWSIsIm1heWJlVG9EYXRlIiwiaXNUaW1lIiwiZmllbGRJZHgiLCJmb3JtYXQiLCJkYyIsImQiLCJ0aW1lVG9Vbml4TWlsbGkiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJLZXBsZXJUYWJsZSIsIl9yZWYiLCJpbmZvIiwiY29sb3IiLCJtZXRhZGF0YSIsIl9yZWYkc3VwcG9ydGVkRmlsdGVyVCIsInN1cHBvcnRlZEZpbHRlclR5cGVzIiwiX3JlZiRkaXNhYmxlRGF0YU9wZXJhIiwiZGlzYWJsZURhdGFPcGVyYXRpb24iLCJfY2xhc3NDYWxsQ2hlY2syIiwiZGF0YXNldEluZm8iLCJpZCIsImdlbmVyYXRlSGFzaElkIiwibGFiZWwiLCJ0eXBlIiwiZGVmYXVsdE1ldGFkYXRhIiwiZGF0YUNvbnRhaW5lciIsImNyZWF0ZURhdGFDb250YWluZXIiLCJncHVGaWx0ZXIiLCJnZXRHcHVGaWx0ZXJQcm9wcyIsInVuZGVmaW5lZCIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJfaW1wb3J0RGF0YSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3JlZjIiLCJkYXRhIiwiZGF0YUNvbnRhaW5lckRhdGEiLCJpbnB1dERhdGFGb3JtYXQiLCJmaWVsZHMiLCJhbGxJbmRleGVzIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwiY29scyIsInJvd3MiLCJEYXRhRm9ybSIsIkNPTFNfQVJSQVkiLCJST1dTX0FSUkFZIiwibWFwIiwiaSIsImRpc3BsYXlOYW1lIiwiYW5hbHl6ZXJUeXBlIiwiQUxMX0ZJRUxEX1RZUEVTIiwic3RyaW5nIiwidmFsdWVBY2Nlc3NvciIsImdldEZpZWxkVmFsdWVBY2Nlc3NvciIsImdldFBsYWluSW5kZXgiLCJmaWx0ZXJlZEluZGV4IiwiZmlsdGVyZWRJbmRleEZvckRvbWFpbiIsImZpZWxkUGFpcnMiLCJmaW5kUG9pbnRGaWVsZFBhaXJzIiwic3RvcCIsImltcG9ydERhdGEiLCJfeCIsIl91cGRhdGUiLCJfY2FsbGVlMiIsIl90aGlzJGRhdGFDb250YWluZXIkdSIsIl90aGlzJGRhdGFDb250YWluZXIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJ1cGRhdGUiLCJhYnJ1cHQiLCJfeDIiLCJnZXQiLCJudW1Sb3dzIiwiZ2V0Q29sdW1uRmllbGQiLCJjb2x1bW5OYW1lIiwiZmllbGQiLCJmaW5kIiwiZmQiLCJfYXNzZXRGaWVsZCIsImdldENvbHVtbkZpZWxkSWR4IiwiZmluZEluZGV4IiwiQm9vbGVhbiIsImdldENvbHVtbkRpc3BsYXlGb3JtYXQiLCJkaXNwbGF5Rm9ybWF0IiwiZ2V0VmFsdWUiLCJyb3dJZHgiLCJ1cGRhdGVDb2x1bW5GaWVsZCIsIm5ld0ZpZWxkIiwiYXNzaWduIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInVwZGF0ZVRhYmxlQ29sb3IiLCJuZXdDb2xvciIsImdldENvbHVtbkZpbHRlclByb3BzIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJmaWx0ZXJQcm9wcyIsImZpZWxkRG9tYWluIiwiZ2V0Q29sdW1uRmlsdGVyRG9tYWluIiwiZ2V0RmlsdGVyUHJvcHMiLCJmaWx0ZXJUYWJsZSIsImZpbHRlcnMiLCJsYXllcnMiLCJvcHQiLCJfdGhpcyIsImRhdGFJZCIsIm9sZEZpbHRlclJlY29yZCIsImZpbHRlclJlY29yZCIsImdldEZpbHRlclJlY29yZCIsImNoYW5nZWRGaWx0ZXJzIiwiZGlmZkZpbHRlcnMiLCJzaG91bGRDYWxEb21haW4iLCJkeW5hbWljRG9tYWluIiwic2hvdWxkQ2FsSW5kZXgiLCJjcHUiLCJmaWx0ZXJSZXN1bHQiLCJkeW5hbWljRG9tYWluRmlsdGVycyIsImNwdUZpbHRlcnMiLCJmaWx0ZXJGdW5jcyIsInJlZHVjZSIsImFjYyIsImZpZWxkSW5kZXgiLCJnZXREYXRhc2V0RmllbGRJbmRleEZvckZpbHRlciIsImdldEZpbHRlckZ1bmN0aW9uIiwiZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMiLCJmaWx0ZXJUYWJsZUNQVSIsImNwdU9ubHkiLCJpZ25vcmVEb21haW4iLCJmaWx0ZXJlZElkeENQVSIsImZpbHRlclJlY29yZENQVSIsImdwdSIsImNvcGllZCIsImNvcHlUYWJsZSIsImZpbHRlcmVkIiwiZG9tYWluIiwicmVhbCIsImludGVnZXIiLCJnZXROdW1lcmljRmllbGREb21haW4iLCJoMyIsImRhdGUiLCJnZXRPcmRpbmFsRG9tYWluIiwidGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wRmllbGREb21haW4iLCJnZXRDb2x1bW5MYXllckRvbWFpbiIsInNjYWxlVHlwZSIsIlNDQUxFX1RZUEVTIiwiQ29uc29sZSIsImVycm9yIiwiY29uY2F0IiwiaW5kZXhWYWx1ZUFjY2Vzc29yIiwic29ydEZ1bmN0aW9uIiwiZ2V0U29ydGluZ0Z1bmN0aW9uIiwib3JkaW5hbCIsImN1c3RvbU9yZGluYWwiLCJwb2ludCIsInF1YW50aWxlIiwiZ2V0UXVhbnRpbGVEb21haW4iLCJsb2ciLCJnZXRMb2dEb21haW4iLCJxdWFudGl6ZSIsImxpbmVhciIsInNxcnQiLCJjdXN0b20iLCJnZXRMaW5lYXJEb21haW4iLCJmaWVsZE5hbWUiLCJjb25kaXRpb24iLCJzcGVjaWFsQ2hhcmFjdGVyU2V0IiwiZm91bmRNYXRjaGluZ0ZpZWxkcyIsInJlIiwic3VmZml4UGFpciIsImFsbE5hbWVzIiwicGFydG5lcklkeCIsInJlcGxhY2UiLCJtYXRjaCIsImFsdElkeCIsIkFMVElUVURFX0ZJRUxEUyIsInNvbWUiLCJhbHQiLCJ0b0xvd2VyQ2FzZSIsImNhcnJ5IiwiaWR4IiwiX2l0ZXJhdG9yIiwiVFJJUF9QT0lOVF9GSUVMRFMiLCJfc3RlcCIsIlJlZ0V4cCIsIl9mb3VuZE1hdGNoaW5nRmllbGRzIiwidHJpbU5hbWUiLCJ0cmltIiwiZGVmYXVsdE5hbWUiLCJwYWlyIiwibGF0IiwibG5nIiwiYWx0aXR1ZGUiLCJzdWZmaXgiLCJlcnIiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwiZGF0YXNldCIsImNvbHVtbiIsIm1vZGUiLCJzb3J0QnkiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwiVU5TT1JUIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsImFzY2VuZGluZyIsImRlc2NlbmRpbmciLCJzb3J0IiwiYiIsInZhbHVlMSIsInZhbHVlMiIsIm5vdE51bGxvclVuZGVmaW5lZCIsInBpblRhYmxlQ29sdW1ucyIsInBpbm5lZENvbHVtbnMiLCJpbmNsdWRlcyIsImNvIiwiY29weVRhYmxlQW5kVXBkYXRlIiwib3JpZ2luYWwiLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsIm9wdGlvbnMiLCJlbnRyaWVzIiwiZW50cnkiLCJiaW5kIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2tlcGxlci10YWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQge2FzY2VuZGluZywgZGVzY2VuZGluZ30gZnJvbSAnZDMtYXJyYXknO1xuXG5pbXBvcnQge1xuICBUUklQX1BPSU5UX0ZJRUxEUyxcbiAgU09SVF9PUkRFUixcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBBTFRJVFVERV9GSUVMRFMsXG4gIFNDQUxFX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIFJHQkNvbG9yLFxuICBGaWVsZCxcbiAgRmllbGRQYWlyLFxuICBGaWVsZERvbWFpbixcbiAgRmlsdGVyLFxuICBQcm90b0RhdGFzZXQsXG4gIEZpbHRlclJlY29yZCxcbiAgRmlsdGVyRGF0YXNldE9wdCxcbiAgUmFuZ2VGaWVsZERvbWFpbixcbiAgU2VsZWN0RmllbGREb21haW4sXG4gIE11bHRpU2VsZWN0RmllbGREb21haW4sXG4gIFRpbWVSYW5nZUZpZWxkRG9tYWluXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge2dldEdwdUZpbHRlclByb3BzLCBnZXREYXRhc2V0RmllbGRJbmRleEZvckZpbHRlcn0gZnJvbSAnLi9ncHUtZmlsdGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgZ2V0U29ydGluZ0Z1bmN0aW9uLFxuICB0aW1lVG9Vbml4TWlsbGksXG4gIGNyZWF0ZURhdGFDb250YWluZXIsXG4gIERhdGFGb3JtLFxuICBkaWZmRmlsdGVycyxcbiAgZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMsXG4gIEZpbHRlclJlc3VsdCxcbiAgZ2V0RmlsdGVyRnVuY3Rpb24sXG4gIGdldEZpbHRlclByb3BzLFxuICBnZXRGaWx0ZXJSZWNvcmQsXG4gIGdldE51bWVyaWNGaWVsZERvbWFpbixcbiAgZ2V0VGltZXN0YW1wRmllbGREb21haW4sXG4gIGdldExpbmVhckRvbWFpbixcbiAgZ2V0TG9nRG9tYWluLFxuICBnZXRPcmRpbmFsRG9tYWluLFxuICBnZXRRdWFudGlsZURvbWFpbixcbiAgRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgRmlsdGVyQ2hhbmdlZFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIG5vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuXG4vLyBUT0RPIGlzb2xhdGUgbGF5ZXIgdHlwZSwgZGVwZW5kcyBvbiBAa2VwbGVyLmdsL2xheWVyc1xudHlwZSBMYXllciA9IGFueTtcblxuZXhwb3J0IHR5cGUgR3B1RmlsdGVyID0ge1xuICBmaWx0ZXJSYW5nZTogbnVtYmVyW11bXTtcbiAgZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2Vyczoge1xuICAgIFtpZDogc3RyaW5nXToge25hbWU6IHN0cmluZzsgZG9tYWluMDogbnVtYmVyfSB8IG51bGw7XG4gIH07XG4gIGZpbHRlclZhbHVlQWNjZXNzb3I6IChcbiAgICBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuICApID0+IChcbiAgICBnZXRJbmRleD86IChhbnkpID0+IG51bWJlcixcbiAgICBnZXREYXRhPzogKGRjXzogRGF0YUNvbnRhaW5lckludGVyZmFjZSwgZDogYW55LCBmaWVsZEluZGV4OiBudW1iZXIpID0+IGFueVxuICApID0+IChkOiBhbnksIG9iamVjdEluZm8/OiB7aW5kZXg6IG51bWJlcn0pID0+IChudW1iZXIgfCBudW1iZXJbXSlbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlclByb3BzID1cbiAgfCBOdW1lcmljRmllbGRGaWx0ZXJQcm9wc1xuICB8IEJvb2xlYW5GaWVsZEZpbHRlclByb3BzXG4gIHwgU3RyaW5nRmllbGRGaWx0ZXJQcm9wc1xuICB8IFRpbWVGaWVsZEZpbHRlclByb3BzO1xuXG5leHBvcnQgdHlwZSBOdW1lcmljRmllbGRGaWx0ZXJQcm9wcyA9IFJhbmdlRmllbGREb21haW4gJiB7XG4gIHZhbHVlOiBbbnVtYmVyLCBudW1iZXJdO1xuICB0eXBlOiBzdHJpbmc7XG4gIHR5cGVPcHRpb25zOiBzdHJpbmdbXTtcbiAgZ3B1OiBib29sZWFuO1xuICBjb2x1bW5TdGF0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuZXhwb3J0IHR5cGUgQm9vbGVhbkZpZWxkRmlsdGVyUHJvcHMgPSBTZWxlY3RGaWVsZERvbWFpbiAmIHtcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogYm9vbGVhbjtcbiAgZ3B1OiBib29sZWFuO1xuICBjb2x1bW5TdGF0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuZXhwb3J0IHR5cGUgU3RyaW5nRmllbGRGaWx0ZXJQcm9wcyA9IE11bHRpU2VsZWN0RmllbGREb21haW4gJiB7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZ1tdO1xuICBncHU6IGJvb2xlYW47XG4gIGNvbHVtblN0YXRzPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn07XG5leHBvcnQgdHlwZSBUaW1lRmllbGRGaWx0ZXJQcm9wcyA9IFRpbWVSYW5nZUZpZWxkRG9tYWluICYge1xuICB0eXBlOiBzdHJpbmc7XG4gIHZpZXc6IEZpbHRlclsndmlldyddO1xuICBmaXhlZERvbWFpbjogYm9vbGVhbjtcbiAgdmFsdWU6IG51bWJlcltdO1xuICBncHU6IGJvb2xlYW47XG4gIGNvbHVtblN0YXRzPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn07XG5cbi8vIFVuaXF1ZSBpZGVudGlmaWVyIG9mIGVhY2ggZmllbGRcbmNvbnN0IEZJRF9LRVkgPSAnbmFtZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVRvRGF0ZShcbiAgaXNUaW1lOiBib29sZWFuLFxuICBmaWVsZElkeDogbnVtYmVyLFxuICBmb3JtYXQ6IHN0cmluZyxcbiAgZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIC8vIEFuIG9iamVjdCB3aXRoIHJvdyBpbmRleCBvciBhIG1hdGVyaWFsaXplZCByb3cgYXJyYXkgKGZvciBtYXRlcmlhbGl6ZWQgaG92ZXIgaW5mbyBmcm9tIHRyaXAgbGF5ZXIpXG4gIGQ6IHtpbmRleDogbnVtYmVyfSB8IGFueVtdXG4pIHtcbiAgaWYgKGlzVGltZSkge1xuICAgIHJldHVybiB0aW1lVG9Vbml4TWlsbGkoQXJyYXkuaXNBcnJheShkKSA/IGRbZmllbGRJZHhdIDogZGMudmFsdWVBdChkLmluZGV4LCBmaWVsZElkeCksIGZvcm1hdCk7XG4gIH1cblxuICByZXR1cm4gQXJyYXkuaXNBcnJheShkKSA/IGRbZmllbGRJZHhdIDogZGMudmFsdWVBdChkLmluZGV4LCBmaWVsZElkeCk7XG59XG5cbmNsYXNzIEtlcGxlclRhYmxlPEYgZXh0ZW5kcyBGaWVsZCA9IEZpZWxkPiB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgdHlwZT86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgY29sb3I6IFJHQkNvbG9yO1xuXG4gIC8vIGZpZWxkcyBhbmQgZGF0YVxuICBmaWVsZHM6IEZbXSA9IFtdO1xuXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2U7XG5cbiAgYWxsSW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgZmlsdGVyZWRJbmRleDogbnVtYmVyW10gPSBbXTtcbiAgZmlsdGVyZWRJZHhDUFU/OiBudW1iZXJbXTtcbiAgZmlsdGVyZWRJbmRleEZvckRvbWFpbjogbnVtYmVyW10gPSBbXTtcbiAgZmllbGRQYWlyczogRmllbGRQYWlyW10gPSBbXTtcbiAgZ3B1RmlsdGVyOiBHcHVGaWx0ZXI7XG4gIGZpbHRlclJlY29yZD86IEZpbHRlclJlY29yZDtcbiAgZmlsdGVyUmVjb3JkQ1BVPzogRmlsdGVyUmVjb3JkO1xuICBjaGFuZ2VkRmlsdGVycz86IEZpbHRlckNoYW5nZWQ7XG5cbiAgLy8gdGFibGUtaW5qZWN0ZWQgbWV0YWRhdGFcbiAgc29ydENvbHVtbj86IHtcbiAgICAvLyBjb2x1bW4gbmFtZTogc29ydGVkIGlkeFxuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZzsgLy8gQVNDRU5ESU5HIHwgREVTQ0VORElORyB8IFVOU09SVFxuICB9O1xuICBzb3J0T3JkZXI/OiBudW1iZXJbXSB8IG51bGw7XG5cbiAgcGlubmVkQ29sdW1ucz86IHN0cmluZ1tdO1xuICBzdXBwb3J0ZWRGaWx0ZXJUeXBlcz86IHN0cmluZ1tdIHwgbnVsbDtcbiAgZGlzYWJsZURhdGFPcGVyYXRpb24/OiBib29sZWFuO1xuXG4gIC8vIHRhYmxlLWluamVjdGVkIG1ldGFkYXRhXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIGdldEZpbGVQcm9jZXNzb3I/OiAoZGF0YTogYW55LCBpbnB1dEZvcm1hdD86IHN0cmluZykgPT4ge2RhdGE6IGFueTsgZm9ybWF0OiBzdHJpbmd9O1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBpbmZvLFxuICAgIGNvbG9yLFxuICAgIG1ldGFkYXRhLFxuICAgIHN1cHBvcnRlZEZpbHRlclR5cGVzID0gbnVsbCxcbiAgICBkaXNhYmxlRGF0YU9wZXJhdGlvbiA9IGZhbHNlXG4gIH06IHtcbiAgICBpbmZvPzogUHJvdG9EYXRhc2V0WydpbmZvJ107XG4gICAgY29sb3I6IFJHQkNvbG9yO1xuICAgIG1ldGFkYXRhPzogUHJvdG9EYXRhc2V0WydtZXRhZGF0YSddO1xuICAgIHN1cHBvcnRlZEZpbHRlclR5cGVzPzogUHJvdG9EYXRhc2V0WydzdXBwb3J0ZWRGaWx0ZXJUeXBlcyddO1xuICAgIGRpc2FibGVEYXRhT3BlcmF0aW9uPzogUHJvdG9EYXRhc2V0WydkaXNhYmxlRGF0YU9wZXJhdGlvbiddO1xuICB9KSB7XG4gICAgLy8gVE9ETyAtIHdoYXQgdG8gZG8gaWYgdmFsaWRhdGlvbiBmYWlscz8gQ2FuIGtlcGxlciBoYW5kbGUgZXhjZXB0aW9ucz9cbiAgICAvLyBjb25zdCB2YWxpZGF0ZWREYXRhID0gdmFsaWRhdGVJbnB1dERhdGEoZGF0YSk7XG4gICAgLy8gaWYgKCF2YWxpZGF0ZWREYXRhKSB7XG4gICAgLy8gICByZXR1cm4gdGhpcztcbiAgICAvLyB9XG5cbiAgICBjb25zdCBkYXRhc2V0SW5mbyA9IHtcbiAgICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg0KSxcbiAgICAgIGxhYmVsOiAnbmV3IGRhdGFzZXQnLFxuICAgICAgdHlwZTogJycsXG4gICAgICAuLi5pbmZvXG4gICAgfTtcblxuICAgIGNvbnN0IGRlZmF1bHRNZXRhZGF0YSA9IHtcbiAgICAgIGlkOiBkYXRhc2V0SW5mby5pZCxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGZvcm1hdDogZGF0YXNldEluZm8uZm9ybWF0IHx8ICcnLFxuICAgICAgbGFiZWw6IGRhdGFzZXRJbmZvLmxhYmVsIHx8ICcnXG4gICAgfTtcblxuICAgIHRoaXMuaWQgPSBkYXRhc2V0SW5mby5pZDtcbiAgICB0aGlzLnR5cGUgPSBkYXRhc2V0SW5mby50eXBlO1xuICAgIHRoaXMubGFiZWwgPSBkYXRhc2V0SW5mby5sYWJlbDtcbiAgICB0aGlzLmNvbG9yID0gY29sb3I7XG4gICAgdGhpcy5tZXRhZGF0YSA9IHtcbiAgICAgIC4uLmRlZmF1bHRNZXRhZGF0YSxcbiAgICAgIC4uLm1ldGFkYXRhXG4gICAgfTtcblxuICAgIHRoaXMuc3VwcG9ydGVkRmlsdGVyVHlwZXMgPSBzdXBwb3J0ZWRGaWx0ZXJUeXBlcztcbiAgICB0aGlzLmRpc2FibGVEYXRhT3BlcmF0aW9uID0gZGlzYWJsZURhdGFPcGVyYXRpb247XG5cbiAgICB0aGlzLmRhdGFDb250YWluZXIgPSBjcmVhdGVEYXRhQ29udGFpbmVyKFtdKTtcbiAgICB0aGlzLmdwdUZpbHRlciA9IGdldEdwdUZpbHRlclByb3BzKFtdLCB0aGlzLmlkLCBbXSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydERhdGEoe2RhdGF9OiB7ZGF0YTogUHJvdG9EYXRhc2V0WydkYXRhJ119KSB7XG4gICAgY29uc3QgZGF0YUNvbnRhaW5lckRhdGEgPSBkYXRhLmNvbHMgPyBkYXRhLmNvbHMgOiBkYXRhLnJvd3M7XG4gICAgY29uc3QgaW5wdXREYXRhRm9ybWF0ID0gZGF0YS5jb2xzID8gRGF0YUZvcm0uQ09MU19BUlJBWSA6IERhdGFGb3JtLlJPV1NfQVJSQVk7XG5cbiAgICBjb25zdCBkYXRhQ29udGFpbmVyID0gY3JlYXRlRGF0YUNvbnRhaW5lcihkYXRhQ29udGFpbmVyRGF0YSwge1xuICAgICAgZmllbGRzOiBkYXRhLmZpZWxkcyxcbiAgICAgIGlucHV0RGF0YUZvcm1hdFxuICAgIH0pO1xuXG4gICAgY29uc3QgZmllbGRzOiBGaWVsZFtdID0gZGF0YS5maWVsZHMubWFwKChmLCBpKSA9PiAoe1xuICAgICAgLi4uZixcbiAgICAgIGZpZWxkSWR4OiBpLFxuICAgICAgaWQ6IGYubmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lOiBmLmRpc3BsYXlOYW1lIHx8IGYubmFtZSxcbiAgICAgIGFuYWx5emVyVHlwZTogZi5hbmFseXplclR5cGUgfHwgQUxMX0ZJRUxEX1RZUEVTLnN0cmluZyxcbiAgICAgIGZvcm1hdDogZi5mb3JtYXQgfHwgJycsXG4gICAgICB2YWx1ZUFjY2Vzc29yOiBnZXRGaWVsZFZhbHVlQWNjZXNzb3IoZiwgaSwgZGF0YUNvbnRhaW5lcilcbiAgICB9KSk7XG5cbiAgICBjb25zdCBhbGxJbmRleGVzID0gZGF0YUNvbnRhaW5lci5nZXRQbGFpbkluZGV4KCk7XG4gICAgdGhpcy5kYXRhQ29udGFpbmVyID0gZGF0YUNvbnRhaW5lcjtcbiAgICB0aGlzLmFsbEluZGV4ZXMgPSBhbGxJbmRleGVzO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleCA9IGFsbEluZGV4ZXM7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID0gYWxsSW5kZXhlcztcbiAgICB0aGlzLmZpZWxkUGFpcnMgPSBmaW5kUG9pbnRGaWVsZFBhaXJzKGZpZWxkcyk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBNYWtlIHN1cmUgdGhhdCBmaWVsZHMgc2F0aXNmaWVzIEYgZXh0ZW5kcyBGaWVsZFxuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICAgIHRoaXMuZ3B1RmlsdGVyID0gZ2V0R3B1RmlsdGVyUHJvcHMoW10sIHRoaXMuaWQsIGZpZWxkcywgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgdGFibGUgd2l0aCBuZXcgZGF0YVxuICAgKiBAcGFyYW0gZGF0YSAtIG5ldyBkYXRhIGUuZy4gdGhlIGFycm93IGRhdGEgd2l0aCBuZXcgYmF0Y2hlcyBsb2FkZWRcbiAgICovXG4gIGFzeW5jIHVwZGF0ZShkYXRhOiBQcm90b0RhdGFzZXRbJ2RhdGEnXSkge1xuICAgIGNvbnN0IGRhdGFDb250YWluZXJEYXRhID0gZGF0YS5jb2xzID8gZGF0YS5jb2xzIDogZGF0YS5yb3dzO1xuICAgIHRoaXMuZGF0YUNvbnRhaW5lci51cGRhdGU/LihkYXRhQ29udGFpbmVyRGF0YSk7XG4gICAgdGhpcy5hbGxJbmRleGVzID0gdGhpcy5kYXRhQ29udGFpbmVyLmdldFBsYWluSW5kZXgoKTtcbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSB0aGlzLmFsbEluZGV4ZXM7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID0gdGhpcy5hbGxJbmRleGVzO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFDb250YWluZXIubnVtUm93cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZFxuICAgKiBAcGFyYW0gY29sdW1uTmFtZVxuICAgKi9cbiAgZ2V0Q29sdW1uRmllbGQoY29sdW1uTmFtZTogc3RyaW5nKTogRiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIGZpZWxkKTtcbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpZWxkSWR4XG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWVsZElkeChjb2x1bW5OYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gdGhpcy5maWVsZHMuZmluZEluZGV4KGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIEJvb2xlYW4oZmllbGRJZHggPiAtMSkpO1xuICAgIHJldHVybiBmaWVsZElkeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGlzcGxheUZvcm1hdFxuICAgKiBAcGFyYW0gY29sdW1uTmFtZVxuICAgKi9cbiAgZ2V0Q29sdW1uRGlzcGxheUZvcm1hdChjb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIGZpZWxkKTtcbiAgICByZXR1cm4gZmllbGQ/LmRpc3BsYXlGb3JtYXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiBhIGNlbGxcbiAgICovXG4gIGdldFZhbHVlKGNvbHVtbk5hbWU6IHN0cmluZywgcm93SWR4OiBudW1iZXIpOiBhbnkge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRDb2x1bW5GaWVsZChjb2x1bW5OYW1lKTtcbiAgICByZXR1cm4gZmllbGQgPyBmaWVsZC52YWx1ZUFjY2Vzc29yKHtpbmRleDogcm93SWR4fSkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgZXhpc3RpbmcgZmllbGQgd2l0aCBhIG5ldyBvYmplY3RcbiAgICogQHBhcmFtIGZpZWxkSWR4XG4gICAqIEBwYXJhbSBuZXdGaWVsZFxuICAgKi9cbiAgdXBkYXRlQ29sdW1uRmllbGQoZmllbGRJZHg6IG51bWJlciwgbmV3RmllbGQ6IEYpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkcyA9IE9iamVjdC5hc3NpZ24oWy4uLnRoaXMuZmllbGRzXSwge1tmaWVsZElkeF06IG5ld0ZpZWxkfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGRhdGFzZXQgY29sb3IgYnkgY3VzdG9tIGNvbG9yXG4gICAqIEBwYXJhbSBuZXdDb2xvclxuICAgKi9cbiAgdXBkYXRlVGFibGVDb2xvcihuZXdDb2xvcjogUkdCQ29sb3IpOiB2b2lkIHtcbiAgICB0aGlzLmNvbG9yID0gbmV3Q29sb3I7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBmaWx0ZXJQcm9wcyB0byBmaWVsZCBhbmQgcmV0cmlldmUgaXRcbiAgICogQHBhcmFtIGNvbHVtbk5hbWVcbiAgICovXG4gIGdldENvbHVtbkZpbHRlclByb3BzKGNvbHVtbk5hbWU6IHN0cmluZyk6IEZbJ2ZpbHRlclByb3BzJ10gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuZ2V0Q29sdW1uRmllbGRJZHgoY29sdW1uTmFtZSk7XG4gICAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHNbZmllbGRJZHhdO1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmllbGQsICdmaWx0ZXJQcm9wcycpKSB7XG4gICAgICByZXR1cm4gZmllbGQuZmlsdGVyUHJvcHM7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGREb21haW4gPSB0aGlzLmdldENvbHVtbkZpbHRlckRvbWFpbihmaWVsZCk7XG4gICAgaWYgKCFmaWVsZERvbWFpbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyUHJvcHMgPSBnZXRGaWx0ZXJQcm9wcyhmaWVsZCwgZmllbGREb21haW4pO1xuICAgIGNvbnN0IG5ld0ZpZWxkID0ge1xuICAgICAgLi4uZmllbGQsXG4gICAgICBmaWx0ZXJQcm9wc1xuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbkZpZWxkKGZpZWxkSWR4LCBuZXdGaWVsZCk7XG5cbiAgICByZXR1cm4gZmlsdGVyUHJvcHM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgZmlsdGVycyB0byBkYXRhc2V0LCByZXR1cm4gdGhlIGZpbHRlcmVkIGRhdGFzZXQgd2l0aCB1cGRhdGVkIGBncHVGaWx0ZXJgLCBgZmlsdGVyUmVjb3JkYCwgYGZpbHRlcmVkSW5kZXhgLCBgZmlsdGVyZWRJbmRleEZvckRvbWFpbmBcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogQHBhcmFtIGxheWVyc1xuICAgKiBAcGFyYW0gb3B0XG4gICAqL1xuICBmaWx0ZXJUYWJsZShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMYXllcltdLCBvcHQ/OiBGaWx0ZXJEYXRhc2V0T3B0KTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgaWQ6IGRhdGFJZCwgZmlsdGVyUmVjb3JkOiBvbGRGaWx0ZXJSZWNvcmQsIGZpZWxkc30gPSB0aGlzO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gZmlsdGVyc1xuICAgIGNvbnN0IGZpbHRlclJlY29yZCA9IGdldEZpbHRlclJlY29yZChkYXRhSWQsIGZpbHRlcnMsIG9wdCB8fCB7fSk7XG5cbiAgICB0aGlzLmZpbHRlclJlY29yZCA9IGZpbHRlclJlY29yZDtcbiAgICB0aGlzLmdwdUZpbHRlciA9IGdldEdwdUZpbHRlclByb3BzKGZpbHRlcnMsIGRhdGFJZCwgZmllbGRzLCB0aGlzLmdwdUZpbHRlcik7XG5cbiAgICB0aGlzLmNoYW5nZWRGaWx0ZXJzID0gZGlmZkZpbHRlcnMoZmlsdGVyUmVjb3JkLCBvbGRGaWx0ZXJSZWNvcmQpO1xuXG4gICAgaWYgKCFmaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gdGhpcy5hbGxJbmRleGVzO1xuICAgICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID0gdGhpcy5hbGxJbmRleGVzO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gZ2VuZXJhdGUgMiBzZXRzIG9mIGZpbHRlciByZXN1bHRcbiAgICAvLyBmaWx0ZXJlZEluZGV4IHVzZWQgdG8gY2FsY3VsYXRlIGxheWVyIGRhdGFcbiAgICAvLyBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIHVzZWQgdG8gY2FsY3VsYXRlIGxheWVyIERvbWFpblxuICAgIGNvbnN0IHNob3VsZENhbERvbWFpbiA9IEJvb2xlYW4odGhpcy5jaGFuZ2VkRmlsdGVycy5keW5hbWljRG9tYWluKTtcbiAgICBjb25zdCBzaG91bGRDYWxJbmRleCA9IEJvb2xlYW4odGhpcy5jaGFuZ2VkRmlsdGVycy5jcHUpO1xuXG4gICAgbGV0IGZpbHRlclJlc3VsdDogRmlsdGVyUmVzdWx0ID0ge307XG4gICAgaWYgKHNob3VsZENhbERvbWFpbiB8fCBzaG91bGRDYWxJbmRleCkge1xuICAgICAgY29uc3QgZHluYW1pY0RvbWFpbkZpbHRlcnMgPSBzaG91bGRDYWxEb21haW4gPyBmaWx0ZXJSZWNvcmQuZHluYW1pY0RvbWFpbiA6IG51bGw7XG4gICAgICBjb25zdCBjcHVGaWx0ZXJzID0gc2hvdWxkQ2FsSW5kZXggPyBmaWx0ZXJSZWNvcmQuY3B1IDogbnVsbDtcblxuICAgICAgY29uc3QgZmlsdGVyRnVuY3MgPSBmaWx0ZXJzLnJlZHVjZSgoYWNjLCBmaWx0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRJbmRleCA9IGdldERhdGFzZXRGaWVsZEluZGV4Rm9yRmlsdGVyKHRoaXMuaWQsIGZpbHRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRJbmRleCAhPT0gLTEgPyBmaWVsZHNbZmllbGRJbmRleF0gOiBudWxsO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgIFtmaWx0ZXIuaWRdOiBnZXRGaWx0ZXJGdW5jdGlvbihmaWVsZCwgdGhpcy5pZCwgZmlsdGVyLCBsYXllcnMsIGRhdGFDb250YWluZXIpXG4gICAgICAgIH07XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIGZpbHRlclJlc3VsdCA9IGZpbHRlckRhdGFCeUZpbHRlclR5cGVzKFxuICAgICAgICB7ZHluYW1pY0RvbWFpbkZpbHRlcnMsIGNwdUZpbHRlcnMsIGZpbHRlckZ1bmNzfSxcbiAgICAgICAgZGF0YUNvbnRhaW5lclxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBmaWx0ZXJSZXN1bHQuZmlsdGVyZWRJbmRleCB8fCB0aGlzLmZpbHRlcmVkSW5kZXg7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID1cbiAgICAgIGZpbHRlclJlc3VsdC5maWx0ZXJlZEluZGV4Rm9yRG9tYWluIHx8IHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbjtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGZpbHRlcnMgdG8gYSBkYXRhc2V0IGFsbCBvbiBDUFUsIGFzc2lnbiB0byBgZmlsdGVyZWRJZHhDUFVgLCBgZmlsdGVyUmVjb3JkQ1BVYFxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBAcGFyYW0gbGF5ZXJzXG4gICAqL1xuICBmaWx0ZXJUYWJsZUNQVShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMYXllcltdKTogS2VwbGVyVGFibGU8RmllbGQ+IHtcbiAgICBjb25zdCBvcHQgPSB7XG4gICAgICBjcHVPbmx5OiB0cnVlLFxuICAgICAgaWdub3JlRG9tYWluOiB0cnVlXG4gICAgfTtcblxuICAgIC8vIG5vIGZpbHRlclxuICAgIGlmICghZmlsdGVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJZHhDUFUgPSB0aGlzLmFsbEluZGV4ZXM7XG4gICAgICB0aGlzLmZpbHRlclJlY29yZENQVSA9IGdldEZpbHRlclJlY29yZCh0aGlzLmlkLCBmaWx0ZXJzLCBvcHQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbm8gZ3B1IGZpbHRlclxuICAgIGlmICghZmlsdGVycy5maW5kKGYgPT4gZi5ncHUpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSWR4Q1BVID0gdGhpcy5maWx0ZXJlZEluZGV4O1xuICAgICAgdGhpcy5maWx0ZXJSZWNvcmRDUFUgPSBnZXRGaWx0ZXJSZWNvcmQodGhpcy5pZCwgZmlsdGVycywgb3B0KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYSBjb3B5IGZvciBjcHUgZmlsdGVyaW5nXG4gICAgY29uc3QgY29waWVkID0gY29weVRhYmxlKHRoaXMpO1xuXG4gICAgY29waWVkLmZpbHRlclJlY29yZCA9IHRoaXMuZmlsdGVyUmVjb3JkQ1BVO1xuICAgIGNvcGllZC5maWx0ZXJlZEluZGV4ID0gdGhpcy5maWx0ZXJlZElkeENQVSB8fCBbXTtcblxuICAgIGNvbnN0IGZpbHRlcmVkID0gY29waWVkLmZpbHRlclRhYmxlKGZpbHRlcnMsIGxheWVycywgb3B0KTtcblxuICAgIHRoaXMuZmlsdGVyZWRJZHhDUFUgPSBmaWx0ZXJlZC5maWx0ZXJlZEluZGV4O1xuICAgIHRoaXMuZmlsdGVyUmVjb3JkQ1BVID0gZmlsdGVyZWQuZmlsdGVyUmVjb3JkO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGZpZWxkIGRvbWFpbiBiYXNlZCBvbiBmaWVsZCB0eXBlIGFuZCBkYXRhXG4gICAqIGZvciBGaWx0ZXJcbiAgICovXG4gIGdldENvbHVtbkZpbHRlckRvbWFpbihmaWVsZDogRik6IEZpZWxkRG9tYWluIHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSB0aGlzO1xuICAgIGNvbnN0IHt2YWx1ZUFjY2Vzc29yfSA9IGZpZWxkO1xuXG4gICAgbGV0IGRvbWFpbjtcblxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBkb21haW4gYW5kIHN0ZXBcbiAgICAgICAgcmV0dXJuIGdldE51bWVyaWNGaWVsZERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuYm9vbGVhbjpcbiAgICAgICAgcmV0dXJuIHtkb21haW46IFt0cnVlLCBmYWxzZV19O1xuXG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5oMzpcbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgICAgIGRvbWFpbiA9IGdldE9yZGluYWxEb21haW4oZGF0YUNvbnRhaW5lciwgdmFsdWVBY2Nlc3Nvcik7XG4gICAgICAgIHJldHVybiB7ZG9tYWlufTtcblxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgICByZXR1cm4gZ2V0VGltZXN0YW1wRmllbGREb21haW4oZGF0YUNvbnRhaW5lciwgdmFsdWVBY2Nlc3Nvcik7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7ZG9tYWluOiBnZXRPcmRpbmFsRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEdldCB0aGUgZG9tYWluIG9mIHRoaXMgY29sdW1uIGJhc2VkIG9uIHNjYWxlIHR5cGVcbiAgICovXG4gIGdldENvbHVtbkxheWVyRG9tYWluKGZpZWxkOiBGLCBzY2FsZVR5cGU6IHN0cmluZyk6IG51bWJlcltdIHwgc3RyaW5nW10gfCBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbCB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXhGb3JEb21haW59ID0gdGhpcztcblxuICAgIGlmICghU0NBTEVfVFlQRVNbc2NhbGVUeXBlXSkge1xuICAgICAgQ29uc29sZS5lcnJvcihgc2NhbGUgdHlwZSAke3NjYWxlVHlwZX0gbm90IHN1cHBvcnRlZGApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qge3ZhbHVlQWNjZXNzb3J9ID0gZmllbGQ7XG4gICAgY29uc3QgaW5kZXhWYWx1ZUFjY2Vzc29yID0gaSA9PiB2YWx1ZUFjY2Vzc29yKHtpbmRleDogaX0pO1xuICAgIGNvbnN0IHNvcnRGdW5jdGlvbiA9IGdldFNvcnRpbmdGdW5jdGlvbihmaWVsZC50eXBlKTtcblxuICAgIHN3aXRjaCAoc2NhbGVUeXBlKSB7XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLm9yZGluYWw6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWw6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLnBvaW50OlxuICAgICAgICAvLyBkbyBub3QgcmVjYWxjdWxhdGUgb3JkaW5hbCBkb21haW4gYmFzZWQgb24gZmlsdGVyZWQgZGF0YVxuICAgICAgICAvLyBkb24ndCBuZWVkIHRvIHVwZGF0ZSBvcmRpbmFsIGRvbWFpbiBldmVyeSB0aW1lXG4gICAgICAgIHJldHVybiBnZXRPcmRpbmFsRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuXG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLnF1YW50aWxlOlxuICAgICAgICByZXR1cm4gZ2V0UXVhbnRpbGVEb21haW4oZmlsdGVyZWRJbmRleEZvckRvbWFpbiwgaW5kZXhWYWx1ZUFjY2Vzc29yLCBzb3J0RnVuY3Rpb24pO1xuXG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLmxvZzpcbiAgICAgICAgcmV0dXJuIGdldExvZ0RvbWFpbihmaWx0ZXJlZEluZGV4Rm9yRG9tYWluLCBpbmRleFZhbHVlQWNjZXNzb3IpO1xuXG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLnF1YW50aXplOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5saW5lYXI6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLnNxcnQ6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLmN1c3RvbTpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBnZXRMaW5lYXJEb21haW4oZmlsdGVyZWRJbmRleEZvckRvbWFpbiwgaW5kZXhWYWx1ZUFjY2Vzc29yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2FtcGxlIG9mIHJvd3MgdG8gY2FsY3VsYXRlIGxheWVyIGJvdW5kYXJpZXNcbiAgICovXG4gIC8vIGdldFNhbXBsZURhdGEocm93cylcblxuICAvKipcbiAgICogUGFyc2UgY2VsbCB2YWx1ZSBiYXNlZCBvbiBjb2x1bW4gdHlwZSBhbmQgcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIFZhbHVlIHRoZSBmaWVsZCB2YWx1ZSwgdHlwZSB0aGUgZmllbGQgdHlwZVxuICAgKi9cbiAgLy8gcGFyc2VGaWVsZFZhbHVlKHZhbHVlLCB0eXBlKVxuXG4gIC8vIHNvcnREYXRhc2V0QnlDb2x1bW4oKVxuXG4gIC8qKlxuICAgKiBBc3NlcnQgd2hldGhlciBmaWVsZCBleGlzdFxuICAgKiBAcGFyYW0gZmllbGROYW1lXG4gICAqIEBwYXJhbSBjb25kaXRpb25cbiAgICovXG4gIF9hc3NldEZpZWxkKGZpZWxkTmFtZTogc3RyaW5nLCBjb25kaXRpb246IGFueSk6IHZvaWQge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBDb25zb2xlLmVycm9yKGAke2ZpZWxkTmFtZX0gZG9lc250IGV4aXN0IGluIGRhdGFzZXQgJHt0aGlzLmlkfWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBEYXRhc2V0cyA9IHtcbiAgW2tleTogc3RyaW5nXTogS2VwbGVyVGFibGU8RmllbGQ+O1xufTtcblxuLy8gSEVMUEVSIEZVTkNUSU9OUyAoTUFJTkxZIEVYUE9SVEVEIEZPUiBURVNULi4uKVxuLy8gaGF2ZSB0byBkb3VibGUgZXhjYXBlXG5jb25zdCBzcGVjaWFsQ2hhcmFjdGVyU2V0ID0gYFsjXyZAXFxcXC5cXFxcLVxcXFwgXWA7XG5cbmZ1bmN0aW9uIGZvdW5kTWF0Y2hpbmdGaWVsZHMocmUsIHN1ZmZpeFBhaXIsIGFsbE5hbWVzLCBmaWVsZE5hbWUpIHtcbiAgY29uc3QgcGFydG5lcklkeCA9IGFsbE5hbWVzLmZpbmRJbmRleChcbiAgICBkID0+IGQgPT09IGZpZWxkTmFtZS5yZXBsYWNlKHJlLCBtYXRjaCA9PiBtYXRjaC5yZXBsYWNlKHN1ZmZpeFBhaXJbMF0sIHN1ZmZpeFBhaXJbMV0pKVxuICApO1xuICBsZXQgYWx0SWR4ID0gLTE7XG4gIGlmIChwYXJ0bmVySWR4ID4gLTEpIHtcbiAgICAvLyBpZiBmb3VuZCBwYXJ0bmVyLCBnbyBvbiBhbmQgbG9vayBmb3IgYWx0aXR1ZGVcbiAgICBBTFRJVFVERV9GSUVMRFMuc29tZShhbHQgPT4ge1xuICAgICAgYWx0SWR4ID0gYWxsTmFtZXMuZmluZEluZGV4KFxuICAgICAgICBkID0+IGQgPT09IGZpZWxkTmFtZS5yZXBsYWNlKHJlLCBtYXRjaCA9PiBtYXRjaC5yZXBsYWNlKHN1ZmZpeFBhaXJbMF0sIGFsdCkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFsdElkeCA+IC0xO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7cGFydG5lcklkeCwgYWx0SWR4fTtcbn1cbi8qKlxuICogRmluZCBwb2ludCBmaWVsZHMgcGFpcnMgZnJvbSBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcmV0dXJucyBmb3VuZCBwb2ludCBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQb2ludEZpZWxkUGFpcnMoZmllbGRzOiBGaWVsZFtdKTogRmllbGRQYWlyW10ge1xuICBjb25zdCBhbGxOYW1lcyA9IGZpZWxkcy5tYXAoZiA9PiBmLm5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgLy8gZ2V0IGxpc3Qgb2YgYWxsIGZpZWxkcyB3aXRoIG1hdGNoaW5nIHN1ZmZpeGVzXG4gIGNvbnN0IGFjYzogRmllbGRQYWlyW10gPSBbXTtcbiAgcmV0dXJuIGFsbE5hbWVzLnJlZHVjZSgoY2FycnksIGZpZWxkTmFtZSwgaWR4KSA9PiB7XG4gICAgLy8gVGhpcyBzZWFyY2ggZm9yIHBhaXJzIHdpbGwgZWFybHkgZXhpdCBpZiBmb3VuZC5cbiAgICBmb3IgKGNvbnN0IHN1ZmZpeFBhaXIgb2YgVFJJUF9QT0lOVF9GSUVMRFMpIHtcbiAgICAgIC8vIG1hdGNoIGZpcnN0IHN1ZmZpeFxuICAgICAgLy8gKF58WyNfJkBcXC5cXC1cXCBdKWxhdChbI18mQFxcLlxcLVxcIF18JClcbiAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKF58JHtzcGVjaWFsQ2hhcmFjdGVyU2V0fSkke3N1ZmZpeFBhaXJbMF19KCR7c3BlY2lhbENoYXJhY3RlclNldH18JClgKTtcblxuICAgICAgaWYgKHJlLnRlc3QoZmllbGROYW1lKSkge1xuICAgICAgICBjb25zdCB7cGFydG5lcklkeCwgYWx0SWR4fSA9IGZvdW5kTWF0Y2hpbmdGaWVsZHMocmUsIHN1ZmZpeFBhaXIsIGFsbE5hbWVzLCBmaWVsZE5hbWUpO1xuXG4gICAgICAgIGlmIChwYXJ0bmVySWR4ID4gLTEpIHtcbiAgICAgICAgICBjb25zdCB0cmltTmFtZSA9IGZpZWxkTmFtZS5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xuXG4gICAgICAgICAgY2FycnkucHVzaCh7XG4gICAgICAgICAgICBkZWZhdWx0TmFtZTogdHJpbU5hbWUgfHwgJ3BvaW50JyxcbiAgICAgICAgICAgIHBhaXI6IHtcbiAgICAgICAgICAgICAgbGF0OiB7XG4gICAgICAgICAgICAgICAgZmllbGRJZHg6IGlkeCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGRzW2lkeF0ubmFtZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsbmc6IHtcbiAgICAgICAgICAgICAgICBmaWVsZElkeDogcGFydG5lcklkeCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGRzW3BhcnRuZXJJZHhdLm5hbWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLi4uKGFsdElkeCA+IC0xXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGFsdGl0dWRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGRJZHg6IGFsdElkeCxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGRzW2FsdElkeF0ubmFtZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWZmaXg6IHN1ZmZpeFBhaXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9LCBhY2MpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHBhcmFtIGNvbHVtblxuICogQHBhcmFtIG1vZGVcbiAqIEB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0RGF0YXNldEJ5Q29sdW1uKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZTxGaWVsZD4sXG4gIGNvbHVtbjogc3RyaW5nLFxuICBtb2RlPzogc3RyaW5nXG4pOiBLZXBsZXJUYWJsZTxGaWVsZD4ge1xuICBjb25zdCB7YWxsSW5kZXhlcywgZmllbGRzLCBkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXQ7XG4gIGNvbnN0IGZpZWxkSW5kZXggPSBmaWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJbmRleCA8IDApIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuXG4gIGNvbnN0IHNvcnRCeSA9IFNPUlRfT1JERVJbbW9kZSB8fCAnJ10gfHwgU09SVF9PUkRFUi5BU0NFTkRJTkc7XG5cbiAgaWYgKHNvcnRCeSA9PT0gU09SVF9PUkRFUi5VTlNPUlQpIHtcbiAgICBkYXRhc2V0LnNvcnRDb2x1bW4gPSB7fTtcbiAgICBkYXRhc2V0LnNvcnRPcmRlciA9IG51bGw7XG5cbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuXG4gIGNvbnN0IHNvcnRGdW5jdGlvbiA9IHNvcnRCeSA9PT0gU09SVF9PUkRFUi5BU0NFTkRJTkcgPyBhc2NlbmRpbmcgOiBkZXNjZW5kaW5nO1xuICBjb25zdCBzb3J0T3JkZXIgPSBhbGxJbmRleGVzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IHZhbHVlMSA9IGRhdGFDb250YWluZXIudmFsdWVBdChhLCBmaWVsZEluZGV4KTtcbiAgICBjb25zdCB2YWx1ZTIgPSBkYXRhQ29udGFpbmVyLnZhbHVlQXQoYiwgZmllbGRJbmRleCk7XG4gICAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQodmFsdWUxKSAmJiBub3ROdWxsb3JVbmRlZmluZWQodmFsdWUyKSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUxKSAmJiAhbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlMikpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRGdW5jdGlvbih2YWx1ZTEsIHZhbHVlMik7XG4gIH0pO1xuXG4gIGRhdGFzZXQuc29ydENvbHVtbiA9IHtcbiAgICBbY29sdW1uXTogc29ydEJ5XG4gIH07XG4gIGRhdGFzZXQuc29ydE9yZGVyID0gc29ydE9yZGVyO1xuXG4gIHJldHVybiBkYXRhc2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQ6IEtlcGxlclRhYmxlPEZpZWxkPiwgY29sdW1uOiBzdHJpbmcpOiBLZXBsZXJUYWJsZTxGaWVsZD4ge1xuICBjb25zdCBmaWVsZCA9IGRhdGFzZXQuZ2V0Q29sdW1uRmllbGQoY29sdW1uKTtcbiAgaWYgKCFmaWVsZCkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG5cbiAgbGV0IHBpbm5lZENvbHVtbnM7XG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGFzZXQucGlubmVkQ29sdW1ucykgJiYgZGF0YXNldC5waW5uZWRDb2x1bW5zLmluY2x1ZGVzKGZpZWxkLm5hbWUpKSB7XG4gICAgLy8gdW5waW4gaXRcbiAgICBwaW5uZWRDb2x1bW5zID0gZGF0YXNldC5waW5uZWRDb2x1bW5zLmZpbHRlcihjbyA9PiBjbyAhPT0gZmllbGQubmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcGlubmVkQ29sdW1ucyA9IChkYXRhc2V0LnBpbm5lZENvbHVtbnMgfHwgW10pLmNvbmNhdChmaWVsZC5uYW1lKTtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7cGlubmVkQ29sdW1uc30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlKG9yaWdpbmFsOiBLZXBsZXJUYWJsZTxGaWVsZD4pOiBLZXBsZXJUYWJsZTxGaWVsZD4ge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvcmlnaW5hbCkpLCBvcmlnaW5hbCk7XG59XG5cbi8qKlxuICogQHR5cGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VGFibGVBbmRVcGRhdGUoXG4gIG9yaWdpbmFsOiBLZXBsZXJUYWJsZTxGaWVsZD4sXG4gIG9wdGlvbnM6IFBhcnRpYWw8S2VwbGVyVGFibGU8RmllbGQ+PiA9IHt9XG4pOiBLZXBsZXJUYWJsZTxGaWVsZD4ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMob3B0aW9ucykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgYWNjW2VudHJ5WzBdXSA9IGVudHJ5WzFdO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIGNvcHlUYWJsZShvcmlnaW5hbCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZUFjY2Vzc29yPFxuICBGIGV4dGVuZHMge1xuICAgIHR5cGU/OiBGaWVsZFsndHlwZSddO1xuICAgIGZvcm1hdD86IEZpZWxkWydmb3JtYXQnXTtcbiAgfVxuPihmOiBGLCBpOiBudW1iZXIsIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSB7XG4gIHJldHVybiBtYXliZVRvRGF0ZS5iaW5kKFxuICAgIG51bGwsXG4gICAgLy8gaXMgdGltZVxuICAgIGYudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCxcbiAgICBpLFxuICAgIGYuZm9ybWF0IHx8ICcnLFxuICAgIGRjXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtlcGxlclRhYmxlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQXNCQSxJQUFBRyxlQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFvQkEsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQTJFLFNBQUFNLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxNQUFBQyxDQUFBLElBQUFELENBQUEsdUJBQUFBLENBQUEsQ0FBQVEsTUFBQSxJQUFBTixDQUFBLEtBQUFGLENBQUEsR0FBQUUsQ0FBQSxPQUFBTyxFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQSxFQUFBLFdBQUFILEVB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