igniteui-angular 17.2.8 → 17.2.10

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 (58) hide show
  1. package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +3 -6
  2. package/esm2022/lib/combo/combo.common.mjs +35 -15
  3. package/esm2022/lib/data-operations/filtering-expressions-tree.mjs +3 -3
  4. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +5 -1
  5. package/esm2022/lib/directives/for-of/for_of.directive.mjs +3 -3
  6. package/esm2022/lib/drop-down/drop-down-item.base.mjs +3 -3
  7. package/esm2022/lib/drop-down/drop-down.base.mjs +2 -2
  8. package/esm2022/lib/drop-down/drop-down.common.mjs +1 -1
  9. package/esm2022/lib/drop-down/drop-down.component.mjs +26 -11
  10. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +17 -4
  11. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +14 -9
  12. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +6 -3
  13. package/esm2022/lib/grids/headers/grid-header.component.mjs +8 -2
  14. package/esm2022/lib/grids/state.directive.mjs +3 -3
  15. package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +27 -3
  16. package/esm2022/lib/services/excel/excel-strings.mjs +2 -2
  17. package/fesm2022/igniteui-angular.mjs +139 -54
  18. package/fesm2022/igniteui-angular.mjs.map +1 -1
  19. package/lib/combo/combo.common.d.ts +3 -1
  20. package/lib/core/styles/components/grid/_excel-filtering-component.scss +5 -0
  21. package/lib/core/styles/components/grid/_excel-filtering-theme.scss +5 -0
  22. package/lib/core/styles/components/grid-toolbar/_grid-toolbar-component.scss +0 -4
  23. package/lib/core/styles/components/grid-toolbar/_grid-toolbar-theme.scss +0 -15
  24. package/lib/core/styles/components/navbar/_navbar-theme.scss +26 -9
  25. package/lib/drop-down/drop-down-item.base.d.ts +1 -1
  26. package/lib/drop-down/drop-down.base.d.ts +1 -1
  27. package/lib/drop-down/drop-down.common.d.ts +1 -1
  28. package/lib/drop-down/drop-down.component.d.ts +13 -8
  29. package/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.d.ts +5 -0
  30. package/lib/grids/headers/grid-header.component.d.ts +1 -0
  31. package/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.d.ts +12 -1
  32. package/package.json +2 -2
  33. package/styles/igniteui-angular-dark.css +1 -1
  34. package/styles/igniteui-angular.css +1 -1
  35. package/styles/igniteui-bootstrap-dark.css +1 -1
  36. package/styles/igniteui-bootstrap-light.css +1 -1
  37. package/styles/igniteui-dark-green.css +1 -1
  38. package/styles/igniteui-fluent-dark-excel.css +1 -1
  39. package/styles/igniteui-fluent-dark-word.css +1 -1
  40. package/styles/igniteui-fluent-dark.css +1 -1
  41. package/styles/igniteui-fluent-light-excel.css +1 -1
  42. package/styles/igniteui-fluent-light-word.css +1 -1
  43. package/styles/igniteui-fluent-light.css +1 -1
  44. package/styles/igniteui-indigo-dark.css +1 -1
  45. package/styles/igniteui-indigo-light.css +1 -1
  46. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  47. package/styles/maps/igniteui-angular.css.map +1 -1
  48. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  49. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  50. package/styles/maps/igniteui-dark-green.css.map +1 -1
  51. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  52. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  53. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  54. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  55. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  56. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  57. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  58. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -17,7 +17,7 @@ export class ExcelStrings {
17
17
  }
18
18
  static getStyles() {
19
19
  return ExcelStrings.XML_STRING +
20
- '<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac x16r2" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"><numFmts count="5"><numFmt numFmtId="164" formatCode="&quot;$&quot;#,##0.00"/><numFmt numFmtId="165" formatCode="[$£-809]#,##0.00"/><numFmt numFmtId="166" formatCode="[$¥-804]#,##0.00"/><numFmt numFmtId="167" formatCode="#,##0.00\ [$€-1]"/><numFmt numFmtId="168" formatCode="[$¥-411]#,##0.00"/></numFmts><fonts count="2" x14ac:knownFonts="1"><font><sz val="11"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font><font><sz val="11"/><color rgb="FFB7B7B7"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts><fills count="3"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor rgb="FF0D1822"/><bgColor indexed="64"/></patternFill></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="13"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="165" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="166" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="167" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="168" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="21" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="22" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="10" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles><dxfs count="0"/><tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/><extLst><ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/></ext><ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/></ext></extLst></styleSheet>';
20
+ '<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac x16r2" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"><numFmts count="5"><numFmt numFmtId="164" formatCode="&quot;$&quot;#,##0.00"/><numFmt numFmtId="165" formatCode="[$£-809]#,##0.00"/><numFmt numFmtId="166" formatCode="[$¥-804]#,##0.00"/><numFmt numFmtId="167" formatCode="#,##0.00\ [$€-1]"/><numFmt numFmtId="168" formatCode="[$¥-411]#,##0.00"/></numFmts><fonts count="2" x14ac:knownFonts="1"><font><sz val="11"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font><font><b/><sz val="11"/><color theme="0"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts><fills count="3"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor theme="4"/><bgColor indexed="64"/></patternFill></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="13"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="165" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="166" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="167" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="168" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="21" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="22" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="10" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles><dxfs count="0"/><tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/><extLst><ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/></ext><ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/></ext></extLst></styleSheet>';
21
21
  }
22
22
  static getWorkbook(worksheetName) {
23
23
  return ExcelStrings.XML_STRING + `<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x15" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><fileVersion appName="xl" lastEdited="6" lowestEdited="6" rupBuild="14420"/><workbookPr filterPrivacy="1" defaultThemeVersion="164011"/><bookViews><workbookView xWindow="0" yWindow="0" windowWidth="22260" windowHeight="12645"/></bookViews><sheets><sheet name="${worksheetName}" sheetId="1" r:id="rId1"/></sheets><calcPr calcId="162913"/><extLst><ext uri="{140A7094-0E35-4892-8432-C4D2E57EDEB5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:workbookPr chartTrackingRefBase="1"/></ext></extLst></workbook>`;
@@ -91,4 +91,4 @@ ${tableParts}</worksheet>`;
91
91
  return returnString;
92
92
  }
93
93
  }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leGNlbC9leGNlbC1zdHJpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWM7QUFDZCxNQUFNLE9BQU8sWUFBWTtJQUNyQiw2QkFBNkI7YUFDZCxlQUFVLEdBQUcsNENBQTRDLENBQUM7YUFDMUQsK0JBQTBCLEdBQUcsZ0pBQWdKLENBQUM7SUFFdEwsTUFBTSxDQUFDLE9BQU87UUFDakIsT0FBTyxZQUFZLENBQUMsVUFBVSxHQUFHLHFoQkFBcWhCLENBQUM7SUFDM2pCLENBQUM7SUFFTSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQXFCO1FBQ3RDLE9BQU8sWUFBWSxDQUFDLFVBQVUsR0FBRyxrZ0JBQWtnQixhQUFhLHFOQUFxTixDQUFDO0lBQzF3QixDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU87UUFDakIsT0FBTyxZQUFZLENBQUMsVUFBVSxHQUFHLDBoQkFBMGhCLENBQUM7SUFDaGtCLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUTtRQUNsQixPQUFPLFlBQVksQ0FBQyxVQUFVLEdBQUcseWhOQUF5aE4sQ0FBQztJQUMvak4sQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTO1FBQ25CLE9BQU8sWUFBWSxDQUFDLFVBQVU7WUFDOUIsay9GQUFrL0YsQ0FBQztJQUN2L0YsQ0FBQztJQUVNLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBcUI7UUFDM0MsT0FBTyxZQUFZLENBQUMsVUFBVSxHQUFHLHNrQkFBc2tCLGFBQWEsd1FBQXdRLENBQUM7SUFDajRCLENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCO1FBQzFCLE9BQU8sWUFBWSxDQUFDLFVBQVUsR0FBRyw4T0FBOE8sQ0FBQztJQUNwUixDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0I7UUFDMUMs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Ii8qKiBAaGlkZGVuICovXG5leHBvcnQgY2xhc3MgRXhjZWxTdHJpbmdzIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAgbWF4LWxlbiAqL1xuICAgIHByaXZhdGUgc3RhdGljIFhNTF9TVFJJTkcgPSAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XFxyXFxuJztcbiAgICBwcml2YXRlIHN0YXRpYyBTSEFSRURfU1RSSU5HX1JFTEFUSU9OU0hJUCA9ICc8UmVsYXRpb25zaGlwIElkPVwicklkNFwiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3NcIiBUYXJnZXQ9XCJzaGFyZWRTdHJpbmdzLnhtbFwiIC8+JztcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVscygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRXhjZWxTdHJpbmdzLlhNTF9TVFJJTkcgKyAnPFJlbGF0aW9uc2hpcHMgeG1sbnM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHNcIj48UmVsYXRpb25zaGlwIElkPVwicklkM1wiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVuZGVkLXByb3BlcnRpZXNcIiBUYXJnZXQ9XCJkb2NQcm9wcy9hcHAueG1sXCIvPjxSZWxhdGlvbnNoaXAgSWQ9XCJySWQyXCIgVHlwZT1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXNcIiBUYXJnZXQ9XCJkb2NQcm9wcy9jb3JlLnhtbFwiLz48UmVsYXRpb25zaGlwIElkPVwicklkMVwiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50XCIgVGFyZ2V0PVwieGwvd29ya2Jvb2sueG1sXCIvPjwvUmVsYXRpb25zaGlwcz4nO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QXBwKHdvcmtzaGVldE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBFeGNlbFN0cmluZ3MuWE1MX1NUUklORyArIGA8UHJvcGVydGllcyB4bWxucz1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXNcIiB4bWxuczp2dD1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2RvY1Byb3BzVlR5cGVzXCI+PEFwcGxpY2F0aW9uPk1pY3Jvc29mdCBFeGNlbDwvQXBwbGljYXRpb24+PERvY1NlY3VyaXR5PjA8L0RvY1NlY3VyaXR5PjxTY2FsZUNyb3A+ZmFsc2U8L1NjYWxlQ3JvcD48SGVhZGluZ1BhaXJzPjx2dDp2ZWN0b3Igc2l6ZT1cIjJcIiBiYXNlVHlwZT1cInZhcmlhbnRcIj48dnQ6dmFyaWFudD48dnQ6bHBzdHI+V29ya3NoZWV0czwvdnQ6bHBzdHI+PC92dDp2YXJpYW50Pjx2dDp2YXJpYW50Pjx2dDppND4xPC92dDppND48L3Z0OnZhcmlhbnQ+PC92dDp2ZWN0b3I+PC9IZWFkaW5nUGFpcnM+PFRpdGxlc09mUGFydHM+PHZ0OnZlY3RvciBzaXplPVwiMVwiIGJhc2VUeXBlPVwibHBzdHJcIj48dnQ6bHBzdHI+JHt3b3Jrc2hlZXROYW1lfTwvdnQ6bHBzdHI+PC92dDp2ZWN0b3I+PC9UaXRsZXNPZlBhcnRzPjxDb21wYW55PjwvQ29tcGFueT48TGlua3NVcFRvRGF0ZT5mYWxzZTwvTGlua3NVcFRvRGF0ZT48U2hhcmVkRG9jPmZhbHNlPC9TaGFyZWREb2M+PEh5cGVybGlua3NDaGFuZ2VkPmZhbHNlPC9IeXBlcmxpbmtzQ2hhbmdlZD48QXBwVmVyc2lvbj4xNi4wMzAwPC9BcHBWZXJzaW9uPjwvUHJvcGVydGllcz5gO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q29yZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRXhjZWxTdHJpbmdzLlhNTF9TVFJJTkcgKyAnPGNwOmNvcmVQcm9wZXJ0aWVzIHhtbG5zOmNwPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXNcIiB4bWxuczpkYz1cImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIgeG1sbnM6ZGN0ZXJtcz1cImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIiB4bWxuczpkY21pdHlwZT1cImh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9cIiB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiPjxkYzpjcmVhdG9yPjwvZGM6Y3JlYXRvcj48Y3A6bGFzdE1vZGlmaWVkQnk+PC9jcDpsYXN0TW9kaWZpZWRCeT48ZGN0ZXJtczpjcmVhdGVkIHhzaTp0eXBlPVwiZGN0ZXJtczpXM0NEVEZcIj4yMDE1LTA2LTA1VDE4OjE3OjIwWjwvZGN0ZXJtczpjcmVhdGVkPjxkY3Rlcm1zOm1vZGlmaWVkIHhzaTp0eXBlPVwiZGN0ZXJtczpXM0NEVEZcIj4yMDE1LTA2LTA1VDE4OjE3OjI2WjwvZGN0ZXJtczptb2RpZmllZD48L2NwOmNvcmVQcm9wZXJ0aWVzPic7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRUaGVtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRXhjZWxTdHJpbmdzLlhNTF9TVFJJTkcgKyAnPGE6dGhlbWUgeG1sbnM6YT1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluXCIgbmFtZT1cIk9mZmljZSBUaGVtZVwiPjxhOnRoZW1lRWxlbWVudHM+PGE6Y2xyU2NoZW1lIG5hbWU9XCJPZmZpY2VcIj48YTpkazE+PGE6c3lzQ2xyIHZhbD1cIndpbmRvd1RleHRcIiBsYXN0Q2xyPVwiMDAwMDAwXCIvPjwvYTpkazE+PGE6bHQxPjxhOnN5c0NsciB2YWw9XCJ3aW5kb3dcIiBsYXN0Q2xyPVwiRkZGRkZGXCIvPjwvYTpsdDE+PGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPVwiNDQ1NDZBXCIvPjwvYTpkazI+PGE6bHQyPjxhOnNyZ2JDbHIgdmFsPVwiRTdFNkU2XCIvPjwvYTpsdDI+PGE6YWNjZW50MT48YTpzcmdiQ2xyIHZhbD1cIjVCOUJENVwiLz48L2E6YWNjZW50MT48YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPVwiRUQ3RDMxXCIvPjwvYTphY2NlbnQyPjxhOmFjY2VudDM+PGE6c3JnYkNsciB2YWw9XCJBNUE1QTVcIi8+PC9hOmFjY2VudDM+PGE6YWNjZW50ND48YTpzcmdiQ2xyIHZhbD1cIkZGQzAwMFwiLz48L2E6YWNjZW50ND48YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPVwiNDQ3MkM0XCIvPjwvYTphY2NlbnQ1PjxhOmFjY2VudDY+PGE6c3JnYkNsciB2YWw9XCI3MEFENDdcIi8+PC9hOmFjY2VudDY+PGE6aGxpbms+PGE6c3JnYkNsciB2YWw9XCIwNTYzQzFcIi8+PC9hOmhsaW5rPjxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPVwiOTU0RjcyXCIvPjwvYTpmb2xIbGluaz48L2E6Y2xyU2NoZW1lPjxhOmZvbnRTY2hlbWUgbmFtZT1cIk9mZmljZVwiPjxhOm1ham9yRm9udD48YTpsYXRpbiB0eXBlZmFjZT1cIkNhbGlicmkgTGlnaHRcIiBwYW5vc2U9XCIwMjBGMDMwMjAyMDIwNDAzMDIwNFwiLz48YTplYSB0eXBlZmFjZT1cIlwiLz48YTpjcyB0eXBlZmFjZT1cIlwiLz48YTpmb250IHNjcmlwdD1cIkpwYW5cIiB0eXBlZmFjZT1cIua4uOOCtOOCt+ODg+OCryBMaWdodFwiLz48YTpmb250IHNjcmlwdD1cIkhhbmdcIiB0eXBlZmFjZT1cIuunkeydgCDqs6DrlJVcIi8+PGE6Zm9udCBzY3JpcHQ9XCJIYW5zXCIgdHlwZWZhY2U9XCLnrYnnur8gTGlnaHRcIi8+PGE6Zm9udCBzY3JpcHQ9XCJIYW50XCIgdHlwZWZhY2U9XCLmlrDntLDmmI7pq5RcIi8+PGE6Zm9udCBzY3JpcHQ9XCJBcmFiXCIgdHlwZWZhY2U9XCJUaW1lcyBOZXcgUm9tYW5cIi8+PGE6Zm9udCBzY3JpcHQ9XCJIZWJyXCIgdHlwZWZhY2U9XCJUaW1lcyBOZXcgUm9tYW5cIi8+PGE6Zm9udCBzY3JpcHQ9XCJUaGFpXCIgdHlwZWZhY2U9XCJUYWhvbWFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJFdGhpXCIgdHlwZWZhY2U9XCJOeWFsYVwiLz48YTpmb250IHNjcmlwdD1cIkJlbmdcIiB0eXBlZmFjZT1cIlZyaW5kYVwiLz48YTpmb250IHNjcmlwdD1cIkd1anJcIiB0eXBlZmFjZT1cIlNocnV0aVwiLz48YTpmb250IHNjcmlwdD1cIktobXJcIiB0eXBlZmFjZT1cIk1vb2xCb3JhblwiLz48YTpmb250IHNjcmlwdD1cIktuZGFcIiB0eXBlZmFjZT1cIlR1bmdhXCIvPjxhOmZvbnQgc2NyaXB0PVwiR3VydVwiIHR5cGVmYWNlPVwiUmFhdmlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJDYW5zXCIgdHlwZWZhY2U9XCJFdXBoZW1pYVwiLz48YTpmb250IHNjcmlwdD1cIkNoZXJcIiB0eXBlZmFjZT1cIlBsYW50YWdlbmV0IENoZXJva2VlXCIvPjxhOmZvbnQgc2NyaXB0PVwiWWlpaVwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IFlpIEJhaXRpXCIvPjxhOmZvbnQgc2NyaXB0PVwiVGlidFwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IEhpbWFsYXlhXCIvPjxhOmZvbnQgc2NyaXB0PVwiVGhhYVwiIHR5cGVmYWNlPVwiTVYgQm9saVwiLz48YTpmb250IHNjcmlwdD1cIkRldmFcIiB0eXBlZmFjZT1cIk1hbmdhbFwiLz48YTpmb250IHNjcmlwdD1cIlRlbHVcIiB0eXBlZmFjZT1cIkdhdXRhbWlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJUYW1sXCIgdHlwZWZhY2U9XCJMYXRoYVwiLz48YTpmb250IHNjcmlwdD1cIlN5cmNcIiB0eXBlZmFjZT1cIkVzdHJhbmdlbG8gRWRlc3NhXCIvPjxhOmZvbnQgc2NyaXB0PVwiT3J5YVwiIHR5cGVmYWNlPVwiS2FsaW5nYVwiLz48YTpmb250IHNjcmlwdD1cIk1seW1cIiB0eXBlZmFjZT1cIkthcnRpa2FcIi8+PGE6Zm9udCBzY3JpcHQ9XCJMYW9vXCIgdHlwZWZhY2U9XCJEb2tDaGFtcGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJTaW5oXCIgdHlwZWZhY2U9XCJJc2tvb2xhIFBvdGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJNb25nXCIgdHlwZWZhY2U9XCJNb25nb2xpYW4gQmFpdGlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJWaWV0XCIgdHlwZWZhY2U9XCJUaW1lcyBOZXcgUm9tYW5cIi8+PGE6Zm9udCBzY3JpcHQ9XCJVaWdoXCIgdHlwZWZhY2U9XCJNaWNyb3NvZnQgVWlnaHVyXCIvPjxhOmZvbnQgc2NyaXB0PVwiR2VvclwiIHR5cGVmYWNlPVwiU3lsZmFlblwiLz48L2E6bWFqb3JGb250PjxhOm1pbm9yRm9udD48YTpsYXRpbiB0eXBlZmFjZT1cIkNhbGlicmlcIiBwYW5vc2U9XCIwMjBGMDUwMjAyMDIwNDAzMDIwNFwiLz48YTplYSB0eXBlZmFjZT1cIlwiLz48YTpjcyB0eXBlZmFjZT1cIlwiLz48YTpmb250IHNjcmlwdD1cIkpwYW5cIiB0eXBlZmFjZT1cIua4uOOCtOOCt+ODg+OCr1wiLz48YTpmb250IHNjcmlwdD1cIkhhbmdcIiB0eXBlZmFjZT1cIuunkeydgCDqs6DrlJVcIi8+PGE6Zm9udCBzY3JpcHQ9XCJIYW5zXCIgdHlwZWZhY2U9XCLnrYnnur9cIi8+PGE6Zm9udCBzY3JpcHQ9XCJIYW50XCIgdHlwZWZhY2U9XCLmlrDntLDmmI7pq5RcIi8+PGE6Zm9udCBzY3JpcHQ9XCJBcmFiXCIgdHlwZWZhY2U9XCJBcmlhbFwiLz48YTpmb250IHNjcmlwdD1cIkhlYnJcIiB0eXBlZmFjZT1cIkFyaWFsXCIvPjxhOmZvbnQgc2NyaXB0PVwiVGhhaVwiIHR5cGVmYWNlPVwiVGFob21hXCIvPjxhOmZvbnQgc2NyaXB0PVwiRXRoaVwiIHR5cGVmYWNlPVwiTnlhbGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJCZW5nXCIgdHlwZWZhY2U9XCJWcmluZGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJHdWpyXCIgdHlwZWZhY2U9XCJTaHJ1dGlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJLaG1yXCIgdHlwZWZhY2U9XCJEYXVuUGVuaFwiLz48YTpmb250IHNjcmlwdD1cIktuZGFcIiB0eXBlZmFjZT1cIlR1bmdhXCIvPjxhOmZvbnQgc2NyaXB0PVwiR3VydVwiIHR5cGVmYWNlPVwiUmFhdmlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJDYW5zXCIgdHlwZWZhY2U9XCJFdXBoZW1pYVwiLz48YTpmb250IHNjcmlwdD1cIkNoZXJcIiB0eXBlZmFjZT1cIlBsYW50YWdlbmV0IENoZXJva2VlXCIvPjxhOmZvbnQgc2NyaXB0PVwiWWlpaVwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IFlpIEJhaXRpXCIvPjxhOmZvbnQgc2NyaXB0PVwiVGlidFwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IEhpbWFsYXlhXCIvPjxhOmZvbnQgc2NyaXB0PVwiVGhhYVwiIHR5cGVmYWNlPVwiTVYgQm9saVwiLz48YTpmb250IHNjcmlwdD1cIkRldmFcIiB0eXBlZmFjZT1cIk1hbmdhbFwiLz48YTpmb250IHNjcmlwdD1cIlRlbHVcIiB0eXBlZmFjZT1cIkdhdXRhbWlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJUYW1sXCIgdHlwZWZhY2U9XCJMYXRoYVwiLz48YTpmb250IHNjcmlwdD1cIlN5cmNcIiB0eXBlZmFjZT1cIkVzdHJhbmdlbG8gRWRlc3NhXCIvPjxhOmZvbnQgc2NyaXB0PVwiT3J5YVwiIHR5cGVmYWNlPVwiS2FsaW5nYVwiLz48YTpmb250IHNjcmlwdD1cIk1seW1cIiB0eXBlZmFjZT1cIkthcnRpa2FcIi8+PGE6Zm9udCBzY3JpcHQ9XCJMYW9vXCIgdHlwZWZhY2U9XCJEb2tDaGFtcGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJTaW5oXCIgdHlwZWZhY2U9XCJJc2tvb2xhIFBvdGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJNb25nXCIgdHlwZWZhY2U9XCJNb25nb2xpYW4gQmFpdGlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJWaWV0XCIgdHlwZWZhY2U9XCJBcmlhbFwiLz48YTpmb250IHNjcmlwdD1cIlVpZ2hcIiB0eXBlZmFjZT1cIk1pY3Jvc29mdCBVaWdodXJcIi8+PGE6Zm9udCBzY3JpcHQ9XCJHZW9yXCIgdHlwZWZhY2U9XCJTeWxmYWVuXCIvPjwvYTptaW5vckZvbnQ+PC9hOmZvbnRTY2hlbWU+PGE6Zm10U2NoZW1lIG5hbWU9XCJPZmZpY2VcIj48YTpmaWxsU3R5bGVMc3Q+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiLz48L2E6c29saWRGaWxsPjxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT1cIjFcIj48YTpnc0xzdD48YTpncyBwb3M9XCIwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6bHVtTW9kIHZhbD1cIjExMDAwMFwiLz48YTpzYXRNb2QgdmFsPVwiMTA1MDAwXCIvPjxhOnRpbnQgdmFsPVwiNjcwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+PGE6Z3MgcG9zPVwiNTAwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTpsdW1Nb2QgdmFsPVwiMTA1MDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIxMDMwMDBcIi8+PGE6dGludCB2YWw9XCI3MzAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48YTpncyBwb3M9XCIxMDAwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTpsdW1Nb2QgdmFsPVwiMTA1MDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIxMDkwMDBcIi8+PGE6dGludCB2YWw9XCI4MTAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48L2E6Z3NMc3Q+PGE6bGluIGFuZz1cIjU0MDAwMDBcIiBzY2FsZWQ9XCIwXCIvPjwvYTpncmFkRmlsbD48YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9XCIxXCI+PGE6Z3NMc3Q+PGE6Z3MgcG9zPVwiMFwiPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiPjxhOnNhdE1vZCB2YWw9XCIxMDMwMDBcIi8+PGE6bHVtTW9kIHZhbD1cIjEwMjAwMFwiLz48YTp0aW50IHZhbD1cIjk0MDAwXCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPjxhOmdzIHBvcz1cIjUwMDAwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6c2F0TW9kIHZhbD1cIjExMDAwMFwiLz48YTpsdW1Nb2QgdmFsPVwiMTAwMDAwXCIvPjxhOnNoYWRlIHZhbD1cIjEwMDAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48YTpncyBwb3M9XCIxMDAwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTpsdW1Nb2QgdmFsPVwiOTkwMDBcIi8+PGE6c2F0TW9kIHZhbD1cIjEyMDAwMFwiLz48YTpzaGFkZSB2YWw9XCI3ODAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48L2E6Z3NMc3Q+PGE6bGluIGFuZz1cIjU0MDAwMDBcIiBzY2FsZWQ9XCIwXCIvPjwvYTpncmFkRmlsbD48L2E6ZmlsbFN0eWxlTHN0PjxhOmxuU3R5bGVMc3Q+PGE6bG4gdz1cIjYzNTBcIiBjYXA9XCJmbGF0XCIgY21wZD1cInNuZ1wiIGFsZ249XCJjdHJcIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPVwic29saWRcIi8+PGE6bWl0ZXIgbGltPVwiODAwMDAwXCIvPjwvYTpsbj48YTpsbiB3PVwiMTI3MDBcIiBjYXA9XCJmbGF0XCIgY21wZD1cInNuZ1wiIGFsZ249XCJjdHJcIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPVwic29saWRcIi8+PGE6bWl0ZXIgbGltPVwiODAwMDAwXCIvPjwvYTpsbj48YTpsbiB3PVwiMTkwNTBcIiBjYXA9XCJmbGF0XCIgY21wZD1cInNuZ1wiIGFsZ249XCJjdHJcIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPVwic29saWRcIi8+PGE6bWl0ZXIgbGltPVwiODAwMDAwXCIvPjwvYTpsbj48L2E6bG5TdHlsZUxzdD48YTplZmZlY3RTdHlsZUxzdD48YTplZmZlY3RTdHlsZT48YTplZmZlY3RMc3QvPjwvYTplZmZlY3RTdHlsZT48YTplZmZlY3RTdHlsZT48YTplZmZlY3RMc3QvPjwvYTplZmZlY3RTdHlsZT48YTplZmZlY3RTdHlsZT48YTplZmZlY3RMc3Q+PGE6b3V0ZXJTaGR3IGJsdXJSYWQ9XCI1NzE1MFwiIGRpc3Q9XCIxOTA1MFwiIGRpcj1cIjU0MDAwMDBcIiBhbGduPVwiY3RyXCIgcm90V2l0aFNoYXBlPVwiMFwiPjxhOnNyZ2JDbHIgdmFsPVwiMDAwMDAwXCI+PGE6YWxwaGEgdmFsPVwiNjMwMDBcIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz48L2E6ZWZmZWN0THN0PjwvYTplZmZlY3RTdHlsZT48L2E6ZWZmZWN0U3R5bGVMc3Q+PGE6YmdGaWxsU3R5bGVMc3Q+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiLz48L2E6c29saWRGaWxsPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTp0aW50IHZhbD1cIjk1MDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIxNzAwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT1cIjFcIj48YTpnc0xzdD48YTpncyBwb3M9XCIwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6dGludCB2YWw9XCI5MzAwMFwiLz48YTpzYXRNb2QgdmFsPVwiMTUwMDAwXCIvPjxhOnNoYWRlIHZhbD1cIjk4MDAwXCIvPjxhOmx1bU1vZCB2YWw9XCIxMDIwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+PGE6Z3MgcG9zPVwiNTAwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTp0aW50IHZhbD1cIjk4MDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIxMzAwMDBcIi8+PGE6c2hhZGUgdmFsPVwiOTAwMDBcIi8+PGE6bHVtTW9kIHZhbD1cIjEwMzAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48YTpncyBwb3M9XCIxMDAwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTpzaGFkZSB2YWw9XCI2MzAwMFwiLz48YTpzYXRNb2QgdmFsPVwiMTIwMDAwXCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPjwvYTpnc0xzdD48YTpsaW4gYW5nPVwiNTQwMDAwMFwiIHNjYWxlZD1cIjBcIi8+PC9hOmdyYWRGaWxsPjwvYTpiZ0ZpbGxTdHlsZUxzdD48L2E6Zm10U2NoZW1lPjwvYTp0aGVtZUVsZW1lbnRzPjxhOm9iamVjdERlZmF1bHRzLz48YTpleHRyYUNsclNjaGVtZUxzdC8+PGE6ZXh0THN0PjxhOmV4dCB1cmk9XCJ7MDVBNEMyNUMtMDg1RS00MzQwLTg1QTMtQTU1MzFFNTEwREIyfVwiPjx0aG0xNTp0aGVtZUZhbWlseSB4bWxuczp0aG0xNT1cImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3RoZW1lbWwvMjAxMi9tYWluXCIgbmFtZT1cIk9mZmljZSBUaGVtZVwiIGlkPVwiezYyRjkzOUI2LTkzQUYtNERCOC05QzZCLUQ2QzdERkRDNTg5Rn1cIiB2aWQ9XCJ7NEEzQzQ2RTgtNjFDQy00NjAzLUE1ODktNzQyMkE0N0E4RTRBfVwiLz48L2E6ZXh0PjwvYTpleHRMc3Q+PC9hOnRoZW1lPic7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTdHlsZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEV4Y2VsU3RyaW5ncy5YTUxfU1RSSU5HICtcbiAgICAgICAgJzxzdHlsZVNoZWV0IHhtbG5zPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluXCIgeG1sbnM6bWM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNlwiIG1jOklnbm9yYWJsZT1cIngxNGFjIHgxNnIyXCIgeG1sbnM6eDE0YWM9XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hY1wiIHhtbG5zOngxNnIyPVwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDE1LzAyL21haW5cIj48bnVtRm10cyBjb3VudD1cIjVcIj48bnVtRm10IG51bUZtdElkPVwiMTY0XCIgZm9ybWF0Q29kZT1cIiZxdW90OyQmcXVvdDsjLCMjMC4wMFwiLz48bnVtRm10IG51bUZtdElkPVwiMTY1XCIgZm9ybWF0Q29kZT1cIlskwqMtODA5XSMsIyMwLjAwXCIvPjxudW1GbXQgbnVtRm10SWQ9XCIxNjZcIiBmb3JtYXRDb2RlPVwiWyTCpS04MDRdIywjIzAuMDBcIi8+PG51bUZtdCBudW1GbXRJZD1cIjE2N1wiIGZvcm1hdENvZGU9XCIjLCMjMC4wMFxcIFsk4oKsLTFdXCIvPjxudW1GbXQgbnVtRm10SWQ9XCIxNjhcIiBmb3JtYXRDb2RlPVwiWyTCpS00MTFdIywjIzAuMDBcIi8+PC9udW1GbXRzPjxmb250cyBjb3VudD1cIjJcIiB4MTRhYzprbm93bkZvbnRzPVwiMVwiPjxmb250PjxzeiB2YWw9XCIxMVwiLz48Y29sb3IgdGhlbWU9XCIxXCIvPjxuYW1lIHZhbD1cIkNhbGlicmlcIi8+PGZhbWlseSB2YWw9XCIyXCIvPjxzY2hlbWUgdmFsPVwibWlub3JcIi8+PC9mb250Pjxmb250PjxzeiB2YWw9XCIxMVwiLz48Y29sb3IgcmdiPVwiRkZCN0I3QjdcIi8+PG5hbWUgdmFsPVwiQ2FsaWJyaVwiLz48ZmFtaWx5IHZhbD1cIjJcIi8+PHNjaGVtZSB2YWw9XCJtaW5vclwiLz48L2ZvbnQ+PC9mb250cz48ZmlsbHMgY291bnQ9XCIzXCI+PGZpbGw+PHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPVwibm9uZVwiLz48L2ZpbGw+PGZpbGw+PHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPVwiZ3JheTEyNVwiLz48L2ZpbGw+PGZpbGw+PHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPVwic29saWRcIj48ZmdDb2xvciByZ2I9XCJGRjBEMTgyMlwiLz48YmdDb2xvciBpbmRleGVkPVwiNjRcIi8+PC9wYXR0ZXJuRmlsbD48L2ZpbGw+PC9maWxscz48Ym9yZGVycyBjb3VudD1cIjFcIj48Ym9yZGVyPjxsZWZ0Lz48cmlnaHQvPjx0b3AvPjxib3R0b20vPjxkaWFnb25hbC8+PC9ib3JkZXI+PC9ib3JkZXJzPjxjZWxsU3R5bGVYZnMgY291bnQ9XCIxXCI+PHhmIG51bUZtdElkPVwiMFwiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIvPjwvY2VsbFN0eWxlWGZzPjxjZWxsWGZzIGNvdW50PVwiMTNcIj48eGYgbnVtRm10SWQ9XCIwXCIgZm9udElkPVwiMFwiIGZpbGxJZD1cIjBcIiBib3JkZXJJZD1cIjBcIiB4ZklkPVwiMFwiLz48eGYgbnVtRm10SWQ9XCIwXCIgZm9udElkPVwiMFwiIGZpbGxJZD1cIjBcIiBib3JkZXJJZD1cIjBcIiB4ZklkPVwiMFwiIGFwcGx5TnVtYmVyRm9ybWF0PVwiMVwiLz48eGYgbnVtRm10SWQ9XCIxNFwiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIiBhcHBseU51bWJlckZvcm1hdD1cIjFcIi8+PHhmIG51bUZtdElkPVwiMFwiIGZvbnRJZD1cIjFcIiBmaWxsSWQ9XCIyXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIi8+PHhmIG51bUZtdElkPVwiMFwiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIiBhcHBseUFsaWdubWVudD1cIjFcIj48YWxpZ25tZW50IGhvcml6b250YWw9XCJjZW50ZXJcIiB2ZXJ0aWNhbD1cImNlbnRlclwiLz48L3hmPjx4ZiBudW1GbXRJZD1cIjE2NFwiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIiBhcHBseU51bWJlckZvcm1hdD1cIjFcIi8+PHhmIG51bUZtdElkPVwiMTY1XCIgZm9udElkPVwiMFwiIGZpbGxJZD1cIjBcIiBib3JkZXJJZD1cIjBcIiB4ZklkPVwiMFwiIGFwcGx5TnVtYmVyRm9ybWF0PVwiMVwiLz48eGYgbnVtRm10SWQ9XCIxNjZcIiBmb250SWQ9XCIwXCIgZmlsbElkPVwiMFwiIGJvcmRlcklkPVwiMFwiIHhmSWQ9XCIwXCIgYXBwbHlOdW1iZXJGb3JtYXQ9XCIxXCIvPjx4ZiBudW1GbXRJZD1cIjE2N1wiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIiBhcHBseU51bWJlckZvcm1hdD1cIjFcIi8+PHhmIG51bUZtdElkPVwiMTY4XCIgZm9udElkPVwiMFwiIGZpbGxJZD1cIjBcIiBib3JkZXJJZD1cIjBcIiB4ZklkPVwiMFwiIGFwcGx5TnVtYmVyRm9ybWF0PVwiMVwiLz48eGYgbnVtRm10SWQ9XCIyMVwiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIiBhcHBseU51bWJlckZvcm1hdD1cIjFcIi8+PHhmIG51bUZtdElkPVwiMjJcIiBmb250SWQ9XCIwXCIgZmlsbElkPVwiMFwiIGJvcmRlcklkPVwiMFwiIHhmSWQ9XCIwXCIgYXBwbHlOdW1iZXJGb3JtYXQ9XCIxXCIvPjx4ZiBudW1GbXRJZD1cIjEwXCIgZm9udElkPVwiMFwiIGZpbGxJZD1cIjBcIiBib3JkZXJJZD1cIjBcIiB4ZklkPVwiMFwiIGFwcGx5TnVtYmVyRm9ybWF0PVwiMVwiLz48L2NlbGxYZnM+PGNlbGxTdHlsZXMgY291bnQ9XCIxXCI+PGNlbGxTdHlsZSBuYW1lPVwiTm9ybWFsXCIgeGZJZD1cIjBcIiBidWlsdGluSWQ9XCIwXCIvPjwvY2VsbFN0eWxlcz48ZHhmcyBjb3VudD1cIjBcIi8+PHRhYmxlU3R5bGVzIGNvdW50PVwiMFwiIGRlZmF1bHRUYWJsZVN0eWxlPVwiVGFibGVTdHlsZU1lZGl1bTJcIiBkZWZhdWx0UGl2b3RTdHlsZT1cIlBpdm90U3R5bGVMaWdodDE2XCIvPjxleHRMc3Q+PGV4dCB1cmk9XCJ7RUI3OURFRjItODBCOC00M2U1LTk1QkQtNTRDQkRERjkwMjBDfVwiIHhtbG5zOngxND1cImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L21haW5cIj48eDE0OnNsaWNlclN0eWxlcyBkZWZhdWx0U2xpY2VyU3R5bGU9XCJTbGljZXJTdHlsZUxpZ2h0MVwiLz48L2V4dD48ZXh0IHVyaT1cIns5MjYwQTUxMC1GMzAxLTQ2YTgtODYzNS1GNTEyRDY0QkU1RjV9XCIgeG1sbnM6eDE1PVwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDEwLzExL21haW5cIj48eDE1OnRpbWVsaW5lU3R5bGVzIGRlZmF1bHRUaW1lbGluZVN0eWxlPVwiVGltZVNsaWNlclN0eWxlTGlnaHQxXCIvPjwvZXh0PjwvZXh0THN0Pjwvc3R5bGVTaGVldD4nO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0V29ya2Jvb2sod29ya3NoZWV0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEV4Y2VsU3RyaW5ncy5YTUxfU1RSSU5HICsgYDx3b3JrYm9vayB4bWxucz1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpblwiIHhtbG5zOnI9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzXCIgeG1sbnM6bWM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNlwiIG1jOklnbm9yYWJsZT1cIngxNVwiIHhtbG5zOngxNT1cImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxMC8xMS9tYWluXCI+PGZpbGVWZXJzaW9uIGFwcE5hbWU9XCJ4bFwiIGxhc3RFZGl0ZWQ9XCI2XCIgbG93ZXN0RWRpdGVkPVwiNlwiIHJ1cEJ1aWxkPVwiMTQ0MjBcIi8+PHdvcmtib29rUHIgZmlsdGVyUHJpdmFjeT1cIjFcIiBkZWZhdWx0VGhlbWVWZXJzaW9uPVwiMTY0MDExXCIvPjxib29rVmlld3M+PHdvcmtib29rVmlldyB4V2luZG93PVwiMFwiIHlXaW5kb3c9XCIwXCIgd2luZG93V2lkdGg9XCIyMjI2MFwiIHdpbmRvd0hlaWdodD1cIjEyNjQ1XCIvPjwvYm9va1ZpZXdzPjxzaGVldHM+PHNoZWV0IG5hbWU9XCIke3dvcmtzaGVldE5hbWV9XCIgc2hlZXRJZD1cIjFcIiByOmlkPVwicklkMVwiLz48L3NoZWV0cz48Y2FsY1ByIGNhbGNJZD1cIjE2MjkxM1wiLz48ZXh0THN0PjxleHQgdXJpPVwiezE0MEE3MDk0LTBFMzUtNDg5Mi04NDMyLUM0RDJFNTdFREVCNX1cIiB4bWxuczp4MTU9XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMTAvMTEvbWFpblwiPjx4MTU6d29ya2Jvb2tQciBjaGFydFRyYWNraW5nUmVmQmFzZT1cIjFcIi8+PC9leHQ+PC9leHRMc3Q+PC93b3JrYm9vaz5gO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0V29ya3NoZWV0UmVscygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRXhjZWxTdHJpbmdzLlhNTF9TVFJJTkcgKyBgPFJlbGF0aW9uc2hpcHMgeG1sbnM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHNcIj48UmVsYXRpb25zaGlwIElkPVwicklkMVwiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RhYmxlXCIgVGFyZ2V0PVwiLi4vdGFibGVzL3RhYmxlMS54bWxcIi8+PC9SZWxhdGlvbnNoaXBzPmA7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRXb3JrYm9va1JlbHMoaGFzU2hhcmVkU3RyaW5ncyk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXRWYWwgPSBFeGNlbFN0cmluZ3MuWE1MX1NUUklORyArIGA8UmVsYXRpb25zaGlwcyB4bWxucz1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwc1wiPjxSZWxhdGlvbnNoaXAgSWQ9XCJySWQzXCIgVHlwZT1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc3R5bGVzXCIgVGFyZ2V0PVwic3R5bGVzLnhtbFwiLz48UmVsYXRpb25zaGlwIElkPVwicklkMlwiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lXCIgVGFyZ2V0PVwidGhlbWUvdGhlbWUxLnhtbFwiLz48UmVsYXRpb25zaGlwIElkPVwicklkMVwiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldFwiIFRhcmdldD1cIndvcmtzaGVldHMvc2hlZXQxLnhtbFwiLz5gO1xuXG4gICAgICAgIGlmIChoYXNTaGFyZWRTdHJpbmdzKSB7XG4gICAgICAgICAgICByZXRWYWwgKz0gRXhjZWxTdHJpbmdzLlNIQVJFRF9TVFJJTkdfUkVMQVRJT05TSElQO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0VmFsICs9ICc8L1JlbGF0aW9uc2hpcHM+JztcblxuICAgICAgICByZXR1cm4gcmV0VmFsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0U2hlZXRYTUwoZGltZW5zaW9uOiBzdHJpbmcsIGZyZWV6ZVBhbmU6IHN0cmluZywgY29sczogc3RyaW5nLCBzaGVldERhdGE6IHN0cmluZywgaGFzVGFibGU6IGJvb2xlYW4sIG91dGxpbmVMZXZlbCA9IDAsIGlzSGllcmFyY2hpY2FsOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaGFzT3V0bGluZSA9IG91dGxpbmVMZXZlbCA+IDA7XG4gICAgICAgIGNvbnN0IHRhYmxlUGFydHMgPSBoYXNUYWJsZSA/ICc8dGFibGVQYXJ0cyBjb3VudD1cIjFcIj48dGFibGVQYXJ0IHI6aWQ9XCJySWQxXCIvPjwvdGFibGVQYXJ0cz4nIDogJyc7XG4gICAgICAgIGNvbnN0IHNoZWV0T3V0bGluZVByb3AgPSBoYXNPdXRsaW5lID8gJzxzaGVldFByPjxvdXRsaW5lUHIgc3VtbWFyeUJlbG93PVwiMFwiLz48L3NoZWV0UHI+JyA6ICcnO1xuICAgICAgICBjb25zdCBzT3V0bGluZUxldmVsID0gIGhhc091dGxpbmUgPyBgb3V0bGluZUxldmVsUm93PVwiJHtvdXRsaW5lTGV2ZWx9XCJgIDogJyc7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBpc0hpZXJhcmNoaWNhbCA/ICcnIDogYDxkaW1lbnNpb24gcmVmPVwiJHtkaW1lbnNpb259XCIvPmA7XG5cbiAgICAgICAgLy8gcmV0dXJuIEV4Y2VsU3RyaW5ncy5YTUxfU1RSSU5HICtcbiAgICAgICAgLy8gICAgICc8d29ya3NoZWV0IHhtbG5zPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluXCIgeG1sbnM6cj1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHNcIiB4bWxuczptYz1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2XCIgbWM6SWdub3JhYmxlPVwieDE0YWNcIiB4bWxuczp4MTRhYz1cImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L2FjXCI+PGRpbWVuc2lvbiByZWY9XCInICsgZGltZW5zaW9uICsgJ1wiLz48c2hlZXRWaWV3cz48c2hlZXRWaWV3IHRhYlNlbGVjdGVkPVwiMVwiIHdvcmtib29rVmlld0lkPVwiMFwiPicgKyBmcmVlemVQYW5lICsgJzwvc2hlZXRWaWV3Pjwvc2hlZXRWaWV3cz48c2hlZXRGb3JtYXRQciBkZWZhdWx0Um93SGVpZ2h0PVwiMTVcIiB4MTRhYzpkeURlc2NlbnQ9XCIwLjI1XCIvPicgKyBjb2xzICsgc2hlZXREYXRhICsgJzxwYWdlTWFyZ2lucyBsZWZ0PVwiMC43XCIgcmlnaHQ9XCIwLjdcIiB0b3A9XCIwLjc1XCIgYm90dG9tPVwiMC43NVwiIGhlYWRlcj1cIjAuM1wiIGZvb3Rlcj1cIjAuM1wiLz4nICsgdGFibGVQYXJ0cyArICc8L3dvcmtzaGVldD4nO1xuXG4gICAgICAgIHJldHVybiBgJHtFeGNlbFN0cmluZ3MuWE1MX1NUUklOR31cbjx3b3Jrc2hlZXQgeG1sbnM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW5cIiB4bWxuczpyPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwc1wiIHhtbG5zOm1jPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDZcIiBtYzpJZ25vcmFibGU9XCJ4MTRhY1wiIHhtbG5zOngxNGFjPVwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWNcIj5cbiR7c2hlZXRPdXRsaW5lUHJvcH1cbiR7ZGltZW5zaW9uc31cbjxzaGVldFZpZXdzPjxzaGVldFZpZXcgdGFiU2VsZWN0ZWQ9XCIxXCIgd29ya2Jvb2tWaWV3SWQ9XCIwXCI+JHtmcmVlemVQYW5lfTwvc2hlZXRWaWV3Pjwvc2hlZXRWaWV3cz5cbjxzaGVldEZvcm1hdFByIGRlZmF1bHRSb3dIZWlnaHQ9XCIxNVwiICR7c091dGxpbmVMZXZlbH0geDE0YWM6ZHlEZXNjZW50PVwiMC4yNVwiLz5cbiR7Y29sc31cbiR7c2hlZXREYXRhfVxuPHBhZ2VNYXJnaW5zIGxlZnQ9XCIwLjdcIiByaWdodD1cIjAuN1wiIHRvcD1cIjAuNzVcIiBib3R0b209XCIwLjc1XCIgaGVhZGVyPVwiMC4zXCIgZm9vdGVyPVwiMC4zXCIvPlxuJHt0YWJsZVBhcnRzfTwvd29ya3NoZWV0PmA7XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFNoYXJlZFN0cmluZ1hNTChjb3VudDogbnVtYmVyLCB1bmlxdWVDb3VudDogbnVtYmVyLCB0YWJsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEV4Y2VsU3RyaW5ncy5YTUxfU1RSSU5HICsgJzxzc3QgeG1sbnM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW5cIiBjb3VudD1cIicgKyBjb3VudCArICdcIiB1bmlxdWVDb3VudD1cIicgKyB1bmlxdWVDb3VudCArICdcIj4nICsgdGFibGUgKyAnPC9zc3Q+JztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldENvbnRlbnRUeXBlc1hNTChoYXNTaGFyZWRTdHJpbmdzOiBib29sZWFuLCBoYXNUYWJsZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGxldCBjb250ZW50VHlwZXMgPSBFeGNlbFN0cmluZ3MuWE1MX1NUUklORyArXG4gICAgICAgIGA8VHlwZXMgeG1sbnM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXNcXFwiPlxuICAgICAgICAgICAgPERlZmF1bHQgRXh0ZW5zaW9uPVwicmVsc1wiIENvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWxcIi8+XG4gICAgICAgICAgICA8RGVmYXVsdCBFeHRlbnNpb249XCJ4bWxcIiBDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3htbFwiLz5cbiAgICAgICAgICAgIDxPdmVycmlkZSBQYXJ0TmFtZT1cIi94bC93b3JrYm9vay54bWxcIiBDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sXCIvPlxuICAgICAgICAgICAgPE92ZXJyaWRlIFBhcnROYW1lPVwiL3hsL3dvcmtzaGVldHMvc2hlZXQxLnhtbFwiIENvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbFwiLz5cbiAgICAgICAgICAgIDxPdmVycmlkZSBQYXJ0TmFtZT1cIi94bC90aGVtZS90aGVtZTEueG1sXCIgQ29udGVudFR5cGU9XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sXCIvPlxuICAgICAgICAgICAgPE92ZXJyaWRlIFBhcnROYW1lPVwiL3hsL3N0eWxlcy54bWxcIiBDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWxcIi8+XG4gICAgICAgICAgICA8T3ZlcnJpZGUgUGFydE5hbWU9XCIvZG9jUHJvcHMvY29yZS54bWxcIiBDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmNvcmUtcHJvcGVydGllcyt4bWxcIi8+XG4gICAgICAgICAgICA8T3ZlcnJpZGUgUGFydE5hbWU9XCIvZG9jUHJvcHMvYXBwLnhtbFwiIENvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sXCIvPmA7XG5cbiAgICAgICAgY29udGVudFR5cGVzICs9IGhhc1NoYXJlZFN0cmluZ3MgP1xuICAgICAgICBgXHQ8T3ZlcnJpZGUgUGFydE5hbWU9XCIveGwvc2hhcmVkU3RyaW5ncy54bWxcIiBDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoYXJlZFN0cmluZ3MreG1sXCIvPmAgOiAnJztcblxuICAgICAgICBjb250ZW50VHlwZXMgKz0gaGFzVGFibGUgP1xuICAgICAgICAgICAgYDxPdmVycmlkZSBQYXJ0TmFtZT1cIi94bC90YWJsZXMvdGFibGUxLnhtbFwiIENvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sXCIvPmAgOiAnJztcbiAgICAgICAgY29udGVudFR5cGVzICs9IGA8L1R5cGVzPmA7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFRhYmxlc1hNTChhdXRvRmlsdGVyRGltZW5zaW9uOiBzdHJpbmcsIHRhYmxlRGltZW5zaW9uOiBzdHJpbmcsIHRhYmxlQ29sdW1uczogc3RyaW5nLCBzb3J0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7RXhjZWxTdHJpbmdzLlhNTF9TVFJJTkd9PHRhYmxlIHhtbG5zPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluXCIgaWQ9XCIxXCIgbmFtZT1cIlRhYmxlMVwiIGRpc3BsYXlOYW1lPVwiVGFibGUxXCIgcmVmPVwiJHt0YWJsZURpbWVuc2lvbn1cIiB0b3RhbHNSb3dTaG93bj1cIjBcIj5cbiAgICA8YXV0b0ZpbHRlciByZWY9XCIke2F1dG9GaWx0ZXJEaW1lbnNpb259XCIvPiR7c29ydH0ke3RhYmxlQ29sdW1uc308dGFibGVTdHlsZUluZm8gbmFtZT1cIlRhYmxlU3R5bGVNZWRpdW0yXCIgc2hvd0ZpcnN0Q29sdW1uPVwiMFwiIHNob3dMYXN0Q29sdW1uPVwiMFwiIHNob3dSb3dTdHJpcGVzPVwiMVwiIHNob3dDb2x1bW5TdHJpcGVzPVwiMFwiLz5cbjwvdGFibGU+YDtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSAgbWF4LWxlbiAqL1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXRFeGNlbENvbHVtbihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgLy8gUmV0dXJucyB0aGUgZXhjZWwgY29sdW1uIG5hbWUgZm9yIGdpdmVuIDAtYmFzZWQgaW5kZXhcbiAgICAgICAgLy8gRm9yIGV4YW1wbGUgMjcgc2hvdWxkIHJldHVybiBcIkFCXCJcbiAgICAgICAgbGV0IHJldHVyblN0cmluZyA9ICcnO1xuICAgICAgICB3aGlsZSAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IGluZGV4ICUgMjY7XG4gICAgICAgICAgICByZXR1cm5TdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1ICsgY2hhcikgKyByZXR1cm5TdHJpbmc7XG4gICAgICAgICAgICBpbmRleCA9IE1hdGguZmxvb3IoaW5kZXggLyAyNikgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5TdHJpbmc7XG4gICAgfVxufVxuIl19
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leGNlbC9leGNlbC1zdHJpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWM7QUFDZCxNQUFNLE9BQU8sWUFBWTtJQUNyQiw2QkFBNkI7YUFDZCxlQUFVLEdBQUcsNENBQTRDLENBQUM7YUFDMUQsK0JBQTBCLEdBQUcsZ0pBQWdKLENBQUM7SUFFdEwsTUFBTSxDQUFDLE9BQU87UUFDakIsT0FBTyxZQUFZLENBQUMsVUFBVSxHQUFHLHFoQkFBcWhCLENBQUM7SUFDM2pCLENBQUM7SUFFTSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQXFCO1FBQ3RDLE9BQU8sWUFBWSxDQUFDLFVBQVUsR0FBRyxrZ0JBQWtnQixhQUFhLHFOQUFxTixDQUFDO0lBQzF3QixDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU87UUFDakIsT0FBTyxZQUFZLENBQUMsVUFBVSxHQUFHLDBoQkFBMGhCLENBQUM7SUFDaGtCLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUTtRQUNsQixPQUFPLFlBQVksQ0FBQyxVQUFVLEdBQUcseWhOQUF5aE4sQ0FBQztJQUMvak4sQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTO1FBQ25CLE9BQU8sWUFBWSxDQUFDLFVBQVU7WUFDOUIsNCtGQUE0K0YsQ0FBQztJQUNqL0YsQ0FBQztJQUVNLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBcUI7UUFDM0MsT0FBTyxZQUFZLENBQUMsVUFBVSxHQUFHLHNrQkFBc2tCLGFBQWEsd1FBQXdRLENBQUM7SUFDajRCLENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCO1FBQzFCLE9BQU8sWUFBWSxDQUFDLFVBQVUsR0FBRyw4T0FBOE8sQ0FBQztJQUNwUixDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0I7UUFDMUMs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Ii8qKiBAaGlkZGVuICovXG5leHBvcnQgY2xhc3MgRXhjZWxTdHJpbmdzIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAgbWF4LWxlbiAqL1xuICAgIHByaXZhdGUgc3RhdGljIFhNTF9TVFJJTkcgPSAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XFxyXFxuJztcbiAgICBwcml2YXRlIHN0YXRpYyBTSEFSRURfU1RSSU5HX1JFTEFUSU9OU0hJUCA9ICc8UmVsYXRpb25zaGlwIElkPVwicklkNFwiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3NcIiBUYXJnZXQ9XCJzaGFyZWRTdHJpbmdzLnhtbFwiIC8+JztcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVscygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRXhjZWxTdHJpbmdzLlhNTF9TVFJJTkcgKyAnPFJlbGF0aW9uc2hpcHMgeG1sbnM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHNcIj48UmVsYXRpb25zaGlwIElkPVwicklkM1wiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVuZGVkLXByb3BlcnRpZXNcIiBUYXJnZXQ9XCJkb2NQcm9wcy9hcHAueG1sXCIvPjxSZWxhdGlvbnNoaXAgSWQ9XCJySWQyXCIgVHlwZT1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXNcIiBUYXJnZXQ9XCJkb2NQcm9wcy9jb3JlLnhtbFwiLz48UmVsYXRpb25zaGlwIElkPVwicklkMVwiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50XCIgVGFyZ2V0PVwieGwvd29ya2Jvb2sueG1sXCIvPjwvUmVsYXRpb25zaGlwcz4nO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QXBwKHdvcmtzaGVldE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBFeGNlbFN0cmluZ3MuWE1MX1NUUklORyArIGA8UHJvcGVydGllcyB4bWxucz1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXNcIiB4bWxuczp2dD1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2RvY1Byb3BzVlR5cGVzXCI+PEFwcGxpY2F0aW9uPk1pY3Jvc29mdCBFeGNlbDwvQXBwbGljYXRpb24+PERvY1NlY3VyaXR5PjA8L0RvY1NlY3VyaXR5PjxTY2FsZUNyb3A+ZmFsc2U8L1NjYWxlQ3JvcD48SGVhZGluZ1BhaXJzPjx2dDp2ZWN0b3Igc2l6ZT1cIjJcIiBiYXNlVHlwZT1cInZhcmlhbnRcIj48dnQ6dmFyaWFudD48dnQ6bHBzdHI+V29ya3NoZWV0czwvdnQ6bHBzdHI+PC92dDp2YXJpYW50Pjx2dDp2YXJpYW50Pjx2dDppND4xPC92dDppND48L3Z0OnZhcmlhbnQ+PC92dDp2ZWN0b3I+PC9IZWFkaW5nUGFpcnM+PFRpdGxlc09mUGFydHM+PHZ0OnZlY3RvciBzaXplPVwiMVwiIGJhc2VUeXBlPVwibHBzdHJcIj48dnQ6bHBzdHI+JHt3b3Jrc2hlZXROYW1lfTwvdnQ6bHBzdHI+PC92dDp2ZWN0b3I+PC9UaXRsZXNPZlBhcnRzPjxDb21wYW55PjwvQ29tcGFueT48TGlua3NVcFRvRGF0ZT5mYWxzZTwvTGlua3NVcFRvRGF0ZT48U2hhcmVkRG9jPmZhbHNlPC9TaGFyZWREb2M+PEh5cGVybGlua3NDaGFuZ2VkPmZhbHNlPC9IeXBlcmxpbmtzQ2hhbmdlZD48QXBwVmVyc2lvbj4xNi4wMzAwPC9BcHBWZXJzaW9uPjwvUHJvcGVydGllcz5gO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q29yZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRXhjZWxTdHJpbmdzLlhNTF9TVFJJTkcgKyAnPGNwOmNvcmVQcm9wZXJ0aWVzIHhtbG5zOmNwPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXNcIiB4bWxuczpkYz1cImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIgeG1sbnM6ZGN0ZXJtcz1cImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIiB4bWxuczpkY21pdHlwZT1cImh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9cIiB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiPjxkYzpjcmVhdG9yPjwvZGM6Y3JlYXRvcj48Y3A6bGFzdE1vZGlmaWVkQnk+PC9jcDpsYXN0TW9kaWZpZWRCeT48ZGN0ZXJtczpjcmVhdGVkIHhzaTp0eXBlPVwiZGN0ZXJtczpXM0NEVEZcIj4yMDE1LTA2LTA1VDE4OjE3OjIwWjwvZGN0ZXJtczpjcmVhdGVkPjxkY3Rlcm1zOm1vZGlmaWVkIHhzaTp0eXBlPVwiZGN0ZXJtczpXM0NEVEZcIj4yMDE1LTA2LTA1VDE4OjE3OjI2WjwvZGN0ZXJtczptb2RpZmllZD48L2NwOmNvcmVQcm9wZXJ0aWVzPic7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRUaGVtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRXhjZWxTdHJpbmdzLlhNTF9TVFJJTkcgKyAnPGE6dGhlbWUgeG1sbnM6YT1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluXCIgbmFtZT1cIk9mZmljZSBUaGVtZVwiPjxhOnRoZW1lRWxlbWVudHM+PGE6Y2xyU2NoZW1lIG5hbWU9XCJPZmZpY2VcIj48YTpkazE+PGE6c3lzQ2xyIHZhbD1cIndpbmRvd1RleHRcIiBsYXN0Q2xyPVwiMDAwMDAwXCIvPjwvYTpkazE+PGE6bHQxPjxhOnN5c0NsciB2YWw9XCJ3aW5kb3dcIiBsYXN0Q2xyPVwiRkZGRkZGXCIvPjwvYTpsdDE+PGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPVwiNDQ1NDZBXCIvPjwvYTpkazI+PGE6bHQyPjxhOnNyZ2JDbHIgdmFsPVwiRTdFNkU2XCIvPjwvYTpsdDI+PGE6YWNjZW50MT48YTpzcmdiQ2xyIHZhbD1cIjVCOUJENVwiLz48L2E6YWNjZW50MT48YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPVwiRUQ3RDMxXCIvPjwvYTphY2NlbnQyPjxhOmFjY2VudDM+PGE6c3JnYkNsciB2YWw9XCJBNUE1QTVcIi8+PC9hOmFjY2VudDM+PGE6YWNjZW50ND48YTpzcmdiQ2xyIHZhbD1cIkZGQzAwMFwiLz48L2E6YWNjZW50ND48YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPVwiNDQ3MkM0XCIvPjwvYTphY2NlbnQ1PjxhOmFjY2VudDY+PGE6c3JnYkNsciB2YWw9XCI3MEFENDdcIi8+PC9hOmFjY2VudDY+PGE6aGxpbms+PGE6c3JnYkNsciB2YWw9XCIwNTYzQzFcIi8+PC9hOmhsaW5rPjxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPVwiOTU0RjcyXCIvPjwvYTpmb2xIbGluaz48L2E6Y2xyU2NoZW1lPjxhOmZvbnRTY2hlbWUgbmFtZT1cIk9mZmljZVwiPjxhOm1ham9yRm9udD48YTpsYXRpbiB0eXBlZmFjZT1cIkNhbGlicmkgTGlnaHRcIiBwYW5vc2U9XCIwMjBGMDMwMjAyMDIwNDAzMDIwNFwiLz48YTplYSB0eXBlZmFjZT1cIlwiLz48YTpjcyB0eXBlZmFjZT1cIlwiLz48YTpmb250IHNjcmlwdD1cIkpwYW5cIiB0eXBlZmFjZT1cIua4uOOCtOOCt+ODg+OCryBMaWdodFwiLz48YTpmb250IHNjcmlwdD1cIkhhbmdcIiB0eXBlZmFjZT1cIuunkeydgCDqs6DrlJVcIi8+PGE6Zm9udCBzY3JpcHQ9XCJIYW5zXCIgdHlwZWZhY2U9XCLnrYnnur8gTGlnaHRcIi8+PGE6Zm9udCBzY3JpcHQ9XCJIYW50XCIgdHlwZWZhY2U9XCLmlrDntLDmmI7pq5RcIi8+PGE6Zm9udCBzY3JpcHQ9XCJBcmFiXCIgdHlwZWZhY2U9XCJUaW1lcyBOZXcgUm9tYW5cIi8+PGE6Zm9udCBzY3JpcHQ9XCJIZWJyXCIgdHlwZWZhY2U9XCJUaW1lcyBOZXcgUm9tYW5cIi8+PGE6Zm9udCBzY3JpcHQ9XCJUaGFpXCIgdHlwZWZhY2U9XCJUYWhvbWFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJFdGhpXCIgdHlwZWZhY2U9XCJOeWFsYVwiLz48YTpmb250IHNjcmlwdD1cIkJlbmdcIiB0eXBlZmFjZT1cIlZyaW5kYVwiLz48YTpmb250IHNjcmlwdD1cIkd1anJcIiB0eXBlZmFjZT1cIlNocnV0aVwiLz48YTpmb250IHNjcmlwdD1cIktobXJcIiB0eXBlZmFjZT1cIk1vb2xCb3JhblwiLz48YTpmb250IHNjcmlwdD1cIktuZGFcIiB0eXBlZmFjZT1cIlR1bmdhXCIvPjxhOmZvbnQgc2NyaXB0PVwiR3VydVwiIHR5cGVmYWNlPVwiUmFhdmlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJDYW5zXCIgdHlwZWZhY2U9XCJFdXBoZW1pYVwiLz48YTpmb250IHNjcmlwdD1cIkNoZXJcIiB0eXBlZmFjZT1cIlBsYW50YWdlbmV0IENoZXJva2VlXCIvPjxhOmZvbnQgc2NyaXB0PVwiWWlpaVwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IFlpIEJhaXRpXCIvPjxhOmZvbnQgc2NyaXB0PVwiVGlidFwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IEhpbWFsYXlhXCIvPjxhOmZvbnQgc2NyaXB0PVwiVGhhYVwiIHR5cGVmYWNlPVwiTVYgQm9saVwiLz48YTpmb250IHNjcmlwdD1cIkRldmFcIiB0eXBlZmFjZT1cIk1hbmdhbFwiLz48YTpmb250IHNjcmlwdD1cIlRlbHVcIiB0eXBlZmFjZT1cIkdhdXRhbWlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJUYW1sXCIgdHlwZWZhY2U9XCJMYXRoYVwiLz48YTpmb250IHNjcmlwdD1cIlN5cmNcIiB0eXBlZmFjZT1cIkVzdHJhbmdlbG8gRWRlc3NhXCIvPjxhOmZvbnQgc2NyaXB0PVwiT3J5YVwiIHR5cGVmYWNlPVwiS2FsaW5nYVwiLz48YTpmb250IHNjcmlwdD1cIk1seW1cIiB0eXBlZmFjZT1cIkthcnRpa2FcIi8+PGE6Zm9udCBzY3JpcHQ9XCJMYW9vXCIgdHlwZWZhY2U9XCJEb2tDaGFtcGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJTaW5oXCIgdHlwZWZhY2U9XCJJc2tvb2xhIFBvdGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJNb25nXCIgdHlwZWZhY2U9XCJNb25nb2xpYW4gQmFpdGlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJWaWV0XCIgdHlwZWZhY2U9XCJUaW1lcyBOZXcgUm9tYW5cIi8+PGE6Zm9udCBzY3JpcHQ9XCJVaWdoXCIgdHlwZWZhY2U9XCJNaWNyb3NvZnQgVWlnaHVyXCIvPjxhOmZvbnQgc2NyaXB0PVwiR2VvclwiIHR5cGVmYWNlPVwiU3lsZmFlblwiLz48L2E6bWFqb3JGb250PjxhOm1pbm9yRm9udD48YTpsYXRpbiB0eXBlZmFjZT1cIkNhbGlicmlcIiBwYW5vc2U9XCIwMjBGMDUwMjAyMDIwNDAzMDIwNFwiLz48YTplYSB0eXBlZmFjZT1cIlwiLz48YTpjcyB0eXBlZmFjZT1cIlwiLz48YTpmb250IHNjcmlwdD1cIkpwYW5cIiB0eXBlZmFjZT1cIua4uOOCtOOCt+ODg+OCr1wiLz48YTpmb250IHNjcmlwdD1cIkhhbmdcIiB0eXBlZmFjZT1cIuunkeydgCDqs6DrlJVcIi8+PGE6Zm9udCBzY3JpcHQ9XCJIYW5zXCIgdHlwZWZhY2U9XCLnrYnnur9cIi8+PGE6Zm9udCBzY3JpcHQ9XCJIYW50XCIgdHlwZWZhY2U9XCLmlrDntLDmmI7pq5RcIi8+PGE6Zm9udCBzY3JpcHQ9XCJBcmFiXCIgdHlwZWZhY2U9XCJBcmlhbFwiLz48YTpmb250IHNjcmlwdD1cIkhlYnJcIiB0eXBlZmFjZT1cIkFyaWFsXCIvPjxhOmZvbnQgc2NyaXB0PVwiVGhhaVwiIHR5cGVmYWNlPVwiVGFob21hXCIvPjxhOmZvbnQgc2NyaXB0PVwiRXRoaVwiIHR5cGVmYWNlPVwiTnlhbGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJCZW5nXCIgdHlwZWZhY2U9XCJWcmluZGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJHdWpyXCIgdHlwZWZhY2U9XCJTaHJ1dGlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJLaG1yXCIgdHlwZWZhY2U9XCJEYXVuUGVuaFwiLz48YTpmb250IHNjcmlwdD1cIktuZGFcIiB0eXBlZmFjZT1cIlR1bmdhXCIvPjxhOmZvbnQgc2NyaXB0PVwiR3VydVwiIHR5cGVmYWNlPVwiUmFhdmlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJDYW5zXCIgdHlwZWZhY2U9XCJFdXBoZW1pYVwiLz48YTpmb250IHNjcmlwdD1cIkNoZXJcIiB0eXBlZmFjZT1cIlBsYW50YWdlbmV0IENoZXJva2VlXCIvPjxhOmZvbnQgc2NyaXB0PVwiWWlpaVwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IFlpIEJhaXRpXCIvPjxhOmZvbnQgc2NyaXB0PVwiVGlidFwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IEhpbWFsYXlhXCIvPjxhOmZvbnQgc2NyaXB0PVwiVGhhYVwiIHR5cGVmYWNlPVwiTVYgQm9saVwiLz48YTpmb250IHNjcmlwdD1cIkRldmFcIiB0eXBlZmFjZT1cIk1hbmdhbFwiLz48YTpmb250IHNjcmlwdD1cIlRlbHVcIiB0eXBlZmFjZT1cIkdhdXRhbWlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJUYW1sXCIgdHlwZWZhY2U9XCJMYXRoYVwiLz48YTpmb250IHNjcmlwdD1cIlN5cmNcIiB0eXBlZmFjZT1cIkVzdHJhbmdlbG8gRWRlc3NhXCIvPjxhOmZvbnQgc2NyaXB0PVwiT3J5YVwiIHR5cGVmYWNlPVwiS2FsaW5nYVwiLz48YTpmb250IHNjcmlwdD1cIk1seW1cIiB0eXBlZmFjZT1cIkthcnRpa2FcIi8+PGE6Zm9udCBzY3JpcHQ9XCJMYW9vXCIgdHlwZWZhY2U9XCJEb2tDaGFtcGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJTaW5oXCIgdHlwZWZhY2U9XCJJc2tvb2xhIFBvdGFcIi8+PGE6Zm9udCBzY3JpcHQ9XCJNb25nXCIgdHlwZWZhY2U9XCJNb25nb2xpYW4gQmFpdGlcIi8+PGE6Zm9udCBzY3JpcHQ9XCJWaWV0XCIgdHlwZWZhY2U9XCJBcmlhbFwiLz48YTpmb250IHNjcmlwdD1cIlVpZ2hcIiB0eXBlZmFjZT1cIk1pY3Jvc29mdCBVaWdodXJcIi8+PGE6Zm9udCBzY3JpcHQ9XCJHZW9yXCIgdHlwZWZhY2U9XCJTeWxmYWVuXCIvPjwvYTptaW5vckZvbnQ+PC9hOmZvbnRTY2hlbWU+PGE6Zm10U2NoZW1lIG5hbWU9XCJPZmZpY2VcIj48YTpmaWxsU3R5bGVMc3Q+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiLz48L2E6c29saWRGaWxsPjxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT1cIjFcIj48YTpnc0xzdD48YTpncyBwb3M9XCIwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6bHVtTW9kIHZhbD1cIjExMDAwMFwiLz48YTpzYXRNb2QgdmFsPVwiMTA1MDAwXCIvPjxhOnRpbnQgdmFsPVwiNjcwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+PGE6Z3MgcG9zPVwiNTAwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTpsdW1Nb2QgdmFsPVwiMTA1MDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIxMDMwMDBcIi8+PGE6dGludCB2YWw9XCI3MzAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48YTpncyBwb3M9XCIxMDAwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTpsdW1Nb2QgdmFsPVwiMTA1MDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIxMDkwMDBcIi8+PGE6dGludCB2YWw9XCI4MTAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48L2E6Z3NMc3Q+PGE6bGluIGFuZz1cIjU0MDAwMDBcIiBzY2FsZWQ9XCIwXCIvPjwvYTpncmFkRmlsbD48YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9XCIxXCI+PGE6Z3NMc3Q+PGE6Z3MgcG9zPVwiMFwiPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiPjxhOnNhdE1vZCB2YWw9XCIxMDMwMDBcIi8+PGE6bHVtTW9kIHZhbD1cIjEwMjAwMFwiLz48YTp0aW50IHZhbD1cIjk0MDAwXCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPjxhOmdzIHBvcz1cIjUwMDAwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6c2F0TW9kIHZhbD1cIjExMDAwMFwiLz48YTpsdW1Nb2QgdmFsPVwiMTAwMDAwXCIvPjxhOnNoYWRlIHZhbD1cIjEwMDAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48YTpncyBwb3M9XCIxMDAwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTpsdW1Nb2QgdmFsPVwiOTkwMDBcIi8+PGE6c2F0TW9kIHZhbD1cIjEyMDAwMFwiLz48YTpzaGFkZSB2YWw9XCI3ODAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48L2E6Z3NMc3Q+PGE6bGluIGFuZz1cIjU0MDAwMDBcIiBzY2FsZWQ9XCIwXCIvPjwvYTpncmFkRmlsbD48L2E6ZmlsbFN0eWxlTHN0PjxhOmxuU3R5bGVMc3Q+PGE6bG4gdz1cIjYzNTBcIiBjYXA9XCJmbGF0XCIgY21wZD1cInNuZ1wiIGFsZ249XCJjdHJcIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPVwic29saWRcIi8+PGE6bWl0ZXIgbGltPVwiODAwMDAwXCIvPjwvYTpsbj48YTpsbiB3PVwiMTI3MDBcIiBjYXA9XCJmbGF0XCIgY21wZD1cInNuZ1wiIGFsZ249XCJjdHJcIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPVwic29saWRcIi8+PGE6bWl0ZXIgbGltPVwiODAwMDAwXCIvPjwvYTpsbj48YTpsbiB3PVwiMTkwNTBcIiBjYXA9XCJmbGF0XCIgY21wZD1cInNuZ1wiIGFsZ249XCJjdHJcIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPVwic29saWRcIi8+PGE6bWl0ZXIgbGltPVwiODAwMDAwXCIvPjwvYTpsbj48L2E6bG5TdHlsZUxzdD48YTplZmZlY3RTdHlsZUxzdD48YTplZmZlY3RTdHlsZT48YTplZmZlY3RMc3QvPjwvYTplZmZlY3RTdHlsZT48YTplZmZlY3RTdHlsZT48YTplZmZlY3RMc3QvPjwvYTplZmZlY3RTdHlsZT48YTplZmZlY3RTdHlsZT48YTplZmZlY3RMc3Q+PGE6b3V0ZXJTaGR3IGJsdXJSYWQ9XCI1NzE1MFwiIGRpc3Q9XCIxOTA1MFwiIGRpcj1cIjU0MDAwMDBcIiBhbGduPVwiY3RyXCIgcm90V2l0aFNoYXBlPVwiMFwiPjxhOnNyZ2JDbHIgdmFsPVwiMDAwMDAwXCI+PGE6YWxwaGEgdmFsPVwiNjMwMDBcIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz48L2E6ZWZmZWN0THN0PjwvYTplZmZlY3RTdHlsZT48L2E6ZWZmZWN0U3R5bGVMc3Q+PGE6YmdGaWxsU3R5bGVMc3Q+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiLz48L2E6c29saWRGaWxsPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTp0aW50IHZhbD1cIjk1MDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIxNzAwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT1cIjFcIj48YTpnc0xzdD48YTpncyBwb3M9XCIwXCI+PGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+PGE6dGludCB2YWw9XCI5MzAwMFwiLz48YTpzYXRNb2QgdmFsPVwiMTUwMDAwXCIvPjxhOnNoYWRlIHZhbD1cIjk4MDAwXCIvPjxhOmx1bU1vZCB2YWw9XCIxMDIwMDBcIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+PGE6Z3MgcG9zPVwiNTAwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTp0aW50IHZhbD1cIjk4MDAwXCIvPjxhOnNhdE1vZCB2YWw9XCIxMzAwMDBcIi8+PGE6c2hhZGUgdmFsPVwiOTAwMDBcIi8+PGE6bHVtTW9kIHZhbD1cIjEwMzAwMFwiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48YTpncyBwb3M9XCIxMDAwMDBcIj48YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj48YTpzaGFkZSB2YWw9XCI2MzAwMFwiLz48YTpzYXRNb2QgdmFsPVwiMTIwMDAwXCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPjwvYTpnc0xzdD48YTpsaW4gYW5nPVwiNTQwMDAwMFwiIHNjYWxlZD1cIjBcIi8+PC9hOmdyYWRGaWxsPjwvYTpiZ0ZpbGxTdHlsZUxzdD48L2E6Zm10U2NoZW1lPjwvYTp0aGVtZUVsZW1lbnRzPjxhOm9iamVjdERlZmF1bHRzLz48YTpleHRyYUNsclNjaGVtZUxzdC8+PGE6ZXh0THN0PjxhOmV4dCB1cmk9XCJ7MDVBNEMyNUMtMDg1RS00MzQwLTg1QTMtQTU1MzFFNTEwREIyfVwiPjx0aG0xNTp0aGVtZUZhbWlseSB4bWxuczp0aG0xNT1cImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3RoZW1lbWwvMjAxMi9tYWluXCIgbmFtZT1cIk9mZmljZSBUaGVtZVwiIGlkPVwiezYyRjkzOUI2LTkzQUYtNERCOC05QzZCLUQ2QzdERkRDNTg5Rn1cIiB2aWQ9XCJ7NEEzQzQ2RTgtNjFDQy00NjAzLUE1ODktNzQyMkE0N0E4RTRBfVwiLz48L2E6ZXh0PjwvYTpleHRMc3Q+PC9hOnRoZW1lPic7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTdHlsZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEV4Y2VsU3RyaW5ncy5YTUxfU1RSSU5HICtcbiAgICAgICAgJzxzdHlsZVNoZWV0IHhtbG5zPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluXCIgeG1sbnM6bWM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNlwiIG1jOklnbm9yYWJsZT1cIngxNGFjIHgxNnIyXCIgeG1sbnM6eDE0YWM9XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hY1wiIHhtbG5zOngxNnIyPVwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDE1LzAyL21haW5cIj48bnVtRm10cyBjb3VudD1cIjVcIj48bnVtRm10IG51bUZtdElkPVwiMTY0XCIgZm9ybWF0Q29kZT1cIiZxdW90OyQmcXVvdDsjLCMjMC4wMFwiLz48bnVtRm10IG51bUZtdElkPVwiMTY1XCIgZm9ybWF0Q29kZT1cIlskwqMtODA5XSMsIyMwLjAwXCIvPjxudW1GbXQgbnVtRm10SWQ9XCIxNjZcIiBmb3JtYXRDb2RlPVwiWyTCpS04MDRdIywjIzAuMDBcIi8+PG51bUZtdCBudW1GbXRJZD1cIjE2N1wiIGZvcm1hdENvZGU9XCIjLCMjMC4wMFxcIFsk4oKsLTFdXCIvPjxudW1GbXQgbnVtRm10SWQ9XCIxNjhcIiBmb3JtYXRDb2RlPVwiWyTCpS00MTFdIywjIzAuMDBcIi8+PC9udW1GbXRzPjxmb250cyBjb3VudD1cIjJcIiB4MTRhYzprbm93bkZvbnRzPVwiMVwiPjxmb250PjxzeiB2YWw9XCIxMVwiLz48Y29sb3IgdGhlbWU9XCIxXCIvPjxuYW1lIHZhbD1cIkNhbGlicmlcIi8+PGZhbWlseSB2YWw9XCIyXCIvPjxzY2hlbWUgdmFsPVwibWlub3JcIi8+PC9mb250Pjxmb250PjxiLz48c3ogdmFsPVwiMTFcIi8+PGNvbG9yIHRoZW1lPVwiMFwiLz48bmFtZSB2YWw9XCJDYWxpYnJpXCIvPjxmYW1pbHkgdmFsPVwiMlwiLz48c2NoZW1lIHZhbD1cIm1pbm9yXCIvPjwvZm9udD48L2ZvbnRzPjxmaWxscyBjb3VudD1cIjNcIj48ZmlsbD48cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9XCJub25lXCIvPjwvZmlsbD48ZmlsbD48cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9XCJncmF5MTI1XCIvPjwvZmlsbD48ZmlsbD48cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9XCJzb2xpZFwiPjxmZ0NvbG9yIHRoZW1lPVwiNFwiLz48YmdDb2xvciBpbmRleGVkPVwiNjRcIi8+PC9wYXR0ZXJuRmlsbD48L2ZpbGw+PC9maWxscz48Ym9yZGVycyBjb3VudD1cIjFcIj48Ym9yZGVyPjxsZWZ0Lz48cmlnaHQvPjx0b3AvPjxib3R0b20vPjxkaWFnb25hbC8+PC9ib3JkZXI+PC9ib3JkZXJzPjxjZWxsU3R5bGVYZnMgY291bnQ9XCIxXCI+PHhmIG51bUZtdElkPVwiMFwiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIvPjwvY2VsbFN0eWxlWGZzPjxjZWxsWGZzIGNvdW50PVwiMTNcIj48eGYgbnVtRm10SWQ9XCIwXCIgZm9udElkPVwiMFwiIGZpbGxJZD1cIjBcIiBib3JkZXJJZD1cIjBcIiB4ZklkPVwiMFwiLz48eGYgbnVtRm10SWQ9XCIwXCIgZm9udElkPVwiMFwiIGZpbGxJZD1cIjBcIiBib3JkZXJJZD1cIjBcIiB4ZklkPVwiMFwiIGFwcGx5TnVtYmVyRm9ybWF0PVwiMVwiLz48eGYgbnVtRm10SWQ9XCIxNFwiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIiBhcHBseU51bWJlckZvcm1hdD1cIjFcIi8+PHhmIG51bUZtdElkPVwiMFwiIGZvbnRJZD1cIjFcIiBmaWxsSWQ9XCIyXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIi8+PHhmIG51bUZtdElkPVwiMFwiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIiBhcHBseUFsaWdubWVudD1cIjFcIj48YWxpZ25tZW50IGhvcml6b250YWw9XCJjZW50ZXJcIiB2ZXJ0aWNhbD1cImNlbnRlclwiLz48L3hmPjx4ZiBudW1GbXRJZD1cIjE2NFwiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIiBhcHBseU51bWJlckZvcm1hdD1cIjFcIi8+PHhmIG51bUZtdElkPVwiMTY1XCIgZm9udElkPVwiMFwiIGZpbGxJZD1cIjBcIiBib3JkZXJJZD1cIjBcIiB4ZklkPVwiMFwiIGFwcGx5TnVtYmVyRm9ybWF0PVwiMVwiLz48eGYgbnVtRm10SWQ9XCIxNjZcIiBmb250SWQ9XCIwXCIgZmlsbElkPVwiMFwiIGJvcmRlcklkPVwiMFwiIHhmSWQ9XCIwXCIgYXBwbHlOdW1iZXJGb3JtYXQ9XCIxXCIvPjx4ZiBudW1GbXRJZD1cIjE2N1wiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIiBhcHBseU51bWJlckZvcm1hdD1cIjFcIi8+PHhmIG51bUZtdElkPVwiMTY4XCIgZm9udElkPVwiMFwiIGZpbGxJZD1cIjBcIiBib3JkZXJJZD1cIjBcIiB4ZklkPVwiMFwiIGFwcGx5TnVtYmVyRm9ybWF0PVwiMVwiLz48eGYgbnVtRm10SWQ9XCIyMVwiIGZvbnRJZD1cIjBcIiBmaWxsSWQ9XCIwXCIgYm9yZGVySWQ9XCIwXCIgeGZJZD1cIjBcIiBhcHBseU51bWJlckZvcm1hdD1cIjFcIi8+PHhmIG51bUZtdElkPVwiMjJcIiBmb250SWQ9XCIwXCIgZmlsbElkPVwiMFwiIGJvcmRlcklkPVwiMFwiIHhmSWQ9XCIwXCIgYXBwbHlOdW1iZXJGb3JtYXQ9XCIxXCIvPjx4ZiBudW1GbXRJZD1cIjEwXCIgZm9udElkPVwiMFwiIGZpbGxJZD1cIjBcIiBib3JkZXJJZD1cIjBcIiB4ZklkPVwiMFwiIGFwcGx5TnVtYmVyRm9ybWF0PVwiMVwiLz48L2NlbGxYZnM+PGNlbGxTdHlsZXMgY291bnQ9XCIxXCI+PGNlbGxTdHlsZSBuYW1lPVwiTm9ybWFsXCIgeGZJZD1cIjBcIiBidWlsdGluSWQ9XCIwXCIvPjwvY2VsbFN0eWxlcz48ZHhmcyBjb3VudD1cIjBcIi8+PHRhYmxlU3R5bGVzIGNvdW50PVwiMFwiIGRlZmF1bHRUYWJsZVN0eWxlPVwiVGFibGVTdHlsZU1lZGl1bTJcIiBkZWZhdWx0UGl2b3RTdHlsZT1cIlBpdm90U3R5bGVMaWdodDE2XCIvPjxleHRMc3Q+PGV4dCB1cmk9XCJ7RUI3OURFRjItODBCOC00M2U1LTk1QkQtNTRDQkRERjkwMjBDfVwiIHhtbG5zOngxND1cImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L21haW5cIj48eDE0OnNsaWNlclN0eWxlcyBkZWZhdWx0U2xpY2VyU3R5bGU9XCJTbGljZXJTdHlsZUxpZ2h0MVwiLz48L2V4dD48ZXh0IHVyaT1cIns5MjYwQTUxMC1GMzAxLTQ2YTgtODYzNS1GNTEyRDY0QkU1RjV9XCIgeG1sbnM6eDE1PVwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDEwLzExL21haW5cIj48eDE1OnRpbWVsaW5lU3R5bGVzIGRlZmF1bHRUaW1lbGluZVN0eWxlPVwiVGltZVNsaWNlclN0eWxlTGlnaHQxXCIvPjwvZXh0PjwvZXh0THN0Pjwvc3R5bGVTaGVldD4nO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0V29ya2Jvb2sod29ya3NoZWV0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEV4Y2VsU3RyaW5ncy5YTUxfU1RSSU5HICsgYDx3b3JrYm9vayB4bWxucz1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpblwiIHhtbG5zOnI9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzXCIgeG1sbnM6bWM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNlwiIG1jOklnbm9yYWJsZT1cIngxNVwiIHhtbG5zOngxNT1cImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxMC8xMS9tYWluXCI+PGZpbGVWZXJzaW9uIGFwcE5hbWU9XCJ4bFwiIGxhc3RFZGl0ZWQ9XCI2XCIgbG93ZXN0RWRpdGVkPVwiNlwiIHJ1cEJ1aWxkPVwiMTQ0MjBcIi8+PHdvcmtib29rUHIgZmlsdGVyUHJpdmFjeT1cIjFcIiBkZWZhdWx0VGhlbWVWZXJzaW9uPVwiMTY0MDExXCIvPjxib29rVmlld3M+PHdvcmtib29rVmlldyB4V2luZG93PVwiMFwiIHlXaW5kb3c9XCIwXCIgd2luZG93V2lkdGg9XCIyMjI2MFwiIHdpbmRvd0hlaWdodD1cIjEyNjQ1XCIvPjwvYm9va1ZpZXdzPjxzaGVldHM+PHNoZWV0IG5hbWU9XCIke3dvcmtzaGVldE5hbWV9XCIgc2hlZXRJZD1cIjFcIiByOmlkPVwicklkMVwiLz48L3NoZWV0cz48Y2FsY1ByIGNhbGNJZD1cIjE2MjkxM1wiLz48ZXh0THN0PjxleHQgdXJpPVwiezE0MEE3MDk0LTBFMzUtNDg5Mi04NDMyLUM0RDJFNTdFREVCNX1cIiB4bWxuczp4MTU9XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMTAvMTEvbWFpblwiPjx4MTU6d29ya2Jvb2tQciBjaGFydFRyYWNraW5nUmVmQmFzZT1cIjFcIi8+PC9leHQ+PC9leHRMc3Q+PC93b3JrYm9vaz5gO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0V29ya3NoZWV0UmVscygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRXhjZWxTdHJpbmdzLlhNTF9TVFJJTkcgKyBgPFJlbGF0aW9uc2hpcHMgeG1sbnM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHNcIj48UmVsYXRpb25zaGlwIElkPVwicklkMVwiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RhYmxlXCIgVGFyZ2V0PVwiLi4vdGFibGVzL3RhYmxlMS54bWxcIi8+PC9SZWxhdGlvbnNoaXBzPmA7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRXb3JrYm9va1JlbHMoaGFzU2hhcmVkU3RyaW5ncyk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXRWYWwgPSBFeGNlbFN0cmluZ3MuWE1MX1NUUklORyArIGA8UmVsYXRpb25zaGlwcyB4bWxucz1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwc1wiPjxSZWxhdGlvbnNoaXAgSWQ9XCJySWQzXCIgVHlwZT1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc3R5bGVzXCIgVGFyZ2V0PVwic3R5bGVzLnhtbFwiLz48UmVsYXRpb25zaGlwIElkPVwicklkMlwiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lXCIgVGFyZ2V0PVwidGhlbWUvdGhlbWUxLnhtbFwiLz48UmVsYXRpb25zaGlwIElkPVwicklkMVwiIFR5cGU9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldFwiIFRhcmdldD1cIndvcmtzaGVldHMvc2hlZXQxLnhtbFwiLz5gO1xuXG4gICAgICAgIGlmIChoYXNTaGFyZWRTdHJpbmdzKSB7XG4gICAgICAgICAgICByZXRWYWwgKz0gRXhjZWxTdHJpbmdzLlNIQVJFRF9TVFJJTkdfUkVMQVRJT05TSElQO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0VmFsICs9ICc8L1JlbGF0aW9uc2hpcHM+JztcblxuICAgICAgICByZXR1cm4gcmV0VmFsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0U2hlZXRYTUwoZGltZW5zaW9uOiBzdHJpbmcsIGZyZWV6ZVBhbmU6IHN0cmluZywgY29sczogc3RyaW5nLCBzaGVldERhdGE6IHN0cmluZywgaGFzVGFibGU6IGJvb2xlYW4sIG91dGxpbmVMZXZlbCA9IDAsIGlzSGllcmFyY2hpY2FsOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaGFzT3V0bGluZSA9IG91dGxpbmVMZXZlbCA+IDA7XG4gICAgICAgIGNvbnN0IHRhYmxlUGFydHMgPSBoYXNUYWJsZSA/ICc8dGFibGVQYXJ0cyBjb3VudD1cIjFcIj48dGFibGVQYXJ0IHI6aWQ9XCJySWQxXCIvPjwvdGFibGVQYXJ0cz4nIDogJyc7XG4gICAgICAgIGNvbnN0IHNoZWV0T3V0bGluZVByb3AgPSBoYXNPdXRsaW5lID8gJzxzaGVldFByPjxvdXRsaW5lUHIgc3VtbWFyeUJlbG93PVwiMFwiLz48L3NoZWV0UHI+JyA6ICcnO1xuICAgICAgICBjb25zdCBzT3V0bGluZUxldmVsID0gIGhhc091dGxpbmUgPyBgb3V0bGluZUxldmVsUm93PVwiJHtvdXRsaW5lTGV2ZWx9XCJgIDogJyc7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBpc0hpZXJhcmNoaWNhbCA/ICcnIDogYDxkaW1lbnNpb24gcmVmPVwiJHtkaW1lbnNpb259XCIvPmA7XG5cbiAgICAgICAgLy8gcmV0dXJuIEV4Y2VsU3RyaW5ncy5YTUxfU1RSSU5HICtcbiAgICAgICAgLy8gICAgICc8d29ya3NoZWV0IHhtbG5zPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluXCIgeG1sbnM6cj1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHNcIiB4bWxuczptYz1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2XCIgbWM6SWdub3JhYmxlPVwieDE0YWNcIiB4bWxuczp4MTRhYz1cImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L2FjXCI+PGRpbWVuc2lvbiByZWY9XCInICsgZGltZW5zaW9uICsgJ1wiLz48c2hlZXRWaWV3cz48c2hlZXRWaWV3IHRhYlNlbGVjdGVkPVwiMVwiIHdvcmtib29rVmlld0lkPVwiMFwiPicgKyBmcmVlemVQYW5lICsgJzwvc2hlZXRWaWV3Pjwvc2hlZXRWaWV3cz48c2hlZXRGb3JtYXRQciBkZWZhdWx0Um93SGVpZ2h0PVwiMTVcIiB4MTRhYzpkeURlc2NlbnQ9XCIwLjI1XCIvPicgKyBjb2xzICsgc2hlZXREYXRhICsgJzxwYWdlTWFyZ2lucyBsZWZ0PVwiMC43XCIgcmlnaHQ9XCIwLjdcIiB0b3A9XCIwLjc1XCIgYm90dG9tPVwiMC43NVwiIGhlYWRlcj1cIjAuM1wiIGZvb3Rlcj1cIjAuM1wiLz4nICsgdGFibGVQYXJ0cyArICc8L3dvcmtzaGVldD4nO1xuXG4gICAgICAgIHJldHVybiBgJHtFeGNlbFN0cmluZ3MuWE1MX1NUUklOR31cbjx3b3Jrc2hlZXQgeG1sbnM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW5cIiB4bWxuczpyPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwc1wiIHhtbG5zOm1jPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDZcIiBtYzpJZ25vcmFibGU9XCJ4MTRhY1wiIHhtbG5zOngxNGFjPVwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWNcIj5cbiR7c2hlZXRPdXRsaW5lUHJvcH1cbiR7ZGltZW5zaW9uc31cbjxzaGVldFZpZXdzPjxzaGVldFZpZXcgdGFiU2VsZWN0ZWQ9XCIxXCIgd29ya2Jvb2tWaWV3SWQ9XCIwXCI+JHtmcmVlemVQYW5lfTwvc2hlZXRWaWV3Pjwvc2hlZXRWaWV3cz5cbjxzaGVldEZvcm1hdFByIGRlZmF1bHRSb3dIZWlnaHQ9XCIxNVwiICR7c091dGxpbmVMZXZlbH0geDE0YWM6ZHlEZXNjZW50PVwiMC4yNVwiLz5cbiR7Y29sc31cbiR7c2hlZXREYXRhfVxuPHBhZ2VNYXJnaW5zIGxlZnQ9XCIwLjdcIiByaWdodD1cIjAuN1wiIHRvcD1cIjAuNzVcIiBib3R0b209XCIwLjc1XCIgaGVhZGVyPVwiMC4zXCIgZm9vdGVyPVwiMC4zXCIvPlxuJHt0YWJsZVBhcnRzfTwvd29ya3NoZWV0PmA7XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFNoYXJlZFN0cmluZ1hNTChjb3VudDogbnVtYmVyLCB1bmlxdWVDb3VudDogbnVtYmVyLCB0YWJsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEV4Y2VsU3RyaW5ncy5YTUxfU1RSSU5HICsgJzxzc3QgeG1sbnM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW5cIiBjb3VudD1cIicgKyBjb3VudCArICdcIiB1bmlxdWVDb3VudD1cIicgKyB1bmlxdWVDb3VudCArICdcIj4nICsgdGFibGUgKyAnPC9zc3Q+JztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldENvbnRlbnRUeXBlc1hNTChoYXNTaGFyZWRTdHJpbmdzOiBib29sZWFuLCBoYXNUYWJsZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGxldCBjb250ZW50VHlwZXMgPSBFeGNlbFN0cmluZ3MuWE1MX1NUUklORyArXG4gICAgICAgIGA8VHlwZXMgeG1sbnM9XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXNcXFwiPlxuICAgICAgICAgICAgPERlZmF1bHQgRXh0ZW5zaW9uPVwicmVsc1wiIENvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWxcIi8+XG4gICAgICAgICAgICA8RGVmYXVsdCBFeHRlbnNpb249XCJ4bWxcIiBDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3htbFwiLz5cbiAgICAgICAgICAgIDxPdmVycmlkZSBQYXJ0TmFtZT1cIi94bC93b3JrYm9vay54bWxcIiBDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sXCIvPlxuICAgICAgICAgICAgPE92ZXJyaWRlIFBhcnROYW1lPVwiL3hsL3dvcmtzaGVldHMvc2hlZXQxLnhtbFwiIENvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbFwiLz5cbiAgICAgICAgICAgIDxPdmVycmlkZSBQYXJ0TmFtZT1cIi94bC90aGVtZS90aGVtZTEueG1sXCIgQ29udGVudFR5cGU9XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sXCIvPlxuICAgICAgICAgICAgPE92ZXJyaWRlIFBhcnROYW1lPVwiL3hsL3N0eWxlcy54bWxcIiBDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWxcIi8+XG4gICAgICAgICAgICA8T3ZlcnJpZGUgUGFydE5hbWU9XCIvZG9jUHJvcHMvY29yZS54bWxcIiBDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmNvcmUtcHJvcGVydGllcyt4bWxcIi8+XG4gICAgICAgICAgICA8T3ZlcnJpZGUgUGFydE5hbWU9XCIvZG9jUHJvcHMvYXBwLnhtbFwiIENvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sXCIvPmA7XG5cbiAgICAgICAgY29udGVudFR5cGVzICs9IGhhc1NoYXJlZFN0cmluZ3MgP1xuICAgICAgICBgXHQ8T3ZlcnJpZGUgUGFydE5hbWU9XCIveGwvc2hhcmVkU3RyaW5ncy54bWxcIiBDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoYXJlZFN0cmluZ3MreG1sXCIvPmAgOiAnJztcblxuICAgICAgICBjb250ZW50VHlwZXMgKz0gaGFzVGFibGUgP1xuICAgICAgICAgICAgYDxPdmVycmlkZSBQYXJ0TmFtZT1cIi94bC90YWJsZXMvdGFibGUxLnhtbFwiIENvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sXCIvPmAgOiAnJztcbiAgICAgICAgY29udGVudFR5cGVzICs9IGA8L1R5cGVzPmA7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFRhYmxlc1hNTChhdXRvRmlsdGVyRGltZW5zaW9uOiBzdHJpbmcsIHRhYmxlRGltZW5zaW9uOiBzdHJpbmcsIHRhYmxlQ29sdW1uczogc3RyaW5nLCBzb3J0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7RXhjZWxTdHJpbmdzLlhNTF9TVFJJTkd9PHRhYmxlIHhtbG5zPVwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluXCIgaWQ9XCIxXCIgbmFtZT1cIlRhYmxlMVwiIGRpc3BsYXlOYW1lPVwiVGFibGUxXCIgcmVmPVwiJHt0YWJsZURpbWVuc2lvbn1cIiB0b3RhbHNSb3dTaG93bj1cIjBcIj5cbiAgICA8YXV0b0ZpbHRlciByZWY9XCIke2F1dG9GaWx0ZXJEaW1lbnNpb259XCIvPiR7c29ydH0ke3RhYmxlQ29sdW1uc308dGFibGVTdHlsZUluZm8gbmFtZT1cIlRhYmxlU3R5bGVNZWRpdW0yXCIgc2hvd0ZpcnN0Q29sdW1uPVwiMFwiIHNob3dMYXN0Q29sdW1uPVwiMFwiIHNob3dSb3dTdHJpcGVzPVwiMVwiIHNob3dDb2x1bW5TdHJpcGVzPVwiMFwiLz5cbjwvdGFibGU+YDtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSAgbWF4LWxlbiAqL1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXRFeGNlbENvbHVtbihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgLy8gUmV0dXJucyB0aGUgZXhjZWwgY29sdW1uIG5hbWUgZm9yIGdpdmVuIDAtYmFzZWQgaW5kZXhcbiAgICAgICAgLy8gRm9yIGV4YW1wbGUgMjcgc2hvdWxkIHJldHVybiBcIkFCXCJcbiAgICAgICAgbGV0IHJldHVyblN0cmluZyA9ICcnO1xuICAgICAgICB3aGlsZSAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IGluZGV4ICUgMjY7XG4gICAgICAgICAgICByZXR1cm5TdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1ICsgY2hhcikgKyByZXR1cm5TdHJpbmc7XG4gICAgICAgICAgICBpbmRleCA9IE1hdGguZmxvb3IoaW5kZXggLyAyNikgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5TdHJpbmc7XG4gICAgfVxufVxuIl19
@@ -1420,8 +1420,8 @@ class FilteringExpressionsTree {
1420
1420
  if ((expr instanceof FilteringExpressionsTree)) {
1421
1421
  return this.isFilteringExpressionsTreeForColumn(expr, fieldName);
1422
1422
  }
1423
- else {
1424
- return expr.fieldName === fieldName;
1423
+ else if (expr.fieldName === fieldName) {
1424
+ return true;
1425
1425
  }
1426
1426
  }
1427
1427
  return false;
@@ -3361,7 +3361,7 @@ class ExcelStrings {
3361
3361
  }
3362
3362
  static getStyles() {
3363
3363
  return ExcelStrings.XML_STRING +
3364
- '<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac x16r2" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"><numFmts count="5"><numFmt numFmtId="164" formatCode="&quot;$&quot;#,##0.00"/><numFmt numFmtId="165" formatCode="[$£-809]#,##0.00"/><numFmt numFmtId="166" formatCode="[$¥-804]#,##0.00"/><numFmt numFmtId="167" formatCode="#,##0.00\ [$€-1]"/><numFmt numFmtId="168" formatCode="[$¥-411]#,##0.00"/></numFmts><fonts count="2" x14ac:knownFonts="1"><font><sz val="11"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font><font><sz val="11"/><color rgb="FFB7B7B7"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts><fills count="3"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor rgb="FF0D1822"/><bgColor indexed="64"/></patternFill></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="13"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="165" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="166" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="167" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="168" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="21" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="22" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="10" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles><dxfs count="0"/><tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/><extLst><ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/></ext><ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/></ext></extLst></styleSheet>';
3364
+ '<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac x16r2" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:x16r2="http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"><numFmts count="5"><numFmt numFmtId="164" formatCode="&quot;$&quot;#,##0.00"/><numFmt numFmtId="165" formatCode="[$£-809]#,##0.00"/><numFmt numFmtId="166" formatCode="[$¥-804]#,##0.00"/><numFmt numFmtId="167" formatCode="#,##0.00\ [$€-1]"/><numFmt numFmtId="168" formatCode="[$¥-411]#,##0.00"/></numFmts><fonts count="2" x14ac:knownFonts="1"><font><sz val="11"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font><font><b/><sz val="11"/><color theme="0"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts><fills count="3"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor theme="4"/><bgColor indexed="64"/></patternFill></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="13"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" xfId="0"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="165" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="166" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="167" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="168" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="21" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="22" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/><xf numFmtId="10" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles><dxfs count="0"/><tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/><extLst><ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/></ext><ext uri="{9260A510-F301-46a8-8635-F512D64BE5F5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:timelineStyles defaultTimelineStyle="TimeSlicerStyleLight1"/></ext></extLst></styleSheet>';
3365
3365
  }
3366
3366
  static getWorkbook(worksheetName) {
3367
3367
  return ExcelStrings.XML_STRING + `<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x15" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><fileVersion appName="xl" lastEdited="6" lowestEdited="6" rupBuild="14420"/><workbookPr filterPrivacy="1" defaultThemeVersion="164011"/><bookViews><workbookView xWindow="0" yWindow="0" windowWidth="22260" windowHeight="12645"/></bookViews><sheets><sheet name="${worksheetName}" sheetId="1" r:id="rId1"/></sheets><calcPr calcId="162913"/><extLst><ext uri="{140A7094-0E35-4892-8432-C4D2E57EDEB5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:workbookPr chartTrackingRefBase="1"/></ext></extLst></workbook>`;
@@ -7415,7 +7415,7 @@ class IgxDropDownBaseDirective extends DisplayDensityBase {
7415
7415
  * @param newSelection the item selected
7416
7416
  * @param event the event that triggered the call
7417
7417
  */
7418
- selectItem(newSelection, event) {
7418
+ selectItem(newSelection, event, emit = true) {
7419
7419
  this.selectionChanging.emit({
7420
7420
  newSelection,
7421
7421
  oldSelection: null,
@@ -11235,6 +11235,10 @@ class IgxDragDirective {
11235
11235
  }
11236
11236
  /** Method setting transformation to the base draggable element. */
11237
11237
  setTransformXY(x, y) {
11238
+ if (x === 0 && y === 0) {
11239
+ this.element.nativeElement.style.transform = '';
11240
+ return;
11241
+ }
11238
11242
  this.element.nativeElement.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0px)';
11239
11243
  }
11240
11244
  /**
@@ -13448,13 +13452,13 @@ class IgxForOfDirective extends IgxForOfToken {
13448
13452
  const currDiff = newVal - oldVal;
13449
13453
  diffs.push(currDiff);
13450
13454
  totalDiff += currDiff;
13451
- this.sizesCache[index + 1] += totalDiff;
13455
+ this.sizesCache[index + 1] = (this.sizesCache[index] || 0) + newVal;
13452
13456
  }
13453
13457
  }
13454
13458
  // update cache
13455
13459
  if (Math.abs(totalDiff) > 0) {
13456
13460
  for (let j = this.state.startIndex + this.state.chunkSize + 1; j < this.sizesCache.length; j++) {
13457
- this.sizesCache[j] += totalDiff;
13461
+ this.sizesCache[j] = (this.sizesCache[j] || 0) + totalDiff;
13458
13462
  }
13459
13463
  // update scrBar heights/widths
13460
13464
  const reducer = (acc, val) => acc + val;
@@ -22450,12 +22454,12 @@ class IgxDropDownItemBaseDirective {
22450
22454
  if (this._selected) {
22451
22455
  const dropDownSelectedItem = this.dropDown.selectedItem;
22452
22456
  if (!dropDownSelectedItem) {
22453
- this.dropDown.selectItem(this);
22457
+ this.dropDown.selectItem(this, undefined, false);
22454
22458
  }
22455
22459
  else if (this.hasIndex
22456
22460
  ? this._index !== dropDownSelectedItem.index || this.value !== dropDownSelectedItem.value :
22457
22461
  this !== dropDownSelectedItem) {
22458
- this.dropDown.selectItem(this);
22462
+ this.dropDown.selectItem(this, undefined, false);
22459
22463
  }
22460
22464
  }
22461
22465
  }
@@ -22802,9 +22806,20 @@ class IgxDropDownComponent extends IgxDropDownBaseDirective {
22802
22806
  * ```
22803
22807
  */
22804
22808
  open(overlaySettings) {
22805
- this.toggleDirective.open(overlaySettings);
22809
+ const settings = overlaySettings || this.getDefaultOverlaySettings();
22810
+ this.toggleDirective.open(settings);
22806
22811
  this.updateScrollPosition();
22807
22812
  }
22813
+ /**
22814
+ * @hidden @internal
22815
+ */
22816
+ getDefaultOverlaySettings() {
22817
+ return {
22818
+ closeOnOutsideClick: true,
22819
+ modal: false,
22820
+ positionStrategy: new ConnectedPositioningStrategy()
22821
+ };
22822
+ }
22808
22823
  /**
22809
22824
  * Closes the dropdown
22810
22825
  *
@@ -23044,14 +23059,15 @@ class IgxDropDownComponent extends IgxDropDownBaseDirective {
23044
23059
  }
23045
23060
  }
23046
23061
  /**
23047
- * Handles the `selectionChanging` emit and the drop down toggle when selection changes
23048
- *
23049
- * @hidden
23050
- * @internal
23051
- * @param newSelection
23052
- * @param event
23053
- */
23054
- selectItem(newSelection, event) {
23062
+ * Handles the `selectionChanging` emit and the drop down toggle when selection changes
23063
+ *
23064
+ * @hidden
23065
+ * @internal
23066
+ * @param newSelection
23067
+ * @param event
23068
+ * @param emit
23069
+ */
23070
+ selectItem(newSelection, event, emit = true) {
23055
23071
  const oldSelection = this.selectedItem;
23056
23072
  if (!newSelection) {
23057
23073
  newSelection = this.focusedItem;
@@ -23069,7 +23085,9 @@ class IgxDropDownComponent extends IgxDropDownBaseDirective {
23069
23085
  };
23070
23086
  }
23071
23087
  const args = { oldSelection, newSelection, cancel: false, owner: this };
23072
- this.selectionChanging.emit(args);
23088
+ if (emit) {
23089
+ this.selectionChanging.emit(args);
23090
+ }
23073
23091
  if (!args.cancel) {
23074
23092
  if (this.isSelectionValid(args.newSelection)) {
23075
23093
  this.selection.set(this.id, new Set([args.newSelection]));
@@ -27880,8 +27898,7 @@ class IgxButtonGroupComponent extends DisplayDensityBase {
27880
27898
  if (updatedButtons.length > 0) {
27881
27899
  updatedButtons.forEach((button) => {
27882
27900
  const index = this.buttons.map((b) => b.nativeElement).indexOf(button);
27883
- const args = { owner: this, button: this.buttons[index], index };
27884
- this.updateButtonSelectionState(index, args);
27901
+ this.updateButtonSelectionState(index);
27885
27902
  });
27886
27903
  }
27887
27904
  // Watch for changes again
@@ -27899,14 +27916,12 @@ class IgxButtonGroupComponent extends DisplayDensityBase {
27899
27916
  }, updated);
27900
27917
  return updated;
27901
27918
  }
27902
- updateButtonSelectionState(index, args) {
27919
+ updateButtonSelectionState(index) {
27903
27920
  if (this.buttons[index].selected) {
27904
27921
  this.updateSelected(index);
27905
- this.selected.emit(args);
27906
27922
  }
27907
27923
  else {
27908
27924
  this.updateDeselected(index);
27909
- this.deselected.emit(args);
27910
27925
  }
27911
27926
  }
27912
27927
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxButtonGroupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
@@ -35615,6 +35630,39 @@ const ItemHeights = {
35615
35630
  compact: 28,
35616
35631
  };
35617
35632
  class IgxComboBaseDirective extends DisplayDensityBase {
35633
+ /**
35634
+ * Gets/gets combo id.
35635
+ *
35636
+ * ```typescript
35637
+ * // get
35638
+ * let id = this.combo.id;
35639
+ * ```
35640
+ *
35641
+ * ```html
35642
+ * <!--set-->
35643
+ * <igx-combo [id]='combo1'></igx-combo>
35644
+ * ```
35645
+ */
35646
+ get id() {
35647
+ return this._id;
35648
+ }
35649
+ set id(value) {
35650
+ if (!value) {
35651
+ return;
35652
+ }
35653
+ const selection = this.selectionService.get(this._id);
35654
+ this._id = value;
35655
+ if (selection) {
35656
+ this.selectionService.set(this._id, selection);
35657
+ }
35658
+ if (this.dropdown.open) {
35659
+ this.dropdown.close();
35660
+ }
35661
+ if (this.inputGroup?.isFocused) {
35662
+ this.inputGroup.element.nativeElement.blur();
35663
+ this.inputGroup.isFocused = false;
35664
+ }
35665
+ }
35618
35666
  /**
35619
35667
  * Configures the drop down list height
35620
35668
  *
@@ -35961,20 +36009,6 @@ class IgxComboBaseDirective extends DisplayDensityBase {
35961
36009
  * ```
35962
36010
  */
35963
36011
  this.overlaySettings = null;
35964
- /**
35965
- * Gets/gets combo id.
35966
- *
35967
- * ```typescript
35968
- * // get
35969
- * let id = this.combo.id;
35970
- * ```
35971
- *
35972
- * ```html
35973
- * <!--set-->
35974
- * <igx-combo [id]='combo1'></igx-combo>
35975
- * ```
35976
- */
35977
- this.id = `igx-combo-${NEXT_ID$f++}`;
35978
36012
  /**
35979
36013
  * Controls whether custom values can be added to the collection
35980
36014
  *
@@ -36256,6 +36290,7 @@ class IgxComboBaseDirective extends DisplayDensityBase {
36256
36290
  this._onTouchedCallback = noop;
36257
36291
  this._onChangeCallback = noop;
36258
36292
  this.compareCollator = new Intl.Collator();
36293
+ this._id = `igx-combo-${NEXT_ID$f++}`;
36259
36294
  this._type = null;
36260
36295
  this._dataType = '';
36261
36296
  this._itemHeight = null;
@@ -48378,14 +48413,19 @@ class IgxExcelStyleCustomDialogComponent {
48378
48413
  this.expressionDateComponents.forEach(x => x.cdr.markForCheck());
48379
48414
  }
48380
48415
  createInitialExpressionUIElement() {
48381
- this.expressionsList = [];
48382
- const firstExprUI = new ExpressionUI();
48383
- firstExprUI.expression = {
48384
- condition: this.createCondition(this.selectedOperator),
48385
- fieldName: this.column.field,
48386
- ignoreCase: this.column.filteringIgnoreCase,
48387
- searchVal: null
48388
- };
48416
+ let firstExprUI = new ExpressionUI();
48417
+ if (this.expressionsList.length == 1 && this.expressionsList[0].expression.condition.name === this.selectedOperator) {
48418
+ firstExprUI = this.expressionsList.pop();
48419
+ }
48420
+ else {
48421
+ this.expressionsList = [];
48422
+ firstExprUI.expression = {
48423
+ condition: this.createCondition(this.selectedOperator),
48424
+ fieldName: this.column.field,
48425
+ ignoreCase: this.column.filteringIgnoreCase,
48426
+ searchVal: null
48427
+ };
48428
+ }
48389
48429
  firstExprUI.afterOperator = FilteringLogic.And;
48390
48430
  this.expressionsList.push(firstExprUI);
48391
48431
  const secondExprUI = new ExpressionUI();
@@ -48445,6 +48485,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
48445
48485
  * A component used for presenting Excel style conditional filter UI.
48446
48486
  */
48447
48487
  class IgxExcelStyleConditionalFilterComponent {
48488
+ get filterNumber() {
48489
+ return this.esf.expressionsList.length;
48490
+ }
48448
48491
  constructor(esf, platform) {
48449
48492
  this.esf = esf;
48450
48493
  this.platform = platform;
@@ -48514,6 +48557,16 @@ class IgxExcelStyleConditionalFilterComponent {
48514
48557
  getCondition(value) {
48515
48558
  return this.esf.column.filters.condition(value);
48516
48559
  }
48560
+ /**
48561
+ * @hidden @internal
48562
+ */
48563
+ getSelectedCondition(condition) {
48564
+ const expressions = this.esf.expressionsList;
48565
+ if (expressions.length < 1) {
48566
+ return false;
48567
+ }
48568
+ return expressions.length === 1 ? expressions[0].expression.condition.name === condition : condition === 'custom';
48569
+ }
48517
48570
  /**
48518
48571
  * @hidden @internal
48519
48572
  */
@@ -48580,11 +48633,11 @@ class IgxExcelStyleConditionalFilterComponent {
48580
48633
  return this.esf.column.filters.conditionList();
48581
48634
  }
48582
48635
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxExcelStyleConditionalFilterComponent, deps: [{ token: BaseFilteringComponent }, { token: PlatformUtil }], target: i0.ɵɵFactoryTarget.Component }); }
48583
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxExcelStyleConditionalFilterComponent, isStandalone: true, selector: "igx-excel-style-conditional-filter", viewQueries: [{ propertyName: "customDialog", first: true, predicate: ["customDialog"], descendants: true, read: IgxExcelStyleCustomDialogComponent }, { propertyName: "subMenu", first: true, predicate: ["subMenu"], descendants: true, read: IgxDropDownComponent }], ngImport: i0, template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"this.subMenu.listId\"\n [attr.aria-activedescendant]=\"!this.subMenu.collapsed ? this.subMenu.focusedItem?.id : null\">\n <span>{{ subMenuText }}</span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "component", type: IgxExcelStyleCustomDialogComponent, selector: "igx-excel-style-custom-dialog", inputs: ["expressionsList", "column", "selectedOperator", "filteringService", "overlayComponentId", "displayDensity"] }] }); }
48636
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxExcelStyleConditionalFilterComponent, isStandalone: true, selector: "igx-excel-style-conditional-filter", viewQueries: [{ propertyName: "customDialog", first: true, predicate: ["customDialog"], descendants: true, read: IgxExcelStyleCustomDialogComponent }, { propertyName: "subMenu", first: true, predicate: ["subMenu"], descendants: true, read: IgxDropDownComponent }], ngImport: i0, template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n [ngClass]=\"filterNumber > 0 ? 'igx-excel-filter__actions-filter--active' : ''\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"this.subMenu.listId\"\n [attr.aria-activedescendant]=\"!this.subMenu.collapsed ? this.subMenu.focusedItem?.id : null\">\n <span class=\"igx-excel-filter__filter-number\">{{ subMenuText }} <ng-container *ngIf=\"filterNumber > 0\">({{filterNumber}})</ng-container></span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [selected]=\"getSelectedCondition(condition)\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\"\n [selected]=\"getSelectedCondition('custom')\" >\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "component", type: IgxExcelStyleCustomDialogComponent, selector: "igx-excel-style-custom-dialog", inputs: ["expressionsList", "column", "selectedOperator", "filteringService", "overlayComponentId", "displayDensity"] }] }); }
48584
48637
  }
48585
48638
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxExcelStyleConditionalFilterComponent, decorators: [{
48586
48639
  type: Component,
48587
- args: [{ selector: 'igx-excel-style-conditional-filter', standalone: true, imports: [NgIf, IgxDropDownItemNavigationDirective, IgxIconComponent, IgxDropDownComponent, NgFor, IgxDropDownItemComponent, IgxExcelStyleCustomDialogComponent], template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"this.subMenu.listId\"\n [attr.aria-activedescendant]=\"!this.subMenu.collapsed ? this.subMenu.focusedItem?.id : null\">\n <span>{{ subMenuText }}</span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n" }]
48640
+ args: [{ selector: 'igx-excel-style-conditional-filter', standalone: true, imports: [NgIf, NgClass, IgxDropDownItemNavigationDirective, IgxIconComponent, IgxDropDownComponent, NgFor, IgxDropDownItemComponent, IgxExcelStyleCustomDialogComponent], template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n [ngClass]=\"filterNumber > 0 ? 'igx-excel-filter__actions-filter--active' : ''\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"this.subMenu.listId\"\n [attr.aria-activedescendant]=\"!this.subMenu.collapsed ? this.subMenu.focusedItem?.id : null\">\n <span class=\"igx-excel-filter__filter-number\">{{ subMenuText }} <ng-container *ngIf=\"filterNumber > 0\">({{filterNumber}})</ng-container></span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [selected]=\"getSelectedCondition(condition)\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\"\n [selected]=\"getSelectedCondition('custom')\" >\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n" }]
48588
48641
  }], ctorParameters: () => [{ type: BaseFilteringComponent }, { type: PlatformUtil }], propDecorators: { customDialog: [{
48589
48642
  type: ViewChild,
48590
48643
  args: ['customDialog', { read: IgxExcelStyleCustomDialogComponent }]
@@ -54502,7 +54555,7 @@ class IgxGridHeaderComponent {
54502
54555
  return this.sortDirection !== SortingDirection.None;
54503
54556
  }
54504
54557
  get filterIconClassName() {
54505
- return this.column.filteringExpressionsTree ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';
54558
+ return this.column.filteringExpressionsTree || this.isAdvancedFilterApplied() ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';
54506
54559
  }
54507
54560
  get selectable() {
54508
54561
  return this.grid.columnSelection !== GridSelectionMode.none &&
@@ -54604,6 +54657,12 @@ class IgxGridHeaderComponent {
54604
54657
  const expr = this.grid.sortingExpressions.find((x) => x.fieldName === this.column.field);
54605
54658
  this.sortDirection = expr ? expr.dir : SortingDirection.None;
54606
54659
  }
54660
+ isAdvancedFilterApplied() {
54661
+ if (!this.grid.advancedFilteringExpressionsTree) {
54662
+ return false;
54663
+ }
54664
+ return !!this.grid.advancedFilteringExpressionsTree.find(this.column.field);
54665
+ }
54607
54666
  triggerSort() {
54608
54667
  const groupingExpr = this.grid.groupingExpressions ?
54609
54668
  this.grid.groupingExpressions.find((expr) => expr.fieldName === this.column.field) :
@@ -55795,8 +55854,11 @@ class IgxGridHeaderGroupComponent {
55795
55854
  * @hidden
55796
55855
  */
55797
55856
  onMouseDown(event) {
55798
- // hack for preventing text selection in IE and Edge while dragging the resize element
55799
- event.preventDefault();
55857
+ if (!this.grid.allowFiltering ||
55858
+ (event.composedPath().findIndex(el => el.tagName?.toLowerCase() === 'igx-grid-filtering-cell') < 1)) {
55859
+ // Hack for preventing text selection in IE and Edge while dragging the resize element
55860
+ event.preventDefault();
55861
+ }
55800
55862
  }
55801
55863
  /**
55802
55864
  * @hidden
@@ -75043,7 +75105,7 @@ class IgxGridStateDirective {
75043
75105
  Object.assign(ref1.instance, colState);
75044
75106
  ref1.instance.grid = context.currGrid;
75045
75107
  if (ref1.instance.parent) {
75046
- const columnGroup = newColumns.find(e => e.header === ref1.instance.parent);
75108
+ const columnGroup = newColumns.find(e => e.header === ref1.instance.parent && e.columnGroup);
75047
75109
  columnGroup.children.reset([...columnGroup.children.toArray(), ref1.instance]);
75048
75110
  ref1.instance.parent = columnGroup;
75049
75111
  }
@@ -75055,7 +75117,7 @@ class IgxGridStateDirective {
75055
75117
  Object.assign(ref.instance, colState);
75056
75118
  ref.instance.grid = context.currGrid;
75057
75119
  if (ref.instance.parent) {
75058
- const columnGroup = newColumns.find(e => e.header === ref.instance.parent);
75120
+ const columnGroup = newColumns.find(e => e.header === ref.instance.parent && e.columnGroup);
75059
75121
  if (columnGroup) {
75060
75122
  ref.instance.parent = columnGroup;
75061
75123
  columnGroup.children.reset([...columnGroup.children.toArray(), ref.instance]);
@@ -75659,13 +75721,36 @@ class IgxGridToolbarAdvancedFilteringComponent {
75659
75721
  }
75660
75722
  constructor(toolbar) {
75661
75723
  this.toolbar = toolbar;
75724
+ this.grid?.advancedFilteringExpressionsTreeChange.subscribe(filteringTree => {
75725
+ this.numberOfColumns = this.extractUniqueFieldNamesFromFilterTree(filteringTree).length;
75726
+ });
75727
+ }
75728
+ /**
75729
+ * @hidden
75730
+ */
75731
+ ngAfterViewInit() {
75732
+ this.numberOfColumns = this.grid?.advancedFilteringExpressionsTree ? this.extractUniqueFieldNamesFromFilterTree(this.grid?.advancedFilteringExpressionsTree).length : 0;
75733
+ }
75734
+ extractUniqueFieldNamesFromFilterTree(filteringTree) {
75735
+ const columnNames = [];
75736
+ if (!filteringTree)
75737
+ return columnNames;
75738
+ filteringTree.filteringOperands.forEach((expr) => {
75739
+ if (expr instanceof FilteringExpressionsTree) {
75740
+ columnNames.push(...this.extractUniqueFieldNamesFromFilterTree(expr));
75741
+ }
75742
+ else {
75743
+ columnNames.push(expr.fieldName);
75744
+ }
75745
+ });
75746
+ return [...new Set(columnNames)];
75662
75747
  }
75663
75748
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, deps: [{ token: IgxToolbarToken }], target: i0.ɵɵFactoryTarget.Component }); }
75664
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxGridToolbarAdvancedFilteringComponent, isStandalone: true, selector: "igx-grid-toolbar-advanced-filtering", inputs: { overlaySettings: "overlaySettings" }, ngImport: i0, template: "<button igxButton=\"outlined\" type=\"button\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog(overlaySettings)\"\n [ngClass]=\"grid.advancedFilteringExpressionsTree ? 'igx-grid-toolbar__adv-filter--filtered' : 'igx-grid-toolbar__adv-filter'\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n</button>\n", dependencies: [{ kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
75749
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: IgxGridToolbarAdvancedFilteringComponent, isStandalone: true, selector: "igx-grid-toolbar-advanced-filtering", inputs: { overlaySettings: "overlaySettings" }, ngImport: i0, template: "<button igxButton=\"outlined\" type=\"button\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog(overlaySettings)\"\n class=\"igx-grid-toolbar__adv-filter\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n <span class=\"igx-adv-filter--column-number\" *ngIf=\"grid?.advancedFilteringExpressionsTree\"> ({{ numberOfColumns }}) </span>\n</button>\n", dependencies: [{ kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
75665
75750
  }
75666
75751
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxGridToolbarAdvancedFilteringComponent, decorators: [{
75667
75752
  type: Component,
75668
- args: [{ selector: 'igx-grid-toolbar-advanced-filtering', standalone: true, imports: [IgxButtonDirective, IgxRippleDirective, NgClass, IgxIconComponent, NgIf], template: "<button igxButton=\"outlined\" type=\"button\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog(overlaySettings)\"\n [ngClass]=\"grid.advancedFilteringExpressionsTree ? 'igx-grid-toolbar__adv-filter--filtered' : 'igx-grid-toolbar__adv-filter'\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n</button>\n" }]
75753
+ args: [{ selector: 'igx-grid-toolbar-advanced-filtering', standalone: true, imports: [IgxButtonDirective, IgxRippleDirective, NgClass, IgxIconComponent, NgIf], template: "<button igxButton=\"outlined\" type=\"button\" [displayDensity]=\"grid.displayDensity\" name=\"btnAdvancedFiltering\" igxRipple\n [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n (click)=\"grid.openAdvancedFilteringDialog(overlaySettings)\"\n class=\"igx-grid-toolbar__adv-filter\">\n <igx-icon>filter_list</igx-icon>\n <span #ref>\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"!ref.childNodes.length\">{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n <span class=\"igx-adv-filter--column-number\" *ngIf=\"grid?.advancedFilteringExpressionsTree\"> ({{ numberOfColumns }}) </span>\n</button>\n" }]
75669
75754
  }], ctorParameters: () => [{ type: IgxToolbarToken, decorators: [{
75670
75755
  type: Inject,
75671
75756
  args: [IgxToolbarToken]