ngwr 2.0.0 → 2.2.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.
- package/README.md +19 -21
- package/esm2022/button/button.component.mjs +4 -4
- package/esm2022/button/button.module.mjs +4 -4
- package/esm2022/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/checkbox/checkbox.module.mjs +4 -4
- package/esm2022/core/abstract/base.mjs +3 -3
- package/esm2022/core/color/is-theme-color.mjs +1 -1
- package/esm2022/core/overlay/connected-overlay-directive.mjs +4 -4
- package/esm2022/core/overlay/get-placement-name.mjs +1 -1
- package/esm2022/core/overlay/overlay-module.mjs +4 -4
- package/esm2022/dialog/dialog-base.mjs +4 -4
- package/esm2022/dialog/dialog-container.mjs +3 -3
- package/esm2022/dialog/dialog-content-directives.mjs +12 -12
- package/esm2022/dialog/dialog-module.mjs +4 -4
- package/esm2022/dialog/dialog-ref.mjs +1 -1
- package/esm2022/dialog/dialog-service.mjs +4 -4
- package/esm2022/divider/divider.component.mjs +3 -3
- package/esm2022/divider/divider.module.mjs +4 -4
- package/esm2022/form/form-error.mjs +3 -3
- package/esm2022/form/form-item.mjs +3 -3
- package/esm2022/form/form-module.mjs +4 -4
- package/esm2022/icon/icon-module.mjs +4 -4
- package/esm2022/icon/icon-service.mjs +3 -3
- package/esm2022/icon/icon.mjs +4 -4
- package/esm2022/input/input-module.mjs +4 -4
- package/esm2022/input/input.mjs +4 -4
- package/esm2022/qrcode/generator.mjs +1 -1
- package/esm2022/qrcode/qrcode-module.mjs +4 -4
- package/esm2022/qrcode/qrcode.mjs +4 -4
- package/esm2022/qrcode/qrcodegen.mjs +7 -7
- package/esm2022/skeleton/skeleton-module.mjs +4 -4
- package/esm2022/skeleton/skeleton.mjs +3 -3
- package/esm2022/spinner/spinner-module.mjs +4 -4
- package/esm2022/spinner/spinner.mjs +3 -3
- package/esm2022/tag/tag-module.mjs +4 -4
- package/esm2022/tag/tag.mjs +3 -3
- package/esm2022/tooltip/tooltip-component.mjs +4 -4
- package/esm2022/tooltip/tooltip-directive.mjs +4 -4
- package/esm2022/tooltip/tooltip-module.mjs +4 -4
- package/fesm2022/ngwr-button.mjs +7 -7
- package/fesm2022/ngwr-button.mjs.map +1 -1
- package/fesm2022/ngwr-checkbox.mjs +7 -7
- package/fesm2022/ngwr-checkbox.mjs.map +1 -1
- package/fesm2022/ngwr-core-abstract.mjs +3 -3
- package/fesm2022/ngwr-core-color.mjs.map +1 -1
- package/fesm2022/ngwr-core-overlay.mjs +7 -7
- package/fesm2022/ngwr-core-overlay.mjs.map +1 -1
- package/fesm2022/ngwr-dialog.mjs +25 -25
- package/fesm2022/ngwr-dialog.mjs.map +1 -1
- package/fesm2022/ngwr-divider.mjs +7 -7
- package/fesm2022/ngwr-form.mjs +10 -10
- package/fesm2022/ngwr-icon.mjs +10 -10
- package/fesm2022/ngwr-icon.mjs.map +1 -1
- package/fesm2022/ngwr-input.mjs +7 -7
- package/fesm2022/ngwr-input.mjs.map +1 -1
- package/fesm2022/ngwr-qrcode.mjs +13 -13
- package/fesm2022/ngwr-qrcode.mjs.map +1 -1
- package/fesm2022/ngwr-skeleton.mjs +7 -7
- package/fesm2022/ngwr-spinner.mjs +7 -7
- package/fesm2022/ngwr-tag.mjs +7 -7
- package/fesm2022/ngwr-tooltip.mjs +10 -10
- package/fesm2022/ngwr-tooltip.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -594,15 +594,15 @@ var qrcodegen;
|
|
|
594
594
|
[
|
|
595
595
|
-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30,
|
|
596
596
|
30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
|
|
597
|
-
],
|
|
597
|
+
], // Low
|
|
598
598
|
[
|
|
599
599
|
-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28,
|
|
600
600
|
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
|
|
601
|
-
],
|
|
601
|
+
], // Medium
|
|
602
602
|
[
|
|
603
603
|
-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30,
|
|
604
604
|
30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
|
|
605
|
-
],
|
|
605
|
+
], // Quartile
|
|
606
606
|
[
|
|
607
607
|
-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30,
|
|
608
608
|
30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
|
|
@@ -614,15 +614,15 @@ var qrcodegen;
|
|
|
614
614
|
[
|
|
615
615
|
-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18,
|
|
616
616
|
19, 19, 20, 21, 22, 24, 25,
|
|
617
|
-
],
|
|
617
|
+
], // Low
|
|
618
618
|
[
|
|
619
619
|
-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29,
|
|
620
620
|
31, 33, 35, 37, 38, 40, 43, 45, 47, 49,
|
|
621
|
-
],
|
|
621
|
+
], // Medium
|
|
622
622
|
[
|
|
623
623
|
-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40,
|
|
624
624
|
43, 45, 48, 51, 53, 56, 59, 62, 65, 68,
|
|
625
|
-
],
|
|
625
|
+
], // Quartile
|
|
626
626
|
[
|
|
627
627
|
-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45,
|
|
628
628
|
48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81,
|
|
@@ -869,4 +869,4 @@ var qrcodegen;
|
|
|
869
869
|
})(QrSegment = qrcodegen.QrSegment || (qrcodegen.QrSegment = {}));
|
|
870
870
|
})(qrcodegen || (qrcodegen = {}));
|
|
871
871
|
export default qrcodegen;
|
|
872
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJjb2RlZ2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliL3FyY29kZS9xcmNvZGVnZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILFlBQVksQ0FBQztBQUViLElBQVUsU0FBUyxDQTIxQmxCO0FBMzFCRCxXQUFVLFNBQVM7SUFLakIsa0NBQWtDO0lBRWxDOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILE1BQWEsTUFBTTtRQUNqQiwrQ0FBK0M7UUFFL0Msb0dBQW9HO1FBQ3BHLDJHQUEyRztRQUMzRywrR0FBK0c7UUFDL0csNkdBQTZHO1FBQzdHLGlFQUFpRTtRQUMxRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQVksRUFBRSxHQUFlO1lBQ3BELE1BQU0sSUFBSSxHQUFxQixTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RSxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCw0RkFBNEY7UUFDNUYsdUdBQXVHO1FBQ3ZHLHVHQUF1RztRQUN2RyxvSEFBb0g7UUFDN0csTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUEyQixFQUFFLEdBQWU7WUFDckUsTUFBTSxHQUFHLEdBQWMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELDhDQUE4QztRQUU5Qyx3RkFBd0Y7UUFDeEYsZ0ZBQWdGO1FBQ2hGLGdGQUFnRjtRQUNoRiwrRUFBK0U7UUFDL0UsOEVBQThFO1FBQzlFLCtFQUErRTtRQUMvRSxzRkFBc0Y7UUFDdEYsOEVBQThFO1FBQzlFLGtGQUFrRjtRQUMzRSxNQUFNLENBQUMsY0FBYyxDQUMxQixJQUFnQyxFQUNoQyxHQUFlLEVBQ2YsYUFBa0IsQ0FBQyxFQUNuQixhQUFrQixFQUFFLEVBQ3BCLE9BQVksQ0FBQyxDQUFDLEVBQ2QsV0FBb0IsSUFBSTtZQUV4QixJQUNFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDO2dCQUNuRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNULElBQUksR0FBRyxDQUFDO2dCQUVSLE1BQU0sSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFeEMseUNBQXlDO1lBQ3pDLElBQUksT0FBWSxDQUFDO1lBQ2pCLElBQUksWUFBaUIsQ0FBQztZQUN0QixLQUFLLE9BQU8sR0FBRyxVQUFVLEdBQUksT0FBTyxFQUFFLEVBQUU7Z0JBQ3RDLE1BQU0sZ0JBQWdCLEdBQVEsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0M7Z0JBQzVHLE1BQU0sUUFBUSxHQUFXLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLFFBQVEsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDaEMsWUFBWSxHQUFHLFFBQVEsQ0FBQztvQkFDeEIsTUFBTSxDQUFDLDhDQUE4QztpQkFDdEQ7Z0JBQ0QsSUFBSSxPQUFPLElBQUksVUFBVTtvQkFDdkIseURBQXlEO29CQUN6RCxNQUFNLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ3pDO1lBRUQsOEZBQThGO1lBQzlGLEtBQUssTUFBTSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM5RSxtQkFBbUI7Z0JBQ25CLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUM7b0JBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQzthQUMvRjtZQUVELHlEQUF5RDtZQUN6RCxJQUFJLEVBQUUsR0FBZSxFQUFFLENBQUM7WUFDeEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3RCLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2pFLEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtvQkFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLENBQUM7WUFFbEMsb0RBQW9EO1lBQ3BELE1BQU0sZ0JBQWdCLEdBQVEsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0UsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsQ0FBQztZQUN0QyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RCxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFM0IsNERBQTREO1lBQzVELEtBQUssSUFBSSxPQUFPLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJO2dCQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTFHLHFDQUFxQztZQUNyQyxJQUFJLGFBQWEsR0FBZ0IsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU07Z0JBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUvRSw0QkFBNEI7WUFDNUIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBb0JELDRDQUE0QztRQUU1Qyx1REFBdUQ7UUFDdkQsZ0VBQWdFO1FBQ2hFLG1FQUFtRTtRQUNuRSxvREFBb0Q7UUFDcEQ7UUFDRSw2RUFBNkU7UUFDN0UsNENBQTRDO1FBQzVCLE9BQVk7UUFFNUIsbURBQW1EO1FBQ25DLG9CQUFnQyxFQUVoRCxhQUFvQyxFQUVwQyxHQUFRO1lBUFEsWUFBTyxHQUFQLE9BQU8sQ0FBSztZQUdaLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBWTtZQW5CbEQsNERBQTREO1lBQzVELHNFQUFzRTtZQUNyRCxZQUFPLEdBQTBCLEVBQUUsQ0FBQztZQUVyRCxxR0FBcUc7WUFDcEYsZUFBVSxHQUEwQixFQUFFLENBQUM7WUFvQnRELHlCQUF5QjtZQUN6QixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVztnQkFDOUQsTUFBTSxJQUFJLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQ3JELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxVQUFVLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRTdCLGdFQUFnRTtZQUNoRSxJQUFJLEdBQUcsR0FBbUIsRUFBRSxDQUFDO1lBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRTtnQkFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtnQkFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDbkM7WUFFRCw0QkFBNEI7WUFDNUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsTUFBTSxZQUFZLEdBQWdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRWpDLGFBQWE7WUFDYixJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDYixpQ0FBaUM7Z0JBQ2pDLElBQUksVUFBVSxHQUFRLFVBQVUsQ0FBQztnQkFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkIsTUFBTSxPQUFPLEdBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUM1QyxJQUFJLE9BQU8sR0FBRyxVQUFVLEVBQUU7d0JBQ3hCLEdBQUcsR0FBRyxDQUFDLENBQUM7d0JBQ1IsVUFBVSxHQUFHLE9BQU8sQ0FBQztxQkFDdEI7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDZCQUE2QjtpQkFDakQ7YUFDRjtZQUNELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsaUNBQWlDO1lBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7WUFFdEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUVELDBCQUEwQjtRQUUxQixtRkFBbUY7UUFDbkYsa0ZBQWtGO1FBQ2xGLDhFQUE4RTtRQUN2RSxTQUFTLENBQUMsQ0FBTSxFQUFFLENBQU07WUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBRUQsMEVBQTBFO1FBRTFFLCtFQUErRTtRQUN2RSxvQkFBb0I7WUFDMUIsK0NBQStDO1lBQy9DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzFDO1lBRUQsMkZBQTJGO1lBQzNGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV6QyxtQ0FBbUM7WUFDbkMsTUFBTSxXQUFXLEdBQWUsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDcEUsTUFBTSxRQUFRLEdBQVEsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNqQyx5Q0FBeUM7b0JBQ3pDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3pGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzdEO2FBQ0Y7WUFFRCwwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHlEQUF5RDtZQUNqRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDbEUsY0FBYyxDQUFDLElBQVM7WUFDOUIsZ0RBQWdEO1lBQ2hELE1BQU0sSUFBSSxHQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxxQ0FBcUM7WUFDM0csSUFBSSxHQUFHLEdBQVEsSUFBSSxDQUFDO1lBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUztZQUNyRCxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUV6QixrQkFBa0I7WUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEYsbUJBQW1CO1lBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFDaEUsQ0FBQztRQUVELDZFQUE2RTtRQUM3RSxnRUFBZ0U7UUFDeEQsV0FBVztZQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQztnQkFBRSxPQUFPO1lBRTdCLGdEQUFnRDtZQUNoRCxJQUFJLEdBQUcsR0FBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMseUNBQXlDO1lBQ3RFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sSUFBSSxHQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTO1lBQ3ZELE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXpCLGtCQUFrQjtZQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMzQixNQUFNLEtBQUssR0FBWSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsR0FBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNyQztRQUNILENBQUM7UUFFRCw2REFBNkQ7UUFDN0Qsa0VBQWtFO1FBQzFELGlCQUFpQixDQUFDLENBQU0sRUFBRSxDQUFNO1lBQ3RDLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtnQkFDL0IsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO29CQUMvQixNQUFNLElBQUksR0FBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCO29CQUNsRixNQUFNLEVBQUUsR0FBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUN2QixNQUFNLEVBQUUsR0FBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUk7d0JBQ3hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUMxRDthQUNGO1FBQ0gsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCw0Q0FBNEM7UUFDcEMsb0JBQW9CLENBQUMsQ0FBTSxFQUFFLENBQU07WUFDekMsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUMvQixLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDckY7UUFDSCxDQUFDO1FBRUQsZ0VBQWdFO1FBQ2hFLCtEQUErRDtRQUN2RCxpQkFBaUIsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLE1BQWU7WUFDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDL0IsQ0FBQztRQUVELHVFQUF1RTtRQUV2RSw4RkFBOEY7UUFDOUYsdUZBQXVGO1FBQy9FLG1CQUFtQixDQUFDLElBQTJCO1lBQ3JELE1BQU0sR0FBRyxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDOUIsTUFBTSxHQUFHLEdBQWUsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ2xELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztnQkFBRSxNQUFNLElBQUksVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFFbEcsOEJBQThCO1lBQzlCLE1BQU0sU0FBUyxHQUFRLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUUsTUFBTSxXQUFXLEdBQVEsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxRSxNQUFNLFlBQVksR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzRSxNQUFNLGNBQWMsR0FBUSxTQUFTLEdBQUcsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDbkUsTUFBTSxhQUFhLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFFaEUsc0RBQXNEO1lBQ3RELElBQUksTUFBTSxHQUF1QixFQUFFLENBQUM7WUFDcEMsTUFBTSxLQUFLLEdBQWdCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksR0FBRyxHQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ2hCLE1BQU0sR0FBRyxHQUFnQixNQUFNLENBQUMsMkJBQTJCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLENBQUMsR0FBRyxjQUFjO29CQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzlCO1lBRUQsaUZBQWlGO1lBQ2pGLElBQUksTUFBTSxHQUFnQixFQUFFLENBQUM7WUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFCLHdDQUF3QztvQkFDeEMsSUFBSSxDQUFDLElBQUksYUFBYSxHQUFHLFdBQVcsSUFBSSxDQUFDLElBQUksY0FBYzt3QkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRixDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLENBQUM7WUFDdEMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELDBGQUEwRjtRQUMxRiwyRkFBMkY7UUFDbkYsYUFBYSxDQUFDLElBQTJCO1lBQy9DLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLElBQUksVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLEdBQVEsQ0FBQyxDQUFDLENBQUMsMEJBQTBCO1lBQzFDLDJCQUEyQjtZQUMzQixLQUFLLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRTtnQkFDdEQsNENBQTRDO2dCQUM1QyxJQUFJLEtBQUssSUFBSSxDQUFDO29CQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzFCLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO29CQUMzQyxtQkFBbUI7b0JBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQzFCLE1BQU0sQ0FBQyxHQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7d0JBQ2hELE1BQU0sTUFBTSxHQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMvQyxNQUFNLENBQUMsR0FBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsc0JBQXNCO3dCQUMzRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3hELENBQUMsRUFBRSxDQUFDO3lCQUNMO3dCQUNELHlFQUF5RTt3QkFDekUseUVBQXlFO3FCQUMxRTtpQkFDRjthQUNGO1lBQ0QsTUFBTSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCx5RUFBeUU7UUFDekUsMEVBQTBFO1FBQzFFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUsZ0VBQWdFO1FBQ3hELFNBQVMsQ0FBQyxJQUFTO1lBQ3pCLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQztnQkFBRSxNQUFNLElBQUksVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDMUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNsQyxJQUFJLE1BQWUsQ0FBQztvQkFDcEIsUUFBUSxJQUFJLEVBQUU7d0JBQ1osS0FBSyxDQUFDOzRCQUNKLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUMxQixNQUFNO3dCQUNSLEtBQUssQ0FBQzs0QkFDSixNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3BCLE1BQU07d0JBQ1IsS0FBSyxDQUFDOzRCQUNKLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDcEIsTUFBTTt3QkFDUixLQUFLLENBQUM7NEJBQ0osTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzFCLE1BQU07d0JBQ1IsS0FBSyxDQUFDOzRCQUNKLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDMUQsTUFBTTt3QkFDUixLQUFLLENBQUM7NEJBQ0osTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzVDLE1BQU07d0JBQ1IsS0FBSyxDQUFDOzRCQUNKLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ2xELE1BQU07d0JBQ1IsS0FBSyxDQUFDOzRCQUNKLE1B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QUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUM5RyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2FBQ25EO1lBQ0Q7Z0JBQ0UsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUM5RyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2FBQ25EO1lBQ0Q7Z0JBQ0UsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUM5RyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2FBQ25ELEVBQUUsT0FBTztTQUNYLEFBbkI4QyxDQW1CN0M7aUJBRXNCLGdDQUEyQixHQUFzQjtZQUN2RSw4RUFBOEU7WUFDOUUsbUxBQW1MO1lBQ25MO2dCQUNFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtnQkFDL0csRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTthQUMzQjtZQUNEO2dCQUNFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtnQkFDNUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTthQUN2QztZQUNEO2dCQUNFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtnQkFDL0csRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTthQUN2QztZQUNEO2dCQUNFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxD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RUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRCxDQUFDOztRQXhCVSxjQUFJLE9BeUJoQixDQUFBO0lBQ0gsQ0FBQyxFQWhDbUIsU0FBUyxHQUFULG1CQUFTLEtBQVQsbUJBQVMsUUFnQzVCO0FBQUQsQ0FBQyxFQWhDUyxTQUFTLEtBQVQsU0FBUyxRQWdDbEI7QUFFRCxlQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBRUiBDb2RlIGdlbmVyYXRvciBsaWJyYXJ5IChUeXBlU2NyaXB0KVxuICpcbiAqIENvcHlyaWdodCAoYykgUHJvamVjdCBOYXl1a2kuIChNSVQgTGljZW5zZSlcbiAqIGh0dHBzOi8vd3d3Lm5heXVraS5pby9wYWdlL3FyLWNvZGUtZ2VuZXJhdG9yLWxpYnJhcnlcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mXG4gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluXG4gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvXG4gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZlxuICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKiAtIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiAgIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICogLSBUaGUgU29mdHdhcmUgaXMgcHJvdmlkZWQgXCJhcyBpc1wiLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBleHByZXNzIG9yXG4gKiAgIGltcGxpZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5LFxuICogICBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBhbmQgbm9uaW5mcmluZ2VtZW50LiBJbiBubyBldmVudCBzaGFsbCB0aGVcbiAqICAgYXV0aG9ycyBvciBjb3B5cmlnaHQgaG9sZGVycyBiZSBsaWFibGUgZm9yIGFueSBjbGFpbSwgZGFtYWdlcyBvciBvdGhlclxuICogICBsaWFiaWxpdHksIHdoZXRoZXIgaW4gYW4gYWN0aW9uIG9mIGNvbnRyYWN0LCB0b3J0IG9yIG90aGVyd2lzZSwgYXJpc2luZyBmcm9tLFxuICogICBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBTb2Z0d2FyZSBvciB0aGUgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoZVxuICogICBTb2Z0d2FyZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbm5hbWVzcGFjZSBxcmNvZGVnZW4ge1xuICB0eXBlIGJpdCA9IG51bWJlcjtcbiAgdHlwZSBieXRlID0gbnVtYmVyO1xuICB0eXBlIGludCA9IG51bWJlcjtcblxuICAvKi0tLS0gUVIgQ29kZSBzeW1ib2wgY2xhc3MgLS0tLSovXG5cbiAgLypcbiAgICogQSBRUiBDb2RlIHN5bWJvbCwgd2hpY2ggaXMgYSB0eXBlIG9mIHR3by1kaW1lbnNpb24gYmFyY29kZS5cbiAgICogSW52ZW50ZWQgYnkgRGVuc28gV2F2ZSBhbmQgZGVzY3JpYmVkIGluIHRoZSBJU08vSUVDIDE4MDA0IHN0YW5kYXJkLlxuICAgKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgYW4gaW1tdXRhYmxlIHNxdWFyZSBncmlkIG9mIGRhcmsgYW5kIGxpZ2h0IGNlbGxzLlxuICAgKiBUaGUgY2xhc3MgcHJvdmlkZXMgc3RhdGljIGZhY3RvcnkgZnVuY3Rpb25zIHRvIGNyZWF0ZSBhIFFSIENvZGUgZnJvbSB0ZXh0IG9yIGJpbmFyeSBkYXRhLlxuICAgKiBUaGUgY2xhc3MgY292ZXJzIHRoZSBRUiBDb2RlIE1vZGVsIDIgc3BlY2lmaWNhdGlvbiwgc3VwcG9ydGluZyBhbGwgdmVyc2lvbnMgKHNpemVzKVxuICAgKiBmcm9tIDEgdG8gNDAsIGFsbCA0IGVycm9yIGNvcnJlY3Rpb24gbGV2ZWxzLCBhbmQgNCBjaGFyYWN0ZXIgZW5jb2RpbmcgbW9kZXMuXG4gICAqXG4gICAqIFdheXMgdG8gY3JlYXRlIGEgUVIgQ29kZSBvYmplY3Q6XG4gICAqIC0gSGlnaCBsZXZlbDogVGFrZSB0aGUgcGF5bG9hZCBkYXRhIGFuZCBjYWxsIFFyQ29kZS5lbmNvZGVUZXh0KCkgb3IgUXJDb2RlLmVuY29kZUJpbmFyeSgpLlxuICAgKiAtIE1pZCBsZXZlbDogQ3VzdG9tLW1ha2UgdGhlIGxpc3Qgb2Ygc2VnbWVudHMgYW5kIGNhbGwgUXJDb2RlLmVuY29kZVNlZ21lbnRzKCkuXG4gICAqIC0gTG93IGxldmVsOiBDdXN0b20tbWFrZSB0aGUgYXJyYXkgb2YgZGF0YSBjb2Rld29yZCBieXRlcyAoaW5jbHVkaW5nXG4gICAqICAgc2VnbWVudCBoZWFkZXJzIGFuZCBmaW5hbCBwYWRkaW5nLCBleGNsdWRpbmcgZXJyb3IgY29ycmVjdGlvbiBjb2Rld29yZHMpLFxuICAgKiAgIHN1cHBseSB0aGUgYXBwcm9wcmlhdGUgdmVyc2lvbiBudW1iZXIsIGFuZCBjYWxsIHRoZSBRckNvZGUoKSBjb25zdHJ1Y3Rvci5cbiAgICogKE5vdGUgdGhhdCBhbGwgd2F5cyByZXF1aXJlIHN1cHBseWluZyB0aGUgZGVzaXJlZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsLilcbiAgICovXG4gIGV4cG9ydCBjbGFzcyBRckNvZGUge1xuICAgIC8qLS0gU3RhdGljIGZhY3RvcnkgZnVuY3Rpb25zIChoaWdoIGxldmVsKSAtLSovXG5cbiAgICAvLyBSZXR1cm5zIGEgUVIgQ29kZSByZXByZXNlbnRpbmcgdGhlIGdpdmVuIFVuaWNvZGUgdGV4dCBzdHJpbmcgYXQgdGhlIGdpdmVuIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwuXG4gICAgLy8gQXMgYSBjb25zZXJ2YXRpdmUgdXBwZXIgYm91bmQsIHRoaXMgZnVuY3Rpb24gaXMgZ3VhcmFudGVlZCB0byBzdWNjZWVkIGZvciBzdHJpbmdzIHRoYXQgaGF2ZSA3Mzggb3IgZmV3ZXJcbiAgICAvLyBVbmljb2RlIGNvZGUgcG9pbnRzIChub3QgVVRGLTE2IGNvZGUgdW5pdHMpIGlmIHRoZSBsb3cgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCBpcyB1c2VkLiBUaGUgc21hbGxlc3QgcG9zc2libGVcbiAgICAvLyBRUiBDb2RlIHZlcnNpb24gaXMgYXV0b21hdGljYWxseSBjaG9zZW4gZm9yIHRoZSBvdXRwdXQuIFRoZSBFQ0MgbGV2ZWwgb2YgdGhlIHJlc3VsdCBtYXkgYmUgaGlnaGVyIHRoYW4gdGhlXG4gICAgLy8gZWNsIGFyZ3VtZW50IGlmIGl0IGNhbiBiZSBkb25lIHdpdGhvdXQgaW5jcmVhc2luZyB0aGUgdmVyc2lvbi5cbiAgICBwdWJsaWMgc3RhdGljIGVuY29kZVRleHQodGV4dDogc3RyaW5nLCBlY2w6IFFyQ29kZS5FY2MpOiBRckNvZGUge1xuICAgICAgY29uc3Qgc2VnczogQXJyYXk8UXJTZWdtZW50PiA9IHFyY29kZWdlbi5RclNlZ21lbnQubWFrZVNlZ21lbnRzKHRleHQpO1xuICAgICAgcmV0dXJuIFFyQ29kZS5lbmNvZGVTZWdtZW50cyhzZWdzLCBlY2wpO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBRUiBDb2RlIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gYmluYXJ5IGRhdGEgYXQgdGhlIGdpdmVuIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbHdheXMgZW5jb2RlcyB1c2luZyB0aGUgYmluYXJ5IHNlZ21lbnQgbW9kZSwgbm90IGFueSB0ZXh0IG1vZGUuIFRoZSBtYXhpbXVtIG51bWJlciBvZlxuICAgIC8vIGJ5dGVzIGFsbG93ZWQgaXMgMjk1My4gVGhlIHNtYWxsZXN0IHBvc3NpYmxlIFFSIENvZGUgdmVyc2lvbiBpcyBhdXRvbWF0aWNhbGx5IGNob3NlbiBmb3IgdGhlIG91dHB1dC5cbiAgICAvLyBUaGUgRUNDIGxldmVsIG9mIHRoZSByZXN1bHQgbWF5IGJlIGhpZ2hlciB0aGFuIHRoZSBlY2wgYXJndW1lbnQgaWYgaXQgY2FuIGJlIGRvbmUgd2l0aG91dCBpbmNyZWFzaW5nIHRoZSB2ZXJzaW9uLlxuICAgIHB1YmxpYyBzdGF0aWMgZW5jb2RlQmluYXJ5KGRhdGE6IFJlYWRvbmx5PEFycmF5PGJ5dGU+PiwgZWNsOiBRckNvZGUuRWNjKTogUXJDb2RlIHtcbiAgICAgIGNvbnN0IHNlZzogUXJTZWdtZW50ID0gcXJjb2RlZ2VuLlFyU2VnbWVudC5tYWtlQnl0ZXMoZGF0YSk7XG4gICAgICByZXR1cm4gUXJDb2RlLmVuY29kZVNlZ21lbnRzKFtzZWddLCBlY2wpO1xuICAgIH1cblxuICAgIC8qLS0gU3RhdGljIGZhY3RvcnkgZnVuY3Rpb25zIChtaWQgbGV2ZWwpIC0tKi9cblxuICAgIC8vIFJldHVybnMgYSBRUiBDb2RlIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gc2VnbWVudHMgd2l0aCB0aGUgZ2l2ZW4gZW5jb2RpbmcgcGFyYW1ldGVycy5cbiAgICAvLyBUaGUgc21hbGxlc3QgcG9zc2libGUgUVIgQ29kZSB2ZXJzaW9uIHdpdGhpbiB0aGUgZ2l2ZW4gcmFuZ2UgaXMgYXV0b21hdGljYWxseVxuICAgIC8vIGNob3NlbiBmb3IgdGhlIG91dHB1dC4gSWZmIGJvb3N0RWNsIGlzIHRydWUsIHRoZW4gdGhlIEVDQyBsZXZlbCBvZiB0aGUgcmVzdWx0XG4gICAgLy8gbWF5IGJlIGhpZ2hlciB0aGFuIHRoZSBlY2wgYXJndW1lbnQgaWYgaXQgY2FuIGJlIGRvbmUgd2l0aG91dCBpbmNyZWFzaW5nIHRoZVxuICAgIC8vIHZlcnNpb24uIFRoZSBtYXNrIG51bWJlciBpcyBlaXRoZXIgYmV0d2VlbiAwIHRvIDcgKGluY2x1c2l2ZSkgdG8gZm9yY2UgdGhhdFxuICAgIC8vIG1hc2ssIG9yIC0xIHRvIGF1dG9tYXRpY2FsbHkgY2hvb3NlIGFuIGFwcHJvcHJpYXRlIG1hc2sgKHdoaWNoIG1heSBiZSBzbG93KS5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgdXNlciB0byBjcmVhdGUgYSBjdXN0b20gc2VxdWVuY2Ugb2Ygc2VnbWVudHMgdGhhdCBzd2l0Y2hlc1xuICAgIC8vIGJldHdlZW4gbW9kZXMgKHN1Y2ggYXMgYWxwaGFudW1lcmljIGFuZCBieXRlKSB0byBlbmNvZGUgdGV4dCBpbiBsZXNzIHNwYWNlLlxuICAgIC8vIFRoaXMgaXMgYSBtaWQtbGV2ZWwgQVBJOyB0aGUgaGlnaC1sZXZlbCBBUEkgaXMgZW5jb2RlVGV4dCgpIGFuZCBlbmNvZGVCaW5hcnkoKS5cbiAgICBwdWJsaWMgc3RhdGljIGVuY29kZVNlZ21lbnRzKFxuICAgICAgc2VnczogUmVhZG9ubHk8QXJyYXk8UXJTZWdtZW50Pj4sXG4gICAgICBlY2w6IFFyQ29kZS5FY2MsXG4gICAgICBtaW5WZXJzaW9uOiBpbnQgPSAxLFxuICAgICAgbWF4VmVyc2lvbjogaW50ID0gNDAsXG4gICAgICBtYXNrOiBpbnQgPSAtMSxcbiAgICAgIGJvb3N0RWNsOiBib29sZWFuID0gdHJ1ZVxuICAgICk6IFFyQ29kZSB7XG4gICAgICBpZiAoXG4gICAgICAgICEoUXJDb2RlLk1JTl9WRVJTSU9OIDw9IG1pblZlcnNpb24gJiYgbWluVmVyc2lvbiA8PSBtYXhWZXJzaW9uICYmIG1heFZlcnNpb24gPD0gUXJDb2RlLk1BWF9WRVJTSU9OKSB8fFxuICAgICAgICBtYXNrIDwgLTEgfHxcbiAgICAgICAgbWFzayA+IDdcbiAgICAgIClcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdmFsdWUnKTtcblxuICAgICAgLy8gRmluZCB0aGUgbWluaW1hbCB2ZXJzaW9uIG51bWJlciB0byB1c2VcbiAgICAgIGxldCB2ZXJzaW9uOiBpbnQ7XG4gICAgICBsZXQgZGF0YVVzZWRCaXRzOiBpbnQ7XG4gICAgICBmb3IgKHZlcnNpb24gPSBtaW5WZXJzaW9uOyA7IHZlcnNpb24rKykge1xuICAgICAgICBjb25zdCBkYXRhQ2FwYWNpdHlCaXRzOiBpbnQgPSBRckNvZGUuZ2V0TnVtRGF0YUNvZGV3b3Jkcyh2ZXJzaW9uLCBlY2wpICogODsgLy8gTnVtYmVyIG9mIGRhdGEgYml0cyBhdmFpbGFibGVcbiAgICAgICAgY29uc3QgdXNlZEJpdHM6IG51bWJlciA9IFFyU2VnbWVudC5nZXRUb3RhbEJpdHMoc2VncywgdmVyc2lvbik7XG4gICAgICAgIGlmICh1c2VkQml0cyA8PSBkYXRhQ2FwYWNpdHlCaXRzKSB7XG4gICAgICAgICAgZGF0YVVzZWRCaXRzID0gdXNlZEJpdHM7XG4gICAgICAgICAgYnJlYWs7IC8vIFRoaXMgdmVyc2lvbiBudW1iZXIgaXMgZm91bmQgdG8gYmUgc3VpdGFibGVcbiAgICAgICAgfVxuICAgICAgICBpZiAodmVyc2lvbiA+PSBtYXhWZXJzaW9uKVxuICAgICAgICAgIC8vIEFsbCB2ZXJzaW9ucyBpbiB0aGUgcmFuZ2UgY291bGQgbm90IGZpdCB0aGUgZ2l2ZW4gZGF0YVxuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEYXRhIHRvbyBsb25nJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEluY3JlYXNlIHRoZSBlcnJvciBjb3JyZWN0aW9uIGxldmVsIHdoaWxlIHRoZSBkYXRhIHN0aWxsIGZpdHMgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBudW1iZXJcbiAgICAgIGZvciAoY29uc3QgbmV3RWNsIG9mIFtRckNvZGUuRWNjLk1FRElVTSwgUXJDb2RlLkVjYy5RVUFSVElMRSwgUXJDb2RlLkVjYy5ISUdIXSkge1xuICAgICAgICAvLyBGcm9tIGxvdyB0byBoaWdoXG4gICAgICAgIGlmIChib29zdEVjbCAmJiBkYXRhVXNlZEJpdHMgPD0gUXJDb2RlLmdldE51bURhdGFDb2Rld29yZHModmVyc2lvbiwgbmV3RWNsKSAqIDgpIGVjbCA9IG5ld0VjbDtcbiAgICAgIH1cblxuICAgICAgLy8gQ29uY2F0ZW5hdGUgYWxsIHNlZ21lbnRzIHRvIGNyZWF0ZSB0aGUgZGF0YSBiaXQgc3RyaW5nXG4gICAgICBsZXQgYmI6IEFycmF5PGJpdD4gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgc2VnIG9mIHNlZ3MpIHtcbiAgICAgICAgYXBwZW5kQml0cyhzZWcubW9kZS5tb2RlQml0cywgNCwgYmIpO1xuICAgICAgICBhcHBlbmRCaXRzKHNlZy5udW1DaGFycywgc2VnLm1vZGUubnVtQ2hhckNvdW50Qml0cyh2ZXJzaW9uKSwgYmIpO1xuICAgICAgICBmb3IgKGNvbnN0IGIgb2Ygc2VnLmdldERhdGEoKSkgYmIucHVzaChiKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChiYi5sZW5ndGggPT0gZGF0YVVzZWRCaXRzKTtcblxuICAgICAgLy8gQWRkIHRlcm1pbmF0b3IgYW5kIHBhZCB1cCB0byBhIGJ5dGUgaWYgYXBwbGljYWJsZVxuICAgICAgY29uc3QgZGF0YUNhcGFjaXR5Qml0czogaW50ID0gUXJDb2RlLmdldE51bURhdGFDb2Rld29yZHModmVyc2lvbiwgZWNsKSAqIDg7XG4gICAgICBhc3NlcnQoYmIubGVuZ3RoIDw9IGRhdGFDYXBhY2l0eUJpdHMpO1xuICAgICAgYXBwZW5kQml0cygwLCBNYXRoLm1pbig0LCBkYXRhQ2FwYWNpdHlCaXRzIC0gYmIubGVuZ3RoKSwgYmIpO1xuICAgICAgYXBwZW5kQml0cygwLCAoOCAtIChiYi5sZW5ndGggJSA4KSkgJSA4LCBiYik7XG4gICAgICBhc3NlcnQoYmIubGVuZ3RoICUgOCA9PSAwKTtcblxuICAgICAgLy8gUGFkIHdpdGggYWx0ZXJuYXRpbmcgYnl0ZXMgdW50aWwgZGF0YSBjYXBhY2l0eSBpcyByZWFjaGVkXG4gICAgICBmb3IgKGxldCBwYWRCeXRlID0gMHhlYzsgYmIubGVuZ3RoIDwgZGF0YUNhcGFjaXR5Qml0czsgcGFkQnl0ZSBePSAweGVjIF4gMHgxMSkgYXBwZW5kQml0cyhwYWRCeXRlLCA4LCBiYik7XG5cbiAgICAgIC8vIFBhY2sgYml0cyBpbnRvIGJ5dGVzIGluIGJpZyBlbmRpYW5cbiAgICAgIGxldCBkYXRhQ29kZXdvcmRzOiBBcnJheTxieXRlPiA9IFtdO1xuICAgICAgd2hpbGUgKGRhdGFDb2Rld29yZHMubGVuZ3RoICogOCA8IGJiLmxlbmd0aCkgZGF0YUNvZGV3b3Jkcy5wdXNoKDApO1xuICAgICAgYmIuZm9yRWFjaCgoYjogYml0LCBpOiBpbnQpID0+IChkYXRhQ29kZXdvcmRzW2kgPj4+IDNdIHw9IGIgPDwgKDcgLSAoaSAmIDcpKSkpO1xuXG4gICAgICAvLyBDcmVhdGUgdGhlIFFSIENvZGUgb2JqZWN0XG4gICAgICByZXR1cm4gbmV3IFFyQ29kZSh2ZXJzaW9uLCBlY2wsIGRhdGFDb2Rld29yZHMsIG1hc2spO1xuICAgIH1cblxuICAgIC8qLS0gRmllbGRzIC0tKi9cblxuICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoaXMgUVIgQ29kZSwgbWVhc3VyZWQgaW4gbW9kdWxlcywgYmV0d2VlblxuICAgIC8vIDIxIGFuZCAxNzcgKGluY2x1c2l2ZSkuIFRoaXMgaXMgZXF1YWwgdG8gdmVyc2lvbiAqIDQgKyAxNy5cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2l6ZTogaW50O1xuXG4gICAgLy8gVGhlIGluZGV4IG9mIHRoZSBtYXNrIHBhdHRlcm4gdXNlZCBpbiB0aGlzIFFSIENvZGUsIHdoaWNoIGlzIGJldHdlZW4gMCBhbmQgNyAoaW5jbHVzaXZlKS5cbiAgICAvLyBFdmVuIGlmIGEgUVIgQ29kZSBpcyBjcmVhdGVkIHdpdGggYXV0b21hdGljIG1hc2tpbmcgcmVxdWVzdGVkIChtYXNrID0gLTEpLFxuICAgIC8vIHRoZSByZXN1bHRpbmcgb2JqZWN0IHN0aWxsIGhhcyBhIG1hc2sgdmFsdWUgYmV0d2VlbiAwIGFuZCA3LlxuICAgIHB1YmxpYyByZWFkb25seSBtYXNrOiBpbnQ7XG5cbiAgICAvLyBUaGUgbW9kdWxlcyBvZiB0aGlzIFFSIENvZGUgKGZhbHNlID0gbGlnaHQsIHRydWUgPSBkYXJrKS5cbiAgICAvLyBJbW11dGFibGUgYWZ0ZXIgY29uc3RydWN0b3IgZmluaXNoZXMuIEFjY2Vzc2VkIHRocm91Z2ggZ2V0TW9kdWxlKCkuXG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVzOiBBcnJheTxBcnJheTxib29sZWFuPj4gPSBbXTtcblxuICAgIC8vIEluZGljYXRlcyBmdW5jdGlvbiBtb2R1bGVzIHRoYXQgYXJlIG5vdCBzdWJqZWN0ZWQgdG8gbWFza2luZy4gRGlzY2FyZGVkIHdoZW4gY29uc3RydWN0b3IgZmluaXNoZXMuXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0Z1bmN0aW9uOiBBcnJheTxBcnJheTxib29sZWFuPj4gPSBbXTtcblxuICAgIC8qLS0gQ29uc3RydWN0b3IgKGxvdyBsZXZlbCkgYW5kIGZpZWxkcyAtLSovXG5cbiAgICAvLyBDcmVhdGVzIGEgbmV3IFFSIENvZGUgd2l0aCB0aGUgZ2l2ZW4gdmVyc2lvbiBudW1iZXIsXG4gICAgLy8gZXJyb3IgY29ycmVjdGlvbiBsZXZlbCwgZGF0YSBjb2Rld29yZCBieXRlcywgYW5kIG1hc2sgbnVtYmVyLlxuICAgIC8vIFRoaXMgaXMgYSBsb3ctbGV2ZWwgQVBJIHRoYXQgbW9zdCB1c2VycyBzaG91bGQgbm90IHVzZSBkaXJlY3RseS5cbiAgICAvLyBBIG1pZC1sZXZlbCBBUEkgaXMgdGhlIGVuY29kZVNlZ21lbnRzKCkgZnVuY3Rpb24uXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgLy8gVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgUVIgQ29kZSwgd2hpY2ggaXMgYmV0d2VlbiAxIGFuZCA0MCAoaW5jbHVzaXZlKS5cbiAgICAgIC8vIFRoaXMgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGlzIGJhcmNvZGUuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbjogaW50LFxuXG4gICAgICAvLyBUaGUgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCB1c2VkIGluIHRoaXMgUVIgQ29kZS5cbiAgICAgIHB1YmxpYyByZWFkb25seSBlcnJvckNvcnJlY3Rpb25MZXZlbDogUXJDb2RlLkVjYyxcblxuICAgICAgZGF0YUNvZGV3b3JkczogUmVhZG9ubHk8QXJyYXk8Ynl0ZT4+LFxuXG4gICAgICBtc2s6IGludFxuICAgICkge1xuICAgICAgLy8gQ2hlY2sgc2NhbGFyIGFyZ3VtZW50c1xuICAgICAgaWYgKHZlcnNpb24gPCBRckNvZGUuTUlOX1ZFUlNJT04gfHwgdmVyc2lvbiA+IFFyQ29kZS5NQVhfVkVSU0lPTilcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlcnNpb24gdmFsdWUgb3V0IG9mIHJhbmdlJyk7XG4gICAgICBpZiAobXNrIDwgLTEgfHwgbXNrID4gNykgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hc2sgdmFsdWUgb3V0IG9mIHJhbmdlJyk7XG4gICAgICB0aGlzLnNpemUgPSB2ZXJzaW9uICogNCArIDE3O1xuXG4gICAgICAvLyBJbml0aWFsaXplIGJvdGggZ3JpZHMgdG8gYmUgc2l6ZSpzaXplIGFycmF5cyBvZiBCb29sZWFuIGZhbHNlXG4gICAgICBsZXQgcm93OiBBcnJheTxib29sZWFuPiA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykgcm93LnB1c2goZmFsc2UpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykge1xuICAgICAgICB0aGlzLm1vZHVsZXMucHVzaChyb3cuc2xpY2UoKSk7IC8vIEluaXRpYWxseSBhbGwgbGlnaHRcbiAgICAgICAgdGhpcy5pc0Z1bmN0aW9uLnB1c2gocm93LnNsaWNlKCkpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb21wdXRlIEVDQywgZHJhdyBtb2R1bGVzXG4gICAgICB0aGlzLmRyYXdGdW5jdGlvblBhdHRlcm5zKCk7XG4gICAgICBjb25zdCBhbGxDb2Rld29yZHM6IEFycmF5PGJ5dGU+ID0gdGhpcy5hZGRFY2NBbmRJbnRlcmxlYXZlKGRhdGFDb2Rld29yZHMpO1xuICAgICAgdGhpcy5kcmF3Q29kZXdvcmRzKGFsbENvZGV3b3Jkcyk7XG5cbiAgICAgIC8vIERvIG1hc2tpbmdcbiAgICAgIGlmIChtc2sgPT0gLTEpIHtcbiAgICAgICAgLy8gQXV0b21hdGljYWxseSBjaG9vc2UgYmVzdCBtYXNrXG4gICAgICAgIGxldCBtaW5QZW5hbHR5OiBpbnQgPSAxMDAwMDAwMDAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgICAgICAgIHRoaXMuYXBwbHlNYXNrKGkpO1xuICAgICAgICAgIHRoaXMuZHJhd0Zvcm1hdEJpdHMoaSk7XG4gICAgICAgICAgY29uc3QgcGVuYWx0eTogaW50ID0gdGhpcy5nZXRQZW5hbHR5U2NvcmUoKTtcbiAgICAgICAgICBpZiAocGVuYWx0eSA8IG1pblBlbmFsdHkpIHtcbiAgICAgICAgICAgIG1zayA9IGk7XG4gICAgICAgICAgICBtaW5QZW5hbHR5ID0gcGVuYWx0eTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hcHBseU1hc2soaSk7IC8vIFVuZG9lcyB0aGUgbWFzayBkdWUgdG8gWE9SXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFzc2VydChtc2sgPj0gMCAmJiBtc2sgPD0gNyk7XG4gICAgICB0aGlzLm1hc2sgPSBtc2s7XG4gICAgICB0aGlzLmFwcGx5TWFzayhtc2spOyAvLyBBcHBseSB0aGUgZmluYWwgY2hvaWNlIG9mIG1hc2tcbiAgICAgIHRoaXMuZHJhd0Zvcm1hdEJpdHMobXNrKTsgLy8gT3ZlcndyaXRlIG9sZCBmb3JtYXQgYml0c1xuXG4gICAgICB0aGlzLmlzRnVuY3Rpb24gPSBbXTtcbiAgICB9XG5cbiAgICAvKi0tIEFjY2Vzc29yIG1ldGhvZHMgLS0qL1xuXG4gICAgLy8gUmV0dXJucyB0aGUgY29sb3Igb2YgdGhlIG1vZHVsZSAocGl4ZWwpIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcywgd2hpY2ggaXMgZmFsc2VcbiAgICAvLyBmb3IgbGlnaHQgb3IgdHJ1ZSBmb3IgZGFyay4gVGhlIHRvcCBsZWZ0IGNvcm5lciBoYXMgdGhlIGNvb3JkaW5hdGVzICh4PTAsIHk9MCkuXG4gICAgLy8gSWYgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFyZSBvdXQgb2YgYm91bmRzLCB0aGVuIGZhbHNlIChsaWdodCkgaXMgcmV0dXJuZWQuXG4gICAgcHVibGljIGdldE1vZHVsZSh4OiBpbnQsIHk6IGludCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHggPj0gMCAmJiB4IDwgdGhpcy5zaXplICYmIHkgPj0gMCAmJiB5IDwgdGhpcy5zaXplICYmIHRoaXMubW9kdWxlc1t5XVt4XTtcbiAgICB9XG5cbiAgICAvKi0tIFByaXZhdGUgaGVscGVyIG1ldGhvZHMgZm9yIGNvbnN0cnVjdG9yOiBEcmF3aW5nIGZ1bmN0aW9uIG1vZHVsZXMgLS0qL1xuXG4gICAgLy8gUmVhZHMgdGhpcyBvYmplY3QncyB2ZXJzaW9uIGZpZWxkLCBhbmQgZHJhd3MgYW5kIG1hcmtzIGFsbCBmdW5jdGlvbiBtb2R1bGVzLlxuICAgIHByaXZhdGUgZHJhd0Z1bmN0aW9uUGF0dGVybnMoKTogdm9pZCB7XG4gICAgICAvLyBEcmF3IGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHRpbWluZyBwYXR0ZXJuc1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNpemU7IGkrKykge1xuICAgICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDYsIGksIGkgJSAyID09IDApO1xuICAgICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKGksIDYsIGkgJSAyID09IDApO1xuICAgICAgfVxuXG4gICAgICAvLyBEcmF3IDMgZmluZGVyIHBhdHRlcm5zIChhbGwgY29ybmVycyBleGNlcHQgYm90dG9tIHJpZ2h0OyBvdmVyd3JpdGVzIHNvbWUgdGltaW5nIG1vZHVsZXMpXG4gICAgICB0aGlzLmRyYXdGaW5kZXJQYXR0ZXJuKDMsIDMpO1xuICAgICAgdGhpcy5kcmF3RmluZGVyUGF0dGVybih0aGlzLnNpemUgLSA0LCAzKTtcbiAgICAgIHRoaXMuZHJhd0ZpbmRlclBhdHRlcm4oMywgdGhpcy5zaXplIC0gNCk7XG5cbiAgICAgIC8vIERyYXcgbnVtZXJvdXMgYWxpZ25tZW50IHBhdHRlcm5zXG4gICAgICBjb25zdCBhbGlnblBhdFBvczogQXJyYXk8aW50PiA9IHRoaXMuZ2V0QWxpZ25tZW50UGF0dGVyblBvc2l0aW9ucygpO1xuICAgICAgY29uc3QgbnVtQWxpZ246IGludCA9IGFsaWduUGF0UG9zLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQWxpZ247IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUFsaWduOyBqKyspIHtcbiAgICAgICAgICAvLyBEb24ndCBkcmF3IG9uIHRoZSB0aHJlZSBmaW5kZXIgY29ybmVyc1xuICAgICAgICAgIGlmICghKChpID09IDAgJiYgaiA9PSAwKSB8fCAoaSA9PSAwICYmIGogPT0gbnVtQWxpZ24gLSAxKSB8fCAoaSA9PSBudW1BbGlnbiAtIDEgJiYgaiA9PSAwKSkpXG4gICAgICAgICAgICB0aGlzLmRyYXdBbGlnbm1lbnRQYXR0ZXJuKGFsaWduUGF0UG9zW2ldLCBhbGlnblBhdFBvc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRHJhdyBjb25maWd1cmF0aW9uIGRhdGFcbiAgICAgIHRoaXMuZHJhd0Zvcm1hdEJpdHMoMCk7IC8vIER1bW15IG1hc2sgdmFsdWU7IG92ZXJ3cml0dGVuIGxhdGVyIGluIHRoZSBjb25zdHJ1Y3RvclxuICAgICAgdGhpcy5kcmF3VmVyc2lvbigpO1xuICAgIH1cblxuICAgIC8vIERyYXdzIHR3byBjb3BpZXMgb2YgdGhlIGZvcm1hdCBiaXRzICh3aXRoIGl0cyBvd24gZXJyb3IgY29ycmVjdGlvbiBjb2RlKVxuICAgIC8vIGJhc2VkIG9uIHRoZSBnaXZlbiBtYXNrIGFuZCB0aGlzIG9iamVjdCdzIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgZmllbGQuXG4gICAgcHJpdmF0ZSBkcmF3Rm9ybWF0Qml0cyhtYXNrOiBpbnQpOiB2b2lkIHtcbiAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3JyZWN0aW9uIGNvZGUgYW5kIHBhY2sgYml0c1xuICAgICAgY29uc3QgZGF0YTogaW50ID0gKHRoaXMuZXJyb3JDb3JyZWN0aW9uTGV2ZWwuZm9ybWF0Qml0cyA8PCAzKSB8IG1hc2s7IC8vIGVyckNvcnJMdmwgaXMgdWludDIsIG1hc2sgaXMgdWludDNcbiAgICAgIGxldCByZW06IGludCA9IGRhdGE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHJlbSA9IChyZW0gPDwgMSkgXiAoKHJlbSA+Pj4gOSkgKiAweDUzNyk7XG4gICAgICBjb25zdCBiaXRzID0gKChkYXRhIDw8IDEwKSB8IHJlbSkgXiAweDU0MTI7IC8vIHVpbnQxNVxuICAgICAgYXNzZXJ0KGJpdHMgPj4+IDE1ID09IDApO1xuXG4gICAgICAvLyBEcmF3IGZpcnN0IGNvcHlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDU7IGkrKykgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg4LCBpLCBnZXRCaXQoYml0cywgaSkpO1xuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg4LCA3LCBnZXRCaXQoYml0cywgNikpO1xuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg4LCA4LCBnZXRCaXQoYml0cywgNykpO1xuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg3LCA4LCBnZXRCaXQoYml0cywgOCkpO1xuICAgICAgZm9yIChsZXQgaSA9IDk7IGkgPCAxNTsgaSsrKSB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDE0IC0gaSwgOCwgZ2V0Qml0KGJpdHMsIGkpKTtcblxuICAgICAgLy8gRHJhdyBzZWNvbmQgY29weVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUodGhpcy5zaXplIC0gMSAtIGksIDgsIGdldEJpdChiaXRzLCBpKSk7XG4gICAgICBmb3IgKGxldCBpID0gODsgaSA8IDE1OyBpKyspIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgdGhpcy5zaXplIC0gMTUgKyBpLCBnZXRCaXQoYml0cywgaSkpO1xuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg4LCB0aGlzLnNpemUgLSA4LCB0cnVlKTsgLy8gQWx3YXlzIGRhcmtcbiAgICB9XG5cbiAgICAvLyBEcmF3cyB0d28gY29waWVzIG9mIHRoZSB2ZXJzaW9uIGJpdHMgKHdpdGggaXRzIG93biBlcnJvciBjb3JyZWN0aW9uIGNvZGUpLFxuICAgIC8vIGJhc2VkIG9uIHRoaXMgb2JqZWN0J3MgdmVyc2lvbiBmaWVsZCwgaWZmIDcgPD0gdmVyc2lvbiA8PSA0MC5cbiAgICBwcml2YXRlIGRyYXdWZXJzaW9uKCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMudmVyc2lvbiA8IDcpIHJldHVybjtcblxuICAgICAgLy8gQ2FsY3VsYXRlIGVycm9yIGNvcnJlY3Rpb24gY29kZSBhbmQgcGFjayBiaXRzXG4gICAgICBsZXQgcmVtOiBpbnQgPSB0aGlzLnZlcnNpb247IC8vIHZlcnNpb24gaXMgdWludDYsIGluIHRoZSByYW5nZSBbNywgNDBdXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBpKyspIHJlbSA9IChyZW0gPDwgMSkgXiAoKHJlbSA+Pj4gMTEpICogMHgxZjI1KTtcbiAgICAgIGNvbnN0IGJpdHM6IGludCA9ICh0aGlzLnZlcnNpb24gPDwgMTIpIHwgcmVtOyAvLyB1aW50MThcbiAgICAgIGFzc2VydChiaXRzID4+PiAxOCA9PSAwKTtcblxuICAgICAgLy8gRHJhdyB0d28gY29waWVzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE4OyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sb3I6IGJvb2xlYW4gPSBnZXRCaXQoYml0cywgaSk7XG4gICAgICAgIGNvbnN0IGE6IGludCA9IHRoaXMuc2l6ZSAtIDExICsgKGkgJSAzKTtcbiAgICAgICAgY29uc3QgYjogaW50ID0gTWF0aC5mbG9vcihpIC8gMyk7XG4gICAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoYSwgYiwgY29sb3IpO1xuICAgICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKGIsIGEsIGNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEcmF3cyBhIDkqOSBmaW5kZXIgcGF0dGVybiBpbmNsdWRpbmcgdGhlIGJvcmRlciBzZXBhcmF0b3IsXG4gICAgLy8gd2l0aCB0aGUgY2VudGVyIG1vZHVsZSBhdCAoeCwgeSkuIE1vZHVsZXMgY2FuIGJlIG91dCBvZiBib3VuZHMuXG4gICAgcHJpdmF0ZSBkcmF3RmluZGVyUGF0dGVybih4OiBpbnQsIHk6IGludCk6IHZvaWQge1xuICAgICAgZm9yIChsZXQgZHkgPSAtNDsgZHkgPD0gNDsgZHkrKykge1xuICAgICAgICBmb3IgKGxldCBkeCA9IC00OyBkeCA8PSA0OyBkeCsrKSB7XG4gICAgICAgICAgY29uc3QgZGlzdDogaW50ID0gTWF0aC5tYXgoTWF0aC5hYnMoZHgpLCBNYXRoLmFicyhkeSkpOyAvLyBDaGVieXNoZXYvaW5maW5pdHkgbm9ybVxuICAgICAgICAgIGNvbnN0IHh4OiBpbnQgPSB4ICsgZHg7XG4gICAgICAgICAgY29uc3QgeXk6IGludCA9IHkgKyBkeTtcbiAgICAgICAgICBpZiAoeHggPj0gMCAmJiB4eCA8IHRoaXMuc2l6ZSAmJiB5eSA+PSAwICYmIHl5IDwgdGhpcy5zaXplKVxuICAgICAgICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSh4eCwgeXksIGRpc3QgIT0gMiAmJiBkaXN0ICE9IDQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRHJhd3MgYSA1KjUgYWxpZ25tZW50IHBhdHRlcm4sIHdpdGggdGhlIGNlbnRlciBtb2R1bGVcbiAgICAvLyBhdCAoeCwgeSkuIEFsbCBtb2R1bGVzIG11c3QgYmUgaW4gYm91bmRzLlxuICAgIHByaXZhdGUgZHJhd0FsaWdubWVudFBhdHRlcm4oeDogaW50LCB5OiBpbnQpOiB2b2lkIHtcbiAgICAgIGZvciAobGV0IGR5ID0gLTI7IGR5IDw9IDI7IGR5KyspIHtcbiAgICAgICAgZm9yIChsZXQgZHggPSAtMjsgZHggPD0gMjsgZHgrKylcbiAgICAgICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKHggKyBkeCwgeSArIGR5LCBNYXRoLm1heChNYXRoLmFicyhkeCksIE1hdGguYWJzKGR5KSkgIT0gMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgY29sb3Igb2YgYSBtb2R1bGUgYW5kIG1hcmtzIGl0IGFzIGEgZnVuY3Rpb24gbW9kdWxlLlxuICAgIC8vIE9ubHkgdXNlZCBieSB0aGUgY29uc3RydWN0b3IuIENvb3JkaW5hdGVzIG11c3QgYmUgaW4gYm91bmRzLlxuICAgIHByaXZhdGUgc2V0RnVuY3Rpb25Nb2R1bGUoeDogaW50LCB5OiBpbnQsIGlzRGFyazogYm9vbGVhbik6IHZvaWQge1xuICAgICAgdGhpcy5tb2R1bGVzW3ldW3hdID0gaXNEYXJrO1xuICAgICAgdGhpcy5pc0Z1bmN0aW9uW3ldW3hdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKi0tIFByaXZhdGUgaGVscGVyIG1ldGhvZHMgZm9yIGNvbnN0cnVjdG9yOiBDb2Rld29yZHMgYW5kIG1hc2tpbmcgLS0qL1xuXG4gICAgLy8gUmV0dXJucyBhIG5ldyBieXRlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGRhdGEgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29ycmVjdGlvblxuICAgIC8vIGNvZGV3b3JkcyBhcHBlbmRlZCB0byBpdCwgYmFzZWQgb24gdGhpcyBvYmplY3QncyB2ZXJzaW9uIGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsLlxuICAgIHByaXZhdGUgYWRkRWNjQW5kSW50ZXJsZWF2ZShkYXRhOiBSZWFkb25seTxBcnJheTxieXRlPj4pOiBBcnJheTxieXRlPiB7XG4gICAgICBjb25zdCB2ZXI6IGludCA9IHRoaXMudmVyc2lvbjtcbiAgICAgIGNvbnN0IGVjbDogUXJDb2RlLkVjYyA9IHRoaXMuZXJyb3JDb3JyZWN0aW9uTGV2ZWw7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggIT0gUXJDb2RlLmdldE51bURhdGFDb2Rld29yZHModmVyLCBlY2wpKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBhcmd1bWVudCcpO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgcGFyYW1ldGVyIG51bWJlcnNcbiAgICAgIGNvbnN0IG51bUJsb2NrczogaW50ID0gUXJDb2RlLk5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLU1tlY2wub3JkaW5hbF1bdmVyXTtcbiAgICAgIGNvbnN0IGJsb2NrRWNjTGVuOiBpbnQgPSBRckNvZGUuRUNDX0NPREVXT1JEU19QRVJfQkxPQ0tbZWNsLm9yZGluYWxdW3Zlcl07XG4gICAgICBjb25zdCByYXdDb2Rld29yZHM6IGludCA9IE1hdGguZmxvb3IoUXJDb2RlLmdldE51bVJhd0RhdGFNb2R1bGVzKHZlcikgLyA4KTtcbiAgICAgIGNvbnN0IG51bVNob3J0QmxvY2tzOiBpbnQgPSBudW1CbG9ja3MgLSAocmF3Q29kZXdvcmRzICUgbnVtQmxvY2tzKTtcbiAgICAgIGNvbnN0IHNob3J0QmxvY2tMZW46IGludCA9IE1hdGguZmxvb3IocmF3Q29kZXdvcmRzIC8gbnVtQmxvY2tzKTtcblxuICAgICAgLy8gU3BsaXQgZGF0YSBpbnRvIGJsb2NrcyBhbmQgYXBwZW5kIEVDQyB0byBlYWNoIGJsb2NrXG4gICAgICBsZXQgYmxvY2tzOiBBcnJheTxBcnJheTxieXRlPj4gPSBbXTtcbiAgICAgIGNvbnN0IHJzRGl2OiBBcnJheTxieXRlPiA9IFFyQ29kZS5yZWVkU29sb21vbkNvbXB1dGVEaXZpc29yKGJsb2NrRWNjTGVuKTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBrID0gMDsgaSA8IG51bUJsb2NrczsgaSsrKSB7XG4gICAgICAgIGxldCBkYXQ6IEFycmF5PGJ5dGU+ID0gZGF0YS5zbGljZShrLCBrICsgc2hvcnRCbG9ja0xlbiAtIGJsb2NrRWNjTGVuICsgKGkgPCBudW1TaG9ydEJsb2NrcyA/IDAgOiAxKSk7XG4gICAgICAgIGsgKz0gZGF0Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgZWNjOiBBcnJheTxieXRlPiA9IFFyQ29kZS5yZWVkU29sb21vbkNvbXB1dGVSZW1haW5kZXIoZGF0LCByc0Rpdik7XG4gICAgICAgIGlmIChpIDwgbnVtU2hvcnRCbG9ja3MpIGRhdC5wdXNoKDApO1xuICAgICAgICBibG9ja3MucHVzaChkYXQuY29uY2F0KGVjYykpO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcmxlYXZlIChub3QgY29uY2F0ZW5hdGUpIHRoZSBieXRlcyBmcm9tIGV2ZXJ5IGJsb2NrIGludG8gYSBzaW5nbGUgc2VxdWVuY2VcbiAgICAgIGxldCByZXN1bHQ6IEFycmF5PGJ5dGU+ID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2Nrc1swXS5sZW5ndGg7IGkrKykge1xuICAgICAgICBibG9ja3MuZm9yRWFjaCgoYmxvY2ssIGopID0+IHtcbiAgICAgICAgICAvLyBTa2lwIHRoZSBwYWRkaW5nIGJ5dGUgaW4gc2hvcnQgYmxvY2tzXG4gICAgICAgICAgaWYgKGkgIT0gc2hvcnRCbG9ja0xlbiAtIGJsb2NrRWNjTGVuIHx8IGogPj0gbnVtU2hvcnRCbG9ja3MpIHJlc3VsdC5wdXNoKGJsb2NrW2ldKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PSByYXdDb2Rld29yZHMpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBEcmF3cyB0aGUgZ2l2ZW4gc2VxdWVuY2Ugb2YgOC1iaXQgY29kZXdvcmRzIChkYXRhIGFuZCBlcnJvciBjb3JyZWN0aW9uKSBvbnRvIHRoZSBlbnRpcmVcbiAgICAvLyBkYXRhIGFyZWEgb2YgdGhpcyBRUiBDb2RlLiBGdW5jdGlvbiBtb2R1bGVzIG5lZWQgdG8gYmUgbWFya2VkIG9mZiBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuXG4gICAgcHJpdmF0ZSBkcmF3Q29kZXdvcmRzKGRhdGE6IFJlYWRvbmx5PEFycmF5PGJ5dGU+Pik6IHZvaWQge1xuICAgICAgaWYgKGRhdGEubGVuZ3RoICE9IE1hdGguZmxvb3IoUXJDb2RlLmdldE51bVJhd0RhdGFNb2R1bGVzKHRoaXMudmVyc2lvbikgLyA4KSlcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQnKTtcbiAgICAgIGxldCBpOiBpbnQgPSAwOyAvLyBCaXQgaW5kZXggaW50byB0aGUgZGF0YVxuICAgICAgLy8gRG8gdGhlIGZ1bm55IHppZ3phZyBzY2FuXG4gICAgICBmb3IgKGxldCByaWdodCA9IHRoaXMuc2l6ZSAtIDE7IHJpZ2h0ID49IDE7IHJpZ2h0IC09IDIpIHtcbiAgICAgICAgLy8gSW5kZXggb2YgcmlnaHQgY29sdW1uIGluIGVhY2ggY29sdW1uIHBhaXJcbiAgICAgICAgaWYgKHJpZ2h0ID09IDYpIHJpZ2h0ID0gNTtcbiAgICAgICAgZm9yIChsZXQgdmVydCA9IDA7IHZlcnQgPCB0aGlzLnNpemU7IHZlcnQrKykge1xuICAgICAgICAgIC8vIFZlcnRpY2FsIGNvdW50ZXJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDI7IGorKykge1xuICAgICAgICAgICAgY29uc3QgeDogaW50ID0gcmlnaHQgLSBqOyAvLyBBY3R1YWwgeCBjb29yZGluYXRlXG4gICAgICAgICAgICBjb25zdCB1cHdhcmQ6IGJvb2xlYW4gPSAoKHJpZ2h0ICsgMSkgJiAyKSA9PSAwO1xuICAgICAgICAgICAgY29uc3QgeTogaW50ID0gdXB3YXJkID8gdGhpcy5zaXplIC0gMSAtIHZlcnQgOiB2ZXJ0OyAvLyBBY3R1YWwgeSBjb29yZGluYXRlXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNGdW5jdGlvblt5XVt4XSAmJiBpIDwgZGF0YS5sZW5ndGggKiA4KSB7XG4gICAgICAgICAgICAgIHRoaXMubW9kdWxlc1t5XVt4XSA9IGdldEJpdChkYXRhW2kgPj4+IDNdLCA3IC0gKGkgJiA3KSk7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoaXMgUVIgQ29kZSBoYXMgYW55IHJlbWFpbmRlciBiaXRzICgwIHRvIDcpLCB0aGV5IHdlcmUgYXNzaWduZWQgYXNcbiAgICAgICAgICAgIC8vIDAvZmFsc2UvbGlnaHQgYnkgdGhlIGNvbnN0cnVjdG9yIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQgYnkgdGhpcyBtZXRob2RcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFzc2VydChpID09IGRhdGEubGVuZ3RoICogOCk7XG4gICAgfVxuXG4gICAgLy8gWE9ScyB0aGUgY29kZXdvcmQgbW9kdWxlcyBpbiB0aGlzIFFSIENvZGUgd2l0aCB0aGUgZ2l2ZW4gbWFzayBwYXR0ZXJuLlxuICAgIC8vIFRoZSBmdW5jdGlvbiBtb2R1bGVzIG11c3QgYmUgbWFya2VkIGFuZCB0aGUgY29kZXdvcmQgYml0cyBtdXN0IGJlIGRyYXduXG4gICAgLy8gYmVmb3JlIG1hc2tpbmcuIER1ZSB0byB0aGUgYXJpdGhtZXRpYyBvZiBYT1IsIGNhbGxpbmcgYXBwbHlNYXNrKCkgd2l0aFxuICAgIC8vIHRoZSBzYW1lIG1hc2sgdmFsdWUgYSBzZWNvbmQgdGltZSB3aWxsIHVuZG8gdGhlIG1hc2suIEEgZmluYWwgd2VsbC1mb3JtZWRcbiAgICAvLyBRUiBDb2RlIG5lZWRzIGV4YWN0bHkgb25lIChub3QgemVybywgdHdvLCBldGMuKSBtYXNrIGFwcGxpZWQuXG4gICAgcHJpdmF0ZSBhcHBseU1hc2sobWFzazogaW50KTogdm9pZCB7XG4gICAgICBpZiAobWFzayA8IDAgfHwgbWFzayA+IDcpIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXNrIHZhbHVlIG91dCBvZiByYW5nZScpO1xuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykge1xuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuc2l6ZTsgeCsrKSB7XG4gICAgICAgICAgbGV0IGludmVydDogYm9vbGVhbjtcbiAgICAgICAgICBzd2l0Y2ggKG1hc2spIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgaW52ZXJ0ID0gKHggKyB5KSAlIDIgPT0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGludmVydCA9IHkgJSAyID09IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBpbnZlcnQgPSB4ICUgMyA9PSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgaW52ZXJ0ID0gKHggKyB5KSAlIDMgPT0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGludmVydCA9IChNYXRoLmZsb29yKHggLyAzKSArIE1hdGguZmxvb3IoeSAvIDIpKSAlIDIgPT0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGludmVydCA9ICgoeCAqIHkpICUgMikgKyAoKHggKiB5KSAlIDMpID09IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBpbnZlcnQgPSAoKCh4ICogeSkgJSAyKSArICgoeCAqIHkpICUgMykpICUgMiA9PSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgaW52ZXJ0ID0gKCgoeCArIHkpICUgMikgKyAoKHggKiB5KSAlIDMpKSAlIDIgPT0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVhY2hhYmxlJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5pc0Z1bmN0aW9uW3ldW3hdICYmIGludmVydCkgdGhpcy5tb2R1bGVzW3ldW3hdID0gIXRoaXMubW9kdWxlc1t5XVt4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIHBlbmFsdHkgc2NvcmUgYmFzZWQgb24gc3RhdGUgb2YgdGhpcyBRUiBDb2RlJ3MgY3VycmVudCBtb2R1bGVzLlxuICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUgYXV0b21hdGljIG1hc2sgY2hvaWNlIGFsZ29yaXRobSB0byBmaW5kIHRoZSBtYXNrIHBhdHRlcm4gdGhhdCB5aWVsZHMgdGhlIGxvd2VzdCBzY29yZS5cbiAgICBwcml2YXRlIGdldFBlbmFsdHlTY29yZSgpOiBpbnQge1xuICAgICAgbGV0IHJlc3VsdDogaW50ID0gMDtcblxuICAgICAgLy8gQWRqYWNlbnQgbW9kdWxlcyBpbiByb3cgaGF2aW5nIHNhbWUgY29sb3IsIGFuZCBmaW5kZXItbGlrZSBwYXR0ZXJuc1xuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykge1xuICAgICAgICBsZXQgcnVuQ29sb3IgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJ1blggPSAwO1xuICAgICAgICBsZXQgcnVuSGlzdG9yeSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykge1xuICAgICAgICAgIGlmICh0aGlzLm1vZHVsZXNbeV1beF0gPT0gcnVuQ29sb3IpIHtcbiAgICAgICAgICAgIHJ1blgrKztcbiAgICAgICAgICAgIGlmIChydW5YID09IDUpIHJlc3VsdCArPSBRckNvZGUuUEVOQUxUWV9OMTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHJ1blggPiA1KSByZXN1bHQrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maW5kZXJQZW5hbHR5QWRkSGlzdG9yeShydW5YLCBydW5IaXN0b3J5KTtcbiAgICAgICAgICAgIGlmICghcnVuQ29sb3IpIHJlc3VsdCArPSB0aGlzLmZpbmRlclBlbmFsdHlDb3VudFBhdHRlcm5zKHJ1bkhpc3RvcnkpICogUXJDb2RlLlBFTkFMVFlfTjM7XG4gICAgICAgICAgICBydW5Db2xvciA9IHRoaXMubW9kdWxlc1t5XVt4XTtcbiAgICAgICAgICAgIHJ1blggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gdGhpcy5maW5kZXJQZW5hbHR5VGVybWluYXRlQW5kQ291bnQocnVuQ29sb3IsIHJ1blgsIHJ1bkhpc3RvcnkpICogUXJDb2RlLlBFTkFMVFlfTjM7XG4gICAgICB9XG4gICAgICAvLyBBZGphY2VudCBtb2R1bGVzIGluIGNvbHVtbiBoYXZpbmcgc2FtZSBjb2xvciwgYW5kIGZpbmRlci1saWtlIHBhdHRlcm5zXG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuc2l6ZTsgeCsrKSB7XG4gICAgICAgIGxldCBydW5Db2xvciA9IGZhbHNlO1xuICAgICAgICBsZXQgcnVuWSA9IDA7XG4gICAgICAgIGxldCBydW5IaXN0b3J5ID0gWzAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuc2l6ZTsgeSsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMubW9kdWxlc1t5XVt4XSA9PSBydW5Db2xvcikge1xuICAgICAgICAgICAgcnVuWSsrO1xuICAgICAgICAgICAgaWYgKHJ1blkgPT0gNSkgcmVzdWx0ICs9IFFyQ29kZS5QRU5BTFRZX04xO1xuICAgICAgICAgICAgZWxzZSBpZiAocnVuWSA+IDUpIHJlc3VsdCsrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbmRlclBlbmFsdHlBZGRIaXN0b3J5KHJ1blksIHJ1bkhpc3RvcnkpO1xuICAgICAgICAgICAgaWYgKCFydW5Db2xvcikgcmVzdWx0ICs9IHRoaXMuZmluZGVyUGVuYWx0eUNvdW50UGF0dGVybnMocnVuSGlzdG9yeSkgKiBRckNvZGUuUEVOQUxUWV9OMztcbiAgICAgICAgICAgIHJ1bkNvbG9yID0gdGhpcy5tb2R1bGVzW3ldW3hdO1xuICAgICAgICAgICAgcnVuWSA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCArPSB0aGlzLmZpbmRlclBlbmFsdHlUZXJtaW5hdGVBbmRDb3VudChydW5Db2xvciwgcnVuWSwgcnVuSGlzdG9yeSkgKiBRckNvZGUuUEVOQUxUWV9OMztcbiAgICAgIH1cblxuICAgICAgLy8gMioyIGJsb2NrcyBvZiBtb2R1bGVzIGhhdmluZyBzYW1lIGNvbG9yXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuc2l6ZSAtIDE7IHkrKykge1xuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuc2l6ZSAtIDE7IHgrKykge1xuICAgICAgICAgIGNvbnN0IGNvbG9yOiBib29sZWFuID0gdGhpcy5tb2R1bGVzW3ldW3hdO1xuICAgICAgICAgIGlmIChjb2xvciA9PSB0aGlzLm1vZHVsZXNbeV1beCArIDFdICYmIGNvbG9yID09IHRoaXMubW9kdWxlc1t5ICsgMV1beF0gJiYgY29sb3IgPT0gdGhpcy5tb2R1bGVzW3kgKyAxXVt4ICsgMV0pXG4gICAgICAgICAgICByZXN1bHQgKz0gUXJDb2RlLlBFTkFMVFlfTjI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQmFsYW5jZSBvZiBkYXJrIGFuZCBsaWdodCBtb2R1bGVzXG4gICAgICBsZXQgZGFyazogaW50ID0gMDtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMubW9kdWxlcykgZGFyayA9IHJvdy5yZWR1Y2UoKHN1bSwgY29sb3IpID0+IHN1bSArIChjb2xvciA/IDEgOiAwKSwgZGFyayk7XG4gICAgICBjb25zdCB0b3RhbDogaW50ID0gdGhpcy5zaXplICogdGhpcy5zaXplOyAvLyBOb3RlIHRoYXQgc2l6ZSBpcyBvZGQsIHNvIGRhcmsvdG90YWwgIT0gMS8yXG4gICAgICAvLyBDb21wdXRlIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGsgPj0gMCBzdWNoIHRoYXQgKDQ1LTVrKSUgPD0gZGFyay90b3RhbCA8PSAoNTUrNWspJVxuICAgICAgY29uc3QgazogaW50ID0gTWF0aC5jZWlsKE1hdGguYWJzKGRhcmsgKiAyMCAtIHRvdGFsICogMTApIC8gdG90YWwpIC0gMTtcbiAgICAgIGFzc2VydChrID49IDAgJiYgayA8PSA5KTtcbiAgICAgIHJlc3VsdCArPSBrICogUXJDb2RlLlBFTkFMVFlfTjQ7XG4gICAgICBhc3NlcnQocmVzdWx0ID49IDAgJiYgcmVzdWx0IDw9IDI1Njg4ODgpOyAvLyBOb24tdGlnaHQgdXBwZXIgYm91bmQgYmFzZWQgb24gZGVmYXVsdCB2YWx1ZXMgb2YgUEVOQUxUWV9OMSwgLi4uLCBONFxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKi0tIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucyAtLSovXG5cbiAgICAvLyBSZXR1cm5zIGFuIGFzY2VuZGluZyBsaXN0IG9mIHBvc2l0aW9ucyBvZiBhbGlnbm1lbnQgcGF0dGVybnMgZm9yIHRoaXMgdmVyc2lvbiBudW1iZXIuXG4gICAgLy8gRWFjaCBwb3NpdGlvbiBpcyBpbiB0aGUgcmFuZ2UgWzAsMTc3KSwgYW5kIGFyZSB1c2VkIG9uIGJvdGggdGhlIHggYW5kIHkgYXhlcy5cbiAgICAvLyBUaGlzIGNvdWxkIGJlIGltcGxlbWVudGVkIGFzIGxvb2t1cCB0YWJsZSBvZiA0MCB2YXJpYWJsZS1sZW5ndGggbGlzdHMgb2YgaW50ZWdlcnMuXG4gICAgcHJpdmF0ZSBnZXRBbGlnbm1lbnRQYXR0ZXJuUG9zaXRpb25zKCk6IEFycmF5PGludD4ge1xuICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PSAxKSByZXR1cm4gW107XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbnVtQWxpZ246IGludCA9IE1hdGguZmxvb3IodGhpcy52ZXJzaW9uIC8gNykgKyAyO1xuICAgICAgICBjb25zdCBzdGVwOiBpbnQgPSB0aGlzLnZlcnNpb24gPT0gMzIgPyAyNiA6IE1hdGguY2VpbCgodGhpcy52ZXJzaW9uICogNCArIDQpIC8gKG51bUFsaWduICogMiAtIDIpKSAqIDI7XG4gICAgICAgIGxldCByZXN1bHQ6IEFycmF5PGludD4gPSBbNl07XG4gICAgICAgIGZvciAobGV0IHBvcyA9IHRoaXMuc2l6ZSAtIDc7IHJlc3VsdC5sZW5ndGggPCBudW1BbGlnbjsgcG9zIC09IHN0ZXApIHJlc3VsdC5zcGxpY2UoMSwgMCwgcG9zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiBhIFFSIENvZGUgb2YgdGhlIGdpdmVuIHZlcnNpb24gbnVtYmVyLCBhZnRlclxuICAgIC8vIGFsbCBmdW5jdGlvbiBtb2R1bGVzIGFyZSBleGNsdWRlZC4gVGhpcyBpbmNsdWRlcyByZW1haW5kZXIgYml0cywgc28gaXQgbWlnaHQgbm90IGJlIGEgbXVsdGlwbGUgb2YgOC5cbiAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoZSByYW5nZSBbMjA4LCAyOTY0OF0uIFRoaXMgY291bGQgYmUgaW1wbGVtZW50ZWQgYXMgYSA0MC1lbnRyeSBsb29rdXAgdGFibGUuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0TnVtUmF3RGF0YU1vZHVsZXModmVyOiBpbnQpOiBpbnQge1xuICAgICAgaWYgKHZlciA8IFFyQ29kZS5NSU5fVkVSU0lPTiB8fCB2ZXIgPiBRckNvZGUuTUFYX1ZFUlNJT04pIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZXJzaW9uIG51bWJlciBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgIGxldCByZXN1bHQ6IGludCA9ICgxNiAqIHZlciArIDEyOCkgKiB2ZXIgKyA2NDtcbiAgICAgIGlmICh2ZXIgPj0gMikge1xuICAgICAgICBjb25zdCBudW1BbGlnbjogaW50ID0gTWF0aC5mbG9vcih2ZXIgLyA3KSArIDI7XG4gICAgICAgIHJlc3VsdCAtPSAoMjUgKiBudW1BbGlnbiAtIDEwKSAqIG51bUFsaWduIC0gNTU7XG4gICAgICAgIGlmICh2ZXIgPj0gNykgcmVzdWx0IC09IDM2O1xuICAgICAgfVxuICAgICAgYXNzZXJ0KHJlc3VsdCA+PSAyMDggJiYgcmVzdWx0IDw9IDI5NjQ4KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIDgtYml0IGRhdGEgKGkuZS4gbm90IGVycm9yIGNvcnJlY3Rpb24pIGNvZGV3b3JkcyBjb250YWluZWQgaW4gYW55XG4gICAgLy8gUVIgQ29kZSBvZiB0aGUgZ2l2ZW4gdmVyc2lvbiBudW1iZXIgYW5kIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwsIHdpdGggcmVtYWluZGVyIGJpdHMgZGlzY2FyZGVkLlxuICAgIC8vIFRoaXMgc3RhdGVsZXNzIHB1cmUgZnVuY3Rpb24gY291bGQgYmUgaW1wbGVtZW50ZWQgYXMgYSAoNDAqNCktY2VsbCBsb29rdXAgdGFibGUuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0TnVtRGF0YUNvZGV3b3Jkcyh2ZXI6IGludCwgZWNsOiBRckNvZGUuRWNjKTogaW50IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIE1hdGguZmxvb3IoUXJDb2RlLmdldE51bVJhd0RhdGFNb2R1bGVzKHZlcikgLyA4KSAtXG4gICAgICAgIFFyQ29kZS5FQ0NfQ09ERVdPUkRTX1BFUl9CTE9DS1tlY2wub3JkaW5hbF1bdmVyXSAqIFFyQ29kZS5OVU1fRVJST1JfQ09SUkVDVElPTl9CTE9DS1NbZWNsLm9yZGluYWxdW3Zlcl1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhIFJlZWQtU29sb21vbiBFQ0MgZ2VuZXJhdG9yIHBvbHlub21pYWwgZm9yIHRoZSBnaXZlbiBkZWdyZWUuIFRoaXMgY291bGQgYmVcbiAgICAvLyBpbXBsZW1lbnRlZCBhcyBhIGxvb2t1cCB0YWJsZSBvdmVyIGFsbCBwb3NzaWJsZSBwYXJhbWV0ZXIgdmFsdWVzLCBpbnN0ZWFkIG9mIGFzIGFuIGFsZ29yaXRobS5cbiAgICBwcml2YXRlIHN0YXRpYyByZWVkU29sb21vbkNvbXB1dGVEaXZpc29yKGRlZ3JlZTogaW50KTogQXJyYXk8Ynl0ZT4ge1xuICAgICAgaWYgKGRlZ3JlZSA8IDEgfHwgZGVncmVlID4gMjU1KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGVncmVlIG91dCBvZiByYW5nZScpO1xuICAgICAgLy8gUG9seW5vbWlhbCBjb2VmZmljaWVudHMgYXJlIHN0b3JlZCBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IHBvd2VyLCBleGNsdWRpbmcgdGhlIGxlYWRpbmcgdGVybSB3aGljaCBpcyBhbHdheXMgMS5cbiAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBwb2x5bm9taWFsIHheMyArIDI1NXheMiArIDh4ICsgOTMgaXMgc3RvcmVkIGFzIHRoZSB1aW50OCBhcnJheSBbMjU1LCA4LCA5M10uXG4gICAgICBsZXQgcmVzdWx0OiBBcnJheTxieXRlPiA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWdyZWUgLSAxOyBpKyspIHJlc3VsdC5wdXNoKDApO1xuICAgICAgcmVzdWx0LnB1c2goMSk7IC8vIFN0YXJ0IG9mZiB3aXRoIHRoZSBtb25vbWlhbCB4XjBcblxuICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJvZHVjdCBwb2x5bm9taWFsICh4IC0gcl4wKSAqICh4IC0gcl4xKSAqICh4IC0gcl4yKSAqIC4uLiAqICh4IC0gcl57ZGVncmVlLTF9KSxcbiAgICAgIC8vIGFuZCBkcm9wIHRoZSBoaWdoZXN0IG1vbm9taWFsIHRlcm0gd2hpY2ggaXMgYWx3YXlzIDF4XmRlZ3JlZS5cbiAgICAgIC8vIE5vdGUgdGhhdCByID0gMHgwMiwgd2hpY2ggaXMgYSBnZW5lcmF0b3IgZWxlbWVudCBvZiB0aGlzIGZpZWxkIEdGKDJeOC8weDExRCkuXG4gICAgICBsZXQgcm9vdCA9IDE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlZ3JlZTsgaSsrKSB7XG4gICAgICAgIC8vIE11bHRpcGx5IHRoZSBjdXJyZW50IHByb2R1Y3QgYnkgKHggLSByXmkpXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgcmVzdWx0W2pdID0gUXJDb2RlLnJlZWRTb2xvbW9uTXVsdGlwbHkocmVzdWx0W2pdLCByb290KTtcbiAgICAgICAgICBpZiAoaiArIDEgPCByZXN1bHQubGVuZ3RoKSByZXN1bHRbal0gXj0gcmVzdWx0W2ogKyAxXTtcbiAgICAgICAgfVxuICAgICAgICByb290ID0gUXJDb2RlLnJlZWRTb2xvbW9uTXVsdGlwbHkocm9vdCwgMHgwMik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIFJlZWQtU29sb21vbiBlcnJvciBjb3JyZWN0aW9uIGNvZGV3b3JkIGZvciB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGl2aXNvciBwb2x5bm9taWFscy5cbiAgICBwcml2YXRlIHN0YXRpYyByZWVkU29sb21vbkNvbXB1dGVSZW1haW5kZXIoXG4gICAgICBkYXRhOiBSZWFkb25seTxBcnJheTxieXRlPj4sXG4gICAgICBkaXZpc29yOiBSZWFkb25seTxBcnJheTxieXRlPj5cbiAgICApOiBBcnJheTxieXRlPiB7XG4gICAgICBsZXQgcmVzdWx0OiBBcnJheTxieXRlPiA9IGRpdmlzb3IubWFwKF8gPT4gMCk7XG4gICAgICBmb3IgKGNvbnN0IGIgb2YgZGF0YSkge1xuICAgICAgICAvLyBQb2x5bm9taWFsIGRpdmlzaW9uXG4gICAgICAgIGNvbnN0IGZhY3RvcjogYnl0ZSA9IGIgXiAocmVzdWx0LnNoaWZ0KCkgYXMgYnl0ZSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKDApO1xuICAgICAgICBkaXZpc29yLmZvckVhY2goKGNvZWYsIGkpID0+IChyZXN1bHRbaV0gXj0gUXJDb2RlLnJlZWRTb2xvbW9uTXVsdGlwbHkoY29lZiwgZmFjdG9yKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoZSB0d28gZ2l2ZW4gZmllbGQgZWxlbWVudHMgbW9kdWxvIEdGKDJeOC8weDExRCkuIFRoZSBhcmd1bWVudHMgYW5kIHJlc3VsdFxuICAgIC8vIGFyZSB1bnNpZ25lZCA4LWJpdCBpbnRlZ2Vycy4gVGhpcyBjb3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBhIGxvb2t1cCB0YWJsZSBvZiAyNTYqMjU2IGVudHJpZXMgb2YgdWludDguXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVlZFNvbG9tb25NdWx0aXBseSh4OiBieXRlLCB5OiBieXRlKTogYnl0ZSB7XG4gICAgICBpZiAoeCA+Pj4gOCAhPSAwIHx8IHkgPj4+IDggIT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J5dGUgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAvLyBSdXNzaWFuIHBlYXNhbnQgbXVsdGlwbGljYXRpb25cbiAgICAgIGxldCB6OiBpbnQgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDc7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHogPSAoeiA8PCAxKSBeICgoeiA+Pj4gNykgKiAweDExZCk7XG4gICAgICAgIHogXj0gKCh5ID4+PiBpKSAmIDEpICogeDtcbiAgICAgIH1cbiAgICAgIGFzc2VydCh6ID4+PiA4ID09IDApO1xuICAgICAgcmV0dXJuIHogYXMgYnl0ZTtcbiAgICB9XG5cbiAgICAvLyBDYW4gb25seSBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBsaWdodCBydW4gaXMgYWRkZWQsIGFuZFxuICAgIC8vIHJldHVybnMgZWl0aGVyIDAsIDEsIG9yIDIuIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXRQZW5hbHR5U2NvcmUoKS5cbiAgICBwcml2YXRlIGZpbmRlclBlbmFsdHlDb3VudFBhdHRlcm5zKHJ1bkhpc3Rvcnk6IFJlYWRvbmx5PEFycmF5PGludD4+KTogaW50IHtcbiAgICAgIGNvbnN0IG46IGludCA9IHJ1bkhpc3RvcnlbMV07XG4gICAgICBhc3NlcnQobiA8PSB0aGlzLnNpemUgKiAzKTtcbiAgICAgIGNvbnN0IGNvcmU6IGJvb2xlYW4gPVxuICAgICAgICBuID4gMCAmJiBydW5IaXN0b3J5WzJdID09IG4gJiYgcnVuSGlzdG9yeVszXSA9PSBuICogMyAmJiBydW5IaXN0b3J5WzRdID09IG4gJiYgcnVuSGlzdG9yeVs1XSA9PSBuO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNvcmUgJiYgcnVuSGlzdG9yeVswXSA+PSBuICogNCAmJiBydW5IaXN0b3J5WzZdID49IG4gPyAxIDogMCkgK1xuICAgICAgICAoY29yZSAmJiBydW5IaXN0b3J5WzZdID49IG4gKiA0ICYmIHJ1bkhpc3RvcnlbMF0gPj0gbiA/IDEgOiAwKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBNdXN0IGJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgbGluZSAocm93IG9yIGNvbHVtbikgb2YgbW9kdWxlcy4gQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldFBlbmFsdHlTY29yZSgpLlxuICAgIHByaXZhdGUgZmluZGVyUGVuYWx0eVRlcm1pbmF0ZUFuZENvdW50KFxuICAgICAgY3VycmVudFJ1bkNvbG9yOiBib29sZWFuLFxuICAgICAgY3VycmVudFJ1bkxlbmd0aDogaW50LFxuICAgICAgcnVuSGlzdG9yeTogQXJyYXk8aW50PlxuICAgICk6IGludCB7XG4gICAgICBpZiAoY3VycmVudFJ1bkNvbG9yKSB7XG4gICAgICAgIC8vIFRlcm1pbmF0ZSBkYXJrIHJ1blxuICAgICAgICB0aGlzLmZpbmRlclBlbmFsdHlBZGRIaXN0b3J5KGN1cnJlbnRSdW5MZW5ndGgsIHJ1bkhpc3RvcnkpO1xuICAgICAgICBjdXJyZW50UnVuTGVuZ3RoID0gMDtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRSdW5MZW5ndGggKz0gdGhpcy5zaXplOyAvLyBBZGQgbGlnaHQgYm9yZGVyIHRvIGZpbmFsIHJ1blxuICAgICAgdGhpcy5maW5kZXJQZW5hbHR5QWRkSGlzdG9yeShjdXJyZW50UnVuTGVuZ3RoLCBydW5IaXN0b3J5KTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRlclBlbmFsdHlDb3VudFBhdHRlcm5zKHJ1bkhpc3RvcnkpO1xuICAgIH1cblxuICAgIC8vIFB1c2hlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZyb250IGFuZCBkcm9wcyB0aGUgbGFzdCB2YWx1ZS4gQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldFBlbmFsdHlTY29yZSgpLlxuICAgIHByaXZhdGUgZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkoY3VycmVudFJ1bkxlbmd0aDogaW50LCBydW5IaXN0b3J5OiBBcnJheTxpbnQ+KTogdm9pZCB7XG4gICAgICBpZiAocnVuSGlzdG9yeVswXSA9PSAwKSBjdXJyZW50UnVuTGVuZ3RoICs9IHRoaXMuc2l6ZTsgLy8gQWRkIGxpZ2h0IGJvcmRlciB0byBpbml0aWFsIHJ1blxuICAgICAgcnVuSGlzdG9yeS5wb3AoKTtcbiAgICAgIHJ1bkhpc3RvcnkudW5zaGlmdChjdXJyZW50UnVuTGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKi0tIENvbnN0YW50cyBhbmQgdGFibGVzIC0tKi9cblxuICAgIC8vIFRoZSBtaW5pbXVtIHZlcnNpb24gbnVtYmVyIHN1cHBvcnRlZCBpbiB0aGUgUVIgQ29kZSBNb2RlbCAyIHN0YW5kYXJkLlxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUlOX1ZFUlNJT046IGludCA9IDE7XG4gICAgLy8gVGhlIG1heGltdW0gdmVyc2lvbiBudW1iZXIgc3VwcG9ydGVkIGluIHRoZSBRUiBDb2RlIE1vZGVsIDIgc3RhbmRhcmQuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVhfVkVSU0lPTjogaW50ID0gNDA7XG5cbiAgICAvLyBGb3IgdXNlIGluIGdldFBlbmFsdHlTY29yZSgpLCB3aGVuIGV2YWx1YXRpbmcgd2hpY2ggbWFzayBpcyBiZXN0LlxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBFTkFMVFlfTjE6IGludCA9IDM7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUEVOQUxUWV9OMjogaW50ID0gMztcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQRU5BTFRZX04zOiBpbnQgPSA0MDtcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQRU5BTFRZX040OiBpbnQgPSAxMDtcblxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEVDQ19DT0RFV09SRFNfUEVSX0JMT0NLOiBBcnJheTxBcnJheTxpbnQ+PiA9IFtcbiAgICAgIC8vIFZlcnNpb246IChub3RlIHRoYXQgaW5kZXggMCBpcyBmb3IgcGFkZGluZywgYW5kIGlzIHNldCB0byBhbiBpbGxlZ2FsIHZhbHVlKVxuICAgICAgLy8wLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCAgICBFcnJvciBjb3JyZWN0aW9uIGxldmVsXG4gICAgICBbXG4gICAgICAgIC0xLCA3LCAxMCwgMTUsIDIwLCAyNiwgMTgsIDIwLCAyNCwgMzAsIDE4LCAyMCwgMjQsIDI2LCAzMCwgMjIsIDI0LCAyOCwgMzAsIDI4LCAyOCwgMjgsIDI4LCAzMCwgMzAsIDI2LCAyOCwgMzAsXG4gICAgICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLFxuICAgICAgXSwgLy8gTG93XG4gICAgICBbXG4gICAgICAgIC0xLCAxMCwgMTYsIDI2LCAxOCwgMjQsIDE2LCAxOCwgMjIsIDIyLCAyNiwgMzAsIDIyLCAyMiwgMjQsIDI0LCAyOCwgMjgsIDI2LCAyNiwgMjYsIDI2LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LFxuICAgICAgICAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCxcbiAgICAgIF0sIC8vIE1lZGl1bVxuICAgICAgW1xuICAgICAgICAtMSwgMTMsIDIyLCAxOCwgMjYsIDE4LCAyNCwgMTgsIDIyLCAyMCwgMjQsIDI4LCAyNiwgMjQsIDIwLCAzMCwgMjQsIDI4LCAyOCwgMjYsIDMwLCAyOCwgMzAsIDMwLCAzMCwgMzAsIDI4LCAzMCxcbiAgICAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsXG4gICAgICBdLCAvLyBRdWFydGlsZVxuICAgICAgW1xuICAgICAgICAtMSwgMTcsIDI4LCAyMiwgMTYsIDIyLCAyOCwgMjYsIDI2LCAyNCwgMjgsIDI0LCAyOCwgMjIsIDI0LCAyNCwgMzAsIDI4LCAyOCwgMjYsIDI4LCAzMCwgMjQsIDMwLCAzMCwgMzAsIDMwLCAzMCxcbiAgICAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsXG4gICAgICBdLCAvLyBIaWdoXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLUzogQXJyYXk8QXJyYXk8aW50Pj4gPSBbXG4gICAgICAvLyBWZXJzaW9uOiAobm90ZSB0aGF0IGluZGV4IDAgaXMgZm9yIHBhZGRpbmcsIGFuZCBpcyBzZXQgdG8gYW4gaWxsZWdhbCB2YWx1ZSlcbiAgICAgIC8vMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCAgICBFcnJvciBjb3JyZWN0aW9uIGxldmVsXG4gICAgICBbXG4gICAgICAgIC0xLCAxLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCA0LCA0LCA0LCA0LCA0LCA2LCA2LCA2LCA2LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTIsIDEyLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCxcbiAgICAgICAgMTksIDE5LCAyMCwgMjEsIDIyLCAyNCwgMjUsXG4gICAgICBdLCAvLyBMb3dcbiAgICAgIFtcbiAgICAgICAgLTEsIDEsIDEsIDEsIDIsIDIsIDQsIDQsIDQsIDUsIDUsIDUsIDgsIDksIDksIDEwLCAxMCwgMTEsIDEzLCAxNCwgMTYsIDE3LCAxNywgMTgsIDIwLCAyMSwgMjMsIDI1LCAyNiwgMjgsIDI5LFxuICAgICAgICAzMSwgMzMsIDM1LCAzNywgMzgsIDQwLCA0MywgNDUsIDQ3LCA0OSxcbiAgICAgIF0sIC8vIE1lZGl1bVxuICAgICAgW1xuICAgICAgICAtMSwgMSwgMSwgMiwgMiwgNCwgNCwgNiwgNiwgOCwgOCwgOCwgMTAsIDEyLCAxNiwgMTIsIDE3LCAxNiwgMTgsIDIxLCAyMCwgMjMsIDIzLCAyNSwgMjcsIDI5LCAzNCwgMzQsIDM1LCAzOCwgNDAsXG4gICAgICAgIDQzLCA0NSwgNDgsIDUxLCA1MywgNTYsIDU5LCA2MiwgNjUsIDY4LFxuICAgICAgXSwgLy8gUXVhcnRpbGVcbiAgICAgIFtcbiAgICAgICAgLTEsIDEsIDEsIDIsIDQsIDQsIDQsIDUsIDYsIDgsIDgsIDExLCAxMSwgMTYsIDE2LCAxOCwgMTYsIDE5LCAyMSwgMjUsIDI1LCAyNSwgMzQsIDMwLCAzMiwgMzUsIDM3LCA0MCwgNDIsIDQ1LFxuICAgICAgICA0OCwgNTEsIDU0LCA1NywgNjAsIDYzLCA2NiwgNzAsIDc0LCA3NywgODEsXG4gICAgICBdLCAvLyBIaWdoXG4gICAgXTtcbiAgfVxuXG4gIC8vIEFwcGVuZHMgdGhlIGdpdmVuIG51bWJlciBvZiBsb3ctb3JkZXIgYml0cyBvZiB0aGUgZ2l2ZW4gdmFsdWVcbiAgLy8gdG8gdGhlIGdpdmVuIGJ1ZmZlci4gUmVxdWlyZXMgMCA8PSBsZW4gPD0gMzEgYW5kIDAgPD0gdmFsIDwgMl5sZW4uXG4gIGZ1bmN0aW9uIGFwcGVuZEJpdHModmFsOiBpbnQsIGxlbjogaW50LCBiYjogQXJyYXk8Yml0Pik6IHZvaWQge1xuICAgIGlmIChsZW4gPCAwIHx8IGxlbiA+IDMxIHx8IHZhbCA+Pj4gbGVuICE9IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdWYWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICBmb3IgKFxuICAgICAgbGV0IGkgPSBsZW4gLSAxO1xuICAgICAgaSA+PSAwO1xuICAgICAgaS0tIC8vIEFwcGVuZCBiaXQgYnkgYml0XG4gICAgKVxuICAgICAgYmIucHVzaCgodmFsID4+PiBpKSAmIDEpO1xuICB9XG5cbiAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgaSd0aCBiaXQgb2YgeCBpcyBzZXQgdG8gMS5cbiAgZnVuY3Rpb24gZ2V0Qml0KHg6IGludCwgaTogaW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICgoeCA+Pj4gaSkgJiAxKSAhPSAwO1xuICB9XG5cbiAgLy8gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgZ2l2ZW4gY29uZGl0aW9uIGlzIGZhbHNlLlxuICBmdW5jdGlvbiBhc3NlcnQoY29uZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghY29uZCkgdGhyb3cgbmV3IEVycm9yKCdBc3NlcnRpb24gZXJyb3InKTtcbiAgfVxuXG4gIC8qLS0tLSBEYXRhIHNlZ21lbnQgY2xhc3MgLS0tLSovXG5cbiAgLypcbiAgICogQSBzZWdtZW50IG9mIGNoYXJhY3Rlci9iaW5hcnkvY29udHJvbCBkYXRhIGluIGEgUVIgQ29kZSBzeW1ib2wuXG4gICAqIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBpbW11dGFibGUuXG4gICAqIFRoZSBtaWQtbGV2ZWwgd2F5IHRvIGNyZWF0ZSBhIHNlZ21lbnQgaXMgdG8gdGFrZSB0aGUgcGF5bG9hZCBkYXRhXG4gICAqIGFuZCBjYWxsIGEgc3RhdGljIGZhY3RvcnkgZnVuY3Rpb24gc3VjaCBhcyBRclNlZ21lbnQubWFrZU51bWVyaWMoKS5cbiAgICogVGhlIGxvdy1sZXZlbCB3YXkgdG8gY3JlYXRlIGEgc2VnbWVudCBpcyB0byBjdXN0b20tbWFrZSB0aGUgYml0IGJ1ZmZlclxuICAgKiBhbmQgY2FsbCB0aGUgUXJTZWdtZW50KCkgY29uc3RydWN0b3Igd2l0aCBhcHByb3ByaWF0ZSB2YWx1ZXMuXG4gICAqIFRoaXMgc2VnbWVudCBjbGFzcyBpbXBvc2VzIG5vIGxlbmd0aCByZXN0cmljdGlvbnMsIGJ1dCBRUiBDb2RlcyBoYXZlIHJlc3RyaWN0aW9ucy5cbiAgICogRXZlbiBpbiB0aGUgbW9zdCBmYXZvcmFibGUgY29uZGl0aW9ucywgYSBRUiBDb2RlIGNhbiBvbmx5IGhvbGQgNzA4OSBjaGFyYWN0ZXJzIG9mIGRhdGEuXG4gICAqIEFueSBzZWdtZW50IGxvbmdlciB0aGFuIHRoaXMgaXMgbWVhbmluZ2xlc3MgZm9yIHRoZSBwdXJwb3NlIG9mIGdlbmVyYXRpbmcgUVIgQ29kZXMuXG4gICAqL1xuICBleHBvcnQgY2xhc3MgUXJTZWdtZW50IHtcbiAgICAvKi0tIFN0YXRpYyBmYWN0b3J5IGZ1bmN0aW9ucyAobWlkIGxldmVsKSAtLSovXG5cbiAgICAvLyBSZXR1cm5zIGEgc2VnbWVudCByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGJpbmFyeSBkYXRhIGVuY29kZWQgaW5cbiAgICAvLyBieXRlIG1vZGUuIEFsbCBpbnB1dCBieXRlIGFycmF5cyBhcmUgYWNjZXB0YWJsZS4gQW55IHRleHQgc3RyaW5nXG4gICAgLy8gY2FuIGJlIGNvbnZlcnRlZCB0byBVVEYtOCBieXRlcyBhbmQgZW5jb2RlZCBhcyBhIGJ5dGUgbW9kZSBzZWdtZW50LlxuICAgIHB1YmxpYyBzdGF0aWMgbWFrZUJ5dGVzKGRhdGE6IFJlYWRvbmx5PEFycmF5PGJ5dGU+Pik6IFFyU2VnbWVudCB7XG4gICAgICBsZXQgYmI6IEFycmF5PGJpdD4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgYiBvZiBkYXRhKSBhcHBlbmRCaXRzKGIsIDgsIGJiKTtcbiAgICAgIHJldHVybiBuZXcgUXJTZWdtZW50KFFyU2VnbWVudC5Nb2RlLkJZVEUsIGRhdGEubGVuZ3RoLCBiYik7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhIHNlZ21lbnQgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBzdHJpbmcgb2YgZGVjaW1hbCBkaWdpdHMgZW5jb2RlZCBpbiBudW1lcmljIG1vZGUuXG4gICAgcHVibGljIHN0YXRpYyBtYWtlTnVtZXJpYyhkaWdpdHM6IHN0cmluZyk6IFFyU2VnbWVudCB7XG4gICAgICBpZiAoIVFyU2VnbWVudC5pc051bWVyaWMoZGlnaXRzKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1N0cmluZyBjb250YWlucyBub24tbnVtZXJpYyBjaGFyYWN0ZXJzJyk7XG4gICAgICBsZXQgYmI6IEFycmF5PGJpdD4gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgKSB7XG4gICAgICAgIC8vIENvbnN1bWUgdXAgdG8gMyBkaWdpdHMgcGVyIGl0ZXJhdGlvblxuICAgICAgICBjb25zdCBuOiBpbnQgPSBNYXRoLm1pbihkaWdpdHMubGVuZ3RoIC0gaSwgMyk7XG4gICAgICAgIGFwcGVuZEJpdHMocGFyc2VJbnQoZGlnaXRzLnN1YnN0cmluZyhpLCBpICsgbiksIDEwKSwgbiAqIDMgKyAxLCBiYik7XG4gICAgICAgIGkgKz0gbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUXJTZWdtZW50KFFyU2VnbWVudC5Nb2RlLk5VTUVSSUMsIGRpZ2l0cy5sZW5ndGgsIGJiKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGEgc2VnbWVudCByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHRleHQgc3RyaW5nIGVuY29kZWQgaW4gYWxwaGFudW1lcmljIG1vZGUuXG4gICAgLy8gVGhlIGNoYXJhY3RlcnMgYWxsb3dlZCBhcmU6IDAgdG8gOSwgQSB0byBaICh1cHBlcmNhc2Ugb25seSksIHNwYWNlLFxuICAgIC8vIGRvbGxhciwgcGVyY2VudCwgYXN0ZXJpc2ssIHBsdXMsIGh5cGhlbiwgcGVyaW9kLCBzbGFzaCwgY29sb24uXG4gICAgcHVibGljIHN0YXRpYyBtYWtlQWxwaGFudW1lcmljKHRleHQ6IHN0cmluZyk6IFFyU2VnbWVudCB7XG4gICAgICBpZiAoIVFyU2VnbWVudC5pc0FscGhhbnVtZXJpYyh0ZXh0KSlcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1N0cmluZyBjb250YWlucyB1bmVuY29kYWJsZSBjaGFyYWN0ZXJzIGluIGFscGhhbnVtZXJpYyBtb2RlJyk7XG4gICAgICBsZXQgYmI6IEFycmF5PGJpdD4gPSBbXTtcbiAgICAgIGxldCBpOiBpbnQ7XG4gICAgICBmb3IgKGkgPSAwOyBpICsgMiA8PSB0ZXh0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIC8vIFByb2Nlc3MgZ3JvdXBzIG9mIDJcbiAgICAgICAgbGV0IHRlbXA6IGludCA9IFFyU2VnbWVudC5BTFBIQU5VTUVSSUNfQ0hBUlNFVC5pbmRleE9mKHRleHQuY2hhckF0KGkpKSAqIDQ1O1xuICAgICAgICB0ZW1wICs9IFFyU2VnbWVudC5BTFBIQU5VTUVSSUNfQ0hBUlNFVC5pbmRleE9mKHRleHQuY2hhckF0KGkgKyAxKSk7XG4gICAgICAgIGFwcGVuZEJpdHModGVtcCwgMTEsIGJiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgdGV4dC5sZW5ndGgpXG4gICAgICAgIC8vIDEgY2hhcmFjdGVyIHJlbWFpbmluZ1xuICAgICAgICBhcHBlbmRCaXRzKFFyU2VnbWVudC5BTFBIQU5VTUVSSUNfQ0hBUlNFVC5pbmRleE9mKHRleHQuY2hhckF0KGkpKSwgNiwgYmIpO1xuICAgICAgcmV0dXJuIG5ldyBRclNlZ21lbnQoUXJTZWdtZW50Lk1vZGUuQUxQSEFOVU1FUklDLCB0ZXh0Lmxlbmd0aCwgYmIpO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBuZXcgbXV0YWJsZSBsaXN0IG9mIHplcm8gb3IgbW9yZSBzZWdtZW50cyB0byByZXByZXNlbnQgdGhlIGdpdmVuIFVuaWNvZGUgdGV4dCBzdHJpbmcuXG4gICAgLy8gVGhlIHJlc3VsdCBtYXkgdXNlIHZhcmlvdXMgc2VnbWVudCBtb2RlcyBhbmQgc3dpdGNoIG1vZGVzIHRvIG9wdGltaXplIHRoZSBsZW5ndGggb2YgdGhlIGJpdCBzdHJlYW0uXG4gICAgcHVibGljIHN0YXRpYyBtYWtlU2VnbWVudHModGV4dDogc3RyaW5nKTogQXJyYXk8UXJTZWdtZW50PiB7XG4gICAgICAvLyBTZWxlY3QgdGhlIG1vc3QgZWZmaWNpZW50IHNlZ21lbnQgZW5jb2RpbmcgYXV0b21hdGljYWxseVxuICAgICAgaWYgKHRleHQgPT0gJycpIHJldHVybiBbXTtcbiAgICAgIGVsc2UgaWYgKFFyU2VnbWVudC5pc051bWVyaWModGV4dCkpIHJldHVybiBbUXJTZWdtZW50Lm1ha2VOdW1lcmljKHRleHQpXTtcbiAgICAgIGVsc2UgaWYgKFFyU2VnbWVudC5pc0FscGhhbnVtZXJpYyh0ZXh0KSkgcmV0dXJuIFtRclNlZ21lbnQubWFrZUFscGhhbnVtZXJpYyh0ZXh0KV07XG4gICAgICBlbHNlIHJldHVybiBbUXJTZWdtZW50Lm1ha2VCeXRlcyhRclNlZ21lbnQudG9VdGY4Qnl0ZUFycmF5KHRleHQpKV07XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhIHNlZ21lbnQgcmVwcmVzZW50aW5nIGFuIEV4dGVuZGVkIENoYW5uZWwgSW50ZXJwcmV0YXRpb25cbiAgICAvLyAoRUNJKSBkZXNpZ25hdG9yIHdpdGggdGhlIGdpdmVuIGFzc2lnbm1lbnQgdmFsdWUuXG4gICAgcHVibGljIHN0YXRpYyBtYWtlRWNpKGFzc2lnblZhbDogaW50KTogUXJTZWdtZW50IHtcbiAgICAgIGxldCBiYjogQXJyYXk8Yml0PiA9IFtdO1xuICAgICAgaWYgKGFzc2lnblZhbCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdFQ0kgYXNzaWdubWVudCB2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgIGVsc2UgaWYgKGFzc2lnblZhbCA8IDEgPDwgNykgYXBwZW5kQml0cyhhc3NpZ25WYWwsIDgsIGJiKTtcbiAgICAgIGVsc2UgaWYgKGFzc2lnblZhbCA8IDEgPDwgMTQpIHtcbiAgICAgICAgYXBwZW5kQml0cygwYjEwLCAyLCBiYik7XG4gICAgICAgIGFwcGVuZEJpdHMoYXNzaWduVmFsLCAxNCwgYmIpO1xuICAgICAgfSBlbHNlIGlmIChhc3NpZ25WYWwgPCAxMDAwMDAwKSB7XG4gICAgICAgIGFwcGVuZEJpdHMoMGIxMTAsIDMsIGJiKTtcbiAgICAgICAgYXBwZW5kQml0cyhhc3NpZ25WYWwsIDIxLCBiYik7XG4gICAgICB9IGVsc2UgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0VDSSBhc3NpZ25tZW50IHZhbHVlIG91dCBvZiByYW5nZScpO1xuICAgICAgcmV0dXJuIG5ldyBRclNlZ21lbnQoUXJTZWdtZW50Lk1vZGUuRUNJLCAwLCBiYik7XG4gICAgfVxuXG4gICAgLy8gVGVzdHMgd2hldGhlciB0aGUgZ2l2ZW4gc3RyaW5nIGNhbiBiZSBlbmNvZGVkIGFzIGEgc2VnbWVudCBpbiBudW1lcmljIG1vZGUuXG4gICAgLy8gQSBzdHJpbmcgaXMgZW5jb2RhYmxlIGlmZiBlYWNoIGNoYXJhY3RlciBpcyBpbiB0aGUgcmFuZ2UgMCB0byA5LlxuICAgIHB1YmxpYyBzdGF0aWMgaXNOdW1lcmljKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIFFyU2VnbWVudC5OVU1FUklDX1JFR0VYLnRlc3QodGV4dCk7XG4gICAgfVxuXG4gICAgLy8gVGVzdHMgd2hldGhlciB0aGUgZ2l2ZW4gc3RyaW5nIGNhbiBiZSBlbmNvZGVkIGFzIGEgc2VnbWVudCBpbiBhbHBoYW51bWVyaWMgbW9kZS5cbiAgICAvLyBBIHN0cmluZyBpcyBlbmNvZGFibGUgaWZmIGVhY2ggY2hhcmFjdGVyIGlzIGluIHRoZSBmb2xsb3dpbmcgc2V0OiAwIHRvIDksIEEgdG8gWlxuICAgIC8vICh1cHBlcmNhc2Ugb25seSksIHNwYWNlLCBkb2xsYXIsIHBlcmNlbnQsIGFzdGVyaXNrLCBwbHVzLCBoeXBoZW4sIHBlcmlvZCwgc2xhc2gsIGNvbG9uLlxuICAgIHB1YmxpYyBzdGF0aWMgaXNBbHBoYW51bWVyaWModGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gUXJTZWdtZW50LkFMUEhBTlVNRVJJQ19SRUdFWC50ZXN0KHRleHQpO1xuICAgIH1cblxuICAgIC8qLS0gQ29uc3RydWN0b3IgKGxvdyBsZXZlbCkgYW5kIGZpZWxkcyAtLSovXG5cbiAgICAvLyBDcmVhdGVzIGEgbmV3IFFSIENvZGUgc2VnbWVudCB3aXRoIHRoZSBnaXZlbiBhdHRyaWJ1dGVzIGFuZCBkYXRhLlxuICAgIC8vIFRoZSBjaGFyYWN0ZXIgY291bnQgKG51bUNoYXJzKSBtdXN0IGFncmVlIHdpdGggdGhlIG1vZGUgYW5kIHRoZSBiaXQgYnVmZmVyIGxlbmd0aCxcbiAgICAvLyBidXQgdGhlIGNvbnN0cmFpbnQgaXNuJ3QgY2hlY2tlZC4gVGhlIGdpdmVuIGJpdCBidWZmZXIgaXMgY2xvbmVkIGFuZCBzdG9yZWQuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgLy8gVGhlIG1vZGUgaW5kaWNhdG9yIG9mIHRoaXMgc2VnbWVudC5cbiAgICAgIHB1YmxpYyByZWFkb25seSBtb2RlOiBRclNlZ21lbnQuTW9kZSxcblxuICAgICAgLy8gVGhlIGxlbmd0aCBvZiB0aGlzIHNlZ21lbnQncyB1bmVuY29kZWQgZGF0YS4gTWVhc3VyZWQgaW4gY2hhcmFjdGVycyBmb3JcbiAgICAgIC8vIG51bWVyaWMvYWxwaGFudW1lcmljL2thbmppIG1vZGUsIGJ5dGVzIGZvciBieXRlIG1vZGUsIGFuZCAwIGZvciBFQ0kgbW9kZS5cbiAgICAgIC8vIEFsd2F5cyB6ZXJvIG9yIHBvc2l0aXZlLiBOb3QgdGhlIHNhbWUgYXMgdGhlIGRhdGEncyBiaXQgbGVuZ3RoLlxuICAgICAgcHVibGljIHJlYWRvbmx5IG51bUNoYXJzOiBpbnQsXG5cbiAgICAgIC8vIFRoZSBkYXRhIGJpdHMgb2YgdGhpcyBzZWdtZW50LiBBY2Nlc3NlZCB0aHJvdWdoIGdldERhdGEoKS5cbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgYml0RGF0YTogQXJyYXk8Yml0PlxuICAgICkge1xuICAgICAgaWYgKG51bUNoYXJzIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQnKTtcbiAgICAgIHRoaXMuYml0RGF0YSA9IGJpdERhdGEuc2xpY2UoKTsgLy8gTWFrZSBkZWZlbnNpdmUgY29weVxuICAgIH1cblxuICAgIC8qLS0gTWV0aG9kcyAtLSovXG5cbiAgICAvLyBSZXR1cm5zIGEgbmV3IGNvcHkgb2YgdGhlIGRhdGEgYml0cyBvZiB0aGlzIHNlZ21lbnQuXG4gICAgcHVibGljIGdldERhdGEoKTogQXJyYXk8Yml0PiB7XG4gICAgICByZXR1cm4gdGhpcy5iaXREYXRhLnNsaWNlKCk7IC8vIE1ha2UgZGVmZW5zaXZlIGNvcHlcbiAgICB9XG5cbiAgICAvLyAoUGFja2FnZS1wcml2YXRlKSBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gZW5jb2RlIHRoZSBnaXZlbiBzZWdtZW50cyBhdFxuICAgIC8vIHRoZSBnaXZlbiB2ZXJzaW9uLiBUaGUgcmVzdWx0IGlzIGluZmluaXR5IGlmIGEgc2VnbWVudCBoYXMgdG9vIG1hbnkgY2hhcmFjdGVycyB0byBmaXQgaXRzIGxlbmd0aCBmaWVsZC5cbiAgICBwdWJsaWMgc3RhdGljIGdldFRvdGFsQml0cyhzZWdzOiBSZWFkb25seTxBcnJheTxRclNlZ21lbnQ+PiwgdmVyc2lvbjogaW50KTogbnVtYmVyIHtcbiAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgZm9yIChjb25zdCBzZWcgb2Ygc2Vncykge1xuICAgICAgICBjb25zdCBjY2JpdHM6IGludCA9IHNlZy5tb2RlLm51bUNoYXJDb3VudEJpdHModmVyc2lvbik7XG4gICAgICAgIGlmIChzZWcubnVtQ2hhcnMgPj0gMSA8PCBjY2JpdHMpIHJldHVybiBJbmZpbml0eTsgLy8gVGhlIHNlZ21lbnQncyBsZW5ndGggZG9lc24ndCBmaXQgdGhlIGZpZWxkJ3MgYml0IHdpZHRoXG4gICAgICAgIHJlc3VsdCArPSA0ICsgY2NiaXRzICsgc2VnLmJpdERhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGEgbmV3IGFycmF5IG9mIGJ5dGVzIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gc3RyaW5nIGVuY29kZWQgaW4gVVRGLTguXG4gICAgcHJpdmF0ZSBzdGF0aWMgdG9VdGY4Qnl0ZUFycmF5KHN0cjogc3RyaW5nKTogQXJyYXk8Ynl0ZT4ge1xuICAgICAgc3RyID0gZW5jb2RlVVJJKHN0cik7XG4gICAgICBsZXQgcmVzdWx0OiBBcnJheTxieXRlPiA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHN0ci5jaGFyQXQoaSkgIT0gJyUnKSByZXN1bHQucHVzaChzdHIuY2hhckNvZGVBdChpKSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHN0ci5zdWJzdHJpbmcoaSArIDEsIGkgKyAzKSwgMTYpKTtcbiAgICAgICAgICBpICs9IDI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyotLSBDb25zdGFudHMgLS0qL1xuXG4gICAgLy8gRGVzY3JpYmVzIHByZWNpc2VseSBhbGwgc3RyaW5ncyB0aGF0IGFyZSBlbmNvZGFibGUgaW4gbnVtZXJpYyBtb2RlLlxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE5VTUVSSUNfUkVHRVg6IFJlZ0V4cCA9IC9eWzAtOV0qJC87XG5cbiAgICAvLyBEZXNjcmliZXMgcHJlY2lzZWx5IGFsbCBzdHJpbmdzIHRoYXQgYXJlIGVuY29kYWJsZSBpbiBhbHBoYW51bWVyaWMgbW9kZS5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBTFBIQU5VTUVSSUNfUkVHRVg6IFJlZ0V4cCA9IC9eW0EtWjAtOSAkJSorLlxcLzotXSokLztcblxuICAgIC8vIFRoZSBzZXQgb2YgYWxsIGxlZ2FsIGNoYXJhY3RlcnMgaW4gYWxwaGFudW1lcmljIG1vZGUsXG4gICAgLy8gd2hlcmUgZWFjaCBjaGFyYWN0ZXIgdmFsdWUgbWFwcyB0byB0aGUgaW5kZXggaW4gdGhlIHN0cmluZy5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBTFBIQU5VTUVSSUNfQ0hBUlNFVDogc3RyaW5nID0gJzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAkJSorLS4vOic7XG4gIH1cbn1cblxuLyotLS0tIFB1YmxpYyBoZWxwZXIgZW51bWVyYXRpb24gLS0tLSovXG5cbm5hbWVzcGFjZSBxcmNvZGVnZW4uUXJDb2RlIHtcbiAgdHlwZSBpbnQgPSBudW1iZXI7XG5cbiAgLypcbiAgICogVGhlIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgaW4gYSBRUiBDb2RlIHN5bWJvbC4gSW1tdXRhYmxlLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIEVjYyB7XG4gICAgLyotLSBDb25zdGFudHMgLS0qL1xuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBMT1cgPSBuZXcgRWNjKDAsIDEpOyAvLyBUaGUgUVIgQ29kZSBjYW4gdG9sZXJhdGUgYWJvdXQgIDclIGVycm9uZW91cyBjb2Rld29yZHNcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1FRElVTSA9IG5ldyBFY2MoMSwgMCk7IC8vIFRoZSBRUiBDb2RlIGNhbiB0b2xlcmF0ZSBhYm91dCAxNSUgZXJyb25lb3VzIGNvZGV3b3Jkc1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUVVBUlRJTEUgPSBuZXcgRWNjKDIsIDMpOyAvLyBUaGUgUVIgQ29kZSBjYW4gdG9sZXJhdGUgYWJvdXQgMjUlIGVycm9uZW91cyBjb2Rld29yZHNcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhJR0ggPSBuZXcgRWNjKDMsIDIpOyAvLyBUaGUgUVIgQ29kZSBjYW4gdG9sZXJhdGUgYWJvdXQgMzAlIGVycm9uZW91cyBjb2Rld29yZHNcblxuICAgIC8qLS0gQ29uc3RydWN0b3IgYW5kIGZpZWxkcyAtLSovXG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgICAgLy8gSW4gdGhlIHJhbmdlIDAgdG8gMyAodW5zaWduZWQgMi1iaXQgaW50ZWdlcikuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb3JkaW5hbDogaW50LFxuICAgICAgLy8gKFBhY2thZ2UtcHJpdmF0ZSkgSW4gdGhlIHJhbmdlIDAgdG8gMyAodW5zaWduZWQgMi1iaXQgaW50ZWdlcikuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybWF0Qml0czogaW50XG4gICAgKSB7fVxuICB9XG59XG5cbi8qLS0tLSBQdWJsaWMgaGVscGVyIGVudW1lcmF0aW9uIC0tLS0qL1xuXG5uYW1lc3BhY2UgcXJjb2RlZ2VuLlFyU2VnbWVudCB7XG4gIHR5cGUgaW50ID0gbnVtYmVyO1xuXG4gIC8qXG4gICAqIERlc2NyaWJlcyBob3cgYSBzZWdtZW50J3MgZGF0YSBiaXRzIGFyZSBpbnRlcnByZXRlZC4gSW1tdXRhYmxlLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIE1vZGUge1xuICAgIC8qLS0gQ29uc3RhbnRzIC0tKi9cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTlVNRVJJQyA9IG5ldyBNb2RlKDB4MSwgWzEwLCAxMiwgMTRdKTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMUEhBTlVNRVJJQyA9IG5ldyBNb2RlKDB4MiwgWzksIDExLCAxM10pO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQllURSA9IG5ldyBNb2RlKDB4NCwgWzgsIDE2LCAxNl0pO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgS0FOSkkgPSBuZXcgTW9kZSgweDgsIFs4LCAxMCwgMTJdKTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVDSSA9IG5ldyBNb2RlKDB4NywgWzAsIDAsIDBdKTtcblxuICAgIC8qLS0gQ29uc3RydWN0b3IgYW5kIGZpZWxkcyAtLSovXG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgICAgLy8gVGhlIG1vZGUgaW5kaWNhdG9yIGJpdHMsIHdoaWNoIGlzIGEgdWludDQgdmFsdWUgKHJhbmdlIDAgdG8gMTUpLlxuICAgICAgcHVibGljIHJlYWRvbmx5IG1vZGVCaXRzOiBpbnQsXG4gICAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVyIGNvdW50IGJpdHMgZm9yIHRocmVlIGRpZmZlcmVudCB2ZXJzaW9uIHJhbmdlcy5cbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtQml0c0NoYXJDb3VudDogW2ludCwgaW50LCBpbnRdXG4gICAgKSB7fVxuXG4gICAgLyotLSBNZXRob2QgLS0qL1xuXG4gICAgLy8gKFBhY2thZ2UtcHJpdmF0ZSkgUmV0dXJucyB0aGUgYml0IHdpZHRoIG9mIHRoZSBjaGFyYWN0ZXIgY291bnQgZmllbGQgZm9yIGEgc2VnbWVudCBpblxuICAgIC8vIHRoaXMgbW9kZSBpbiBhIFFSIENvZGUgYXQgdGhlIGdpdmVuIHZlcnNpb24gbnVtYmVyLiBUaGUgcmVzdWx0IGlzIGluIHRoZSByYW5nZSBbMCwgMTZdLlxuICAgIHB1YmxpYyBudW1DaGFyQ291bnRCaXRzKHZlcjogaW50KTogaW50IHtcbiAgICAgIHJldHVybiB0aGlzLm51bUJpdHNDaGFyQ291bnRbTWF0aC5mbG9vcigodmVyICsgNykgLyAxNyldO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBxcmNvZGVnZW47XG4iXX0=
|
|
872
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJjb2RlZ2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliL3FyY29kZS9xcmNvZGVnZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILFlBQVksQ0FBQztBQUViLElBQVUsU0FBUyxDQTIxQmxCO0FBMzFCRCxXQUFVLFNBQVM7SUFLakIsa0NBQWtDO0lBRWxDOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILE1BQWEsTUFBTTtRQUNqQiwrQ0FBK0M7UUFFL0Msb0dBQW9HO1FBQ3BHLDJHQUEyRztRQUMzRywrR0FBK0c7UUFDL0csNkdBQTZHO1FBQzdHLGlFQUFpRTtRQUMxRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQVksRUFBRSxHQUFlO1lBQ3BELE1BQU0sSUFBSSxHQUFxQixTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RSxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCw0RkFBNEY7UUFDNUYsdUdBQXVHO1FBQ3ZHLHVHQUF1RztRQUN2RyxvSEFBb0g7UUFDN0csTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUEyQixFQUFFLEdBQWU7WUFDckUsTUFBTSxHQUFHLEdBQWMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELDhDQUE4QztRQUU5Qyx3RkFBd0Y7UUFDeEYsZ0ZBQWdGO1FBQ2hGLGdGQUFnRjtRQUNoRiwrRUFBK0U7UUFDL0UsOEVBQThFO1FBQzlFLCtFQUErRTtRQUMvRSxzRkFBc0Y7UUFDdEYsOEVBQThFO1FBQzlFLGtGQUFrRjtRQUMzRSxNQUFN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LEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUM3RyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2FBQ25ELEVBQUUsTUFBTTtZQUNUO2dCQUNFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtnQkFDOUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTthQUNuRCxFQUFFLFNBQVM7WUFDWjtnQkFDRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQzlHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7YUFDbkQsRUFBRSxXQUFXO1lBQ2Q7Z0JBQ0UsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUM5RyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2FBQ25ELEVBQUUsT0FBTztTQUNYLEFBbkI4QyxDQW1CN0M7aUJBRXNCLGdDQUEyQixHQUFzQjtZQUN2RSw4RUFBOEU7WUFDOUUsbUxBQW1MO1lBQ25MO2dCQUNFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtnQkFDL0csRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTthQUMzQixFQUFFLE1BQU07WUFDVDtnQkFDRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQzVHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7YUFDdkMsRUFBRSxTQUFTO1lBQ1o7Z0JBQ0UsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFF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QzFDLFNBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ2xDLFVBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ25DLFFBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEQsZ0NBQWdDO1lBRWhDO1lBQ0UsbUVBQW1FO1lBQ25ELFFBQWE7WUFDN0IscUVBQXFFO1lBQ3BELGdCQUFpQztnQkFGbEMsYUFBUSxHQUFSLFFBQVEsQ0FBSztnQkFFWixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1lBQ2pELENBQUM7WUFFSixnQkFBZ0I7WUFFaEIsd0ZBQXdGO1lBQ3hGLDBGQUEwRjtZQUNuRixnQkFBZ0IsQ0FBQyxHQUFRO2dCQUM5QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0QsQ0FBQzs7UUF4QlUsY0FBSSxPQXlCaEIsQ0FBQTtJQUNILENBQUMsRUFoQ21CLFNBQVMsR0FBVCxtQkFBUyxLQUFULG1CQUFTLFFBZ0M1QjtBQUFELENBQUMsRUFoQ1MsU0FBUyxLQUFULFNBQVMsUUFnQ2xCO0FBRUQsZUFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUVIgQ29kZSBnZW5lcmF0b3IgbGlicmFyeSAoVHlwZVNjcmlwdClcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIFByb2plY3QgTmF5dWtpLiAoTUlUIExpY2Vuc2UpXG4gKiBodHRwczovL3d3dy5uYXl1a2kuaW8vcGFnZS9xci1jb2RlLWdlbmVyYXRvci1saWJyYXJ5XG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZlxuICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpblxuICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0b1xuICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2ZcbiAqIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbiAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICogLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqIC0gVGhlIFNvZnR3YXJlIGlzIHByb3ZpZGVkIFwiYXMgaXNcIiwgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZXhwcmVzcyBvclxuICogICBpbXBsaWVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSxcbiAqICAgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbmluZnJpbmdlbWVudC4gSW4gbm8gZXZlbnQgc2hhbGwgdGhlXG4gKiAgIGF1dGhvcnMgb3IgY29weXJpZ2h0IGhvbGRlcnMgYmUgbGlhYmxlIGZvciBhbnkgY2xhaW0sIGRhbWFnZXMgb3Igb3RoZXJcbiAqICAgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGFuIGFjdGlvbiBvZiBjb250cmFjdCwgdG9ydCBvciBvdGhlcndpc2UsIGFyaXNpbmcgZnJvbSxcbiAqICAgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgU29mdHdhcmUgb3IgdGhlIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGVcbiAqICAgU29mdHdhcmUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5uYW1lc3BhY2UgcXJjb2RlZ2VuIHtcbiAgdHlwZSBiaXQgPSBudW1iZXI7XG4gIHR5cGUgYnl0ZSA9IG51bWJlcjtcbiAgdHlwZSBpbnQgPSBudW1iZXI7XG5cbiAgLyotLS0tIFFSIENvZGUgc3ltYm9sIGNsYXNzIC0tLS0qL1xuXG4gIC8qXG4gICAqIEEgUVIgQ29kZSBzeW1ib2wsIHdoaWNoIGlzIGEgdHlwZSBvZiB0d28tZGltZW5zaW9uIGJhcmNvZGUuXG4gICAqIEludmVudGVkIGJ5IERlbnNvIFdhdmUgYW5kIGRlc2NyaWJlZCBpbiB0aGUgSVNPL0lFQyAxODAwNCBzdGFuZGFyZC5cbiAgICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGFuIGltbXV0YWJsZSBzcXVhcmUgZ3JpZCBvZiBkYXJrIGFuZCBsaWdodCBjZWxscy5cbiAgICogVGhlIGNsYXNzIHByb3ZpZGVzIHN0YXRpYyBmYWN0b3J5IGZ1bmN0aW9ucyB0byBjcmVhdGUgYSBRUiBDb2RlIGZyb20gdGV4dCBvciBiaW5hcnkgZGF0YS5cbiAgICogVGhlIGNsYXNzIGNvdmVycyB0aGUgUVIgQ29kZSBNb2RlbCAyIHNwZWNpZmljYXRpb24sIHN1cHBvcnRpbmcgYWxsIHZlcnNpb25zIChzaXplcylcbiAgICogZnJvbSAxIHRvIDQwLCBhbGwgNCBlcnJvciBjb3JyZWN0aW9uIGxldmVscywgYW5kIDQgY2hhcmFjdGVyIGVuY29kaW5nIG1vZGVzLlxuICAgKlxuICAgKiBXYXlzIHRvIGNyZWF0ZSBhIFFSIENvZGUgb2JqZWN0OlxuICAgKiAtIEhpZ2ggbGV2ZWw6IFRha2UgdGhlIHBheWxvYWQgZGF0YSBhbmQgY2FsbCBRckNvZGUuZW5jb2RlVGV4dCgpIG9yIFFyQ29kZS5lbmNvZGVCaW5hcnkoKS5cbiAgICogLSBNaWQgbGV2ZWw6IEN1c3RvbS1tYWtlIHRoZSBsaXN0IG9mIHNlZ21lbnRzIGFuZCBjYWxsIFFyQ29kZS5lbmNvZGVTZWdtZW50cygpLlxuICAgKiAtIExvdyBsZXZlbDogQ3VzdG9tLW1ha2UgdGhlIGFycmF5IG9mIGRhdGEgY29kZXdvcmQgYnl0ZXMgKGluY2x1ZGluZ1xuICAgKiAgIHNlZ21lbnQgaGVhZGVycyBhbmQgZmluYWwgcGFkZGluZywgZXhjbHVkaW5nIGVycm9yIGNvcnJlY3Rpb24gY29kZXdvcmRzKSxcbiAgICogICBzdXBwbHkgdGhlIGFwcHJvcHJpYXRlIHZlcnNpb24gbnVtYmVyLCBhbmQgY2FsbCB0aGUgUXJDb2RlKCkgY29uc3RydWN0b3IuXG4gICAqIChOb3RlIHRoYXQgYWxsIHdheXMgcmVxdWlyZSBzdXBwbHlpbmcgdGhlIGRlc2lyZWQgZXJyb3IgY29ycmVjdGlvbiBsZXZlbC4pXG4gICAqL1xuICBleHBvcnQgY2xhc3MgUXJDb2RlIHtcbiAgICAvKi0tIFN0YXRpYyBmYWN0b3J5IGZ1bmN0aW9ucyAoaGlnaCBsZXZlbCkgLS0qL1xuXG4gICAgLy8gUmV0dXJucyBhIFFSIENvZGUgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBVbmljb2RlIHRleHQgc3RyaW5nIGF0IHRoZSBnaXZlbiBlcnJvciBjb3JyZWN0aW9uIGxldmVsLlxuICAgIC8vIEFzIGEgY29uc2VydmF0aXZlIHVwcGVyIGJvdW5kLCB0aGlzIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gc3VjY2VlZCBmb3Igc3RyaW5ncyB0aGF0IGhhdmUgNzM4IG9yIGZld2VyXG4gICAgLy8gVW5pY29kZSBjb2RlIHBvaW50cyAobm90IFVURi0xNiBjb2RlIHVuaXRzKSBpZiB0aGUgbG93IGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgaXMgdXNlZC4gVGhlIHNtYWxsZXN0IHBvc3NpYmxlXG4gICAgLy8gUVIgQ29kZSB2ZXJzaW9uIGlzIGF1dG9tYXRpY2FsbHkgY2hvc2VuIGZvciB0aGUgb3V0cHV0LiBUaGUgRUNDIGxldmVsIG9mIHRoZSByZXN1bHQgbWF5IGJlIGhpZ2hlciB0aGFuIHRoZVxuICAgIC8vIGVjbCBhcmd1bWVudCBpZiBpdCBjYW4gYmUgZG9uZSB3aXRob3V0IGluY3JlYXNpbmcgdGhlIHZlcnNpb24uXG4gICAgcHVibGljIHN0YXRpYyBlbmNvZGVUZXh0KHRleHQ6IHN0cmluZywgZWNsOiBRckNvZGUuRWNjKTogUXJDb2RlIHtcbiAgICAgIGNvbnN0IHNlZ3M6IEFycmF5PFFyU2VnbWVudD4gPSBxcmNvZGVnZW4uUXJTZWdtZW50Lm1ha2VTZWdtZW50cyh0ZXh0KTtcbiAgICAgIHJldHVybiBRckNvZGUuZW5jb2RlU2VnbWVudHMoc2VncywgZWNsKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGEgUVIgQ29kZSByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGJpbmFyeSBkYXRhIGF0IHRoZSBnaXZlbiBlcnJvciBjb3JyZWN0aW9uIGxldmVsLlxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWx3YXlzIGVuY29kZXMgdXNpbmcgdGhlIGJpbmFyeSBzZWdtZW50IG1vZGUsIG5vdCBhbnkgdGV4dCBtb2RlLiBUaGUgbWF4aW11bSBudW1iZXIgb2ZcbiAgICAvLyBieXRlcyBhbGxvd2VkIGlzIDI5NTMuIFRoZSBzbWFsbGVzdCBwb3NzaWJsZSBRUiBDb2RlIHZlcnNpb24gaXMgYXV0b21hdGljYWxseSBjaG9zZW4gZm9yIHRoZSBvdXRwdXQuXG4gICAgLy8gVGhlIEVDQyBsZXZlbCBvZiB0aGUgcmVzdWx0IG1heSBiZSBoaWdoZXIgdGhhbiB0aGUgZWNsIGFyZ3VtZW50IGlmIGl0IGNhbiBiZSBkb25lIHdpdGhvdXQgaW5jcmVhc2luZyB0aGUgdmVyc2lvbi5cbiAgICBwdWJsaWMgc3RhdGljIGVuY29kZUJpbmFyeShkYXRhOiBSZWFkb25seTxBcnJheTxieXRlPj4sIGVjbDogUXJDb2RlLkVjYyk6IFFyQ29kZSB7XG4gICAgICBjb25zdCBzZWc6IFFyU2VnbWVudCA9IHFyY29kZWdlbi5RclNlZ21lbnQubWFrZUJ5dGVzKGRhdGEpO1xuICAgICAgcmV0dXJuIFFyQ29kZS5lbmNvZGVTZWdtZW50cyhbc2VnXSwgZWNsKTtcbiAgICB9XG5cbiAgICAvKi0tIFN0YXRpYyBmYWN0b3J5IGZ1bmN0aW9ucyAobWlkIGxldmVsKSAtLSovXG5cbiAgICAvLyBSZXR1cm5zIGEgUVIgQ29kZSByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHNlZ21lbnRzIHdpdGggdGhlIGdpdmVuIGVuY29kaW5nIHBhcmFtZXRlcnMuXG4gICAgLy8gVGhlIHNtYWxsZXN0IHBvc3NpYmxlIFFSIENvZGUgdmVyc2lvbiB3aXRoaW4gdGhlIGdpdmVuIHJhbmdlIGlzIGF1dG9tYXRpY2FsbHlcbiAgICAvLyBjaG9zZW4gZm9yIHRoZSBvdXRwdXQuIElmZiBib29zdEVjbCBpcyB0cnVlLCB0aGVuIHRoZSBFQ0MgbGV2ZWwgb2YgdGhlIHJlc3VsdFxuICAgIC8vIG1heSBiZSBoaWdoZXIgdGhhbiB0aGUgZWNsIGFyZ3VtZW50IGlmIGl0IGNhbiBiZSBkb25lIHdpdGhvdXQgaW5jcmVhc2luZyB0aGVcbiAgICAvLyB2ZXJzaW9uLiBUaGUgbWFzayBudW1iZXIgaXMgZWl0aGVyIGJldHdlZW4gMCB0byA3IChpbmNsdXNpdmUpIHRvIGZvcmNlIHRoYXRcbiAgICAvLyBtYXNrLCBvciAtMSB0byBhdXRvbWF0aWNhbGx5IGNob29zZSBhbiBhcHByb3ByaWF0ZSBtYXNrICh3aGljaCBtYXkgYmUgc2xvdykuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gY3JlYXRlIGEgY3VzdG9tIHNlcXVlbmNlIG9mIHNlZ21lbnRzIHRoYXQgc3dpdGNoZXNcbiAgICAvLyBiZXR3ZWVuIG1vZGVzIChzdWNoIGFzIGFscGhhbnVtZXJpYyBhbmQgYnl0ZSkgdG8gZW5jb2RlIHRleHQgaW4gbGVzcyBzcGFjZS5cbiAgICAvLyBUaGlzIGlzIGEgbWlkLWxldmVsIEFQSTsgdGhlIGhpZ2gtbGV2ZWwgQVBJIGlzIGVuY29kZVRleHQoKSBhbmQgZW5jb2RlQmluYXJ5KCkuXG4gICAgcHVibGljIHN0YXRpYyBlbmNvZGVTZWdtZW50cyhcbiAgICAgIHNlZ3M6IFJlYWRvbmx5PEFycmF5PFFyU2VnbWVudD4+LFxuICAgICAgZWNsOiBRckNvZGUuRWNjLFxuICAgICAgbWluVmVyc2lvbjogaW50ID0gMSxcbiAgICAgIG1heFZlcnNpb246IGludCA9IDQwLFxuICAgICAgbWFzazogaW50ID0gLTEsXG4gICAgICBib29zdEVjbDogYm9vbGVhbiA9IHRydWVcbiAgICApOiBRckNvZGUge1xuICAgICAgaWYgKFxuICAgICAgICAhKFFyQ29kZS5NSU5fVkVSU0lPTiA8PSBtaW5WZXJzaW9uICYmIG1pblZlcnNpb24gPD0gbWF4VmVyc2lvbiAmJiBtYXhWZXJzaW9uIDw9IFFyQ29kZS5NQVhfVkVSU0lPTikgfHxcbiAgICAgICAgbWFzayA8IC0xIHx8XG4gICAgICAgIG1hc2sgPiA3XG4gICAgICApXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHZhbHVlJyk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIG1pbmltYWwgdmVyc2lvbiBudW1iZXIgdG8gdXNlXG4gICAgICBsZXQgdmVyc2lvbjogaW50O1xuICAgICAgbGV0IGRhdGFVc2VkQml0czogaW50O1xuICAgICAgZm9yICh2ZXJzaW9uID0gbWluVmVyc2lvbjsgOyB2ZXJzaW9uKyspIHtcbiAgICAgICAgY29uc3QgZGF0YUNhcGFjaXR5Qml0czogaW50ID0gUXJDb2RlLmdldE51bURhdGFDb2Rld29yZHModmVyc2lvbiwgZWNsKSAqIDg7IC8vIE51bWJlciBvZiBkYXRhIGJpdHMgYXZhaWxhYmxlXG4gICAgICAgIGNvbnN0IHVzZWRCaXRzOiBudW1iZXIgPSBRclNlZ21lbnQuZ2V0VG90YWxCaXRzKHNlZ3MsIHZlcnNpb24pO1xuICAgICAgICBpZiAodXNlZEJpdHMgPD0gZGF0YUNhcGFjaXR5Qml0cykge1xuICAgICAgICAgIGRhdGFVc2VkQml0cyA9IHVzZWRCaXRzO1xuICAgICAgICAgIGJyZWFrOyAvLyBUaGlzIHZlcnNpb24gbnVtYmVyIGlzIGZvdW5kIHRvIGJlIHN1aXRhYmxlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZlcnNpb24gPj0gbWF4VmVyc2lvbilcbiAgICAgICAgICAvLyBBbGwgdmVyc2lvbnMgaW4gdGhlIHJhbmdlIGNvdWxkIG5vdCBmaXQgdGhlIGdpdmVuIGRhdGFcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGF0YSB0b28gbG9uZycpO1xuICAgICAgfVxuXG4gICAgICAvLyBJbmNyZWFzZSB0aGUgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCB3aGlsZSB0aGUgZGF0YSBzdGlsbCBmaXRzIGluIHRoZSBjdXJyZW50IHZlcnNpb24gbnVtYmVyXG4gICAgICBmb3IgKGNvbnN0IG5ld0VjbCBvZiBbUXJDb2RlLkVjYy5NRURJVU0sIFFyQ29kZS5FY2MuUVVBUlRJTEUsIFFyQ29kZS5FY2MuSElHSF0pIHtcbiAgICAgICAgLy8gRnJvbSBsb3cgdG8gaGlnaFxuICAgICAgICBpZiAoYm9vc3RFY2wgJiYgZGF0YVVzZWRCaXRzIDw9IFFyQ29kZS5nZXROdW1EYXRhQ29kZXdvcmRzKHZlcnNpb24sIG5ld0VjbCkgKiA4KSBlY2wgPSBuZXdFY2w7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbmNhdGVuYXRlIGFsbCBzZWdtZW50cyB0byBjcmVhdGUgdGhlIGRhdGEgYml0IHN0cmluZ1xuICAgICAgbGV0IGJiOiBBcnJheTxiaXQ+ID0gW107XG4gICAgICBmb3IgKGNvbnN0IHNlZyBvZiBzZWdzKSB7XG4gICAgICAgIGFwcGVuZEJpdHMoc2VnLm1vZGUubW9kZUJpdHMsIDQsIGJiKTtcbiAgICAgICAgYXBwZW5kQml0cyhzZWcubnVtQ2hhcnMsIHNlZy5tb2RlLm51bUNoYXJDb3VudEJpdHModmVyc2lvbiksIGJiKTtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIHNlZy5nZXREYXRhKCkpIGJiLnB1c2goYik7XG4gICAgICB9XG4gICAgICBhc3NlcnQoYmIubGVuZ3RoID09IGRhdGFVc2VkQml0cyk7XG5cbiAgICAgIC8vIEFkZCB0ZXJtaW5hdG9yIGFuZCBwYWQgdXAgdG8gYSBieXRlIGlmIGFwcGxpY2FibGVcbiAgICAgIGNvbnN0IGRhdGFDYXBhY2l0eUJpdHM6IGludCA9IFFyQ29kZS5nZXROdW1EYXRhQ29kZXdvcmRzKHZlcnNpb24sIGVjbCkgKiA4O1xuICAgICAgYXNzZXJ0KGJiLmxlbmd0aCA8PSBkYXRhQ2FwYWNpdHlCaXRzKTtcbiAgICAgIGFwcGVuZEJpdHMoMCwgTWF0aC5taW4oNCwgZGF0YUNhcGFjaXR5Qml0cyAtIGJiLmxlbmd0aCksIGJiKTtcbiAgICAgIGFwcGVuZEJpdHMoMCwgKDggLSAoYmIubGVuZ3RoICUgOCkpICUgOCwgYmIpO1xuICAgICAgYXNzZXJ0KGJiLmxlbmd0aCAlIDggPT0gMCk7XG5cbiAgICAgIC8vIFBhZCB3aXRoIGFsdGVybmF0aW5nIGJ5dGVzIHVudGlsIGRhdGEgY2FwYWNpdHkgaXMgcmVhY2hlZFxuICAgICAgZm9yIChsZXQgcGFkQnl0ZSA9IDB4ZWM7IGJiLmxlbmd0aCA8IGRhdGFDYXBhY2l0eUJpdHM7IHBhZEJ5dGUgXj0gMHhlYyBeIDB4MTEpIGFwcGVuZEJpdHMocGFkQnl0ZSwgOCwgYmIpO1xuXG4gICAgICAvLyBQYWNrIGJpdHMgaW50byBieXRlcyBpbiBiaWcgZW5kaWFuXG4gICAgICBsZXQgZGF0YUNvZGV3b3JkczogQXJyYXk8Ynl0ZT4gPSBbXTtcbiAgICAgIHdoaWxlIChkYXRhQ29kZXdvcmRzLmxlbmd0aCAqIDggPCBiYi5sZW5ndGgpIGRhdGFDb2Rld29yZHMucHVzaCgwKTtcbiAgICAgIGJiLmZvckVhY2goKGI6IGJpdCwgaTogaW50KSA9PiAoZGF0YUNvZGV3b3Jkc1tpID4+PiAzXSB8PSBiIDw8ICg3IC0gKGkgJiA3KSkpKTtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBRUiBDb2RlIG9iamVjdFxuICAgICAgcmV0dXJuIG5ldyBRckNvZGUodmVyc2lvbiwgZWNsLCBkYXRhQ29kZXdvcmRzLCBtYXNrKTtcbiAgICB9XG5cbiAgICAvKi0tIEZpZWxkcyAtLSovXG5cbiAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGlzIFFSIENvZGUsIG1lYXN1cmVkIGluIG1vZHVsZXMsIGJldHdlZW5cbiAgICAvLyAyMSBhbmQgMTc3IChpbmNsdXNpdmUpLiBUaGlzIGlzIGVxdWFsIHRvIHZlcnNpb24gKiA0ICsgMTcuXG4gICAgcHVibGljIHJlYWRvbmx5IHNpemU6IGludDtcblxuICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgbWFzayBwYXR0ZXJuIHVzZWQgaW4gdGhpcyBRUiBDb2RlLCB3aGljaCBpcyBiZXR3ZWVuIDAgYW5kIDcgKGluY2x1c2l2ZSkuXG4gICAgLy8gRXZlbiBpZiBhIFFSIENvZGUgaXMgY3JlYXRlZCB3aXRoIGF1dG9tYXRpYyBtYXNraW5nIHJlcXVlc3RlZCAobWFzayA9IC0xKSxcbiAgICAvLyB0aGUgcmVzdWx0aW5nIG9iamVjdCBzdGlsbCBoYXMgYSBtYXNrIHZhbHVlIGJldHdlZW4gMCBhbmQgNy5cbiAgICBwdWJsaWMgcmVhZG9ubHkgbWFzazogaW50O1xuXG4gICAgLy8gVGhlIG1vZHVsZXMgb2YgdGhpcyBRUiBDb2RlIChmYWxzZSA9IGxpZ2h0LCB0cnVlID0gZGFyaykuXG4gICAgLy8gSW1tdXRhYmxlIGFmdGVyIGNvbnN0cnVjdG9yIGZpbmlzaGVzLiBBY2Nlc3NlZCB0aHJvdWdoIGdldE1vZHVsZSgpLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlczogQXJyYXk8QXJyYXk8Ym9vbGVhbj4+ID0gW107XG5cbiAgICAvLyBJbmRpY2F0ZXMgZnVuY3Rpb24gbW9kdWxlcyB0aGF0IGFyZSBub3Qgc3ViamVjdGVkIHRvIG1hc2tpbmcuIERpc2NhcmRlZCB3aGVuIGNvbnN0cnVjdG9yIGZpbmlzaGVzLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNGdW5jdGlvbjogQXJyYXk8QXJyYXk8Ym9vbGVhbj4+ID0gW107XG5cbiAgICAvKi0tIENvbnN0cnVjdG9yIChsb3cgbGV2ZWwpIGFuZCBmaWVsZHMgLS0qL1xuXG4gICAgLy8gQ3JlYXRlcyBhIG5ldyBRUiBDb2RlIHdpdGggdGhlIGdpdmVuIHZlcnNpb24gbnVtYmVyLFxuICAgIC8vIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwsIGRhdGEgY29kZXdvcmQgYnl0ZXMsIGFuZCBtYXNrIG51bWJlci5cbiAgICAvLyBUaGlzIGlzIGEgbG93LWxldmVsIEFQSSB0aGF0IG1vc3QgdXNlcnMgc2hvdWxkIG5vdCB1c2UgZGlyZWN0bHkuXG4gICAgLy8gQSBtaWQtbGV2ZWwgQVBJIGlzIHRoZSBlbmNvZGVTZWdtZW50cygpIGZ1bmN0aW9uLlxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgIC8vIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIFFSIENvZGUsIHdoaWNoIGlzIGJldHdlZW4gMSBhbmQgNDAgKGluY2x1c2l2ZSkuXG4gICAgICAvLyBUaGlzIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhpcyBiYXJjb2RlLlxuICAgICAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IGludCxcblxuICAgICAgLy8gVGhlIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgdXNlZCBpbiB0aGlzIFFSIENvZGUuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6IFFyQ29kZS5FY2MsXG5cbiAgICAgIGRhdGFDb2Rld29yZHM6IFJlYWRvbmx5PEFycmF5PGJ5dGU+PixcblxuICAgICAgbXNrOiBpbnRcbiAgICApIHtcbiAgICAgIC8vIENoZWNrIHNjYWxhciBhcmd1bWVudHNcbiAgICAgIGlmICh2ZXJzaW9uIDwgUXJDb2RlLk1JTl9WRVJTSU9OIHx8IHZlcnNpb24gPiBRckNvZGUuTUFYX1ZFUlNJT04pXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZXJzaW9uIHZhbHVlIG91dCBvZiByYW5nZScpO1xuICAgICAgaWYgKG1zayA8IC0xIHx8IG1zayA+IDcpIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXNrIHZhbHVlIG91dCBvZiByYW5nZScpO1xuICAgICAgdGhpcy5zaXplID0gdmVyc2lvbiAqIDQgKyAxNztcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBib3RoIGdyaWRzIHRvIGJlIHNpemUqc2l6ZSBhcnJheXMgb2YgQm9vbGVhbiBmYWxzZVxuICAgICAgbGV0IHJvdzogQXJyYXk8Ym9vbGVhbj4gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIHJvdy5wdXNoKGZhbHNlKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLnB1c2gocm93LnNsaWNlKCkpOyAvLyBJbml0aWFsbHkgYWxsIGxpZ2h0XG4gICAgICAgIHRoaXMuaXNGdW5jdGlvbi5wdXNoKHJvdy5zbGljZSgpKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcHV0ZSBFQ0MsIGRyYXcgbW9kdWxlc1xuICAgICAgdGhpcy5kcmF3RnVuY3Rpb25QYXR0ZXJucygpO1xuICAgICAgY29uc3QgYWxsQ29kZXdvcmRzOiBBcnJheTxieXRlPiA9IHRoaXMuYWRkRWNjQW5kSW50ZXJsZWF2ZShkYXRhQ29kZXdvcmRzKTtcbiAgICAgIHRoaXMuZHJhd0NvZGV3b3JkcyhhbGxDb2Rld29yZHMpO1xuXG4gICAgICAvLyBEbyBtYXNraW5nXG4gICAgICBpZiAobXNrID09IC0xKSB7XG4gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgY2hvb3NlIGJlc3QgbWFza1xuICAgICAgICBsZXQgbWluUGVuYWx0eTogaW50ID0gMTAwMDAwMDAwMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgICB0aGlzLmFwcGx5TWFzayhpKTtcbiAgICAgICAgICB0aGlzLmRyYXdGb3JtYXRCaXRzKGkpO1xuICAgICAgICAgIGNvbnN0IHBlbmFsdHk6IGludCA9IHRoaXMuZ2V0UGVuYWx0eVNjb3JlKCk7XG4gICAgICAgICAgaWYgKHBlbmFsdHkgPCBtaW5QZW5hbHR5KSB7XG4gICAgICAgICAgICBtc2sgPSBpO1xuICAgICAgICAgICAgbWluUGVuYWx0eSA9IHBlbmFsdHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYXBwbHlNYXNrKGkpOyAvLyBVbmRvZXMgdGhlIG1hc2sgZHVlIHRvIFhPUlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhc3NlcnQobXNrID49IDAgJiYgbXNrIDw9IDcpO1xuICAgICAgdGhpcy5tYXNrID0gbXNrO1xuICAgICAgdGhpcy5hcHBseU1hc2sobXNrKTsgLy8gQXBwbHkgdGhlIGZpbmFsIGNob2ljZSBvZiBtYXNrXG4gICAgICB0aGlzLmRyYXdGb3JtYXRCaXRzKG1zayk7IC8vIE92ZXJ3cml0ZSBvbGQgZm9ybWF0IGJpdHNcblxuICAgICAgdGhpcy5pc0Z1bmN0aW9uID0gW107XG4gICAgfVxuXG4gICAgLyotLSBBY2Nlc3NvciBtZXRob2RzIC0tKi9cblxuICAgIC8vIFJldHVybnMgdGhlIGNvbG9yIG9mIHRoZSBtb2R1bGUgKHBpeGVsKSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMsIHdoaWNoIGlzIGZhbHNlXG4gICAgLy8gZm9yIGxpZ2h0IG9yIHRydWUgZm9yIGRhcmsuIFRoZSB0b3AgbGVmdCBjb3JuZXIgaGFzIHRoZSBjb29yZGluYXRlcyAoeD0wLCB5PTApLlxuICAgIC8vIElmIHRoZSBnaXZlbiBjb29yZGluYXRlcyBhcmUgb3V0IG9mIGJvdW5kcywgdGhlbiBmYWxzZSAobGlnaHQpIGlzIHJldHVybmVkLlxuICAgIHB1YmxpYyBnZXRNb2R1bGUoeDogaW50LCB5OiBpbnQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB4ID49IDAgJiYgeCA8IHRoaXMuc2l6ZSAmJiB5ID49IDAgJiYgeSA8IHRoaXMuc2l6ZSAmJiB0aGlzLm1vZHVsZXNbeV1beF07XG4gICAgfVxuXG4gICAgLyotLSBQcml2YXRlIGhlbHBlciBtZXRob2RzIGZvciBjb25zdHJ1Y3RvcjogRHJhd2luZyBmdW5jdGlvbiBtb2R1bGVzIC0tKi9cblxuICAgIC8vIFJlYWRzIHRoaXMgb2JqZWN0J3MgdmVyc2lvbiBmaWVsZCwgYW5kIGRyYXdzIGFuZCBtYXJrcyBhbGwgZnVuY3Rpb24gbW9kdWxlcy5cbiAgICBwcml2YXRlIGRyYXdGdW5jdGlvblBhdHRlcm5zKCk6IHZvaWQge1xuICAgICAgLy8gRHJhdyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCB0aW1pbmcgcGF0dGVybnNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIHtcbiAgICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg2LCBpLCBpICUgMiA9PSAwKTtcbiAgICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZShpLCA2LCBpICUgMiA9PSAwKTtcbiAgICAgIH1cblxuICAgICAgLy8gRHJhdyAzIGZpbmRlciBwYXR0ZXJucyAoYWxsIGNvcm5lcnMgZXhjZXB0IGJvdHRvbSByaWdodDsgb3ZlcndyaXRlcyBzb21lIHRpbWluZyBtb2R1bGVzKVxuICAgICAgdGhpcy5kcmF3RmluZGVyUGF0dGVybigzLCAzKTtcbiAgICAgIHRoaXMuZHJhd0ZpbmRlclBhdHRlcm4odGhpcy5zaXplIC0gNCwgMyk7XG4gICAgICB0aGlzLmRyYXdGaW5kZXJQYXR0ZXJuKDMsIHRoaXMuc2l6ZSAtIDQpO1xuXG4gICAgICAvLyBEcmF3IG51bWVyb3VzIGFsaWdubWVudCBwYXR0ZXJuc1xuICAgICAgY29uc3QgYWxpZ25QYXRQb3M6IEFycmF5PGludD4gPSB0aGlzLmdldEFsaWdubWVudFBhdHRlcm5Qb3NpdGlvbnMoKTtcbiAgICAgIGNvbnN0IG51bUFsaWduOiBpbnQgPSBhbGlnblBhdFBvcy5sZW5ndGg7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUFsaWduOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1BbGlnbjsgaisrKSB7XG4gICAgICAgICAgLy8gRG9uJ3QgZHJhdyBvbiB0aGUgdGhyZWUgZmluZGVyIGNvcm5lcnNcbiAgICAgICAgICBpZiAoISgoaSA9PSAwICYmIGogPT0gMCkgfHwgKGkgPT0gMCAmJiBqID09IG51bUFsaWduIC0gMSkgfHwgKGkgPT0gbnVtQWxpZ24gLSAxICYmIGogPT0gMCkpKVxuICAgICAgICAgICAgdGhpcy5kcmF3QWxpZ25tZW50UGF0dGVybihhbGlnblBhdFBvc1tpXSwgYWxpZ25QYXRQb3Nbal0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIERyYXcgY29uZmlndXJhdGlvbiBkYXRhXG4gICAgICB0aGlzLmRyYXdGb3JtYXRCaXRzKDApOyAvLyBEdW1teSBtYXNrIHZhbHVlOyBvdmVyd3JpdHRlbiBsYXRlciBpbiB0aGUgY29uc3RydWN0b3JcbiAgICAgIHRoaXMuZHJhd1ZlcnNpb24oKTtcbiAgICB9XG5cbiAgICAvLyBEcmF3cyB0d28gY29waWVzIG9mIHRoZSBmb3JtYXQgYml0cyAod2l0aCBpdHMgb3duIGVycm9yIGNvcnJlY3Rpb24gY29kZSlcbiAgICAvLyBiYXNlZCBvbiB0aGUgZ2l2ZW4gbWFzayBhbmQgdGhpcyBvYmplY3QncyBlcnJvciBjb3JyZWN0aW9uIGxldmVsIGZpZWxkLlxuICAgIHByaXZhdGUgZHJhd0Zvcm1hdEJpdHMobWFzazogaW50KTogdm9pZCB7XG4gICAgICAvLyBDYWxjdWxhdGUgZXJyb3IgY29ycmVjdGlvbiBjb2RlIGFuZCBwYWNrIGJpdHNcbiAgICAgIGNvbnN0IGRhdGE6IGludCA9ICh0aGlzLmVycm9yQ29ycmVjdGlvbkxldmVsLmZvcm1hdEJpdHMgPDwgMykgfCBtYXNrOyAvLyBlcnJDb3JyTHZsIGlzIHVpbnQyLCBtYXNrIGlzIHVpbnQzXG4gICAgICBsZXQgcmVtOiBpbnQgPSBkYXRhO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSByZW0gPSAocmVtIDw8IDEpIF4gKChyZW0gPj4+IDkpICogMHg1MzcpO1xuICAgICAgY29uc3QgYml0cyA9ICgoZGF0YSA8PCAxMCkgfCByZW0pIF4gMHg1NDEyOyAvLyB1aW50MTVcbiAgICAgIGFzc2VydChiaXRzID4+PiAxNSA9PSAwKTtcblxuICAgICAgLy8gRHJhdyBmaXJzdCBjb3B5XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSA1OyBpKyspIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgaSwgZ2V0Qml0KGJpdHMsIGkpKTtcbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgNywgZ2V0Qml0KGJpdHMsIDYpKTtcbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgOCwgZ2V0Qml0KGJpdHMsIDcpKTtcbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoNywgOCwgZ2V0Qml0KGJpdHMsIDgpKTtcbiAgICAgIGZvciAobGV0IGkgPSA5OyBpIDwgMTU7IGkrKykgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSgxNCAtIGksIDgsIGdldEJpdChiaXRzLCBpKSk7XG5cbiAgICAgIC8vIERyYXcgc2Vjb25kIGNvcHlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKHRoaXMuc2l6ZSAtIDEgLSBpLCA4LCBnZXRCaXQoYml0cywgaSkpO1xuICAgICAgZm9yIChsZXQgaSA9IDg7IGkgPCAxNTsgaSsrKSB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDgsIHRoaXMuc2l6ZSAtIDE1ICsgaSwgZ2V0Qml0KGJpdHMsIGkpKTtcbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgdGhpcy5zaXplIC0gOCwgdHJ1ZSk7IC8vIEFsd2F5cyBkYXJrXG4gICAgfVxuXG4gICAgLy8gRHJhd3MgdHdvIGNvcGllcyBvZiB0aGUgdmVyc2lvbiBiaXRzICh3aXRoIGl0cyBvd24gZXJyb3IgY29ycmVjdGlvbiBjb2RlKSxcbiAgICAvLyBiYXNlZCBvbiB0aGlzIG9iamVjdCdzIHZlcnNpb24gZmllbGQsIGlmZiA3IDw9IHZlcnNpb24gPD0gNDAuXG4gICAgcHJpdmF0ZSBkcmF3VmVyc2lvbigpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnZlcnNpb24gPCA3KSByZXR1cm47XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3JyZWN0aW9uIGNvZGUgYW5kIHBhY2sgYml0c1xuICAgICAgbGV0IHJlbTogaW50ID0gdGhpcy52ZXJzaW9uOyAvLyB2ZXJzaW9uIGlzIHVpbnQ2LCBpbiB0aGUgcmFuZ2UgWzcsIDQwXVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSByZW0gPSAocmVtIDw8IDEpIF4gKChyZW0gPj4+IDExKSAqIDB4MWYyNSk7XG4gICAgICBjb25zdCBiaXRzOiBpbnQgPSAodGhpcy52ZXJzaW9uIDw8IDEyKSB8IHJlbTsgLy8gdWludDE4XG4gICAgICBhc3NlcnQoYml0cyA+Pj4gMTggPT0gMCk7XG5cbiAgICAgIC8vIERyYXcgdHdvIGNvcGllc1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxODsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yOiBib29sZWFuID0gZ2V0Qml0KGJpdHMsIGkpO1xuICAgICAgICBjb25zdCBhOiBpbnQgPSB0aGlzLnNpemUgLSAxMSArIChpICUgMyk7XG4gICAgICAgIGNvbnN0IGI6IGludCA9IE1hdGguZmxvb3IoaSAvIDMpO1xuICAgICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKGEsIGIsIGNvbG9yKTtcbiAgICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZShiLCBhLCBjb2xvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRHJhd3MgYSA5KjkgZmluZGVyIHBhdHRlcm4gaW5jbHVkaW5nIHRoZSBib3JkZXIgc2VwYXJhdG9yLFxuICAgIC8vIHdpdGggdGhlIGNlbnRlciBtb2R1bGUgYXQgKHgsIHkpLiBNb2R1bGVzIGNhbiBiZSBvdXQgb2YgYm91bmRzLlxuICAgIHByaXZhdGUgZHJhd0ZpbmRlclBhdHRlcm4oeDogaW50LCB5OiBpbnQpOiB2b2lkIHtcbiAgICAgIGZvciAobGV0IGR5ID0gLTQ7IGR5IDw9IDQ7IGR5KyspIHtcbiAgICAgICAgZm9yIChsZXQgZHggPSAtNDsgZHggPD0gNDsgZHgrKykge1xuICAgICAgICAgIGNvbnN0IGRpc3Q6IGludCA9IE1hdGgubWF4KE1hdGguYWJzKGR4KSwgTWF0aC5hYnMoZHkpKTsgLy8gQ2hlYnlzaGV2L2luZmluaXR5IG5vcm1cbiAgICAgICAgICBjb25zdCB4eDogaW50ID0geCArIGR4O1xuICAgICAgICAgIGNvbnN0IHl5OiBpbnQgPSB5ICsgZHk7XG4gICAgICAgICAgaWYgKHh4ID49IDAgJiYgeHggPCB0aGlzLnNpemUgJiYgeXkgPj0gMCAmJiB5eSA8IHRoaXMuc2l6ZSlcbiAgICAgICAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoeHgsIHl5LCBkaXN0ICE9IDIgJiYgZGlzdCAhPSA0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERyYXdzIGEgNSo1IGFsaWdubWVudCBwYXR0ZXJuLCB3aXRoIHRoZSBjZW50ZXIgbW9kdWxlXG4gICAgLy8gYXQgKHgsIHkpLiBBbGwgbW9kdWxlcyBtdXN0IGJlIGluIGJvdW5kcy5cbiAgICBwcml2YXRlIGRyYXdBbGlnbm1lbnRQYXR0ZXJuKHg6IGludCwgeTogaW50KTogdm9pZCB7XG4gICAgICBmb3IgKGxldCBkeSA9IC0yOyBkeSA8PSAyOyBkeSsrKSB7XG4gICAgICAgIGZvciAobGV0IGR4ID0gLTI7IGR4IDw9IDI7IGR4KyspXG4gICAgICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSh4ICsgZHgsIHkgKyBkeSwgTWF0aC5tYXgoTWF0aC5hYnMoZHgpLCBNYXRoLmFicyhkeSkpICE9IDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIGNvbG9yIG9mIGEgbW9kdWxlIGFuZCBtYXJrcyBpdCBhcyBhIGZ1bmN0aW9uIG1vZHVsZS5cbiAgICAvLyBPbmx5IHVzZWQgYnkgdGhlIGNvbnN0cnVjdG9yLiBDb29yZGluYXRlcyBtdXN0IGJlIGluIGJvdW5kcy5cbiAgICBwcml2YXRlIHNldEZ1bmN0aW9uTW9kdWxlKHg6IGludCwgeTogaW50LCBpc0Rhcms6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgIHRoaXMubW9kdWxlc1t5XVt4XSA9IGlzRGFyaztcbiAgICAgIHRoaXMuaXNGdW5jdGlvblt5XVt4XSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyotLSBQcml2YXRlIGhlbHBlciBtZXRob2RzIGZvciBjb25zdHJ1Y3RvcjogQ29kZXdvcmRzIGFuZCBtYXNraW5nIC0tKi9cblxuICAgIC8vIFJldHVybnMgYSBuZXcgYnl0ZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBkYXRhIHdpdGggdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvcnJlY3Rpb25cbiAgICAvLyBjb2Rld29yZHMgYXBwZW5kZWQgdG8gaXQsIGJhc2VkIG9uIHRoaXMgb2JqZWN0J3MgdmVyc2lvbiBhbmQgZXJyb3IgY29ycmVjdGlvbiBsZXZlbC5cbiAgICBwcml2YXRlIGFkZEVjY0FuZEludGVybGVhdmUoZGF0YTogUmVhZG9ubHk8QXJyYXk8Ynl0ZT4+KTogQXJyYXk8Ynl0ZT4ge1xuICAgICAgY29uc3QgdmVyOiBpbnQgPSB0aGlzLnZlcnNpb247XG4gICAgICBjb25zdCBlY2w6IFFyQ29kZS5FY2MgPSB0aGlzLmVycm9yQ29ycmVjdGlvbkxldmVsO1xuICAgICAgaWYgKGRhdGEubGVuZ3RoICE9IFFyQ29kZS5nZXROdW1EYXRhQ29kZXdvcmRzKHZlciwgZWNsKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQnKTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHBhcmFtZXRlciBudW1iZXJzXG4gICAgICBjb25zdCBudW1CbG9ja3M6IGludCA9IFFyQ29kZS5OVU1fRVJST1JfQ09SUkVDVElPTl9CTE9DS1NbZWNsLm9yZGluYWxdW3Zlcl07XG4gICAgICBjb25zdCBibG9ja0VjY0xlbjogaW50ID0gUXJDb2RlLkVDQ19DT0RFV09SRFNfUEVSX0JMT0NLW2VjbC5vcmRpbmFsXVt2ZXJdO1xuICAgICAgY29uc3QgcmF3Q29kZXdvcmRzOiBpbnQgPSBNYXRoLmZsb29yKFFyQ29kZS5nZXROdW1SYXdEYXRhTW9kdWxlcyh2ZXIpIC8gOCk7XG4gICAgICBjb25zdCBudW1TaG9ydEJsb2NrczogaW50ID0gbnVtQmxvY2tzIC0gKHJhd0NvZGV3b3JkcyAlIG51bUJsb2Nrcyk7XG4gICAgICBjb25zdCBzaG9ydEJsb2NrTGVuOiBpbnQgPSBNYXRoLmZsb29yKHJhd0NvZGV3b3JkcyAvIG51bUJsb2Nrcyk7XG5cbiAgICAgIC8vIFNwbGl0IGRhdGEgaW50byBibG9ja3MgYW5kIGFwcGVuZCBFQ0MgdG8gZWFjaCBibG9ja1xuICAgICAgbGV0IGJsb2NrczogQXJyYXk8QXJyYXk8Ynl0ZT4+ID0gW107XG4gICAgICBjb25zdCByc0RpdjogQXJyYXk8Ynl0ZT4gPSBRckNvZGUucmVlZFNvbG9tb25Db21wdXRlRGl2aXNvcihibG9ja0VjY0xlbik7XG4gICAgICBmb3IgKGxldCBpID0gMCwgayA9IDA7IGkgPCBudW1CbG9ja3M7IGkrKykge1xuICAgICAgICBsZXQgZGF0OiBBcnJheTxieXRlPiA9IGRhdGEuc2xpY2UoaywgayArIHNob3J0QmxvY2tMZW4gLSBibG9ja0VjY0xlbiArIChpIDwgbnVtU2hvcnRCbG9ja3MgPyAwIDogMSkpO1xuICAgICAgICBrICs9IGRhdC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGVjYzogQXJyYXk8Ynl0ZT4gPSBRckNvZGUucmVlZFNvbG9tb25Db21wdXRlUmVtYWluZGVyKGRhdCwgcnNEaXYpO1xuICAgICAgICBpZiAoaSA8IG51bVNob3J0QmxvY2tzKSBkYXQucHVzaCgwKTtcbiAgICAgICAgYmxvY2tzLnB1c2goZGF0LmNvbmNhdChlY2MpKTtcbiAgICAgIH1cblxuICAgICAgLy8gSW50ZXJsZWF2ZSAobm90IGNvbmNhdGVuYXRlKSB0aGUgYnl0ZXMgZnJvbSBldmVyeSBibG9jayBpbnRvIGEgc2luZ2xlIHNlcXVlbmNlXG4gICAgICBsZXQgcmVzdWx0OiBBcnJheTxieXRlPiA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9ja3NbMF0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYmxvY2tzLmZvckVhY2goKGJsb2NrLCBqKSA9PiB7XG4gICAgICAgICAgLy8gU2tpcCB0aGUgcGFkZGluZyBieXRlIGluIHNob3J0IGJsb2Nrc1xuICAgICAgICAgIGlmIChpICE9IHNob3J0QmxvY2tMZW4gLSBibG9ja0VjY0xlbiB8fCBqID49IG51bVNob3J0QmxvY2tzKSByZXN1bHQucHVzaChibG9ja1tpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYXNzZXJ0KHJlc3VsdC5sZW5ndGggPT0gcmF3Q29kZXdvcmRzKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gRHJhd3MgdGhlIGdpdmVuIHNlcXVlbmNlIG9mIDgtYml0IGNvZGV3b3JkcyAoZGF0YSBhbmQgZXJyb3IgY29ycmVjdGlvbikgb250byB0aGUgZW50aXJlXG4gICAgLy8gZGF0YSBhcmVhIG9mIHRoaXMgUVIgQ29kZS4gRnVuY3Rpb24gbW9kdWxlcyBuZWVkIHRvIGJlIG1hcmtlZCBvZmYgYmVmb3JlIHRoaXMgaXMgY2FsbGVkLlxuICAgIHByaXZhdGUgZHJhd0NvZGV3b3JkcyhkYXRhOiBSZWFkb25seTxBcnJheTxieXRlPj4pOiB2b2lkIHtcbiAgICAgIGlmIChkYXRhLmxlbmd0aCAhPSBNYXRoLmZsb29yKFFyQ29kZS5nZXROdW1SYXdEYXRhTW9kdWxlcyh0aGlzLnZlcnNpb24pIC8gOCkpXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50Jyk7XG4gICAgICBsZXQgaTogaW50ID0gMDsgLy8gQml0IGluZGV4IGludG8gdGhlIGRhdGFcbiAgICAgIC8vIERvIHRoZSBmdW5ueSB6aWd6YWcgc2NhblxuICAgICAgZm9yIChsZXQgcmlnaHQgPSB0aGlzLnNpemUgLSAxOyByaWdodCA+PSAxOyByaWdodCAtPSAyKSB7XG4gICAgICAgIC8vIEluZGV4IG9mIHJpZ2h0IGNvbHVtbiBpbiBlYWNoIGNvbHVtbiBwYWlyXG4gICAgICAgIGlmIChyaWdodCA9PSA2KSByaWdodCA9IDU7XG4gICAgICAgIGZvciAobGV0IHZlcnQgPSAwOyB2ZXJ0IDwgdGhpcy5zaXplOyB2ZXJ0KyspIHtcbiAgICAgICAgICAvLyBWZXJ0aWNhbCBjb3VudGVyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAyOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHg6IGludCA9IHJpZ2h0IC0gajsgLy8gQWN0dWFsIHggY29vcmRpbmF0ZVxuICAgICAgICAgICAgY29uc3QgdXB3YXJkOiBib29sZWFuID0gKChyaWdodCArIDEpICYgMikgPT0gMDtcbiAgICAgICAgICAgIGNvbnN0IHk6IGludCA9IHVwd2FyZCA/IHRoaXMuc2l6ZSAtIDEgLSB2ZXJ0IDogdmVydDsgLy8gQWN0dWFsIHkgY29vcmRpbmF0ZVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRnVuY3Rpb25beV1beF0gJiYgaSA8IGRhdGEubGVuZ3RoICogOCkge1xuICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbeV1beF0gPSBnZXRCaXQoZGF0YVtpID4+PiAzXSwgNyAtIChpICYgNykpO1xuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGlzIFFSIENvZGUgaGFzIGFueSByZW1haW5kZXIgYml0cyAoMCB0byA3KSwgdGhleSB3ZXJlIGFzc2lnbmVkIGFzXG4gICAgICAgICAgICAvLyAwL2ZhbHNlL2xpZ2h0IGJ5IHRoZSBjb25zdHJ1Y3RvciBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIGJ5IHRoaXMgbWV0aG9kXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhc3NlcnQoaSA9PSBkYXRhLmxlbmd0aCAqIDgpO1xuICAgIH1cblxuICAgIC8vIFhPUnMgdGhlIGNvZGV3b3JkIG1vZHVsZXMgaW4gdGhpcyBRUiBDb2RlIHdpdGggdGhlIGdpdmVuIG1hc2sgcGF0dGVybi5cbiAgICAvLyBUaGUgZnVuY3Rpb24gbW9kdWxlcyBtdXN0IGJlIG1hcmtlZCBhbmQgdGhlIGNvZGV3b3JkIGJpdHMgbXVzdCBiZSBkcmF3blxuICAgIC8vIGJlZm9yZSBtYXNraW5nLiBEdWUgdG8gdGhlIGFyaXRobWV0aWMgb2YgWE9SLCBjYWxsaW5nIGFwcGx5TWFzaygpIHdpdGhcbiAgICAvLyB0aGUgc2FtZSBtYXNrIHZhbHVlIGEgc2Vjb25kIHRpbWUgd2lsbCB1bmRvIHRoZSBtYXNrLiBBIGZpbmFsIHdlbGwtZm9ybWVkXG4gICAgLy8gUVIgQ29kZSBuZWVkcyBleGFjdGx5IG9uZSAobm90IHplcm8sIHR3bywgZXRjLikgbWFzayBhcHBsaWVkLlxuICAgIHByaXZhdGUgYXBwbHlNYXNrKG1hc2s6IGludCk6IHZvaWQge1xuICAgICAgaWYgKG1hc2sgPCAwIHx8IG1hc2sgPiA3KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWFzayB2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zaXplOyB5KyspIHtcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykge1xuICAgICAgICAgIGxldCBpbnZlcnQ6IGJvb2xlYW47XG4gICAgICAgICAgc3dpdGNoIChtYXNrKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGludmVydCA9ICh4ICsgeSkgJSAyID09IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBpbnZlcnQgPSB5ICUgMiA9PSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgaW52ZXJ0ID0geCAlIDMgPT0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGludmVydCA9ICh4ICsgeSkgJSAzID09IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICBpbnZlcnQgPSAoTWF0aC5mbG9vcih4IC8gMykgKyBNYXRoLmZsb29yKHkgLyAyKSkgJSAyID09IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBpbnZlcnQgPSAoKHggKiB5KSAlIDIpICsgKCh4ICogeSkgJSAzKSA9PSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgaW52ZXJ0ID0gKCgoeCAqIHkpICUgMikgKyAoKHggKiB5KSAlIDMpKSAlIDIgPT0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgIGludmVydCA9ICgoKHggKyB5KSAlIDIpICsgKCh4ICogeSkgJSAzKSkgJSAyID09IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnJlYWNoYWJsZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuaXNGdW5jdGlvblt5XVt4XSAmJiBpbnZlcnQpIHRoaXMubW9kdWxlc1t5XVt4XSA9ICF0aGlzLm1vZHVsZXNbeV1beF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBwZW5hbHR5IHNjb3JlIGJhc2VkIG9uIHN0YXRlIG9mIHRoaXMgUVIgQ29kZSdzIGN1cnJlbnQgbW9kdWxlcy5cbiAgICAvLyBUaGlzIGlzIHVzZWQgYnkgdGhlIGF1dG9tYXRpYyBtYXNrIGNob2ljZSBhbGdvcml0aG0gdG8gZmluZCB0aGUgbWFzayBwYXR0ZXJuIHRoYXQgeWllbGRzIHRoZSBsb3dlc3Qgc2NvcmUuXG4gICAgcHJpdmF0ZSBnZXRQZW5hbHR5U2NvcmUoKTogaW50IHtcbiAgICAgIGxldCByZXN1bHQ6IGludCA9IDA7XG5cbiAgICAgIC8vIEFkamFjZW50IG1vZHVsZXMgaW4gcm93IGhhdmluZyBzYW1lIGNvbG9yLCBhbmQgZmluZGVyLWxpa2UgcGF0dGVybnNcbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zaXplOyB5KyspIHtcbiAgICAgICAgbGV0IHJ1bkNvbG9yID0gZmFsc2U7XG4gICAgICAgIGxldCBydW5YID0gMDtcbiAgICAgICAgbGV0IHJ1bkhpc3RvcnkgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zaXplOyB4KyspIHtcbiAgICAgICAgICBpZiAodGhpcy5tb2R1bGVzW3ldW3hdID09IHJ1bkNvbG9yKSB7XG4gICAgICAgICAgICBydW5YKys7XG4gICAgICAgICAgICBpZiAocnVuWCA9PSA1KSByZXN1bHQgKz0gUXJDb2RlLlBFTkFMVFlfTjE7XG4gICAgICAgICAgICBlbHNlIGlmIChydW5YID4gNSkgcmVzdWx0Kys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuWCwgcnVuSGlzdG9yeSk7XG4gICAgICAgICAgICBpZiAoIXJ1bkNvbG9yKSByZXN1bHQgKz0gdGhpcy5maW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5KSAqIFFyQ29kZS5QRU5BTFRZX04zO1xuICAgICAgICAgICAgcnVuQ29sb3IgPSB0aGlzLm1vZHVsZXNbeV1beF07XG4gICAgICAgICAgICBydW5YID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ICs9IHRoaXMuZmluZGVyUGVuYWx0eVRlcm1pbmF0ZUFuZENvdW50KHJ1bkNvbG9yLCBydW5YLCBydW5IaXN0b3J5KSAqIFFyQ29kZS5QRU5BTFRZX04zO1xuICAgICAgfVxuICAgICAgLy8gQWRqYWNlbnQgbW9kdWxlcyBpbiBjb2x1bW4gaGF2aW5nIHNhbWUgY29sb3IsIGFuZCBmaW5kZXItbGlrZSBwYXR0ZXJuc1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykge1xuICAgICAgICBsZXQgcnVuQ29sb3IgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJ1blkgPSAwO1xuICAgICAgICBsZXQgcnVuSGlzdG9yeSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykge1xuICAgICAgICAgIGlmICh0aGlzLm1vZHVsZXNbeV1beF0gPT0gcnVuQ29sb3IpIHtcbiAgICAgICAgICAgIHJ1blkrKztcbiAgICAgICAgICAgIGlmIChydW5ZID09IDUpIHJlc3VsdCArPSBRckNvZGUuUEVOQUxUWV9OMTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHJ1blkgPiA1KSByZXN1bHQrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maW5kZXJQZW5hbHR5QWRkSGlzdG9yeShydW5ZLCBydW5IaXN0b3J5KTtcbiAgICAgICAgICAgIGlmICghcnVuQ29sb3IpIHJlc3VsdCArPSB0aGlzLmZpbmRlclBlbmFsdHlDb3VudFBhdHRlcm5zKHJ1bkhpc3RvcnkpICogUXJDb2RlLlBFTkFMVFlfTjM7XG4gICAgICAgICAgICBydW5Db2xvciA9IHRoaXMubW9kdWxlc1t5XVt4XTtcbiAgICAgICAgICAgIHJ1blkgPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gdGhpcy5maW5kZXJQZW5hbHR5VGVybWluYXRlQW5kQ291bnQocnVuQ29sb3IsIHJ1blksIHJ1bkhpc3RvcnkpICogUXJDb2RlLlBFTkFMVFlfTjM7XG4gICAgICB9XG5cbiAgICAgIC8vIDIqMiBibG9ja3Mgb2YgbW9kdWxlcyBoYXZpbmcgc2FtZSBjb2xvclxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNpemUgLSAxOyB5KyspIHtcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnNpemUgLSAxOyB4KyspIHtcbiAgICAgICAgICBjb25zdCBjb2xvcjogYm9vbGVhbiA9IHRoaXMubW9kdWxlc1t5XVt4XTtcbiAgICAgICAgICBpZiAoY29sb3IgPT0gdGhpcy5tb2R1bGVzW3ldW3ggKyAxXSAmJiBjb2xvciA9PSB0aGlzLm1vZHVsZXNbeSArIDFdW3hdICYmIGNvbG9yID09IHRoaXMubW9kdWxlc1t5ICsgMV1beCArIDFdKVxuICAgICAgICAgICAgcmVzdWx0ICs9IFFyQ29kZS5QRU5BTFRZX04yO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJhbGFuY2Ugb2YgZGFyayBhbmQgbGlnaHQgbW9kdWxlc1xuICAgICAgbGV0IGRhcms6IGludCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLm1vZHVsZXMpIGRhcmsgPSByb3cucmVkdWNlKChzdW0sIGNvbG9yKSA9PiBzdW0gKyAoY29sb3IgPyAxIDogMCksIGRhcmspO1xuICAgICAgY29uc3QgdG90YWw6IGludCA9IHRoaXMuc2l6ZSAqIHRoaXMuc2l6ZTsgLy8gTm90ZSB0aGF0IHNpemUgaXMgb2RkLCBzbyBkYXJrL3RvdGFsICE9IDEvMlxuICAgICAgLy8gQ29tcHV0ZSB0aGUgc21hbGxlc3QgaW50ZWdlciBrID49IDAgc3VjaCB0aGF0ICg0NS01ayklIDw9IGRhcmsvdG90YWwgPD0gKDU1KzVrKSVcbiAgICAgIGNvbnN0IGs6IGludCA9IE1hdGguY2VpbChNYXRoLmFicyhkYXJrICogMjAgLSB0b3RhbCAqIDEwKSAvIHRvdGFsKSAtIDE7XG4gICAgICBhc3NlcnQoayA+PSAwICYmIGsgPD0gOSk7XG4gICAgICByZXN1bHQgKz0gayAqIFFyQ29kZS5QRU5BTFRZX040O1xuICAgICAgYXNzZXJ0KHJlc3VsdCA+PSAwICYmIHJlc3VsdCA8PSAyNTY4ODg4KTsgLy8gTm9uLXRpZ2h0IHVwcGVyIGJvdW5kIGJhc2VkIG9uIGRlZmF1bHQgdmFsdWVzIG9mIFBFTkFMVFlfTjEsIC4uLiwgTjRcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyotLSBQcml2YXRlIGhlbHBlciBmdW5jdGlvbnMgLS0qL1xuXG4gICAgLy8gUmV0dXJucyBhbiBhc2NlbmRpbmcgbGlzdCBvZiBwb3NpdGlvbnMgb2YgYWxpZ25tZW50IHBhdHRlcm5zIGZvciB0aGlzIHZlcnNpb24gbnVtYmVyLlxuICAgIC8vIEVhY2ggcG9zaXRpb24gaXMgaW4gdGhlIHJhbmdlIFswLDE3NyksIGFuZCBhcmUgdXNlZCBvbiBib3RoIHRoZSB4IGFuZCB5IGF4ZXMuXG4gICAgLy8gVGhpcyBjb3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBsb29rdXAgdGFibGUgb2YgNDAgdmFyaWFibGUtbGVuZ3RoIGxpc3RzIG9mIGludGVnZXJzLlxuICAgIHByaXZhdGUgZ2V0QWxpZ25tZW50UGF0dGVyblBvc2l0aW9ucygpOiBBcnJheTxpbnQ+IHtcbiAgICAgIGlmICh0aGlzLnZlcnNpb24gPT0gMSkgcmV0dXJuIFtdO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG51bUFsaWduOiBpbnQgPSBNYXRoLmZsb29yKHRoaXMudmVyc2lvbiAvIDcpICsgMjtcbiAgICAgICAgY29uc3Qgc3RlcDogaW50ID0gdGhpcy52ZXJzaW9uID09IDMyID8gMjYgOiBNYXRoLmNlaWwoKHRoaXMudmVyc2lvbiAqIDQgKyA0KSAvIChudW1BbGlnbiAqIDIgLSAyKSkgKiAyO1xuICAgICAgICBsZXQgcmVzdWx0OiBBcnJheTxpbnQ+ID0gWzZdO1xuICAgICAgICBmb3IgKGxldCBwb3MgPSB0aGlzLnNpemUgLSA3OyByZXN1bHQubGVuZ3RoIDwgbnVtQWxpZ247IHBvcyAtPSBzdGVwKSByZXN1bHQuc3BsaWNlKDEsIDAsIHBvcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gYSBRUiBDb2RlIG9mIHRoZSBnaXZlbiB2ZXJzaW9uIG51bWJlciwgYWZ0ZXJcbiAgICAvLyBhbGwgZnVuY3Rpb24gbW9kdWxlcyBhcmUgZXhjbHVkZWQuIFRoaXMgaW5jbHVkZXMgcmVtYWluZGVyIGJpdHMsIHNvIGl0IG1pZ2h0IG5vdCBiZSBhIG11bHRpcGxlIG9mIDguXG4gICAgLy8gVGhlIHJlc3VsdCBpcyBpbiB0aGUgcmFuZ2UgWzIwOCwgMjk2NDhdLiBUaGlzIGNvdWxkIGJlIGltcGxlbWVudGVkIGFzIGEgNDAtZW50cnkgbG9va3VwIHRhYmxlLlxuICAgIHByaXZhdGUgc3RhdGljIGdldE51bVJhd0RhdGFNb2R1bGVzKHZlcjogaW50KTogaW50IHtcbiAgICAgIGlmICh2ZXIgPCBRckNvZGUuTUlOX1ZFUlNJT04gfHwgdmVyID4gUXJDb2RlLk1BWF9WRVJTSU9OKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVmVyc2lvbiBudW1iZXIgb3V0IG9mIHJhbmdlJyk7XG4gICAgICBsZXQgcmVzdWx0OiBpbnQgPSAoMTYgKiB2ZXIgKyAxMjgpICogdmVyICsgNjQ7XG4gICAgICBpZiAodmVyID49IDIpIHtcbiAgICAgICAgY29uc3QgbnVtQWxpZ246IGludCA9IE1hdGguZmxvb3IodmVyIC8gNykgKyAyO1xuICAgICAgICByZXN1bHQgLT0gKDI1ICogbnVtQWxpZ24gLSAxMCkgKiBudW1BbGlnbiAtIDU1O1xuICAgICAgICBpZiAodmVyID49IDcpIHJlc3VsdCAtPSAzNjtcbiAgICAgIH1cbiAgICAgIGFzc2VydChyZXN1bHQgPj0gMjA4ICYmIHJlc3VsdCA8PSAyOTY0OCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiA4LWJpdCBkYXRhIChpLmUuIG5vdCBlcnJvciBjb3JyZWN0aW9uKSBjb2Rld29yZHMgY29udGFpbmVkIGluIGFueVxuICAgIC8vIFFSIENvZGUgb2YgdGhlIGdpdmVuIHZlcnNpb24gbnVtYmVyIGFuZCBlcnJvciBjb3JyZWN0aW9uIGxldmVsLCB3aXRoIHJlbWFpbmRlciBiaXRzIGRpc2NhcmRlZC5cbiAgICAvLyBUaGlzIHN0YXRlbGVzcyBwdXJlIGZ1bmN0aW9uIGNvdWxkIGJlIGltcGxlbWVudGVkIGFzIGEgKDQwKjQpLWNlbGwgbG9va3VwIHRhYmxlLlxuICAgIHByaXZhdGUgc3RhdGljIGdldE51bURhdGFDb2Rld29yZHModmVyOiBpbnQsIGVjbDogUXJDb2RlLkVjYyk6IGludCB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBNYXRoLmZsb29yKFFyQ29kZS5nZXROdW1SYXdEYXRhTW9kdWxlcyh2ZXIpIC8gOCkgLVxuICAgICAgICBRckNvZGUuRUNDX0NPREVXT1JEU19QRVJfQkxPQ0tbZWNsLm9yZGluYWxdW3Zlcl0gKiBRckNvZGUuTlVNX0VSUk9SX0NPUlJFQ1RJT05fQkxPQ0tTW2VjbC5vcmRpbmFsXVt2ZXJdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBSZWVkLVNvbG9tb24gRUNDIGdlbmVyYXRvciBwb2x5bm9taWFsIGZvciB0aGUgZ2l2ZW4gZGVncmVlLiBUaGlzIGNvdWxkIGJlXG4gICAgLy8gaW1wbGVtZW50ZWQgYXMgYSBsb29rdXAgdGFibGUgb3ZlciBhbGwgcG9zc2libGUgcGFyYW1ldGVyIHZhbHVlcywgaW5zdGVhZCBvZiBhcyBhbiBhbGdvcml0aG0uXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVlZFNvbG9tb25Db21wdXRlRGl2aXNvcihkZWdyZWU6IGludCk6IEFycmF5PGJ5dGU+IHtcbiAgICAgIGlmIChkZWdyZWUgPCAxIHx8IGRlZ3JlZSA+IDI1NSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RlZ3JlZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgIC8vIFBvbHlub21pYWwgY29lZmZpY2llbnRzIGFyZSBzdG9yZWQgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCBwb3dlciwgZXhjbHVkaW5nIHRoZSBsZWFkaW5nIHRlcm0gd2hpY2ggaXMgYWx3YXlzIDEuXG4gICAgICAvLyBGb3IgZXhhbXBsZSB0aGUgcG9seW5vbWlhbCB4XjMgKyAyNTV4XjIgKyA4eCArIDkzIGlzIHN0b3JlZCBhcyB0aGUgdWludDggYXJyYXkgWzI1NSwgOCwgOTNdLlxuICAgICAgbGV0IHJlc3VsdDogQXJyYXk8Ynl0ZT4gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVncmVlIC0gMTsgaSsrKSByZXN1bHQucHVzaCgwKTtcbiAgICAgIHJlc3VsdC5wdXNoKDEpOyAvLyBTdGFydCBvZmYgd2l0aCB0aGUgbW9ub21pYWwgeF4wXG5cbiAgICAgIC8vIENvbXB1dGUgdGhlIHByb2R1Y3QgcG9seW5vbWlhbCAoeCAtIHJeMCkgKiAoeCAtIHJeMSkgKiAoeCAtIHJeMikgKiAuLi4gKiAoeCAtIHJee2RlZ3JlZS0xfSksXG4gICAgICAvLyBhbmQgZHJvcCB0aGUgaGlnaGVzdCBtb25vbWlhbCB0ZXJtIHdoaWNoIGlzIGFsd2F5cyAxeF5kZWdyZWUuXG4gICAgICAvLyBOb3RlIHRoYXQgciA9IDB4MDIsIHdoaWNoIGlzIGEgZ2VuZXJhdG9yIGVsZW1lbnQgb2YgdGhpcyBmaWVsZCBHRigyXjgvMHgxMUQpLlxuICAgICAgbGV0IHJvb3QgPSAxO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWdyZWU7IGkrKykge1xuICAgICAgICAvLyBNdWx0aXBseSB0aGUgY3VycmVudCBwcm9kdWN0IGJ5ICh4IC0gcl5pKVxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHJlc3VsdFtqXSA9IFFyQ29kZS5yZWVkU29sb21vbk11bHRpcGx5KHJlc3VsdFtqXSwgcm9vdCk7XG4gICAgICAgICAgaWYgKGogKyAxIDwgcmVzdWx0Lmxlbmd0aCkgcmVzdWx0W2pdIF49IHJlc3VsdFtqICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgcm9vdCA9IFFyQ29kZS5yZWVkU29sb21vbk11bHRpcGx5KHJvb3QsIDB4MDIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBSZWVkLVNvbG9tb24gZXJyb3IgY29ycmVjdGlvbiBjb2Rld29yZCBmb3IgdGhlIGdpdmVuIGRhdGEgYW5kIGRpdmlzb3IgcG9seW5vbWlhbHMuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVlZFNvbG9tb25Db21wdXRlUmVtYWluZGVyKFxuICAgICAgZGF0YTogUmVhZG9ubHk8QXJyYXk8Ynl0ZT4+LFxuICAgICAgZGl2aXNvcjogUmVhZG9ubHk8QXJyYXk8Ynl0ZT4+XG4gICAgKTogQXJyYXk8Ynl0ZT4ge1xuICAgICAgbGV0IHJlc3VsdDogQXJyYXk8Ynl0ZT4gPSBkaXZpc29yLm1hcChfID0+IDApO1xuICAgICAgZm9yIChjb25zdCBiIG9mIGRhdGEpIHtcbiAgICAgICAgLy8gUG9seW5vbWlhbCBkaXZpc2lvblxuICAgICAgICBjb25zdCBmYWN0b3I6IGJ5dGUgPSBiIF4gKHJlc3VsdC5zaGlmdCgpIGFzIGJ5dGUpO1xuICAgICAgICByZXN1bHQucHVzaCgwKTtcbiAgICAgICAgZGl2aXNvci5mb3JFYWNoKChjb2VmLCBpKSA9PiAocmVzdWx0W2ldIF49IFFyQ29kZS5yZWVkU29sb21vbk11bHRpcGx5KGNvZWYsIGZhY3RvcikpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgcHJvZHVjdCBvZiB0aGUgdHdvIGdpdmVuIGZpZWxkIGVsZW1lbnRzIG1vZHVsbyBHRigyXjgvMHgxMUQpLiBUaGUgYXJndW1lbnRzIGFuZCByZXN1bHRcbiAgICAvLyBhcmUgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMuIFRoaXMgY291bGQgYmUgaW1wbGVtZW50ZWQgYXMgYSBsb29rdXAgdGFibGUgb2YgMjU2KjI1NiBlbnRyaWVzIG9mIHVpbnQ4LlxuICAgIHByaXZhdGUgc3RhdGljIHJlZWRTb2xvbW9uTXVsdGlwbHkoeDogYnl0ZSwgeTogYnl0ZSk6IGJ5dGUge1xuICAgICAgaWYgKHggPj4+IDggIT0gMCB8fCB5ID4+PiA4ICE9IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdCeXRlIG91dCBvZiByYW5nZScpO1xuICAgICAgLy8gUnVzc2lhbiBwZWFzYW50IG11bHRpcGxpY2F0aW9uXG4gICAgICBsZXQgejogaW50ID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSA3OyBpID49IDA7IGktLSkge1xuICAgICAgICB6ID0gKHogPDwgMSkgXiAoKHogPj4+IDcpICogMHgxMWQpO1xuICAgICAgICB6IF49ICgoeSA+Pj4gaSkgJiAxKSAqIHg7XG4gICAgICB9XG4gICAgICBhc3NlcnQoeiA+Pj4gOCA9PSAwKTtcbiAgICAgIHJldHVybiB6IGFzIGJ5dGU7XG4gICAgfVxuXG4gICAgLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgbGlnaHQgcnVuIGlzIGFkZGVkLCBhbmRcbiAgICAvLyByZXR1cm5zIGVpdGhlciAwLCAxLCBvciAyLiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0UGVuYWx0eVNjb3JlKCkuXG4gICAgcHJpdmF0ZSBmaW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5OiBSZWFkb25seTxBcnJheTxpbnQ+Pik6IGludCB7XG4gICAgICBjb25zdCBuOiBpbnQgPSBydW5IaXN0b3J5WzFdO1xuICAgICAgYXNzZXJ0KG4gPD0gdGhpcy5zaXplICogMyk7XG4gICAgICBjb25zdCBjb3JlOiBib29sZWFuID1cbiAgICAgICAgbiA+IDAgJiYgcnVuSGlzdG9yeVsyXSA9PSBuICYmIHJ1bkhpc3RvcnlbM10gPT0gbiAqIDMgJiYgcnVuSGlzdG9yeVs0XSA9PSBuICYmIHJ1bkhpc3RvcnlbNV0gPT0gbjtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChjb3JlICYmIHJ1bkhpc3RvcnlbMF0gPj0gbiAqIDQgJiYgcnVuSGlzdG9yeVs2XSA+PSBuID8gMSA6IDApICtcbiAgICAgICAgKGNvcmUgJiYgcnVuSGlzdG9yeVs2XSA+PSBuICogNCAmJiBydW5IaXN0b3J5WzBdID49IG4gPyAxIDogMClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTXVzdCBiZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBhIGxpbmUgKHJvdyBvciBjb2x1bW4pIG9mIG1vZHVsZXMuIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXRQZW5hbHR5U2NvcmUoKS5cbiAgICBwcml2YXRlIGZpbmRlclBlbmFsdHlUZXJtaW5hdGVBbmRDb3VudChcbiAgICAgIGN1cnJlbnRSdW5Db2xvcjogYm9vbGVhbixcbiAgICAgIGN1cnJlbnRSdW5MZW5ndGg6IGludCxcbiAgICAgIHJ1bkhpc3Rvcnk6IEFycmF5PGludD5cbiAgICApOiBpbnQge1xuICAgICAgaWYgKGN1cnJlbnRSdW5Db2xvcikge1xuICAgICAgICAvLyBUZXJtaW5hdGUgZGFyayBydW5cbiAgICAgICAgdGhpcy5maW5kZXJQZW5hbHR5QWRkSGlzdG9yeShjdXJyZW50UnVuTGVuZ3RoLCBydW5IaXN0b3J5KTtcbiAgICAgICAgY3VycmVudFJ1bkxlbmd0aCA9IDA7XG4gICAgICB9XG4gICAgICBjdXJyZW50UnVuTGVuZ3RoICs9IHRoaXMuc2l6ZTsgLy8gQWRkIGxpZ2h0IGJvcmRlciB0byBmaW5hbCBydW5cbiAgICAgIHRoaXMuZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkoY3VycmVudFJ1bkxlbmd0aCwgcnVuSGlzdG9yeSk7XG4gICAgICByZXR1cm4gdGhpcy5maW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5KTtcbiAgICB9XG5cbiAgICAvLyBQdXNoZXMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBmcm9udCBhbmQgZHJvcHMgdGhlIGxhc3QgdmFsdWUuIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXRQZW5hbHR5U2NvcmUoKS5cbiAgICBwcml2YXRlIGZpbmRlclBlbmFsdHlBZGRIaXN0b3J5KGN1cnJlbnRSdW5MZW5ndGg6IGludCwgcnVuSGlzdG9yeTogQXJyYXk8aW50Pik6IHZvaWQge1xuICAgICAgaWYgKHJ1bkhpc3RvcnlbMF0gPT0gMCkgY3VycmVudFJ1bkxlbmd0aCArPSB0aGlzLnNpemU7IC8vIEFkZCBsaWdodCBib3JkZXIgdG8gaW5pdGlhbCBydW5cbiAgICAgIHJ1bkhpc3RvcnkucG9wKCk7XG4gICAgICBydW5IaXN0b3J5LnVuc2hpZnQoY3VycmVudFJ1bkxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyotLSBDb25zdGFudHMgYW5kIHRhYmxlcyAtLSovXG5cbiAgICAvLyBUaGUgbWluaW11bSB2ZXJzaW9uIG51bWJlciBzdXBwb3J0ZWQgaW4gdGhlIFFSIENvZGUgTW9kZWwgMiBzdGFuZGFyZC5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1JTl9WRVJTSU9OOiBpbnQgPSAxO1xuICAgIC8vIFRoZSBtYXhpbXVtIHZlcnNpb24gbnVtYmVyIHN1cHBvcnRlZCBpbiB0aGUgUVIgQ29kZSBNb2RlbCAyIHN0YW5kYXJkLlxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFYX1ZFUlNJT046IGludCA9IDQwO1xuXG4gICAgLy8gRm9yIHVzZSBpbiBnZXRQZW5hbHR5U2NvcmUoKSwgd2hlbiBldmFsdWF0aW5nIHdoaWNoIG1hc2sgaXMgYmVzdC5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQRU5BTFRZX04xOiBpbnQgPSAzO1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBFTkFMVFlfTjI6IGludCA9IDM7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUEVOQUxUWV9OMzogaW50ID0gNDA7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUEVOQUxUWV9ONDogaW50ID0gMTA7XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DSzogQXJyYXk8QXJyYXk8aW50Pj4gPSBbXG4gICAgICAvLyBWZXJzaW9uOiAobm90ZSB0aGF0IGluZGV4IDAgaXMgZm9yIHBhZGRpbmcsIGFuZCBpcyBzZXQgdG8gYW4gaWxsZWdhbCB2YWx1ZSlcbiAgICAgIC8vMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAgICAgRXJyb3IgY29ycmVjdGlvbiBsZXZlbFxuICAgICAgW1xuICAgICAgICAtMSwgNywgMTAsIDE1LCAyMCwgMjYsIDE4LCAyMCwgMjQsIDMwLCAxOCwgMjAsIDI0LCAyNiwgMzAsIDIyLCAyNCwgMjgsIDMwLCAyOCwgMjgsIDI4LCAyOCwgMzAsIDMwLCAyNiwgMjgsIDMwLFxuICAgICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCxcbiAgICAgIF0sIC8vIExvd1xuICAgICAgW1xuICAgICAgICAtMSwgMTAsIDE2LCAyNiwgMTgsIDI0LCAxNiwgMTgsIDIyLCAyMiwgMjYsIDMwLCAyMiwgMjIsIDI0LCAyNCwgMjgsIDI4LCAyNiwgMjYsIDI2LCAyNiwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCxcbiAgICAgICAgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsXG4gICAgICBdLCAvLyBNZWRpdW1cbiAgICAgIFtcbiAgICAgICAgLTEsIDEzLCAyMiwgMTgsIDI2LCAxOCwgMjQsIDE4LCAyMiwgMjAsIDI0LCAyOCwgMjYsIDI0LCAyMCwgMzAsIDI0LCAyOCwgMjgsIDI2LCAzMCwgMjgsIDMwLCAzMCwgMzAsIDMwLCAyOCwgMzAsXG4gICAgICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLFxuICAgICAgXSwgLy8gUXVhcnRpbGVcbiAgICAgIFtcbiAgICAgICAgLTEsIDE3LCAyOCwgMjIsIDE2LCAyMiwgMjgsIDI2LCAyNiwgMjQsIDI4LCAyNCwgMjgsIDIyLCAyNCwgMjQsIDMwLCAyOCwgMjgsIDI2LCAyOCwgMzAsIDI0LCAzMCwgMzAsIDMwLCAzMCwgMzAsXG4gICAgICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLFxuICAgICAgXSwgLy8gSGlnaFxuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOVU1fRVJST1JfQ09SUkVDVElPTl9CTE9DS1M6IEFycmF5PEFycmF5PGludD4+ID0gW1xuICAgICAgLy8gVmVyc2lvbjogKG5vdGUgdGhhdCBpbmRleCAwIGlzIGZvciBwYWRkaW5nLCBhbmQgaXMgc2V0IHRvIGFuIGlsbGVnYWwgdmFsdWUpXG4gICAgICAvLzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAgICAgRXJyb3IgY29ycmVjdGlvbiBsZXZlbFxuICAgICAgW1xuICAgICAgICAtMSwgMSwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgNCwgNCwgNCwgNCwgNCwgNiwgNiwgNiwgNiwgNywgOCwgOCwgOSwgOSwgMTAsIDEyLCAxMiwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsXG4gICAgICAgIDE5LCAxOSwgMjAsIDIxLCAyMiwgMjQsIDI1LFxuICAgICAgXSwgLy8gTG93XG4gICAgICBbXG4gICAgICAgIC0xLCAxLCAxLCAxLCAyLCAyLCA0LCA0LCA0LCA1LCA1LCA1LCA4LCA5LCA5LCAxMCwgMTAsIDExLCAxMywgMTQsIDE2LCAxNywgMTcsIDE4LCAyMCwgMjEsIDIzLCAyNSwgMjYsIDI4LCAyOSxcbiAgICAgICAgMzEsIDMzLCAzNSwgMzcsIDM4LCA0MCwgNDMsIDQ1LCA0NywgNDksXG4gICAgICBdLCAvLyBNZWRpdW1cbiAgICAgIFtcbiAgICAgICAgLTEsIDEsIDEsIDIsIDIsIDQsIDQsIDYsIDYsIDgsIDgsIDgsIDEwLCAxMiwgMTYsIDEyLCAxNywgMTYsIDE4LCAyMSwgMjAsIDIzLCAyMywgMjUsIDI3LCAyOSwgMzQsIDM0LCAzNSwgMzgsIDQwLFxuICAgICAgICA0MywgNDUsIDQ4LCA1MSwgNTMsIDU2LCA1OSwgNjIsIDY1LCA2OCxcbiAgICAgIF0sIC8vIFF1YXJ0aWxlXG4gICAgICBbXG4gICAgICAgIC0xLCAxLCAxLCAyLCA0LCA0LCA0LCA1LCA2LCA4LCA4LCAxMSwgMTEsIDE2LCAxNiwgMTgsIDE2LCAxOSwgMjEsIDI1LCAyNSwgMjUsIDM0LCAzMCwgMzIsIDM1LCAzNywgNDAsIDQyLCA0NSxcbiAgICAgICAgNDgsIDUxLCA1NCwgNTcsIDYwLCA2MywgNjYsIDcwLCA3NCwgNzcsIDgxLFxuICAgICAgXSwgLy8gSGlnaFxuICAgIF07XG4gIH1cblxuICAvLyBBcHBlbmRzIHRoZSBnaXZlbiBudW1iZXIgb2YgbG93LW9yZGVyIGJpdHMgb2YgdGhlIGdpdmVuIHZhbHVlXG4gIC8vIHRvIHRoZSBnaXZlbiBidWZmZXIuIFJlcXVpcmVzIDAgPD0gbGVuIDw9IDMxIGFuZCAwIDw9IHZhbCA8IDJebGVuLlxuICBmdW5jdGlvbiBhcHBlbmRCaXRzKHZhbDogaW50LCBsZW46IGludCwgYmI6IEFycmF5PGJpdD4pOiB2b2lkIHtcbiAgICBpZiAobGVuIDwgMCB8fCBsZW4gPiAzMSB8fCB2YWwgPj4+IGxlbiAhPSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVmFsdWUgb3V0IG9mIHJhbmdlJyk7XG4gICAgZm9yIChcbiAgICAgIGxldCBpID0gbGVuIC0gMTtcbiAgICAgIGkgPj0gMDtcbiAgICAgIGktLSAvLyBBcHBlbmQgYml0IGJ5IGJpdFxuICAgIClcbiAgICAgIGJiLnB1c2goKHZhbCA+Pj4gaSkgJiAxKTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGkndGggYml0IG9mIHggaXMgc2V0IHRvIDEuXG4gIGZ1bmN0aW9uIGdldEJpdCh4OiBpbnQsIGk6IGludCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoKHggPj4+IGkpICYgMSkgIT0gMDtcbiAgfVxuXG4gIC8vIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIGdpdmVuIGNvbmRpdGlvbiBpcyBmYWxzZS5cbiAgZnVuY3Rpb24gYXNzZXJ0KGNvbmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbmQpIHRocm93IG5ldyBFcnJvcignQXNzZXJ0aW9uIGVycm9yJyk7XG4gIH1cblxuICAvKi0tLS0gRGF0YSBzZWdtZW50IGNsYXNzIC0tLS0qL1xuXG4gIC8qXG4gICAqIEEgc2VnbWVudCBvZiBjaGFyYWN0ZXIvYmluYXJ5L2NvbnRyb2wgZGF0YSBpbiBhIFFSIENvZGUgc3ltYm9sLlxuICAgKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgaW1tdXRhYmxlLlxuICAgKiBUaGUgbWlkLWxldmVsIHdheSB0byBjcmVhdGUgYSBzZWdtZW50IGlzIHRvIHRha2UgdGhlIHBheWxvYWQgZGF0YVxuICAgKiBhbmQgY2FsbCBhIHN0YXRpYyBmYWN0b3J5IGZ1bmN0aW9uIHN1Y2ggYXMgUXJTZWdtZW50Lm1ha2VOdW1lcmljKCkuXG4gICAqIFRoZSBsb3ctbGV2ZWwgd2F5IHRvIGNyZWF0ZSBhIHNlZ21lbnQgaXMgdG8gY3VzdG9tLW1ha2UgdGhlIGJpdCBidWZmZXJcbiAgICogYW5kIGNhbGwgdGhlIFFyU2VnbWVudCgpIGNvbnN0cnVjdG9yIHdpdGggYXBwcm9wcmlhdGUgdmFsdWVzLlxuICAgKiBUaGlzIHNlZ21lbnQgY2xhc3MgaW1wb3NlcyBubyBsZW5ndGggcmVzdHJpY3Rpb25zLCBidXQgUVIgQ29kZXMgaGF2ZSByZXN0cmljdGlvbnMuXG4gICAqIEV2ZW4gaW4gdGhlIG1vc3QgZmF2b3JhYmxlIGNvbmRpdGlvbnMsIGEgUVIgQ29kZSBjYW4gb25seSBob2xkIDcwODkgY2hhcmFjdGVycyBvZiBkYXRhLlxuICAgKiBBbnkgc2VnbWVudCBsb25nZXIgdGhhbiB0aGlzIGlzIG1lYW5pbmdsZXNzIGZvciB0aGUgcHVycG9zZSBvZiBnZW5lcmF0aW5nIFFSIENvZGVzLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIFFyU2VnbWVudCB7XG4gICAgLyotLSBTdGF0aWMgZmFjdG9yeSBmdW5jdGlvbnMgKG1pZCBsZXZlbCkgLS0qL1xuXG4gICAgLy8gUmV0dXJucyBhIHNlZ21lbnQgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBiaW5hcnkgZGF0YSBlbmNvZGVkIGluXG4gICAgLy8gYnl0ZSBtb2RlLiBBbGwgaW5wdXQgYnl0ZSBhcnJheXMgYXJlIGFjY2VwdGFibGUuIEFueSB0ZXh0IHN0cmluZ1xuICAgIC8vIGNhbiBiZSBjb252ZXJ0ZWQgdG8gVVRGLTggYnl0ZXMgYW5kIGVuY29kZWQgYXMgYSBieXRlIG1vZGUgc2VnbWVudC5cbiAgICBwdWJsaWMgc3RhdGljIG1ha2VCeXRlcyhkYXRhOiBSZWFkb25seTxBcnJheTxieXRlPj4pOiBRclNlZ21lbnQge1xuICAgICAgbGV0IGJiOiBBcnJheTxiaXQ+ID0gW107XG4gICAgICBmb3IgKGNvbnN0IGIgb2YgZGF0YSkgYXBwZW5kQml0cyhiLCA4LCBiYik7XG4gICAgICByZXR1cm4gbmV3IFFyU2VnbWVudChRclNlZ21lbnQuTW9kZS5CWVRFLCBkYXRhLmxlbmd0aCwgYmIpO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBzZWdtZW50IHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gc3RyaW5nIG9mIGRlY2ltYWwgZGlnaXRzIGVuY29kZWQgaW4gbnVtZXJpYyBtb2RlLlxuICAgIHB1YmxpYyBzdGF0aWMgbWFrZU51bWVyaWMoZGlnaXRzOiBzdHJpbmcpOiBRclNlZ21lbnQge1xuICAgICAgaWYgKCFRclNlZ21lbnQuaXNOdW1lcmljKGRpZ2l0cykpIHRocm93IG5ldyBSYW5nZUVycm9yKCdTdHJpbmcgY29udGFpbnMgbm9uLW51bWVyaWMgY2hhcmFjdGVycycpO1xuICAgICAgbGV0IGJiOiBBcnJheTxiaXQ+ID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7ICkge1xuICAgICAgICAvLyBDb25zdW1lIHVwIHRvIDMgZGlnaXRzIHBlciBpdGVyYXRpb25cbiAgICAgICAgY29uc3QgbjogaW50ID0gTWF0aC5taW4oZGlnaXRzLmxlbmd0aCAtIGksIDMpO1xuICAgICAgICBhcHBlbmRCaXRzKHBhcnNlSW50KGRpZ2l0cy5zdWJzdHJpbmcoaSwgaSArIG4pLCAxMCksIG4gKiAzICsgMSwgYmIpO1xuICAgICAgICBpICs9IG47XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFFyU2VnbWVudChRclNlZ21lbnQuTW9kZS5OVU1FUklDLCBkaWdpdHMubGVuZ3RoLCBiYik7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhIHNlZ21lbnQgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiB0ZXh0IHN0cmluZyBlbmNvZGVkIGluIGFscGhhbnVtZXJpYyBtb2RlLlxuICAgIC8vIFRoZSBjaGFyYWN0ZXJzIGFsbG93ZWQgYXJlOiAwIHRvIDksIEEgdG8gWiAodXBwZXJjYXNlIG9ubHkpLCBzcGFjZSxcbiAgICAvLyBkb2xsYXIsIHBlcmNlbnQsIGFzdGVyaXNrLCBwbHVzLCBoeXBoZW4sIHBlcmlvZCwgc2xhc2gsIGNvbG9uLlxuICAgIHB1YmxpYyBzdGF0aWMgbWFrZUFscGhhbnVtZXJpYyh0ZXh0OiBzdHJpbmcpOiBRclNlZ21lbnQge1xuICAgICAgaWYgKCFRclNlZ21lbnQuaXNBbHBoYW51bWVyaWModGV4dCkpXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdTdHJpbmcgY29udGFpbnMgdW5lbmNvZGFibGUgY2hhcmFjdGVycyBpbiBhbHBoYW51bWVyaWMgbW9kZScpO1xuICAgICAgbGV0IGJiOiBBcnJheTxiaXQ+ID0gW107XG4gICAgICBsZXQgaTogaW50O1xuICAgICAgZm9yIChpID0gMDsgaSArIDIgPD0gdGV4dC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAvLyBQcm9jZXNzIGdyb3VwcyBvZiAyXG4gICAgICAgIGxldCB0ZW1wOiBpbnQgPSBRclNlZ21lbnQuQUxQSEFOVU1FUklDX0NIQVJTRVQuaW5kZXhPZih0ZXh0LmNoYXJBdChpKSkgKiA0NTtcbiAgICAgICAgdGVtcCArPSBRclNlZ21lbnQuQUxQSEFOVU1FUklDX0NIQVJTRVQuaW5kZXhPZih0ZXh0LmNoYXJBdChpICsgMSkpO1xuICAgICAgICBhcHBlbmRCaXRzKHRlbXAsIDExLCBiYik7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IHRleHQubGVuZ3RoKVxuICAgICAgICAvLyAxIGNoYXJhY3RlciByZW1haW5pbmdcbiAgICAgICAgYXBwZW5kQml0cyhRclNlZ21lbnQuQUxQSEFOVU1FUklDX0NIQVJTRVQuaW5kZXhPZih0ZXh0LmNoYXJBdChpKSksIDYsIGJiKTtcbiAgICAgIHJldHVybiBuZXcgUXJTZWdtZW50KFFyU2VnbWVudC5Nb2RlLkFMUEhBTlVNRVJJQywgdGV4dC5sZW5ndGgsIGJiKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGEgbmV3IG11dGFibGUgbGlzdCBvZiB6ZXJvIG9yIG1vcmUgc2VnbWVudHMgdG8gcmVwcmVzZW50IHRoZSBnaXZlbiBVbmljb2RlIHRleHQgc3RyaW5nLlxuICAgIC8vIFRoZSByZXN1bHQgbWF5IHVzZSB2YXJpb3VzIHNlZ21lbnQgbW9kZXMgYW5kIHN3aXRjaCBtb2RlcyB0byBvcHRpbWl6ZSB0aGUgbGVuZ3RoIG9mIHRoZSBiaXQgc3RyZWFtLlxuICAgIHB1YmxpYyBzdGF0aWMgbWFrZVNlZ21lbnRzKHRleHQ6IHN0cmluZyk6IEFycmF5PFFyU2VnbWVudD4ge1xuICAgICAgLy8gU2VsZWN0IHRoZSBtb3N0IGVmZmljaWVudCBzZWdtZW50IGVuY29kaW5nIGF1dG9tYXRpY2FsbHlcbiAgICAgIGlmICh0ZXh0ID09ICcnKSByZXR1cm4gW107XG4gICAgICBlbHNlIGlmIChRclNlZ21lbnQuaXNOdW1lcmljKHRleHQpKSByZXR1cm4gW1FyU2VnbWVudC5tYWtlTnVtZXJpYyh0ZXh0KV07XG4gICAgICBlbHNlIGlmIChRclNlZ21lbnQuaXNBbHBoYW51bWVyaWModGV4dCkpIHJldHVybiBbUXJTZWdtZW50Lm1ha2VBbHBoYW51bWVyaWModGV4dCldO1xuICAgICAgZWxzZSByZXR1cm4gW1FyU2VnbWVudC5tYWtlQnl0ZXMoUXJTZWdtZW50LnRvVXRmOEJ5dGVBcnJheSh0ZXh0KSldO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBzZWdtZW50IHJlcHJlc2VudGluZyBhbiBFeHRlbmRlZCBDaGFubmVsIEludGVycHJldGF0aW9uXG4gICAgLy8gKEVDSSkgZGVzaWduYXRvciB3aXRoIHRoZSBnaXZlbiBhc3NpZ25tZW50IHZhbHVlLlxuICAgIHB1YmxpYyBzdGF0aWMgbWFrZUVjaShhc3NpZ25WYWw6IGludCk6IFFyU2VnbWVudCB7XG4gICAgICBsZXQgYmI6IEFycmF5PGJpdD4gPSBbXTtcbiAgICAgIGlmIChhc3NpZ25WYWwgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRUNJIGFzc2lnbm1lbnQgdmFsdWUgb3V0IG9mIHJhbmdlJyk7XG4gICAgICBlbHNlIGlmIChhc3NpZ25WYWwgPCAxIDw8IDcpIGFwcGVuZEJpdHMoYXNzaWduVmFsLCA4LCBiYik7XG4gICAgICBlbHNlIGlmIChhc3NpZ25WYWwgPCAxIDw8IDE0KSB7XG4gICAgICAgIGFwcGVuZEJpdHMoMGIxMCwgMiwgYmIpO1xuICAgICAgICBhcHBlbmRCaXRzKGFzc2lnblZhbCwgMTQsIGJiKTtcbiAgICAgIH0gZWxzZSBpZiAoYXNzaWduVmFsIDwgMTAwMDAwMCkge1xuICAgICAgICBhcHBlbmRCaXRzKDBiMTEwLCAzLCBiYik7XG4gICAgICAgIGFwcGVuZEJpdHMoYXNzaWduVmFsLCAyMSwgYmIpO1xuICAgICAgfSBlbHNlIHRocm93IG5ldyBSYW5nZUVycm9yKCdFQ0kgYXNzaWdubWVudCB2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgIHJldHVybiBuZXcgUXJTZWdtZW50KFFyU2VnbWVudC5Nb2RlLkVDSSwgMCwgYmIpO1xuICAgIH1cblxuICAgIC8vIFRlc3RzIHdoZXRoZXIgdGhlIGdpdmVuIHN0cmluZyBjYW4gYmUgZW5jb2RlZCBhcyBhIHNlZ21lbnQgaW4gbnVtZXJpYyBtb2RlLlxuICAgIC8vIEEgc3RyaW5nIGlzIGVuY29kYWJsZSBpZmYgZWFjaCBjaGFyYWN0ZXIgaXMgaW4gdGhlIHJhbmdlIDAgdG8gOS5cbiAgICBwdWJsaWMgc3RhdGljIGlzTnVtZXJpYyh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBRclNlZ21lbnQuTlVNRVJJQ19SRUdFWC50ZXN0KHRleHQpO1xuICAgIH1cblxuICAgIC8vIFRlc3RzIHdoZXRoZXIgdGhlIGdpdmVuIHN0cmluZyBjYW4gYmUgZW5jb2RlZCBhcyBhIHNlZ21lbnQgaW4gYWxwaGFudW1lcmljIG1vZGUuXG4gICAgLy8gQSBzdHJpbmcgaXMgZW5jb2RhYmxlIGlmZiBlYWNoIGNoYXJhY3RlciBpcyBpbiB0aGUgZm9sbG93aW5nIHNldDogMCB0byA5LCBBIHRvIFpcbiAgICAvLyAodXBwZXJjYXNlIG9ubHkpLCBzcGFjZSwgZG9sbGFyLCBwZXJjZW50LCBhc3RlcmlzaywgcGx1cywgaHlwaGVuLCBwZXJpb2QsIHNsYXNoLCBjb2xvbi5cbiAgICBwdWJsaWMgc3RhdGljIGlzQWxwaGFudW1lcmljKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIFFyU2VnbWVudC5BTFBIQU5VTUVSSUNfUkVHRVgudGVzdCh0ZXh0KTtcbiAgICB9XG5cbiAgICAvKi0tIENvbnN0cnVjdG9yIChsb3cgbGV2ZWwpIGFuZCBmaWVsZHMgLS0qL1xuXG4gICAgLy8gQ3JlYXRlcyBhIG5ldyBRUiBDb2RlIHNlZ21lbnQgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlcyBhbmQgZGF0YS5cbiAgICAvLyBUaGUgY2hhcmFjdGVyIGNvdW50IChudW1DaGFycykgbXVzdCBhZ3JlZSB3aXRoIHRoZSBtb2RlIGFuZCB0aGUgYml0IGJ1ZmZlciBsZW5ndGgsXG4gICAgLy8gYnV0IHRoZSBjb25zdHJhaW50IGlzbid0IGNoZWNrZWQuIFRoZSBnaXZlbiBiaXQgYnVmZmVyIGlzIGNsb25lZCBhbmQgc3RvcmVkLlxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgIC8vIFRoZSBtb2RlIGluZGljYXRvciBvZiB0aGlzIHNlZ21lbnQuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbW9kZTogUXJTZWdtZW50Lk1vZGUsXG5cbiAgICAgIC8vIFRoZSBsZW5ndGggb2YgdGhpcyBzZWdtZW50J3MgdW5lbmNvZGVkIGRhdGEuIE1lYXN1cmVkIGluIGNoYXJhY3RlcnMgZm9yXG4gICAgICAvLyBudW1lcmljL2FscGhhbnVtZXJpYy9rYW5qaSBtb2RlLCBieXRlcyBmb3IgYnl0ZSBtb2RlLCBhbmQgMCBmb3IgRUNJIG1vZGUuXG4gICAgICAvLyBBbHdheXMgemVybyBvciBwb3NpdGl2ZS4gTm90IHRoZSBzYW1lIGFzIHRoZSBkYXRhJ3MgYml0IGxlbmd0aC5cbiAgICAgIHB1YmxpYyByZWFkb25seSBudW1DaGFyczogaW50LFxuXG4gICAgICAvLyBUaGUgZGF0YSBiaXRzIG9mIHRoaXMgc2VnbWVudC4gQWNjZXNzZWQgdGhyb3VnaCBnZXREYXRhKCkuXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGJpdERhdGE6IEFycmF5PGJpdD5cbiAgICApIHtcbiAgICAgIGlmIChudW1DaGFycyA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50Jyk7XG4gICAgICB0aGlzLmJpdERhdGEgPSBiaXREYXRhLnNsaWNlKCk7IC8vIE1ha2UgZGVmZW5zaXZlIGNvcHlcbiAgICB9XG5cbiAgICAvKi0tIE1ldGhvZHMgLS0qL1xuXG4gICAgLy8gUmV0dXJucyBhIG5ldyBjb3B5IG9mIHRoZSBkYXRhIGJpdHMgb2YgdGhpcyBzZWdtZW50LlxuICAgIHB1YmxpYyBnZXREYXRhKCk6IEFycmF5PGJpdD4ge1xuICAgICAgcmV0dXJuIHRoaXMuYml0RGF0YS5zbGljZSgpOyAvLyBNYWtlIGRlZmVuc2l2ZSBjb3B5XG4gICAgfVxuXG4gICAgLy8gKFBhY2thZ2UtcHJpdmF0ZSkgQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIGVuY29kZSB0aGUgZ2l2ZW4gc2VnbWVudHMgYXRcbiAgICAvLyB0aGUgZ2l2ZW4gdmVyc2lvbi4gVGhlIHJlc3VsdCBpcyBpbmZpbml0eSBpZiBhIHNlZ21lbnQgaGFzIHRvbyBtYW55IGNoYXJhY3RlcnMgdG8gZml0IGl0cyBsZW5ndGggZmllbGQuXG4gICAgcHVibGljIHN0YXRpYyBnZXRUb3RhbEJpdHMoc2VnczogUmVhZG9ubHk8QXJyYXk8UXJTZWdtZW50Pj4sIHZlcnNpb246IGludCk6IG51bWJlciB7XG4gICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgIGZvciAoY29uc3Qgc2VnIG9mIHNlZ3MpIHtcbiAgICAgICAgY29uc3QgY2NiaXRzOiBpbnQgPSBzZWcubW9kZS5udW1DaGFyQ291bnRCaXRzKHZlcnNpb24pO1xuICAgICAgICBpZiAoc2VnLm51bUNoYXJzID49IDEgPDwgY2NiaXRzKSByZXR1cm4gSW5maW5pdHk7IC8vIFRoZSBzZWdtZW50J3MgbGVuZ3RoIGRvZXNuJ3QgZml0IHRoZSBmaWVsZCdzIGJpdCB3aWR0aFxuICAgICAgICByZXN1bHQgKz0gNCArIGNjYml0cyArIHNlZy5iaXREYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhIG5ldyBhcnJheSBvZiBieXRlcyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHN0cmluZyBlbmNvZGVkIGluIFVURi04LlxuICAgIHByaXZhdGUgc3RhdGljIHRvVXRmOEJ5dGVBcnJheShzdHI6IHN0cmluZyk6IEFycmF5PGJ5dGU+IHtcbiAgICAgIHN0ciA9IGVuY29kZVVSSShzdHIpO1xuICAgICAgbGV0IHJlc3VsdDogQXJyYXk8Ynl0ZT4gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChzdHIuY2hhckF0KGkpICE9ICclJykgcmVzdWx0LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUludChzdHIuc3Vic3RyaW5nKGkgKyAxLCBpICsgMyksIDE2KSk7XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qLS0gQ29uc3RhbnRzIC0tKi9cblxuICAgIC8vIERlc2NyaWJlcyBwcmVjaXNlbHkgYWxsIHN0cmluZ3MgdGhhdCBhcmUgZW5jb2RhYmxlIGluIG51bWVyaWMgbW9kZS5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOVU1FUklDX1JFR0VYOiBSZWdFeHAgPSAvXlswLTldKiQvO1xuXG4gICAgLy8gRGVzY3JpYmVzIHByZWNpc2VseSBhbGwgc3RyaW5ncyB0aGF0IGFyZSBlbmNvZGFibGUgaW4gYWxwaGFudW1lcmljIG1vZGUuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQUxQSEFOVU1FUklDX1JFR0VYOiBSZWdFeHAgPSAvXltBLVowLTkgJCUqKy5cXC86LV0qJC87XG5cbiAgICAvLyBUaGUgc2V0IG9mIGFsbCBsZWdhbCBjaGFyYWN0ZXJzIGluIGFscGhhbnVtZXJpYyBtb2RlLFxuICAgIC8vIHdoZXJlIGVhY2ggY2hhcmFjdGVyIHZhbHVlIG1hcHMgdG8gdGhlIGluZGV4IGluIHRoZSBzdHJpbmcuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQUxQSEFOVU1FUklDX0NIQVJTRVQ6IHN0cmluZyA9ICcwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogJCUqKy0uLzonO1xuICB9XG59XG5cbi8qLS0tLSBQdWJsaWMgaGVscGVyIGVudW1lcmF0aW9uIC0tLS0qL1xuXG5uYW1lc3BhY2UgcXJjb2RlZ2VuLlFyQ29kZSB7XG4gIHR5cGUgaW50ID0gbnVtYmVyO1xuXG4gIC8qXG4gICAqIFRoZSBlcnJvciBjb3JyZWN0aW9uIGxldmVsIGluIGEgUVIgQ29kZSBzeW1ib2wuIEltbXV0YWJsZS5cbiAgICovXG4gIGV4cG9ydCBjbGFzcyBFY2Mge1xuICAgIC8qLS0gQ29uc3RhbnRzIC0tKi9cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTE9XID0gbmV3IEVjYygwLCAxKTsgLy8gVGhlIFFSIENvZGUgY2FuIHRvbGVyYXRlIGFib3V0ICA3JSBlcnJvbmVvdXMgY29kZXdvcmRzXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRURJVU0gPSBuZXcgRWNjKDEsIDApOyAvLyBUaGUgUVIgQ29kZSBjYW4gdG9sZXJhdGUgYWJvdXQgMTUlIGVycm9uZW91cyBjb2Rld29yZHNcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFFVQVJUSUxFID0gbmV3IEVjYygyLCAzKTsgLy8gVGhlIFFSIENvZGUgY2FuIHRvbGVyYXRlIGFib3V0IDI1JSBlcnJvbmVvdXMgY29kZXdvcmRzXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBISUdIID0gbmV3IEVjYygzLCAyKTsgLy8gVGhlIFFSIENvZGUgY2FuIHRvbGVyYXRlIGFib3V0IDMwJSBlcnJvbmVvdXMgY29kZXdvcmRzXG5cbiAgICAvKi0tIENvbnN0cnVjdG9yIGFuZCBmaWVsZHMgLS0qL1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgIC8vIEluIHRoZSByYW5nZSAwIHRvIDMgKHVuc2lnbmVkIDItYml0IGludGVnZXIpLlxuICAgICAgcHVibGljIHJlYWRvbmx5IG9yZGluYWw6IGludCxcbiAgICAgIC8vIChQYWNrYWdlLXByaXZhdGUpIEluIHRoZSByYW5nZSAwIHRvIDMgKHVuc2lnbmVkIDItYml0IGludGVnZXIpLlxuICAgICAgcHVibGljIHJlYWRvbmx5IGZvcm1hdEJpdHM6IGludFxuICAgICkge31cbiAgfVxufVxuXG4vKi0tLS0gUHVibGljIGhlbHBlciBlbnVtZXJhdGlvbiAtLS0tKi9cblxubmFtZXNwYWNlIHFyY29kZWdlbi5RclNlZ21lbnQge1xuICB0eXBlIGludCA9IG51bWJlcjtcblxuICAvKlxuICAgKiBEZXNjcmliZXMgaG93IGEgc2VnbWVudCdzIGRhdGEgYml0cyBhcmUgaW50ZXJwcmV0ZWQuIEltbXV0YWJsZS5cbiAgICovXG4gIGV4cG9ydCBjbGFzcyBNb2RlIHtcbiAgICAvKi0tIENvbnN0YW50cyAtLSovXG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5VTUVSSUMgPSBuZXcgTW9kZSgweDEsIFsxMCwgMTIsIDE0XSk7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTFBIQU5VTUVSSUMgPSBuZXcgTW9kZSgweDIsIFs5LCAxMSwgMTNdKTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJZVEUgPSBuZXcgTW9kZSgweDQsIFs4LCAxNiwgMTZdKTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtBTkpJID0gbmV3IE1vZGUoMHg4LCBbOCwgMTAsIDEyXSk7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFQ0kgPSBuZXcgTW9kZSgweDcsIFswLCAwLCAwXSk7XG5cbiAgICAvKi0tIENvbnN0cnVjdG9yIGFuZCBmaWVsZHMgLS0qL1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgIC8vIFRoZSBtb2RlIGluZGljYXRvciBiaXRzLCB3aGljaCBpcyBhIHVpbnQ0IHZhbHVlIChyYW5nZSAwIHRvIDE1KS5cbiAgICAgIHB1YmxpYyByZWFkb25seSBtb2RlQml0czogaW50LFxuICAgICAgLy8gTnVtYmVyIG9mIGNoYXJhY3RlciBjb3VudCBiaXRzIGZvciB0aHJlZSBkaWZmZXJlbnQgdmVyc2lvbiByYW5nZXMuXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IG51bUJpdHNDaGFyQ291bnQ6IFtpbnQsIGludCwgaW50XVxuICAgICkge31cblxuICAgIC8qLS0gTWV0aG9kIC0tKi9cblxuICAgIC8vIChQYWNrYWdlLXByaXZhdGUpIFJldHVybnMgdGhlIGJpdCB3aWR0aCBvZiB0aGUgY2hhcmFjdGVyIGNvdW50IGZpZWxkIGZvciBhIHNlZ21lbnQgaW5cbiAgICAvLyB0aGlzIG1vZGUgaW4gYSBRUiBDb2RlIGF0IHRoZSBnaXZlbiB2ZXJzaW9uIG51bWJlci4gVGhlIHJlc3VsdCBpcyBpbiB0aGUgcmFuZ2UgWzAsIDE2XS5cbiAgICBwdWJsaWMgbnVtQ2hhckNvdW50Qml0cyh2ZXI6IGludCk6IGludCB7XG4gICAgICByZXR1cm4gdGhpcy5udW1CaXRzQ2hhckNvdW50W01hdGguZmxvb3IoKHZlciArIDcpIC8gMTcpXTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcXJjb2RlZ2VuO1xuIl19
|
|
@@ -3,11 +3,11 @@ import { NgModule } from '@angular/core';
|
|
|
3
3
|
import { WrSkeleton } from './skeleton';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export class WrSkeletonModule {
|
|
6
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
7
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
8
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WrSkeletonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: WrSkeletonModule, declarations: [WrSkeleton], imports: [CommonModule], exports: [WrSkeleton] }); }
|
|
8
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WrSkeletonModule, imports: [CommonModule] }); }
|
|
9
9
|
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WrSkeletonModule, decorators: [{
|
|
11
11
|
type: NgModule,
|
|
12
12
|
args: [{
|
|
13
13
|
imports: [CommonModule],
|
|
@@ -21,13 +21,13 @@ export class WrSkeleton {
|
|
|
21
21
|
'wr-skeleton--dark': this.color === 'dark',
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
25
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WrSkeleton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: WrSkeleton, selector: "wr-skeleton", inputs: { color: "color", animated: "animated" }, host: { properties: { "class": "this.elClasses" } }, exportAs: ["wrSkeleton"], ngImport: i0 }); }
|
|
26
26
|
}
|
|
27
27
|
__decorate([
|
|
28
28
|
InputBoolean()
|
|
29
29
|
], WrSkeleton.prototype, "animated", void 0);
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WrSkeleton, decorators: [{
|
|
31
31
|
type: Directive,
|
|
32
32
|
args: [{
|
|
33
33
|
selector: 'wr-skeleton',
|
|
@@ -2,11 +2,11 @@ import { NgModule } from '@angular/core';
|
|
|
2
2
|
import { WrSpinner } from './spinner';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class WrSpinnerModule {
|
|
5
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
6
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
7
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WrSpinnerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: WrSpinnerModule, declarations: [WrSpinner], exports: [WrSpinner] }); }
|
|
7
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WrSpinnerModule }); }
|
|
8
8
|
}
|
|
9
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WrSpinnerModule, decorators: [{
|
|
10
10
|
type: NgModule,
|
|
11
11
|
args: [{
|
|
12
12
|
declarations: [WrSpinner],
|
|
@@ -4,10 +4,10 @@ export class WrSpinner {
|
|
|
4
4
|
constructor() {
|
|
5
5
|
this.class = 'wr-spin';
|
|
6
6
|
}
|
|
7
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
8
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WrSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: WrSpinner, selector: "wr-spin", host: { properties: { "class": "this.class" } }, exportAs: ["wrSpin"], ngImport: i0, template: '<svg viewBox="0 0 50 50"><circle class="path" cx="25" cy="25" r="20" fill="none" stroke-width="5"></circle></svg>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
9
9
|
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WrSpinner, decorators: [{
|
|
11
11
|
type: Component,
|
|
12
12
|
args: [{
|
|
13
13
|
selector: 'wr-spin',
|