@po-ui/ng-components 6.6.0 → 6.9.0

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 (38) hide show
  1. package/esm2020/lib/components/po-chart/interfaces/po-chart-serie.interface.mjs +1 -1
  2. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox-base.component.mjs +12 -4
  3. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox.component.mjs +15 -10
  4. package/esm2020/lib/components/po-field/po-combo/po-combo-base.component.mjs +45 -3
  5. package/esm2020/lib/components/po-field/po-combo/po-combo-filter.service.mjs +16 -8
  6. package/esm2020/lib/components/po-field/po-combo/po-combo.component.mjs +221 -112
  7. package/esm2020/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.mjs +5 -3
  8. package/esm2020/lib/components/po-table/po-table-base.component.mjs +18 -2
  9. package/esm2020/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.mjs +10 -2
  10. package/esm2020/lib/components/po-table/po-table.component.mjs +987 -433
  11. package/esm2020/lib/directives/po-tooltip/po-tooltip-base.directive.mjs +2 -2
  12. package/esm2020/lib/directives/po-tooltip/po-tooltip.directive.mjs +32 -2
  13. package/esm2020/lib/services/po-color/po-color.service.mjs +3 -2
  14. package/fesm2015/po-ui-ng-components.mjs +1515 -601
  15. package/fesm2015/po-ui-ng-components.mjs.map +1 -1
  16. package/fesm2020/po-ui-ng-components.mjs +1346 -565
  17. package/fesm2020/po-ui-ng-components.mjs.map +1 -1
  18. package/lib/components/po-chart/interfaces/po-chart-serie.interface.d.ts +3 -0
  19. package/lib/components/po-field/po-checkbox/po-checkbox-base.component.d.ts +12 -4
  20. package/lib/components/po-field/po-checkbox/po-checkbox.component.d.ts +2 -2
  21. package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +30 -1
  22. package/lib/components/po-field/po-combo/po-combo-filter.service.d.ts +3 -0
  23. package/lib/components/po-field/po-combo/po-combo.component.d.ts +22 -3
  24. package/lib/components/po-table/po-table-base.component.d.ts +12 -1
  25. package/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.d.ts +3 -1
  26. package/lib/components/po-table/po-table.component.d.ts +3 -0
  27. package/lib/directives/po-tooltip/po-tooltip-base.directive.d.ts +1 -1
  28. package/lib/directives/po-tooltip/po-tooltip.directive.d.ts +3 -0
  29. package/lib/services/po-color/po-color.service.d.ts +1 -0
  30. package/package.json +4 -4
  31. package/po-ui-ng-components-6.9.0.tgz +0 -0
  32. package/schematics/ng-add/index.js +1 -1
  33. package/schematics/ng-update/v2/index.js +1 -1
  34. package/schematics/ng-update/v3/index.js +1 -1
  35. package/schematics/ng-update/v4/index.js +1 -1
  36. package/schematics/ng-update/v5/index.js +1 -1
  37. package/schematics/ng-update/v6/index.js +1 -1
  38. package/po-ui-ng-components-6.6.0.tgz +0 -0
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY2hhcnQtc2VyaWUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWNoYXJ0L2ludGVyZmFjZXMvcG8tY2hhcnQtc2VyaWUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb0NoYXJ0VHlwZSB9IGZyb20gJy4uL2VudW1zL3BvLWNoYXJ0LXR5cGUuZW51bSc7XG5cbi8qKlxuICogQHVzZWRCeSBQb0NoYXJ0Q29tcG9uZW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogSW50ZXJmYWNlIGRhcyBzZXJpZXMgZGluw6JtaWNhcyBkbyBgcG8tY2hhcnRgIHF1ZSBwb3NzaWJpbGl0YSBkZXNlbmhhciBncsOhZmljb3MgZG9zIHRpcG9zIGBhcmVhYCwgYGJhcmAsIGBjb2x1bW5gLCBgbGluZWAsIGBkb251dGAgZSBgcGllYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvQ2hhcnRTZXJpZSB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGV0ZXJtaW5hIGEgY29yIGRhIHPDqXJpZS4gQXMgbWFuZWlyYXMgZGUgY3VzdG9taXphciBvICpwcmVzZXQqIHBhZHLDo28gZGUgY29yZXMgc8OjbzpcbiAgICogLSBIZXhhZGV4aW1hbCwgcG9yIGV4ZW1wbG8gYCNjNjQ4NDBgO1xuICAgKiAtIFJHQiwgY29tbyBgcmdiKDAsIDAsIDE2NSlgXG4gICAqIC0gTyBub21lIGRhIGNvciwgcG9yIGV4ZW1wbG8gYGJsdWVgO1xuICAgKiAtIFVzYW5kbyB1bWEgZGFzIGNvcmVzIGRvIHRlbWEgZG8gUE86XG4gICAqICAgIFZhbG9yZXMgdsOhbGlkb3M6XG4gICAqICAgIC0gPHNwYW4gY2xhc3M9XCJkb3QgcG8tY29sb3ItMDFcIj48L3NwYW4+IGBjb2xvci0wMWBcbiAgICogICAgLSA8c3BhbiBjbGFzcz1cImRvdCBwby1jb2xvci0wMlwiPjwvc3Bhbj4gYGNvbG9yLTAyYFxuICAgKiAgICAtIDxzcGFuIGNsYXNzPVwiZG90IHBvLWNvbG9yLTAzXCI+PC9zcGFuPiBgY29sb3ItMDNgXG4gICAqICAgIC0gPHNwYW4gY2xhc3M9XCJkb3QgcG8tY29sb3ItMDRcIj48L3NwYW4+IGBjb2xvci0wNGBcbiAgICogICAgLSA8c3BhbiBjbGFzcz1cImRvdCBwby1jb2xvci0wNVwiPjwvc3Bhbj4gYGNvbG9yLTA1YFxuICAgKiAgICAtIDxzcGFuIGNsYXNzPVwiZG90IHBvLWNvbG9yLTA2XCI+PC9zcGFuPiBgY29sb3ItMDZgXG4gICAqICAgIC0gPHNwYW4gY2xhc3M9XCJkb3QgcG8tY29sb3ItMDdcIj48L3NwYW4+IGBjb2xvci0wN2BcbiAgICogICAgLSA8c3BhbiBjbGFzcz1cImRvdCBwby1jb2xvci0wOFwiPjwvc3Bhbj4gYGNvbG9yLTA4YFxuICAgKiAgICAtIDxzcGFuIGNsYXNzPVwiZG90IHBvLWNvbG9yLTA5XCI+PC9zcGFuPiBgY29sb3ItMDlgXG4gICAqICAgIC0gPHNwYW4gY2xhc3M9XCJkb3QgcG8tY29sb3ItMTBcIj48L3NwYW4+IGBjb2xvci0xMGBcbiAgICogICAgLSA8c3BhbiBjbGFzcz1cImRvdCBwby1jb2xvci0xMVwiPjwvc3Bhbj4gYGNvbG9yLTExYFxuICAgKiAgICAtIDxzcGFuIGNsYXNzPVwiZG90IHBvLWNvbG9yLTEyXCI+PC9zcGFuPiBgY29sb3ItMTJgXG4gICAqL1xuICBjb2xvcj86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgYSBsaXN0YSBkZSB2YWxvcmVzIHBhcmEgYSBzw6lyaWUuIE9zIHRpcG9zIGVzcGVyYWRvcyBzw6NvIGRlIGFjb3JkbyBjb20gbyB0aXBvIGRlIGdyw6FmaWNvOlxuICAgKiAtIFBhcmEgZ3LDoWZpY29zIGRvcyB0aXBvcyBgZG9udXRgIGUgYHBpZWAsIGVzcGVyYS1zZSAqbnVtYmVyKjtcbiAgICogLSBQYXJhIGdyw6FmaWNvcyBkb3MgdGlwb3MgYGFyZWFgLCBgYmFyYCwgYGNvbHVtbmAgZSBgbGluZWAsIGVzcGVyYS1zZSB1bSAqYXJyYXkqIGRlIGBkYXRhYC5cbiAgICpcbiAgICogPiBTZSBwYXNzYWRvIHZhbG9yIGBudWxsYCBlbSBkZXRlcm1pbmFkbyBpdGVtIGRhIGxpc3RhLCBhIGl0ZXJhw6fDo28gaXLDoSBpZ25vcsOhLWxvLlxuICAgKi9cbiAgZGF0YT86IG51bWJlciB8IEFycmF5PG51bWJlcj47XG5cbiAgLyoqIFLDs3R1bG8gcmVmZXLDqm5jaWEgZGEgc8OpcmllOy4gKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gdGV4dG8gcXVlIHNlcsOhIGV4aWJpZG8gYW8gcGFzc2FyIG8gbW91c2UgcG9yIGNpbWEgZGFzIHPDqXJpZXMgZG8gKmNoYXJ0Ki5cbiAgICpcbiAgICogPiBDYXNvIG7Do28gc2VqYSBpbmZvcm1hZG8gdW0gdmFsb3IgcGFyYSBvICp0b29sdGlwKiwgc2Vyw6EgZXhpYmlkbyBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICogLSBgZG9udXRgOiBgbGFiZWxgOiB2YWxvciBwcm9wb3JjaW9uYWwgYW8gdG90YWwgZW0gcG9yY2VudGFnZW0uXG4gICAqIC0gYGFyZWFgLCBgYmFyYCwgYGNvbHVtbmAsIGBsaW5lYCBlIGBwaWVgOiBgbGFiZWxgOiBgZGF0YWAuXG4gICAqL1xuICB0b29sdGlwPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBlbSBxdWFsIHRpcG8gZGUgZ3LDoWZpY28gcXVlIHNlcsOhIGV4aWJpZGEgYSBzw6lyaWUuIMOJIHBvc3PDrXZlbCBjb21iaW5hciBzw6lyaWVzIGRvcyB0aXBvcyBgY29sdW1uYCBlIGBsaW5lYCBubyBtZXNtbyBncsOhZmljby4gUGFyYSBpc3NvLCBiYXN0YSBjcmlhciBhcyBzw6lyaWVzIGNvbSBhcyBjb25maWd1cmHDp8O1ZXM6XG4gICAqIC0gU2VyaWUgQTogYHsgdHlwZTogQ2hhcnRUeXBlLkNvbHVtbiwgZGF0YTogLi4uIH1gO1xuICAgKiAtIFPDqXJpZSBCOiBgeyB0eXBlOiBDaGFydFR5cGUuTGluZSwgZGF0YTogLi4uIH1gLlxuICAgKlxuICAgKiBTZSB0YW50byBgcC10eXBlYCBxdWFudG8gYHsgdHlwZSB9YCBmb3JlbSBpZ25vcmFkb3MsIG8gcGFkcsOjbyBnZXJhZG8gcGVsbyBjb21wb25lbnRlIHNlcsOhOlxuICAgKiAtIGBjb2x1bW5gOiBzZSBgZGF0YWAgcmVjZWJlciBgQXJyYXk8bnVtYmVyPmA7XG4gICAqIC0gYHBpZWA6IHNlIGBkYXRhYCBmb3IgKm51bWJlciouXG4gICAqXG4gICAqID4gU2UgdXRpbGl6YWRhIGEgcHJvcHJpZWRhZGUgYHAtdHlwZWAsIGRpc3BlbnNhLXNlIGEgZGVmaW5pw6fDo28gZGVzdGEgcHJvcHJpZWRhZGUuIFBvcsOpbSwgc2UgaG91dmVyIGRlY2xhcmHDp8OjbyBwYXJhIGFtYmFzLCBvIHZhbG9yIGB7dHlwZX1gIGRhIHByaW1laXJhIHPDqXJpZSBzb2JyZXNjcmV2ZXLDoSBvIHZhbG9yIGRlZmluaWRvIGVtIGBwLXR5cGVgLlxuICAgKlxuICAgKiA+IE8gY29tcG9uZW50ZSBzw7MgZXhpYmlyw6EgYXMgc8OpcmllcyBxdWUgdGl2ZXJlbSBvIG1lc21vIGB0eXBlYCBkZWZpbmlkbywgZXhjZXRvIHBhcmEgbWVzY2xhZ2VtIHBhcmEgdGlwb3MgYGNvbHVtbmAgZSBgbGluZWAuXG4gICAqL1xuICB0eXBlPzogUG9DaGFydFR5cGU7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY2hhcnQtc2VyaWUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWNoYXJ0L2ludGVyZmFjZXMvcG8tY2hhcnQtc2VyaWUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb0NoYXJ0VHlwZSB9IGZyb20gJy4uL2VudW1zL3BvLWNoYXJ0LXR5cGUuZW51bSc7XG5cbi8qKlxuICogQHVzZWRCeSBQb0NoYXJ0Q29tcG9uZW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogSW50ZXJmYWNlIGRhcyBzZXJpZXMgZGluw6JtaWNhcyBkbyBgcG8tY2hhcnRgIHF1ZSBwb3NzaWJpbGl0YSBkZXNlbmhhciBncsOhZmljb3MgZG9zIHRpcG9zIGBhcmVhYCwgYGJhcmAsIGBjb2x1bW5gLCBgbGluZWAsIGBkb251dGAgZSBgcGllYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvQ2hhcnRTZXJpZSB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGV0ZXJtaW5hIGEgY29yIGRhIHPDqXJpZS4gQXMgbWFuZWlyYXMgZGUgY3VzdG9taXphciBvICpwcmVzZXQqIHBhZHLDo28gZGUgY29yZXMgc8OjbzpcbiAgICogLSBIZXhhZGV4aW1hbCwgcG9yIGV4ZW1wbG8gYCNjNjQ4NDBgO1xuICAgKiAtIFJHQiwgY29tbyBgcmdiKDAsIDAsIDE2NSlgXG4gICAqIC0gTyBub21lIGRhIGNvciwgcG9yIGV4ZW1wbG8gYGJsdWVgO1xuICAgKiAtIFVzYW5kbyB1bWEgZGFzIGNvcmVzIGRvIHRlbWEgZG8gUE86XG4gICAqICAgIFZhbG9yZXMgdsOhbGlkb3M6XG4gICAqICAgIC0gPHNwYW4gY2xhc3M9XCJkb3QgcG8tY29sb3ItMDFcIj48L3NwYW4+IGBjb2xvci0wMWBcbiAgICogICAgLSA8c3BhbiBjbGFzcz1cImRvdCBwby1jb2xvci0wMlwiPjwvc3Bhbj4gYGNvbG9yLTAyYFxuICAgKiAgICAtIDxzcGFuIGNsYXNzPVwiZG90IHBvLWNvbG9yLTAzXCI+PC9zcGFuPiBgY29sb3ItMDNgXG4gICAqICAgIC0gPHNwYW4gY2xhc3M9XCJkb3QgcG8tY29sb3ItMDRcIj48L3NwYW4+IGBjb2xvci0wNGBcbiAgICogICAgLSA8c3BhbiBjbGFzcz1cImRvdCBwby1jb2xvci0wNVwiPjwvc3Bhbj4gYGNvbG9yLTA1YFxuICAgKiAgICAtIDxzcGFuIGNsYXNzPVwiZG90IHBvLWNvbG9yLTA2XCI+PC9zcGFuPiBgY29sb3ItMDZgXG4gICAqICAgIC0gPHNwYW4gY2xhc3M9XCJkb3QgcG8tY29sb3ItMDdcIj48L3NwYW4+IGBjb2xvci0wN2BcbiAgICogICAgLSA8c3BhbiBjbGFzcz1cImRvdCBwby1jb2xvci0wOFwiPjwvc3Bhbj4gYGNvbG9yLTA4YFxuICAgKiAgICAtIDxzcGFuIGNsYXNzPVwiZG90IHBvLWNvbG9yLTA5XCI+PC9zcGFuPiBgY29sb3ItMDlgXG4gICAqICAgIC0gPHNwYW4gY2xhc3M9XCJkb3QgcG8tY29sb3ItMTBcIj48L3NwYW4+IGBjb2xvci0xMGBcbiAgICogICAgLSA8c3BhbiBjbGFzcz1cImRvdCBwby1jb2xvci0xMVwiPjwvc3Bhbj4gYGNvbG9yLTExYFxuICAgKiAgICAtIDxzcGFuIGNsYXNzPVwiZG90IHBvLWNvbG9yLTEyXCI+PC9zcGFuPiBgY29sb3ItMTJgXG4gICAqXG4gICAqXG4gICAqIC0gQSBwYXJ0aXIgZGEgMTPCsCBzw6lyaWUgbyB2YWxvciBkYSBjb3Igc2Vyw6EgcHJldGEgY2FzbyBuw6NvIHNlamEgZW52aWFkYSB1bWEgY29yIGN1c3RvbWl6YWRhLlxuICAgKi9cbiAgY29sb3I/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGEgbGlzdGEgZGUgdmFsb3JlcyBwYXJhIGEgc8OpcmllLiBPcyB0aXBvcyBlc3BlcmFkb3Mgc8OjbyBkZSBhY29yZG8gY29tIG8gdGlwbyBkZSBncsOhZmljbzpcbiAgICogLSBQYXJhIGdyw6FmaWNvcyBkb3MgdGlwb3MgYGRvbnV0YCBlIGBwaWVgLCBlc3BlcmEtc2UgKm51bWJlcio7XG4gICAqIC0gUGFyYSBncsOhZmljb3MgZG9zIHRpcG9zIGBhcmVhYCwgYGJhcmAsIGBjb2x1bW5gIGUgYGxpbmVgLCBlc3BlcmEtc2UgdW0gKmFycmF5KiBkZSBgZGF0YWAuXG4gICAqXG4gICAqID4gU2UgcGFzc2FkbyB2YWxvciBgbnVsbGAgZW0gZGV0ZXJtaW5hZG8gaXRlbSBkYSBsaXN0YSwgYSBpdGVyYcOnw6NvIGlyw6EgaWdub3LDoS1sby5cbiAgICovXG4gIGRhdGE/OiBudW1iZXIgfCBBcnJheTxudW1iZXI+O1xuXG4gIC8qKiBSw7N0dWxvIHJlZmVyw6puY2lhIGRhIHPDqXJpZTsuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIHRleHRvIHF1ZSBzZXLDoSBleGliaWRvIGFvIHBhc3NhciBvIG1vdXNlIHBvciBjaW1hIGRhcyBzw6lyaWVzIGRvICpjaGFydCouXG4gICAqXG4gICAqID4gQ2FzbyBuw6NvIHNlamEgaW5mb3JtYWRvIHVtIHZhbG9yIHBhcmEgbyAqdG9vbHRpcCosIHNlcsOhIGV4aWJpZG8gZGEgc2VndWludGUgZm9ybWE6XG4gICAqIC0gYGRvbnV0YDogYGxhYmVsYDogdmFsb3IgcHJvcG9yY2lvbmFsIGFvIHRvdGFsIGVtIHBvcmNlbnRhZ2VtLlxuICAgKiAtIGBhcmVhYCwgYGJhcmAsIGBjb2x1bW5gLCBgbGluZWAgZSBgcGllYDogYGxhYmVsYDogYGRhdGFgLlxuICAgKi9cbiAgdG9vbHRpcD86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgZW0gcXVhbCB0aXBvIGRlIGdyw6FmaWNvIHF1ZSBzZXLDoSBleGliaWRhIGEgc8OpcmllLiDDiSBwb3Nzw612ZWwgY29tYmluYXIgc8OpcmllcyBkb3MgdGlwb3MgYGNvbHVtbmAgZSBgbGluZWAgbm8gbWVzbW8gZ3LDoWZpY28uIFBhcmEgaXNzbywgYmFzdGEgY3JpYXIgYXMgc8OpcmllcyBjb20gYXMgY29uZmlndXJhw6fDtWVzOlxuICAgKiAtIFNlcmllIEE6IGB7IHR5cGU6IENoYXJ0VHlwZS5Db2x1bW4sIGRhdGE6IC4uLiB9YDtcbiAgICogLSBTw6lyaWUgQjogYHsgdHlwZTogQ2hhcnRUeXBlLkxpbmUsIGRhdGE6IC4uLiB9YC5cbiAgICpcbiAgICogU2UgdGFudG8gYHAtdHlwZWAgcXVhbnRvIGB7IHR5cGUgfWAgZm9yZW0gaWdub3JhZG9zLCBvIHBhZHLDo28gZ2VyYWRvIHBlbG8gY29tcG9uZW50ZSBzZXLDoTpcbiAgICogLSBgY29sdW1uYDogc2UgYGRhdGFgIHJlY2ViZXIgYEFycmF5PG51bWJlcj5gO1xuICAgKiAtIGBwaWVgOiBzZSBgZGF0YWAgZm9yICpudW1iZXIqLlxuICAgKlxuICAgKiA+IFNlIHV0aWxpemFkYSBhIHByb3ByaWVkYWRlIGBwLXR5cGVgLCBkaXNwZW5zYS1zZSBhIGRlZmluacOnw6NvIGRlc3RhIHByb3ByaWVkYWRlLiBQb3LDqW0sIHNlIGhvdXZlciBkZWNsYXJhw6fDo28gcGFyYSBhbWJhcywgbyB2YWxvciBge3R5cGV9YCBkYSBwcmltZWlyYSBzw6lyaWUgc29icmVzY3JldmVyw6EgbyB2YWxvciBkZWZpbmlkbyBlbSBgcC10eXBlYC5cbiAgICpcbiAgICogPiBPIGNvbXBvbmVudGUgc8OzIGV4aWJpcsOhIGFzIHPDqXJpZXMgcXVlIHRpdmVyZW0gbyBtZXNtbyBgdHlwZWAgZGVmaW5pZG8sIGV4Y2V0byBwYXJhIG1lc2NsYWdlbSBwYXJhIHRpcG9zIGBjb2x1bW5gIGUgYGxpbmVgLlxuICAgKi9cbiAgdHlwZT86IFBvQ2hhcnRUeXBlO1xufVxuIl19
@@ -9,10 +9,18 @@ import * as i0 from "@angular/core";
9
9
  * O componente `po-checkbox` exibe uma caixa de opção com um texto ao lado, na qual é possível marcar e desmarcar através tanto
10
10
  * no *click* do *mouse* quanto por meio da tecla *space* quando estiver com foco.
11
11
  *
12
- * Cada opção poderá receber um estado de marcado, desmarcado, indeterminado e desabilitado, como também uma ação que será disparada quando
12
+ * Cada opção poderá receber um estado de marcado, desmarcado, indeterminado/mixed e desabilitado, como também uma ação que será disparada quando
13
13
  * ocorrer mudanças do valor.
14
14
  *
15
- * > O *model* deste componente aceitará valores igual à `true`, `false` ou `null` para quando for indeterminado.
15
+ * > O *model* deste componente aceitará valores igual à `true`, `false` ou `null` para quando for indeterminado/mixed.
16
+ *
17
+ * **Acessibilidade tratada no componente:**
18
+ *
19
+ * Algumas diretrizes de acessibilidade já são tratadas no componente, internamente, e não podem ser alteradas pelo proprietário do conteúdo. São elas:
20
+ *
21
+ * - O componente foi desenvolvido utilizando controles padrões HTML para permitir a identificação do mesmo na interface por tecnologias assistivas. [WCAG 4.1.2: Name, Role, Value](https://www.w3.org/WAI/WCAG21/Understanding/name-role-value)
22
+ * - A área do foco precisar ter uma espessura de pelo menos 2 pixels CSS e o foco não pode ficar escondido por outros elementos da tela. [WCAG 2.4.12: Focus Appearance](https://www.w3.org/WAI/WCAG22/Understanding/focus-appearance-enhanced)
23
+ * - A cor não deve ser o único meio para diferenciar o componente do seu estado marcado e desmarcado. [WGAG 1.4.1: Use of Color, 3.2.4: Consistent Identification](https://www.w3.org/WAI/WCAG21/Understanding/use-of-color)
16
24
  */
17
25
  export class PoCheckboxBaseComponent {
18
26
  constructor() {
@@ -62,7 +70,7 @@ export class PoCheckboxBaseComponent {
62
70
  }
63
71
  checkOption(value) {
64
72
  if (!this.disabled) {
65
- this.changeModelValue(!value);
73
+ value === 'mixed' ? this.changeModelValue(true) : this.changeModelValue(!value);
66
74
  this.changeValue();
67
75
  }
68
76
  }
@@ -106,4 +114,4 @@ __decorate([
106
114
  type: Input,
107
115
  args: ['p-disabled']
108
116
  }] }); })();
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY2hlY2tib3gtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tY2hlY2tib3gvcG8tY2hlY2tib3gtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFbkQ7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBZ0IsdUJBQXVCO0lBRDdDO1FBS0U7Ozs7Ozs7Ozs7V0FVRztRQUNvQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBS2xFOzs7Ozs7V0FNRztRQUNpQixXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFHeEUsT0FBRSxHQUFHLElBQUksRUFBRSxDQUFDO1FBSUosY0FBUyxHQUFhLEtBQUssQ0FBQztLQXVEckM7SUFyREM7Ozs7Ozs7O09BUUc7SUFDSCxJQUF5QixRQUFRLENBQUMsS0FBYztRQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDMUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFxQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQsOENBQThDO0lBQzlDLGdFQUFnRTtJQUNoRSxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDOzs4RkF0Rm1CLHVCQUF1QjswRUFBdkIsdUJBQXVCO0FBZUo7SUFBZixZQUFZLEVBQUU7MERBQTRCO3VGQWY5Qyx1QkFBdUI7Y0FENUMsU0FBUztnQkFHTyxJQUFJO2tCQUFsQixLQUFLO21CQUFDLE1BQU07WUFhMEIsU0FBUztrQkFBL0MsS0FBSzttQkFBQyxjQUFjO1lBR0gsS0FBSztrQkFBdEIsS0FBSzttQkFBQyxTQUFTO1lBU0ksTUFBTTtrQkFBekIsTUFBTTttQkFBQyxVQUFVO1lBa0JPLFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiwgdXVpZCB9IGZyb20gJy4vLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBPIGNvbXBvbmVudGUgYHBvLWNoZWNrYm94YCBleGliZSB1bWEgY2FpeGEgZGUgb3DDp8OjbyBjb20gdW0gdGV4dG8gYW8gbGFkbywgbmEgcXVhbCDDqSBwb3Nzw612ZWwgbWFyY2FyIGUgZGVzbWFyY2FyIGF0cmF2w6lzIHRhbnRvXG4gKiBubyAqY2xpY2sqIGRvICptb3VzZSogcXVhbnRvIHBvciBtZWlvIGRhIHRlY2xhICpzcGFjZSogcXVhbmRvIGVzdGl2ZXIgY29tIGZvY28uXG4gKlxuICogQ2FkYSBvcMOnw6NvIHBvZGVyw6EgcmVjZWJlciB1bSBlc3RhZG8gZGUgbWFyY2FkbywgZGVzbWFyY2FkbywgaW5kZXRlcm1pbmFkbyBlIGRlc2FiaWxpdGFkbywgY29tbyB0YW1iw6ltIHVtYSBhw6fDo28gcXVlIHNlcsOhIGRpc3BhcmFkYSBxdWFuZG9cbiAqIG9jb3JyZXIgbXVkYW7Dp2FzIGRvIHZhbG9yLlxuICpcbiAqID4gTyAqbW9kZWwqIGRlc3RlIGNvbXBvbmVudGUgYWNlaXRhcsOhIHZhbG9yZXMgaWd1YWwgw6AgYHRydWVgLCBgZmFsc2VgIG91IGBudWxsYCBwYXJhIHF1YW5kbyBmb3IgaW5kZXRlcm1pbmFkby5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9DaGVja2JveEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIC8qKiBEZWZpbmUgbyBub21lIGRvICpjaGVja2JveCouICovXG4gIEBJbnB1dCgnbmFtZScpIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBcGxpY2EgZm9jbyBubyBlbGVtZW50byBhbyBzZXIgaW5pY2lhZG8uXG4gICAqXG4gICAqID4gQ2FzbyBtYWlzIGRlIHVtIGVsZW1lbnRvIHNlamEgY29uZmlndXJhZG8gY29tIGVzc2EgcHJvcHJpZWRhZGUsIGFwZW5hcyBvIMO6bHRpbW8gZWxlbWVudG8gZGVjbGFyYWRvIGNvbSBlbGEgdGVyw6EgbyBmb2NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtYXV0by1mb2N1cycpIEBJbnB1dEJvb2xlYW4oKSBhdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogVGV4dG8gZGUgZXhpYmnDp8OjbyBkbyAqY2hlY2tib3gqLiAqL1xuICBASW5wdXQoJ3AtbGFiZWwnKSBsYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZGlzcGFyYWRvIHF1YW5kbyBvIHZhbG9yIGRvICpjaGVja2JveCogZm9yIGFsdGVyYWRvLlxuICAgKi9cbiAgQE91dHB1dCgncC1jaGFuZ2UnKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY2hlY2tib3hWYWx1ZTogYm9vbGVhbiB8IG51bGw7XG4gIGlkID0gdXVpZCgpO1xuICBwcm9wYWdhdGVDaGFuZ2U6IGFueTtcbiAgb25Ub3VjaGVkO1xuXG4gIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIGVzdGFkbyBkbyAqY2hlY2tib3gqIGNvbW8gZGVzYWJpbGl0YWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZGlzYWJsZWQnKSBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIGNoYW5nZVZhbHVlKCkge1xuICAgIGlmICh0aGlzLnByb3BhZ2F0ZUNoYW5nZSkge1xuICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5jaGVja2JveFZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuY2hlY2tib3hWYWx1ZSk7XG4gIH1cblxuICBjaGVja09wdGlvbih2YWx1ZTogYm9vbGVhbiB8IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlTW9kZWxWYWx1ZSghdmFsdWUpO1xuICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZ1bsOnw6NvIGltcGxlbWVudGFkYSBkbyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIG9zIGVzdGFkb3MgZGUgaGFiaWxpdGFkbyB2aWEgZm9ybXMgYXBpXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmNoZWNrYm94VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlTW9kZWxWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoYW5nZU1vZGVsVmFsdWUodmFsdWU6IGJvb2xlYW4gfCBudWxsKTtcbn1cbiJdfQ==
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY2hlY2tib3gtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tY2hlY2tib3gvcG8tY2hlY2tib3gtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUVILE1BQU0sT0FBZ0IsdUJBQXVCO0lBRDdDO1FBS0U7Ozs7Ozs7Ozs7V0FVRztRQUNvQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBS2xFOzs7Ozs7V0FNRztRQUNpQixXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFHeEUsT0FBRSxHQUFHLElBQUksRUFBRSxDQUFDO1FBSUosY0FBUyxHQUFhLEtBQUssQ0FBQztLQXVEckM7SUFyREM7Ozs7Ozs7O09BUUc7SUFDSCxJQUF5QixRQUFRLENBQUMsS0FBYztRQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDMUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUE4QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsZ0VBQWdFO0lBQ2hFLGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7OzhGQXRGbUIsdUJBQXVCOzBFQUF2Qix1QkFBdUI7QUFlSjtJQUFmLFlBQVksRUFBRTswREFBNEI7dUZBZjlDLHVCQUF1QjtjQUQ1QyxTQUFTO2dCQUdPLElBQUk7a0JBQWxCLEtBQUs7bUJBQUMsTUFBTTtZQWEwQixTQUFTO2tCQUEvQyxLQUFLO21CQUFDLGNBQWM7WUFHSCxLQUFLO2tCQUF0QixLQUFLO21CQUFDLFNBQVM7WUFTSSxNQUFNO2tCQUF6QixNQUFNO21CQUFDLFVBQVU7WUFrQk8sUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sZWFuLCB1dWlkIH0gZnJvbSAnLi8uLi8uLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gY29tcG9uZW50ZSBgcG8tY2hlY2tib3hgIGV4aWJlIHVtYSBjYWl4YSBkZSBvcMOnw6NvIGNvbSB1bSB0ZXh0byBhbyBsYWRvLCBuYSBxdWFsIMOpIHBvc3PDrXZlbCBtYXJjYXIgZSBkZXNtYXJjYXIgYXRyYXbDqXMgdGFudG9cbiAqIG5vICpjbGljayogZG8gKm1vdXNlKiBxdWFudG8gcG9yIG1laW8gZGEgdGVjbGEgKnNwYWNlKiBxdWFuZG8gZXN0aXZlciBjb20gZm9jby5cbiAqXG4gKiBDYWRhIG9ww6fDo28gcG9kZXLDoSByZWNlYmVyIHVtIGVzdGFkbyBkZSBtYXJjYWRvLCBkZXNtYXJjYWRvLCBpbmRldGVybWluYWRvL21peGVkIGUgZGVzYWJpbGl0YWRvLCBjb21vIHRhbWLDqW0gdW1hIGHDp8OjbyBxdWUgc2Vyw6EgZGlzcGFyYWRhIHF1YW5kb1xuICogb2NvcnJlciBtdWRhbsOnYXMgZG8gdmFsb3IuXG4gKlxuICogPiBPICptb2RlbCogZGVzdGUgY29tcG9uZW50ZSBhY2VpdGFyw6EgdmFsb3JlcyBpZ3VhbCDDoCBgdHJ1ZWAsIGBmYWxzZWAgb3UgYG51bGxgIHBhcmEgcXVhbmRvIGZvciBpbmRldGVybWluYWRvL21peGVkLlxuICpcbiAqICoqQWNlc3NpYmlsaWRhZGUgdHJhdGFkYSBubyBjb21wb25lbnRlOioqXG4gKlxuICogQWxndW1hcyBkaXJldHJpemVzIGRlIGFjZXNzaWJpbGlkYWRlIGrDoSBzw6NvIHRyYXRhZGFzIG5vIGNvbXBvbmVudGUsIGludGVybmFtZW50ZSwgZSBuw6NvIHBvZGVtIHNlciBhbHRlcmFkYXMgcGVsbyBwcm9wcmlldMOhcmlvIGRvIGNvbnRlw7pkby4gU8OjbyBlbGFzOlxuICpcbiAqIC0gTyBjb21wb25lbnRlIGZvaSBkZXNlbnZvbHZpZG8gdXRpbGl6YW5kbyBjb250cm9sZXMgcGFkcsO1ZXMgSFRNTCBwYXJhIHBlcm1pdGlyIGEgaWRlbnRpZmljYcOnw6NvIGRvIG1lc21vIG5hIGludGVyZmFjZSBwb3IgdGVjbm9sb2dpYXMgYXNzaXN0aXZhcy4gW1dDQUcgNC4xLjI6IE5hbWUsIFJvbGUsIFZhbHVlXShodHRwczovL3d3dy53My5vcmcvV0FJL1dDQUcyMS9VbmRlcnN0YW5kaW5nL25hbWUtcm9sZS12YWx1ZSlcbiAqIC0gQSDDoXJlYSBkbyBmb2NvIHByZWNpc2FyIHRlciB1bWEgZXNwZXNzdXJhIGRlIHBlbG8gbWVub3MgMiBwaXhlbHMgQ1NTIGUgbyBmb2NvIG7Do28gcG9kZSBmaWNhciBlc2NvbmRpZG8gcG9yIG91dHJvcyBlbGVtZW50b3MgZGEgdGVsYS4gW1dDQUcgMi40LjEyOiBGb2N1cyBBcHBlYXJhbmNlXShodHRwczovL3d3dy53My5vcmcvV0FJL1dDQUcyMi9VbmRlcnN0YW5kaW5nL2ZvY3VzLWFwcGVhcmFuY2UtZW5oYW5jZWQpXG4gKiAtIEEgY29yIG7Do28gZGV2ZSBzZXIgbyDDum5pY28gbWVpbyBwYXJhIGRpZmVyZW5jaWFyIG8gY29tcG9uZW50ZSBkbyBzZXUgZXN0YWRvIG1hcmNhZG8gZSBkZXNtYXJjYWRvLiBbV0dBRyAxLjQuMTogVXNlIG9mIENvbG9yLCAzLjIuNDogQ29uc2lzdGVudCBJZGVudGlmaWNhdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1dBSS9XQ0FHMjEvVW5kZXJzdGFuZGluZy91c2Utb2YtY29sb3IpXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvQ2hlY2tib3hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAvKiogRGVmaW5lIG8gbm9tZSBkbyAqY2hlY2tib3gqLiAqL1xuICBASW5wdXQoJ25hbWUnKSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXBsaWNhIGZvY28gbm8gZWxlbWVudG8gYW8gc2VyIGluaWNpYWRvLlxuICAgKlxuICAgKiA+IENhc28gbWFpcyBkZSB1bSBlbGVtZW50byBzZWphIGNvbmZpZ3VyYWRvIGNvbSBlc3NhIHByb3ByaWVkYWRlLCBhcGVuYXMgbyDDumx0aW1vIGVsZW1lbnRvIGRlY2xhcmFkbyBjb20gZWxhIHRlcsOhIG8gZm9jby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWF1dG8tZm9jdXMnKSBASW5wdXRCb29sZWFuKCkgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFRleHRvIGRlIGV4aWJpw6fDo28gZG8gKmNoZWNrYm94Ki4gKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGRpc3BhcmFkbyBxdWFuZG8gbyB2YWxvciBkbyAqY2hlY2tib3gqIGZvciBhbHRlcmFkby5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY2hhbmdlJykgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNoZWNrYm94VmFsdWU6IGJvb2xlYW4gfCBudWxsIHwgc3RyaW5nO1xuICBpZCA9IHV1aWQoKTtcbiAgcHJvcGFnYXRlQ2hhbmdlOiBhbnk7XG4gIG9uVG91Y2hlZDtcblxuICBwcml2YXRlIF9kaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgbyBlc3RhZG8gZG8gKmNoZWNrYm94KiBjb21vIGRlc2FiaWxpdGFkby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkJykgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICBjaGFuZ2VWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wYWdhdGVDaGFuZ2UpIHtcbiAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuY2hlY2tib3hWYWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLmNoZWNrYm94VmFsdWUpO1xuICB9XG5cbiAgY2hlY2tPcHRpb24odmFsdWU6IGJvb2xlYW4gfCBudWxsIHwgc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB2YWx1ZSA9PT0gJ21peGVkJyA/IHRoaXMuY2hhbmdlTW9kZWxWYWx1ZSh0cnVlKSA6IHRoaXMuY2hhbmdlTW9kZWxWYWx1ZSghdmFsdWUpO1xuICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZ1bsOnw6NvIGltcGxlbWVudGFkYSBkbyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIG9zIGVzdGFkb3MgZGUgaGFiaWxpdGFkbyB2aWEgZm9ybXMgYXBpXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmNoZWNrYm94VmFsdWUpIHtcbiAgICAgIHRoaXMuY2hhbmdlTW9kZWxWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoYW5nZU1vZGVsVmFsdWUodmFsdWU6IGJvb2xlYW4gfCBudWxsKTtcbn1cbiJdfQ==
@@ -68,7 +68,12 @@ export class PoCheckboxComponent extends PoCheckboxBaseComponent {
68
68
  }
69
69
  }
70
70
  changeModelValue(value) {
71
- this.checkboxValue = typeof value === 'boolean' || value === null ? value : false;
71
+ if (value === null) {
72
+ this.checkboxValue = 'mixed';
73
+ }
74
+ else {
75
+ this.checkboxValue = typeof value === 'boolean' || value === null ? value : false;
76
+ }
72
77
  this.changeDetector.detectChanges();
73
78
  }
74
79
  }
@@ -84,20 +89,20 @@ PoCheckboxComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoCheck
84
89
  useExisting: forwardRef(() => PoCheckboxComponent),
85
90
  multi: true
86
91
  }
87
- ]), i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 13, consts: [[1, "po-checkbox"], ["type", "checkbox", 1, "po-input", "po-checkbox-input", 3, "checked", "disabled", "id", "value"], [1, "po-checkbox-label", 3, "for", "tabindex", "blur", "click", "keydown"], ["checkboxLabel", ""]], template: function PoCheckboxComponent_Template(rf, ctx) { if (rf & 1) {
92
+ ]), i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 8, consts: [[1, "container-po-checkbox", 3, "click", "keydown"], ["role", "checkbox", 1, "po-checkbox", 3, "id", "tabindex"], ["tabindex", "-1", 1, "po-checkbox-label", 3, "for"], ["checkboxLabel", ""]], template: function PoCheckboxComponent_Template(rf, ctx) { if (rf & 1) {
88
93
  i0.ɵɵelementStart(0, "div", 0);
89
- i0.ɵɵelement(1, "input", 1);
94
+ i0.ɵɵlistener("click", function PoCheckboxComponent_Template_div_click_0_listener() { return ctx.checkOption(ctx.checkboxValue); })("keydown", function PoCheckboxComponent_Template_div_keydown_0_listener($event) { return ctx.onKeyDown($event, ctx.checkboxValue); });
95
+ i0.ɵɵelement(1, "span", 1);
90
96
  i0.ɵɵelementStart(2, "label", 2, 3);
91
- i0.ɵɵlistener("blur", function PoCheckboxComponent_Template_label_blur_2_listener() { return ctx.onBlur(); })("click", function PoCheckboxComponent_Template_label_click_2_listener() { return ctx.checkOption(ctx.checkboxValue); })("keydown", function PoCheckboxComponent_Template_label_keydown_2_listener($event) { return ctx.onKeyDown($event, ctx.checkboxValue); });
92
97
  i0.ɵɵtext(4);
93
98
  i0.ɵɵelementEnd()();
94
99
  } if (rf & 2) {
100
+ i0.ɵɵattribute("checked", ctx.checkboxValue);
95
101
  i0.ɵɵadvance(1);
96
- i0.ɵɵclassProp("po-checkbox-input-checked", ctx.checkboxValue)("po-checkbox-input-indeterminate", ctx.checkboxValue === null);
97
- i0.ɵɵproperty("checked", ctx.checkboxValue)("disabled", ctx.disabled)("id", ctx.id)("value", ctx.checkboxValue);
102
+ i0.ɵɵproperty("id", ctx.id)("tabindex", ctx.disabled ? -1 : 0);
103
+ i0.ɵɵattribute("aria-checked", ctx.checkboxValue)("aria-label", ctx.label)("aria-disabled", ctx.disabled);
98
104
  i0.ɵɵadvance(1);
99
- i0.ɵɵclassProp("po-clickable", !ctx.disabled);
100
- i0.ɵɵproperty("for", ctx.id)("tabindex", ctx.disabled ? -1 : 0);
105
+ i0.ɵɵproperty("for", ctx.id);
101
106
  i0.ɵɵadvance(2);
102
107
  i0.ɵɵtextInterpolate1(" ", ctx.label, " ");
103
108
  } }, encapsulation: 2, changeDetection: 0 });
@@ -109,9 +114,9 @@ PoCheckboxComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoCheck
109
114
  useExisting: forwardRef(() => PoCheckboxComponent),
110
115
  multi: true
111
116
  }
112
- ], template: "<div class=\"po-checkbox\">\n <input\n class=\"po-input po-checkbox-input\"\n type=\"checkbox\"\n [class.po-checkbox-input-checked]=\"checkboxValue\"\n [class.po-checkbox-input-indeterminate]=\"checkboxValue === null\"\n [checked]=\"checkboxValue\"\n [disabled]=\"disabled\"\n [id]=\"id\"\n [value]=\"checkboxValue\"\n />\n\n <label\n #checkboxLabel\n class=\"po-checkbox-label\"\n [class.po-clickable]=\"!disabled\"\n [for]=\"id\"\n [tabindex]=\"disabled ? -1 : 0\"\n (blur)=\"onBlur()\"\n (click)=\"checkOption(checkboxValue)\"\n (keydown)=\"onKeyDown($event, checkboxValue)\"\n >\n {{ label }}\n </label>\n</div>\n" }]
117
+ ], template: "<div\n class=\"container-po-checkbox\"\n [attr.checked]=\"checkboxValue\"\n (click)=\"checkOption(checkboxValue)\"\n (keydown)=\"onKeyDown($event, checkboxValue)\"\n>\n <span\n [attr.aria-checked]=\"checkboxValue\"\n [attr.aria-label]=\"label\"\n [id]=\"id\"\n class=\"po-checkbox\"\n role=\"checkbox\"\n [attr.aria-disabled]=\"disabled\"\n [tabindex]=\"disabled ? -1 : 0\"\n >\n </span>\n\n <label #checkboxLabel [for]=\"id\" class=\"po-checkbox-label\" tabindex=\"-1\">\n {{ label }}\n </label>\n</div>\n" }]
113
118
  }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { checkboxLabel: [{
114
119
  type: ViewChild,
115
120
  args: ['checkboxLabel', { static: true }]
116
121
  }] }); })();
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWNoZWNrYm94L3BvLWNoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1jaGVja2JveC9wby1jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBRXZFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBYUgsTUFBTSxPQUFPLG1CQUFvQixTQUFRLHVCQUF1QjtJQUc5RCxZQUFvQixjQUFpQztRQUNuRCxLQUFLLEVBQUUsQ0FBQztRQURVLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtJQUVyRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBb0IsRUFBRSxLQUFjO1FBQzVDLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssYUFBYSxDQUFDLEtBQUssRUFBRTtZQUNoRixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXhCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxLQUFxQjtRQUM5QyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNsRixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7O3NGQXJEVSxtQkFBbUI7c0VBQW5CLG1CQUFtQjs7Ozs7MENBUm5CO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGO1FDN0NILDhCQUF5QjtRQUN2QiwyQkFTRTtRQUVGLG1DQVNDO1FBSEMsNkZBQVEsWUFBUSxJQUFDLGtGQUNSLGtDQUEwQixJQURsQiw0RkFFTix3Q0FBZ0MsSUFGMUI7UUFJakIsWUFDRjtRQUFBLGlCQUFRLEVBQUE7O1FBbkJOLGVBQWlEO1FBQWpELDhEQUFpRCwrREFBQTtRQUVqRCwyQ0FBeUIsMEJBQUEsY0FBQSw0QkFBQTtRQVN6QixlQUFnQztRQUFoQyw2Q0FBZ0M7UUFDaEMsNEJBQVUsbUNBQUE7UUFNVixlQUNGO1FBREUsMENBQ0Y7O3VGRHdCVyxtQkFBbUI7Y0FaL0IsU0FBUzsyQkFDRSxhQUFhLG1CQUVOLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7d0JBQ2xELEtBQUssRUFBRSxJQUFJO3FCQUNaO2lCQUNGO29FQUc2QyxhQUFhO2tCQUExRCxTQUFTO21CQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgVmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFBvS2V5Q29kZUVudW0gfSBmcm9tICcuLy4uLy4uLy4uL2VudW1zL3BvLWtleS1jb2RlLmVudW0nO1xuXG5pbXBvcnQgeyBQb0NoZWNrYm94QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tY2hlY2tib3gtYmFzZS5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBkb2NzRXh0ZW5kcyBQb0NoZWNrYm94QmFzZUNvbXBvbmVudFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNoZWNrYm94LWJhc2ljXCIgdGl0bGU9XCJQTyBDaGVja2JveCBCYXNpY1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNoZWNrYm94LWJhc2ljL3NhbXBsZS1wby1jaGVja2JveC1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY2hlY2tib3gtYmFzaWMvc2FtcGxlLXBvLWNoZWNrYm94LWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNoZWNrYm94LWxhYnNcIiB0aXRsZT1cIlBPIENoZWNrYm94IExhYnNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jaGVja2JveC1sYWJzL3NhbXBsZS1wby1jaGVja2JveC1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jaGVja2JveC1sYWJzL3NhbXBsZS1wby1jaGVja2JveC1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNoZWNrYm94LWFjY2VwdGFuY2UtdGVybVwiIHRpdGxlPVwiUE8gQ2hlY2tib3ggLSBBY2NlcHRhbmNlIFRlcm1cIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jaGVja2JveC1hY2NlcHRhbmNlLXRlcm0vc2FtcGxlLXBvLWNoZWNrYm94LWFjY2VwdGFuY2UtdGVybS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY2hlY2tib3gtYWNjZXB0YW5jZS10ZXJtL3NhbXBsZS1wby1jaGVja2JveC1hY2NlcHRhbmNlLXRlcm0uY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tY2hlY2tib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0NoZWNrYm94Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBvQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBQb0NoZWNrYm94QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdjaGVja2JveExhYmVsJywgeyBzdGF0aWM6IHRydWUgfSkgY2hlY2tib3hMYWJlbDogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogRnVuw6fDo28gcXVlIGF0cmlidWkgZm9jbyBhbyAqY2hlY2tib3gqLlxuICAgKlxuICAgKiBQYXJhIHV0aWxpesOhLWxhIMOpIG5lY2Vzc8OhcmlvIGNhcHR1cmFyIGEgcmVmZXLDqm5jaWEgZG8gY29tcG9uZW50ZSBubyBET00gYXRyYXbDqXMgZG8gYFZpZXdDaGlsZGAsIGNvbW8gcG9yIGV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiAuLi5cbiAgICogaW1wb3J0IHsgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gICAqIGltcG9ydCB7IFBvQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKFBvQ2hlY2tib3hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGNoZWNrYm94OiBQb0NoZWNrYm94Q29tcG9uZW50O1xuICAgKlxuICAgKiBmb2N1c0NoZWNrYm94KCkge1xuICAgKiAgIHRoaXMuY2hlY2tib3guZm9jdXMoKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoZWNrYm94TGFiZWwgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY2hlY2tib3hMYWJlbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMub25Ub3VjaGVkPy4oKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKGV2ZW50LndoaWNoID09PSBQb0tleUNvZGVFbnVtLnNwYWNlIHx8IGV2ZW50LmtleUNvZGUgPT09IFBvS2V5Q29kZUVudW0uc3BhY2UpIHtcbiAgICAgIHRoaXMuY2hlY2tPcHRpb24odmFsdWUpO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjaGFuZ2VNb2RlbFZhbHVlKHZhbHVlOiBib29sZWFuIHwgbnVsbCkge1xuICAgIHRoaXMuY2hlY2tib3hWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSBudWxsID8gdmFsdWUgOiBmYWxzZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBvLWNoZWNrYm94XCI+XG4gIDxpbnB1dFxuICAgIGNsYXNzPVwicG8taW5wdXQgcG8tY2hlY2tib3gtaW5wdXRcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgW2NsYXNzLnBvLWNoZWNrYm94LWlucHV0LWNoZWNrZWRdPVwiY2hlY2tib3hWYWx1ZVwiXG4gICAgW2NsYXNzLnBvLWNoZWNrYm94LWlucHV0LWluZGV0ZXJtaW5hdGVdPVwiY2hlY2tib3hWYWx1ZSA9PT0gbnVsbFwiXG4gICAgW2NoZWNrZWRdPVwiY2hlY2tib3hWYWx1ZVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbaWRdPVwiaWRcIlxuICAgIFt2YWx1ZV09XCJjaGVja2JveFZhbHVlXCJcbiAgLz5cblxuICA8bGFiZWxcbiAgICAjY2hlY2tib3hMYWJlbFxuICAgIGNsYXNzPVwicG8tY2hlY2tib3gtbGFiZWxcIlxuICAgIFtjbGFzcy5wby1jbGlja2FibGVdPVwiIWRpc2FibGVkXCJcbiAgICBbZm9yXT1cImlkXCJcbiAgICBbdGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAoY2xpY2spPVwiY2hlY2tPcHRpb24oY2hlY2tib3hWYWx1ZSlcIlxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIGNoZWNrYm94VmFsdWUpXCJcbiAgPlxuICAgIHt7IGxhYmVsIH19XG4gIDwvbGFiZWw+XG48L2Rpdj5cbiJdfQ==
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWNoZWNrYm94L3BvLWNoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1jaGVja2JveC9wby1jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBRXZFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBYUgsTUFBTSxPQUFPLG1CQUFvQixTQUFRLHVCQUF1QjtJQUc5RCxZQUFvQixjQUFpQztRQUNuRCxLQUFLLEVBQUUsQ0FBQztRQURVLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtJQUVyRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBb0IsRUFBRSxLQUF1QjtRQUNyRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLGFBQWEsQ0FBQyxLQUFLLEVBQUU7WUFDaEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRVMsZ0JBQWdCLENBQUMsS0FBOEI7UUFDdkQsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1NBQzlCO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNuRjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdEMsQ0FBQzs7c0ZBekRVLG1CQUFtQjtzRUFBbkIsbUJBQW1COzs7OzswQ0FSbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO2dCQUNsRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Y7UUM3Q0gsOEJBS0M7UUFGQyw2RkFBUyxrQ0FBMEIsSUFBQywwRkFDekIsd0NBQWdDLElBRFA7UUFHcEMsMEJBU087UUFFUCxtQ0FBeUU7UUFDdkUsWUFDRjtRQUFBLGlCQUFRLEVBQUE7O1FBakJSLDRDQUE4QjtRQU81QixlQUFTO1FBQVQsMkJBQVMsbUNBQUE7UUFGVCxpREFBbUMseUJBQUEsK0JBQUE7UUFVZixlQUFVO1FBQVYsNEJBQVU7UUFDOUIsZUFDRjtRQURFLDBDQUNGOzt1RkQ0QlcsbUJBQW1CO2NBWi9CLFNBQVM7MkJBQ0UsYUFBYSxtQkFFTix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDO3dCQUNsRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjtvRUFHNkMsYUFBYTtrQkFBMUQsU0FBUzttQkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBQb0tleUNvZGVFbnVtIH0gZnJvbSAnLi8uLi8uLi8uLi9lbnVtcy9wby1rZXktY29kZS5lbnVtJztcblxuaW1wb3J0IHsgUG9DaGVja2JveEJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLWNoZWNrYm94LWJhc2UuY29tcG9uZW50JztcblxuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9DaGVja2JveEJhc2VDb21wb25lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jaGVja2JveC1iYXNpY1wiIHRpdGxlPVwiUE8gQ2hlY2tib3ggQmFzaWNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jaGVja2JveC1iYXNpYy9zYW1wbGUtcG8tY2hlY2tib3gtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNoZWNrYm94LWJhc2ljL3NhbXBsZS1wby1jaGVja2JveC1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jaGVja2JveC1sYWJzXCIgdGl0bGU9XCJQTyBDaGVja2JveCBMYWJzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY2hlY2tib3gtbGFicy9zYW1wbGUtcG8tY2hlY2tib3gtbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY2hlY2tib3gtbGFicy9zYW1wbGUtcG8tY2hlY2tib3gtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jaGVja2JveC1hY2NlcHRhbmNlLXRlcm1cIiB0aXRsZT1cIlBPIENoZWNrYm94IC0gQWNjZXB0YW5jZSBUZXJtXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY2hlY2tib3gtYWNjZXB0YW5jZS10ZXJtL3NhbXBsZS1wby1jaGVja2JveC1hY2NlcHRhbmNlLXRlcm0uY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNoZWNrYm94LWFjY2VwdGFuY2UtdGVybS9zYW1wbGUtcG8tY2hlY2tib3gtYWNjZXB0YW5jZS10ZXJtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLWNoZWNrYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLWNoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9DaGVja2JveENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQb0NoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgUG9DaGVja2JveEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnY2hlY2tib3hMYWJlbCcsIHsgc3RhdGljOiB0cnVlIH0pIGNoZWNrYm94TGFiZWw6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gKmNoZWNrYm94Ki5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyBjYXB0dXJhciBhIHJlZmVyw6puY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NIGF0cmF2w6lzIGRvIGBWaWV3Q2hpbGRgLCBjb21vIHBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICogLi4uXG4gICAqIGltcG9ydCB7IFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICAgKiBpbXBvcnQgeyBQb0NoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuICAgKlxuICAgKiAuLi5cbiAgICpcbiAgICogQFZpZXdDaGlsZChQb0NoZWNrYm94Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBjaGVja2JveDogUG9DaGVja2JveENvbXBvbmVudDtcbiAgICpcbiAgICogZm9jdXNDaGVja2JveCgpIHtcbiAgICogICB0aGlzLmNoZWNrYm94LmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja2JveExhYmVsICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmNoZWNrYm94TGFiZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLm9uVG91Y2hlZD8uKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykge1xuICAgIGlmIChldmVudC53aGljaCA9PT0gUG9LZXlDb2RlRW51bS5zcGFjZSB8fCBldmVudC5rZXlDb2RlID09PSBQb0tleUNvZGVFbnVtLnNwYWNlKSB7XG4gICAgICB0aGlzLmNoZWNrT3B0aW9uKHZhbHVlKTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hhbmdlTW9kZWxWYWx1ZSh2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY2hlY2tib3hWYWx1ZSA9ICdtaXhlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tib3hWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSBudWxsID8gdmFsdWUgOiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjb250YWluZXItcG8tY2hlY2tib3hcIlxuICBbYXR0ci5jaGVja2VkXT1cImNoZWNrYm94VmFsdWVcIlxuICAoY2xpY2spPVwiY2hlY2tPcHRpb24oY2hlY2tib3hWYWx1ZSlcIlxuICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50LCBjaGVja2JveFZhbHVlKVwiXG4+XG4gIDxzcGFuXG4gICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImNoZWNrYm94VmFsdWVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxcIlxuICAgIFtpZF09XCJpZFwiXG4gICAgY2xhc3M9XCJwby1jaGVja2JveFwiXG4gICAgcm9sZT1cImNoZWNrYm94XCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbdGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICA+XG4gIDwvc3Bhbj5cblxuICA8bGFiZWwgI2NoZWNrYm94TGFiZWwgW2Zvcl09XCJpZFwiIGNsYXNzPVwicG8tY2hlY2tib3gtbGFiZWxcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAge3sgbGFiZWwgfX1cbiAgPC9sYWJlbD5cbjwvZGl2PlxuIl19
@@ -107,6 +107,9 @@ export class PoComboBaseComponent {
107
107
  this.isFiltering = false;
108
108
  this.previousSearchValue = '';
109
109
  this.visibleOptions = [];
110
+ this.page = 1;
111
+ this.pageSize = 10;
112
+ this.loading = false;
110
113
  this.cacheStaticOptions = [];
111
114
  this.comboOptionsList = [];
112
115
  this.onModelTouched = null;
@@ -122,11 +125,44 @@ export class PoComboBaseComponent {
122
125
  this._placeholder = '';
123
126
  this._required = false;
124
127
  this._sort = false;
128
+ this._infiniteScrollDistance = 100;
129
+ this._infiniteScroll = false;
125
130
  // utilizado para fazer o controle de atualizar o model.
126
131
  // não deve forçar a atualização se o gatilho for o writeValue para não deixar o campo dirty.
127
132
  this.fromWriteValue = false;
128
133
  this.language = languageService.getShortLanguage();
129
134
  }
135
+ /**
136
+ * @optional
137
+ *
138
+ * @description
139
+ *
140
+ * Se verdadeiro ativa a funcionalidade de scroll infinito para o combo, Ao chegar ao fim da tabela executará nova busca dos dados conforme paginação.
141
+ *
142
+ * @default `false`
143
+ */
144
+ set infiniteScroll(value) {
145
+ this._infiniteScroll = convertToBoolean(value);
146
+ }
147
+ get infiniteScroll() {
148
+ return this._infiniteScroll;
149
+ }
150
+ /**
151
+ * @optional
152
+ *
153
+ * @description
154
+ *
155
+ * Define o percentual necessário para disparar o evento `show-more`, que é responsável por carregar mais dados no combo. Caso o valor seja maior que 100 ou menor que 0, o valor padrão será 100%.
156
+ *
157
+ * **Exemplos**
158
+ * - p-infinite-scroll-distance = 80: Quando atingir 80% do scroll do combo, o `show-more` será disparado.
159
+ */
160
+ set infiniteScrollDistance(value) {
161
+ this._infiniteScrollDistance = value > 100 || value < 0 ? 100 : value;
162
+ }
163
+ get infiniteScrollDistance() {
164
+ return this._infiniteScrollDistance;
165
+ }
130
166
  /** Mensagem apresentada enquanto o campo estiver vazio. */
131
167
  set placeholder(value) {
132
168
  this._placeholder = value || '';
@@ -485,7 +521,7 @@ export class PoComboBaseComponent {
485
521
  }
486
522
  updateComboList(options) {
487
523
  const copyOptions = options || [...this.comboOptionsList];
488
- const newOptions = !options && this.selectedValue ? [{ ...this.selectedOption }] : copyOptions;
524
+ const newOptions = !options && !this.infiniteScroll && this.selectedValue ? [{ ...this.selectedOption }] : copyOptions;
489
525
  this.visibleOptions = newOptions;
490
526
  if (!this.selectedView && this.visibleOptions.length) {
491
527
  this.selectedView = copyOptions.find(option => option.value !== undefined);
@@ -706,7 +742,7 @@ export class PoComboBaseComponent {
706
742
  }
707
743
  }
708
744
  PoComboBaseComponent.ɵfac = function PoComboBaseComponent_Factory(t) { return new (t || PoComboBaseComponent)(i0.ɵɵdirectiveInject(i1.PoLanguageService)); };
709
- PoComboBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoComboBaseComponent, inputs: { autoFocus: ["p-auto-focus", "autoFocus"], label: ["p-label", "label"], help: ["p-help", "help"], name: "name", filterService: ["p-filter-service", "filterService"], icon: ["p-icon", "icon"], optional: ["p-optional", "optional"], clean: ["p-clean", "clean"], emitObjectValue: ["p-emit-object-value", "emitObjectValue"], disabledTabFilter: ["p-disabled-tab-filter", "disabledTabFilter"], placeholder: ["p-placeholder", "placeholder"], debounceTime: ["p-debounce-time", "debounceTime"], disabledInitFilter: ["p-disabled-init-filter", "disabledInitFilter"], fieldValue: ["p-field-value", "fieldValue"], fieldLabel: ["p-field-label", "fieldLabel"], filterMinlength: ["p-filter-minlength", "filterMinlength"], required: ["p-required", "required"], changeOnEnter: ["p-change-on-enter", "changeOnEnter"], disabled: ["p-disabled", "disabled"], sort: ["p-sort", "sort"], options: ["p-options", "options"], filterMode: ["p-filter-mode", "filterMode"], filterParams: ["p-filter-params", "filterParams"], literals: ["p-literals", "literals"] }, outputs: { change: "p-change", ngModelChange: "ngModelChange" } });
745
+ PoComboBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoComboBaseComponent, inputs: { autoFocus: ["p-auto-focus", "autoFocus"], label: ["p-label", "label"], help: ["p-help", "help"], name: "name", filterService: ["p-filter-service", "filterService"], infiniteScroll: ["p-infinite-scroll", "infiniteScroll"], infiniteScrollDistance: ["p-infinite-scroll-distance", "infiniteScrollDistance"], icon: ["p-icon", "icon"], optional: ["p-optional", "optional"], clean: ["p-clean", "clean"], emitObjectValue: ["p-emit-object-value", "emitObjectValue"], disabledTabFilter: ["p-disabled-tab-filter", "disabledTabFilter"], placeholder: ["p-placeholder", "placeholder"], debounceTime: ["p-debounce-time", "debounceTime"], disabledInitFilter: ["p-disabled-init-filter", "disabledInitFilter"], fieldValue: ["p-field-value", "fieldValue"], fieldLabel: ["p-field-label", "fieldLabel"], filterMinlength: ["p-filter-minlength", "filterMinlength"], required: ["p-required", "required"], changeOnEnter: ["p-change-on-enter", "changeOnEnter"], disabled: ["p-disabled", "disabled"], sort: ["p-sort", "sort"], options: ["p-options", "options"], filterMode: ["p-filter-mode", "filterMode"], filterParams: ["p-filter-params", "filterParams"], literals: ["p-literals", "literals"] }, outputs: { change: "p-change", ngModelChange: "ngModelChange" } });
710
746
  __decorate([
711
747
  InputBoolean()
712
748
  ], PoComboBaseComponent.prototype, "autoFocus", void 0);
@@ -736,6 +772,12 @@ __decorate([
736
772
  }], filterService: [{
737
773
  type: Input,
738
774
  args: ['p-filter-service']
775
+ }], infiniteScroll: [{
776
+ type: Input,
777
+ args: ['p-infinite-scroll']
778
+ }], infiniteScrollDistance: [{
779
+ type: Input,
780
+ args: ['p-infinite-scroll-distance']
739
781
  }], icon: [{
740
782
  type: Input,
741
783
  args: ['p-icon']
@@ -800,4 +842,4 @@ __decorate([
800
842
  type: Input,
801
843
  args: ['p-literals']
802
844
  }] }); })();
803
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tY29tYm8vcG8tY29tYm8tYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFFNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQU9oRSxNQUFNLDhCQUE4QixHQUFHLEdBQUcsQ0FBQztBQUMzQyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztBQUM3QyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyxFQUFFLEVBQW1CO1FBQ25CLE1BQU0sRUFBRSxlQUFlO0tBQ3hCO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsc0JBQXNCO0tBQy9CO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsd0JBQXdCO0tBQ2pDO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsbUJBQW1CO0tBQzVCO0NBQ0YsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxPQUFnQixvQkFBb0I7SUFtZHhDLFlBQVksZUFBa0M7UUFs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LEtBQUs7bUJBQUMsZUFBZTtZQTRCUSxZQUFZO2tCQUF6QyxLQUFLO21CQUFDLGlCQUFpQjtZQWtDQyxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sZWFuLCBpc1R5cGVvZiwgdmFsaWRWYWx1ZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgcmVxdWlyZWRGYWlsZWQgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcblxuaW1wb3J0IHsgUG9Db21ib0ZpbHRlciB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9GaWx0ZXJNb2RlIH0gZnJvbSAnLi9wby1jb21iby1maWx0ZXItbW9kZS5lbnVtJztcbmltcG9ydCB7IFBvQ29tYm9GaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9wby1jb21iby1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQb0NvbWJvR3JvdXAgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tY29tYm8tZ3JvdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9MaXRlcmFscyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1saXRlcmFscy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9PcHRpb25Hcm91cCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1vcHRpb24tZ3JvdXAuaW50ZXJmYWNlJztcblxuY29uc3QgUE9fQ09NQk9fREVCT1VOQ0VfVElNRV9ERUZBVUxUID0gNDAwO1xuY29uc3QgUE9fQ09NQk9fRklFTERfTEFCRUxfREVGQVVMVCA9ICdsYWJlbCc7XG5jb25zdCBQT19DT01CT19GSUVMRF9WQUxVRV9ERUZBVUxUID0gJ3ZhbHVlJztcblxuZXhwb3J0IGNvbnN0IHBvQ29tYm9MaXRlcmFsc0RlZmF1bHQgPSB7XG4gIGVuOiA8UG9Db21ib0xpdGVyYWxzPntcbiAgICBub0RhdGE6ICdObyBkYXRhIGZvdW5kJ1xuICB9LFxuICBlczogPFBvQ29tYm9MaXRlcmFscz57XG4gICAgbm9EYXRhOiAnRGF0b3Mgbm8gZW5jb250cmFkb3MnXG4gIH0sXG4gIHB0OiA8UG9Db21ib0xpdGVyYWxzPntcbiAgICBub0RhdGE6ICdOZW5odW0gZGFkbyBlbmNvbnRyYWRvJ1xuICB9LFxuICBydTogPFBvQ29tYm9MaXRlcmFscz57XG4gICAgbm9EYXRhOiAn0JTQsNC90L3Ri9C1INC90LUg0L3QsNC50LTQtdC90YsnXG4gIH1cbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTyBgcG8tY29tYm9gIGV4aWJlIHVtYSBsaXN0YSBkZSBvcMOnw7VlcyBjb20gZsOhY2lsIHNlbGXDp8OjbyBlIGZpbHRyYWdlbS5cbiAqXG4gKiBBbMOpbSBkYSBleGliacOnw6NvIHBhZHLDo28sIG5lbGUgw6kgcG9zc8OtdmVsIGxpc3RhciBhcyBvcMO1ZXMgZW0gYWdydXBhbWVudG9zLlxuICpcbiAqIMOJIHBvc3PDrXZlbCBzZWxlY2lvbmFyIGUgbmF2ZWdhciBlbnRyZSBhcyBvcMOnw7VlcyBkYSBsaXN0YSB0YW50byBhdHJhdsOpcyBkbyAqbW91c2UqIHF1YW50byBkbyB0ZWNsYWRvLiBObyB0ZWNsYWRvIG5hdmVndWUgY29tXG4gKiBhcyBzZXRhcyBlIHByZXNzaW9uZSAqRW50ZXIqIG5hIG9ww6fDo28gcXVlIGRlc2VqYXIuXG4gKlxuICogQ29tIGVsZSB0YW1iw6ltIMOpIHBvc3PDrXZlbCBkZWZpbmlyIHVtYSBsaXN0YSDDoCBwYXJ0aXIgZGEgcmVxdWlzacOnw6NvIGRlIHVtIHNlcnZpw6dvIGRlZmluaWRvIGVtIGBwLWZpbHRlci1zZXJ2aWNlYC5cbiAqXG4gKiBFbSBgcC1maWx0ZXItbW9kZWAsIG8gZmlsdHJvIHBvZGVyw6Egc2VyIGNvbmZpZ3VyYWRvIHBhcmEgYnVzY2FyIG9ww7VlcyBxdWUgY29ycmVzcG9uZGFtIGFvIGluw61jaW8sIGZpbSBvdSBxdWUgY29udGVuaGEgbyB2YWxvciBkaWdpdGFkby5cbiAqXG4gKiBPIGBwby1jb21ib2AgZ3VhcmRhIG8gw7psdGltbyB2YWxvciBjYXNvIG8gdXN1w6FyaW8gZGVzaXN0YSBkZSB1bWEgYnVzY2EsIGRlaXhhbmRvIG8gY2FtcG8gb3UgcHJlc3Npb25hbmRvICpFc2MqLiBDYXNvIHNlamEgZGlnaXRhZG8gbm9cbiAqIGNhbXBvIGRlIGJ1c2NhIGEgZGVzY3Jpw6fDo28gY29tcGxldGEgZGUgdW0gaXRlbSwgZW50w6NvIGEgc2VsZcOnw6NvIHNlcsOhIGF1dG9tYXRpY2FtZW50ZSBlZmV0dWFkYSBhbyBkZWl4YXIgbyBjYW1wbyBvdSBwcmVzc2lvbmFuZG8gKkVudGVyKi5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9Db21ib0Jhc2VDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBWYWxpZGF0b3Ige1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBcGxpY2EgZm9jbyBubyBlbGVtZW50byBhbyBzZXIgaW5pY2lhZG8uXG4gICAqXG4gICAqID4gQ2FzbyBtYWlzIGRlIHVtIGVsZW1lbnRvIHNlamEgY29uZmlndXJhZG8gY29tIGVzc2EgcHJvcHJpZWRhZGUsIGFwZW5hcyBvIMO6bHRpbW8gZWxlbWVudG8gZGVjbGFyYWRvIGNvbSBlbGEgdGVyw6EgbyBmb2NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtYXV0by1mb2N1cycpIEBJbnB1dEJvb2xlYW4oKSBhdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTGFiZWwgbm8gY29tcG9uZW50ZS4gKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlIGFwb2lvIHBhcmEgbyBjYW1wby4gKi9cbiAgQElucHV0KCdwLWhlbHAnKSBoZWxwPzogc3RyaW5nO1xuXG4gIC8qKiBOb21lIGRvIGNvbXBvbmVudGUuICovXG4gIEBJbnB1dCgnbmFtZScpIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBOZXN0YSBwcm9wcmllZGFkZSBkZXZlIHNlciBpbmZvcm1hZGEgYSBVUkwgZG8gc2VydmnDp28gZW0gcXVlIHNlcsOhIHJlYWxpemFkbyBvIGZpbHRybyBwYXJhIGNhcnJlZ2FtZW50byBkYSBsaXN0YSBkZVxuICAgKiBpdGVucyBubyBjb21wb25lbnRlLlxuICAgKiBDYXNvIGhhamEgYSBuZWNlc3NpZGFkZSBkZSBjdXN0b21pemHDp8OjbywgZW50w6NvIHBvZGUgc2VyIGluZm9ybWFkbyB1bSBzZXJ2acOnbyBpbXBsZW1lbnRhbmRvIGEgaW50ZXJmYWNlIFBvQ29tYm9GaWx0ZXIuXG4gICAqXG4gICAqIENhc28gdXRpbGl6YWRvIHVtYSBVUkwsIG8gc2VydmnDp28gZGV2ZSBzZXIgcmV0b3JuYWRvIG5vIHBhZHLDo28gQVBJIFRPVFZTIGUgdXRpbGl6YSBhcyBwcm9wcmllZGFkZXNcbiAgICogYHAtZmllbGQtbGFiZWxgIGUgYHAtZmllbGQtdmFsdWVgIHBhcmEgYSBjb25zdHJ1w6fDo28gZGEgbGlzdGEgZGUgaXRlbnMuXG4gICAqXG4gICAqIFF1YW5kbyB1dGlsaXphZGEgdW1hIFVSTCBkZSBzZXJ2acOnbywgZW50w6NvIHNlcsOhIGNvbmNhdGVuYWRhIG5lc3RhIFVSTCBvIHZhbG9yIHF1ZSBkZXNlamEtc2UgZmlsdHJhciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICogYGBgXG4gICAqIHVybCArID9maWx0ZXI9UGV0ZXJcbiAgICogYGBgXG4gICAqXG4gICAqIFNlIGZvciBkZWZpbmlkYSBhIHByb3ByaWVkYWRlIGBwLWZpbHRlci1wYXJhbXNgLCBhIG1lc21hIHRhbWLDqW0gc2Vyw6EgY29uY2F0ZW5hZGEuIFBvciBleGVtcGxvLCBwYXJhIG9cbiAgICogcGFyw6JtZXRybyBgeyBhZ2U6IDIzIH1gIGEgVVJMIGZpY2FyaWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJmFnZT0yMyZmaWx0ZXI9UGV0ZXJcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyLXNlcnZpY2UnKSBmaWx0ZXJTZXJ2aWNlOiBQb0NvbWJvRmlsdGVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIMOtY29uZSBxdWUgc2Vyw6EgZXhpYmlkbyBubyBpbsOtY2lvIGRvIGNhbXBvLlxuICAgKlxuICAgKiDDiSBwb3Nzw612ZWwgdXNhciBxdWFscXVlciB1bSBkb3Mgw61jb25lcyBkYSBbQmlibGlvdGVjYSBkZSDDrWNvbmVzXSgvZ3VpZGVzL2ljb25zKS4gY29uZm9ybWUgZXhlbXBsbyBhYmFpeG86XG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm8gcC1pY29uPVwicG8taWNvbi11c2VyXCIgcC1sYWJlbD1cIlBPIGNvbWJvXCI+PC9wby1jb21ibz5cbiAgICogYGBgXG4gICAqIFRhbWLDqW0gw6kgcG9zc8OtdmVsIHV0aWxpemFyIG91dHJhcyBmb250ZXMgZGUgw61jb25lcywgcG9yIGV4ZW1wbG8gYSBiaWJsaW90ZWNhICpGb250IEF3ZXNvbWUqLCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICogYGBgXG4gICAqIDxwby1jb21ibyBwLWljb249XCJmYSBmYS1wb2RjYXN0XCIgcC1sYWJlbD1cIlBPIGNvbWJvXCI+PC9wby1jb21ibz5cbiAgICogYGBgXG4gICAqIE91dHJhIG9ww6fDo28gc2VyaWEgYSBjdXN0b21pemHDp8OjbyBkbyDDrWNvbmUgYXRyYXbDqXMgZG8gYFRlbXBsYXRlUmVmYCwgY29uZm9ybWUgZXhlbXBsbyBhYmFpeG86XG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm8gW3AtaWNvbl09XCJ0ZW1wbGF0ZVwiIHAtbGFiZWw9XCJjb21ibyB0ZW1wbGF0ZSBpb25pY1wiPjwvcG8tY29tYm8+XG4gICAqXG4gICAqIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGU+XG4gICAqICA8aW9uLWljb24gc3R5bGU9XCJmb250LXNpemU6IGluaGVyaXRcIiBuYW1lPVwiaGVhcnRcIj48L2lvbi1pY29uPlxuICAgKiA8L25nLXRlbXBsYXRlPlxuICAgKiBgYGBcbiAgICogPiBQYXJhIG8gw61jb25lIGVucXVhZHJhciBjb3JyZXRhbWVudGUsIGRldmUtc2UgdXRpbGl6YXIgYGZvbnQtc2l6ZTogaW5oZXJpdGAgY2FzbyBvIMOtY29uZSB1dGlsaXphZG8gbsOjbyBhcGxpcXVlLW8uXG4gICAqL1xuICBASW5wdXQoJ3AtaWNvbicpIGljb24/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgc2UgYSBpbmRpY2HDp8OjbyBkZSBjYW1wbyBvcGNpb25hbCBzZXLDoSBleGliaWRhLlxuICAgKlxuICAgKiA+IE7Do28gc2Vyw6EgZXhpYmlkYSBhIGluZGljYcOnw6NvIHNlOlxuICAgKiAtIE8gY2FtcG8gY29udGVyIGBwLXJlcXVpcmVkYDtcbiAgICogLSBOw6NvIHBvc3N1aXIgYHAtaGVscGAgZS9vdSBgcC1sYWJlbGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1vcHRpb25hbCcpIG9wdGlvbmFsOiBib29sZWFuO1xuXG4gIC8qKiBTZSB2ZXJkYWRlaXJvLCBvIGNhbXBvIHJlY2ViZXLDoSB1bSBib3TDo28gcGFyYSBzZXIgbGltcG8uICovXG4gIEBJbnB1dCgncC1jbGVhbicpIEBJbnB1dEJvb2xlYW4oKSBjbGVhbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgbyBldmVudG8gYHAtY2hhbmdlYCByZWNlYmVyw6EgY29tbyBhcmd1bWVudG8gbyBgUG9Db21ib09wdGlvbmAgcmVmZXJlbnRlIMOgIG9ww6fDo28gc2VsZWNpb25hZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1lbWl0LW9iamVjdC12YWx1ZScpIEBJbnB1dEJvb2xlYW4oKSBlbWl0T2JqZWN0VmFsdWU/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgZGVzYWJpbGl0YXLDoSBhIGJ1c2NhIGRlIHVtIGl0ZW0gdmlhIFRBQi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkLXRhYi1maWx0ZXInKSBASW5wdXRCb29sZWFuKCkgZGlzYWJsZWRUYWJGaWx0ZXI/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGV2ZSBzZXIgaW5mb3JtYWRhIHVtYSBmdW7Dp8OjbyBxdWUgc2Vyw6EgZGlzcGFyYWRhIHF1YW5kbyBob3V2ZXIgYWx0ZXJhw6fDtWVzIG5vIG5nTW9kZWwuIEEgZnVuw6fDo28gcmVjZWJlcsOhIGNvbW8gYXJndW1lbnRvIG8gbW9kZWwgbW9kaWZpY2Fkby5cbiAgICpcbiAgICogPiBQb2RlLXNlIG9wdGFyIHBlbG8gcmVjZWJpbWVudG8gZG8gb2JqZXRvIHNlbGVjaW9uYWRvIGFvIGludsOpcyBkbyBtb2RlbCBhdHJhdsOpcyBkYSBwcm9wcmllZGFkZSBgcC1lbWl0LW9iamVjdC12YWx1ZWAuXG4gICAqL1xuICBAT3V0cHV0KCdwLWNoYW5nZScpIGNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBGdW7Dp8OjbyBwYXJhIGF0dWFsaXphciBvIG5nTW9kZWwgZG8gY29tcG9uZW50ZSwgbmVjZXNzw6FyaW8gcXVhbmRvIG7Do28gZm9yIHV0aWxpemFkbyBkZW50cm8gZGEgdGFnIGZvcm0uXG4gICAqXG4gICAqIE5hIHZlcnPDo28gMTIuMi4wIGRvIEFuZ3VsYXIgYSB2ZXJpZmljYcOnw6NvIGBzdHJpY3RUZW1wbGF0ZXNgIHZlbSB0cnVlIGNvbW8gZGVmYXVsdC4gUG9ydGFudG8sIHBhcmEgdXRpbGl6YXJcbiAgICogdHdvLXdheSBiaW5kaW5nIG5vIGNvbXBvbmVudGUgZGV2ZSBzZSB1dGlsaXphciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1jb21ibyAuLi4gW25nTW9kZWxdPVwiY29tYm9Nb2RlbFwiIChuZ01vZGVsQ2hhbmdlKT1cImNvbWJvTW9kZWwgPSAkZXZlbnRcIj4gPC9wby1jb21ibz5cbiAgICogYGBgXG4gICAqXG4gICAqL1xuICBAT3V0cHV0KCduZ01vZGVsQ2hhbmdlJykgbmdNb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjYWNoZU9wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA+ID0gW107XG4gIGRlZmF1bHRTZXJ2aWNlOiBQb0NvbWJvRmlsdGVyU2VydmljZTtcbiAgZmlyc3RJbldyaXRlVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0ZpcnN0RmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAga2V5dXBTdWJzY3JpYmU6IGFueTtcbiAgb25Nb2RlbENoYW5nZTogYW55O1xuICBwcmV2aW91c1NlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRPcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA7XG4gIHNlbGVjdGVkVmFsdWU6IGFueTtcbiAgc2VsZWN0ZWRWaWV3OiBhbnk7XG4gIHNlcnZpY2U6IFBvQ29tYm9GaWx0ZXJTZXJ2aWNlO1xuICB2aXNpYmxlT3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4gPSBbXTtcblxuICBwcm90ZWN0ZWQgY2FjaGVTdGF0aWNPcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiA9IFtdO1xuICBwcm90ZWN0ZWQgY29tYm9PcHRpb25zTGlzdDogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4gPSBbXTtcbiAgcHJvdGVjdGVkIG9uTW9kZWxUb3VjaGVkOiBhbnkgPSBudWxsO1xuXG4gIHByaXZhdGUgX2NoYW5nZU9uRW50ZXI/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RlYm91bmNlVGltZT86IG51bWJlciA9IDQwMDtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc2FibGVkSW5pdEZpbHRlcj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmllbGRMYWJlbD86IHN0cmluZyA9ICdsYWJlbCc7XG4gIHByaXZhdGUgX2ZpZWxkVmFsdWU/OiBzdHJpbmcgPSAndmFsdWUnO1xuICBwcml2YXRlIF9maWx0ZXJNaW5sZW5ndGg/OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9maWx0ZXJNb2RlPzogUG9Db21ib0ZpbHRlck1vZGUgPSBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICBwcml2YXRlIF9maWx0ZXJQYXJhbXM/OiBhbnk7XG4gIHByaXZhdGUgX2xpdGVyYWxzPzogUG9Db21ib0xpdGVyYWxzO1xuICBwcml2YXRlIF9vcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib09wdGlvbkdyb3VwPiA9IFtdO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3JlcXVpcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zb3J0PzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgLy8gdXRpbGl6YWRvIHBhcmEgZmF6ZXIgbyBjb250cm9sZSBkZSBhdHVhbGl6YXIgbyBtb2RlbC5cbiAgLy8gbsOjbyBkZXZlIGZvcsOnYXIgYSBhdHVhbGl6YcOnw6NvIHNlIG8gZ2F0aWxobyBmb3IgbyB3cml0ZVZhbHVlIHBhcmEgbsOjbyBkZWl4YXIgbyBjYW1wbyBkaXJ0eS5cbiAgcHJpdmF0ZSBmcm9tV3JpdGVWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgdmFsaWRhdG9yQ2hhbmdlOiBhbnk7XG5cbiAgLyoqIE1lbnNhZ2VtIGFwcmVzZW50YWRhIGVucXVhbnRvIG8gY2FtcG8gZXN0aXZlciB2YXppby4gKi9cbiAgQElucHV0KCdwLXBsYWNlaG9sZGVyJykgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICB9XG5cbiAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEVzdGEgcHJvcHJpZWRhZGUgZGVmaW5lIGVtIHF1YW50byB0ZW1wbyAoZW0gbWlsaXNzZWd1bmRvcyksIGFndWFyZGEgcGFyYSBhY2lvbmFyIG8gZXZlbnRvIGRlIGZpbHRybyBhcMOzcyBjYWRhIHByZXNzaW9uYW1lbnRvIGRlIHRlY2xhLlxuICAgKiBTZXLDoSB1dGlsaXphZGEgYXBlbmFzIHF1YW5kbyBob3V2ZXIgc2VydmnDp28gKGBwLWZpbHRlci1zZXJ2aWNlYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA0MDBgXG4gICAqL1xuICBASW5wdXQoJ3AtZGVib3VuY2UtdGltZScpIHNldCBkZWJvdW5jZVRpbWUodmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VJbnQoPGFueT52YWx1ZSwgMTApO1xuXG4gICAgdGhpcy5fZGVib3VuY2VUaW1lID0gIWlzTmFOKHBhcnNlZFZhbHVlKSAmJiBwYXJzZWRWYWx1ZSA+IDAgPyBwYXJzZWRWYWx1ZSA6IFBPX0NPTUJPX0RFQk9VTkNFX1RJTUVfREVGQVVMVDtcbiAgfVxuXG4gIGdldCBkZWJvdW5jZVRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGVib3VuY2VUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGVzYWJpbGl0YSBvIGZpbHRybyBpbmljaWFsIG5vIHNlcnZpw6dvLCBxdWUgw6kgZXhlY3V0YWRvIG5vIHByaW1laXJvIGNsaXF1ZSBubyBjYW1wby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkLWluaXQtZmlsdGVyJykgc2V0IGRpc2FibGVkSW5pdEZpbHRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkSW5pdEZpbHRlciA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkSW5pdEZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRJbml0RmlsdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGV2ZSBzZXIgaW5mb3JtYWRvIG8gbm9tZSBkYSBwcm9wcmllZGFkZSBkbyBvYmpldG8gcXVlIHNlcsOhIHV0aWxpemFkbyBwYXJhIGEgY29udmVyc8OjbyBkb3MgaXRlbnMgYXByZXNlbnRhZG9zIG5hIGxpc3RhIGRvIGNvbXBvbmVudGVcbiAgICogKGBwLW9wdGlvbnNgKSwgZXN0YSBwcm9wcmllZGFkZSBzZXLDoSByZXNwb25zw6F2ZWwgcGVsbyB2YWxvciBkZSBjYWRhIGl0ZW0gZGEgbGlzdGEuXG4gICAqXG4gICAqIE5lY2Vzc8OhcmlvIHF1YW5kbyBpbmZvcm1hciBvIHNlcnZpw6dvIGNvbW8gVVJMIGUgbyBtZXNtbyBuw6NvIGVzdGl2ZXIgcmV0b3JuYW5kbyB1bWEgbGlzdGEgZGUgb2JqZXRvcyBubyBwYWRyw6NvIGRhIGludGVyZmFjZVxuICAgKiBQb0NvbWJvT3B0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdmFsdWVgXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBzZXQgZmllbGRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRWYWx1ZSA9IHZhbHVlIHx8IFBPX0NPTUJPX0ZJRUxEX1ZBTFVFX0RFRkFVTFQ7XG5cbiAgICBpZiAoaXNUeXBlb2YodGhpcy5maWx0ZXJTZXJ2aWNlLCAnc3RyaW5nJykgJiYgdGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNlcnZpY2UuZmllbGRWYWx1ZSA9IHRoaXMuX2ZpZWxkVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpZWxkVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHRleHRvIGRlIGFwcmVzZW50YcOnw6NvIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogTmVjZXNzw6FyaW8gcXVhbmRvIGluZm9ybWFyIG8gc2VydmnDp28gY29tbyBVUkwgZSBvIG1lc21vIG7Do28gZXN0aXZlciByZXRvcm5hbmRvIHVtYSBsaXN0YSBkZSBvYmpldG9zIG5vIHBhZHLDo28gZGEgaW50ZXJmYWNlXG4gICAqIFBvQ29tYm9PcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBsYWJlbGBcbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1sYWJlbCcpIHNldCBmaWVsZExhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9maWVsZExhYmVsID0gdmFsdWUgfHwgUE9fQ09NQk9fRklFTERfTEFCRUxfREVGQVVMVDtcblxuICAgIGlmIChpc1R5cGVvZih0aGlzLmZpbHRlclNlcnZpY2UsICdzdHJpbmcnKSAmJiB0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VydmljZS5maWVsZExhYmVsID0gdGhpcy5fZmllbGRMYWJlbDtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFZhbG9yIG3DrW5pbW8gZGUgY2FyYWN0ZXJlcyBwYXJhIHJlYWxpemFyIG8gZmlsdHJvIG5vIHNlcnZpw6dvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMGBcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItbWlubGVuZ3RoJykgc2V0IGZpbHRlck1pbmxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgcGFyc2VWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogdmFsdWU7XG5cbiAgICB0aGlzLl9maWx0ZXJNaW5sZW5ndGggPSBOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlVmFsdWUpID8gcGFyc2VWYWx1ZSA6IDA7XG4gIH1cblxuICBnZXQgZmlsdGVyTWlubGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJNaW5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6Egb2JyaWdhdMOzcmlvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVxdWlyZWQnKSBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvbnZlcnRUb0Jvb2xlYW4ocmVxdWlyZWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhIHF1ZSBvIGV2ZW50byBgcC1jaGFuZ2VgIHPDsyBzZXLDoSBkaXNwYXJhZG8gYW8gY2xpY2FyIG91IHByZXNzaW9uYXIgYSB0ZWNsYSBcIkVudGVyXCIgc29icmUgdW1hIG9ww6fDo28gc2VsZWNpb25hZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1jaGFuZ2Utb24tZW50ZXInKSBzZXQgY2hhbmdlT25FbnRlcihjaGFuZ2VPbkVudGVyOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2hhbmdlT25FbnRlciA9IGNvbnZlcnRUb0Jvb2xlYW4oY2hhbmdlT25FbnRlcik7XG4gIH1cblxuICBnZXQgY2hhbmdlT25FbnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlT25FbnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBkZXNhYmlsaXRhZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1kaXNhYmxlZCcpIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29udmVydFRvQm9vbGVhbihkaXNhYmxlZCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICAvKiogSW5kaWNhIHF1ZSBhIGxpc3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHAtb3B0aW9ucyBzZXLDoSBvcmRlbmFkYSBwZWxhIGRlc2NyacOnw6NvLiAqL1xuICBASW5wdXQoJ3Atc29ydCcpIHNldCBzb3J0KHNvcnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zb3J0ID0gY29udmVydFRvQm9vbGVhbihzb3J0KTtcbiAgICB0aGlzLmNvbWJvTGlzdERlZmluaXRpb25zKCk7XG4gIH1cblxuICBnZXQgc29ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXN0YSBwcm9wcmllZGFkZSBkZWZpbmUgYSBsaXN0YSBkZSBvcMOnw7VlcyBkbyBgcG8tY29tYm9gLlxuICAgKlxuICAgKiA+IEEgbGlzdGEgcG9kZSBzZXIgZGVmaW5pZGEgZW0gZG9pcyBmb3JtYXRvcywgc2ltcGxlcyBvdSBjb20gYWdydXBhbWVudG9zLlxuICAgKiAtIFV0aWxpemUgYFBvQ29tYm9PcHRpb25gIHBhcmEgbGlzdGEgZGUgb3DDp8O1ZXMgc2ltcGxlcy5cbiAgICogLSBVdGlsaXplIGBQb0NvbWJvT3B0aW9uR3JvdXBgIHBhcmEgbGlzdGEgZGUgb3DDp8O1ZXMgY29tIGFncnVwYW1lbnRvLlxuICAgKlxuICAgKiAqKkltcG9ydGFudGU6KipcbiAgICogLSBBIGxpc3RhIGRldmUgc2VndWlyIGFzIGRlZmluacOnw7VlcyBkZXNjcml0YXMgbmFzIHJlc3BlY3RpdmFzIGludGVyZmFjZXMsIGNhc28gY29udHLDoXJpbyBuw6NvIGV4aWJpcsOhIGEoYXMpIG9ww6fDo28ow7VlcykgZm9yYSBkb3MgcGFkcsO1ZXMuXG4gICAqIC0gTyBjb21wb25lbnRlIGludGVycHJldGFyw6EgbyBmb3JtYXRvIGRhIGxpc3RhIGRlIGFjb3JkbyBjb20gYSBpbnRlcmZhY2UgdXRpbGl6YWRhIGUgc8OzIGV4aWJpcsOhIGFzIG9ww6fDtWVzIGNvcnJlc3BvbmRlbnRlcyDDoCBlbGEuXG4gICAqIC0gVW0gYWdydXBhbWVudG8gc8OzIHNlcsOhIGV4aWJpZG8gc2UgaG91dmVyIHBlbG8gbWVub3MgdW1hIG9ww6fDo28gdsOhbGlkYS5cbiAgICovXG4gIEBJbnB1dCgncC1vcHRpb25zJykgc2V0IG9wdGlvbnMob3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9PcHRpb25Hcm91cD4pIHtcbiAgICB0aGlzLl9vcHRpb25zID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBbXTtcblxuICAgIHRoaXMuY29tYm9MaXN0RGVmaW5pdGlvbnMoKTtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gbW9kbyBkZSBwZXNxdWlzYSB1dGlsaXphZG8gbm8gZmlsdHJvIGRhIGxpc3RhIGRlIHNlbGXDp8OjbzogYHN0YXJ0c1dpdGhgLCBgY29udGFpbnNgIG91IGBlbmRzV2l0aGAuXG4gICAqXG4gICAqID4gUXVhbmRvIHV0aWxpemFyIGEgcHJvcHJpZWRhZGUgYHAtZmlsdGVyLXNlcnZpY2VgIGVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgaWdub3JhZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBzdGFydHNXaXRoYFxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1tb2RlJykgc2V0IGZpbHRlck1vZGUoZmlsdGVyTW9kZTogUG9Db21ib0ZpbHRlck1vZGUpIHtcbiAgICB0aGlzLl9maWx0ZXJNb2RlID0gZmlsdGVyTW9kZSBpbiBQb0NvbWJvRmlsdGVyTW9kZSA/IGZpbHRlck1vZGUgOiBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICAgIHN3aXRjaCAodGhpcy5fZmlsdGVyTW9kZS50b1N0cmluZygpKSB7XG4gICAgICBjYXNlICdzdGFydHNXaXRoJzpcbiAgICAgICAgdGhpcy5fZmlsdGVyTW9kZSA9IFBvQ29tYm9GaWx0ZXJNb2RlLnN0YXJ0c1dpdGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29udGFpbnMnOlxuICAgICAgICB0aGlzLl9maWx0ZXJNb2RlID0gUG9Db21ib0ZpbHRlck1vZGUuY29udGFpbnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW5kc1dpdGgnOlxuICAgICAgICB0aGlzLl9maWx0ZXJNb2RlID0gUG9Db21ib0ZpbHRlck1vZGUuZW5kc1dpdGg7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXJNb2RlKCk6IFBvQ29tYm9GaWx0ZXJNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyTW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFZhbG9yIHF1ZSBzZXLDoSByZXBhc3NhZG8gY29tbyBwYXLDom1ldHJvIHBhcmEgYSBVUkwgb3UgYW9zIG3DqXRvZG9zIGRvIHNlcnZpw6dvIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSAqUG9Db21ib0ZpbHRlciouXG4gICAqXG4gICAqID4gQ2FzbyBhIGxpc3RhIGNvbnRlbmhhIGFncnVwYW1lbnRvcywgb3MgbWVzbW9zIHPDsyBzZXLDo28gZXhpYmlkb3Mgc2UgaG91dmVyIG5vIG3DrW5pbW8gdW1hIG9ww6fDo28gcXVlIGNvcnJlc3BvbmRhIMOgIHBlc3F1aXNhLlxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1wYXJhbXMnKSBzZXQgZmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtczogYW55KSB7XG4gICAgdGhpcy5fZmlsdGVyUGFyYW1zID0gZmlsdGVyUGFyYW1zIHx8IGZpbHRlclBhcmFtcyA9PT0gMCB8fCBmaWx0ZXJQYXJhbXMgPT09IGZhbHNlID8gZmlsdGVyUGFyYW1zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGZpbHRlclBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyUGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2JqZXRvIGNvbSBhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLWNvbWJvYC5cbiAgICpcbiAgICogUGFyYSB1dGlsaXphciBiYXN0YSBwYXNzYXIgYSBsaXRlcmFsIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9Db21ib0xpdGVyYWxzID0ge1xuICAgKiAgICBub0RhdGE6ICdOZW5odW0gdmFsb3InXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGEgbGl0ZXJhbCBjdXN0b21pemFkYSwgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1jb21ib1xuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tY29tYm8+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9Db21ib0xpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb0NvbWJvTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAgIC4uLnBvQ29tYm9MaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvQ29tYm9MaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb0NvbWJvTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICB9XG5cbiAgY29uc3RydWN0b3IobGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgZ2V0IGlzT3B0aW9uR3JvdXBMaXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zLmxlbmd0aCAmJiB0aGlzLl9vcHRpb25zWzBdLmhhc093blByb3BlcnR5KCdvcHRpb25zJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICB9XG5cbiAgb25Jbml0U2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5maWx0ZXJTZXJ2aWNlKTtcbiAgICAgIHRoaXMuaW5pdElucHV0T2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFNlcnZpY2Uoc2VydmljZTogUG9Db21ib0ZpbHRlciB8IHN0cmluZykge1xuICAgIGlmIChzZXJ2aWNlKSB7XG4gICAgICBpZiAoaXNUeXBlb2Yoc2VydmljZSwgJ29iamVjdCcpKSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IDxQb0NvbWJvRmlsdGVyU2VydmljZT5zZXJ2aWNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5kZWZhdWx0U2VydmljZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNvbmZpZ1Byb3BlcnRpZXMoPHN0cmluZz5zZXJ2aWNlLCB0aGlzLmZpZWxkTGFiZWwsIHRoaXMuZmllbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29tcGFyZU1ldGhvZChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwLCBmaWx0ZXJNb2RlOiBQb0NvbWJvRmlsdGVyTW9kZSkge1xuICAgIHN3aXRjaCAoZmlsdGVyTW9kZSkge1xuICAgICAgY2FzZSBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydHNXaXRoKHNlYXJjaCwgb3B0aW9uKTtcbiAgICAgIGNhc2UgUG9Db21ib0ZpbHRlck1vZGUuY29udGFpbnM6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHNlYXJjaCwgb3B0aW9uKTtcbiAgICAgIGNhc2UgUG9Db21ib0ZpbHRlck1vZGUuZW5kc1dpdGg6XG4gICAgICAgIHJldHVybiB0aGlzLmVuZHNXaXRoKHNlYXJjaCwgb3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBzdGFydHNXaXRoKHNlYXJjaDogc3RyaW5nLCBvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXApIHtcbiAgICByZXR1cm4gb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzZWFyY2gudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBjb250YWlucyhzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoLnRvTG93ZXJDYXNlKCkpID4gLTE7XG4gIH1cblxuICBlbmRzV2l0aChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGdldE9wdGlvbkZyb21WYWx1ZSh2YWx1ZTogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IG9wdGlvbnMuZmluZCgob3B0aW9uOiBhbnkpID0+IHRoaXMuaXNFcXVhbChvcHRpb24udmFsdWUsIHZhbHVlKSkgOiBudWxsO1xuICB9XG5cbiAgZ2V0T3B0aW9uRnJvbUxhYmVsKGxhYmVsOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5maW5kKChvcHRpb246IGFueSkgPT4gb3B0aW9uLmxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gbGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU2VsZWN0ZWRWYWx1ZShvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXAsIGlzVXBkYXRlTW9kZWw6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uTGFiZWwgPSAob3B0aW9uICYmIG9wdGlvbi5sYWJlbCkgfHwgJyc7XG5cbiAgICB0aGlzLnVwZGF0ZUludGVybmFsVmFyaWFibGVzKG9wdGlvbik7XG5cbiAgICAvLyBhdHVhbGl6YSBvIHZhbG9yIGRvIGlucHV0IHF1YW5kbyBmb3IgY2hhbmdlT25FbnRlciBhcGVuYXMgc2UgZm9yIHBhcmEgYXR1YWxpemFyIG8gbW9kZWwuXG4gICAgaWYgKHRoaXMuY2hhbmdlT25FbnRlciAmJiBpc1VwZGF0ZU1vZGVsKSB7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWUob3B0aW9uTGFiZWwpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuY2hhbmdlT25FbnRlcikge1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKG9wdGlvbkxhYmVsKTtcbiAgICB9XG5cbiAgICBpZiAoaXNVcGRhdGVNb2RlbCkge1xuICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSBvcHRpb24/LnZhbHVlICE9PSB1bmRlZmluZWQgPyBvcHRpb24udmFsdWUgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudXBkYXRlTW9kZWwob3B0aW9uVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxNb2RlbENoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgLy8gQ2FzbyBvIGNvbXBvbmVudGUgZXN0aXZlciBkZW50cm8gZGUgdW0gZm9ybSwgdGVyw6EgYWNlc3NvIGFvIG3DqXRvZG8gb25Nb2RlbENoYW5nZS5cbiAgICByZXR1cm4gdGhpcy5vbk1vZGVsQ2hhbmdlID8gdGhpcy5vbk1vZGVsQ2hhbmdlKHZhbHVlKSA6IHRoaXMubmdNb2RlbENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGlzRXF1YWwodmFsdWU6IGFueSwgaW5wdXRWYWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkgJiYgaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkgPT09IGlucHV0VmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoKHZhbHVlID09PSBudWxsICYmIGlucHV0VmFsdWUgIT09IG51bGwpIHx8ICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHZhbHVlID0gYCR7dmFsdWV9YDsgLy8gVHJhbnNmb3JtYW5kbyBlbSBzdHJpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUgPT09IGlucHV0VmFsdWU7XG4gIH1cblxuICBzZWFyY2hGb3JMYWJlbChzZWFyY2g6IHN0cmluZywgb3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4sIGZpbHRlck1vZGU6IFBvQ29tYm9GaWx0ZXJNb2RlKSB7XG4gICAgaWYgKHNlYXJjaCAmJiBvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXdPcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiA9IFtdO1xuICAgICAgbGV0IGFkZGVkT3B0aW9uc0dyb3VwVGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCBvcHRpb25zR3JvdXBUaXRsZTogUG9Db21ib0dyb3VwO1xuXG4gICAgICBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgaWYgKCdvcHRpb25zJyBpbiBvcHRpb24pIHtcbiAgICAgICAgICBhZGRlZE9wdGlvbnNHcm91cFRpdGxlID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIChvcHRpb25zR3JvdXBUaXRsZSA9IG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uLmxhYmVsICYmICh0aGlzLmNvbXBhcmVNZXRob2Qoc2VhcmNoLCBvcHRpb24sIGZpbHRlck1vZGUpIHx8IHRoaXMuc2VydmljZSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc09wdGlvbkdyb3VwTGlzdCAmJiAhYWRkZWRPcHRpb25zR3JvdXBUaXRsZSkge1xuICAgICAgICAgICAgbmV3T3B0aW9ucy5wdXNoKG9wdGlvbnNHcm91cFRpdGxlKTtcbiAgICAgICAgICAgIGFkZGVkT3B0aW9uc0dyb3VwVGl0bGUgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBuZXdPcHRpb25zW3RoaXMuaXNPcHRpb25Hcm91cExpc3QgPyAxIDogMF07XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChuZXdPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb21ib0xpc3Qob3B0aW9ucz86IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA+KSB7XG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBvcHRpb25zIHx8IFsuLi50aGlzLmNvbWJvT3B0aW9uc0xpc3RdO1xuXG4gICAgY29uc3QgbmV3T3B0aW9ucyA9ICFvcHRpb25zICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZSA/IFt7IC4uLnRoaXMuc2VsZWN0ZWRPcHRpb24gfV0gOiBjb3B5T3B0aW9ucztcblxuICAgIHRoaXMudmlzaWJsZU9wdGlvbnMgPSBuZXdPcHRpb25zO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVmlldyAmJiB0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBjb3B5T3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgIT09IHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0TmV4dE9wdGlvbih2YWx1ZTogYW55LCBvcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiwgcmV2ZXJzZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3Qgb3B0aW9uc0xpc3QgPSByZXZlcnNlID8gb3B0aW9ucy5zbGljZSgwKS5yZXZlcnNlKCkgOiBvcHRpb25zLnNsaWNlKDApO1xuICAgIGxldCBvcHRpb25Gb3VuZCA9IG51bGw7XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zTGlzdCkge1xuICAgICAgaWYgKG9wdGlvbi52YWx1ZSAmJiAhb3B0aW9uRm91bmQpIHtcbiAgICAgICAgb3B0aW9uRm91bmQgPSBvcHRpb247XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLnZhbHVlICYmIGZvdW5kKSB7XG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0VxdWFsKG9wdGlvbi52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uRm91bmQ7XG4gIH1cblxuICBnZXRJbmRleFNlbGVjdGVkVmlldygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmlzaWJsZU9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbXBhcmVPYmplY3RzKHRoaXMudmlzaWJsZU9wdGlvbnNbaV0sIHRoaXMuc2VsZWN0ZWRWaWV3KSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb21wYXJlT2JqZWN0cyhvYmoxOiBhbnksIG9iajI6IGFueSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmoxKSA9PT0gSlNPTi5zdHJpbmdpZnkob2JqMik7XG4gIH1cblxuICB2ZXJpZnlWYWxpZE9wdGlvbigpIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5nZXRJbnB1dFZhbHVlKCk7XG5cbiAgICBjb25zdCBvcHRpb25Gb3VuZCA9IHRoaXMuZ2V0T3B0aW9uRnJvbUxhYmVsKGlucHV0VmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoWy4uLnRoaXMuY2FjaGVTdGF0aWNPcHRpb25zXSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbkZvdW5kICYmIG9wdGlvbkZvdW5kLnZhbHVlICE9PSB0aGlzLnNlbGVjdGVkVmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShvcHRpb25Gb3VuZCk7XG5cbiAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9IG9wdGlvbkZvdW5kLmxhYmVsO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFZhbHVlICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi5sYWJlbCAhPT0gaW5wdXRWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlV2l0aE9sZE9wdGlvbigpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgPSB0aGlzLnNlbGVjdGVkT3B0aW9uLmxhYmVsO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRWYWx1ZSAmJiAhb3B0aW9uRm91bmQpIHtcbiAgICAgIGNvbnN0IGlzSW5wdXRWYWx1ZURpZmZTZWxlY3RlZExhYmVsID0gISEodGhpcy5zZWxlY3RlZE9wdGlvbiAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uLmxhYmVsICE9PSBpbnB1dFZhbHVlKTtcblxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwsIGlzSW5wdXRWYWx1ZURpZmZTZWxlY3RlZExhYmVsIHx8IHRoaXMuY2hhbmdlT25FbnRlcik7XG5cbiAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlY2ViZSBhcyBhbHRlcmHDp8O1ZXMgZG8gbW9kZWxcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5mcm9tV3JpdGVWYWx1ZSA9IHRydWU7XG5cbiAgICBpZiAodmFsaWRWYWx1ZSh2YWx1ZSkgJiYgIXRoaXMuc2VydmljZSAmJiB0aGlzLmNvbWJvT3B0aW9uc0xpc3QgJiYgdGhpcy5jb21ib09wdGlvbnNMaXN0Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25Gcm9tVmFsdWUodmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUob3B0aW9uKTtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2UgaG91dmVyIHNlcnZpw6dvIGJ1c2NhIHBlbG8gbW9kZWwuXG4gICAgaWYgKHZhbHVlICYmIHRoaXMuc2VydmljZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIC8vIFVzYWRhIHBhcmEgaW50ZXJjZXB0YXIgb3MgZXN0YWRvcyBkZSBoYWJpbGl0YWRvIHZpYSBmb3JtcyBhcGlcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGFic3RyYWN0Q29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKHJlcXVpcmVkRmFpbGVkKHRoaXMucmVxdWlyZWQsIHRoaXMuZGlzYWJsZWQsIGFic3RyYWN0Q29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlcXVpcmVkOiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY2xlYXIodmFsdWUpIHtcbiAgICB0aGlzLmNhbGxNb2RlbENoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uZmlnQWZ0ZXJTZXRGaWx0ZXJTZXJ2aWNlKHNlcnZpY2U6IFBvQ29tYm9GaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICBpZiAoc2VydmljZSkge1xuICAgICAgdGhpcy5jb21ib09wdGlvbnNMaXN0ID0gW107XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlS2V5dXBPYnNlcnZhYmxlKCk7XG4gICAgICB0aGlzLm9uSW5pdFNlcnZpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXJ2aWNlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jb21ib09wdGlvbnNMaXN0ID0gdGhpcy5jYWNoZVN0YXRpY09wdGlvbnM7XG4gICAgfVxuXG4gICAgdGhpcy52aXNpYmxlT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuaXNGaXJzdEZpbHRlciA9IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgdW5zdWJzY3JpYmVLZXl1cE9ic2VydmFibGUoKSB7XG4gICAgaWYgKHRoaXMua2V5dXBTdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMua2V5dXBTdWJzY3JpYmUudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVNb2RlbChtb2RlbDogYW55KSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdG9yQ2hhbmdlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRvckNoYW5nZShtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21ib0xpc3REZWZpbml0aW9ucygpIHtcbiAgICB0aGlzLmNvbWJvT3B0aW9uc0xpc3QgPSB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCA/IHRoaXMubGlzdGluZ0NvbWJvT3B0aW9ucyh0aGlzLm9wdGlvbnMpIDogdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuY2FjaGVTdGF0aWNPcHRpb25zID0gdGhpcy5jb21ib09wdGlvbnNMaXN0O1xuXG4gICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZU9wdGlvbnMob3B0aW9uQTogYW55LCBvcHRpb25COiBhbnkpIHtcbiAgICBjb25zdCBsYWJlbEEgPSBvcHRpb25BLmxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBsYWJlbEIgPSBvcHRpb25CLmxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiBsYWJlbEEgPCBsYWJlbEIgPyAtMSA6IGxhYmVsQSA+IGxhYmVsQiA/IDEgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNEdXBsaWNhdGVkT3B0aW9uKFxuICAgIG9wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA+LFxuICAgIGN1cnJlbnRPcHRpb246IHN0cmluZyxcbiAgICBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucz86IEFycmF5PFBvQ29tYm9Hcm91cD5cbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIG9wdGlvbnMuc29tZShvcHRpb24gPT4gb3B0aW9uLmxhYmVsID09PSBjdXJyZW50T3B0aW9uKSB8fFxuICAgICAgKGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zICYmIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zLnNvbWUob3B0aW9uID0+IG9wdGlvbi5sYWJlbCA9PT0gY3VycmVudE9wdGlvbikpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGluZ0NvbWJvT3B0aW9ucyhjb21ib09wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvT3B0aW9uR3JvdXA+KSB7XG4gICAgY29uc3QgY29tYm9PcHRpb25zTGlzdCA9IGNvbWJvT3B0aW9ucy5jb25jYXQoKTtcbiAgICBjb25zdCB2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3QgPSB0aGlzLnZlcmlmeUNvbWJvT3B0aW9ucyhjb21ib09wdGlvbnNMaXN0KTtcblxuICAgIHRoaXMuc29ydE9wdGlvbnModmVyaWZpZWRDb21ib09wdGlvbnNMaXN0KTtcblxuICAgIGlmICh0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ICYmIHZlcmlmaWVkQ29tYm9PcHRpb25zTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlDb21ib09wdGlvbnNHcm91cCh2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3Q7XG4gIH1cblxuICBwcml2YXRlIHNvcnRPcHRpb25zKGNvbWJvT3B0aW9uc0xpc3Q6IEFycmF5PFBvQ29tYm9Hcm91cD4pIHtcbiAgICBpZiAoY29tYm9PcHRpb25zTGlzdC5sZW5ndGggPiAwICYmIHRoaXMuc29ydCkge1xuICAgICAgcmV0dXJuIGNvbWJvT3B0aW9uc0xpc3Quc29ydCh0aGlzLmNvbXBhcmVPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVmFsdWUoY3VycmVudE9wdGlvbjogUG9Db21ib0dyb3VwLCB2ZXJpZnlpbmdPcHRpb25zR3JvdXA6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgbGFiZWwsIG9wdGlvbnMsIHZhbHVlIH0gPSBjdXJyZW50T3B0aW9uO1xuXG4gICAgaWYgKHRoaXMuaXNPcHRpb25Hcm91cExpc3QpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh2YWxpZFZhbHVlKGxhYmVsKSAmJiBvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkgfHwgKHZlcmlmeWluZ09wdGlvbnNHcm91cCA9PT0gdHJ1ZSAmJiB2YWxpZFZhbHVlKHZhbHVlKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkVmFsdWUodmFsdWUpICYmICFvcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlDb21ib09wdGlvbnMoXG4gICAgY29tYm9PcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib09wdGlvbkdyb3VwPixcbiAgICB2ZXJpZnlpbmdPcHRpb25zR3JvdXA6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucz86IEFycmF5PFBvQ29tYm9Hcm91cD5cbiAgKSB7XG4gICAgcmV0dXJuIGNvbWJvT3B0aW9ucy5yZWR1Y2UoKGFjY3VtdWxhdGVkT3B0aW9ucywgY3VycmVudE9wdGlvbikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy52ZXJpZnlJZkhhc0xhYmVsKGN1cnJlbnRPcHRpb24pIHx8XG4gICAgICAgIHRoaXMuaGFzRHVwbGljYXRlZE9wdGlvbihhY2N1bXVsYXRlZE9wdGlvbnMsIGN1cnJlbnRPcHRpb24ubGFiZWwsIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zKSB8fFxuICAgICAgICAhdGhpcy52YWxpZGF0ZVZhbHVlKGN1cnJlbnRPcHRpb24sIHZlcmlmeWluZ09wdGlvbnNHcm91cClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gYWNjdW11bGF0ZWRPcHRpb25zO1xuICAgICAgfVxuXG4gICAgICBhY2N1bXVsYXRlZE9wdGlvbnMucHVzaChjdXJyZW50T3B0aW9uKTtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZE9wdGlvbnM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlDb21ib09wdGlvbnNHcm91cChjb21ib09wdGlvbnNMaXN0OiBBcnJheTxQb0NvbWJvT3B0aW9uR3JvdXA+KSB7XG4gICAgcmV0dXJuIGNvbWJvT3B0aW9uc0xpc3QucmVkdWNlKChhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucywgY3VycmVudE9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgeyBvcHRpb25zLCBsYWJlbCB9ID0gY3VycmVudE9wdGlvbjtcbiAgICAgIGNvbnN0IHZlcmlmaWVkQ29tYm9PcHRpb25zR3JvdXBMaXN0ID0gdGhpcy52ZXJpZnlDb21ib09wdGlvbnMob3B0aW9ucywgdHJ1ZSwgYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMpO1xuXG4gICAgICBpZiAodmVyaWZpZWRDb21ib09wdGlvbnNHcm91cExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNvcnRPcHRpb25zKHZlcmlmaWVkQ29tYm9PcHRpb25zR3JvdXBMaXN0KTtcblxuICAgICAgICBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucy5wdXNoKHsgbGFiZWw6IGxhYmVsLCBvcHRpb25zOiB0cnVlIH0sIC4uLnZlcmlmaWVkQ29tYm9PcHRpb25zR3JvdXBMaXN0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5SWZIYXNMYWJlbChjdXJyZW50T3B0aW9uOiBQb0NvbWJvR3JvdXAgPSB7fSkge1xuICAgIGNvbnN0IHsgbGFiZWwsIG9wdGlvbnMsIHZhbHVlIH0gPSBjdXJyZW50T3B0aW9uO1xuXG4gICAgaWYgKCh0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ICYmIG9wdGlvbnMgJiYgIWxhYmVsKSB8fCAoIWxhYmVsICYmICF2YWx1ZSkgfHwgKCF0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ICYmIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFjdXJyZW50T3B0aW9uLmxhYmVsKSB7XG4gICAgICBjdXJyZW50T3B0aW9uLmxhYmVsID0gY3VycmVudE9wdGlvbi52YWx1ZS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUludGVybmFsVmFyaWFibGVzKG9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cCkge1xuICAgIGlmIChvcHRpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gb3B0aW9uO1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kZWwodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICBpZiAoIXRoaXMuZnJvbVdyaXRlVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jYWxsTW9kZWxDaGFuZ2UodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuZW1pdE9iamVjdFZhbHVlID8gdGhpcy5zZWxlY3RlZE9wdGlvbiA6IHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmZyb21Xcml0ZVZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkVmFsdWVXaXRoT2xkT3B0aW9uKCkge1xuICAgIGNvbnN0IG9sZE9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uRnJvbVZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSwgdGhpcy5jb21ib09wdGlvbnNMaXN0KTtcblxuICAgIGlmIChvbGRPcHRpb24gJiYgb2xkT3B0aW9uLmxhYmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG9sZE9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3Qgc2V0SW5wdXRWYWx1ZSh2YWx1ZTogYW55KTogdm9pZDtcblxuICBhYnN0cmFjdCBhcHBseUZpbHRlcih2YWx1ZTogc3RyaW5nKTogdm9pZDtcblxuICBhYnN0cmFjdCBnZXRPYmplY3RCeVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuXG4gIGFic3RyYWN0IGdldElucHV0VmFsdWUoKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGluaXRJbnB1dE9ic2VydmFibGUoKTogdm9pZDtcbn1cbiJdfQ==
845
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tY29tYm8vcG8tY29tYm8tYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFFNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQU9oRSxNQUFNLDhCQUE4QixHQUFHLEdBQUcsQ0FBQztBQUMzQyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztBQUM3QyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyxFQUFFLEVBQW1CO1FBQ25CLE1BQU0sRUFBRSxlQUFlO0tBQ3hCO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsc0JBQXNCO0tBQy9CO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsd0JBQXdCO0tBQ2pDO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsbUJBQW1CO0tBQzVCO0NBQ0YsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxPQUFnQixvQkFBb0I7SUE0ZnhDLFlBQVksZUFBa0M7UUEz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QUFLO21CQUFDLFFBQVE7WUFlTSxRQUFRO2tCQUE1QixLQUFLO21CQUFDLFlBQVk7WUFHZSxLQUFLO2tCQUF0QyxLQUFLO21CQUFDLFNBQVM7WUFXOEIsZUFBZTtrQkFBNUQsS0FBSzttQkFBQyxxQkFBcUI7WUFXb0IsaUJBQWlCO2tCQUFoRSxLQUFLO21CQUFDLHVCQUF1QjtZQVdWLE1BQU07a0JBQXpCLE1BQU07bUJBQUMsVUFBVTtZQWlCTyxhQUFhO2tCQUFyQyxNQUFNO21CQUFDLGVBQWU7WUFpREssV0FBVztrQkFBdEMsS0FBSzttQkFBQyxlQUFlO1lBaUJRLFlBQVk7a0JBQXpDLEtBQUs7bUJBQUMsaUJBQWlCO1lBbUJhLGtCQUFrQjtrQkFBdEQsS0FBSzttQkFBQyx3QkFBd0I7WUFvQkgsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBd0JNLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQW9CVyxlQUFlO2tCQUEvQyxLQUFLO21CQUFDLG9CQUFvQjtZQWtCRixRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFrQmEsYUFBYTtrQkFBNUMsS0FBSzttQkFBQyxtQkFBbUI7WUFnQkQsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBV0UsSUFBSTtrQkFBeEIsS0FBSzttQkFBQyxRQUFRO1lBcUJTLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXFCVSxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUE0QlEsWUFBWTtrQkFBekMsS0FBSzttQkFBQyxpQkFBaUI7WUFrQ0MsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiwgaXNUeXBlb2YsIHZhbGlkVmFsdWUgfSBmcm9tICcuLi8uLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBwb0xvY2FsZURlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5jb25zdGFudCc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzJztcbmltcG9ydCB7IHJlcXVpcmVkRmFpbGVkIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5cbmltcG9ydCB7IFBvQ29tYm9GaWx0ZXIgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tY29tYm8tZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0NvbWJvRmlsdGVyTW9kZSB9IGZyb20gJy4vcG8tY29tYm8tZmlsdGVyLW1vZGUuZW51bSc7XG5pbXBvcnQgeyBQb0NvbWJvRmlsdGVyU2VydmljZSB9IGZyb20gJy4vcG8tY29tYm8tZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9Db21ib0dyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLWdyb3VwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0NvbWJvTGl0ZXJhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tY29tYm8tbGl0ZXJhbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9PcHRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tY29tYm8tb3B0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0NvbWJvT3B0aW9uR3JvdXAgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tY29tYm8tb3B0aW9uLWdyb3VwLmludGVyZmFjZSc7XG5cbmNvbnN0IFBPX0NPTUJPX0RFQk9VTkNFX1RJTUVfREVGQVVMVCA9IDQwMDtcbmNvbnN0IFBPX0NPTUJPX0ZJRUxEX0xBQkVMX0RFRkFVTFQgPSAnbGFiZWwnO1xuY29uc3QgUE9fQ09NQk9fRklFTERfVkFMVUVfREVGQVVMVCA9ICd2YWx1ZSc7XG5cbmV4cG9ydCBjb25zdCBwb0NvbWJvTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjogPFBvQ29tYm9MaXRlcmFscz57XG4gICAgbm9EYXRhOiAnTm8gZGF0YSBmb3VuZCdcbiAgfSxcbiAgZXM6IDxQb0NvbWJvTGl0ZXJhbHM+e1xuICAgIG5vRGF0YTogJ0RhdG9zIG5vIGVuY29udHJhZG9zJ1xuICB9LFxuICBwdDogPFBvQ29tYm9MaXRlcmFscz57XG4gICAgbm9EYXRhOiAnTmVuaHVtIGRhZG8gZW5jb250cmFkbydcbiAgfSxcbiAgcnU6IDxQb0NvbWJvTGl0ZXJhbHM+e1xuICAgIG5vRGF0YTogJ9CU0LDQvdC90YvQtSDQvdC1INC90LDQudC00LXQvdGLJ1xuICB9XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gYHBvLWNvbWJvYCBleGliZSB1bWEgbGlzdGEgZGUgb3DDp8O1ZXMgY29tIGbDoWNpbCBzZWxlw6fDo28gZSBmaWx0cmFnZW0uXG4gKlxuICogQWzDqW0gZGEgZXhpYmnDp8OjbyBwYWRyw6NvLCBuZWxlIMOpIHBvc3PDrXZlbCBsaXN0YXIgYXMgb3DDtWVzIGVtIGFncnVwYW1lbnRvcy5cbiAqXG4gKiDDiSBwb3Nzw612ZWwgc2VsZWNpb25hciBlIG5hdmVnYXIgZW50cmUgYXMgb3DDp8O1ZXMgZGEgbGlzdGEgdGFudG8gYXRyYXbDqXMgZG8gKm1vdXNlKiBxdWFudG8gZG8gdGVjbGFkby4gTm8gdGVjbGFkbyBuYXZlZ3VlIGNvbVxuICogYXMgc2V0YXMgZSBwcmVzc2lvbmUgKkVudGVyKiBuYSBvcMOnw6NvIHF1ZSBkZXNlamFyLlxuICpcbiAqIENvbSBlbGUgdGFtYsOpbSDDqSBwb3Nzw612ZWwgZGVmaW5pciB1bWEgbGlzdGEgw6AgcGFydGlyIGRhIHJlcXVpc2nDp8OjbyBkZSB1bSBzZXJ2acOnbyBkZWZpbmlkbyBlbSBgcC1maWx0ZXItc2VydmljZWAuXG4gKlxuICogRW0gYHAtZmlsdGVyLW1vZGVgLCBvIGZpbHRybyBwb2RlcsOhIHNlciBjb25maWd1cmFkbyBwYXJhIGJ1c2NhciBvcMO1ZXMgcXVlIGNvcnJlc3BvbmRhbSBhbyBpbsOtY2lvLCBmaW0gb3UgcXVlIGNvbnRlbmhhIG8gdmFsb3IgZGlnaXRhZG8uXG4gKlxuICogTyBgcG8tY29tYm9gIGd1YXJkYSBvIMO6bHRpbW8gdmFsb3IgY2FzbyBvIHVzdcOhcmlvIGRlc2lzdGEgZGUgdW1hIGJ1c2NhLCBkZWl4YW5kbyBvIGNhbXBvIG91IHByZXNzaW9uYW5kbyAqRXNjKi4gQ2FzbyBzZWphIGRpZ2l0YWRvIG5vXG4gKiBjYW1wbyBkZSBidXNjYSBhIGRlc2NyacOnw6NvIGNvbXBsZXRhIGRlIHVtIGl0ZW0sIGVudMOjbyBhIHNlbGXDp8OjbyBzZXLDoSBhdXRvbWF0aWNhbWVudGUgZWZldHVhZGEgYW8gZGVpeGFyIG8gY2FtcG8gb3UgcHJlc3Npb25hbmRvICpFbnRlciouXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvQ29tYm9CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXBsaWNhIGZvY28gbm8gZWxlbWVudG8gYW8gc2VyIGluaWNpYWRvLlxuICAgKlxuICAgKiA+IENhc28gbWFpcyBkZSB1bSBlbGVtZW50byBzZWphIGNvbmZpZ3VyYWRvIGNvbSBlc3NhIHByb3ByaWVkYWRlLCBhcGVuYXMgbyDDumx0aW1vIGVsZW1lbnRvIGRlY2xhcmFkbyBjb20gZWxhIHRlcsOhIG8gZm9jby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWF1dG8tZm9jdXMnKSBASW5wdXRCb29sZWFuKCkgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIExhYmVsIG5vIGNvbXBvbmVudGUuICovXG4gIEBJbnB1dCgncC1sYWJlbCcpIGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKiBUZXh0byBkZSBhcG9pbyBwYXJhIG8gY2FtcG8uICovXG4gIEBJbnB1dCgncC1oZWxwJykgaGVscD86IHN0cmluZztcblxuICAvKiogTm9tZSBkbyBjb21wb25lbnRlLiAqL1xuICBASW5wdXQoJ25hbWUnKSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTmVzdGEgcHJvcHJpZWRhZGUgZGV2ZSBzZXIgaW5mb3JtYWRhIGEgVVJMIGRvIHNlcnZpw6dvIGVtIHF1ZSBzZXLDoSByZWFsaXphZG8gbyBmaWx0cm8gcGFyYSBjYXJyZWdhbWVudG8gZGEgbGlzdGEgZGVcbiAgICogaXRlbnMgbm8gY29tcG9uZW50ZS5cbiAgICogQ2FzbyBoYWphIGEgbmVjZXNzaWRhZGUgZGUgY3VzdG9taXphw6fDo28sIGVudMOjbyBwb2RlIHNlciBpbmZvcm1hZG8gdW0gc2VydmnDp28gaW1wbGVtZW50YW5kbyBhIGludGVyZmFjZSBQb0NvbWJvRmlsdGVyLlxuICAgKlxuICAgKiBDYXNvIHV0aWxpemFkbyB1bWEgVVJMLCBvIHNlcnZpw6dvIGRldmUgc2VyIHJldG9ybmFkbyBubyBwYWRyw6NvIEFQSSBUT1RWUyBlIHV0aWxpemEgYXMgcHJvcHJpZWRhZGVzXG4gICAqIGBwLWZpZWxkLWxhYmVsYCBlIGBwLWZpZWxkLXZhbHVlYCBwYXJhIGEgY29uc3RydcOnw6NvIGRhIGxpc3RhIGRlIGl0ZW5zLlxuICAgKlxuICAgKiBRdWFuZG8gdXRpbGl6YWRhIHVtYSBVUkwgZGUgc2VydmnDp28sIGVudMOjbyBzZXLDoSBjb25jYXRlbmFkYSBuZXN0YSBVUkwgbyB2YWxvciBxdWUgZGVzZWphLXNlIGZpbHRyYXIgZGEgc2VndWludGUgZm9ybWE6XG4gICAqIGBgYFxuICAgKiB1cmwgKyA/ZmlsdGVyPVBldGVyXG4gICAqIGBgYFxuICAgKlxuICAgKiBTZSBmb3IgZGVmaW5pZGEgYSBwcm9wcmllZGFkZSBgcC1maWx0ZXItcGFyYW1zYCwgYSBtZXNtYSB0YW1iw6ltIHNlcsOhIGNvbmNhdGVuYWRhLiBQb3IgZXhlbXBsbywgcGFyYSBvXG4gICAqIHBhcsOibWV0cm8gYHsgYWdlOiAyMyB9YCBhIFVSTCBmaWNhcmlhOlxuICAgKlxuICAgKiBgYGBcbiAgICogdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0yMCZhZ2U9MjMmZmlsdGVyPVBldGVyXG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1zZXJ2aWNlJykgZmlsdGVyU2VydmljZTogUG9Db21ib0ZpbHRlciB8IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvIGF0aXZhIGEgZnVuY2lvbmFsaWRhZGUgZGUgc2Nyb2xsIGluZmluaXRvIHBhcmEgbyBjb21ibywgQW8gY2hlZ2FyIGFvIGZpbSBkYSB0YWJlbGEgZXhlY3V0YXLDoSBub3ZhIGJ1c2NhIGRvcyBkYWRvcyBjb25mb3JtZSBwYWdpbmHDp8Ojby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWluZmluaXRlLXNjcm9sbCcpIHNldCBpbmZpbml0ZVNjcm9sbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2luZmluaXRlU2Nyb2xsID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgaW5maW5pdGVTY3JvbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXRlU2Nyb2xsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gcGVyY2VudHVhbCBuZWNlc3PDoXJpbyBwYXJhIGRpc3BhcmFyIG8gZXZlbnRvIGBzaG93LW1vcmVgLCBxdWUgw6kgcmVzcG9uc8OhdmVsIHBvciBjYXJyZWdhciBtYWlzIGRhZG9zIG5vIGNvbWJvLiBDYXNvIG8gdmFsb3Igc2VqYSBtYWlvciBxdWUgMTAwIG91IG1lbm9yIHF1ZSAwLCBvIHZhbG9yIHBhZHLDo28gc2Vyw6EgMTAwJS5cbiAgICpcbiAgICogKipFeGVtcGxvcyoqXG4gICAqIC0gcC1pbmZpbml0ZS1zY3JvbGwtZGlzdGFuY2UgPSA4MDogUXVhbmRvIGF0aW5naXIgODAlIGRvIHNjcm9sbCBkbyBjb21ibywgbyBgc2hvdy1tb3JlYCBzZXLDoSBkaXNwYXJhZG8uXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsLWRpc3RhbmNlJykgc2V0IGluZmluaXRlU2Nyb2xsRGlzdGFuY2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2luZmluaXRlU2Nyb2xsRGlzdGFuY2UgPSB2YWx1ZSA+IDEwMCB8fCB2YWx1ZSA8IDAgPyAxMDAgOiB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbmZpbml0ZVNjcm9sbERpc3RhbmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbmZpbml0ZVNjcm9sbERpc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gw61jb25lIHF1ZSBzZXLDoSBleGliaWRvIG5vIGluw61jaW8gZG8gY2FtcG8uXG4gICAqXG4gICAqIMOJIHBvc3PDrXZlbCB1c2FyIHF1YWxxdWVyIHVtIGRvcyDDrWNvbmVzIGRhIFtCaWJsaW90ZWNhIGRlIMOtY29uZXNdKC9ndWlkZXMvaWNvbnMpLiBjb25mb3JtZSBleGVtcGxvIGFiYWl4bzpcbiAgICogYGBgXG4gICAqIDxwby1jb21ibyBwLWljb249XCJwby1pY29uLXVzZXJcIiBwLWxhYmVsPVwiUE8gY29tYm9cIj48L3BvLWNvbWJvPlxuICAgKiBgYGBcbiAgICogVGFtYsOpbSDDqSBwb3Nzw612ZWwgdXRpbGl6YXIgb3V0cmFzIGZvbnRlcyBkZSDDrWNvbmVzLCBwb3IgZXhlbXBsbyBhIGJpYmxpb3RlY2EgKkZvbnQgQXdlc29tZSosIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKiBgYGBcbiAgICogPHBvLWNvbWJvIHAtaWNvbj1cImZhIGZhLXBvZGNhc3RcIiBwLWxhYmVsPVwiUE8gY29tYm9cIj48L3BvLWNvbWJvPlxuICAgKiBgYGBcbiAgICogT3V0cmEgb3DDp8OjbyBzZXJpYSBhIGN1c3RvbWl6YcOnw6NvIGRvIMOtY29uZSBhdHJhdsOpcyBkbyBgVGVtcGxhdGVSZWZgLCBjb25mb3JtZSBleGVtcGxvIGFiYWl4bzpcbiAgICogYGBgXG4gICAqIDxwby1jb21ibyBbcC1pY29uXT1cInRlbXBsYXRlXCIgcC1sYWJlbD1cImNvbWJvIHRlbXBsYXRlIGlvbmljXCI+PC9wby1jb21ibz5cbiAgICpcbiAgICogPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZT5cbiAgICogIDxpb24taWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogaW5oZXJpdFwiIG5hbWU9XCJoZWFydFwiPjwvaW9uLWljb24+XG4gICAqIDwvbmctdGVtcGxhdGU+XG4gICAqIGBgYFxuICAgKiA+IFBhcmEgbyDDrWNvbmUgZW5xdWFkcmFyIGNvcnJldGFtZW50ZSwgZGV2ZS1zZSB1dGlsaXphciBgZm9udC1zaXplOiBpbmhlcml0YCBjYXNvIG8gw61jb25lIHV0aWxpemFkbyBuw6NvIGFwbGlxdWUtby5cbiAgICovXG4gIEBJbnB1dCgncC1pY29uJykgaWNvbj86IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9wY2lvbmFsIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTyBjYW1wbyBjb250ZXIgYHAtcmVxdWlyZWRgO1xuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbmFsJykgb3B0aW9uYWw6IGJvb2xlYW47XG5cbiAgLyoqIFNlIHZlcmRhZGVpcm8sIG8gY2FtcG8gcmVjZWJlcsOhIHVtIGJvdMOjbyBwYXJhIHNlciBsaW1wby4gKi9cbiAgQElucHV0KCdwLWNsZWFuJykgQElucHV0Qm9vbGVhbigpIGNsZWFuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvLCBvIGV2ZW50byBgcC1jaGFuZ2VgIHJlY2ViZXLDoSBjb21vIGFyZ3VtZW50byBvIGBQb0NvbWJvT3B0aW9uYCByZWZlcmVudGUgw6Agb3DDp8OjbyBzZWxlY2lvbmFkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWVtaXQtb2JqZWN0LXZhbHVlJykgQElucHV0Qm9vbGVhbigpIGVtaXRPYmplY3RWYWx1ZT86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvLCBkZXNhYmlsaXRhcsOhIGEgYnVzY2EgZGUgdW0gaXRlbSB2aWEgVEFCLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZGlzYWJsZWQtdGFiLWZpbHRlcicpIEBJbnB1dEJvb2xlYW4oKSBkaXNhYmxlZFRhYkZpbHRlcj86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZXZlIHNlciBpbmZvcm1hZGEgdW1hIGZ1bsOnw6NvIHF1ZSBzZXLDoSBkaXNwYXJhZGEgcXVhbmRvIGhvdXZlciBhbHRlcmHDp8O1ZXMgbm8gbmdNb2RlbC4gQSBmdW7Dp8OjbyByZWNlYmVyw6EgY29tbyBhcmd1bWVudG8gbyBtb2RlbCBtb2RpZmljYWRvLlxuICAgKlxuICAgKiA+IFBvZGUtc2Ugb3B0YXIgcGVsbyByZWNlYmltZW50byBkbyBvYmpldG8gc2VsZWNpb25hZG8gYW8gaW52w6lzIGRvIG1vZGVsIGF0cmF2w6lzIGRhIHByb3ByaWVkYWRlIGBwLWVtaXQtb2JqZWN0LXZhbHVlYC5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY2hhbmdlJykgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEZ1bsOnw6NvIHBhcmEgYXR1YWxpemFyIG8gbmdNb2RlbCBkbyBjb21wb25lbnRlLCBuZWNlc3PDoXJpbyBxdWFuZG8gbsOjbyBmb3IgdXRpbGl6YWRvIGRlbnRybyBkYSB0YWcgZm9ybS5cbiAgICpcbiAgICogTmEgdmVyc8OjbyAxMi4yLjAgZG8gQW5ndWxhciBhIHZlcmlmaWNhw6fDo28gYHN0cmljdFRlbXBsYXRlc2AgdmVtIHRydWUgY29tbyBkZWZhdWx0LiBQb3J0YW50bywgcGFyYSB1dGlsaXphclxuICAgKiB0d28td2F5IGJpbmRpbmcgbm8gY29tcG9uZW50ZSBkZXZlIHNlIHV0aWxpemFyIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLWNvbWJvIC4uLiBbbmdNb2RlbF09XCJjb21ib01vZGVsXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY29tYm9Nb2RlbCA9ICRldmVudFwiPiA8L3BvLWNvbWJvPlxuICAgKiBgYGBcbiAgICpcbiAgICovXG4gIEBPdXRwdXQoJ25nTW9kZWxDaGFuZ2UnKSBuZ01vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNhY2hlT3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4gPSBbXTtcbiAgZGVmYXVsdFNlcnZpY2U6IFBvQ29tYm9GaWx0ZXJTZXJ2aWNlO1xuICBmaXJzdEluV3JpdGVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzRmlyc3RGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBrZXl1cFN1YnNjcmliZTogYW55O1xuICBvbk1vZGVsQ2hhbmdlOiBhbnk7XG4gIHByZXZpb3VzU2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZE9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cDtcbiAgc2VsZWN0ZWRWYWx1ZTogYW55O1xuICBzZWxlY3RlZFZpZXc6IGFueTtcbiAgc2VydmljZTogUG9Db21ib0ZpbHRlclNlcnZpY2U7XG4gIHZpc2libGVPcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiA9IFtdO1xuICBwYWdlOiBudW1iZXIgPSAxO1xuICBwYWdlU2l6ZTogbnVtYmVyID0gMTA7XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgY2FjaGVTdGF0aWNPcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiA9IFtdO1xuICBwcm90ZWN0ZWQgY29tYm9PcHRpb25zTGlzdDogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4gPSBbXTtcbiAgcHJvdGVjdGVkIG9uTW9kZWxUb3VjaGVkOiBhbnkgPSBudWxsO1xuXG4gIHByaXZhdGUgX2NoYW5nZU9uRW50ZXI/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RlYm91bmNlVGltZT86IG51bWJlciA9IDQwMDtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc2FibGVkSW5pdEZpbHRlcj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmllbGRMYWJlbD86IHN0cmluZyA9ICdsYWJlbCc7XG4gIHByaXZhdGUgX2ZpZWxkVmFsdWU/OiBzdHJpbmcgPSAndmFsdWUnO1xuICBwcml2YXRlIF9maWx0ZXJNaW5sZW5ndGg/OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9maWx0ZXJNb2RlPzogUG9Db21ib0ZpbHRlck1vZGUgPSBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICBwcml2YXRlIF9maWx0ZXJQYXJhbXM/OiBhbnk7XG4gIHByaXZhdGUgX2xpdGVyYWxzPzogUG9Db21ib0xpdGVyYWxzO1xuICBwcml2YXRlIF9vcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib09wdGlvbkdyb3VwPiA9IFtdO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3JlcXVpcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zb3J0PzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2luZmluaXRlU2Nyb2xsRGlzdGFuY2U/OiBudW1iZXIgPSAxMDA7XG4gIHByaXZhdGUgX2luZmluaXRlU2Nyb2xsPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9oZWlnaHQ/OiBudW1iZXI7XG5cbiAgLy8gdXRpbGl6YWRvIHBhcmEgZmF6ZXIgbyBjb250cm9sZSBkZSBhdHVhbGl6YXIgbyBtb2RlbC5cbiAgLy8gbsOjbyBkZXZlIGZvcsOnYXIgYSBhdHVhbGl6YcOnw6NvIHNlIG8gZ2F0aWxobyBmb3IgbyB3cml0ZVZhbHVlIHBhcmEgbsOjbyBkZWl4YXIgbyBjYW1wbyBkaXJ0eS5cbiAgcHJpdmF0ZSBmcm9tV3JpdGVWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgdmFsaWRhdG9yQ2hhbmdlOiBhbnk7XG5cbiAgLyoqIE1lbnNhZ2VtIGFwcmVzZW50YWRhIGVucXVhbnRvIG8gY2FtcG8gZXN0aXZlciB2YXppby4gKi9cbiAgQElucHV0KCdwLXBsYWNlaG9sZGVyJykgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICB9XG5cbiAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEVzdGEgcHJvcHJpZWRhZGUgZGVmaW5lIGVtIHF1YW50byB0ZW1wbyAoZW0gbWlsaXNzZWd1bmRvcyksIGFndWFyZGEgcGFyYSBhY2lvbmFyIG8gZXZlbnRvIGRlIGZpbHRybyBhcMOzcyBjYWRhIHByZXNzaW9uYW1lbnRvIGRlIHRlY2xhLlxuICAgKiBTZXLDoSB1dGlsaXphZGEgYXBlbmFzIHF1YW5kbyBob3V2ZXIgc2VydmnDp28gKGBwLWZpbHRlci1zZXJ2aWNlYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA0MDBgXG4gICAqL1xuICBASW5wdXQoJ3AtZGVib3VuY2UtdGltZScpIHNldCBkZWJvdW5jZVRpbWUodmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VJbnQoPGFueT52YWx1ZSwgMTApO1xuXG4gICAgdGhpcy5fZGVib3VuY2VUaW1lID0gIWlzTmFOKHBhcnNlZFZhbHVlKSAmJiBwYXJzZWRWYWx1ZSA+IDAgPyBwYXJzZWRWYWx1ZSA6IFBPX0NPTUJPX0RFQk9VTkNFX1RJTUVfREVGQVVMVDtcbiAgfVxuXG4gIGdldCBkZWJvdW5jZVRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGVib3VuY2VUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGVzYWJpbGl0YSBvIGZpbHRybyBpbmljaWFsIG5vIHNlcnZpw6dvLCBxdWUgw6kgZXhlY3V0YWRvIG5vIHByaW1laXJvIGNsaXF1ZSBubyBjYW1wby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkLWluaXQtZmlsdGVyJykgc2V0IGRpc2FibGVkSW5pdEZpbHRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkSW5pdEZpbHRlciA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkSW5pdEZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRJbml0RmlsdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGV2ZSBzZXIgaW5mb3JtYWRvIG8gbm9tZSBkYSBwcm9wcmllZGFkZSBkbyBvYmpldG8gcXVlIHNlcsOhIHV0aWxpemFkbyBwYXJhIGEgY29udmVyc8OjbyBkb3MgaXRlbnMgYXByZXNlbnRhZG9zIG5hIGxpc3RhIGRvIGNvbXBvbmVudGVcbiAgICogKGBwLW9wdGlvbnNgKSwgZXN0YSBwcm9wcmllZGFkZSBzZXLDoSByZXNwb25zw6F2ZWwgcGVsbyB2YWxvciBkZSBjYWRhIGl0ZW0gZGEgbGlzdGEuXG4gICAqXG4gICAqIE5lY2Vzc8OhcmlvIHF1YW5kbyBpbmZvcm1hciBvIHNlcnZpw6dvIGNvbW8gVVJMIGUgbyBtZXNtbyBuw6NvIGVzdGl2ZXIgcmV0b3JuYW5kbyB1bWEgbGlzdGEgZGUgb2JqZXRvcyBubyBwYWRyw6NvIGRhIGludGVyZmFjZVxuICAgKiBQb0NvbWJvT3B0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdmFsdWVgXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBzZXQgZmllbGRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRWYWx1ZSA9IHZhbHVlIHx8IFBPX0NPTUJPX0ZJRUxEX1ZBTFVFX0RFRkFVTFQ7XG5cbiAgICBpZiAoaXNUeXBlb2YodGhpcy5maWx0ZXJTZXJ2aWNlLCAnc3RyaW5nJykgJiYgdGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNlcnZpY2UuZmllbGRWYWx1ZSA9IHRoaXMuX2ZpZWxkVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpZWxkVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHRleHRvIGRlIGFwcmVzZW50YcOnw6NvIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogTmVjZXNzw6FyaW8gcXVhbmRvIGluZm9ybWFyIG8gc2VydmnDp28gY29tbyBVUkwgZSBvIG1lc21vIG7Do28gZXN0aXZlciByZXRvcm5hbmRvIHVtYSBsaXN0YSBkZSBvYmpldG9zIG5vIHBhZHLDo28gZGEgaW50ZXJmYWNlXG4gICAqIFBvQ29tYm9PcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBsYWJlbGBcbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1sYWJlbCcpIHNldCBmaWVsZExhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9maWVsZExhYmVsID0gdmFsdWUgfHwgUE9fQ09NQk9fRklFTERfTEFCRUxfREVGQVVMVDtcblxuICAgIGlmIChpc1R5cGVvZih0aGlzLmZpbHRlclNlcnZpY2UsICdzdHJpbmcnKSAmJiB0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VydmljZS5maWVsZExhYmVsID0gdGhpcy5fZmllbGRMYWJlbDtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFZhbG9yIG3DrW5pbW8gZGUgY2FyYWN0ZXJlcyBwYXJhIHJlYWxpemFyIG8gZmlsdHJvIG5vIHNlcnZpw6dvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMGBcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItbWlubGVuZ3RoJykgc2V0IGZpbHRlck1pbmxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgcGFyc2VWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogdmFsdWU7XG5cbiAgICB0aGlzLl9maWx0ZXJNaW5sZW5ndGggPSBOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlVmFsdWUpID8gcGFyc2VWYWx1ZSA6IDA7XG4gIH1cblxuICBnZXQgZmlsdGVyTWlubGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJNaW5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6Egb2JyaWdhdMOzcmlvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVxdWlyZWQnKSBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvbnZlcnRUb0Jvb2xlYW4ocmVxdWlyZWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhIHF1ZSBvIGV2ZW50byBgcC1jaGFuZ2VgIHPDsyBzZXLDoSBkaXNwYXJhZG8gYW8gY2xpY2FyIG91IHByZXNzaW9uYXIgYSB0ZWNsYSBcIkVudGVyXCIgc29icmUgdW1hIG9ww6fDo28gc2VsZWNpb25hZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1jaGFuZ2Utb24tZW50ZXInKSBzZXQgY2hhbmdlT25FbnRlcihjaGFuZ2VPbkVudGVyOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2hhbmdlT25FbnRlciA9IGNvbnZlcnRUb0Jvb2xlYW4oY2hhbmdlT25FbnRlcik7XG4gIH1cblxuICBnZXQgY2hhbmdlT25FbnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlT25FbnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBkZXNhYmlsaXRhZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1kaXNhYmxlZCcpIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29udmVydFRvQm9vbGVhbihkaXNhYmxlZCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICAvKiogSW5kaWNhIHF1ZSBhIGxpc3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHAtb3B0aW9ucyBzZXLDoSBvcmRlbmFkYSBwZWxhIGRlc2NyacOnw6NvLiAqL1xuICBASW5wdXQoJ3Atc29ydCcpIHNldCBzb3J0KHNvcnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zb3J0ID0gY29udmVydFRvQm9vbGVhbihzb3J0KTtcbiAgICB0aGlzLmNvbWJvTGlzdERlZmluaXRpb25zKCk7XG4gIH1cblxuICBnZXQgc29ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXN0YSBwcm9wcmllZGFkZSBkZWZpbmUgYSBsaXN0YSBkZSBvcMOnw7VlcyBkbyBgcG8tY29tYm9gLlxuICAgKlxuICAgKiA+IEEgbGlzdGEgcG9kZSBzZXIgZGVmaW5pZGEgZW0gZG9pcyBmb3JtYXRvcywgc2ltcGxlcyBvdSBjb20gYWdydXBhbWVudG9zLlxuICAgKiAtIFV0aWxpemUgYFBvQ29tYm9PcHRpb25gIHBhcmEgbGlzdGEgZGUgb3DDp8O1ZXMgc2ltcGxlcy5cbiAgICogLSBVdGlsaXplIGBQb0NvbWJvT3B0aW9uR3JvdXBgIHBhcmEgbGlzdGEgZGUgb3DDp8O1ZXMgY29tIGFncnVwYW1lbnRvLlxuICAgKlxuICAgKiAqKkltcG9ydGFudGU6KipcbiAgICogLSBBIGxpc3RhIGRldmUgc2VndWlyIGFzIGRlZmluacOnw7VlcyBkZXNjcml0YXMgbmFzIHJlc3BlY3RpdmFzIGludGVyZmFjZXMsIGNhc28gY29udHLDoXJpbyBuw6NvIGV4aWJpcsOhIGEoYXMpIG9ww6fDo28ow7VlcykgZm9yYSBkb3MgcGFkcsO1ZXMuXG4gICAqIC0gTyBjb21wb25lbnRlIGludGVycHJldGFyw6EgbyBmb3JtYXRvIGRhIGxpc3RhIGRlIGFjb3JkbyBjb20gYSBpbnRlcmZhY2UgdXRpbGl6YWRhIGUgc8OzIGV4aWJpcsOhIGFzIG9ww6fDtWVzIGNvcnJlc3BvbmRlbnRlcyDDoCBlbGEuXG4gICAqIC0gVW0gYWdydXBhbWVudG8gc8OzIHNlcsOhIGV4aWJpZG8gc2UgaG91dmVyIHBlbG8gbWVub3MgdW1hIG9ww6fDo28gdsOhbGlkYS5cbiAgICovXG4gIEBJbnB1dCgncC1vcHRpb25zJykgc2V0IG9wdGlvbnMob3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9PcHRpb25Hcm91cD4pIHtcbiAgICB0aGlzLl9vcHRpb25zID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBbXTtcblxuICAgIHRoaXMuY29tYm9MaXN0RGVmaW5pdGlvbnMoKTtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gbW9kbyBkZSBwZXNxdWlzYSB1dGlsaXphZG8gbm8gZmlsdHJvIGRhIGxpc3RhIGRlIHNlbGXDp8OjbzogYHN0YXJ0c1dpdGhgLCBgY29udGFpbnNgIG91IGBlbmRzV2l0aGAuXG4gICAqXG4gICAqID4gUXVhbmRvIHV0aWxpemFyIGEgcHJvcHJpZWRhZGUgYHAtZmlsdGVyLXNlcnZpY2VgIGVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgaWdub3JhZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBzdGFydHNXaXRoYFxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1tb2RlJykgc2V0IGZpbHRlck1vZGUoZmlsdGVyTW9kZTogUG9Db21ib0ZpbHRlck1vZGUpIHtcbiAgICB0aGlzLl9maWx0ZXJNb2RlID0gZmlsdGVyTW9kZSBpbiBQb0NvbWJvRmlsdGVyTW9kZSA/IGZpbHRlck1vZGUgOiBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICAgIHN3aXRjaCAodGhpcy5fZmlsdGVyTW9kZS50b1N0cmluZygpKSB7XG4gICAgICBjYXNlICdzdGFydHNXaXRoJzpcbiAgICAgICAgdGhpcy5fZmlsdGVyTW9kZSA9IFBvQ29tYm9GaWx0ZXJNb2RlLnN0YXJ0c1dpdGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29udGFpbnMnOlxuICAgICAgICB0aGlzLl9maWx0ZXJNb2RlID0gUG9Db21ib0ZpbHRlck1vZGUuY29udGFpbnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW5kc1dpdGgnOlxuICAgICAgICB0aGlzLl9maWx0ZXJNb2RlID0gUG9Db21ib0ZpbHRlck1vZGUuZW5kc1dpdGg7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXJNb2RlKCk6IFBvQ29tYm9GaWx0ZXJNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyTW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFZhbG9yIHF1ZSBzZXLDoSByZXBhc3NhZG8gY29tbyBwYXLDom1ldHJvIHBhcmEgYSBVUkwgb3UgYW9zIG3DqXRvZG9zIGRvIHNlcnZpw6dvIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSAqUG9Db21ib0ZpbHRlciouXG4gICAqXG4gICAqID4gQ2FzbyBhIGxpc3RhIGNvbnRlbmhhIGFncnVwYW1lbnRvcywgb3MgbWVzbW9zIHPDsyBzZXLDo28gZXhpYmlkb3Mgc2UgaG91dmVyIG5vIG3DrW5pbW8gdW1hIG9ww6fDo28gcXVlIGNvcnJlc3BvbmRhIMOgIHBlc3F1aXNhLlxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1wYXJhbXMnKSBzZXQgZmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtczogYW55KSB7XG4gICAgdGhpcy5fZmlsdGVyUGFyYW1zID0gZmlsdGVyUGFyYW1zIHx8IGZpbHRlclBhcmFtcyA9PT0gMCB8fCBmaWx0ZXJQYXJhbXMgPT09IGZhbHNlID8gZmlsdGVyUGFyYW1zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGZpbHRlclBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyUGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2JqZXRvIGNvbSBhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLWNvbWJvYC5cbiAgICpcbiAgICogUGFyYSB1dGlsaXphciBiYXN0YSBwYXNzYXIgYSBsaXRlcmFsIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9Db21ib0xpdGVyYWxzID0ge1xuICAgKiAgICBub0RhdGE6ICdOZW5odW0gdmFsb3InXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGEgbGl0ZXJhbCBjdXN0b21pemFkYSwgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1jb21ib1xuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tY29tYm8+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9Db21ib0xpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb0NvbWJvTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAgIC4uLnBvQ29tYm9MaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvQ29tYm9MaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb0NvbWJvTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICB9XG5cbiAgY29uc3RydWN0b3IobGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgZ2V0IGlzT3B0aW9uR3JvdXBMaXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zLmxlbmd0aCAmJiB0aGlzLl9vcHRpb25zWzBdLmhhc093blByb3BlcnR5KCdvcHRpb25zJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICB9XG5cbiAgb25Jbml0U2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5maWx0ZXJTZXJ2aWNlKTtcbiAgICAgIHRoaXMuaW5pdElucHV0T2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFNlcnZpY2Uoc2VydmljZTogUG9Db21ib0ZpbHRlciB8IHN0cmluZykge1xuICAgIGlmIChzZXJ2aWNlKSB7XG4gICAgICBpZiAoaXNUeXBlb2Yoc2VydmljZSwgJ29iamVjdCcpKSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IDxQb0NvbWJvRmlsdGVyU2VydmljZT5zZXJ2aWNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5kZWZhdWx0U2VydmljZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNvbmZpZ1Byb3BlcnRpZXMoPHN0cmluZz5zZXJ2aWNlLCB0aGlzLmZpZWxkTGFiZWwsIHRoaXMuZmllbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29tcGFyZU1ldGhvZChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwLCBmaWx0ZXJNb2RlOiBQb0NvbWJvRmlsdGVyTW9kZSkge1xuICAgIHN3aXRjaCAoZmlsdGVyTW9kZSkge1xuICAgICAgY2FzZSBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydHNXaXRoKHNlYXJjaCwgb3B0aW9uKTtcbiAgICAgIGNhc2UgUG9Db21ib0ZpbHRlck1vZGUuY29udGFpbnM6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHNlYXJjaCwgb3B0aW9uKTtcbiAgICAgIGNhc2UgUG9Db21ib0ZpbHRlck1vZGUuZW5kc1dpdGg6XG4gICAgICAgIHJldHVybiB0aGlzLmVuZHNXaXRoKHNlYXJjaCwgb3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBzdGFydHNXaXRoKHNlYXJjaDogc3RyaW5nLCBvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXApIHtcbiAgICByZXR1cm4gb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzZWFyY2gudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBjb250YWlucyhzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoLnRvTG93ZXJDYXNlKCkpID4gLTE7XG4gIH1cblxuICBlbmRzV2l0aChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGdldE9wdGlvbkZyb21WYWx1ZSh2YWx1ZTogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IG9wdGlvbnMuZmluZCgob3B0aW9uOiBhbnkpID0+IHRoaXMuaXNFcXVhbChvcHRpb24udmFsdWUsIHZhbHVlKSkgOiBudWxsO1xuICB9XG5cbiAgZ2V0T3B0aW9uRnJvbUxhYmVsKGxhYmVsOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5maW5kKChvcHRpb246IGFueSkgPT4gb3B0aW9uLmxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gbGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU2VsZWN0ZWRWYWx1ZShvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXAsIGlzVXBkYXRlTW9kZWw6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uTGFiZWwgPSAob3B0aW9uICYmIG9wdGlvbi5sYWJlbCkgfHwgJyc7XG5cbiAgICB0aGlzLnVwZGF0ZUludGVybmFsVmFyaWFibGVzKG9wdGlvbik7XG5cbiAgICAvLyBhdHVhbGl6YSBvIHZhbG9yIGRvIGlucHV0IHF1YW5kbyBmb3IgY2hhbmdlT25FbnRlciBhcGVuYXMgc2UgZm9yIHBhcmEgYXR1YWxpemFyIG8gbW9kZWwuXG4gICAgaWYgKHRoaXMuY2hhbmdlT25FbnRlciAmJiBpc1VwZGF0ZU1vZGVsKSB7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWUob3B0aW9uTGFiZWwpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuY2hhbmdlT25FbnRlcikge1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKG9wdGlvbkxhYmVsKTtcbiAgICB9XG5cbiAgICBpZiAoaXNVcGRhdGVNb2RlbCkge1xuICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSBvcHRpb24/LnZhbHVlICE9PSB1bmRlZmluZWQgPyBvcHRpb24udmFsdWUgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudXBkYXRlTW9kZWwob3B0aW9uVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxNb2RlbENoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgLy8gQ2FzbyBvIGNvbXBvbmVudGUgZXN0aXZlciBkZW50cm8gZGUgdW0gZm9ybSwgdGVyw6EgYWNlc3NvIGFvIG3DqXRvZG8gb25Nb2RlbENoYW5nZS5cbiAgICByZXR1cm4gdGhpcy5vbk1vZGVsQ2hhbmdlID8gdGhpcy5vbk1vZGVsQ2hhbmdlKHZhbHVlKSA6IHRoaXMubmdNb2RlbENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGlzRXF1YWwodmFsdWU6IGFueSwgaW5wdXRWYWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkgJiYgaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkgPT09IGlucHV0VmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoKHZhbHVlID09PSBudWxsICYmIGlucHV0VmFsdWUgIT09IG51bGwpIHx8ICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHZhbHVlID0gYCR7dmFsdWV9YDsgLy8gVHJhbnNmb3JtYW5kbyBlbSBzdHJpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUgPT09IGlucHV0VmFsdWU7XG4gIH1cblxuICBzZWFyY2hGb3JMYWJlbChzZWFyY2g6IHN0cmluZywgb3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4sIGZpbHRlck1vZGU6IFBvQ29tYm9GaWx0ZXJNb2RlKSB7XG4gICAgaWYgKHNlYXJjaCAmJiBvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXdPcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiA9IFtdO1xuICAgICAgbGV0IGFkZGVkT3B0aW9uc0dyb3VwVGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCBvcHRpb25zR3JvdXBUaXRsZTogUG9Db21ib0dyb3VwO1xuXG4gICAgICBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgaWYgKCdvcHRpb25zJyBpbiBvcHRpb24pIHtcbiAgICAgICAgICBhZGRlZE9wdGlvbnNHcm91cFRpdGxlID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIChvcHRpb25zR3JvdXBUaXRsZSA9IG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uLmxhYmVsICYmICh0aGlzLmNvbXBhcmVNZXRob2Qoc2VhcmNoLCBvcHRpb24sIGZpbHRlck1vZGUpIHx8IHRoaXMuc2VydmljZSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc09wdGlvbkdyb3VwTGlzdCAmJiAhYWRkZWRPcHRpb25zR3JvdXBUaXRsZSkge1xuICAgICAgICAgICAgbmV3T3B0aW9ucy5wdXNoKG9wdGlvbnNHcm91cFRpdGxlKTtcbiAgICAgICAgICAgIGFkZGVkT3B0aW9uc0dyb3VwVGl0bGUgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBuZXdPcHRpb25zW3RoaXMuaXNPcHRpb25Hcm91cExpc3QgPyAxIDogMF07XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChuZXdPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb21ib0xpc3Qob3B0aW9ucz86IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA+KSB7XG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBvcHRpb25zIHx8IFsuLi50aGlzLmNvbWJvT3B0aW9uc0xpc3RdO1xuXG4gICAgY29uc3QgbmV3T3B0aW9ucyA9XG4gICAgICAhb3B0aW9ucyAmJiAhdGhpcy5pbmZpbml0ZVNjcm9sbCAmJiB0aGlzLnNlbGVjdGVkVmFsdWUgPyBbeyAuLi50aGlzLnNlbGVjdGVkT3B0aW9uIH1dIDogY29weU9wdGlvbnM7XG5cbiAgICB0aGlzLnZpc2libGVPcHRpb25zID0gbmV3T3B0aW9ucztcblxuICAgIGlmICghdGhpcy5zZWxlY3RlZFZpZXcgJiYgdGhpcy52aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gY29weU9wdGlvbnMuZmluZChvcHRpb24gPT4gb3B0aW9uLnZhbHVlICE9PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldE5leHRPcHRpb24odmFsdWU6IGFueSwgb3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4sIHJldmVyc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IG9wdGlvbnNMaXN0ID0gcmV2ZXJzZSA/IG9wdGlvbnMuc2xpY2UoMCkucmV2ZXJzZSgpIDogb3B0aW9ucy5zbGljZSgwKTtcbiAgICBsZXQgb3B0aW9uRm91bmQgPSBudWxsO1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9uc0xpc3QpIHtcbiAgICAgIGlmIChvcHRpb24udmFsdWUgJiYgIW9wdGlvbkZvdW5kKSB7XG4gICAgICAgIG9wdGlvbkZvdW5kID0gb3B0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbi52YWx1ZSAmJiBmb3VuZCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNFcXVhbChvcHRpb24udmFsdWUsIHZhbHVlKSkge1xuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbkZvdW5kO1xuICB9XG5cbiAgZ2V0SW5kZXhTZWxlY3RlZFZpZXcoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb21wYXJlT2JqZWN0cyh0aGlzLnZpc2libGVPcHRpb25zW2ldLCB0aGlzLnNlbGVjdGVkVmlldykpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29tcGFyZU9iamVjdHMob2JqMTogYW55LCBvYmoyOiBhbnkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqMSkgPT09IEpTT04uc3RyaW5naWZ5KG9iajIpO1xuICB9XG5cbiAgdmVyaWZ5VmFsaWRPcHRpb24oKSB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuZ2V0SW5wdXRWYWx1ZSgpO1xuXG4gICAgY29uc3Qgb3B0aW9uRm91bmQgPSB0aGlzLmdldE9wdGlvbkZyb21MYWJlbChpbnB1dFZhbHVlLCB0aGlzLmNvbWJvT3B0aW9uc0xpc3QpO1xuXG4gICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KFsuLi50aGlzLmNhY2hlU3RhdGljT3B0aW9uc10pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25Gb3VuZCAmJiBvcHRpb25Gb3VuZC52YWx1ZSAhPT0gdGhpcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUob3B0aW9uRm91bmQpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgPSBvcHRpb25Gb3VuZC5sYWJlbDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24ubGFiZWwgIT09IGlucHV0VmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZVdpdGhPbGRPcHRpb24oKTtcblxuICAgICAgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlID0gdGhpcy5zZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGlucHV0VmFsdWUgJiYgIW9wdGlvbkZvdW5kKSB7XG4gICAgICBjb25zdCBpc0lucHV0VmFsdWVEaWZmU2VsZWN0ZWRMYWJlbCA9ICEhKHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi5sYWJlbCAhPT0gaW5wdXRWYWx1ZSk7XG5cbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShudWxsLCBpc0lucHV0VmFsdWVEaWZmU2VsZWN0ZWRMYWJlbCB8fCB0aGlzLmNoYW5nZU9uRW50ZXIpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvLyBSZWNlYmUgYXMgYWx0ZXJhw6fDtWVzIGRvIG1vZGVsXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuZnJvbVdyaXRlVmFsdWUgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkVmFsdWUodmFsdWUpICYmICF0aGlzLnNlcnZpY2UgJiYgdGhpcy5jb21ib09wdGlvbnNMaXN0ICYmIHRoaXMuY29tYm9PcHRpb25zTGlzdC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uRnJvbVZhbHVlKHZhbHVlLCB0aGlzLmNvbWJvT3B0aW9uc0xpc3QpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG9wdGlvbik7XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNlIGhvdXZlciBzZXJ2acOnbyBidXNjYSBwZWxvIG1vZGVsLlxuICAgIGlmICh2YWx1ZSAmJiB0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdEJ5VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZ1bsOnw6NvIGltcGxlbWVudGFkYSBkbyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIG9zIGVzdGFkb3MgZGUgaGFiaWxpdGFkbyB2aWEgZm9ybXMgYXBpXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICB2YWxpZGF0ZShhYnN0cmFjdENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmIChyZXF1aXJlZEZhaWxlZCh0aGlzLnJlcXVpcmVkLCB0aGlzLmRpc2FibGVkLCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXF1aXJlZDoge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKHZhbHVlKSB7XG4gICAgdGhpcy5jYWxsTW9kZWxDaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShudWxsKTtcbiAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ0FmdGVyU2V0RmlsdGVyU2VydmljZShzZXJ2aWNlOiBQb0NvbWJvRmlsdGVyIHwgc3RyaW5nKSB7XG4gICAgaWYgKHNlcnZpY2UpIHtcbiAgICAgIHRoaXMuY29tYm9PcHRpb25zTGlzdCA9IFtdO1xuICAgICAgdGhpcy51bnN1YnNjcmliZUtleXVwT2JzZXJ2YWJsZSgpO1xuICAgICAgdGhpcy5vbkluaXRTZXJ2aWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VydmljZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY29tYm9PcHRpb25zTGlzdCA9IHRoaXMuY2FjaGVTdGF0aWNPcHRpb25zO1xuICAgIH1cblxuICAgIHRoaXMudmlzaWJsZU9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLmlzRmlyc3RGaWx0ZXIgPSB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlS2V5dXBPYnNlcnZhYmxlKCkge1xuICAgIGlmICh0aGlzLmtleXVwU3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLmtleXVwU3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlTW9kZWwobW9kZWw6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbGlkYXRvckNoYW5nZSkge1xuICAgICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UobW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tYm9MaXN0RGVmaW5pdGlvbnMoKSB7XG4gICAgdGhpcy5jb21ib09wdGlvbnNMaXN0ID0gdGhpcy5vcHRpb25zLmxlbmd0aCA+IDAgPyB0aGlzLmxpc3RpbmdDb21ib09wdGlvbnModGhpcy5vcHRpb25zKSA6IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLmNhY2hlU3RhdGljT3B0aW9ucyA9IHRoaXMuY29tYm9PcHRpb25zTGlzdDtcblxuICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVPcHRpb25zKG9wdGlvbkE6IGFueSwgb3B0aW9uQjogYW55KSB7XG4gICAgY29uc3QgbGFiZWxBID0gb3B0aW9uQS5sYWJlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbGFiZWxCID0gb3B0aW9uQi5sYWJlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICByZXR1cm4gbGFiZWxBIDwgbGFiZWxCID8gLTEgOiBsYWJlbEEgPiBsYWJlbEIgPyAxIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzRHVwbGljYXRlZE9wdGlvbihcbiAgICBvcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPixcbiAgICBjdXJyZW50T3B0aW9uOiBzdHJpbmcsXG4gICAgYWNjdW11bGF0ZWRHcm91cE9wdGlvbnM/OiBBcnJheTxQb0NvbWJvR3JvdXA+XG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICBvcHRpb25zLnNvbWUob3B0aW9uID0+IG9wdGlvbi5sYWJlbCA9PT0gY3VycmVudE9wdGlvbikgfHxcbiAgICAgIChhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucyAmJiBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucy5zb21lKG9wdGlvbiA9PiBvcHRpb24ubGFiZWwgPT09IGN1cnJlbnRPcHRpb24pKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RpbmdDb21ib09wdGlvbnMoY29tYm9PcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib09wdGlvbkdyb3VwPikge1xuICAgIGNvbnN0IGNvbWJvT3B0aW9uc0xpc3QgPSBjb21ib09wdGlvbnMuY29uY2F0KCk7XG4gICAgY29uc3QgdmVyaWZpZWRDb21ib09wdGlvbnNMaXN0ID0gdGhpcy52ZXJpZnlDb21ib09wdGlvbnMoY29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICB0aGlzLnNvcnRPcHRpb25zKHZlcmlmaWVkQ29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICBpZiAodGhpcy5pc09wdGlvbkdyb3VwTGlzdCAmJiB2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5Q29tYm9PcHRpb25zR3JvdXAodmVyaWZpZWRDb21ib09wdGlvbnNMaXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRDb21ib09wdGlvbnNMaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0T3B0aW9ucyhjb21ib09wdGlvbnNMaXN0OiBBcnJheTxQb0NvbWJvR3JvdXA+KSB7XG4gICAgaWYgKGNvbWJvT3B0aW9uc0xpc3QubGVuZ3RoID4gMCAmJiB0aGlzLnNvcnQpIHtcbiAgICAgIHJldHVybiBjb21ib09wdGlvbnNMaXN0LnNvcnQodGhpcy5jb21wYXJlT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZhbHVlKGN1cnJlbnRPcHRpb246IFBvQ29tYm9Hcm91cCwgdmVyaWZ5aW5nT3B0aW9uc0dyb3VwOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCB7IGxhYmVsLCBvcHRpb25zLCB2YWx1ZSB9ID0gY3VycmVudE9wdGlvbjtcblxuICAgIGlmICh0aGlzLmlzT3B0aW9uR3JvdXBMaXN0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodmFsaWRWYWx1ZShsYWJlbCkgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHx8ICh2ZXJpZnlpbmdPcHRpb25zR3JvdXAgPT09IHRydWUgJiYgdmFsaWRWYWx1ZSh2YWx1ZSkpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZFZhbHVlKHZhbHVlKSAmJiAhb3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5Q29tYm9PcHRpb25zKFxuICAgIGNvbWJvT3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9PcHRpb25Hcm91cD4sXG4gICAgdmVyaWZ5aW5nT3B0aW9uc0dyb3VwOiBib29sZWFuID0gZmFsc2UsXG4gICAgYWNjdW11bGF0ZWRHcm91cE9wdGlvbnM/OiBBcnJheTxQb0NvbWJvR3JvdXA+XG4gICkge1xuICAgIHJldHVybiBjb21ib09wdGlvbnMucmVkdWNlKChhY2N1bXVsYXRlZE9wdGlvbnMsIGN1cnJlbnRPcHRpb24pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMudmVyaWZ5SWZIYXNMYWJlbChjdXJyZW50T3B0aW9uKSB8fFxuICAgICAgICB0aGlzLmhhc0R1cGxpY2F0ZWRPcHRpb24oYWNjdW11bGF0ZWRPcHRpb25zLCBjdXJyZW50T3B0aW9uLmxhYmVsLCBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucykgfHxcbiAgICAgICAgIXRoaXMudmFsaWRhdGVWYWx1ZShjdXJyZW50T3B0aW9uLCB2ZXJpZnlpbmdPcHRpb25zR3JvdXApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkT3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgYWNjdW11bGF0ZWRPcHRpb25zLnB1c2goY3VycmVudE9wdGlvbik7XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRPcHRpb25zO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5Q29tYm9PcHRpb25zR3JvdXAoY29tYm9PcHRpb25zTGlzdDogQXJyYXk8UG9Db21ib09wdGlvbkdyb3VwPikge1xuICAgIHJldHVybiBjb21ib09wdGlvbnNMaXN0LnJlZHVjZSgoYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMsIGN1cnJlbnRPcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IHsgb3B0aW9ucywgbGFiZWwgfSA9IGN1cnJlbnRPcHRpb247XG4gICAgICBjb25zdCB2ZXJpZmllZENvbWJvT3B0aW9uc0dyb3VwTGlzdCA9IHRoaXMudmVyaWZ5Q29tYm9PcHRpb25zKG9wdGlvbnMsIHRydWUsIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zKTtcblxuICAgICAgaWYgKHZlcmlmaWVkQ29tYm9PcHRpb25zR3JvdXBMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zb3J0T3B0aW9ucyh2ZXJpZmllZENvbWJvT3B0aW9uc0dyb3VwTGlzdCk7XG5cbiAgICAgICAgYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMucHVzaCh7IGxhYmVsOiBsYWJlbCwgb3B0aW9uczogdHJ1ZSB9LCAuLi52ZXJpZmllZENvbWJvT3B0aW9uc0dyb3VwTGlzdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucztcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUlmSGFzTGFiZWwoY3VycmVudE9wdGlvbjogUG9Db21ib0dyb3VwID0ge30pIHtcbiAgICBjb25zdCB7IGxhYmVsLCBvcHRpb25zLCB2YWx1ZSB9ID0gY3VycmVudE9wdGlvbjtcblxuICAgIGlmICgodGhpcy5pc09wdGlvbkdyb3VwTGlzdCAmJiBvcHRpb25zICYmICFsYWJlbCkgfHwgKCFsYWJlbCAmJiAhdmFsdWUpIHx8ICghdGhpcy5pc09wdGlvbkdyb3VwTGlzdCAmJiBvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghY3VycmVudE9wdGlvbi5sYWJlbCkge1xuICAgICAgY3VycmVudE9wdGlvbi5sYWJlbCA9IGN1cnJlbnRPcHRpb24udmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbnRlcm5hbFZhcmlhYmxlcyhvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXApIHtcbiAgICBpZiAob3B0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IG9wdGlvbjtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBvcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLmZyb21Xcml0ZVZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2FsbE1vZGVsQ2hhbmdlKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLmVtaXRPYmplY3RWYWx1ZSA/IHRoaXMuc2VsZWN0ZWRPcHRpb24gOiB2YWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5mcm9tV3JpdGVWYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFZhbHVlV2l0aE9sZE9wdGlvbigpIHtcbiAgICBjb25zdCBvbGRPcHRpb24gPSB0aGlzLmdldE9wdGlvbkZyb21WYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICBpZiAob2xkT3B0aW9uICYmIG9sZE9wdGlvbi5sYWJlbCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShvbGRPcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IHNldElucHV0VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgYWJzdHJhY3QgYXBwbHlGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgYWJzdHJhY3QgZ2V0T2JqZWN0QnlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZDtcblxuICBhYnN0cmFjdCBnZXRJbnB1dFZhbHVlKCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBpbml0SW5wdXRPYnNlcnZhYmxlKCk6IHZvaWQ7XG59XG4iXX0=