@toloka-platform/sdk 0.1.0-preview.6 → 0.1.0-preview.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +7 -11
  2. package/dist/cli/toloka.js +208 -123
  3. package/dist/cli/toloka.js.jsc +0 -0
  4. package/dist/cli/toloka.js.jsc.sha256 +1 -1
  5. package/dist/cli/toloka.js.sha256 +1 -1
  6. package/docs/authoring.md +17 -4
  7. package/docs/cli-v2.md +3 -3
  8. package/docs/cli.md +29 -16
  9. package/docs/getting-started.md +7 -12
  10. package/docs/limitations.md +6 -6
  11. package/docs/testing-examples.md +248 -0
  12. package/docs/testing.md +115 -0
  13. package/examples/face-image-collection/README.md +7 -1
  14. package/examples/face-image-collection/fields.ts +20 -8
  15. package/examples/face-image-collection/nodes/annotate-faces/node.ts +1 -9
  16. package/examples/face-image-collection/nodes/order-faces/node.ts +1 -1
  17. package/examples/face-image-collection/pipeline.browser.integration.spec.ts +78 -0
  18. package/examples/video-pair-rating/README.md +14 -6
  19. package/examples/video-pair-rating/nodes/adjudicate/node.ts +1 -3
  20. package/examples/video-pair-rating/nodes/adjudicate_op/node.ts +1 -3
  21. package/examples/video-pair-rating/nodes/overall_preference_pick/node.ts +1 -1
  22. package/examples/video-pair-rating/nodes/rate_pair/node.ts +1 -1
  23. package/examples/video-pair-rating/pipeline.browser.integration.spec.ts +267 -0
  24. package/openapi/gen/api.ts +48 -11
  25. package/openapi/gen/models/createDatasetExportBody.ts +3 -3
  26. package/openapi/gen/models/createDatasetExportBodyOneOf.ts +6 -0
  27. package/openapi/gen/models/createDatasetExportBodyOneOfFormat.ts +2 -0
  28. package/openapi/gen/models/createDatasetExportBodyOneOfThree.ts +10 -0
  29. package/openapi/gen/models/createDatasetExportBodyOneOfThreeContract.ts +2 -0
  30. package/openapi/gen/models/createDatasetExportBodyOneOfThreeFormat.ts +2 -0
  31. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilter.ts +9 -0
  32. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldSourcesItem.ts +6 -0
  33. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldSourcesItemSourcesItem.ts +4 -0
  34. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldSourcesItemSourcesItemOneOf.ts +5 -0
  35. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldSourcesItemSourcesItemOneOfTwo.ts +5 -0
  36. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItem.ts +12 -0
  37. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItemOperator.ts +2 -0
  38. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItemSourcesItem.ts +4 -0
  39. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItemSourcesItemOneOf.ts +5 -0
  40. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItemSourcesItemOneOfTwo.ts +5 -0
  41. package/openapi/gen/models/createDatasetExportBodyOneOfThreeItemFilterFieldValuesItemValue.ts +2 -0
  42. package/openapi/gen/models/datasetExportReport.ts +9 -0
  43. package/openapi/gen/models/datasetExportReportErrorsItem.ts +5 -0
  44. package/openapi/gen/models/datasetExportReportTokens.ts +7 -0
  45. package/openapi/gen/models/exportJob.ts +2 -0
  46. package/openapi/gen/models/exportJobReport.ts +3 -0
  47. package/openapi/gen/models/index.ts +48 -0
  48. package/openapi/gen/models/sampleDatasetItemsBody.ts +4 -0
  49. package/openapi/gen/models/sampleDatasetItemsBodyAnyOf.ts +8 -0
  50. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilter.ts +9 -0
  51. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilterFieldSourcesItem.ts +6 -0
  52. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilterFieldSourcesItemSourcesItem.ts +4 -0
  53. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilterFieldSourcesItemSourcesItemOneOf.ts +5 -0
  54. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilterFieldSourcesItemSourcesItemOneOfTwo.ts +5 -0
  55. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilterFieldValuesItem.ts +12 -0
  56. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilterFieldValuesItemOperator.ts +2 -0
  57. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilterFieldValuesItemSourcesItem.ts +4 -0
  58. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilterFieldValuesItemSourcesItemOneOf.ts +5 -0
  59. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilterFieldValuesItemSourcesItemOneOfTwo.ts +5 -0
  60. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfItemFilterFieldValuesItemValue.ts +2 -0
  61. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethree.ts +8 -0
  62. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilter.ts +9 -0
  63. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilterFieldSourcesItem.ts +6 -0
  64. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilterFieldSourcesItemSourcesItem.ts +4 -0
  65. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilterFieldSourcesItemSourcesItemOneOf.ts +5 -0
  66. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilterFieldSourcesItemSourcesItemOneOfTwo.ts +5 -0
  67. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilterFieldValuesItem.ts +12 -0
  68. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilterFieldValuesItemOperator.ts +2 -0
  69. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilterFieldValuesItemSourcesItem.ts +4 -0
  70. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilterFieldValuesItemSourcesItemOneOf.ts +5 -0
  71. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilterFieldValuesItemSourcesItemOneOfTwo.ts +5 -0
  72. package/openapi/gen/models/sampleDatasetItemsBodyAnyOfOnethreeItemFilterFieldValuesItemValue.ts +2 -0
  73. package/openapi/gen/models/sampleJob.ts +13 -0
  74. package/openapi/gen/models/sampleJobStatus.ts +2 -0
  75. package/openapi/gen/models/sampleResult.ts +5 -0
  76. package/package.json +23 -2
  77. package/skills/catalog.json +14 -6
  78. package/skills/toloka-build/SKILL.md +34 -12
  79. package/skills/toloka-build/references/node-semantics.md +27 -24
  80. package/skills/toloka-build/references/workflow-and-cli.md +55 -26
  81. package/skills/toloka-report-issue/references/report-template.md +1 -1
  82. package/src/checks/ast.ts +32 -0
  83. package/src/checks/index.ts +14 -0
  84. package/src/checks/postprocess-collisions.ts +145 -0
  85. package/src/checks/task-ui-declarations.generated.ts +19 -0
  86. package/src/checks/task-ui-typecheck.ts +345 -0
  87. package/src/checks/typescript-vfs.d.ts +26 -0
  88. package/src/checks/typescript-vfs.js +5 -0
  89. package/src/cli/analytics.ts +1 -0
  90. package/src/cli/check.ts +977 -0
  91. package/src/cli/program.ts +147 -19
  92. package/src/cli/project-context.ts +14 -4
  93. package/src/cli/runs.ts +21 -11
  94. package/src/cli/skill.ts +17 -6
  95. package/src/testing/code-node.ts +160 -0
  96. package/src/testing/index.ts +15 -0
  97. package/src/testing/task-ui-browser.ts +120 -0
  98. package/src/testing/task-ui-validation.ts +135 -0
  99. package/src/testing/task-ui.ts +557 -0
  100. package/src/testing/test-evidence.ts +170 -0
  101. package/src/testing/types.ts +141 -0
@@ -0,0 +1,19 @@
1
+ export const taskUiDeclarationSnapshot = {
2
+ version: 1,
3
+ react: {
4
+ url: "https://tlkfrontprod.azureedge.net/template-builder-production/static/types/react@18.2.17/index.d.ts",
5
+ sha256: "40a1b33c67109be18a961127873e8ba198429eacf11a468b4a052cddc9a73f8d",
6
+ source: Buffer.from(
7
+ "Ly8gVHlwZSBkZWZpbml0aW9ucyBmb3IgUmVhY3QgMTguMgovLyBQcm9qZWN0OiBodHRwczovL3JlYWN0LmRldi8KLy8gRGVmaW5pdGlvbnMgYnk6IEFzYW5hIDxodHRwczovL2FzYW5hLmNvbT4KLy8gICAgICAgICAgICAgICAgIEFzc3VyZVNpZ24gPGh0dHA6Ly93d3cuYXNzdXJlc2lnbi5jb20+Ci8vICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgPGh0dHBzOi8vbWljcm9zb2Z0LmNvbT4KLy8gICAgICAgICAgICAgICAgIEpvaG4gUmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVpbGx5PgovLyAgICAgICAgICAgICAgICAgQmVub2l0IEJlbmV6ZWNoIDxodHRwczovL2dpdGh1Yi5jb20vYmJlbmV6ZWNoPgovLyAgICAgICAgICAgICAgICAgUGF0cmljaW8gWmF2b2xpbnNreSA8aHR0cHM6Ly9naXRodWIuY29tL3B6YXZvbGluc2t5PgovLyAgICAgICAgICAgICAgICAgRXJpYyBBbmRlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL2VyaWNhbmRlcnNvbj4KLy8gICAgICAgICAgICAgICAgIERvdnlkYXMgTmF2aWNrYXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9Eb3Z5ZGFzTmF2aWNrYXM+Ci8vICAgICAgICAgICAgICAgICBKb3NoIFJ1dGhlcmZvcmQgPGh0dHBzOi8vZ2l0aHViLmNvbS90aGVydXRoZXI0ZD4KLy8gICAgICAgICAgICAgICAgIEd1aWxoZXJtZSBIw7xibmVyIDxodHRwczovL2dpdGh1Yi5jb20vZ3VpbGhlcm1laHVibmVyPgovLyAgICAgICAgICAgICAgICAgRmVyZHkgQnVkaGlkaGFybWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJkYWJlcj4KLy8gICAgICAgICAgICAgICAgIEpvaGFubiBSYWtvdG9oYXJpc29hIDxodHRwczovL2dpdGh1Yi5jb20vanJha290b2hhcmlzb2E+Ci8vICAgICAgICAgICAgICAgICBPbGl2aWVyIFBhc2NhbCA8aHR0cHM6Ly9naXRodWIuY29tL3Bhc2NhbG9saXY+Ci8vICAgICAgICAgICAgICAgICBNYXJ0aW4gSG9jaGVsIDxodHRwczovL2dpdGh1Yi5jb20vaG90ZWxsPgovLyAgICAgICAgICAgICAgICAgRnJhbmsgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS9mcmFua2xpeHVlZmVpPgovLyAgICAgICAgICAgICAgICAgSmVzc2ljYSBGcmFuY28gPGh0dHBzOi8vZ2l0aHViLmNvbS9KZXNzaWRoaWE+Ci8vICAgICAgICAgICAgICAgICBTYXJhbnNoIEthdGFyaWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9zYXJhbnNoa2F0YXJpYT4KLy8gICAgICAgICAgICAgICAgIEthbml0a29ybiBTdWphdXRyYSA8aHR0cHM6Ly9naXRodWIuY29tL2x1a3l0aD4KLy8gICAgICAgICAgICAgICAgIFNlYmFzdGlhbiBTaWxiZXJtYW5uIDxodHRwczovL2dpdGh1Yi5jb20vZXBzMWxvbj4KLy8gICAgICAgICAgICAgICAgIEt5bGUgU2N1bGx5IDxodHRwczovL2dpdGh1Yi5jb20vemlla2E+Ci8vICAgICAgICAgICAgICAgICBDb25nIFpoYW5nIDxodHRwczovL2dpdGh1Yi5jb20vZGFuY2VycGhpbD4KLy8gICAgICAgICAgICAgICAgIERpbWl0cmkgTWl0cm9wb3Vsb3MgPGh0dHBzOi8vZ2l0aHViLmNvbS9kaW1pdHJvcG91bG9zPgovLyAgICAgICAgICAgICAgICAgSm9uZ0NoYW4gQ2hvaSA8aHR0cHM6Ly9naXRodWIuY29tL2Rpc2p1a3I+Ci8vICAgICAgICAgICAgICAgICBWaWN0b3IgTWFnYWxow6NlcyA8aHR0cHM6Ly9naXRodWIuY29tL3ZoZm1hZz4KLy8gICAgICAgICAgICAgICAgIERhbGUgVGFuIDxodHRwczovL2dpdGh1Yi5jb20vaGVsbGF0YW4+Ci8vICAgICAgICAgICAgICAgICBQcml5YW5zaHUgUmF2IDxodHRwczovL2dpdGh1Yi5jb20vcHJpeWFuc2h1cmF2PgovLyAgICAgICAgICAgICAgICAgRG1pdHJ5IFNlbWlncmFkc2t5IDxodHRwczovL2dpdGh1Yi5jb20vU2VtaWdyYWRza3k+Ci8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZAovLyBUeXBlU2NyaXB0IFZlcnNpb246IDIuOAoKLy8gTk9URTogVXNlcnMgb2YgdGhlIGBleHBlcmltZW50YWxgIGJ1aWxkcyBvZiBSZWFjdCBzaG91bGQgYWRkIGEgcmVmZXJlbmNlCi8vIHRvICdyZWFjdC9leHBlcmltZW50YWwnIGluIHRoZWlyIHByb2plY3QuIFNlZSBleHBlcmltZW50YWwuZC50cydzIHRvcCBjb21tZW50Ci8vIGZvciByZWZlcmVuY2UgYW5kIGRvY3VtZW50YXRpb24gb24gaG93IGV4YWN0bHkgdG8gZG8gaXQuCgovLy8gPHJlZmVyZW5jZSBwYXRoPSJnbG9iYWwuZC50cyIgLz4KCmltcG9ydCAqIGFzIENTUyBmcm9tICdjc3N0eXBlJzsKaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnOwppbXBvcnQgeyBJbnRlcmFjdGlvbiBhcyBTY2hlZHVsZXJJbnRlcmFjdGlvbiB9IGZyb20gJ3NjaGVkdWxlci90cmFjaW5nJzsKCnR5cGUgTmF0aXZlQW5pbWF0aW9uRXZlbnQgPSBBbmltYXRpb25FdmVudDsKdHlwZSBOYXRpdmVDbGlwYm9hcmRFdmVudCA9IENsaXBib2FyZEV2ZW50Owp0eXBlIE5hdGl2ZUNvbXBvc2l0aW9uRXZlbnQgPSBDb21wb3NpdGlvbkV2ZW50Owp0eXBlIE5hdGl2ZURyYWdFdmVudCA9IERyYWdFdmVudDsKdHlwZSBOYXRpdmVGb2N1c0V2ZW50ID0gRm9jdXNFdmVudDsKdHlwZSBOYXRpdmVLZXlib2FyZEV2ZW50ID0gS2V5Ym9hcmRFdmVudDsKdHlwZSBOYXRpdmVNb3VzZUV2ZW50ID0gTW91c2VFdmVudDsKdHlwZSBOYXRpdmVUb3VjaEV2ZW50ID0gVG91Y2hFdmVudDsKdHlwZSBOYXRpdmVQb2ludGVyRXZlbnQgPSBQb2ludGVyRXZlbnQ7CnR5cGUgTmF0aXZlVHJhbnNpdGlvbkV2ZW50ID0gVHJhbnNpdGlvbkV2ZW50Owp0eXBlIE5hdGl2ZVVJRXZlbnQgPSBVSUV2ZW50Owp0eXBlIE5hdGl2ZVdoZWVsRXZlbnQgPSBXaGVlbEV2ZW50Owp0eXBlIEJvb2xlYW5pc2ggPSBib29sZWFuIHwgJ3RydWUnIHwgJ2ZhbHNlJzsKCmRlY2xhcmUgY29uc3QgVU5ERUZJTkVEX1ZPSURfT05MWTogdW5pcXVlIHN5bWJvbDsKLy8gRGVzdHJ1Y3RvcnMgYXJlIG9ubHkgYWxsb3dlZCB0byByZXR1cm4gdm9pZC4KdHlwZSBEZXN0cnVjdG9yID0gKCkgPT4gdm9pZCB8IHsgW1VOREVGSU5FRF9WT0lEX09OTFldOiBuZXZlciB9Owp0eXBlIFZvaWRPclVuZGVmaW5lZE9ubHkgPSB2b2lkIHwgeyBbVU5ERUZJTkVEX1ZPSURfT05MWV06IG5ldmVyIH07CgovLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LWp1c3QtbmFtZXNwYWNlCmV4cG9ydCA9IFJlYWN0OwpleHBvcnQgYXMgbmFtZXNwYWNlIFJlYWN0OwoKZGVjbGFyZSBuYW1lc3BhY2UgUmVhY3QgewogICAgLy8KICAgIC8vIFJlYWN0IEVsZW1lbnRzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdHlwZSBFbGVtZW50VHlwZTxQID0gYW55PiA9CiAgICAgICAgewogICAgICAgICAgICBbSyBpbiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHNdOiBQIGV4dGVuZHMgSlNYLkludHJpbnNpY0VsZW1lbnRzW0tdID8gSyA6IG5ldmVyCiAgICAgICAgfVtrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHNdIHwKICAgICAgICBDb21wb25lbnRUeXBlPFA+OwogICAgdHlwZSBDb21wb25lbnRUeXBlPFAgPSB7fT4gPSBDb21wb25lbnRDbGFzczxQPiB8IEZ1bmN0aW9uQ29tcG9uZW50PFA+OwoKICAgIHR5cGUgSlNYRWxlbWVudENvbnN0cnVjdG9yPFA+ID0KICAgICAgICB8ICgoCiAgICAgICAgICAgICAgcHJvcHM6IFAsCiAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvZG9jcy9sZWdhY3ktY29udGV4dC5odG1sI3JlZmVyZW5jaW5nLWNvbnRleHQtaW4tc3RhdGVsZXNzLWZ1bmN0aW9uLWNvbXBvbmVudHMKICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICBkZXByZWNhdGVkTGVnYWN5Q29udGV4dD86IGFueSwKICAgICAgICAgICkgPT4gUmVhY3ROb2RlKQogICAgICAgIHwgKG5ldyAoCiAgICAgICAgICAgICAgcHJvcHM6IFAsCiAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvZG9jcy9sZWdhY3ktY29udGV4dC5odG1sI3JlZmVyZW5jaW5nLWNvbnRleHQtaW4tbGlmZWN5Y2xlLW1ldGhvZHMKICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICBkZXByZWNhdGVkTGVnYWN5Q29udGV4dD86IGFueSwKICAgICAgICAgICkgPT4gQ29tcG9uZW50PGFueSwgYW55Pik7CgogICAgaW50ZXJmYWNlIFJlZk9iamVjdDxUPiB7CiAgICAgICAgcmVhZG9ubHkgY3VycmVudDogVCB8IG51bGw7CiAgICB9CiAgICAvLyBCaXZhcmlhbmNlIGhhY2sgZm9yIGNvbnNpc3RlbnQgdW5zb3VuZG5lc3Mgd2l0aCBSZWZPYmplY3QKICAgIHR5cGUgUmVmQ2FsbGJhY2s8VD4gPSB7IGJpdmFyaWFuY2VIYWNrKGluc3RhbmNlOiBUIHwgbnVsbCk6IHZvaWQgfVsiYml2YXJpYW5jZUhhY2siXTsKICAgIHR5cGUgUmVmPFQ+ID0gUmVmQ2FsbGJhY2s8VD4gfCBSZWZPYmplY3Q8VD4gfCBudWxsOwogICAgdHlwZSBMZWdhY3lSZWY8VD4gPSBzdHJpbmcgfCBSZWY8VD47CiAgICAvKioKICAgICAqIEdldHMgdGhlIGluc3RhbmNlIHR5cGUgZm9yIGEgUmVhY3QgZWxlbWVudC4gVGhlIGluc3RhbmNlIHdpbGwgYmUgZGlmZmVyZW50IGZvciB2YXJpb3VzIGNvbXBvbmVudCB0eXBlczoKICAgICAqCiAgICAgKiAtIFJlYWN0IGNsYXNzIGNvbXBvbmVudHMgd2lsbCBiZSB0aGUgY2xhc3MgaW5zdGFuY2UuIFNvIGlmIHlvdSBoYWQgYGNsYXNzIEZvbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fT4ge31gCiAgICAgKiAgIGFuZCB1c2VkIGBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBGb28+YCB0aGVuIHRoZSB0eXBlIHdvdWxkIGJlIHRoZSBpbnN0YW5jZSBvZiBgRm9vYC4KICAgICAqIC0gUmVhY3Qgc3RhdGVsZXNzIGZ1bmN0aW9uYWwgY29tcG9uZW50cyBkbyBub3QgaGF2ZSBhIGJhY2tpbmcgaW5zdGFuY2UgYW5kIHNvIGBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBCYXI+YAogICAgICogICAod2hlbiBgQmFyYCBpcyBgZnVuY3Rpb24gQmFyKCkge31gKSB3aWxsIGdpdmUgeW91IHRoZSBgdW5kZWZpbmVkYCB0eXBlLgogICAgICogLSBKU1ggaW50cmluc2ljcyBsaWtlIGBkaXZgIHdpbGwgZ2l2ZSB5b3UgdGhlaXIgRE9NIGluc3RhbmNlLiBGb3IgYFJlYWN0LkVsZW1lbnRSZWY8J2Rpdic+YCB0aGF0IHdvdWxkIGJlCiAgICAgKiAgIGBIVE1MRGl2RWxlbWVudGAuIEZvciBgUmVhY3QuRWxlbWVudFJlZjwnaW5wdXQnPmAgdGhhdCB3b3VsZCBiZSBgSFRNTElucHV0RWxlbWVudGAuCiAgICAgKiAtIFJlYWN0IHN0YXRlbGVzcyBmdW5jdGlvbmFsIGNvbXBvbmVudHMgdGhhdCBmb3J3YXJkIGEgYHJlZmAgd2lsbCBnaXZlIHlvdSB0aGUgYEVsZW1lbnRSZWZgIG9mIHRoZSBmb3J3YXJkZWQKICAgICAqICAgdG8gY29tcG9uZW50LgogICAgICoKICAgICAqIGBDYCBtdXN0IGJlIHRoZSB0eXBlIF9vZl8gYSBSZWFjdCBjb21wb25lbnQgc28geW91IG5lZWQgdG8gdXNlIHR5cGVvZiBhcyBpbiBgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgTXlDb21wb25lbnQ+YC4KICAgICAqCiAgICAgKiBAdG9kbyBJbiBGbG93LCB0aGlzIHdvcmtzIGEgbGl0dGxlIGRpZmZlcmVudCB3aXRoIGZvcndhcmRlZCByZWZzIGFuZCB0aGUgYEFic3RyYWN0Q29tcG9uZW50YCB0aGF0CiAgICAgKiAgICAgICBgUmVhY3QuZm9yd2FyZFJlZigpYCByZXR1cm5zLgogICAgICovCiAgICB0eXBlIEVsZW1lbnRSZWY8CiAgICAgICAgQyBleHRlbmRzCiAgICAgICAgICAgIHwgRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxhbnk+CiAgICAgICAgICAgIHwgeyBuZXcgKHByb3BzOiBhbnkpOiBDb21wb25lbnQ8YW55PiB9CiAgICAgICAgICAgIHwgKChwcm9wczogYW55LCBjb250ZXh0PzogYW55KSA9PiBSZWFjdE5vZGUpCiAgICAgICAgICAgIHwga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzCiAgICA+ID0KICAgICAgICAvLyBuZWVkIHRvIGNoZWNrIGZpcnN0IGlmIGByZWZgIGlzIGEgdmFsaWQgcHJvcCBmb3IgdHNAMy4wCiAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgaW5mZXIgYHt9YCBpbnN0ZWFkIG9mIGBuZXZlcmAKICAgICAgICAicmVmIiBleHRlbmRzIGtleW9mIENvbXBvbmVudFByb3BzV2l0aFJlZjxDPgogICAgICAgICAgICA/IE5vbk51bGxhYmxlPENvbXBvbmVudFByb3BzV2l0aFJlZjxDPlsicmVmIl0+IGV4dGVuZHMgUmVmPAogICAgICAgICAgICAgICAgaW5mZXIgSW5zdGFuY2UKICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPyBJbnN0YW5jZQogICAgICAgICAgICAgICAgOiBuZXZlcgogICAgICAgICAgICA6IG5ldmVyOwoKICAgIHR5cGUgQ29tcG9uZW50U3RhdGUgPSBhbnk7CgogICAgdHlwZSBLZXkgPSBzdHJpbmcgfCBudW1iZXI7CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZG4ndCBuZWVkIHRvIHVzZSB0aGlzIHR5cGUgc2luY2UgeW91IG5ldmVyIHNlZSB0aGVzZSBhdHRyaWJ1dGVzCiAgICAgKiBpbnNpZGUgeW91ciBjb21wb25lbnQgb3IgaGF2ZSB0byB2YWxpZGF0ZSB0aGVtLgogICAgICovCiAgICBpbnRlcmZhY2UgQXR0cmlidXRlcyB7CiAgICAgICAga2V5PzogS2V5IHwgbnVsbCB8IHVuZGVmaW5lZDsKICAgIH0KICAgIGludGVyZmFjZSBSZWZBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgQXR0cmlidXRlcyB7CiAgICAgICAgLyoqCiAgICAgICAgICogQWxsb3dzIGdldHRpbmcgYSByZWYgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZS4KICAgICAgICAgKiBPbmNlIHRoZSBjb21wb25lbnQgdW5tb3VudHMsIFJlYWN0IHdpbGwgc2V0IGByZWYuY3VycmVudGAgdG8gYG51bGxgIChvciBjYWxsIHRoZSByZWYgd2l0aCBgbnVsbGAgaWYgeW91IHBhc3NlZCBhIGNhbGxiYWNrIHJlZikuCiAgICAgICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9sZWFybi9yZWZlcmVuY2luZy12YWx1ZXMtd2l0aC1yZWZzI3JlZnMtYW5kLXRoZS1kb20KICAgICAgICAgKi8KICAgICAgICByZWY/OiBSZWY8VD4gfCB1bmRlZmluZWQ7CiAgICB9CiAgICBpbnRlcmZhY2UgQ2xhc3NBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgQXR0cmlidXRlcyB7CiAgICAgICAgLyoqCiAgICAgICAgICogQWxsb3dzIGdldHRpbmcgYSByZWYgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZS4KICAgICAgICAgKiBPbmNlIHRoZSBjb21wb25lbnQgdW5tb3VudHMsIFJlYWN0IHdpbGwgc2V0IGByZWYuY3VycmVudGAgdG8gYG51bGxgIChvciBjYWxsIHRoZSByZWYgd2l0aCBgbnVsbGAgaWYgeW91IHBhc3NlZCBhIGNhbGxiYWNrIHJlZikuCiAgICAgICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9sZWFybi9yZWZlcmVuY2luZy12YWx1ZXMtd2l0aC1yZWZzI3JlZnMtYW5kLXRoZS1kb20KICAgICAgICAgKi8KICAgICAgICByZWY/OiBMZWdhY3lSZWY8VD4gfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFJlYWN0RWxlbWVudDxQID0gYW55LCBUIGV4dGVuZHMgc3RyaW5nIHwgSlNYRWxlbWVudENvbnN0cnVjdG9yPGFueT4gPSBzdHJpbmcgfCBKU1hFbGVtZW50Q29uc3RydWN0b3I8YW55Pj4gewogICAgICAgIHR5cGU6IFQ7CiAgICAgICAgcHJvcHM6IFA7CiAgICAgICAga2V5OiBLZXkgfCBudWxsOwogICAgfQoKICAgIGludGVyZmFjZSBSZWFjdENvbXBvbmVudEVsZW1lbnQ8CiAgICAgICAgVCBleHRlbmRzIGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cyB8IEpTWEVsZW1lbnRDb25zdHJ1Y3Rvcjxhbnk+LAogICAgICAgIFAgPSBQaWNrPENvbXBvbmVudFByb3BzPFQ+LCBFeGNsdWRlPGtleW9mIENvbXBvbmVudFByb3BzPFQ+LCAna2V5JyB8ICdyZWYnPj4KICAgID4gZXh0ZW5kcyBSZWFjdEVsZW1lbnQ8UCwgRXhjbHVkZTxULCBudW1iZXI+PiB7IH0KCiAgICBpbnRlcmZhY2UgRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+IGV4dGVuZHMgUmVhY3RFbGVtZW50PFAsIEZ1bmN0aW9uQ29tcG9uZW50PFA+PiB7CiAgICAgICAgcmVmPzogKCdyZWYnIGV4dGVuZHMga2V5b2YgUCA/IFAgZXh0ZW5kcyB7IHJlZj86IGluZmVyIFIgfCB1bmRlZmluZWQgfSA/IFIgOiBuZXZlciA6IG5ldmVyKSB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIENFbGVtZW50PFAsIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PiA9IENvbXBvbmVudEVsZW1lbnQ8UCwgVD47CiAgICBpbnRlcmZhY2UgQ29tcG9uZW50RWxlbWVudDxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPj4gZXh0ZW5kcyBSZWFjdEVsZW1lbnQ8UCwgQ29tcG9uZW50Q2xhc3M8UD4+IHsKICAgICAgICByZWY/OiBMZWdhY3lSZWY8VD4gfCB1bmRlZmluZWQ7CiAgICB9CgogICAgdHlwZSBDbGFzc2ljRWxlbWVudDxQPiA9IENFbGVtZW50PFAsIENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PjsKCiAgICAvLyBzdHJpbmcgZmFsbGJhY2sgZm9yIGN1c3RvbSB3ZWItY29tcG9uZW50cwogICAgaW50ZXJmYWNlIERPTUVsZW1lbnQ8UCBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHwgU1ZHQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIEVsZW1lbnQ+IGV4dGVuZHMgUmVhY3RFbGVtZW50PFAsIHN0cmluZz4gewogICAgICAgIHJlZjogTGVnYWN5UmVmPFQ+OwogICAgfQoKICAgIC8vIFJlYWN0SFRNTCBmb3IgUmVhY3RIVE1MRWxlbWVudAogICAgaW50ZXJmYWNlIFJlYWN0SFRNTEVsZW1lbnQ8VCBleHRlbmRzIEhUTUxFbGVtZW50PiBleHRlbmRzIERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxBbGxIVE1MQXR0cmlidXRlczxUPiwgVD4geyB9CgogICAgaW50ZXJmYWNlIERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4gZXh0ZW5kcyBET01FbGVtZW50PFAsIFQ+IHsKICAgICAgICB0eXBlOiBrZXlvZiBSZWFjdEhUTUw7CiAgICB9CgogICAgLy8gUmVhY3RTVkcgZm9yIFJlYWN0U1ZHRWxlbWVudAogICAgaW50ZXJmYWNlIFJlYWN0U1ZHRWxlbWVudCBleHRlbmRzIERPTUVsZW1lbnQ8U1ZHQXR0cmlidXRlczxTVkdFbGVtZW50PiwgU1ZHRWxlbWVudD4gewogICAgICAgIHR5cGU6IGtleW9mIFJlYWN0U1ZHOwogICAgfQoKICAgIGludGVyZmFjZSBSZWFjdFBvcnRhbCBleHRlbmRzIFJlYWN0RWxlbWVudCB7CiAgICAgICAga2V5OiBLZXkgfCBudWxsOwogICAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7CiAgICB9CgogICAgLy8KICAgIC8vIEZhY3RvcmllcwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHR5cGUgRmFjdG9yeTxQPiA9IChwcm9wcz86IEF0dHJpYnV0ZXMgJiBQLCAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pID0+IFJlYWN0RWxlbWVudDxQPjsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYEZ1bmN0aW9uQ29tcG9uZW50RmFjdG9yeWAKICAgICAqLwogICAgdHlwZSBTRkNGYWN0b3J5PFA+ID0gRnVuY3Rpb25Db21wb25lbnRGYWN0b3J5PFA+OwoKICAgIHR5cGUgRnVuY3Rpb25Db21wb25lbnRGYWN0b3J5PFA+ID0gKHByb3BzPzogQXR0cmlidXRlcyAmIFAsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSkgPT4gRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+OwoKICAgIHR5cGUgQ29tcG9uZW50RmFjdG9yeTxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPj4gPQogICAgICAgIChwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSkgPT4gQ0VsZW1lbnQ8UCwgVD47CgogICAgdHlwZSBDRmFjdG9yeTxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPj4gPSBDb21wb25lbnRGYWN0b3J5PFAsIFQ+OwogICAgdHlwZSBDbGFzc2ljRmFjdG9yeTxQPiA9IENGYWN0b3J5PFAsIENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PjsKCiAgICB0eXBlIERPTUZhY3Rvcnk8UCBleHRlbmRzIERPTUF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBFbGVtZW50PiA9CiAgICAgICAgKHByb3BzPzogQ2xhc3NBdHRyaWJ1dGVzPFQ+ICYgUCB8IG51bGwsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSkgPT4gRE9NRWxlbWVudDxQLCBUPjsKCiAgICBpbnRlcmZhY2UgSFRNTEZhY3Rvcnk8VCBleHRlbmRzIEhUTUxFbGVtZW50PiBleHRlbmRzIERldGFpbGVkSFRNTEZhY3Rvcnk8QWxsSFRNTEF0dHJpYnV0ZXM8VD4sIFQ+IHt9CgogICAgaW50ZXJmYWNlIERldGFpbGVkSFRNTEZhY3Rvcnk8UCBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+LCBUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+IGV4dGVuZHMgRE9NRmFjdG9yeTxQLCBUPiB7CiAgICAgICAgKHByb3BzPzogQ2xhc3NBdHRyaWJ1dGVzPFQ+ICYgUCB8IG51bGwsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQLCBUPjsKICAgIH0KCiAgICBpbnRlcmZhY2UgU1ZHRmFjdG9yeSBleHRlbmRzIERPTUZhY3Rvcnk8U1ZHQXR0cmlidXRlczxTVkdFbGVtZW50PiwgU1ZHRWxlbWVudD4gewogICAgICAgIChwcm9wcz86IENsYXNzQXR0cmlidXRlczxTVkdFbGVtZW50PiAmIFNWR0F0dHJpYnV0ZXM8U1ZHRWxlbWVudD4gfCBudWxsLCAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pOiBSZWFjdFNWR0VsZW1lbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgdHlwZSBpcyBub3QgcmVsZXZhbnQgd2hlbiB1c2luZyBSZWFjdC4gSW5saW5lIHRoZSB0eXBlIGluc3RlYWQgdG8gbWFrZSB0aGUgaW50ZW50IGNsZWFyLgogICAgICovCiAgICB0eXBlIFJlYWN0VGV4dCA9IHN0cmluZyB8IG51bWJlcjsKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIHR5cGUgaXMgbm90IHJlbGV2YW50IHdoZW4gdXNpbmcgUmVhY3QuIElubGluZSB0aGUgdHlwZSBpbnN0ZWFkIHRvIG1ha2UgdGhlIGludGVudCBjbGVhci4KICAgICAqLwogICAgdHlwZSBSZWFjdENoaWxkID0gUmVhY3RFbGVtZW50IHwgc3RyaW5nIHwgbnVtYmVyOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIGVpdGhlciBgUmVhY3ROb2RlW11gIGlmIHlvdSBuZWVkIGFuIGFycmF5IG9yIGBJdGVyYWJsZTxSZWFjdE5vZGU+YCBpZiBpdHMgcGFzc2VkIHRvIGEgaG9zdCBjb21wb25lbnQuCiAgICAgKi8KICAgIGludGVyZmFjZSBSZWFjdE5vZGVBcnJheSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8UmVhY3ROb2RlPiB7fQogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgdHlwZSBpcyBub3QgcmVsZXZhbnQgd2hlbiB1c2luZyBSZWFjdC4gSW5saW5lIHRoZSB0eXBlIGluc3RlYWQgdG8gbWFrZSB0aGUgaW50ZW50IGNsZWFyLgogICAgICovCiAgICB0eXBlIFJlYWN0RnJhZ21lbnQgPSBJdGVyYWJsZTxSZWFjdE5vZGU+OwoKICAgIC8qKgogICAgICogRm9yIGludGVybmFsIHVzYWdlIG9ubHkuCiAgICAgKiBEaWZmZXJlbnQgcmVsZWFzZSBjaGFubmVscyBkZWNsYXJlIGFkZGl0aW9uYWwgdHlwZXMgb2YgUmVhY3ROb2RlIHRoaXMgcGFydGljdWxhciByZWxlYXNlIGNoYW5uZWwgYWNjZXB0cy4KICAgICAqIEFwcCBvciBsaWJyYXJ5IHR5cGVzIHNob3VsZCBuZXZlciBhdWdtZW50IHRoaXMgaW50ZXJmYWNlLgogICAgICovCiAgICBpbnRlcmZhY2UgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfUkVBQ1RfTk9ERVMge30KICAgIHR5cGUgUmVhY3ROb2RlID0KICAgICAgICB8IFJlYWN0RWxlbWVudAogICAgICAgIHwgc3RyaW5nCiAgICAgICAgfCBudW1iZXIKICAgICAgICB8IEl0ZXJhYmxlPFJlYWN0Tm9kZT4KICAgICAgICB8IFJlYWN0UG9ydGFsCiAgICAgICAgfCBib29sZWFuCiAgICAgICAgfCBudWxsCiAgICAgICAgfCB1bmRlZmluZWQKICAgICAgICB8IERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX1JFQUNUX05PREVTW2tleW9mIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX1JFQUNUX05PREVTXTsKCiAgICAvLwogICAgLy8gVG9wIExldmVsIEFQSQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIERPTSBFbGVtZW50cwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeTxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KAogICAgICAgIHR5cGU6IGtleW9mIFJlYWN0SFRNTCk6IEhUTUxGYWN0b3J5PFQ+OwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSgKICAgICAgICB0eXBlOiBrZXlvZiBSZWFjdFNWRyk6IFNWR0ZhY3Rvcnk7CiAgICBmdW5jdGlvbiBjcmVhdGVGYWN0b3J5PFAgZXh0ZW5kcyBET01BdHRyaWJ1dGVzPFQ+LCBUIGV4dGVuZHMgRWxlbWVudD4oCiAgICAgICAgdHlwZTogc3RyaW5nKTogRE9NRmFjdG9yeTxQLCBUPjsKCiAgICAvLyBDdXN0b20gY29tcG9uZW50cwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeTxQPih0eXBlOiBGdW5jdGlvbkNvbXBvbmVudDxQPik6IEZ1bmN0aW9uQ29tcG9uZW50RmFjdG9yeTxQPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUZhY3Rvcnk8UD4oCiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPFAsIENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+LCBDbGFzc2ljQ29tcG9uZW50Q2xhc3M8UD4+KTogQ0ZhY3Rvcnk8UCwgQ2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4+OwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeTxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPiwgQyBleHRlbmRzIENvbXBvbmVudENsYXNzPFA+PigKICAgICAgICB0eXBlOiBDbGFzc1R5cGU8UCwgVCwgQz4pOiBDRmFjdG9yeTxQLCBUPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUZhY3Rvcnk8UD4odHlwZTogQ29tcG9uZW50Q2xhc3M8UD4pOiBGYWN0b3J5PFA+OwoKICAgIC8vIERPTSBFbGVtZW50cwogICAgLy8gVE9ETzogZ2VuZXJhbGl6ZSB0aGlzIHRvIGV2ZXJ5dGhpbmcgaW4gYGtleW9mIFJlYWN0SFRNTGAsIG5vdCBqdXN0ICJpbnB1dCIKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoCiAgICAgICAgdHlwZTogImlucHV0IiwKICAgICAgICBwcm9wcz86IElucHV0SFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4gJiBDbGFzc0F0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4gfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxJbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+LCBIVE1MSW5wdXRFbGVtZW50PjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+LCBUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KAogICAgICAgIHR5cGU6IGtleW9mIFJlYWN0SFRNTCwKICAgICAgICBwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQLCBUPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIFNWR0F0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBTVkdFbGVtZW50PigKICAgICAgICB0eXBlOiBrZXlvZiBSZWFjdFNWRywKICAgICAgICBwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IFJlYWN0U1ZHRWxlbWVudDsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIERPTUF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBFbGVtZW50PigKICAgICAgICB0eXBlOiBzdHJpbmcsCiAgICAgICAgcHJvcHM/OiBDbGFzc0F0dHJpYnV0ZXM8VD4gJiBQIHwgbnVsbCwKICAgICAgICAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pOiBET01FbGVtZW50PFAsIFQ+OwoKICAgIC8vIEN1c3RvbSBjb21wb25lbnRzCgogICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxQIGV4dGVuZHMge30+KAogICAgICAgIHR5cGU6IEZ1bmN0aW9uQ29tcG9uZW50PFA+LAogICAgICAgIHByb3BzPzogQXR0cmlidXRlcyAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IEZ1bmN0aW9uQ29tcG9uZW50RWxlbWVudDxQPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIHt9PigKICAgICAgICB0eXBlOiBDbGFzc1R5cGU8UCwgQ2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4sIENsYXNzaWNDb21wb25lbnRDbGFzczxQPj4sCiAgICAgICAgcHJvcHM/OiBDbGFzc0F0dHJpYnV0ZXM8Q2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4+ICYgUCB8IG51bGwsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogQ0VsZW1lbnQ8UCwgQ2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4+OwogICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxQIGV4dGVuZHMge30sIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+LCBDIGV4dGVuZHMgQ29tcG9uZW50Q2xhc3M8UD4+KAogICAgICAgIHR5cGU6IENsYXNzVHlwZTxQLCBULCBDPiwKICAgICAgICBwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IENFbGVtZW50PFAsIFQ+OwogICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxQIGV4dGVuZHMge30+KAogICAgICAgIHR5cGU6IEZ1bmN0aW9uQ29tcG9uZW50PFA+IHwgQ29tcG9uZW50Q2xhc3M8UD4gfCBzdHJpbmcsCiAgICAgICAgcHJvcHM/OiBBdHRyaWJ1dGVzICYgUCB8IG51bGwsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RFbGVtZW50PFA+OwoKICAgIC8vIERPTSBFbGVtZW50cwogICAgLy8gUmVhY3RIVE1MRWxlbWVudAogICAgZnVuY3Rpb24gY2xvbmVFbGVtZW50PFAgZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIEhUTUxFbGVtZW50PigKICAgICAgICBlbGVtZW50OiBEZXRhaWxlZFJlYWN0SFRNTEVsZW1lbnQ8UCwgVD4sCiAgICAgICAgcHJvcHM/OiBQLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQLCBUPjsKICAgIC8vIFJlYWN0SFRNTEVsZW1lbnQsIGxlc3Mgc3BlY2lmaWMKICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudDxQIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4oCiAgICAgICAgZWxlbWVudDogUmVhY3RIVE1MRWxlbWVudDxUPiwKICAgICAgICBwcm9wcz86IFAsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RIVE1MRWxlbWVudDxUPjsKICAgIC8vIFNWR0VsZW1lbnQKICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudDxQIGV4dGVuZHMgU1ZHQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIFNWR0VsZW1lbnQ+KAogICAgICAgIGVsZW1lbnQ6IFJlYWN0U1ZHRWxlbWVudCwKICAgICAgICBwcm9wcz86IFAsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RTVkdFbGVtZW50OwogICAgLy8gRE9NIEVsZW1lbnQgKGhhcyB0byBiZSB0aGUgbGFzdCwgYmVjYXVzZSB0eXBlIGNoZWNraW5nIHN0b3BzIGF0IGZpcnN0IG92ZXJsb2FkIHRoYXQgZml0cykKICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudDxQIGV4dGVuZHMgRE9NQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIEVsZW1lbnQ+KAogICAgICAgIGVsZW1lbnQ6IERPTUVsZW1lbnQ8UCwgVD4sCiAgICAgICAgcHJvcHM/OiBET01BdHRyaWJ1dGVzPFQ+ICYgUCwKICAgICAgICAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pOiBET01FbGVtZW50PFAsIFQ+OwoKICAgIC8vIEN1c3RvbSBjb21wb25lbnRzCiAgICBmdW5jdGlvbiBjbG9uZUVsZW1lbnQ8UD4oCiAgICAgICAgZWxlbWVudDogRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+LAogICAgICAgIHByb3BzPzogUGFydGlhbDxQPiAmIEF0dHJpYnV0ZXMsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+OwogICAgZnVuY3Rpb24gY2xvbmVFbGVtZW50PFAsIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PigKICAgICAgICBlbGVtZW50OiBDRWxlbWVudDxQLCBUPiwKICAgICAgICBwcm9wcz86IFBhcnRpYWw8UD4gJiBDbGFzc0F0dHJpYnV0ZXM8VD4sCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogQ0VsZW1lbnQ8UCwgVD47CiAgICBmdW5jdGlvbiBjbG9uZUVsZW1lbnQ8UD4oCiAgICAgICAgZWxlbWVudDogUmVhY3RFbGVtZW50PFA+LAogICAgICAgIHByb3BzPzogUGFydGlhbDxQPiAmIEF0dHJpYnV0ZXMsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RFbGVtZW50PFA+OwoKICAgIC8vIENvbnRleHQgdmlhIFJlbmRlclByb3BzCiAgICBpbnRlcmZhY2UgUHJvdmlkZXJQcm9wczxUPiB7CiAgICAgICAgdmFsdWU6IFQ7CiAgICAgICAgY2hpbGRyZW4/OiBSZWFjdE5vZGUgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbnN1bWVyUHJvcHM8VD4gewogICAgICAgIGNoaWxkcmVuOiAodmFsdWU6IFQpID0+IFJlYWN0Tm9kZTsKICAgIH0KCiAgICAvLyBUT0RPOiBzaW1pbGFyIHRvIGhvdyBGcmFnbWVudCBpcyBhY3R1YWxseSBhIHN5bWJvbCwgdGhlIHZhbHVlcyByZXR1cm5lZCBmcm9tIGNyZWF0ZUNvbnRleHQsCiAgICAvLyBmb3J3YXJkUmVmIGFuZCBtZW1vIGFyZSBhY3R1YWxseSBvYmplY3RzIHRoYXQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5IGJ5IHRoZSByZW5kZXJlcjsgc2VlOgogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvdjE2LjYuMC9wYWNrYWdlcy9yZWFjdC9zcmMvUmVhY3RDb250ZXh0LmpzI0wzNS1MNDgKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL3YxNi42LjAvcGFja2FnZXMvcmVhY3Qvc3JjL2ZvcndhcmRSZWYuanMjTDQyLUw0NQogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvdjE2LjYuMC9wYWNrYWdlcy9yZWFjdC9zcmMvbWVtby5qcyNMMjctTDMxCiAgICAvLyBIb3dldmVyLCB3ZSBoYXZlIG5vIHdheSBvZiB0ZWxsaW5nIHRoZSBKU1ggcGFyc2VyIHRoYXQgaXQncyBhIEpTWCBlbGVtZW50IHR5cGUgb3IgaXRzIHByb3BzIG90aGVyIHRoYW4KICAgIC8vIGJ5IHByZXRlbmRpbmcgdG8gYmUgYSBub3JtYWwgY29tcG9uZW50LgogICAgLy8KICAgIC8vIFdlIGRvbid0IGp1c3QgdXNlIENvbXBvbmVudFR5cGUgb3IgRnVuY3Rpb25Db21wb25lbnQgdHlwZXMgYmVjYXVzZSB5b3UgYXJlIG5vdCBzdXBwb3NlZCB0byBhdHRhY2ggc3RhdGljcyB0byB0aGlzCiAgICAvLyBvYmplY3QsIGJ1dCByYXRoZXIgdG8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLgogICAgaW50ZXJmYWNlIEV4b3RpY0NvbXBvbmVudDxQID0ge30+IHsKICAgICAgICAvKioKICAgICAgICAgKiAqKk5PVEUqKjogRXhvdGljIGNvbXBvbmVudHMgYXJlIG5vdCBjYWxsYWJsZS4KICAgICAgICAgKi8KICAgICAgICAocHJvcHM6IFApOiBSZWFjdE5vZGU7CiAgICAgICAgcmVhZG9ubHkgJCR0eXBlb2Y6IHN5bWJvbDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTmFtZWRFeG90aWNDb21wb25lbnQ8UCA9IHt9PiBleHRlbmRzIEV4b3RpY0NvbXBvbmVudDxQPiB7CiAgICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFByb3ZpZGVyRXhvdGljQ29tcG9uZW50PFA+IGV4dGVuZHMgRXhvdGljQ29tcG9uZW50PFA+IHsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIENvbnRleHRUeXBlPEMgZXh0ZW5kcyBDb250ZXh0PGFueT4+ID0gQyBleHRlbmRzIENvbnRleHQ8aW5mZXIgVD4gPyBUIDogbmV2ZXI7CgogICAgLy8gTk9URTogb25seSB0aGUgQ29udGV4dCBvYmplY3QgaXRzZWxmIGNhbiBnZXQgYSBkaXNwbGF5TmFtZQogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LWRldnRvb2xzL2Jsb2IvZTBiODU0ZTRjL2JhY2tlbmQvYXR0YWNoUmVuZGVyZXJGaWJlci5qcyNMMzEwLUwzMjUKICAgIHR5cGUgUHJvdmlkZXI8VD4gPSBQcm92aWRlckV4b3RpY0NvbXBvbmVudDxQcm92aWRlclByb3BzPFQ+PjsKICAgIHR5cGUgQ29uc3VtZXI8VD4gPSBFeG90aWNDb21wb25lbnQ8Q29uc3VtZXJQcm9wczxUPj47CiAgICBpbnRlcmZhY2UgQ29udGV4dDxUPiB7CiAgICAgICAgUHJvdmlkZXI6IFByb3ZpZGVyPFQ+OwogICAgICAgIENvbnN1bWVyOiBDb25zdW1lcjxUPjsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQ8VD4oCiAgICAgICAgLy8gSWYgeW91IHRob3VnaHQgdGhpcyBzaG91bGQgYmUgb3B0aW9uYWwsIHNlZQogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkL3B1bGwvMjQ1MDkjaXNzdWVjb21tZW50LTM4MjIxMzEwNgogICAgICAgIGRlZmF1bHRWYWx1ZTogVCwKICAgICk6IENvbnRleHQ8VD47CgogICAgZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQ8UD4ob2JqZWN0OiB7fSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmplY3QgaXMgUmVhY3RFbGVtZW50PFA+OwoKICAgIC8vIFN5bmMgd2l0aCBgUmVhY3RDaGlsZHJlbmAgdW50aWwgYFJlYWN0Q2hpbGRyZW5gIGlzIHJlbW92ZWQuCiAgICBjb25zdCBDaGlsZHJlbjogewogICAgICAgIG1hcDxULCBDPihjaGlsZHJlbjogQyB8IFJlYWRvbmx5QXJyYXk8Qz4sIGZuOiAoY2hpbGQ6IEMsIGluZGV4OiBudW1iZXIpID0+IFQpOgogICAgICAgICAgICBDIGV4dGVuZHMgbnVsbCB8IHVuZGVmaW5lZCA/IEMgOiBBcnJheTxFeGNsdWRlPFQsIGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkPj47CiAgICAgICAgZm9yRWFjaDxDPihjaGlsZHJlbjogQyB8IFJlYWRvbmx5QXJyYXk8Qz4sIGZuOiAoY2hpbGQ6IEMsIGluZGV4OiBudW1iZXIpID0+IHZvaWQpOiB2b2lkOwogICAgICAgIGNvdW50KGNoaWxkcmVuOiBhbnkpOiBudW1iZXI7CiAgICAgICAgb25seTxDPihjaGlsZHJlbjogQyk6IEMgZXh0ZW5kcyBhbnlbXSA/IG5ldmVyIDogQzsKICAgICAgICB0b0FycmF5KGNoaWxkcmVuOiBSZWFjdE5vZGUgfCBSZWFjdE5vZGVbXSk6IEFycmF5PEV4Y2x1ZGU8UmVhY3ROb2RlLCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZD4+OwogICAgfTsKICAgIGNvbnN0IEZyYWdtZW50OiBFeG90aWNDb21wb25lbnQ8eyBjaGlsZHJlbj86IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZCB9PjsKICAgIGNvbnN0IFN0cmljdE1vZGU6IEV4b3RpY0NvbXBvbmVudDx7IGNoaWxkcmVuPzogUmVhY3ROb2RlIHwgdW5kZWZpbmVkIH0+OwoKICAgIGludGVyZmFjZSBTdXNwZW5zZVByb3BzIHsKICAgICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZDsKCiAgICAgICAgLyoqIEEgZmFsbGJhY2sgcmVhY3QgdHJlZSB0byBzaG93IHdoZW4gYSBTdXNwZW5zZSBjaGlsZCAobGlrZSBSZWFjdC5sYXp5KSBzdXNwZW5kcyAqLwogICAgICAgIGZhbGxiYWNrPzogUmVhY3ROb2RlOwogICAgfQoKICAgIGNvbnN0IFN1c3BlbnNlOiBFeG90aWNDb21wb25lbnQ8U3VzcGVuc2VQcm9wcz47CiAgICBjb25zdCB2ZXJzaW9uOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L1Byb2ZpbGVyI29ucmVuZGVyLWNhbGxiYWNrIFByb2ZpbGVyIEFQSX0KICAgICAqLwogICAgdHlwZSBQcm9maWxlck9uUmVuZGVyQ2FsbGJhY2sgPSAoCiAgICAgICAgaWQ6IHN0cmluZywKICAgICAgICBwaGFzZTogIm1vdW50IiB8ICJ1cGRhdGUiLAogICAgICAgIGFjdHVhbER1cmF0aW9uOiBudW1iZXIsCiAgICAgICAgYmFzZUR1cmF0aW9uOiBudW1iZXIsCiAgICAgICAgc3RhcnRUaW1lOiBudW1iZXIsCiAgICAgICAgY29tbWl0VGltZTogbnVtYmVyLAogICAgICAgIGludGVyYWN0aW9uczogU2V0PFNjaGVkdWxlckludGVyYWN0aW9uPiwKICAgICkgPT4gdm9pZDsKICAgIGludGVyZmFjZSBQcm9maWxlclByb3BzIHsKICAgICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZDsKICAgICAgICBpZDogc3RyaW5nOwogICAgICAgIG9uUmVuZGVyOiBQcm9maWxlck9uUmVuZGVyQ2FsbGJhY2s7CiAgICB9CgogICAgY29uc3QgUHJvZmlsZXI6IEV4b3RpY0NvbXBvbmVudDxQcm9maWxlclByb3BzPjsKCiAgICAvLwogICAgLy8gQ29tcG9uZW50IEFQSQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHR5cGUgUmVhY3RJbnN0YW5jZSA9IENvbXBvbmVudDxhbnk+IHwgRWxlbWVudDsKCiAgICAvLyBCYXNlIGNvbXBvbmVudCBmb3IgcGxhaW4gSlMgY2xhc3NlcwogICAgaW50ZXJmYWNlIENvbXBvbmVudDxQID0ge30sIFMgPSB7fSwgU1MgPSBhbnk+IGV4dGVuZHMgQ29tcG9uZW50TGlmZWN5Y2xlPFAsIFMsIFNTPiB7IH0KICAgIGNsYXNzIENvbXBvbmVudDxQLCBTPiB7CiAgICAgICAgLy8gdHNsaW50IHdvbid0IGxldCBtZSBmb3JtYXQgdGhlIHNhbXBsZSBjb2RlIGluIGEgd2F5IHRoYXQgdnNjb2RlIGxpa2VzIGl0IDooCiAgICAgICAgLyoqCiAgICAgICAgICogSWYgc2V0LCBgdGhpcy5jb250ZXh0YCB3aWxsIGJlIHNldCBhdCBydW50aW1lIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBnaXZlbiBDb250ZXh0LgogICAgICAgICAqCiAgICAgICAgICogVXNhZ2U6CiAgICAgICAgICoKICAgICAgICAgKiBgYGB0cwogICAgICAgICAqIHR5cGUgTXlDb250ZXh0ID0gbnVtYmVyCiAgICAgICAgICogY29uc3QgQ3R4ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxNeUNvbnRleHQ+KDApCiAgICAgICAgICoKICAgICAgICAgKiBjbGFzcyBGb28gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgewogICAgICAgICAqICAgc3RhdGljIGNvbnRleHRUeXBlID0gQ3R4CiAgICAgICAgICogICBjb250ZXh0ITogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIEN0eD4KICAgICAgICAgKiAgIHJlbmRlciAoKSB7CiAgICAgICAgICogICAgIHJldHVybiA8Pk15IGNvbnRleHQncyB2YWx1ZToge3RoaXMuY29udGV4dH08Lz47CiAgICAgICAgICogICB9CiAgICAgICAgICogfQogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvQ29tcG9uZW50I3N0YXRpYy1jb250ZXh0dHlwZQogICAgICAgICAqLwogICAgICAgIHN0YXRpYyBjb250ZXh0VHlwZT86IENvbnRleHQ8YW55PiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLyoqCiAgICAgICAgICogSWYgdXNpbmcgdGhlIG5ldyBzdHlsZSBjb250ZXh0LCByZS1kZWNsYXJlIHRoaXMgaW4geW91ciBjbGFzcyB0byBiZSB0aGUKICAgICAgICAgKiBgUmVhY3QuQ29udGV4dFR5cGVgIG9mIHlvdXIgYHN0YXRpYyBjb250ZXh0VHlwZWAuCiAgICAgICAgICogU2hvdWxkIGJlIHVzZWQgd2l0aCB0eXBlIGFubm90YXRpb24gb3Igc3RhdGljIGNvbnRleHRUeXBlLgogICAgICAgICAqCiAgICAgICAgICogYGBgdHMKICAgICAgICAgKiBzdGF0aWMgY29udGV4dFR5cGUgPSBNeUNvbnRleHQKICAgICAgICAgKiAvLyBGb3IgVFMgcHJlLTMuNzoKICAgICAgICAgKiBjb250ZXh0ITogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE15Q29udGV4dD4KICAgICAgICAgKiAvLyBGb3IgVFMgMy43IGFuZCBhYm92ZToKICAgICAgICAgKiBkZWNsYXJlIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBNeUNvbnRleHQ+CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC9Db21wb25lbnQjY29udGV4dAogICAgICAgICAqLwogICAgICAgIGNvbnRleHQ6IHVua25vd247CgogICAgICAgIGNvbnN0cnVjdG9yKHByb3BzOiBSZWFkb25seTxQPiB8IFApOwogICAgICAgIC8qKgogICAgICAgICAqIEBkZXByZWNhdGVkCiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9kb2NzL2xlZ2FjeS1jb250ZXh0Lmh0bWwKICAgICAgICAgKi8KICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wczogUCwgY29udGV4dDogYW55KTsKCiAgICAgICAgLy8gV2UgTVVTVCBrZWVwIHNldFN0YXRlKCkgYXMgYSB1bmlmaWVkIHNpZ25hdHVyZSBiZWNhdXNlIGl0IGFsbG93cyBwcm9wZXIgY2hlY2tpbmcgb2YgdGhlIG1ldGhvZCByZXR1cm4gdHlwZS4KICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy8xODM2NSNpc3N1ZWNvbW1lbnQtMzUxMDEzMjU3CiAgICAgICAgLy8gQWxzbywgdGhlIGAgfCBTYCBhbGxvd3MgaW50ZWxsaXNlbnNlIHRvIG5vdCBiZSBkdW1iaXNlbnNlCiAgICAgICAgc2V0U3RhdGU8SyBleHRlbmRzIGtleW9mIFM+KAogICAgICAgICAgICBzdGF0ZTogKChwcmV2U3RhdGU6IFJlYWRvbmx5PFM+LCBwcm9wczogUmVhZG9ubHk8UD4pID0+IChQaWNrPFMsIEs+IHwgUyB8IG51bGwpKSB8IChQaWNrPFMsIEs+IHwgUyB8IG51bGwpLAogICAgICAgICAgICBjYWxsYmFjaz86ICgpID0+IHZvaWQKICAgICAgICApOiB2b2lkOwoKICAgICAgICBmb3JjZVVwZGF0ZShjYWxsYmFjaz86ICgpID0+IHZvaWQpOiB2b2lkOwogICAgICAgIHJlbmRlcigpOiBSZWFjdE5vZGU7CgogICAgICAgIHJlYWRvbmx5IHByb3BzOiBSZWFkb25seTxQPjsKICAgICAgICBzdGF0ZTogUmVhZG9ubHk8Uz47CiAgICAgICAgLyoqCiAgICAgICAgICogQGRlcHJlY2F0ZWQKICAgICAgICAgKiBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9kb2NzL3JlZnMtYW5kLXRoZS1kb20uaHRtbCNsZWdhY3ktYXBpLXN0cmluZy1yZWZzCiAgICAgICAgICovCiAgICAgICAgcmVmczogewogICAgICAgICAgICBba2V5OiBzdHJpbmddOiBSZWFjdEluc3RhbmNlCiAgICAgICAgfTsKICAgIH0KCiAgICBjbGFzcyBQdXJlQ29tcG9uZW50PFAgPSB7fSwgUyA9IHt9LCBTUyA9IGFueT4gZXh0ZW5kcyBDb21wb25lbnQ8UCwgUywgU1M+IHsgfQoKICAgIGludGVyZmFjZSBDbGFzc2ljQ29tcG9uZW50PFAgPSB7fSwgUyA9IHt9PiBleHRlbmRzIENvbXBvbmVudDxQLCBTPiB7CiAgICAgICAgcmVwbGFjZVN0YXRlKG5leHRTdGF0ZTogUywgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKTogdm9pZDsKICAgICAgICBpc01vdW50ZWQoKTogYm9vbGVhbjsKICAgICAgICBnZXRJbml0aWFsU3RhdGU/KCk6IFM7CiAgICB9CgogICAgaW50ZXJmYWNlIENoaWxkQ29udGV4dFByb3ZpZGVyPENDPiB7CiAgICAgICAgZ2V0Q2hpbGRDb250ZXh0KCk6IENDOwogICAgfQoKICAgIC8vCiAgICAvLyBDbGFzcyBJbnRlcmZhY2VzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdHlwZSBGQzxQID0ge30+ID0gRnVuY3Rpb25Db21wb25lbnQ8UD47CgogICAgaW50ZXJmYWNlIEZ1bmN0aW9uQ29tcG9uZW50PFAgPSB7fT4gewogICAgICAgIChwcm9wczogUCwgY29udGV4dD86IGFueSk6IFJlYWN0Tm9kZTsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdFByb3BzPzogUGFydGlhbDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIC0gRXF1aXZhbGVudCB3aXRoIGBSZWFjdC5GQ2AuCiAgICAgKi8KICAgIHR5cGUgVkZDPFAgPSB7fT4gPSBWb2lkRnVuY3Rpb25Db21wb25lbnQ8UD47CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCAtIEVxdWl2YWxlbnQgd2l0aCBgUmVhY3QuRnVuY3Rpb25Db21wb25lbnRgLgogICAgICovCiAgICBpbnRlcmZhY2UgVm9pZEZ1bmN0aW9uQ29tcG9uZW50PFAgPSB7fT4gewogICAgICAgIChwcm9wczogUCwgY29udGV4dD86IGFueSk6IFJlYWN0Tm9kZTsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdFByb3BzPzogUGFydGlhbDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEZvcndhcmRlZFJlZjxUPiA9ICgoaW5zdGFuY2U6IFQgfCBudWxsKSA9PiB2b2lkKSB8IE11dGFibGVSZWZPYmplY3Q8VCB8IG51bGw+IHwgbnVsbDsKCiAgICBpbnRlcmZhY2UgRm9yd2FyZFJlZlJlbmRlckZ1bmN0aW9uPFQsIFAgPSB7fT4gewogICAgICAgIChwcm9wczogUCwgcmVmOiBGb3J3YXJkZWRSZWY8VD4pOiBSZWFjdE5vZGU7CiAgICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLy8gZXhwbGljaXQgcmVqZWN0ZWQgd2l0aCBgbmV2ZXJgIHJlcXVpcmVkIGR1ZSB0bwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzY4MjYKICAgICAgICAvKioKICAgICAgICAgKiBkZWZhdWx0UHJvcHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gcmVuZGVyIGZ1bmN0aW9ucwogICAgICAgICAqLwogICAgICAgIGRlZmF1bHRQcm9wcz86IG5ldmVyIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIHByb3BUeXBlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiByZW5kZXIgZnVuY3Rpb25zCiAgICAgICAgICovCiAgICAgICAgcHJvcFR5cGVzPzogbmV2ZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbXBvbmVudENsYXNzPFAgPSB7fSwgUyA9IENvbXBvbmVudFN0YXRlPiBleHRlbmRzIFN0YXRpY0xpZmVjeWNsZTxQLCBTPiB7CiAgICAgICAgbmV3IChwcm9wczogUCwgY29udGV4dD86IGFueSk6IENvbXBvbmVudDxQLCBTPjsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZT86IENvbnRleHQ8YW55PiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgY2hpbGRDb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdFByb3BzPzogUGFydGlhbDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgQ2xhc3NpY0NvbXBvbmVudENsYXNzPFAgPSB7fT4gZXh0ZW5kcyBDb21wb25lbnRDbGFzczxQPiB7CiAgICAgICAgbmV3IChwcm9wczogUCwgY29udGV4dD86IGFueSk6IENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+OwogICAgICAgIGdldERlZmF1bHRQcm9wcz8oKTogUDsKICAgIH0KCiAgICAvKioKICAgICAqIFdlIHVzZSBhbiBpbnRlcnNlY3Rpb24gdHlwZSB0byBpbmZlciBtdWx0aXBsZSB0eXBlIHBhcmFtZXRlcnMgZnJvbQogICAgICogYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgbWFueSB0b3AtbGV2ZWwgQVBJIGRlZnMuCiAgICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy83MjM0IGZvciBtb3JlIGluZm8uCiAgICAgKi8KICAgIHR5cGUgQ2xhc3NUeXBlPFAsIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+LCBDIGV4dGVuZHMgQ29tcG9uZW50Q2xhc3M8UD4+ID0KICAgICAgICBDICYKICAgICAgICAobmV3IChwcm9wczogUCwgY29udGV4dD86IGFueSkgPT4gVCk7CgogICAgLy8KICAgIC8vIENvbXBvbmVudCBTcGVjcyBhbmQgTGlmZWN5Y2xlCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgLy8gVGhpcyBzaG91bGQgYWN0dWFsbHkgYmUgc29tZXRoaW5nIGxpa2UgYExpZmVjeWNsZTxQLCBTPiB8IERlcHJlY2F0ZWRMaWZlY3ljbGU8UCwgUz5gLAogICAgLy8gYXMgUmVhY3Qgd2lsbCBfbm90XyBjYWxsIHRoZSBkZXByZWNhdGVkIGxpZmVjeWNsZSBtZXRob2RzIGlmIGFueSBvZiB0aGUgbmV3IGxpZmVjeWNsZQogICAgLy8gbWV0aG9kcyBhcmUgcHJlc2VudC4KICAgIGludGVyZmFjZSBDb21wb25lbnRMaWZlY3ljbGU8UCwgUywgU1MgPSBhbnk+IGV4dGVuZHMgTmV3TGlmZWN5Y2xlPFAsIFMsIFNTPiwgRGVwcmVjYXRlZExpZmVjeWNsZTxQLCBTPiB7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgY29tcG9uZW50IGlzIG1vdW50ZWQuIFNldHRpbmcgc3RhdGUgaGVyZSB3aWxsIHRyaWdnZXIgcmUtcmVuZGVyaW5nLgogICAgICAgICAqLwogICAgICAgIGNvbXBvbmVudERpZE1vdW50PygpOiB2b2lkOwogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2hhbmdlIGluIHByb3BzIGFuZCBzdGF0ZSBzaG91bGQgdHJpZ2dlciBhIHJlLXJlbmRlci4KICAgICAgICAgKgogICAgICAgICAqIGBDb21wb25lbnRgIGFsd2F5cyByZXR1cm5zIHRydWUuCiAgICAgICAgICogYFB1cmVDb21wb25lbnRgIGltcGxlbWVudHMgYSBzaGFsbG93IGNvbXBhcmlzb24gb24gcHJvcHMgYW5kIHN0YXRlIGFuZCByZXR1cm5zIHRydWUgaWYgYW55CiAgICAgICAgICogcHJvcHMgb3Igc3RhdGVzIGhhdmUgY2hhbmdlZC4KICAgICAgICAgKgogICAgICAgICAqIElmIGZhbHNlIGlzIHJldHVybmVkLCBgQ29tcG9uZW50I3JlbmRlcmAsIGBjb21wb25lbnRXaWxsVXBkYXRlYAogICAgICAgICAqIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYCB3aWxsIG5vdCBiZSBjYWxsZWQuCiAgICAgICAgICovCiAgICAgICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0U3RhdGU6IFJlYWRvbmx5PFM+LCBuZXh0Q29udGV4dDogYW55KTogYm9vbGVhbjsKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZC4gUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGNsZWFudXAgaW4gdGhpcyBtZXRob2QsIHN1Y2ggYXMKICAgICAgICAgKiBjYW5jZWxsZWQgbmV0d29yayByZXF1ZXN0cywgb3IgY2xlYW5pbmcgdXAgYW55IERPTSBlbGVtZW50cyBjcmVhdGVkIGluIGBjb21wb25lbnREaWRNb3VudGAuCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQ/KCk6IHZvaWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2F0Y2hlcyBleGNlcHRpb25zIGdlbmVyYXRlZCBpbiBkZXNjZW5kYW50IGNvbXBvbmVudHMuIFVuaGFuZGxlZCBleGNlcHRpb25zIHdpbGwgY2F1c2UKICAgICAgICAgKiB0aGUgZW50aXJlIGNvbXBvbmVudCB0cmVlIHRvIHVubW91bnQuCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50RGlkQ2F0Y2g/KGVycm9yOiBFcnJvciwgZXJyb3JJbmZvOiBFcnJvckluZm8pOiB2b2lkOwogICAgfQoKICAgIC8vIFVuZm9ydHVuYXRlbHksIHdlIGhhdmUgbm8gd2F5IG9mIGRlY2xhcmluZyB0aGF0IHRoZSBjb21wb25lbnQgY29uc3RydWN0b3IgbXVzdCBpbXBsZW1lbnQgdGhpcwogICAgaW50ZXJmYWNlIFN0YXRpY0xpZmVjeWNsZTxQLCBTPiB7CiAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPzogR2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPFAsIFM+IHwgdW5kZWZpbmVkOwogICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj86IEdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjxQLCBTPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczxQLCBTPiA9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyBhbiB1cGRhdGUgdG8gYSBjb21wb25lbnQncyBzdGF0ZSBiYXNlZCBvbiBpdHMgbmV3IHByb3BzIGFuZCBvbGQgc3RhdGUuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiBpdHMgcHJlc2VuY2UgcHJldmVudHMgYW55IG9mIHRoZSBkZXByZWNhdGVkIGxpZmVjeWNsZSBtZXRob2RzIGZyb20gYmVpbmcgaW52b2tlZAogICAgICAgICAqLwogICAgICAgIChuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBwcmV2U3RhdGU6IFMpID0+IFBhcnRpYWw8Uz4gfCBudWxsOwoKICAgIHR5cGUgR2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPFAsIFM+ID0KICAgICAgICAvKioKICAgICAgICAgKiBUaGlzIGxpZmVjeWNsZSBpcyBpbnZva2VkIGFmdGVyIGFuIGVycm9yIGhhcyBiZWVuIHRocm93biBieSBhIGRlc2NlbmRhbnQgY29tcG9uZW50LgogICAgICAgICAqIEl0IHJlY2VpdmVzIHRoZSBlcnJvciB0aGF0IHdhcyB0aHJvd24gYXMgYSBwYXJhbWV0ZXIgYW5kIHNob3VsZCByZXR1cm4gYSB2YWx1ZSB0byB1cGRhdGUgc3RhdGUuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiBpdHMgcHJlc2VuY2UgcHJldmVudHMgYW55IG9mIHRoZSBkZXByZWNhdGVkIGxpZmVjeWNsZSBtZXRob2RzIGZyb20gYmVpbmcgaW52b2tlZAogICAgICAgICAqLwogICAgICAgIChlcnJvcjogYW55KSA9PiBQYXJ0aWFsPFM+IHwgbnVsbDsKCiAgICAvLyBUaGlzIHNob3VsZCBiZSAiaW5mZXIgU1MiIGJ1dCBjYW4ndCB1c2UgaXQgeWV0CiAgICBpbnRlcmZhY2UgTmV3TGlmZWN5Y2xlPFAsIFMsIFNTPiB7CiAgICAgICAgLyoqCiAgICAgICAgICogUnVucyBiZWZvcmUgUmVhY3QgYXBwbGllcyB0aGUgcmVzdWx0IG9mIGByZW5kZXJgIHRvIHRoZSBkb2N1bWVudCwgYW5kCiAgICAgICAgICogcmV0dXJucyBhbiBvYmplY3QgdG8gYmUgZ2l2ZW4gdG8gY29tcG9uZW50RGlkVXBkYXRlLiBVc2VmdWwgZm9yIHNhdmluZwogICAgICAgICAqIHRoaW5ncyBzdWNoIGFzIHNjcm9sbCBwb3NpdGlvbiBiZWZvcmUgYHJlbmRlcmAgY2F1c2VzIGNoYW5nZXMgdG8gaXQuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgcHJldmVudHMgYW55IG9mIHRoZSBkZXByZWNhdGVkCiAgICAgICAgICogbGlmZWN5Y2xlIGV2ZW50cyBmcm9tIHJ1bm5pbmcuCiAgICAgICAgICovCiAgICAgICAgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU/KHByZXZQcm9wczogUmVhZG9ubHk8UD4sIHByZXZTdGF0ZTogUmVhZG9ubHk8Uz4pOiBTUyB8IG51bGw7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHVwZGF0aW5nIG9jY3Vycy4gTm90IGNhbGxlZCBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLgogICAgICAgICAqCiAgICAgICAgICogVGhlIHNuYXBzaG90IGlzIG9ubHkgcHJlc2VudCBpZiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBpcyBwcmVzZW50IGFuZCByZXR1cm5zIG5vbi1udWxsLgogICAgICAgICAqLwogICAgICAgIGNvbXBvbmVudERpZFVwZGF0ZT8ocHJldlByb3BzOiBSZWFkb25seTxQPiwgcHJldlN0YXRlOiBSZWFkb25seTxTPiwgc25hcHNob3Q/OiBTUyk6IHZvaWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIERlcHJlY2F0ZWRMaWZlY3ljbGU8UCwgUz4gewogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgbW91bnRpbmcgb2NjdXJzLCBhbmQgYmVmb3JlIGBDb21wb25lbnQjcmVuZGVyYC4KICAgICAgICAgKiBBdm9pZCBpbnRyb2R1Y2luZyBhbnkgc2lkZS1lZmZlY3RzIG9yIHN1YnNjcmlwdGlvbnMgaW4gdGhpcyBtZXRob2QuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgY29tcG9uZW50RGlkTW91bnQgb3IgdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQ7IHdpbGwgc3RvcCB3b3JraW5nIGluIFJlYWN0IDE3CiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9ibG9nLzIwMTgvMDMvMjcvdXBkYXRlLW9uLWFzeW5jLXJlbmRlcmluZy5odG1sI2luaXRpYWxpemluZy1zdGF0ZQogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCNncmFkdWFsLW1pZ3JhdGlvbi1wYXRoCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50V2lsbE1vdW50PygpOiB2b2lkOwogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgbW91bnRpbmcgb2NjdXJzLCBhbmQgYmVmb3JlIGBDb21wb25lbnQjcmVuZGVyYC4KICAgICAgICAgKiBBdm9pZCBpbnRyb2R1Y2luZyBhbnkgc2lkZS1lZmZlY3RzIG9yIHN1YnNjcmlwdGlvbnMgaW4gdGhpcyBtZXRob2QuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIG5vdCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgMTcuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgY29tcG9uZW50RGlkTW91bnQgb3IgdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjaW5pdGlhbGl6aW5nLXN0YXRlCiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9ibG9nLzIwMTgvMDMvMjcvdXBkYXRlLW9uLWFzeW5jLXJlbmRlcmluZy5odG1sI2dyYWR1YWwtbWlncmF0aW9uLXBhdGgKICAgICAgICAgKi8KICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50PygpOiB2b2lkOwogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgbWF5IGJlIHJlY2VpdmluZyBuZXcgcHJvcHMuCiAgICAgICAgICogUmVhY3QgbWF5IGNhbGwgdGhpcyBldmVuIGlmIHByb3BzIGhhdmUgbm90IGNoYW5nZWQsIHNvIGJlIHN1cmUgdG8gY29tcGFyZSBuZXcgYW5kIGV4aXN0aW5nCiAgICAgICAgICogcHJvcHMgaWYgeW91IG9ubHkgd2FudCB0byBoYW5kbGUgY2hhbmdlcy4KICAgICAgICAgKgogICAgICAgICAqIENhbGxpbmcgYENvbXBvbmVudCNzZXRTdGF0ZWAgZ2VuZXJhbGx5IGRvZXMgbm90IHRyaWdnZXIgdGhpcyBtZXRob2QuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2Ugc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyBpbnN0ZWFkOyB3aWxsIHN0b3Agd29ya2luZyBpbiBSZWFjdCAxNwogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCN1cGRhdGluZy1zdGF0ZS1iYXNlZC1vbi1wcm9wcwogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCNncmFkdWFsLW1pZ3JhdGlvbi1wYXRoCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz8obmV4dFByb3BzOiBSZWFkb25seTxQPiwgbmV4dENvbnRleHQ6IGFueSk6IHZvaWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBtYXkgYmUgcmVjZWl2aW5nIG5ldyBwcm9wcy4KICAgICAgICAgKiBSZWFjdCBtYXkgY2FsbCB0aGlzIGV2ZW4gaWYgcHJvcHMgaGF2ZSBub3QgY2hhbmdlZCwgc28gYmUgc3VyZSB0byBjb21wYXJlIG5ldyBhbmQgZXhpc3RpbmcKICAgICAgICAgKiBwcm9wcyBpZiB5b3Ugb25seSB3YW50IHRvIGhhbmRsZSBjaGFuZ2VzLgogICAgICAgICAqCiAgICAgICAgICogQ2FsbGluZyBgQ29tcG9uZW50I3NldFN0YXRlYCBnZW5lcmFsbHkgZG9lcyBub3QgdHJpZ2dlciB0aGlzIG1ldGhvZC4KICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgbm90IHN0b3Agd29ya2luZyBpbiBSZWFjdCAxNy4KICAgICAgICAgKgogICAgICAgICAqIE5vdGU6IHRoZSBwcmVzZW5jZSBvZiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMKICAgICAgICAgKiBwcmV2ZW50cyB0aGlzIGZyb20gYmVpbmcgaW52b2tlZC4KICAgICAgICAgKgogICAgICAgICAqIEBkZXByZWNhdGVkIDE2LjMsIHVzZSBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIGluc3RlYWQKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjdXBkYXRpbmctc3RhdGUtYmFzZWQtb24tcHJvcHMKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjZ3JhZHVhbC1taWdyYXRpb24tcGF0aAogICAgICAgICAqLwogICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0Q29udGV4dDogYW55KTogdm9pZDsKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlbmRlcmluZyB3aGVuIG5ldyBwcm9wcyBvciBzdGF0ZSBpcyByZWNlaXZlZC4gTm90IGNhbGxlZCBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLgogICAgICAgICAqCiAgICAgICAgICogTm90ZTogWW91IGNhbm5vdCBjYWxsIGBDb21wb25lbnQjc2V0U3RhdGVgIGhlcmUuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaW5zdGVhZDsgd2lsbCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgMTcKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjcmVhZGluZy1kb20tcHJvcGVydGllcy1iZWZvcmUtYW4tdXBkYXRlCiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9ibG9nLzIwMTgvMDMvMjcvdXBkYXRlLW9uLWFzeW5jLXJlbmRlcmluZy5odG1sI2dyYWR1YWwtbWlncmF0aW9uLXBhdGgKICAgICAgICAgKi8KICAgICAgICBjb21wb25lbnRXaWxsVXBkYXRlPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0U3RhdGU6IFJlYWRvbmx5PFM+LCBuZXh0Q29udGV4dDogYW55KTogdm9pZDsKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlbmRlcmluZyB3aGVuIG5ldyBwcm9wcyBvciBzdGF0ZSBpcyByZWNlaXZlZC4gTm90IGNhbGxlZCBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLgogICAgICAgICAqCiAgICAgICAgICogTm90ZTogWW91IGNhbm5vdCBjYWxsIGBDb21wb25lbnQjc2V0U3RhdGVgIGhlcmUuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIG5vdCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgMTcuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaW5zdGVhZAogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCNyZWFkaW5nLWRvbS1wcm9wZXJ0aWVzLWJlZm9yZS1hbi11cGRhdGUKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjZ3JhZHVhbC1taWdyYXRpb24tcGF0aAogICAgICAgICAqLwogICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0U3RhdGU6IFJlYWRvbmx5PFM+LCBuZXh0Q29udGV4dDogYW55KTogdm9pZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTWl4aW48UCwgUz4gZXh0ZW5kcyBDb21wb25lbnRMaWZlY3ljbGU8UCwgUz4gewogICAgICAgIG1peGlucz86IEFycmF5PE1peGluPFAsIFM+PiB8IHVuZGVmaW5lZDsKICAgICAgICBzdGF0aWNzPzogewogICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKCiAgICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcHJvcFR5cGVzPzogVmFsaWRhdGlvbk1hcDxhbnk+IHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHRUeXBlcz86IFZhbGlkYXRpb25NYXA8YW55PiB8IHVuZGVmaW5lZDsKICAgICAgICBjaGlsZENvbnRleHRUeXBlcz86IFZhbGlkYXRpb25NYXA8YW55PiB8IHVuZGVmaW5lZDsKCiAgICAgICAgZ2V0RGVmYXVsdFByb3BzPygpOiBQOwogICAgICAgIGdldEluaXRpYWxTdGF0ZT8oKTogUzsKICAgIH0KCiAgICBpbnRlcmZhY2UgQ29tcG9uZW50U3BlYzxQLCBTPiBleHRlbmRzIE1peGluPFAsIFM+IHsKICAgICAgICByZW5kZXIoKTogUmVhY3ROb2RlOwoKICAgICAgICBbcHJvcGVydHlOYW1lOiBzdHJpbmddOiBhbnk7CiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlUmVmPFQ+KCk6IFJlZk9iamVjdDxUPjsKCiAgICAvLyB3aWxsIHNob3cgYEZvcndhcmRSZWYoJHtDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWV9KWAgaW4gZGV2dG9vbHMgYnkgZGVmYXVsdCwKICAgIC8vIGJ1dCBjYW4gYmUgZ2l2ZW4gaXRzIG93biBzcGVjaWZpYyBuYW1lCiAgICBpbnRlcmZhY2UgRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxQPiBleHRlbmRzIE5hbWVkRXhvdGljQ29tcG9uZW50PFA+IHsKICAgICAgICBkZWZhdWx0UHJvcHM/OiBQYXJ0aWFsPFA+IHwgdW5kZWZpbmVkOwogICAgICAgIHByb3BUeXBlcz86IFdlYWtWYWxpZGF0aW9uTWFwPFA+IHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIGZvcndhcmRSZWY8VCwgUCA9IHt9PihyZW5kZXI6IEZvcndhcmRSZWZSZW5kZXJGdW5jdGlvbjxULCBQPik6IEZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8UHJvcHNXaXRob3V0UmVmPFA+ICYgUmVmQXR0cmlidXRlczxUPj47CgogICAgLyoqIEVuc3VyZXMgdGhhdCB0aGUgcHJvcHMgZG8gbm90IGluY2x1ZGUgcmVmIGF0IGFsbCAqLwogICAgdHlwZSBQcm9wc1dpdGhvdXRSZWY8UD4gPQogICAgICAgIC8vIE9taXQgd291bGQgbm90IGJlIHN1ZmZpY2llbnQgZm9yIHRoaXMuIFdlJ2QgbGlrZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBtYXBwaW5nIGFuZCBuZWVkIGEgZGlzdHJpYnV0aXZlIGNvbmRpdGlvbmFsIHRvIHN1cHBvcnQgdW5pb25zLgogICAgICAgIC8vIHNlZTogaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9jb25kaXRpb25hbC10eXBlcy5odG1sI2Rpc3RyaWJ1dGl2ZS1jb25kaXRpb25hbC10eXBlcwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjgzMzkKICAgICAgICBQIGV4dGVuZHMgYW55ID8gKCdyZWYnIGV4dGVuZHMga2V5b2YgUCA/IE9taXQ8UCwgJ3JlZic+IDogUCkgOiBQOwogICAgLyoqIEVuc3VyZXMgdGhhdCB0aGUgcHJvcHMgZG8gbm90IGluY2x1ZGUgc3RyaW5nIHJlZiwgd2hpY2ggY2Fubm90IGJlIGZvcndhcmRlZCAqLwogICAgdHlwZSBQcm9wc1dpdGhSZWY8UD4gPQogICAgICAgIC8vIEp1c3QgIlAgZXh0ZW5kcyB7IHJlZj86IGluZmVyIFIgfSIgbG9va3Mgc3VmZmljaWVudCwgYnV0IFIgd2lsbCBpbmZlciBhcyB7fSBpZiBQIGlzIHt9LgogICAgICAgICdyZWYnIGV4dGVuZHMga2V5b2YgUAogICAgICAgICAgICA/IFAgZXh0ZW5kcyB7IHJlZj86IGluZmVyIFIgfCB1bmRlZmluZWQgfQogICAgICAgICAgICAgICAgPyBzdHJpbmcgZXh0ZW5kcyBSCiAgICAgICAgICAgICAgICAgICAgPyBQcm9wc1dpdGhvdXRSZWY8UD4gJiB7IHJlZj86IEV4Y2x1ZGU8Uiwgc3RyaW5nPiB8IHVuZGVmaW5lZCB9CiAgICAgICAgICAgICAgICAgICAgOiBQCiAgICAgICAgICAgICAgICA6IFAKICAgICAgICAgICAgOiBQOwoKICAgIHR5cGUgUHJvcHNXaXRoQ2hpbGRyZW48UCA9IHVua25vd24+ID0gUCAmIHsgY2hpbGRyZW4/OiBSZWFjdE5vZGUgfCB1bmRlZmluZWQgfTsKCiAgICAvKioKICAgICAqIE5PVEU6IHByZWZlciBDb21wb25lbnRQcm9wc1dpdGhSZWYsIGlmIHRoZSByZWYgaXMgZm9yd2FyZGVkLAogICAgICogb3IgQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmIHdoZW4gcmVmcyBhcmUgbm90IHN1cHBvcnRlZC4KICAgICAqLwogICAgdHlwZSBDb21wb25lbnRQcm9wczxUIGV4dGVuZHMga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzIHwgSlNYRWxlbWVudENvbnN0cnVjdG9yPGFueT4+ID0KICAgICAgICBUIGV4dGVuZHMgSlNYRWxlbWVudENvbnN0cnVjdG9yPGluZmVyIFA+CiAgICAgICAgICAgID8gUAogICAgICAgICAgICA6IFQgZXh0ZW5kcyBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHMKICAgICAgICAgICAgICAgID8gSlNYLkludHJpbnNpY0VsZW1lbnRzW1RdCiAgICAgICAgICAgICAgICA6IHt9OwogICAgdHlwZSBDb21wb25lbnRQcm9wc1dpdGhSZWY8VCBleHRlbmRzIEVsZW1lbnRUeXBlPiA9CiAgICAgICAgVCBleHRlbmRzIChuZXcgKHByb3BzOiBpbmZlciBQKSA9PiBDb21wb25lbnQ8YW55LCBhbnk+KQogICAgICAgICAgICA/IFByb3BzV2l0aG91dFJlZjxQPiAmIFJlZkF0dHJpYnV0ZXM8SW5zdGFuY2VUeXBlPFQ+PgogICAgICAgICAgICA6IFByb3BzV2l0aFJlZjxDb21wb25lbnRQcm9wczxUPj47CiAgICB0eXBlIENvbXBvbmVudFByb3BzV2l0aG91dFJlZjxUIGV4dGVuZHMgRWxlbWVudFR5cGU+ID0KICAgICAgICBQcm9wc1dpdGhvdXRSZWY8Q29tcG9uZW50UHJvcHM8VD4+OwoKICAgIHR5cGUgQ29tcG9uZW50UmVmPFQgZXh0ZW5kcyBFbGVtZW50VHlwZT4gPSBUIGV4dGVuZHMgTmFtZWRFeG90aWNDb21wb25lbnQ8CiAgICAgICAgQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPFQ+ICYgUmVmQXR0cmlidXRlczxpbmZlciBNZXRob2Q+CiAgICA+CiAgICAgICAgPyBNZXRob2QKICAgICAgICA6IENvbXBvbmVudFByb3BzV2l0aFJlZjxUPiBleHRlbmRzIFJlZkF0dHJpYnV0ZXM8aW5mZXIgTWV0aG9kPgogICAgICAgICAgICA/IE1ldGhvZAogICAgICAgICAgICA6IG5ldmVyOwoKICAgIC8vIHdpbGwgc2hvdyBgTWVtbygke0NvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZX0pYCBpbiBkZXZ0b29scyBieSBkZWZhdWx0LAogICAgLy8gYnV0IGNhbiBiZSBnaXZlbiBpdHMgb3duIHNwZWNpZmljIG5hbWUKICAgIHR5cGUgTWVtb0V4b3RpY0NvbXBvbmVudDxUIGV4dGVuZHMgQ29tcG9uZW50VHlwZTxhbnk+PiA9IE5hbWVkRXhvdGljQ29tcG9uZW50PENvbXBvbmVudFByb3BzV2l0aFJlZjxUPj4gJiB7CiAgICAgICAgcmVhZG9ubHkgdHlwZTogVDsKICAgIH07CgogICAgZnVuY3Rpb24gbWVtbzxQIGV4dGVuZHMgb2JqZWN0PigKICAgICAgICBDb21wb25lbnQ6IEZ1bmN0aW9uQ29tcG9uZW50PFA+LAogICAgICAgIHByb3BzQXJlRXF1YWw/OiAocHJldlByb3BzOiBSZWFkb25seTxQPiwgbmV4dFByb3BzOiBSZWFkb25seTxQPikgPT4gYm9vbGVhbgogICAgKTogTmFtZWRFeG90aWNDb21wb25lbnQ8UD47CiAgICBmdW5jdGlvbiBtZW1vPFQgZXh0ZW5kcyBDb21wb25lbnRUeXBlPGFueT4+KAogICAgICAgIENvbXBvbmVudDogVCwKICAgICAgICBwcm9wc0FyZUVxdWFsPzogKHByZXZQcm9wczogUmVhZG9ubHk8Q29tcG9uZW50UHJvcHM8VD4+LCBuZXh0UHJvcHM6IFJlYWRvbmx5PENvbXBvbmVudFByb3BzPFQ+PikgPT4gYm9vbGVhbgogICAgKTogTWVtb0V4b3RpY0NvbXBvbmVudDxUPjsKCiAgICB0eXBlIExhenlFeG90aWNDb21wb25lbnQ8VCBleHRlbmRzIENvbXBvbmVudFR5cGU8YW55Pj4gPSBFeG90aWNDb21wb25lbnQ8Q29tcG9uZW50UHJvcHNXaXRoUmVmPFQ+PiAmIHsKICAgICAgICByZWFkb25seSBfcmVzdWx0OiBUOwogICAgfTsKCiAgICBmdW5jdGlvbiBsYXp5PFQgZXh0ZW5kcyBDb21wb25lbnRUeXBlPGFueT4+KAogICAgICAgIGZhY3Rvcnk6ICgpID0+IFByb21pc2U8eyBkZWZhdWx0OiBUIH0+CiAgICApOiBMYXp5RXhvdGljQ29tcG9uZW50PFQ+OwoKICAgIC8vCiAgICAvLyBSZWFjdCBIb29rcwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIGJhc2VkIG9uIHRoZSBjb2RlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEzOTY4CgogICAgLy8gVW5saWtlIHRoZSBjbGFzcyBjb21wb25lbnQgc2V0U3RhdGUsIHRoZSB1cGRhdGVzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBwYXJ0aWFsCiAgICB0eXBlIFNldFN0YXRlQWN0aW9uPFM+ID0gUyB8ICgocHJldlN0YXRlOiBTKSA9PiBTKTsKICAgIC8vIHRoaXMgdGVjaG5pY2FsbHkgZG9lcyBhY2NlcHQgYSBzZWNvbmQgYXJndW1lbnQsIGJ1dCBpdCdzIGFscmVhZHkgdW5kZXIgYSBkZXByZWNhdGlvbiB3YXJuaW5nCiAgICAvLyBhbmQgaXQncyBub3QgZXZlbiByZWxlYXNlZCBzbyBwcm9iYWJseSBiZXR0ZXIgdG8gbm90IGRlZmluZSBpdC4KICAgIHR5cGUgRGlzcGF0Y2g8QT4gPSAodmFsdWU6IEEpID0+IHZvaWQ7CiAgICAvLyBTaW5jZSBhY3Rpb24gX2Nhbl8gYmUgdW5kZWZpbmVkLCBkaXNwYXRjaCBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMuCiAgICB0eXBlIERpc3BhdGNoV2l0aG91dEFjdGlvbiA9ICgpID0+IHZvaWQ7CiAgICAvLyBVbmxpa2UgcmVkdXgsIHRoZSBhY3Rpb25zIF9jYW5fIGJlIGFueXRoaW5nCiAgICB0eXBlIFJlZHVjZXI8UywgQT4gPSAocHJldlN0YXRlOiBTLCBhY3Rpb246IEEpID0+IFM7CiAgICAvLyBJZiB1c2VSZWR1Y2VyIGFjY2VwdHMgYSByZWR1Y2VyIHdpdGhvdXQgYWN0aW9uLCBkaXNwYXRjaCBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMuCiAgICB0eXBlIFJlZHVjZXJXaXRob3V0QWN0aW9uPFM+ID0gKHByZXZTdGF0ZTogUykgPT4gUzsKICAgIC8vIHR5cGVzIHVzZWQgdG8gdHJ5IGFuZCBwcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIHJlZHVjaW5nIFMKICAgIC8vIHRvIGEgc3VwZXJ0eXBlIGNvbW1vbiB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdXNlUmVkdWNlcigpCiAgICB0eXBlIFJlZHVjZXJTdGF0ZTxSIGV4dGVuZHMgUmVkdWNlcjxhbnksIGFueT4+ID0gUiBleHRlbmRzIFJlZHVjZXI8aW5mZXIgUywgYW55PiA/IFMgOiBuZXZlcjsKICAgIHR5cGUgUmVkdWNlckFjdGlvbjxSIGV4dGVuZHMgUmVkdWNlcjxhbnksIGFueT4+ID0gUiBleHRlbmRzIFJlZHVjZXI8YW55LCBpbmZlciBBPiA/IEEgOiBuZXZlcjsKICAgIC8vIFRoZSBpZGVudGl0eSBjaGVjayBpcyBkb25lIHdpdGggdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKE9iamVjdC5pcyksIHdoaWNoIGlzIHN0cmljdGVyIHRoYW4gPT09CiAgICB0eXBlIFJlZHVjZXJTdGF0ZVdpdGhvdXRBY3Rpb248UiBleHRlbmRzIFJlZHVjZXJXaXRob3V0QWN0aW9uPGFueT4+ID0KICAgICAgICBSIGV4dGVuZHMgUmVkdWNlcldpdGhvdXRBY3Rpb248aW5mZXIgUz4gPyBTIDogbmV2ZXI7CiAgICB0eXBlIERlcGVuZGVuY3lMaXN0ID0gUmVhZG9ubHlBcnJheTx1bmtub3duPjsKCiAgICAvLyBOT1RFOiBjYWxsYmFja3MgYXJlIF9vbmx5XyBhbGxvd2VkIHRvIHJldHVybiBlaXRoZXIgdm9pZCwgb3IgYSBkZXN0cnVjdG9yLgogICAgdHlwZSBFZmZlY3RDYWxsYmFjayA9ICgpID0+ICh2b2lkIHwgRGVzdHJ1Y3Rvcik7CgogICAgaW50ZXJmYWNlIE11dGFibGVSZWZPYmplY3Q8VD4gewogICAgICAgIGN1cnJlbnQ6IFQ7CiAgICB9CgogICAgLy8gVGhpcyB3aWxsIHRlY2huaWNhbGx5IHdvcmsgaWYgeW91IGdpdmUgYSBDb25zdW1lcjxUPiBvciBQcm92aWRlcjxUPiBidXQgaXQncyBkZXByZWNhdGVkIGFuZCB3YXJucwogICAgLyoqCiAgICAgKiBBY2NlcHRzIGEgY29udGV4dCBvYmplY3QgKHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGBSZWFjdC5jcmVhdGVDb250ZXh0YCkgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQKICAgICAqIGNvbnRleHQgdmFsdWUsIGFzIGdpdmVuIGJ5IHRoZSBuZWFyZXN0IGNvbnRleHQgcHJvdmlkZXIgZm9yIHRoZSBnaXZlbiBjb250ZXh0LgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlQ29udGV4dAogICAgICovCiAgICBmdW5jdGlvbiB1c2VDb250ZXh0PFQ+KGNvbnRleHQ6IENvbnRleHQ8VD4vKiwgKG5vdCBwdWJsaWMgQVBJKSBvYnNlcnZlZEJpdHM/OiBudW1iZXJ8Ym9vbGVhbiAqLyk6IFQ7CiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdGF0ZWZ1bCB2YWx1ZSwgYW5kIGEgZnVuY3Rpb24gdG8gdXBkYXRlIGl0LgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlU3RhdGUKICAgICAqLwogICAgZnVuY3Rpb24gdXNlU3RhdGU8Uz4oaW5pdGlhbFN0YXRlOiBTIHwgKCgpID0+IFMpKTogW1MsIERpc3BhdGNoPFNldFN0YXRlQWN0aW9uPFM+Pl07CiAgICAvLyBjb252ZW5pZW5jZSBvdmVybG9hZCB3aGVuIGZpcnN0IGFyZ3VtZW50IGlzIG9taXR0ZWQKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0YXRlZnVsIHZhbHVlLCBhbmQgYSBmdW5jdGlvbiB0byB1cGRhdGUgaXQuCiAgICAgKgogICAgICogQHZlcnNpb24gMTYuOC4wCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VTdGF0ZQogICAgICovCiAgICBmdW5jdGlvbiB1c2VTdGF0ZTxTID0gdW5kZWZpbmVkPigpOiBbUyB8IHVuZGVmaW5lZCwgRGlzcGF0Y2g8U2V0U3RhdGVBY3Rpb248UyB8IHVuZGVmaW5lZD4+XTsKICAgIC8qKgogICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYHVzZVN0YXRlYC4KICAgICAqCiAgICAgKiBgdXNlUmVkdWNlcmAgaXMgdXN1YWxseSBwcmVmZXJhYmxlIHRvIGB1c2VTdGF0ZWAgd2hlbiB5b3UgaGF2ZSBjb21wbGV4IHN0YXRlIGxvZ2ljIHRoYXQgaW52b2x2ZXMKICAgICAqIG11bHRpcGxlIHN1Yi12YWx1ZXMuIEl0IGFsc28gbGV0cyB5b3Ugb3B0aW1pemUgcGVyZm9ybWFuY2UgZm9yIGNvbXBvbmVudHMgdGhhdCB0cmlnZ2VyIGRlZXAKICAgICAqIHVwZGF0ZXMgYmVjYXVzZSB5b3UgY2FuIHBhc3MgYGRpc3BhdGNoYCBkb3duIGluc3RlYWQgb2YgY2FsbGJhY2tzLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlUmVkdWNlcgogICAgICovCiAgICAvLyBvdmVybG9hZCB3aGVyZSBkaXNwYXRjaCBjb3VsZCBhY2NlcHQgMCBhcmd1bWVudHMuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyV2l0aG91dEFjdGlvbjxhbnk+LCBJPigKICAgICAgICByZWR1Y2VyOiBSLAogICAgICAgIGluaXRpYWxpemVyQXJnOiBJLAogICAgICAgIGluaXRpYWxpemVyOiAoYXJnOiBJKSA9PiBSZWR1Y2VyU3RhdGVXaXRob3V0QWN0aW9uPFI+CiAgICApOiBbUmVkdWNlclN0YXRlV2l0aG91dEFjdGlvbjxSPiwgRGlzcGF0Y2hXaXRob3V0QWN0aW9uXTsKICAgIC8qKgogICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYHVzZVN0YXRlYC4KICAgICAqCiAgICAgKiBgdXNlUmVkdWNlcmAgaXMgdXN1YWxseSBwcmVmZXJhYmxlIHRvIGB1c2VTdGF0ZWAgd2hlbiB5b3UgaGF2ZSBjb21wbGV4IHN0YXRlIGxvZ2ljIHRoYXQgaW52b2x2ZXMKICAgICAqIG11bHRpcGxlIHN1Yi12YWx1ZXMuIEl0IGFsc28gbGV0cyB5b3Ugb3B0aW1pemUgcGVyZm9ybWFuY2UgZm9yIGNvbXBvbmVudHMgdGhhdCB0cmlnZ2VyIGRlZXAKICAgICAqIHVwZGF0ZXMgYmVjYXVzZSB5b3UgY2FuIHBhc3MgYGRpc3BhdGNoYCBkb3duIGluc3RlYWQgb2YgY2FsbGJhY2tzLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlUmVkdWNlcgogICAgICovCiAgICAvLyBvdmVybG9hZCB3aGVyZSBkaXNwYXRjaCBjb3VsZCBhY2NlcHQgMCBhcmd1bWVudHMuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyV2l0aG91dEFjdGlvbjxhbnk+PigKICAgICAgICByZWR1Y2VyOiBSLAogICAgICAgIGluaXRpYWxpemVyQXJnOiBSZWR1Y2VyU3RhdGVXaXRob3V0QWN0aW9uPFI+LAogICAgICAgIGluaXRpYWxpemVyPzogdW5kZWZpbmVkCiAgICApOiBbUmVkdWNlclN0YXRlV2l0aG91dEFjdGlvbjxSPiwgRGlzcGF0Y2hXaXRob3V0QWN0aW9uXTsKICAgIC8qKgogICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYHVzZVN0YXRlYC4KICAgICAqCiAgICAgKiBgdXNlUmVkdWNlcmAgaXMgdXN1YWxseSBwcmVmZXJhYmxlIHRvIGB1c2VTdGF0ZWAgd2hlbiB5b3UgaGF2ZSBjb21wbGV4IHN0YXRlIGxvZ2ljIHRoYXQgaW52b2x2ZXMKICAgICAqIG11bHRpcGxlIHN1Yi12YWx1ZXMuIEl0IGFsc28gbGV0cyB5b3Ugb3B0aW1pemUgcGVyZm9ybWFuY2UgZm9yIGNvbXBvbmVudHMgdGhhdCB0cmlnZ2VyIGRlZXAKICAgICAqIHVwZGF0ZXMgYmVjYXVzZSB5b3UgY2FuIHBhc3MgYGRpc3BhdGNoYCBkb3duIGluc3RlYWQgb2YgY2FsbGJhY2tzLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlUmVkdWNlcgogICAgICovCiAgICAvLyBvdmVybG9hZCB3aGVyZSAiSSIgbWF5IGJlIGEgc3Vic2V0IG9mIFJlZHVjZXJTdGF0ZTxSPjsgdXNlZCB0byBwcm92aWRlIGF1dG9jb21wbGV0aW9uLgogICAgLy8gSWYgIkkiIG1hdGNoZXMgUmVkdWNlclN0YXRlPFI+IGV4YWN0bHkgdGhlbiB0aGUgbGFzdCBvdmVybG9hZCB3aWxsIGFsbG93IGluaXRpYWxpemVyIHRvIGJlIG9taXR0ZWQuCiAgICAvLyB0aGUgbGFzdCBvdmVybG9hZCBlZmZlY3RpdmVseSBiZWhhdmVzIGFzIGlmIHRoZSBpZGVudGl0eSBmdW5jdGlvbiAoeCA9PiB4KSBpcyB0aGUgaW5pdGlhbGl6ZXIuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyPGFueSwgYW55PiwgST4oCiAgICAgICAgcmVkdWNlcjogUiwKICAgICAgICBpbml0aWFsaXplckFyZzogSSAmIFJlZHVjZXJTdGF0ZTxSPiwKICAgICAgICBpbml0aWFsaXplcjogKGFyZzogSSAmIFJlZHVjZXJTdGF0ZTxSPikgPT4gUmVkdWNlclN0YXRlPFI+CiAgICApOiBbUmVkdWNlclN0YXRlPFI+LCBEaXNwYXRjaDxSZWR1Y2VyQWN0aW9uPFI+Pl07CiAgICAvKioKICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIGB1c2VTdGF0ZWAuCiAgICAgKgogICAgICogYHVzZVJlZHVjZXJgIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBgdXNlU3RhdGVgIHdoZW4geW91IGhhdmUgY29tcGxleCBzdGF0ZSBsb2dpYyB0aGF0IGludm9sdmVzCiAgICAgKiBtdWx0aXBsZSBzdWItdmFsdWVzLiBJdCBhbHNvIGxldHMgeW91IG9wdGltaXplIHBlcmZvcm1hbmNlIGZvciBjb21wb25lbnRzIHRoYXQgdHJpZ2dlciBkZWVwCiAgICAgKiB1cGRhdGVzIGJlY2F1c2UgeW91IGNhbiBwYXNzIGBkaXNwYXRjaGAgZG93biBpbnN0ZWFkIG9mIGNhbGxiYWNrcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZHVjZXIKICAgICAqLwogICAgLy8gb3ZlcmxvYWQgZm9yIGZyZWUgIkkiOyBhbGwgZ29lcyBhcyBsb25nIGFzIGluaXRpYWxpemVyIGNvbnZlcnRzIGl0IGludG8gIlJlZHVjZXJTdGF0ZTxSPiIuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyPGFueSwgYW55PiwgST4oCiAgICAgICAgcmVkdWNlcjogUiwKICAgICAgICBpbml0aWFsaXplckFyZzogSSwKICAgICAgICBpbml0aWFsaXplcjogKGFyZzogSSkgPT4gUmVkdWNlclN0YXRlPFI+CiAgICApOiBbUmVkdWNlclN0YXRlPFI+LCBEaXNwYXRjaDxSZWR1Y2VyQWN0aW9uPFI+Pl07CiAgICAvKioKICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIGB1c2VTdGF0ZWAuCiAgICAgKgogICAgICogYHVzZVJlZHVjZXJgIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBgdXNlU3RhdGVgIHdoZW4geW91IGhhdmUgY29tcGxleCBzdGF0ZSBsb2dpYyB0aGF0IGludm9sdmVzCiAgICAgKiBtdWx0aXBsZSBzdWItdmFsdWVzLiBJdCBhbHNvIGxldHMgeW91IG9wdGltaXplIHBlcmZvcm1hbmNlIGZvciBjb21wb25lbnRzIHRoYXQgdHJpZ2dlciBkZWVwCiAgICAgKiB1cGRhdGVzIGJlY2F1c2UgeW91IGNhbiBwYXNzIGBkaXNwYXRjaGAgZG93biBpbnN0ZWFkIG9mIGNhbGxiYWNrcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZHVjZXIKICAgICAqLwoKICAgIC8vIEknbSBub3Qgc3VyZSBpZiBJIGtlZXAgdGhpcyAyLWFyeSBvciBpZiBJIG1ha2UgaXQgKDIsMyktYXJ5OyBpdCdzIGN1cnJlbnRseSAoMiwzKS1hcnkuCiAgICAvLyBUaGUgRmxvdyB0eXBlcyBkbyBoYXZlIGFuIG92ZXJsb2FkIGZvciAzLWFyeSBpbnZvY2F0aW9uIHdpdGggdW5kZWZpbmVkIGluaXRpYWxpemVyLgoKICAgIC8vIE5PVEU6IHdpdGhvdXQgdGhlIFJlZHVjZXJTdGF0ZSBpbmRpcmVjdGlvbiwgVHlwZVNjcmlwdCB3b3VsZCByZWR1Y2UgUyB0byBiZSB0aGUgbW9zdCBjb21tb24KICAgIC8vIHN1cGVydHlwZSBiZXR3ZWVuIHRoZSByZWR1Y2VyJ3MgcmV0dXJuIHR5cGUgYW5kIHRoZSBpbml0aWFsU3RhdGUgKG9yIHRoZSBpbml0aWFsaXplcidzIHJldHVybiB0eXBlKSwKICAgIC8vIHdoaWNoIHdvdWxkIHByZXZlbnQgYXV0b2NvbXBsZXRpb24gZnJvbSBldmVyIHdvcmtpbmcuCgogICAgLy8gVE9ETzogZG91YmxlLWNoZWNrIGlmIHRoaXMgd2VpcmQgb3ZlcmxvYWQgbG9naWMgaXMgbmVjZXNzYXJ5LiBJdCBpcyBwb3NzaWJsZSBpdCdzIGVpdGhlciBhIGJ1ZwogICAgLy8gaW4gb2xkZXIgdmVyc2lvbnMsIG9yIGEgcmVncmVzc2lvbiBpbiBuZXdlciB2ZXJzaW9ucyBvZiB0aGUgdHlwZXNjcmlwdCBjb21wbGV0aW9uIHNlcnZpY2UuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyPGFueSwgYW55Pj4oCiAgICAgICAgcmVkdWNlcjogUiwKICAgICAgICBpbml0aWFsU3RhdGU6IFJlZHVjZXJTdGF0ZTxSPiwKICAgICAgICBpbml0aWFsaXplcj86IHVuZGVmaW5lZAogICAgKTogW1JlZHVjZXJTdGF0ZTxSPiwgRGlzcGF0Y2g8UmVkdWNlckFjdGlvbjxSPj5dOwogICAgLyoqCiAgICAgKiBgdXNlUmVmYCByZXR1cm5zIGEgbXV0YWJsZSByZWYgb2JqZWN0IHdob3NlIGAuY3VycmVudGAgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIHBhc3NlZCBhcmd1bWVudAogICAgICogKGBpbml0aWFsVmFsdWVgKS4gVGhlIHJldHVybmVkIG9iamVjdCB3aWxsIHBlcnNpc3QgZm9yIHRoZSBmdWxsIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuCiAgICAgKgogICAgICogTm90ZSB0aGF0IGB1c2VSZWYoKWAgaXMgdXNlZnVsIGZvciBtb3JlIHRoYW4gdGhlIGByZWZgIGF0dHJpYnV0ZS4gSXTigJlzIGhhbmR5IGZvciBrZWVwaW5nIGFueSBtdXRhYmxlCiAgICAgKiB2YWx1ZSBhcm91bmQgc2ltaWxhciB0byBob3cgeW914oCZZCB1c2UgaW5zdGFuY2UgZmllbGRzIGluIGNsYXNzZXMuCiAgICAgKgogICAgICogQHZlcnNpb24gMTYuOC4wCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VSZWYKICAgICAqLwogICAgZnVuY3Rpb24gdXNlUmVmPFQ+KGluaXRpYWxWYWx1ZTogVCk6IE11dGFibGVSZWZPYmplY3Q8VD47CiAgICAvLyBjb252ZW5pZW5jZSBvdmVybG9hZCBmb3IgcmVmcyBnaXZlbiBhcyBhIHJlZiBwcm9wIGFzIHRoZXkgdHlwaWNhbGx5IHN0YXJ0IHdpdGggYSBudWxsIHZhbHVlCiAgICAvKioKICAgICAqIGB1c2VSZWZgIHJldHVybnMgYSBtdXRhYmxlIHJlZiBvYmplY3Qgd2hvc2UgYC5jdXJyZW50YCBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCB0byB0aGUgcGFzc2VkIGFyZ3VtZW50CiAgICAgKiAoYGluaXRpYWxWYWx1ZWApLiBUaGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgcGVyc2lzdCBmb3IgdGhlIGZ1bGwgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBOb3RlIHRoYXQgYHVzZVJlZigpYCBpcyB1c2VmdWwgZm9yIG1vcmUgdGhhbiB0aGUgYHJlZmAgYXR0cmlidXRlLiBJdOKAmXMgaGFuZHkgZm9yIGtlZXBpbmcgYW55IG11dGFibGUKICAgICAqIHZhbHVlIGFyb3VuZCBzaW1pbGFyIHRvIGhvdyB5b3XigJlkIHVzZSBpbnN0YW5jZSBmaWVsZHMgaW4gY2xhc3Nlcy4KICAgICAqCiAgICAgKiBVc2FnZSBub3RlOiBpZiB5b3UgbmVlZCB0aGUgcmVzdWx0IG9mIHVzZVJlZiB0byBiZSBkaXJlY3RseSBtdXRhYmxlLCBpbmNsdWRlIGB8IG51bGxgIGluIHRoZSB0eXBlCiAgICAgKiBvZiB0aGUgZ2VuZXJpYyBhcmd1bWVudC4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZgogICAgICovCiAgICBmdW5jdGlvbiB1c2VSZWY8VD4oaW5pdGlhbFZhbHVlOiBUfG51bGwpOiBSZWZPYmplY3Q8VD47CiAgICAvLyBjb252ZW5pZW5jZSBvdmVybG9hZCBmb3IgcG90ZW50aWFsbHkgdW5kZWZpbmVkIGluaXRpYWxWYWx1ZSAvIGNhbGwgd2l0aCAwIGFyZ3VtZW50cwogICAgLy8gaGFzIGEgZGVmYXVsdCB0byBzdG9wIGl0IGZyb20gZGVmYXVsdGluZyB0byB7fSBpbnN0ZWFkCiAgICAvKioKICAgICAqIGB1c2VSZWZgIHJldHVybnMgYSBtdXRhYmxlIHJlZiBvYmplY3Qgd2hvc2UgYC5jdXJyZW50YCBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCB0byB0aGUgcGFzc2VkIGFyZ3VtZW50CiAgICAgKiAoYGluaXRpYWxWYWx1ZWApLiBUaGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgcGVyc2lzdCBmb3IgdGhlIGZ1bGwgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBOb3RlIHRoYXQgYHVzZVJlZigpYCBpcyB1c2VmdWwgZm9yIG1vcmUgdGhhbiB0aGUgYHJlZmAgYXR0cmlidXRlLiBJdOKAmXMgaGFuZHkgZm9yIGtlZXBpbmcgYW55IG11dGFibGUKICAgICAqIHZhbHVlIGFyb3VuZCBzaW1pbGFyIHRvIGhvdyB5b3XigJlkIHVzZSBpbnN0YW5jZSBmaWVsZHMgaW4gY2xhc3Nlcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZgogICAgICovCiAgICBmdW5jdGlvbiB1c2VSZWY8VCA9IHVuZGVmaW5lZD4oKTogTXV0YWJsZVJlZk9iamVjdDxUIHwgdW5kZWZpbmVkPjsKICAgIC8qKgogICAgICogVGhlIHNpZ25hdHVyZSBpcyBpZGVudGljYWwgdG8gYHVzZUVmZmVjdGAsIGJ1dCBpdCBmaXJlcyBzeW5jaHJvbm91c2x5IGFmdGVyIGFsbCBET00gbXV0YXRpb25zLgogICAgICogVXNlIHRoaXMgdG8gcmVhZCBsYXlvdXQgZnJvbSB0aGUgRE9NIGFuZCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlci4gVXBkYXRlcyBzY2hlZHVsZWQgaW5zaWRlCiAgICAgKiBgdXNlTGF5b3V0RWZmZWN0YCB3aWxsIGJlIGZsdXNoZWQgc3luY2hyb25vdXNseSwgYmVmb3JlIHRoZSBicm93c2VyIGhhcyBhIGNoYW5jZSB0byBwYWludC4KICAgICAqCiAgICAgKiBQcmVmZXIgdGhlIHN0YW5kYXJkIGB1c2VFZmZlY3RgIHdoZW4gcG9zc2libGUgdG8gYXZvaWQgYmxvY2tpbmcgdmlzdWFsIHVwZGF0ZXMuCiAgICAgKgogICAgICogSWYgeW914oCZcmUgbWlncmF0aW5nIGNvZGUgZnJvbSBhIGNsYXNzIGNvbXBvbmVudCwgYHVzZUxheW91dEVmZmVjdGAgZmlyZXMgaW4gdGhlIHNhbWUgcGhhc2UgYXMKICAgICAqIGBjb21wb25lbnREaWRNb3VudGAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlTGF5b3V0RWZmZWN0CiAgICAgKi8KICAgIGZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChlZmZlY3Q6IEVmZmVjdENhbGxiYWNrLCBkZXBzPzogRGVwZW5kZW5jeUxpc3QpOiB2b2lkOwogICAgLyoqCiAgICAgKiBBY2NlcHRzIGEgZnVuY3Rpb24gdGhhdCBjb250YWlucyBpbXBlcmF0aXZlLCBwb3NzaWJseSBlZmZlY3RmdWwgY29kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gZWZmZWN0IEltcGVyYXRpdmUgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGEgY2xlYW51cCBmdW5jdGlvbgogICAgICogQHBhcmFtIGRlcHMgSWYgcHJlc2VudCwgZWZmZWN0IHdpbGwgb25seSBhY3RpdmF0ZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBsaXN0IGNoYW5nZS4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZUVmZmVjdAogICAgICovCiAgICBmdW5jdGlvbiB1c2VFZmZlY3QoZWZmZWN0OiBFZmZlY3RDYWxsYmFjaywgZGVwcz86IERlcGVuZGVuY3lMaXN0KTogdm9pZDsKICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgYWNjZXB0IHN0cmluZ3MsIGJ1dCB0aGlzIHdpbGwgaGF2ZSB0byBiZSBmaXhlZCBieSByZW1vdmluZyBzdHJpbmdzIGZyb20gdHlwZSBSZWY8VD4KICAgIC8qKgogICAgICogYHVzZUltcGVyYXRpdmVIYW5kbGVgIGN1c3RvbWl6ZXMgdGhlIGluc3RhbmNlIHZhbHVlIHRoYXQgaXMgZXhwb3NlZCB0byBwYXJlbnQgY29tcG9uZW50cyB3aGVuIHVzaW5nCiAgICAgKiBgcmVmYC4gQXMgYWx3YXlzLCBpbXBlcmF0aXZlIGNvZGUgdXNpbmcgcmVmcyBzaG91bGQgYmUgYXZvaWRlZCBpbiBtb3N0IGNhc2VzLgogICAgICoKICAgICAqIGB1c2VJbXBlcmF0aXZlSGFuZGxlYCBzaG91bGQgYmUgdXNlZCB3aXRoIGBSZWFjdC5mb3J3YXJkUmVmYC4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZUltcGVyYXRpdmVIYW5kbGUKICAgICAqLwogICAgZnVuY3Rpb24gdXNlSW1wZXJhdGl2ZUhhbmRsZTxULCBSIGV4dGVuZHMgVD4ocmVmOiBSZWY8VD58dW5kZWZpbmVkLCBpbml0OiAoKSA9PiBSLCBkZXBzPzogRGVwZW5kZW5jeUxpc3QpOiB2b2lkOwogICAgLy8gSSBtYWRlICdpbnB1dHMnIHJlcXVpcmVkIGhlcmUgYW5kIGluIHVzZU1lbW8gYXMgdGhlcmUncyBubyBwb2ludCB0byBtZW1vaXppbmcgd2l0aG91dCB0aGUgbWVtb2l6YXRpb24ga2V5CiAgICAvLyB1c2VDYWxsYmFjayhYKSBpcyBpZGVudGljYWwgdG8ganVzdCB1c2luZyBYLCB1c2VNZW1vKCgpID0+IFkpIGlzIGlkZW50aWNhbCB0byBqdXN0IHVzaW5nIFkuCiAgICAvKioKICAgICAqIGB1c2VDYWxsYmFja2Agd2lsbCByZXR1cm4gYSBtZW1vaXplZCB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFjayB0aGF0IG9ubHkgY2hhbmdlcyBpZiBvbmUgb2YgdGhlIGBpbnB1dHNgCiAgICAgKiBoYXMgY2hhbmdlZC4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZUNhbGxiYWNrCiAgICAgKi8KICAgIC8vIEEgc3BlY2lmaWMgZnVuY3Rpb24gdHlwZSB3b3VsZCBub3QgdHJpZ2dlciBpbXBsaWNpdCBhbnkuCiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzUyODczI2lzc3VlY29tbWVudC04NDU4MDY0MzUgZm9yIGEgY29tcGFyaXNvbiBiZXR3ZWVuIGBGdW5jdGlvbmAgYW5kIG1vcmUgc3BlY2lmaWMgdHlwZXMuCiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgYmFuLXR5cGVzCiAgICBmdW5jdGlvbiB1c2VDYWxsYmFjazxUIGV4dGVuZHMgRnVuY3Rpb24+KGNhbGxiYWNrOiBULCBkZXBzOiBEZXBlbmRlbmN5TGlzdCk6IFQ7CiAgICAvKioKICAgICAqIGB1c2VNZW1vYCB3aWxsIG9ubHkgcmVjb21wdXRlIHRoZSBtZW1vaXplZCB2YWx1ZSB3aGVuIG9uZSBvZiB0aGUgYGRlcHNgIGhhcyBjaGFuZ2VkLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlTWVtbwogICAgICovCiAgICAvLyBhbGxvdyB1bmRlZmluZWQsIGJ1dCBkb24ndCBtYWtlIGl0IG9wdGlvbmFsIGFzIHRoYXQgaXMgdmVyeSBsaWtlbHkgYSBtaXN0YWtlCiAgICBmdW5jdGlvbiB1c2VNZW1vPFQ+KGZhY3Rvcnk6ICgpID0+IFQsIGRlcHM6IERlcGVuZGVuY3lMaXN0IHwgdW5kZWZpbmVkKTogVDsKICAgIC8qKgogICAgICogYHVzZURlYnVnVmFsdWVgIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgYSBsYWJlbCBmb3IgY3VzdG9tIGhvb2tzIGluIFJlYWN0IERldlRvb2xzLgogICAgICoKICAgICAqIE5PVEU6IFdlIGRvbuKAmXQgcmVjb21tZW5kIGFkZGluZyBkZWJ1ZyB2YWx1ZXMgdG8gZXZlcnkgY3VzdG9tIGhvb2suCiAgICAgKiBJdOKAmXMgbW9zdCB2YWx1YWJsZSBmb3IgY3VzdG9tIGhvb2tzIHRoYXQgYXJlIHBhcnQgb2Ygc2hhcmVkIGxpYnJhcmllcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZURlYnVnVmFsdWUKICAgICAqLwogICAgLy8gdGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBob29rIGlzIGl0c2VsZiBkZXJpdmVkIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgYXQgcnVudGltZToKICAgIC8vIGl0J3MganVzdCB0aGUgZnVuY3Rpb24gbmFtZSB3aXRob3V0IHRoZSAidXNlIiBwcmVmaXguCiAgICBmdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlPFQ+KHZhbHVlOiBULCBmb3JtYXQ/OiAodmFsdWU6IFQpID0+IGFueSk6IHZvaWQ7CgogICAgLy8gbXVzdCBiZSBzeW5jaHJvbm91cwogICAgZXhwb3J0IHR5cGUgVHJhbnNpdGlvbkZ1bmN0aW9uID0gKCkgPT4gVm9pZE9yVW5kZWZpbmVkT25seTsKICAgIC8vIHN0cmFuZ2UgZGVmaW5pdGlvbiB0byBhbGxvdyB2c2NvZGUgdG8gc2hvdyBkb2N1bWVudGF0aW9uIG9uIHRoZSBpbnZvY2F0aW9uCiAgICBleHBvcnQgaW50ZXJmYWNlIFRyYW5zaXRpb25TdGFydEZ1bmN0aW9uIHsKICAgICAgICAvKioKICAgICAgICAgKiBTdGF0ZSB1cGRhdGVzIGNhdXNlZCBpbnNpZGUgdGhlIGNhbGxiYWNrIGFyZSBhbGxvd2VkIHRvIGJlIGRlZmVycmVkLgogICAgICAgICAqCiAgICAgICAgICogKipJZiBzb21lIHN0YXRlIHVwZGF0ZSBjYXVzZXMgYSBjb21wb25lbnQgdG8gc3VzcGVuZCwgdGhhdCBzdGF0ZSB1cGRhdGUgc2hvdWxkIGJlIHdyYXBwZWQgaW4gYSB0cmFuc2l0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBfc3luY2hyb25vdXNfIGZ1bmN0aW9uIHdoaWNoIGNhdXNlcyBzdGF0ZSB1cGRhdGVzIHRoYXQgY2FuIGJlIGRlZmVycmVkLgogICAgICAgICAqLwogICAgICAgIChjYWxsYmFjazogVHJhbnNpdGlvbkZ1bmN0aW9uKTogdm9pZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBkZWZlcnJlZCB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSB0aGF0IG1heSDigJxsYWcgYmVoaW5k4oCdIGl0LgogICAgICoKICAgICAqIFRoaXMgaXMgY29tbW9ubHkgdXNlZCB0byBrZWVwIHRoZSBpbnRlcmZhY2UgcmVzcG9uc2l2ZSB3aGVuIHlvdSBoYXZlIHNvbWV0aGluZyB0aGF0IHJlbmRlcnMgaW1tZWRpYXRlbHkKICAgICAqIGJhc2VkIG9uIHVzZXIgaW5wdXQgYW5kIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIHdhaXQgZm9yIGEgZGF0YSBmZXRjaC4KICAgICAqCiAgICAgKiBBIGdvb2QgZXhhbXBsZSBvZiB0aGlzIGlzIGEgdGV4dCBpbnB1dC4KICAgICAqCiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRoYXQgaXMgZ29pbmcgdG8gYmUgZGVmZXJyZWQKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VEZWZlcnJlZFZhbHVlCiAgICAgKi8KICAgIGV4cG9ydCBmdW5jdGlvbiB1c2VEZWZlcnJlZFZhbHVlPFQ+KHZhbHVlOiBUKTogVDsKCiAgICAvKioKICAgICAqIEFsbG93cyBjb21wb25lbnRzIHRvIGF2b2lkIHVuZGVzaXJhYmxlIGxvYWRpbmcgc3RhdGVzIGJ5IHdhaXRpbmcgZm9yIGNvbnRlbnQgdG8gbG9hZAogICAgICogYmVmb3JlIHRyYW5zaXRpb25pbmcgdG8gdGhlIG5leHQgc2NyZWVuLiBJdCBhbHNvIGFsbG93cyBjb21wb25lbnRzIHRvIGRlZmVyIHNsb3dlciwKICAgICAqIGRhdGEgZmV0Y2hpbmcgdXBkYXRlcyB1bnRpbCBzdWJzZXF1ZW50IHJlbmRlcnMgc28gdGhhdCBtb3JlIGNydWNpYWwgdXBkYXRlcyBjYW4gYmUKICAgICAqIHJlbmRlcmVkIGltbWVkaWF0ZWx5LgogICAgICoKICAgICAqIFRoZSBgdXNlVHJhbnNpdGlvbmAgaG9vayByZXR1cm5zIHR3byB2YWx1ZXMgaW4gYW4gYXJyYXkuCiAgICAgKgogICAgICogVGhlIGZpcnN0IGlzIGEgYm9vbGVhbiwgUmVhY3TigJlzIHdheSBvZiBpbmZvcm1pbmcgdXMgd2hldGhlciB3ZeKAmXJlIHdhaXRpbmcgZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGZpbmlzaC4KICAgICAqIFRoZSBzZWNvbmQgaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2FsbGJhY2suIFdlIGNhbiB1c2UgaXQgdG8gdGVsbCBSZWFjdCB3aGljaCBzdGF0ZSB3ZSB3YW50IHRvIGRlZmVyLgogICAgICoKICAgICAqICoqSWYgc29tZSBzdGF0ZSB1cGRhdGUgY2F1c2VzIGEgY29tcG9uZW50IHRvIHN1c3BlbmQsIHRoYXQgc3RhdGUgdXBkYXRlIHNob3VsZCBiZSB3cmFwcGVkIGluIGEgdHJhbnNpdGlvbi4qKmAKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VUcmFuc2l0aW9uCiAgICAgKi8KICAgIGV4cG9ydCBmdW5jdGlvbiB1c2VUcmFuc2l0aW9uKCk6IFtib29sZWFuLCBUcmFuc2l0aW9uU3RhcnRGdW5jdGlvbl07CgogICAgLyoqCiAgICAgKiBTaW1pbGFyIHRvIGB1c2VUcmFuc2l0aW9uYCBidXQgYWxsb3dzIHVzZXMgd2hlcmUgaG9va3MgYXJlIG5vdCBhdmFpbGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxiYWNrIEEgX3N5bmNocm9ub3VzXyBmdW5jdGlvbiB3aGljaCBjYXVzZXMgc3RhdGUgdXBkYXRlcyB0aGF0IGNhbiBiZSBkZWZlcnJlZC4KICAgICAqLwogICAgZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihzY29wZTogVHJhbnNpdGlvbkZ1bmN0aW9uKTogdm9pZDsKCiAgICBleHBvcnQgZnVuY3Rpb24gdXNlSWQoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQHBhcmFtIGVmZmVjdCBJbXBlcmF0aXZlIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBhIGNsZWFudXAgZnVuY3Rpb24KICAgICAqIEBwYXJhbSBkZXBzIElmIHByZXNlbnQsIGVmZmVjdCB3aWxsIG9ubHkgYWN0aXZhdGUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgbGlzdCBjaGFuZ2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMTkxMwogICAgICovCiAgICAgZXhwb3J0IGZ1bmN0aW9uIHVzZUluc2VydGlvbkVmZmVjdChlZmZlY3Q6IEVmZmVjdENhbGxiYWNrLCBkZXBzPzogRGVwZW5kZW5jeUxpc3QpOiB2b2lkOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN1YnNjcmliZQogICAgICogQHBhcmFtIGdldFNuYXBzaG90CiAgICAgKgogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3R3Zy9yZWFjdC0xOC9kaXNjdXNzaW9ucy84NgogICAgICovCiAgICAvLyBrZWVwIGluIHN5bmMgd2l0aCBgdXNlU3luY0V4dGVybmFsU3RvcmVgIGZyb20gYHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlYAogICAgZXhwb3J0IGZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlPFNuYXBzaG90PigKICAgICAgICBzdWJzY3JpYmU6IChvblN0b3JlQ2hhbmdlOiAoKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkLAogICAgICAgIGdldFNuYXBzaG90OiAoKSA9PiBTbmFwc2hvdCwKICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdD86ICgpID0+IFNuYXBzaG90LAogICAgKTogU25hcHNob3Q7CgogICAgLy8KICAgIC8vIEV2ZW50IFN5c3RlbQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gVE9ETzogY2hhbmdlIGFueSB0byB1bmtub3duIHdoZW4gbW92aW5nIHRvIFRTIHYzCiAgICBpbnRlcmZhY2UgQmFzZVN5bnRoZXRpY0V2ZW50PEUgPSBvYmplY3QsIEMgPSBhbnksIFQgPSBhbnk+IHsKICAgICAgICBuYXRpdmVFdmVudDogRTsKICAgICAgICBjdXJyZW50VGFyZ2V0OiBDOwogICAgICAgIHRhcmdldDogVDsKICAgICAgICBidWJibGVzOiBib29sZWFuOwogICAgICAgIGNhbmNlbGFibGU6IGJvb2xlYW47CiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjsKICAgICAgICBldmVudFBoYXNlOiBudW1iZXI7CiAgICAgICAgaXNUcnVzdGVkOiBib29sZWFuOwogICAgICAgIHByZXZlbnREZWZhdWx0KCk6IHZvaWQ7CiAgICAgICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47CiAgICAgICAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7CiAgICAgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjsKICAgICAgICBwZXJzaXN0KCk6IHZvaWQ7CiAgICAgICAgdGltZVN0YW1wOiBudW1iZXI7CiAgICAgICAgdHlwZTogc3RyaW5nOwogICAgfQoKICAgIC8qKgogICAgICogY3VycmVudFRhcmdldCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IG9uIHdoaWNoIHRoZSBldmVudCBsaXN0ZW5lciBpcyByZWdpc3RlcmVkLgogICAgICoKICAgICAqIHRhcmdldCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGZyb20gd2hpY2ggdGhlIGV2ZW50IHdhcyBvcmlnaW5hbGx5IGRpc3BhdGNoZWQuCiAgICAgKiBUaGlzIG1pZ2h0IGJlIGEgY2hpbGQgZWxlbWVudCB0byB0aGUgZWxlbWVudCBvbiB3aGljaCB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgcmVnaXN0ZXJlZC4KICAgICAqIElmIHlvdSB0aG91Z2h0IHRoaXMgc2hvdWxkIGJlIGBFdmVudFRhcmdldCAmIFRgLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzExNTA4I2lzc3VlY29tbWVudC0yNTYwNDU2ODIKICAgICAqLwogICAgaW50ZXJmYWNlIFN5bnRoZXRpY0V2ZW50PFQgPSBFbGVtZW50LCBFID0gRXZlbnQ+IGV4dGVuZHMgQmFzZVN5bnRoZXRpY0V2ZW50PEUsIEV2ZW50VGFyZ2V0ICYgVCwgRXZlbnRUYXJnZXQ+IHt9CgogICAgaW50ZXJmYWNlIENsaXBib2FyZEV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFQsIE5hdGl2ZUNsaXBib2FyZEV2ZW50PiB7CiAgICAgICAgY2xpcGJvYXJkRGF0YTogRGF0YVRyYW5zZmVyOwogICAgfQoKICAgIGludGVyZmFjZSBDb21wb3NpdGlvbkV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFQsIE5hdGl2ZUNvbXBvc2l0aW9uRXZlbnQ+IHsKICAgICAgICBkYXRhOiBzdHJpbmc7CiAgICB9CgogICAgaW50ZXJmYWNlIERyYWdFdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBNb3VzZUV2ZW50PFQsIE5hdGl2ZURyYWdFdmVudD4gewogICAgICAgIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyOwogICAgfQoKICAgIGludGVyZmFjZSBQb2ludGVyRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgTW91c2VFdmVudDxULCBOYXRpdmVQb2ludGVyRXZlbnQ+IHsKICAgICAgICBwb2ludGVySWQ6IG51bWJlcjsKICAgICAgICBwcmVzc3VyZTogbnVtYmVyOwogICAgICAgIHRhbmdlbnRpYWxQcmVzc3VyZTogbnVtYmVyOwogICAgICAgIHRpbHRYOiBudW1iZXI7CiAgICAgICAgdGlsdFk6IG51bWJlcjsKICAgICAgICB0d2lzdDogbnVtYmVyOwogICAgICAgIHdpZHRoOiBudW1iZXI7CiAgICAgICAgaGVpZ2h0OiBudW1iZXI7CiAgICAgICAgcG9pbnRlclR5cGU6ICdtb3VzZScgfCAncGVuJyB8ICd0b3VjaCc7CiAgICAgICAgaXNQcmltYXJ5OiBib29sZWFuOwogICAgfQoKICAgIGludGVyZmFjZSBGb2N1c0V2ZW50PFRhcmdldCA9IEVsZW1lbnQsIFJlbGF0ZWRUYXJnZXQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFRhcmdldCwgTmF0aXZlRm9jdXNFdmVudD4gewogICAgICAgIHJlbGF0ZWRUYXJnZXQ6IChFdmVudFRhcmdldCAmIFJlbGF0ZWRUYXJnZXQpIHwgbnVsbDsKICAgICAgICB0YXJnZXQ6IEV2ZW50VGFyZ2V0ICYgVGFyZ2V0OwogICAgfQoKICAgIGludGVyZmFjZSBGb3JtRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgU3ludGhldGljRXZlbnQ8VD4gewogICAgfQoKICAgIGludGVyZmFjZSBJbnZhbGlkRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgU3ludGhldGljRXZlbnQ8VD4gewogICAgICAgIHRhcmdldDogRXZlbnRUYXJnZXQgJiBUOwogICAgfQoKICAgIGludGVyZmFjZSBDaGFuZ2VFdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBTeW50aGV0aWNFdmVudDxUPiB7CiAgICAgICAgdGFyZ2V0OiBFdmVudFRhcmdldCAmIFQ7CiAgICB9CgogICAgZXhwb3J0IHR5cGUgTW9kaWZpZXJLZXkgPSAiQWx0IiB8ICJBbHRHcmFwaCIgfCAiQ2Fwc0xvY2siIHwgIkNvbnRyb2wiIHwgIkZuIiB8ICJGbkxvY2siIHwgIkh5cGVyIiB8ICJNZXRhIiB8ICJOdW1Mb2NrIiB8ICJTY3JvbGxMb2NrIiB8ICJTaGlmdCIgfCAiU3VwZXIiIHwgIlN5bWJvbCIgfCAiU3ltYm9sTG9jayI7CgogICAgaW50ZXJmYWNlIEtleWJvYXJkRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgVUlFdmVudDxULCBOYXRpdmVLZXlib2FyZEV2ZW50PiB7CiAgICAgICAgYWx0S2V5OiBib29sZWFuOwogICAgICAgIC8qKiBAZGVwcmVjYXRlZCAqLwogICAgICAgIGNoYXJDb2RlOiBudW1iZXI7CiAgICAgICAgY3RybEtleTogYm9vbGVhbjsKICAgICAgICBjb2RlOiBzdHJpbmc7CiAgICAgICAgLyoqCiAgICAgICAgICogU2VlIFtET00gTGV2ZWwgMyBFdmVudHMgc3BlY10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLWtleS8ja2V5cy1tb2RpZmllcikuIGZvciBhIGxpc3Qgb2YgdmFsaWQgKGNhc2Utc2Vuc2l0aXZlKSBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICovCiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZShrZXk6IE1vZGlmaWVyS2V5KTogYm9vbGVhbjsKICAgICAgICAvKioKICAgICAgICAgKiBTZWUgdGhlIFtET00gTGV2ZWwgMyBFdmVudHMgc3BlY10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLWtleS8jbmFtZWQta2V5LWF0dHJpYnV0ZS12YWx1ZXMpLiBmb3IgcG9zc2libGUgdmFsdWVzCiAgICAgICAgICovCiAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAga2V5Q29kZTogbnVtYmVyOwogICAgICAgIGxvY2FsZTogc3RyaW5nOwogICAgICAgIGxvY2F0aW9uOiBudW1iZXI7CiAgICAgICAgbWV0YUtleTogYm9vbGVhbjsKICAgICAgICByZXBlYXQ6IGJvb2xlYW47CiAgICAgICAgc2hpZnRLZXk6IGJvb2xlYW47CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgd2hpY2g6IG51bWJlcjsKICAgIH0KCiAgICBpbnRlcmZhY2UgTW91c2VFdmVudDxUID0gRWxlbWVudCwgRSA9IE5hdGl2ZU1vdXNlRXZlbnQ+IGV4dGVuZHMgVUlFdmVudDxULCBFPiB7CiAgICAgICAgYWx0S2V5OiBib29sZWFuOwogICAgICAgIGJ1dHRvbjogbnVtYmVyOwogICAgICAgIGJ1dHRvbnM6IG51bWJlcjsKICAgICAgICBjbGllbnRYOiBudW1iZXI7CiAgICAgICAgY2xpZW50WTogbnVtYmVyOwogICAgICAgIGN0cmxLZXk6IGJvb2xlYW47CiAgICAgICAgLyoqCiAgICAgICAgICogU2VlIFtET00gTGV2ZWwgMyBFdmVudHMgc3BlY10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLWtleS8ja2V5cy1tb2RpZmllcikuIGZvciBhIGxpc3Qgb2YgdmFsaWQgKGNhc2Utc2Vuc2l0aXZlKSBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICovCiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZShrZXk6IE1vZGlmaWVyS2V5KTogYm9vbGVhbjsKICAgICAgICBtZXRhS2V5OiBib29sZWFuOwogICAgICAgIG1vdmVtZW50WDogbnVtYmVyOwogICAgICAgIG1vdmVtZW50WTogbnVtYmVyOwogICAgICAgIHBhZ2VYOiBudW1iZXI7CiAgICAgICAgcGFnZVk6IG51bWJlcjsKICAgICAgICByZWxhdGVkVGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGw7CiAgICAgICAgc2NyZWVuWDogbnVtYmVyOwogICAgICAgIHNjcmVlblk6IG51bWJlcjsKICAgICAgICBzaGlmdEtleTogYm9vbGVhbjsKICAgIH0KCiAgICBpbnRlcmZhY2UgVG91Y2hFdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBVSUV2ZW50PFQsIE5hdGl2ZVRvdWNoRXZlbnQ+IHsKICAgICAgICBhbHRLZXk6IGJvb2xlYW47CiAgICAgICAgY2hhbmdlZFRvdWNoZXM6IFRvdWNoTGlzdDsKICAgICAgICBjdHJsS2V5OiBib29sZWFuOwogICAgICAgIC8qKgogICAgICAgICAqIFNlZSBbRE9NIExldmVsIDMgRXZlbnRzIHNwZWNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi91aWV2ZW50cy1rZXkvI2tleXMtbW9kaWZpZXIpLiBmb3IgYSBsaXN0IG9mIHZhbGlkIChjYXNlLXNlbnNpdGl2ZSkgYXJndW1lbnRzIHRvIHRoaXMgbWV0aG9kLgogICAgICAgICAqLwogICAgICAgIGdldE1vZGlmaWVyU3RhdGUoa2V5OiBNb2RpZmllcktleSk6IGJvb2xlYW47CiAgICAgICAgbWV0YUtleTogYm9vbGVhbjsKICAgICAgICBzaGlmdEtleTogYm9vbGVhbjsKICAgICAgICB0YXJnZXRUb3VjaGVzOiBUb3VjaExpc3Q7CiAgICAgICAgdG91Y2hlczogVG91Y2hMaXN0OwogICAgfQoKICAgIGludGVyZmFjZSBVSUV2ZW50PFQgPSBFbGVtZW50LCBFID0gTmF0aXZlVUlFdmVudD4gZXh0ZW5kcyBTeW50aGV0aWNFdmVudDxULCBFPiB7CiAgICAgICAgZGV0YWlsOiBudW1iZXI7CiAgICAgICAgdmlldzogQWJzdHJhY3RWaWV3OwogICAgfQoKICAgIGludGVyZmFjZSBXaGVlbEV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIE1vdXNlRXZlbnQ8VCwgTmF0aXZlV2hlZWxFdmVudD4gewogICAgICAgIGRlbHRhTW9kZTogbnVtYmVyOwogICAgICAgIGRlbHRhWDogbnVtYmVyOwogICAgICAgIGRlbHRhWTogbnVtYmVyOwogICAgICAgIGRlbHRhWjogbnVtYmVyOwogICAgfQoKICAgIGludGVyZmFjZSBBbmltYXRpb25FdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBTeW50aGV0aWNFdmVudDxULCBOYXRpdmVBbmltYXRpb25FdmVudD4gewogICAgICAgIGFuaW1hdGlvbk5hbWU6IHN0cmluZzsKICAgICAgICBlbGFwc2VkVGltZTogbnVtYmVyOwogICAgICAgIHBzZXVkb0VsZW1lbnQ6IHN0cmluZzsKICAgIH0KCiAgICBpbnRlcmZhY2UgVHJhbnNpdGlvbkV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFQsIE5hdGl2ZVRyYW5zaXRpb25FdmVudD4gewogICAgICAgIGVsYXBzZWRUaW1lOiBudW1iZXI7CiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7CiAgICAgICAgcHNldWRvRWxlbWVudDogc3RyaW5nOwogICAgfQoKICAgIC8vCiAgICAvLyBFdmVudCBIYW5kbGVyIFR5cGVzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdHlwZSBFdmVudEhhbmRsZXI8RSBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PGFueT4+ID0geyBiaXZhcmlhbmNlSGFjayhldmVudDogRSk6IHZvaWQgfVsiYml2YXJpYW5jZUhhY2siXTsKCiAgICB0eXBlIFJlYWN0RXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxTeW50aGV0aWNFdmVudDxUPj47CgogICAgdHlwZSBDbGlwYm9hcmRFdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPENsaXBib2FyZEV2ZW50PFQ+PjsKICAgIHR5cGUgQ29tcG9zaXRpb25FdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPENvbXBvc2l0aW9uRXZlbnQ8VD4+OwogICAgdHlwZSBEcmFnRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxEcmFnRXZlbnQ8VD4+OwogICAgdHlwZSBGb2N1c0V2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8Rm9jdXNFdmVudDxUPj47CiAgICB0eXBlIEZvcm1FdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPEZvcm1FdmVudDxUPj47CiAgICB0eXBlIENoYW5nZUV2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ8VD4+OwogICAgdHlwZSBLZXlib2FyZEV2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8S2V5Ym9hcmRFdmVudDxUPj47CiAgICB0eXBlIE1vdXNlRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxNb3VzZUV2ZW50PFQ+PjsKICAgIHR5cGUgVG91Y2hFdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPFRvdWNoRXZlbnQ8VD4+OwogICAgdHlwZSBQb2ludGVyRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxQb2ludGVyRXZlbnQ8VD4+OwogICAgdHlwZSBVSUV2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8VUlFdmVudDxUPj47CiAgICB0eXBlIFdoZWVsRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxXaGVlbEV2ZW50PFQ+PjsKICAgIHR5cGUgQW5pbWF0aW9uRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxBbmltYXRpb25FdmVudDxUPj47CiAgICB0eXBlIFRyYW5zaXRpb25FdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPFRyYW5zaXRpb25FdmVudDxUPj47CgogICAgLy8KICAgIC8vIFByb3BzIC8gRE9NIEF0dHJpYnV0ZXMKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBpbnRlcmZhY2UgSFRNTFByb3BzPFQ+IGV4dGVuZHMgQWxsSFRNTEF0dHJpYnV0ZXM8VD4sIENsYXNzQXR0cmlidXRlczxUPiB7CiAgICB9CgogICAgdHlwZSBEZXRhaWxlZEhUTUxQcm9wczxFIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4sIFQ+ID0gQ2xhc3NBdHRyaWJ1dGVzPFQ+ICYgRTsKCiAgICBpbnRlcmZhY2UgU1ZHUHJvcHM8VD4gZXh0ZW5kcyBTVkdBdHRyaWJ1dGVzPFQ+LCBDbGFzc0F0dHJpYnV0ZXM8VD4gewogICAgfQoKICAgIGludGVyZmFjZSBTVkdMaW5lRWxlbWVudEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBTVkdQcm9wczxUPiB7fQogICAgaW50ZXJmYWNlIFNWR1RleHRFbGVtZW50QXR0cmlidXRlczxUPiBleHRlbmRzIFNWR1Byb3BzPFQ+IHt9CgogICAgaW50ZXJmYWNlIERPTUF0dHJpYnV0ZXM8VD4gewogICAgICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlIHwgdW5kZWZpbmVkOwogICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPzogewogICAgICAgICAgICAvLyBTaG91bGQgYmUgSW5uZXJIVE1MWydpbm5lckhUTUwnXS4KICAgICAgICAgICAgLy8gQnV0IHVuZm9ydHVuYXRlbHkgd2UncmUgbWl4aW5nIHJlbmRlcmVyLXNwZWNpZmljIHR5cGUgZGVjbGFyYXRpb25zLgogICAgICAgICAgICBfX2h0bWw6IHN0cmluZyB8IFRydXN0ZWRIVE1MOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIENsaXBib2FyZCBFdmVudHMKICAgICAgICBvbkNvcHk/OiBDbGlwYm9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db3B5Q2FwdHVyZT86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkN1dD86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkN1dENhcHR1cmU/OiBDbGlwYm9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25QYXN0ZT86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBhc3RlQ2FwdHVyZT86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gQ29tcG9zaXRpb24gRXZlbnRzCiAgICAgICAgb25Db21wb3NpdGlvbkVuZD86IENvbXBvc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ29tcG9zaXRpb25FbmRDYXB0dXJlPzogQ29tcG9zaXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db21wb3NpdGlvblN0YXJ0PzogQ29tcG9zaXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db21wb3NpdGlvblN0YXJ0Q2FwdHVyZT86IENvbXBvc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ29tcG9zaXRpb25VcGRhdGU/OiBDb21wb3NpdGlvbkV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNvbXBvc2l0aW9uVXBkYXRlQ2FwdHVyZT86IENvbXBvc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBGb2N1cyBFdmVudHMKICAgICAgICBvbkZvY3VzPzogRm9jdXNFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Gb2N1c0NhcHR1cmU/OiBGb2N1c0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkJsdXI/OiBGb2N1c0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkJsdXJDYXB0dXJlPzogRm9jdXNFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIEZvcm0gRXZlbnRzCiAgICAgICAgb25DaGFuZ2U/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlQ2FwdHVyZT86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25CZWZvcmVJbnB1dD86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25CZWZvcmVJbnB1dENhcHR1cmU/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uSW5wdXQ/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uSW5wdXRDYXB0dXJlPzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblJlc2V0PzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblJlc2V0Q2FwdHVyZT86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TdWJtaXQ/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU3VibWl0Q2FwdHVyZT86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25JbnZhbGlkPzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkludmFsaWRDYXB0dXJlPzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gSW1hZ2UgRXZlbnRzCiAgICAgICAgb25Mb2FkPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Mb2FkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRXJyb3I/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsgLy8gYWxzbyBhIE1lZGlhIEV2ZW50CiAgICAgICAgb25FcnJvckNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsgLy8gYWxzbyBhIE1lZGlhIEV2ZW50CgogICAgICAgIC8vIEtleWJvYXJkIEV2ZW50cwogICAgICAgIG9uS2V5RG93bj86IEtleWJvYXJkRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uS2V5RG93bkNhcHR1cmU/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogQGRlcHJlY2F0ZWQgKi8KICAgICAgICBvbktleVByZXNzPzogS2V5Ym9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgb25LZXlQcmVzc0NhcHR1cmU/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbktleVVwPzogS2V5Ym9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25LZXlVcENhcHR1cmU/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gTWVkaWEgRXZlbnRzCiAgICAgICAgb25BYm9ydD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQWJvcnRDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DYW5QbGF5PzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DYW5QbGF5Q2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2FuUGxheVRocm91Z2g/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNhblBsYXlUaHJvdWdoQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHVyYXRpb25DaGFuZ2U/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkR1cmF0aW9uQ2hhbmdlQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW1wdGllZD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW1wdGllZENhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkVuY3J5cHRlZD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW5jcnlwdGVkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW5kZWQ/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkVuZGVkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9hZGVkRGF0YT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9hZGVkRGF0YUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkxvYWRlZE1ldGFkYXRhPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Mb2FkZWRNZXRhZGF0YUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkxvYWRTdGFydD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9hZFN0YXJ0Q2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUGF1c2U/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBhdXNlQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUGxheT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUGxheUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBsYXlpbmc/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBsYXlpbmdDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qcm9ncmVzcz86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUHJvZ3Jlc3NDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25SYXRlQ2hhbmdlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25SYXRlQ2hhbmdlQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUmVzaXplPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25SZXNpemVDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TZWVrZWQ/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblNlZWtlZENhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblNlZWtpbmc/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblNlZWtpbmdDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TdGFsbGVkPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TdGFsbGVkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU3VzcGVuZD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU3VzcGVuZENhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRpbWVVcGRhdGU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRpbWVVcGRhdGVDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Wb2x1bWVDaGFuZ2U/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblZvbHVtZUNoYW5nZUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbldhaXRpbmc/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbldhaXRpbmdDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIE1vdXNlRXZlbnRzCiAgICAgICAgb25BdXhDbGljaz86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQXV4Q2xpY2tDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DbGljaz86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2xpY2tDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db250ZXh0TWVudT86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ29udGV4dE1lbnVDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Eb3VibGVDbGljaz86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRG91YmxlQ2xpY2tDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25EcmFnPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdFbmQ/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0VuZENhcHR1cmU/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0VudGVyPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdFbnRlckNhcHR1cmU/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0V4aXQ/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0V4aXRDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdMZWF2ZT86IERyYWdFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25EcmFnTGVhdmVDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdPdmVyPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdPdmVyQ2FwdHVyZT86IERyYWdFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25EcmFnU3RhcnQ/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ1N0YXJ0Q2FwdHVyZT86IERyYWdFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ecm9wPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyb3BDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlRG93bj86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VEb3duQ2FwdHVyZT86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VFbnRlcj86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VMZWF2ZT86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VNb3ZlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Nb3VzZU1vdmVDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Nb3VzZU91dD86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VPdXRDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Nb3VzZU92ZXI/OiBNb3VzZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlT3ZlckNhcHR1cmU/OiBNb3VzZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlVXA/OiBNb3VzZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlVXBDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFNlbGVjdGlvbiBFdmVudHMKICAgICAgICBvblNlbGVjdD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU2VsZWN0Q2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBUb3VjaCBFdmVudHMKICAgICAgICBvblRvdWNoQ2FuY2VsPzogVG91Y2hFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ub3VjaENhbmNlbENhcHR1cmU/OiBUb3VjaEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRvdWNoRW5kPzogVG91Y2hFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ub3VjaEVuZENhcHR1cmU/OiBUb3VjaEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRvdWNoTW92ZT86IFRvdWNoRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZT86IFRvdWNoRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVG91Y2hTdGFydD86IFRvdWNoRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVG91Y2hTdGFydENhcHR1cmU/OiBUb3VjaEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gUG9pbnRlciBFdmVudHMKICAgICAgICBvblBvaW50ZXJEb3duPzogUG9pbnRlckV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBvaW50ZXJEb3duQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyTW92ZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyTW92ZUNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlclVwPzogUG9pbnRlckV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBvaW50ZXJVcENhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlckNhbmNlbD86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyQ2FuY2VsQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyRW50ZXI/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlckVudGVyQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyTGVhdmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlckxlYXZlQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyT3Zlcj86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyT3ZlckNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlck91dD86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyT3V0Q2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Hb3RQb2ludGVyQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Hb3RQb2ludGVyQ2FwdHVyZUNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlPzogUG9pbnRlckV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkxvc3RQb2ludGVyQ2FwdHVyZUNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBVSSBFdmVudHMKICAgICAgICBvblNjcm9sbD86IFVJRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU2Nyb2xsQ2FwdHVyZT86IFVJRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBXaGVlbCBFdmVudHMKICAgICAgICBvbldoZWVsPzogV2hlZWxFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25XaGVlbENhcHR1cmU/OiBXaGVlbEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gQW5pbWF0aW9uIEV2ZW50cwogICAgICAgIG9uQW5pbWF0aW9uU3RhcnQ/OiBBbmltYXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25BbmltYXRpb25TdGFydENhcHR1cmU/OiBBbmltYXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25BbmltYXRpb25FbmQ/OiBBbmltYXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25BbmltYXRpb25FbmRDYXB0dXJlPzogQW5pbWF0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uPzogQW5pbWF0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uQ2FwdHVyZT86IEFuaW1hdGlvbkV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gVHJhbnNpdGlvbiBFdmVudHMKICAgICAgICBvblRyYW5zaXRpb25FbmQ/OiBUcmFuc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVHJhbnNpdGlvbkVuZENhcHR1cmU/OiBUcmFuc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGV4cG9ydCBpbnRlcmZhY2UgQ1NTUHJvcGVydGllcyBleHRlbmRzIENTUy5Qcm9wZXJ0aWVzPHN0cmluZyB8IG51bWJlcj4gewogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBpbmRleCBzaWduYXR1cmUgd2FzIHJlbW92ZWQgdG8gZW5hYmxlIGNsb3NlZCB0eXBpbmcgZm9yIHN0eWxlCiAgICAgICAgICogdXNpbmcgQ1NTVHlwZS4gWW91J3JlIGFibGUgdG8gdXNlIHR5cGUgYXNzZXJ0aW9uIG9yIG1vZHVsZSBhdWdtZW50YXRpb24KICAgICAgICAgKiB0byBhZGQgcHJvcGVydGllcyBvciBhbiBpbmRleCBzaWduYXR1cmUgb2YgeW91ciBvd24uCiAgICAgICAgICoKICAgICAgICAgKiBGb3IgZXhhbXBsZXMgYW5kIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0OgogICAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mcmVuaWMvY3NzdHlwZSN3aGF0LXNob3VsZC1pLWRvLXdoZW4taS1nZXQtdHlwZS1lcnJvcnMKICAgICAgICAgKi8KICAgIH0KCiAgICAvLyBBbGwgdGhlIFdBSS1BUklBIDEuMSBhdHRyaWJ1dGVzIGZyb20gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8KICAgIGludGVyZmFjZSBBcmlhQXR0cmlidXRlcyB7CiAgICAgICAgLyoqIElkZW50aWZpZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB3aGVuIERPTSBmb2N1cyBpcyBvbiBhIGNvbXBvc2l0ZSB3aWRnZXQsIHRleHRib3gsIGdyb3VwLCBvciBhcHBsaWNhdGlvbi4gKi8KICAgICAgICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyB3aWxsIHByZXNlbnQgYWxsLCBvciBvbmx5IHBhcnRzIG9mLCB0aGUgY2hhbmdlZCByZWdpb24gYmFzZWQgb24gdGhlIGNoYW5nZSBub3RpZmljYXRpb25zIGRlZmluZWQgYnkgdGhlIGFyaWEtcmVsZXZhbnQgYXR0cmlidXRlLiAqLwogICAgICAgICdhcmlhLWF0b21pYyc/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIGlucHV0dGluZyB0ZXh0IGNvdWxkIHRyaWdnZXIgZGlzcGxheSBvZiBvbmUgb3IgbW9yZSBwcmVkaWN0aW9ucyBvZiB0aGUgdXNlcidzIGludGVuZGVkIHZhbHVlIGZvciBhbiBpbnB1dCBhbmQgc3BlY2lmaWVzIGhvdyBwcmVkaWN0aW9ucyB3b3VsZCBiZQogICAgICAgICAqIHByZXNlbnRlZCBpZiB0aGV5IGFyZSBtYWRlLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc/OiAnbm9uZScgfCAnaW5saW5lJyB8ICdsaXN0JyB8ICdib3RoJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIGFuIGVsZW1lbnQgaXMgYmVpbmcgbW9kaWZpZWQgYW5kIHRoYXQgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyBNQVkgd2FudCB0byB3YWl0IHVudGlsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb21wbGV0ZSBiZWZvcmUgZXhwb3NpbmcgdGhlbSB0byB0aGUgdXNlci4gKi8KICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHZhbHVlIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQsIHdoaWNoIGlzIGludGVuZGVkIHRvIGJlIGNvbnZlcnRlZCBpbnRvIEJyYWlsbGUuCiAgICAgICAgICogQHNlZSBhcmlhLWxhYmVsLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWJyYWlsbGVsYWJlbCc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIGh1bWFuLXJlYWRhYmxlLCBhdXRob3ItbG9jYWxpemVkIGFiYnJldmlhdGVkIGRlc2NyaXB0aW9uIGZvciB0aGUgcm9sZSBvZiBhbiBlbGVtZW50LCB3aGljaCBpcyBpbnRlbmRlZCB0byBiZSBjb252ZXJ0ZWQgaW50byBCcmFpbGxlLgogICAgICAgICAqIEBzZWUgYXJpYS1yb2xlZGVzY3JpcHRpb24uCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtYnJhaWxsZXJvbGVkZXNjcmlwdGlvbic/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgJ2FyaWEtYnVzeSc/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIEluZGljYXRlcyB0aGUgY3VycmVudCAiY2hlY2tlZCIgc3RhdGUgb2YgY2hlY2tib3hlcywgcmFkaW8gYnV0dG9ucywgYW5kIG90aGVyIHdpZGdldHMuCiAgICAgICAgICogQHNlZSBhcmlhLXByZXNzZWQgQHNlZSBhcmlhLXNlbGVjdGVkLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWNoZWNrZWQnPzogYm9vbGVhbiB8ICdmYWxzZScgfCAnbWl4ZWQnIHwgJ3RydWUnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIERlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1jb2xpbmRleC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb2xjb3VudCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhbiBlbGVtZW50J3MgY29sdW1uIGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1jb2xjb3VudCBAc2VlIGFyaWEtY29sc3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb2xpbmRleCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIGh1bWFuIHJlYWRhYmxlIHRleHQgYWx0ZXJuYXRpdmUgb2YgYXJpYS1jb2xpbmRleC4KICAgICAgICAgKiBAc2VlIGFyaWEtcm93aW5kZXh0ZXh0LgogICAgICAgICAqLwogICAgICAgICdhcmlhLWNvbGluZGV4dGV4dCc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgc3Bhbm5lZCBieSBhIGNlbGwgb3IgZ3JpZGNlbGwgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1jb2xpbmRleCBAc2VlIGFyaWEtcm93c3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb2xzcGFuJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJZGVudGlmaWVzIHRoZSBlbGVtZW50IChvciBlbGVtZW50cykgd2hvc2UgY29udGVudHMgb3IgcHJlc2VuY2UgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgICAgICAgKiBAc2VlIGFyaWEtb3ducy4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb250cm9scyc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB0aGUgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgaXRlbSB3aXRoaW4gYSBjb250YWluZXIgb3Igc2V0IG9mIHJlbGF0ZWQgZWxlbWVudHMuICovCiAgICAgICAgJ2FyaWEtY3VycmVudCc/OiBib29sZWFuIHwgJ2ZhbHNlJyB8ICd0cnVlJyB8ICdwYWdlJyB8ICdzdGVwJyB8ICdsb2NhdGlvbicgfCAnZGF0ZScgfCAndGltZScgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSWRlbnRpZmllcyB0aGUgZWxlbWVudCAob3IgZWxlbWVudHMpIHRoYXQgZGVzY3JpYmVzIHRoZSBvYmplY3QuCiAgICAgICAgICogQHNlZSBhcmlhLWxhYmVsbGVkYnkKICAgICAgICAgKi8KICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIHN0cmluZyB2YWx1ZSB0aGF0IGRlc2NyaWJlcyBvciBhbm5vdGF0ZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgICAgICAgKiBAc2VlIHJlbGF0ZWQgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1kZXNjcmlwdGlvbic/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSWRlbnRpZmllcyB0aGUgZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgZGV0YWlsZWQsIGV4dGVuZGVkIGRlc2NyaXB0aW9uIGZvciB0aGUgb2JqZWN0LgogICAgICAgICAqIEBzZWUgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1kZXRhaWxzJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBwZXJjZWl2YWJsZSBidXQgZGlzYWJsZWQsIHNvIGl0IGlzIG5vdCBlZGl0YWJsZSBvciBvdGhlcndpc2Ugb3BlcmFibGUuCiAgICAgICAgICogQHNlZSBhcmlhLWhpZGRlbiBAc2VlIGFyaWEtcmVhZG9ubHkuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtZGlzYWJsZWQnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgd2hhdCBmdW5jdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCB3aGVuIGEgZHJhZ2dlZCBvYmplY3QgaXMgcmVsZWFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0LgogICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFSSUEgMS4xCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtZHJvcGVmZmVjdCc/OiAnbm9uZScgfCAnY29weScgfCAnZXhlY3V0ZScgfCAnbGluaycgfCAnbW92ZScgfCAncG9wdXAnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIElkZW50aWZpZXMgdGhlIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhbiBlcnJvciBtZXNzYWdlIGZvciB0aGUgb2JqZWN0LgogICAgICAgICAqIEBzZWUgYXJpYS1pbnZhbGlkIEBzZWUgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZWxlbWVudCwgb3IgYW5vdGhlciBncm91cGluZyBlbGVtZW50IGl0IGNvbnRyb2xzLCBpcyBjdXJyZW50bHkgZXhwYW5kZWQgb3IgY29sbGFwc2VkLiAqLwogICAgICAgICdhcmlhLWV4cGFuZGVkJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSWRlbnRpZmllcyB0aGUgbmV4dCBlbGVtZW50IChvciBlbGVtZW50cykgaW4gYW4gYWx0ZXJuYXRlIHJlYWRpbmcgb3JkZXIgb2YgY29udGVudCB3aGljaCwgYXQgdGhlIHVzZXIncyBkaXNjcmV0aW9uLAogICAgICAgICAqIGFsbG93cyBhc3Npc3RpdmUgdGVjaG5vbG9neSB0byBvdmVycmlkZSB0aGUgZ2VuZXJhbCBkZWZhdWx0IG9mIHJlYWRpbmcgaW4gZG9jdW1lbnQgc291cmNlIG9yZGVyLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWZsb3d0byc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSW5kaWNhdGVzIGFuIGVsZW1lbnQncyAiZ3JhYmJlZCIgc3RhdGUgaW4gYSBkcmFnLWFuZC1kcm9wIG9wZXJhdGlvbi4KICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUklBIDEuMQogICAgICAgICAqLwogICAgICAgICdhcmlhLWdyYWJiZWQnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHR5cGUgb2YgaW50ZXJhY3RpdmUgcG9wdXAgZWxlbWVudCwgc3VjaCBhcyBtZW51IG9yIGRpYWxvZywgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFuIGVsZW1lbnQuICovCiAgICAgICAgJ2FyaWEtaGFzcG9wdXAnPzogYm9vbGVhbiB8ICdmYWxzZScgfCAndHJ1ZScgfCAnbWVudScgfCAnbGlzdGJveCcgfCAndHJlZScgfCAnZ3JpZCcgfCAnZGlhbG9nJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZWxlbWVudCBpcyBleHBvc2VkIHRvIGFuIGFjY2Vzc2liaWxpdHkgQVBJLgogICAgICAgICAqIEBzZWUgYXJpYS1kaXNhYmxlZC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1oaWRkZW4nPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhlIGVudGVyZWQgdmFsdWUgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KICAgICAgICAgKiBAc2VlIGFyaWEtZXJyb3JtZXNzYWdlLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWludmFsaWQnPzogYm9vbGVhbiB8ICdmYWxzZScgfCAndHJ1ZScgfCAnZ3JhbW1hcicgfCAnc3BlbGxpbmcnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBJbmRpY2F0ZXMga2V5Ym9hcmQgc2hvcnRjdXRzIHRoYXQgYW4gYXV0aG9yIGhhcyBpbXBsZW1lbnRlZCB0byBhY3RpdmF0ZSBvciBnaXZlIGZvY3VzIHRvIGFuIGVsZW1lbnQuICovCiAgICAgICAgJ2FyaWEta2V5c2hvcnRjdXRzJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHZhbHVlIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQuCiAgICAgICAgICogQHNlZSBhcmlhLWxhYmVsbGVkYnkuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtbGFiZWwnPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIElkZW50aWZpZXMgdGhlIGVsZW1lbnQgKG9yIGVsZW1lbnRzKSB0aGF0IGxhYmVscyB0aGUgY3VycmVudCBlbGVtZW50LgogICAgICAgICAqIEBzZWUgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5Jz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogRGVmaW5lcyB0aGUgaGllcmFyY2hpY2FsIGxldmVsIG9mIGFuIGVsZW1lbnQgd2l0aGluIGEgc3RydWN0dXJlLiAqLwogICAgICAgICdhcmlhLWxldmVsJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHRoYXQgYW4gZWxlbWVudCB3aWxsIGJlIHVwZGF0ZWQsIGFuZCBkZXNjcmliZXMgdGhlIHR5cGVzIG9mIHVwZGF0ZXMgdGhlIHVzZXIgYWdlbnRzLCBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBhbmQgdXNlciBjYW4gZXhwZWN0IGZyb20gdGhlIGxpdmUgcmVnaW9uLiAqLwogICAgICAgICdhcmlhLWxpdmUnPzogJ29mZicgfCAnYXNzZXJ0aXZlJyB8ICdwb2xpdGUnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBJbmRpY2F0ZXMgd2hldGhlciBhbiBlbGVtZW50IGlzIG1vZGFsIHdoZW4gZGlzcGxheWVkLiAqLwogICAgICAgICdhcmlhLW1vZGFsJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB3aGV0aGVyIGEgdGV4dCBib3ggYWNjZXB0cyBtdWx0aXBsZSBsaW5lcyBvZiBpbnB1dCBvciBvbmx5IGEgc2luZ2xlIGxpbmUuICovCiAgICAgICAgJ2FyaWEtbXVsdGlsaW5lJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIG1heSBzZWxlY3QgbW9yZSB0aGFuIG9uZSBpdGVtIGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0YWJsZSBkZXNjZW5kYW50cy4gKi8KICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVsZW1lbnQncyBvcmllbnRhdGlvbiBpcyBob3Jpem9udGFsLCB2ZXJ0aWNhbCwgb3IgdW5rbm93bi9hbWJpZ3VvdXMuICovCiAgICAgICAgJ2FyaWEtb3JpZW50YXRpb24nPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJZGVudGlmaWVzIGFuIGVsZW1lbnQgKG9yIGVsZW1lbnRzKSBpbiBvcmRlciB0byBkZWZpbmUgYSB2aXN1YWwsIGZ1bmN0aW9uYWwsIG9yIGNvbnRleHR1YWwgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcAogICAgICAgICAqIGJldHdlZW4gRE9NIGVsZW1lbnRzIHdoZXJlIHRoZSBET00gaGllcmFyY2h5IGNhbm5vdCBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgcmVsYXRpb25zaGlwLgogICAgICAgICAqIEBzZWUgYXJpYS1jb250cm9scy4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1vd25zJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgc2hvcnQgaGludCAoYSB3b3JkIG9yIHNob3J0IHBocmFzZSkgaW50ZW5kZWQgdG8gYWlkIHRoZSB1c2VyIHdpdGggZGF0YSBlbnRyeSB3aGVuIHRoZSBjb250cm9sIGhhcyBubyB2YWx1ZS4KICAgICAgICAgKiBBIGhpbnQgY291bGQgYmUgYSBzYW1wbGUgdmFsdWUgb3IgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAqLwogICAgICAgICdhcmlhLXBsYWNlaG9sZGVyJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGFuIGVsZW1lbnQncyBudW1iZXIgb3IgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIGxpc3RpdGVtcyBvciB0cmVlaXRlbXMuIE5vdCByZXF1aXJlZCBpZiBhbGwgZWxlbWVudHMgaW4gdGhlIHNldCBhcmUgcHJlc2VudCBpbiB0aGUgRE9NLgogICAgICAgICAqIEBzZWUgYXJpYS1zZXRzaXplLgogICAgICAgICAqLwogICAgICAgICdhcmlhLXBvc2luc2V0Jz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgInByZXNzZWQiIHN0YXRlIG9mIHRvZ2dsZSBidXR0b25zLgogICAgICAgICAqIEBzZWUgYXJpYS1jaGVja2VkIEBzZWUgYXJpYS1zZWxlY3RlZC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1wcmVzc2VkJz86IGJvb2xlYW4gfCAnZmFsc2UnIHwgJ21peGVkJyB8ICd0cnVlJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBub3QgZWRpdGFibGUsIGJ1dCBpcyBvdGhlcndpc2Ugb3BlcmFibGUuCiAgICAgICAgICogQHNlZSBhcmlhLWRpc2FibGVkLgogICAgICAgICAqLwogICAgICAgICdhcmlhLXJlYWRvbmx5Jz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSW5kaWNhdGVzIHdoYXQgbm90aWZpY2F0aW9ucyB0aGUgdXNlciBhZ2VudCB3aWxsIHRyaWdnZXIgd2hlbiB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIHdpdGhpbiBhIGxpdmUgcmVnaW9uIGlzIG1vZGlmaWVkLgogICAgICAgICAqIEBzZWUgYXJpYS1hdG9taWMuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtcmVsZXZhbnQnPzogJ2FkZGl0aW9ucycgfCAnYWRkaXRpb25zIHJlbW92YWxzJyB8ICdhZGRpdGlvbnMgdGV4dCcgfCAnYWxsJyB8ICdyZW1vdmFscycgfCAncmVtb3ZhbHMgYWRkaXRpb25zJyB8ICdyZW1vdmFscyB0ZXh0JyB8ICd0ZXh0JyB8ICd0ZXh0IGFkZGl0aW9ucycgfCAndGV4dCByZW1vdmFscycgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB0aGF0IHVzZXIgaW5wdXQgaXMgcmVxdWlyZWQgb24gdGhlIGVsZW1lbnQgYmVmb3JlIGEgZm9ybSBtYXkgYmUgc3VibWl0dGVkLiAqLwogICAgICAgICdhcmlhLXJlcXVpcmVkJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIERlZmluZXMgYSBodW1hbi1yZWFkYWJsZSwgYXV0aG9yLWxvY2FsaXplZCBkZXNjcmlwdGlvbiBmb3IgdGhlIHJvbGUgb2YgYW4gZWxlbWVudC4gKi8KICAgICAgICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIERlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1yb3dpbmRleC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1yb3djb3VudCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhbiBlbGVtZW50J3Mgcm93IGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3Mgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1yb3djb3VudCBAc2VlIGFyaWEtcm93c3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1yb3dpbmRleCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIGh1bWFuIHJlYWRhYmxlIHRleHQgYWx0ZXJuYXRpdmUgb2YgYXJpYS1yb3dpbmRleC4KICAgICAgICAgKiBAc2VlIGFyaWEtY29saW5kZXh0ZXh0LgogICAgICAgICAqLwogICAgICAgICdhcmlhLXJvd2luZGV4dGV4dCc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3Mgc3Bhbm5lZCBieSBhIGNlbGwgb3IgZ3JpZGNlbGwgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1yb3dpbmRleCBAc2VlIGFyaWEtY29sc3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1yb3dzcGFuJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgInNlbGVjdGVkIiBzdGF0ZSBvZiB2YXJpb3VzIHdpZGdldHMuCiAgICAgICAgICogQHNlZSBhcmlhLWNoZWNrZWQgQHNlZSBhcmlhLXByZXNzZWQuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtc2VsZWN0ZWQnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGN1cnJlbnQgc2V0IG9mIGxpc3RpdGVtcyBvciB0cmVlaXRlbXMuIE5vdCByZXF1aXJlZCBpZiBhbGwgZWxlbWVudHMgaW4gdGhlIHNldCBhcmUgcHJlc2VudCBpbiB0aGUgRE9NLgogICAgICAgICAqIEBzZWUgYXJpYS1wb3NpbnNldC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1zZXRzaXplJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIGlmIGl0ZW1zIGluIGEgdGFibGUgb3IgZ3JpZCBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyLiAqLwogICAgICAgICdhcmlhLXNvcnQnPzogJ25vbmUnIHwgJ2FzY2VuZGluZycgfCAnZGVzY2VuZGluZycgfCAnb3RoZXInIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBEZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgZm9yIGEgcmFuZ2Ugd2lkZ2V0LiAqLwogICAgICAgICdhcmlhLXZhbHVlbWF4Jz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogRGVmaW5lcyB0aGUgbWluaW11bSBhbGxvd2VkIHZhbHVlIGZvciBhIHJhbmdlIHdpZGdldC4gKi8KICAgICAgICAnYXJpYS12YWx1ZW1pbic/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgYSByYW5nZSB3aWRnZXQuCiAgICAgICAgICogQHNlZSBhcmlhLXZhbHVldGV4dC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS12YWx1ZW5vdyc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIERlZmluZXMgdGhlIGh1bWFuIHJlYWRhYmxlIHRleHQgYWx0ZXJuYXRpdmUgb2YgYXJpYS12YWx1ZW5vdyBmb3IgYSByYW5nZSB3aWRnZXQuICovCiAgICAgICAgJ2FyaWEtdmFsdWV0ZXh0Jz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvLyBBbGwgdGhlIFdBSS1BUklBIDEuMSByb2xlIGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNyb2xlX2RlZmluaXRpb25zCiAgICB0eXBlIEFyaWFSb2xlID0KICAgICAgICB8ICdhbGVydCcKICAgICAgICB8ICdhbGVydGRpYWxvZycKICAgICAgICB8ICdhcHBsaWNhdGlvbicKICAgICAgICB8ICdhcnRpY2xlJwogICAgICAgIHwgJ2Jhbm5lcicKICAgICAgICB8ICdidXR0b24nCiAgICAgICAgfCAnY2VsbCcKICAgICAgICB8ICdjaGVja2JveCcKICAgICAgICB8ICdjb2x1bW5oZWFkZXInCiAgICAgICAgfCAnY29tYm9ib3gnCiAgICAgICAgfCAnY29tcGxlbWVudGFyeScKICAgICAgICB8ICdjb250ZW50aW5mbycKICAgICAgICB8ICdkZWZpbml0aW9uJwogICAgICAgIHwgJ2RpYWxvZycKICAgICAgICB8ICdkaXJlY3RvcnknCiAgICAgICAgfCAnZG9jdW1lbnQnCiAgICAgICAgfCAnZmVlZCcKICAgICAgICB8ICdmaWd1cmUnCiAgICAgICAgfCAnZm9ybScKICAgICAgICB8ICdncmlkJwogICAgICAgIHwgJ2dyaWRjZWxsJwogICAgICAgIHwgJ2dyb3VwJwogICAgICAgIHwgJ2hlYWRpbmcnCiAgICAgICAgfCAnaW1nJwogICAgICAgIHwgJ2xpbmsnCiAgICAgICAgfCAnbGlzdCcKICAgICAgICB8ICdsaXN0Ym94JwogICAgICAgIHwgJ2xpc3RpdGVtJwogICAgICAgIHwgJ2xvZycKICAgICAgICB8ICdtYWluJwogICAgICAgIHwgJ21hcnF1ZWUnCiAgICAgICAgfCAnbWF0aCcKICAgICAgICB8ICdtZW51JwogICAgICAgIHwgJ21lbnViYXInCiAgICAgICAgfCAnbWVudWl0ZW0nCiAgICAgICAgfCAnbWVudWl0ZW1jaGVja2JveCcKICAgICAgICB8ICdtZW51aXRlbXJhZGlvJwogICAgICAgIHwgJ25hdmlnYXRpb24nCiAgICAgICAgfCAnbm9uZScKICAgICAgICB8ICdub3RlJwogICAgICAgIHwgJ29wdGlvbicKICAgICAgICB8ICdwcmVzZW50YXRpb24nCiAgICAgICAgfCAncHJvZ3Jlc3NiYXInCiAgICAgICAgfCAncmFkaW8nCiAgICAgICAgfCAncmFkaW9ncm91cCcKICAgICAgICB8ICdyZWdpb24nCiAgICAgICAgfCAncm93JwogICAgICAgIHwgJ3Jvd2dyb3VwJwogICAgICAgIHwgJ3Jvd2hlYWRlcicKICAgICAgICB8ICdzY3JvbGxiYXInCiAgICAgICAgfCAnc2VhcmNoJwogICAgICAgIHwgJ3NlYXJjaGJveCcKICAgICAgICB8ICdzZXBhcmF0b3InCiAgICAgICAgfCAnc2xpZGVyJwogICAgICAgIHwgJ3NwaW5idXR0b24nCiAgICAgICAgfCAnc3RhdHVzJwogICAgICAgIHwgJ3N3aXRjaCcKICAgICAgICB8ICd0YWInCiAgICAgICAgfCAndGFibGUnCiAgICAgICAgfCAndGFibGlzdCcKICAgICAgICB8ICd0YWJwYW5lbCcKICAgICAgICB8ICd0ZXJtJwogICAgICAgIHwgJ3RleHRib3gnCiAgICAgICAgfCAndGltZXInCiAgICAgICAgfCAndG9vbGJhcicKICAgICAgICB8ICd0b29sdGlwJwogICAgICAgIHwgJ3RyZWUnCiAgICAgICAgfCAndHJlZWdyaWQnCiAgICAgICAgfCAndHJlZWl0ZW0nCiAgICAgICAgfCAoc3RyaW5nICYge30pOwoKICAgIGludGVyZmFjZSBIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEFyaWFBdHRyaWJ1dGVzLCBET01BdHRyaWJ1dGVzPFQ+IHsKICAgICAgICAvLyBSZWFjdC1zcGVjaWZpYyBBdHRyaWJ1dGVzCiAgICAgICAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlciB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZDsKICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFN0YW5kYXJkIEhUTUwgQXR0cmlidXRlcwogICAgICAgIGFjY2Vzc0tleT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvRm9jdXM/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50RWRpdGFibGU/OiBCb29sZWFuaXNoIHwgImluaGVyaXQiIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHRNZW51Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRpcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkcmFnZ2FibGU/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIGhpZGRlbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgaWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGFuZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBub25jZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzbG90Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwZWxsQ2hlY2s/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0YWJJbmRleD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0cmFuc2xhdGU/OiAneWVzJyB8ICdubycgfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFVua25vd24KICAgICAgICByYWRpb0dyb3VwPzogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLyA8Y29tbWFuZD4sIDxtZW51aXRlbT4KCiAgICAgICAgLy8gV0FJLUFSSUEKICAgICAgICByb2xlPzogQXJpYVJvbGUgfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFJERmEgQXR0cmlidXRlcwogICAgICAgIGFib3V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRlbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGF0YXR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW5saXN0PzogYW55OwogICAgICAgIHByZWZpeD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcm9wZXJ0eT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVzb3VyY2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmV2Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGVvZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2b2NhYj86IHN0cmluZyB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gTm9uLXN0YW5kYXJkIEF0dHJpYnV0ZXMKICAgICAgICBhdXRvQ2FwaXRhbGl6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvQ29ycmVjdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvU2F2ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpdGVtUHJvcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpdGVtU2NvcGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGl0ZW1UeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGl0ZW1JRD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpdGVtUmVmPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlc3VsdHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc2VjdXJpdHk/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5zZWxlY3RhYmxlPzogJ29uJyB8ICdvZmYnIHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBMaXZpbmcgU3RhbmRhcmQKICAgICAgICAvKioKICAgICAgICAgKiBIaW50cyBhdCB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgbWlnaHQgYmUgZW50ZXJlZCBieSB0aGUgdXNlciB3aGlsZSBlZGl0aW5nIHRoZSBlbGVtZW50IG9yIGl0cyBjb250ZW50cwogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNpbnB1dC1tb2RhbGl0aWVzOi10aGUtaW5wdXRtb2RlLWF0dHJpYnV0ZQogICAgICAgICAqLwogICAgICAgIGlucHV0TW9kZT86ICdub25lJyB8ICd0ZXh0JyB8ICd0ZWwnIHwgJ3VybCcgfCAnZW1haWwnIHwgJ251bWVyaWMnIHwgJ2RlY2ltYWwnIHwgJ3NlYXJjaCcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogU3BlY2lmeSB0aGF0IGEgc3RhbmRhcmQgSFRNTCBlbGVtZW50IHNob3VsZCBiZWhhdmUgbGlrZSBhIGRlZmluZWQgY3VzdG9tIGJ1aWx0LWluIGVsZW1lbnQKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2F0dHItaXMKICAgICAgICAgKi8KICAgICAgICBpcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvKioKICAgICAqIEZvciBpbnRlcm5hbCB1c2FnZSBvbmx5LgogICAgICogRGlmZmVyZW50IHJlbGVhc2UgY2hhbm5lbHMgZGVjbGFyZSBhZGRpdGlvbmFsIHR5cGVzIG9mIFJlYWN0Tm9kZSB0aGlzIHBhcnRpY3VsYXIgcmVsZWFzZSBjaGFubmVsIGFjY2VwdHMuCiAgICAgKiBBcHAgb3IgbGlicmFyeSB0eXBlcyBzaG91bGQgbmV2ZXIgYXVnbWVudCB0aGlzIGludGVyZmFjZS4KICAgICAqLwogICAgaW50ZXJmYWNlIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OUyB7fQoKICAgIGludGVyZmFjZSBBbGxIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICAvLyBTdGFuZGFyZCBIVE1MIEF0dHJpYnV0ZXMKICAgICAgICBhY2NlcHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYWNjZXB0Q2hhcnNldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhY3Rpb24/OgogICAgICAgICAgICB8IHN0cmluZwogICAgICAgICAgICB8IHVuZGVmaW5lZAogICAgICAgICAgICB8IERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OU1trZXlvZiBET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEX0VYUEVSSU1FTlRBTF9GT1JNX0FDVElPTlNdOwogICAgICAgIGFsbG93RnVsbFNjcmVlbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWxsb3dUcmFuc3BhcmVuY3k/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGFsdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhc3luYz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYXV0b0NvbXBsZXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGF1dG9QbGF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBjYXB0dXJlPzogYm9vbGVhbiB8ICd1c2VyJyB8ICdlbnZpcm9ubWVudCcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFBhZGRpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2hhclNldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjaGFsbGVuZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2hlY2tlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY2l0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjbGFzc0lEPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sU3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBjb250cm9scz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY29vcmRzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNyb3NzT3JpZ2luPzogImFub255bW91cyIgfCAidXNlLWNyZWRlbnRpYWxzIiB8ICIiIHwgdW5kZWZpbmVkOwogICAgICAgIGRhdGE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGF0ZVRpbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkb3dubG9hZD86IGFueTsKICAgICAgICBlbmNUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybUFjdGlvbj86CiAgICAgICAgICAgIHwgc3RyaW5nCiAgICAgICAgICAgIHwgdW5kZWZpbmVkCiAgICAgICAgICAgIHwgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TW2tleW9mIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OU107CiAgICAgICAgZm9ybUVuY1R5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybU1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtTm9WYWxpZGF0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybVRhcmdldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmcmFtZUJvcmRlcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWFkZXJzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoaWdoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHJlZkxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHRtbEZvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBodHRwRXF1aXY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW50ZWdyaXR5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtleVBhcmFtcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrZXlUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtpbmQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlzdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsb29wPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsb3c/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFuaWZlc3Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFyZ2luSGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1hcmdpbldpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1heD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXhMZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWFHcm91cD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtZXRob2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtdWx0aXBsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbXV0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbm9WYWxpZGF0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgb3Blbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgb3B0aW11bT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYXlzSW5saW5lPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwb3N0ZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcHJlbG9hZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWFkT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJldmVyc2VkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByb3dzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHJvd1NwYW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc2FuZGJveD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNjcm9sbGluZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzZWFtbGVzcz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc2VsZWN0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNoYXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNpemU/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc2l6ZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjRG9jPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyY0xhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjU2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0YXJ0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHN0ZXA/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3VtbWFyeT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB1c2VNYXA/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd21vZGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd3JhcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEhUTUxBdHRyaWJ1dGVSZWZlcnJlclBvbGljeSA9CiAgICAgICAgfCAnJwogICAgICAgIHwgJ25vLXJlZmVycmVyJwogICAgICAgIHwgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJwogICAgICAgIHwgJ29yaWdpbicKICAgICAgICB8ICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nCiAgICAgICAgfCAnc2FtZS1vcmlnaW4nCiAgICAgICAgfCAnc3RyaWN0LW9yaWdpbicKICAgICAgICB8ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJwogICAgICAgIHwgJ3Vuc2FmZS11cmwnOwoKICAgIHR5cGUgSFRNTEF0dHJpYnV0ZUFuY2hvclRhcmdldCA9CiAgICAgICAgfCAnX3NlbGYnCiAgICAgICAgfCAnX2JsYW5rJwogICAgICAgIHwgJ19wYXJlbnQnCiAgICAgICAgfCAnX3RvcCcKICAgICAgICB8IChzdHJpbmcgJiB7fSk7CgogICAgaW50ZXJmYWNlIEFuY2hvckhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGRvd25sb2FkPzogYW55OwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHJlZkxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGluZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBIVE1MQXR0cmlidXRlQW5jaG9yVGFyZ2V0IHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmZXJyZXJQb2xpY3k/OiBIVE1MQXR0cmlidXRlUmVmZXJyZXJQb2xpY3kgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEF1ZGlvSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBNZWRpYUhUTUxBdHRyaWJ1dGVzPFQ+IHt9CgogICAgaW50ZXJmYWNlIEFyZWFIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29vcmRzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRvd25sb2FkPzogYW55OwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHJlZkxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmZXJyZXJQb2xpY3k/OiBIVE1MQXR0cmlidXRlUmVmZXJyZXJQb2xpY3kgfCB1bmRlZmluZWQ7CiAgICAgICAgc2hhcGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBCYXNlSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgaHJlZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEJsb2NrcXVvdGVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjaXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBCdXR0b25IVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtQWN0aW9uPzoKICAgICAgICAgICAgfCBzdHJpbmcKICAgICAgICAgICAgfCBET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEX0VYUEVSSU1FTlRBTF9GT1JNX0FDVElPTlNba2V5b2YgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TXQogICAgICAgICAgICB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtRW5jVHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtTWV0aG9kPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm1Ob1ZhbGlkYXRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtVGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86ICdzdWJtaXQnIHwgJ3Jlc2V0JyB8ICdidXR0b24nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhbHVlPzogc3RyaW5nIHwgUmVhZG9ubHlBcnJheTxzdHJpbmc+IHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBDYW52YXNIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIHNwYW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbGdyb3VwSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgc3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRGF0YUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIHZhbHVlPzogc3RyaW5nIHwgUmVhZG9ubHlBcnJheTxzdHJpbmc+IHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBEZXRhaWxzSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgb3Blbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ub2dnbGU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRGVsSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgY2l0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkYXRlVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRGlhbG9nSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgb25DYW5jZWw/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8ICB1bmRlZmluZWQ7CiAgICAgICAgb25DbG9zZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgIHVuZGVmaW5lZDsKICAgICAgICBvcGVuPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRW1iZWRIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEZpZWxkc2V0SFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRm9ybUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGFjY2VwdENoYXJzZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYWN0aW9uPzoKICAgICAgICAgICAgfCBzdHJpbmcKICAgICAgICAgICAgfCB1bmRlZmluZWQKICAgICAgICAgICAgfCBET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEX0VYUEVSSU1FTlRBTF9GT1JNX0FDVElPTlNba2V5b2YgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TXTsKICAgICAgICBhdXRvQ29tcGxldGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW5jVHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtZXRob2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBub1ZhbGlkYXRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEh0bWxIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBtYW5pZmVzdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgSWZyYW1lSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgYWxsb3c/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYWxsb3dGdWxsU2NyZWVuPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhbGxvd1RyYW5zcGFyZW5jeT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgZnJhbWVCb3JkZXI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxvYWRpbmc/OiAiZWFnZXIiIHwgImxhenkiIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBAZGVwcmVjYXRlZCAqLwogICAgICAgIG1hcmdpbkhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogQGRlcHJlY2F0ZWQgKi8KICAgICAgICBtYXJnaW5XaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlZmVycmVyUG9saWN5PzogSFRNTEF0dHJpYnV0ZVJlZmVycmVyUG9saWN5IHwgdW5kZWZpbmVkOwogICAgICAgIHNhbmRib3g/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgc2Nyb2xsaW5nPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNlYW1sZXNzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjRG9jPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBJbWdIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY3Jvc3NPcmlnaW4/OiAiYW5vbnltb3VzIiB8ICJ1c2UtY3JlZGVudGlhbHMiIHwgIiIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVjb2Rpbmc/OiAiYXN5bmMiIHwgImF1dG8iIHwgInN5bmMiIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsb2FkaW5nPzogImVhZ2VyIiB8ICJsYXp5IiB8IHVuZGVmaW5lZDsKICAgICAgICByZWZlcnJlclBvbGljeT86IEhUTUxBdHRyaWJ1dGVSZWZlcnJlclBvbGljeSB8IHVuZGVmaW5lZDsKICAgICAgICBzaXplcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjU2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZU1hcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgSW5zSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgY2l0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkYXRlVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEhUTUxJbnB1dFR5cGVBdHRyaWJ1dGUgPQogICAgICAgIHwgJ2J1dHRvbicKICAgICAgICB8ICdjaGVja2JveCcKICAgICAgICB8ICdjb2xvcicKICAgICAgICB8ICdkYXRlJwogICAgICAgIHwgJ2RhdGV0aW1lLWxvY2FsJwogICAgICAgIHwgJ2VtYWlsJwogICAgICAgIHwgJ2ZpbGUnCiAgICAgICAgfCAnaGlkZGVuJwogICAgICAgIHwgJ2ltYWdlJwogICAgICAgIHwgJ21vbnRoJwogICAgICAgIHwgJ251bWJlcicKICAgICAgICB8ICdwYXNzd29yZCcKICAgICAgICB8ICdyYWRpbycKICAgICAgICB8ICdyYW5nZScKICAgICAgICB8ICdyZXNldCcKICAgICAgICB8ICdzZWFyY2gnCiAgICAgICAgfCAnc3VibWl0JwogICAgICAgIHwgJ3RlbCcKICAgICAgICB8ICd0ZXh0JwogICAgICAgIHwgJ3RpbWUnCiAgICAgICAgfCAndXJsJwogICAgICAgIHwgJ3dlZWsnCiAgICAgICAgfCAoc3RyaW5nICYge30pOwoKICAgIGludGVyZmFjZSBJbnB1dEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGFjY2VwdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYXV0b0NvbXBsZXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNhcHR1cmU/OiBib29sZWFuIHwgJ3VzZXInIHwgJ2Vudmlyb25tZW50JyB8IHVuZGVmaW5lZDsgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWwtbWVkaWEtY2FwdHVyZS8jdGhlLWNhcHR1cmUtYXR0cmlidXRlCiAgICAgICAgY2hlY2tlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY3Jvc3NPcmlnaW4/OiAiYW5vbnltb3VzIiB8ICJ1c2UtY3JlZGVudGlhbHMiIHwgIiIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGVyS2V5SGludD86ICdlbnRlcicgfCAnZG9uZScgfCAnZ28nIHwgJ25leHQnIHwgJ3ByZXZpb3VzJyB8ICdzZWFyY2gnIHwgJ3NlbmQnIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybUFjdGlvbj86CiAgICAgICAgICAgIHwgc3RyaW5nCiAgICAgICAgICAgIHwgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TW2tleW9mIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OU10KICAgICAgICAgICAgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybUVuY1R5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybU1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtTm9WYWxpZGF0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybVRhcmdldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlzdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4TGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtaW5MZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbXVsdGlwbGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWFkT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNpemU/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0ZXA/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86IEhUTUxJbnB1dFR5cGVBdHRyaWJ1dGUgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CgogICAgICAgIG9uQ2hhbmdlPzogQ2hhbmdlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBLZXlnZW5IVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjaGFsbGVuZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAga2V5VHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrZXlQYXJhbXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTGFiZWxIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBmb3JtPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGh0bWxGb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIExpSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIExpbmtIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjcm9zc09yaWdpbj86ICJhbm9ueW1vdXMiIHwgInVzZS1jcmVkZW50aWFscyIgfCAiIiB8IHVuZGVmaW5lZDsKICAgICAgICBmZXRjaHByaW9yaXR5PzogImhpZ2giIHwgImxvdyIgfCAiYXV0byI7CiAgICAgICAgaHJlZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBocmVmTGFuZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpbnRlZ3JpdHk/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VTcmNTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VTaXplcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWZlcnJlclBvbGljeT86IEhUTUxBdHRyaWJ1dGVSZWZlcnJlclBvbGljeSB8IHVuZGVmaW5lZDsKICAgICAgICBzaXplcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNoYXJTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE1hcEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE1lbnVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICB0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBNZWRpYUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGF1dG9QbGF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250cm9scz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY29udHJvbHNMaXN0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNyb3NzT3JpZ2luPzogImFub255bW91cyIgfCAidXNlLWNyZWRlbnRpYWxzIiB8ICIiIHwgdW5kZWZpbmVkOwogICAgICAgIGxvb3A/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG1lZGlhR3JvdXA/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbXV0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYXlzSW5saW5lPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVsb2FkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyYz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTWV0YUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGNoYXJTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHR0cEVxdWl2Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29udGVudD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTWV0ZXJIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBmb3JtPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhpZ2g/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbG93PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1heD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtaW4/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3B0aW11bT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB2YWx1ZT86IHN0cmluZyB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgUXVvdGVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjaXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBPYmplY3RIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjbGFzc0lEPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRhdGE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZU1hcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3bW9kZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgT2xIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICByZXZlcnNlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3RhcnQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86ICcxJyB8ICdhJyB8ICdBJyB8ICdpJyB8ICdJJyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgT3B0Z3JvdXBIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE9wdGlvbkhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzZWxlY3RlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE91dHB1dEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHRtbEZvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBQYXJhbUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFByb2dyZXNzSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgbWF4PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhbHVlPzogc3RyaW5nIHwgUmVhZG9ubHlBcnJheTxzdHJpbmc+IHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBTbG90SFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgU2NyaXB0SFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgYXN5bmM/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBAZGVwcmVjYXRlZCAqLwogICAgICAgIGNoYXJTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY3Jvc3NPcmlnaW4/OiAiYW5vbnltb3VzIiB8ICJ1c2UtY3JlZGVudGlhbHMiIHwgIiIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGludGVncml0eT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBub01vZHVsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmZXJyZXJQb2xpY3k/OiBIVE1MQXR0cmlidXRlUmVmZXJyZXJQb2xpY3kgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFNlbGVjdEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGF1dG9Db21wbGV0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtdWx0aXBsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc2l6ZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB2YWx1ZT86IHN0cmluZyB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86IENoYW5nZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgU291cmNlSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lZGlhPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNpemVzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyYz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmNTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgU3R5bGVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBtZWRpYT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFRhYmxlSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgYWxpZ24/OiAibGVmdCIgfCAiY2VudGVyIiB8ICJyaWdodCIgfCB1bmRlZmluZWQ7CiAgICAgICAgYmdjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBib3JkZXI/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFBhZGRpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZnJhbWU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJ1bGVzPzogIm5vbmUiIHwgImdyb3VwcyIgfCAicm93cyIgfCAiY29sdW1ucyIgfCAiYWxsIiB8IHVuZGVmaW5lZDsKICAgICAgICBzdW1tYXJ5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBUZXh0YXJlYUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGF1dG9Db21wbGV0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGRpck5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4TGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlYWRPbmx5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcm93cz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB2YWx1ZT86IHN0cmluZyB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB3cmFwPzogc3RyaW5nIHwgdW5kZWZpbmVkOwoKICAgICAgICBvbkNoYW5nZT86IENoYW5nZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgVGRIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbGlnbj86ICJsZWZ0IiB8ICJjZW50ZXIiIHwgInJpZ2h0IiB8ICJqdXN0aWZ5IiB8ICJjaGFyIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xTcGFuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGhlYWRlcnM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcm93U3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhYmJyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YWxpZ24/OiAidG9wIiB8ICJtaWRkbGUiIHwgImJvdHRvbSIgfCAiYmFzZWxpbmUiIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBUaEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGFsaWduPzogImxlZnQiIHwgImNlbnRlciIgfCAicmlnaHQiIHwgImp1c3RpZnkiIHwgImNoYXIiIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbFNwYW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgaGVhZGVycz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByb3dTcGFuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHNjb3BlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGFiYnI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFRpbWVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkYXRlVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgVHJhY2tIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkZWZhdWx0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBraW5kPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyYz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmNMYW5nPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBWaWRlb0hUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgTWVkaWFIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYXlzSW5saW5lPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwb3N0ZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVSZW1vdGVQbGF5YmFjaz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9CgogICAgLy8gdGhpcyBsaXN0IGlzICJjb21wbGV0ZSIgaW4gdGhhdCBpdCBjb250YWlucyBldmVyeSBTVkcgYXR0cmlidXRlCiAgICAvLyB0aGF0IFJlYWN0IHN1cHBvcnRzLCBidXQgdGhlIHR5cGVzIGNhbiBiZSBpbXByb3ZlZC4KICAgIC8vIEZ1bGwgbGlzdCBoZXJlOiBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2RvbS1lbGVtZW50cy5odG1sCiAgICAvLwogICAgLy8gVGhlIHRocmVlIGJyb2FkIHR5cGUgY2F0ZWdvcmllcyBhcmUgKGluIG9yZGVyIG9mIHJlc3RyaWN0aXZlbmVzcyk6CiAgICAvLyAgIC0gIm51bWJlciB8IHN0cmluZyIKICAgIC8vICAgLSAic3RyaW5nIgogICAgLy8gICAtIHVuaW9uIG9mIHN0cmluZyBsaXRlcmFscwogICAgaW50ZXJmYWNlIFNWR0F0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBBcmlhQXR0cmlidXRlcywgRE9NQXR0cmlidXRlczxUPiB7CiAgICAgICAgLy8gUmVhY3Qtc3BlY2lmaWMgQXR0cmlidXRlcwogICAgICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIEF0dHJpYnV0ZXMgd2hpY2ggYWxzbyBkZWZpbmVkIGluIEhUTUxBdHRyaWJ1dGVzCiAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gU1ZHRE9NUHJvcGVydHlDb25maWcuanMKICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lZGlhPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtaW4/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IENTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIE90aGVyIEhUTUwgcHJvcGVydGllcyBzdXBwb3J0ZWQgYnkgU1ZHIGVsZW1lbnRzIGluIGJyb3dzZXJzCiAgICAgICAgcm9sZT86IEFyaWFSb2xlIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYkluZGV4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGNyb3NzT3JpZ2luPzogImFub255bW91cyIgfCAidXNlLWNyZWRlbnRpYWxzIiB8ICIiIHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBTVkcgU3BlY2lmaWMgYXR0cmlidXRlcwogICAgICAgIGFjY2VudEhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhY2N1bXVsYXRlPzogIm5vbmUiIHwgInN1bSIgfCB1bmRlZmluZWQ7CiAgICAgICAgYWRkaXRpdmU/OiAicmVwbGFjZSIgfCAic3VtIiB8IHVuZGVmaW5lZDsKICAgICAgICBhbGlnbm1lbnRCYXNlbGluZT86ICJhdXRvIiB8ICJiYXNlbGluZSIgfCAiYmVmb3JlLWVkZ2UiIHwgInRleHQtYmVmb3JlLWVkZ2UiIHwgIm1pZGRsZSIgfCAiY2VudHJhbCIgfCAiYWZ0ZXItZWRnZSIgfAogICAgICAgICJ0ZXh0LWFmdGVyLWVkZ2UiIHwgImlkZW9ncmFwaGljIiB8ICJhbHBoYWJldGljIiB8ICJoYW5naW5nIiB8ICJtYXRoZW1hdGljYWwiIHwgImluaGVyaXQiIHwgdW5kZWZpbmVkOwogICAgICAgIGFsbG93UmVvcmRlcj86ICJubyIgfCAieWVzIiB8IHVuZGVmaW5lZDsKICAgICAgICBhbHBoYWJldGljPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGFtcGxpdHVkZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhcmFiaWNGb3JtPzogImluaXRpYWwiIHwgIm1lZGlhbCIgfCAidGVybWluYWwiIHwgImlzb2xhdGVkIiB8IHVuZGVmaW5lZDsKICAgICAgICBhc2NlbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYXR0cmlidXRlTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdHRyaWJ1dGVUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGF1dG9SZXZlcnNlPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICBhemltdXRoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGJhc2VGcmVxdWVuY3k/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYmFzZWxpbmVTaGlmdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBiYXNlUHJvZmlsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBiYm94PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGJlZ2luPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGJpYXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYnk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2FsY01vZGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2FwSGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNsaXA/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2xpcFBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2xpcFBhdGhVbml0cz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjbGlwUnVsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xvckludGVycG9sYXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycz86ICJhdXRvIiB8ICJzUkdCIiB8ICJsaW5lYXJSR0IiIHwgImluaGVyaXQiIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbG9yUHJvZmlsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xvclJlbmRlcmluZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50U2NyaXB0VHlwZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50U3R5bGVUeXBlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGN1cnNvcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRlY2VsZXJhdGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVzY2VudD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaWZmdXNlQ29uc3RhbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlyZWN0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc3BsYXk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGl2aXNvcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkb21pbmFudEJhc2VsaW5lPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGR1cj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlZGdlTW9kZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbGV2YXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW5hYmxlQmFja2dyb3VuZD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbmQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZXhwb25lbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZD86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgZmlsbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmaWxsT3BhY2l0eT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmaWxsUnVsZT86ICJub256ZXJvIiB8ICJldmVub2RkIiB8ICJpbmhlcml0IiB8IHVuZGVmaW5lZDsKICAgICAgICBmaWx0ZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZmlsdGVyUmVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZpbHRlclVuaXRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZsb29kQ29sb3I/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZmxvb2RPcGFjaXR5PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvY3VzYWJsZT86IEJvb2xlYW5pc2ggfCAiYXV0byIgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9udEZhbWlseT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U2l6ZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U2l6ZUFkanVzdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U3RyZXRjaD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U3R5bGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9udFZhcmlhbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9udFdlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtYXQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZnI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZnJvbT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnMT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnMj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnbHlwaE5hbWU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGdseXBoUmVmPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGdyYWRpZW50VW5pdHM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaGFuZ2luZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBob3JpekFkdlg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaG9yaXpPcmlnaW5YPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaWRlb2dyYXBoaWM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VSZW5kZXJpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW4yPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGluPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGludGVyY2VwdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrMT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrMj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrMz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrND86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtlcm5lbE1hdHJpeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrZXJuZWxVbml0TGVuZ3RoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtlcm5pbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAga2V5UG9pbnRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtleVNwbGluZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAga2V5VGltZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGVuZ3RoQWRqdXN0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxldHRlclNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlnaHRpbmdDb2xvcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsb2NhbD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJFbmQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFya2VySGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1hcmtlck1pZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJTdGFydD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJVbml0cz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJXaWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXNrPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1hc2tDb250ZW50VW5pdHM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFza1VuaXRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1hdGhlbWF0aWNhbD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG51bU9jdGF2ZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb2Zmc2V0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9wYWNpdHk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3BlcmF0b3I/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3JkZXI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3JpZW50PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9yaWVudGF0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9yaWdpbj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBvdmVyZmxvdz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBvdmVybGluZVBvc2l0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG92ZXJsaW5lVGhpY2tuZXNzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBhaW50T3JkZXI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGFub3NlMT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBhdGhMZW5ndGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0dGVybkNvbnRlbnRVbml0cz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBhdHRlcm5Vbml0cz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb2ludGVyRXZlbnRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBvaW50cz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb2ludHNBdFg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcG9pbnRzQXRZPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBvaW50c0F0Wj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVzZXJ2ZUFscGhhPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHByaW1pdGl2ZVVuaXRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmFkaXVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlZlg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmWT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZW5kZXJpbmdJbnRlbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVwZWF0Q291bnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVwZWF0RHVyPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlcXVpcmVkRXh0ZW5zaW9ucz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZEZlYXR1cmVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlc3RhcnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVzdWx0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJvdGF0ZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY2FsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzZWVkPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNoYXBlUmVuZGVyaW5nPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNsb3BlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3BlY3VsYXJDb25zdGFudD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcGVjdWxhckV4cG9uZW50PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwZWVkPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwcmVhZE1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdGFydE9mZnNldD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdGREZXZpYXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RlbWg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RlbXY/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RpdGNoVGlsZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RvcENvbG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0b3BPcGFjaXR5PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cmlrZXRocm91Z2hQb3NpdGlvbj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cmluZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJva2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Ryb2tlRGFzaGFycmF5Pzogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cm9rZURhc2hvZmZzZXQ/OiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Ryb2tlTGluZWNhcD86ICJidXR0IiB8ICJyb3VuZCIgfCAic3F1YXJlIiB8ICJpbmhlcml0IiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJva2VMaW5lam9pbj86ICJtaXRlciIgfCAicm91bmQiIHwgImJldmVsIiB8ICJpbmhlcml0IiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJva2VNaXRlcmxpbWl0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cm9rZU9wYWNpdHk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Ryb2tlV2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3VyZmFjZVNjYWxlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN5c3RlbUxhbmd1YWdlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYmxlVmFsdWVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRhcmdldFg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdGFyZ2V0WT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0ZXh0QW5jaG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRleHREZWNvcmF0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRleHRMZW5ndGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdGV4dFJlbmRlcmluZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0bz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0cmFuc2Zvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdTE/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdTI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5kZXJsaW5lUG9zaXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVuaWNvZGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5pY29kZUJpZGk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5pY29kZVJhbmdlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVuaXRzUGVyRW0/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdkFscGhhYmV0aWM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWVzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlY3RvckVmZmVjdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2ZXJzaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRBZHZZPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRPcmlnaW5YPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRPcmlnaW5ZPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZIYW5naW5nPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZJZGVvZ3JhcGhpYz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2aWV3Qm94Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZpZXdUYXJnZXQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmlzaWJpbGl0eT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2TWF0aGVtYXRpY2FsPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdpZHRocz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3b3JkU3BhY2luZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3cml0aW5nTW9kZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4MT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4Mj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhDaGFubmVsU2VsZWN0b3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeEhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bGlua0FjdHVhdGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeGxpbmtBcmNyb2xlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhsaW5rSHJlZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bGlua1JvbGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeGxpbmtTaG93Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhsaW5rVGl0bGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeGxpbmtUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhtbEJhc2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeG1sTGFuZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bWxucz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bWxuc1hsaW5rPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhtbFNwYWNlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHkxPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHkyPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeUNoYW5uZWxTZWxlY3Rvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB6PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHpvb21BbmRQYW4/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFdlYlZpZXdIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbGxvd0Z1bGxTY3JlZW4/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGFsbG93cG9wdXBzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvc2l6ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYmxpbmtmZWF0dXJlcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlYmxpbmtmZWF0dXJlcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZ3Vlc3RyZXNpemU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGV3ZWJzZWN1cml0eT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZ3Vlc3RpbnN0YW5jZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBodHRwcmVmZXJyZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbm9kZWludGVncmF0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwYXJ0aXRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGx1Z2lucz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcHJlbG9hZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdXNlcmFnZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdlYnByZWZlcmVuY2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIC8vCiAgICAvLyBSZWFjdC5ET00KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBpbnRlcmZhY2UgUmVhY3RIVE1MIHsKICAgICAgICBhOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PiwgSFRNTEFuY2hvckVsZW1lbnQ+OwogICAgICAgIGFiYnI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYWRkcmVzczogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBhcmVhOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEFyZWFIVE1MQXR0cmlidXRlczxIVE1MQXJlYUVsZW1lbnQ+LCBIVE1MQXJlYUVsZW1lbnQ+OwogICAgICAgIGFydGljbGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYXNpZGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYXVkaW86IERldGFpbGVkSFRNTEZhY3Rvcnk8QXVkaW9IVE1MQXR0cmlidXRlczxIVE1MQXVkaW9FbGVtZW50PiwgSFRNTEF1ZGlvRWxlbWVudD47CiAgICAgICAgYjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBiYXNlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEJhc2VIVE1MQXR0cmlidXRlczxIVE1MQmFzZUVsZW1lbnQ+LCBIVE1MQmFzZUVsZW1lbnQ+OwogICAgICAgIGJkaTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBiZG86IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYmlnOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGJsb2NrcXVvdGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8QmxvY2txdW90ZUhUTUxBdHRyaWJ1dGVzPEhUTUxRdW90ZUVsZW1lbnQ+LCBIVE1MUXVvdGVFbGVtZW50PjsKICAgICAgICBib2R5OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxCb2R5RWxlbWVudD4sIEhUTUxCb2R5RWxlbWVudD47CiAgICAgICAgYnI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEJSRWxlbWVudD4sIEhUTUxCUkVsZW1lbnQ+OwogICAgICAgIGJ1dHRvbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxCdXR0b25IVE1MQXR0cmlidXRlczxIVE1MQnV0dG9uRWxlbWVudD4sIEhUTUxCdXR0b25FbGVtZW50PjsKICAgICAgICBjYW52YXM6IERldGFpbGVkSFRNTEZhY3Rvcnk8Q2FudmFzSFRNTEF0dHJpYnV0ZXM8SFRNTENhbnZhc0VsZW1lbnQ+LCBIVE1MQ2FudmFzRWxlbWVudD47CiAgICAgICAgY2FwdGlvbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBjZW50ZXI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgY2l0ZTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBjb2RlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGNvbDogRGV0YWlsZWRIVE1MRmFjdG9yeTxDb2xIVE1MQXR0cmlidXRlczxIVE1MVGFibGVDb2xFbGVtZW50PiwgSFRNTFRhYmxlQ29sRWxlbWVudD47CiAgICAgICAgY29sZ3JvdXA6IERldGFpbGVkSFRNTEZhY3Rvcnk8Q29sZ3JvdXBIVE1MQXR0cmlidXRlczxIVE1MVGFibGVDb2xFbGVtZW50PiwgSFRNTFRhYmxlQ29sRWxlbWVudD47CiAgICAgICAgZGF0YTogRGV0YWlsZWRIVE1MRmFjdG9yeTxEYXRhSFRNTEF0dHJpYnV0ZXM8SFRNTERhdGFFbGVtZW50PiwgSFRNTERhdGFFbGVtZW50PjsKICAgICAgICBkYXRhbGlzdDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRGF0YUxpc3RFbGVtZW50PiwgSFRNTERhdGFMaXN0RWxlbWVudD47CiAgICAgICAgZGQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgZGVsOiBEZXRhaWxlZEhUTUxGYWN0b3J5PERlbEhUTUxBdHRyaWJ1dGVzPEhUTUxNb2RFbGVtZW50PiwgSFRNTE1vZEVsZW1lbnQ+OwogICAgICAgIGRldGFpbHM6IERldGFpbGVkSFRNTEZhY3Rvcnk8RGV0YWlsc0hUTUxBdHRyaWJ1dGVzPEhUTUxEZXRhaWxzRWxlbWVudD4sIEhUTUxEZXRhaWxzRWxlbWVudD47CiAgICAgICAgZGZuOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGRpYWxvZzogRGV0YWlsZWRIVE1MRmFjdG9yeTxEaWFsb2dIVE1MQXR0cmlidXRlczxIVE1MRGlhbG9nRWxlbWVudD4sIEhUTUxEaWFsb2dFbGVtZW50PjsKICAgICAgICBkaXY6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+LCBIVE1MRGl2RWxlbWVudD47CiAgICAgICAgZGw6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTERMaXN0RWxlbWVudD4sIEhUTUxETGlzdEVsZW1lbnQ+OwogICAgICAgIGR0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGVtOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGVtYmVkOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEVtYmVkSFRNTEF0dHJpYnV0ZXM8SFRNTEVtYmVkRWxlbWVudD4sIEhUTUxFbWJlZEVsZW1lbnQ+OwogICAgICAgIGZpZWxkc2V0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEZpZWxkc2V0SFRNTEF0dHJpYnV0ZXM8SFRNTEZpZWxkU2V0RWxlbWVudD4sIEhUTUxGaWVsZFNldEVsZW1lbnQ+OwogICAgICAgIGZpZ2NhcHRpb246IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgZmlndXJlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGZvb3RlcjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBmb3JtOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEZvcm1IVE1MQXR0cmlidXRlczxIVE1MRm9ybUVsZW1lbnQ+LCBIVE1MRm9ybUVsZW1lbnQ+OwogICAgICAgIGgxOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgaDI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICBoMzogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgIGg0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgaDU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICBoNjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgIGhlYWQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MSGVhZEVsZW1lbnQ+OwogICAgICAgIGhlYWRlcjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBoZ3JvdXA6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgaHI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEhSRWxlbWVudD4sIEhUTUxIUkVsZW1lbnQ+OwogICAgICAgIGh0bWw6IERldGFpbGVkSFRNTEZhY3Rvcnk8SHRtbEhUTUxBdHRyaWJ1dGVzPEhUTUxIdG1sRWxlbWVudD4sIEhUTUxIdG1sRWxlbWVudD47CiAgICAgICAgaTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBpZnJhbWU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SWZyYW1lSFRNTEF0dHJpYnV0ZXM8SFRNTElGcmFtZUVsZW1lbnQ+LCBIVE1MSUZyYW1lRWxlbWVudD47CiAgICAgICAgaW1nOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEltZ0hUTUxBdHRyaWJ1dGVzPEhUTUxJbWFnZUVsZW1lbnQ+LCBIVE1MSW1hZ2VFbGVtZW50PjsKICAgICAgICBpbnB1dDogRGV0YWlsZWRIVE1MRmFjdG9yeTxJbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+LCBIVE1MSW5wdXRFbGVtZW50PjsKICAgICAgICBpbnM6IERldGFpbGVkSFRNTEZhY3Rvcnk8SW5zSFRNTEF0dHJpYnV0ZXM8SFRNTE1vZEVsZW1lbnQ+LCBIVE1MTW9kRWxlbWVudD47CiAgICAgICAga2JkOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGtleWdlbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxLZXlnZW5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBsYWJlbDogRGV0YWlsZWRIVE1MRmFjdG9yeTxMYWJlbEhUTUxBdHRyaWJ1dGVzPEhUTUxMYWJlbEVsZW1lbnQ+LCBIVE1MTGFiZWxFbGVtZW50PjsKICAgICAgICBsZWdlbmQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTExlZ2VuZEVsZW1lbnQ+LCBIVE1MTGVnZW5kRWxlbWVudD47CiAgICAgICAgbGk6IERldGFpbGVkSFRNTEZhY3Rvcnk8TGlIVE1MQXR0cmlidXRlczxIVE1MTElFbGVtZW50PiwgSFRNTExJRWxlbWVudD47CiAgICAgICAgbGluazogRGV0YWlsZWRIVE1MRmFjdG9yeTxMaW5rSFRNTEF0dHJpYnV0ZXM8SFRNTExpbmtFbGVtZW50PiwgSFRNTExpbmtFbGVtZW50PjsKICAgICAgICBtYWluOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1hcDogRGV0YWlsZWRIVE1MRmFjdG9yeTxNYXBIVE1MQXR0cmlidXRlczxIVE1MTWFwRWxlbWVudD4sIEhUTUxNYXBFbGVtZW50PjsKICAgICAgICBtYXJrOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1lbnU6IERldGFpbGVkSFRNTEZhY3Rvcnk8TWVudUhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1lbnVpdGVtOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1ldGE6IERldGFpbGVkSFRNTEZhY3Rvcnk8TWV0YUhUTUxBdHRyaWJ1dGVzPEhUTUxNZXRhRWxlbWVudD4sIEhUTUxNZXRhRWxlbWVudD47CiAgICAgICAgbWV0ZXI6IERldGFpbGVkSFRNTEZhY3Rvcnk8TWV0ZXJIVE1MQXR0cmlidXRlczxIVE1MTWV0ZXJFbGVtZW50PiwgSFRNTE1ldGVyRWxlbWVudD47CiAgICAgICAgbmF2OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG5vc2NyaXB0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG9iamVjdDogRGV0YWlsZWRIVE1MRmFjdG9yeTxPYmplY3RIVE1MQXR0cmlidXRlczxIVE1MT2JqZWN0RWxlbWVudD4sIEhUTUxPYmplY3RFbGVtZW50PjsKICAgICAgICBvbDogRGV0YWlsZWRIVE1MRmFjdG9yeTxPbEhUTUxBdHRyaWJ1dGVzPEhUTUxPTGlzdEVsZW1lbnQ+LCBIVE1MT0xpc3RFbGVtZW50PjsKICAgICAgICBvcHRncm91cDogRGV0YWlsZWRIVE1MRmFjdG9yeTxPcHRncm91cEhUTUxBdHRyaWJ1dGVzPEhUTUxPcHRHcm91cEVsZW1lbnQ+LCBIVE1MT3B0R3JvdXBFbGVtZW50PjsKICAgICAgICBvcHRpb246IERldGFpbGVkSFRNTEZhY3Rvcnk8T3B0aW9uSFRNTEF0dHJpYnV0ZXM8SFRNTE9wdGlvbkVsZW1lbnQ+LCBIVE1MT3B0aW9uRWxlbWVudD47CiAgICAgICAgb3V0cHV0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PE91dHB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxPdXRwdXRFbGVtZW50PiwgSFRNTE91dHB1dEVsZW1lbnQ+OwogICAgICAgIHA6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFBhcmFncmFwaEVsZW1lbnQ+LCBIVE1MUGFyYWdyYXBoRWxlbWVudD47CiAgICAgICAgcGFyYW06IERldGFpbGVkSFRNTEZhY3Rvcnk8UGFyYW1IVE1MQXR0cmlidXRlczxIVE1MUGFyYW1FbGVtZW50PiwgSFRNTFBhcmFtRWxlbWVudD47CiAgICAgICAgcGljdHVyZTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBwcmU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFByZUVsZW1lbnQ+LCBIVE1MUHJlRWxlbWVudD47CiAgICAgICAgcHJvZ3Jlc3M6IERldGFpbGVkSFRNTEZhY3Rvcnk8UHJvZ3Jlc3NIVE1MQXR0cmlidXRlczxIVE1MUHJvZ3Jlc3NFbGVtZW50PiwgSFRNTFByb2dyZXNzRWxlbWVudD47CiAgICAgICAgcTogRGV0YWlsZWRIVE1MRmFjdG9yeTxRdW90ZUhUTUxBdHRyaWJ1dGVzPEhUTUxRdW90ZUVsZW1lbnQ+LCBIVE1MUXVvdGVFbGVtZW50PjsKICAgICAgICBycDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBydDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBydWJ5OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHM6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc2FtcDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBzZWFyY2g6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc2xvdDogRGV0YWlsZWRIVE1MRmFjdG9yeTxTbG90SFRNTEF0dHJpYnV0ZXM8SFRNTFNsb3RFbGVtZW50PiwgSFRNTFNsb3RFbGVtZW50PjsKICAgICAgICBzY3JpcHQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8U2NyaXB0SFRNTEF0dHJpYnV0ZXM8SFRNTFNjcmlwdEVsZW1lbnQ+LCBIVE1MU2NyaXB0RWxlbWVudD47CiAgICAgICAgc2VjdGlvbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBzZWxlY3Q6IERldGFpbGVkSFRNTEZhY3Rvcnk8U2VsZWN0SFRNTEF0dHJpYnV0ZXM8SFRNTFNlbGVjdEVsZW1lbnQ+LCBIVE1MU2VsZWN0RWxlbWVudD47CiAgICAgICAgc21hbGw6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc291cmNlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PFNvdXJjZUhUTUxBdHRyaWJ1dGVzPEhUTUxTb3VyY2VFbGVtZW50PiwgSFRNTFNvdXJjZUVsZW1lbnQ+OwogICAgICAgIHNwYW46IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFNwYW5FbGVtZW50PiwgSFRNTFNwYW5FbGVtZW50PjsKICAgICAgICBzdHJvbmc6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc3R5bGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8U3R5bGVIVE1MQXR0cmlidXRlczxIVE1MU3R5bGVFbGVtZW50PiwgSFRNTFN0eWxlRWxlbWVudD47CiAgICAgICAgc3ViOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHN1bW1hcnk6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc3VwOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHRhYmxlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PFRhYmxlSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlRWxlbWVudD4sIEhUTUxUYWJsZUVsZW1lbnQ+OwogICAgICAgIHRlbXBsYXRlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxUZW1wbGF0ZUVsZW1lbnQ+LCBIVE1MVGVtcGxhdGVFbGVtZW50PjsKICAgICAgICB0Ym9keTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4sIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PjsKICAgICAgICB0ZDogRGV0YWlsZWRIVE1MRmFjdG9yeTxUZEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD4sIEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD47CiAgICAgICAgdGV4dGFyZWE6IERldGFpbGVkSFRNTEZhY3Rvcnk8VGV4dGFyZWFIVE1MQXR0cmlidXRlczxIVE1MVGV4dEFyZWFFbGVtZW50PiwgSFRNTFRleHRBcmVhRWxlbWVudD47CiAgICAgICAgdGZvb3Q6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+LCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudD47CiAgICAgICAgdGg6IERldGFpbGVkSFRNTEZhY3Rvcnk8VGhIVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sIEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PjsKICAgICAgICB0aGVhZDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4sIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PjsKICAgICAgICB0aW1lOiBEZXRhaWxlZEhUTUxGYWN0b3J5PFRpbWVIVE1MQXR0cmlidXRlczxIVE1MVGltZUVsZW1lbnQ+LCBIVE1MVGltZUVsZW1lbnQ+OwogICAgICAgIHRpdGxlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxUaXRsZUVsZW1lbnQ+LCBIVE1MVGl0bGVFbGVtZW50PjsKICAgICAgICB0cjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVGFibGVSb3dFbGVtZW50PiwgSFRNTFRhYmxlUm93RWxlbWVudD47CiAgICAgICAgdHJhY2s6IERldGFpbGVkSFRNTEZhY3Rvcnk8VHJhY2tIVE1MQXR0cmlidXRlczxIVE1MVHJhY2tFbGVtZW50PiwgSFRNTFRyYWNrRWxlbWVudD47CiAgICAgICAgdTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICB1bDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVUxpc3RFbGVtZW50PiwgSFRNTFVMaXN0RWxlbWVudD47CiAgICAgICAgInZhciI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgdmlkZW86IERldGFpbGVkSFRNTEZhY3Rvcnk8VmlkZW9IVE1MQXR0cmlidXRlczxIVE1MVmlkZW9FbGVtZW50PiwgSFRNTFZpZGVvRWxlbWVudD47CiAgICAgICAgd2JyOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHdlYnZpZXc6IERldGFpbGVkSFRNTEZhY3Rvcnk8V2ViVmlld0hUTUxBdHRyaWJ1dGVzPEhUTUxXZWJWaWV3RWxlbWVudD4sIEhUTUxXZWJWaWV3RWxlbWVudD47CiAgICB9CgogICAgaW50ZXJmYWNlIFJlYWN0U1ZHIHsKICAgICAgICBhbmltYXRlOiBTVkdGYWN0b3J5OwogICAgICAgIGNpcmNsZTogU1ZHRmFjdG9yeTsKICAgICAgICBjbGlwUGF0aDogU1ZHRmFjdG9yeTsKICAgICAgICBkZWZzOiBTVkdGYWN0b3J5OwogICAgICAgIGRlc2M6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZWxsaXBzZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZUJsZW5kOiBTVkdGYWN0b3J5OwogICAgICAgIGZlQ29sb3JNYXRyaXg6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVDb21wb25lbnRUcmFuc2ZlcjogU1ZHRmFjdG9yeTsKICAgICAgICBmZUNvbXBvc2l0ZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZUNvbnZvbHZlTWF0cml4OiBTVkdGYWN0b3J5OwogICAgICAgIGZlRGlmZnVzZUxpZ2h0aW5nOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRGlzcGxhY2VtZW50TWFwOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRGlzdGFudExpZ2h0OiBTVkdGYWN0b3J5OwogICAgICAgIGZlRHJvcFNoYWRvdzogU1ZHRmFjdG9yeTsKICAgICAgICBmZUZsb29kOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRnVuY0E6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVGdW5jQjogU1ZHRmFjdG9yeTsKICAgICAgICBmZUZ1bmNHOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRnVuY1I6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVHYXVzc2lhbkJsdXI6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVJbWFnZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZU1lcmdlOiBTVkdGYWN0b3J5OwogICAgICAgIGZlTWVyZ2VOb2RlOiBTVkdGYWN0b3J5OwogICAgICAgIGZlTW9ycGhvbG9neTogU1ZHRmFjdG9yeTsKICAgICAgICBmZU9mZnNldDogU1ZHRmFjdG9yeTsKICAgICAgICBmZVBvaW50TGlnaHQ6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVTcGVjdWxhckxpZ2h0aW5nOiBTVkdGYWN0b3J5OwogICAgICAgIGZlU3BvdExpZ2h0OiBTVkdGYWN0b3J5OwogICAgICAgIGZlVGlsZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZVR1cmJ1bGVuY2U6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmlsdGVyOiBTVkdGYWN0b3J5OwogICAgICAgIGZvcmVpZ25PYmplY3Q6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZzogU1ZHRmFjdG9yeTsKICAgICAgICBpbWFnZTogU1ZHRmFjdG9yeTsKICAgICAgICBsaW5lOiBTVkdGYWN0b3J5OwogICAgICAgIGxpbmVhckdyYWRpZW50OiBTVkdGYWN0b3J5OwogICAgICAgIG1hcmtlcjogU1ZHRmFjdG9yeTsKICAgICAgICBtYXNrOiBTVkdGYWN0b3J5OwogICAgICAgIG1ldGFkYXRhOiBTVkdGYWN0b3J5OwogICAgICAgIHBhdGg6IFNWR0ZhY3Rvcnk7CiAgICAgICAgcGF0dGVybjogU1ZHRmFjdG9yeTsKICAgICAgICBwb2x5Z29uOiBTVkdGYWN0b3J5OwogICAgICAgIHBvbHlsaW5lOiBTVkdGYWN0b3J5OwogICAgICAgIHJhZGlhbEdyYWRpZW50OiBTVkdGYWN0b3J5OwogICAgICAgIHJlY3Q6IFNWR0ZhY3Rvcnk7CiAgICAgICAgc3RvcDogU1ZHRmFjdG9yeTsKICAgICAgICBzdmc6IFNWR0ZhY3Rvcnk7CiAgICAgICAgc3dpdGNoOiBTVkdGYWN0b3J5OwogICAgICAgIHN5bWJvbDogU1ZHRmFjdG9yeTsKICAgICAgICB0ZXh0OiBTVkdGYWN0b3J5OwogICAgICAgIHRleHRQYXRoOiBTVkdGYWN0b3J5OwogICAgICAgIHRzcGFuOiBTVkdGYWN0b3J5OwogICAgICAgIHVzZTogU1ZHRmFjdG9yeTsKICAgICAgICB2aWV3OiBTVkdGYWN0b3J5OwogICAgfQoKICAgIGludGVyZmFjZSBSZWFjdERPTSBleHRlbmRzIFJlYWN0SFRNTCwgUmVhY3RTVkcgeyB9CgogICAgLy8KICAgIC8vIFJlYWN0LlByb3BUeXBlcwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHR5cGUgVmFsaWRhdG9yPFQ+ID0gUHJvcFR5cGVzLlZhbGlkYXRvcjxUPjsKCiAgICB0eXBlIFJlcXVpcmVhYmxlPFQ+ID0gUHJvcFR5cGVzLlJlcXVpcmVhYmxlPFQ+OwoKICAgIHR5cGUgVmFsaWRhdGlvbk1hcDxUPiA9IFByb3BUeXBlcy5WYWxpZGF0aW9uTWFwPFQ+OwoKICAgIHR5cGUgV2Vha1ZhbGlkYXRpb25NYXA8VD4gPSB7CiAgICAgICAgW0sgaW4ga2V5b2YgVF0/OiBudWxsIGV4dGVuZHMgVFtLXQogICAgICAgICAgICA/IFZhbGlkYXRvcjxUW0tdIHwgbnVsbCB8IHVuZGVmaW5lZD4KICAgICAgICAgICAgOiB1bmRlZmluZWQgZXh0ZW5kcyBUW0tdCiAgICAgICAgICAgID8gVmFsaWRhdG9yPFRbS10gfCBudWxsIHwgdW5kZWZpbmVkPgogICAgICAgICAgICA6IFZhbGlkYXRvcjxUW0tdPgogICAgfTsKCiAgICBpbnRlcmZhY2UgUmVhY3RQcm9wVHlwZXMgewogICAgICAgIGFueTogdHlwZW9mIFByb3BUeXBlcy5hbnk7CiAgICAgICAgYXJyYXk6IHR5cGVvZiBQcm9wVHlwZXMuYXJyYXk7CiAgICAgICAgYm9vbDogdHlwZW9mIFByb3BUeXBlcy5ib29sOwogICAgICAgIGZ1bmM6IHR5cGVvZiBQcm9wVHlwZXMuZnVuYzsKICAgICAgICBudW1iZXI6IHR5cGVvZiBQcm9wVHlwZXMubnVtYmVyOwogICAgICAgIG9iamVjdDogdHlwZW9mIFByb3BUeXBlcy5vYmplY3Q7CiAgICAgICAgc3RyaW5nOiB0eXBlb2YgUHJvcFR5cGVzLnN0cmluZzsKICAgICAgICBub2RlOiB0eXBlb2YgUHJvcFR5cGVzLm5vZGU7CiAgICAgICAgZWxlbWVudDogdHlwZW9mIFByb3BUeXBlcy5lbGVtZW50OwogICAgICAgIGluc3RhbmNlT2Y6IHR5cGVvZiBQcm9wVHlwZXMuaW5zdGFuY2VPZjsKICAgICAgICBvbmVPZjogdHlwZW9mIFByb3BUeXBlcy5vbmVPZjsKICAgICAgICBvbmVPZlR5cGU6IHR5cGVvZiBQcm9wVHlwZXMub25lT2ZUeXBlOwogICAgICAgIGFycmF5T2Y6IHR5cGVvZiBQcm9wVHlwZXMuYXJyYXlPZjsKICAgICAgICBvYmplY3RPZjogdHlwZW9mIFByb3BUeXBlcy5vYmplY3RPZjsKICAgICAgICBzaGFwZTogdHlwZW9mIFByb3BUeXBlcy5zaGFwZTsKICAgICAgICBleGFjdDogdHlwZW9mIFByb3BUeXBlcy5leGFjdDsKICAgIH0KCiAgICAvLwogICAgLy8gUmVhY3QuQ2hpbGRyZW4KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIC0gVXNlIGB0eXBlb2YgUmVhY3QuQ2hpbGRyZW5gIGluc3RlYWQuCiAgICAgKi8KICAgIC8vIFN5bmMgd2l0aCB0eXBlIG9mIGBjb25zdCBDaGlsZHJlbmAuCiAgICBpbnRlcmZhY2UgUmVhY3RDaGlsZHJlbiB7CiAgICAgICAgbWFwPFQsIEM+KGNoaWxkcmVuOiBDIHwgUmVhZG9ubHlBcnJheTxDPiwgZm46IChjaGlsZDogQywgaW5kZXg6IG51bWJlcikgPT4gVCk6CiAgICAgICAgICAgIEMgZXh0ZW5kcyBudWxsIHwgdW5kZWZpbmVkID8gQyA6IEFycmF5PEV4Y2x1ZGU8VCwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ+PjsKICAgICAgICBmb3JFYWNoPEM+KGNoaWxkcmVuOiBDIHwgUmVhZG9ubHlBcnJheTxDPiwgZm46IChjaGlsZDogQywgaW5kZXg6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQ7CiAgICAgICAgY291bnQoY2hpbGRyZW46IGFueSk6IG51bWJlcjsKICAgICAgICBvbmx5PEM+KGNoaWxkcmVuOiBDKTogQyBleHRlbmRzIGFueVtdID8gbmV2ZXIgOiBDOwogICAgICAgIHRvQXJyYXkoY2hpbGRyZW46IFJlYWN0Tm9kZSB8IFJlYWN0Tm9kZVtdKTogQXJyYXk8RXhjbHVkZTxSZWFjdE5vZGUsIGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkPj47CiAgICB9CgogICAgLy8KICAgIC8vIEJyb3dzZXIgSW50ZXJmYWNlcwogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25pa2VlZS8yMDQ4LXR5cGVzY3JpcHQvYmxvYi9tYXN0ZXIvMjA0OC9qcy90b3VjaC5kLnRzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgaW50ZXJmYWNlIEFic3RyYWN0VmlldyB7CiAgICAgICAgc3R5bGVNZWRpYTogU3R5bGVNZWRpYTsKICAgICAgICBkb2N1bWVudDogRG9jdW1lbnQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFRvdWNoIHsKICAgICAgICBpZGVudGlmaWVyOiBudW1iZXI7CiAgICAgICAgdGFyZ2V0OiBFdmVudFRhcmdldDsKICAgICAgICBzY3JlZW5YOiBudW1iZXI7CiAgICAgICAgc2NyZWVuWTogbnVtYmVyOwogICAgICAgIGNsaWVudFg6IG51bWJlcjsKICAgICAgICBjbGllbnRZOiBudW1iZXI7CiAgICAgICAgcGFnZVg6IG51bWJlcjsKICAgICAgICBwYWdlWTogbnVtYmVyOwogICAgfQoKICAgIGludGVyZmFjZSBUb3VjaExpc3QgewogICAgICAgIFtpbmRleDogbnVtYmVyXTogVG91Y2g7CiAgICAgICAgbGVuZ3RoOiBudW1iZXI7CiAgICAgICAgaXRlbShpbmRleDogbnVtYmVyKTogVG91Y2g7CiAgICAgICAgaWRlbnRpZmllZFRvdWNoKGlkZW50aWZpZXI6IG51bWJlcik6IFRvdWNoOwogICAgfQoKICAgIC8vCiAgICAvLyBFcnJvciBJbnRlcmZhY2VzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpbnRlcmZhY2UgRXJyb3JJbmZvIHsKICAgICAgICAvKioKICAgICAgICAgKiBDYXB0dXJlcyB3aGljaCBjb21wb25lbnQgY29udGFpbmVkIHRoZSBleGNlcHRpb24sIGFuZCBpdHMgYW5jZXN0b3JzLgogICAgICAgICAqLwogICAgICAgIGNvbXBvbmVudFN0YWNrOiBzdHJpbmc7CiAgICB9CgogICAgLy8gS2VlcCBpbiBzeW5jIHdpdGggSlNYIG5hbWVzcGFjZSBpbiAuL2pzeC1ydW50aW1lLmQudHMgYW5kIC4vanN4LWRldi1ydW50aW1lLmQudHMKICAgIG5hbWVzcGFjZSBKU1ggewogICAgICAgIHR5cGUgRWxlbWVudFR5cGUgPSBHbG9iYWxKU1hFbGVtZW50VHlwZTsKICAgICAgICBpbnRlcmZhY2UgRWxlbWVudCBleHRlbmRzIEdsb2JhbEpTWEVsZW1lbnQge30KICAgICAgICBpbnRlcmZhY2UgRWxlbWVudENsYXNzIGV4dGVuZHMgR2xvYmFsSlNYRWxlbWVudENsYXNzIHt9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRBdHRyaWJ1dGVzUHJvcGVydHkgZXh0ZW5kcyBHbG9iYWxKU1hFbGVtZW50QXR0cmlidXRlc1Byb3BlcnR5IHt9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRDaGlsZHJlbkF0dHJpYnV0ZSBleHRlbmRzIEdsb2JhbEpTWEVsZW1lbnRDaGlsZHJlbkF0dHJpYnV0ZSB7fQoKICAgICAgICB0eXBlIExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlczxDLCBQPiA9IEdsb2JhbEpTWExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlczxDLCBQPjsKCiAgICAgICAgaW50ZXJmYWNlIEludHJpbnNpY0F0dHJpYnV0ZXMgZXh0ZW5kcyBHbG9iYWxKU1hJbnRyaW5zaWNBdHRyaWJ1dGVzIHt9CiAgICAgICAgaW50ZXJmYWNlIEludHJpbnNpY0NsYXNzQXR0cmlidXRlczxUPiBleHRlbmRzIEdsb2JhbEpTWEludHJpbnNpY0NsYXNzQXR0cmlidXRlczxUPiB7fQogICAgICAgIGludGVyZmFjZSBJbnRyaW5zaWNFbGVtZW50cyBleHRlbmRzIEdsb2JhbEpTWEludHJpbnNpY0VsZW1lbnRzIHt9CiAgICB9Cn0KCi8vIG5ha2VkICdhbnknIHR5cGUgaW4gYSBjb25kaXRpb25hbCB0eXBlIHdpbGwgc2hvcnQgY2lyY3VpdCBhbmQgdW5pb24gYm90aCB0aGUgdGhlbi9lbHNlIGJyYW5jaGVzCi8vIHNvIGJvb2xlYW4gaXMgb25seSByZXNvbHZlZCBmb3IgVCA9IGFueQp0eXBlIElzRXhhY3RseUFueTxUPiA9IGJvb2xlYW4gZXh0ZW5kcyAoVCBleHRlbmRzIG5ldmVyID8gdHJ1ZSA6IGZhbHNlKSA/IHRydWUgOiBmYWxzZTsKCnR5cGUgRXhhY3RseUFueVByb3BlcnR5S2V5czxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IElzRXhhY3RseUFueTxUW0tdPiBleHRlbmRzIHRydWUgPyBLIDogbmV2ZXIgfVtrZXlvZiBUXTsKdHlwZSBOb3RFeGFjdGx5QW55UHJvcGVydHlLZXlzPFQ+ID0gRXhjbHVkZTxrZXlvZiBULCBFeGFjdGx5QW55UHJvcGVydHlLZXlzPFQ+PjsKCi8vIFRyeSB0byByZXNvbHZlIGlsbC1kZWZpbmVkIHByb3BzIGxpa2UgZm9yIEpTIHVzZXJzOiBwcm9wcyBjYW4gYmUgYW55LCBvciBzb21ldGltZXMgb2JqZWN0cyB3aXRoIHByb3BlcnRpZXMgb2YgdHlwZSBhbnkKdHlwZSBNZXJnZVByb3BUeXBlczxQLCBUPiA9CiAgICAvLyBEaXN0cmlidXRlIG92ZXIgUCBpbiBjYXNlIGl0IGlzIGEgdW5pb24gdHlwZQogICAgUCBleHRlbmRzIGFueQogICAgICAgIC8vIElmIHByb3BzIGlzIHR5cGUgYW55LCB1c2UgcHJvcFR5cGVzIGRlZmluaXRpb25zCiAgICAgICAgPyBJc0V4YWN0bHlBbnk8UD4gZXh0ZW5kcyB0cnVlID8gVCA6CiAgICAgICAgICAgIC8vIElmIGRlY2xhcmVkIHByb3BzIGhhdmUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBpZ25vcmUgaW5mZXJyZWQgcHJvcHMgZW50aXJlbHkgYXMga2V5b2YgZ2V0cyB3aWRlbmVkCiAgICAgICAgICAgIHN0cmluZyBleHRlbmRzIGtleW9mIFAgPyBQIDoKICAgICAgICAgICAgICAgIC8vIFByZWZlciBkZWNsYXJlZCB0eXBlcyB3aGljaCBhcmUgbm90IGV4YWN0bHkgYW55CiAgICAgICAgICAgICAgICAmIFBpY2s8UCwgTm90RXhhY3RseUFueVByb3BlcnR5S2V5czxQPj4KICAgICAgICAgICAgICAgIC8vIEZvciBwcm9wcyB3aGljaCBhcmUgZXhhY3RseSBhbnksIHVzZSB0aGUgdHlwZSBpbmZlcnJlZCBmcm9tIHByb3BUeXBlcyBpZiBwcmVzZW50CiAgICAgICAgICAgICAgICAmIFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBOb3RFeGFjdGx5QW55UHJvcGVydHlLZXlzPFA+Pj4KICAgICAgICAgICAgICAgIC8vIEtlZXAgbGVmdG92ZXIgcHJvcHMgbm90IHNwZWNpZmllZCBpbiBwcm9wVHlwZXMKICAgICAgICAgICAgICAgICYgUGljazxQLCBFeGNsdWRlPGtleW9mIFAsIGtleW9mIFQ+PgogICAgICAgIDogbmV2ZXI7Cgp0eXBlIEluZXhhY3RQYXJ0aWFsPFQ+ID0geyBbSyBpbiBrZXlvZiBUXT86IFRbS10gfCB1bmRlZmluZWQgfTsKCi8vIEFueSBwcm9wIHRoYXQgaGFzIGEgZGVmYXVsdCBwcm9wIGJlY29tZXMgb3B0aW9uYWwsIGJ1dCBpdHMgdHlwZSBpcyB1bmNoYW5nZWQKLy8gVW5kZWNsYXJlZCBkZWZhdWx0IHByb3BzIGFyZSBhdWdtZW50ZWQgaW50byB0aGUgcmVzdWx0aW5nIGFsbG93YWJsZSBhdHRyaWJ1dGVzCi8vIElmIGRlY2xhcmVkIHByb3BzIGhhdmUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBpZ25vcmUgZGVmYXVsdCBwcm9wcyBlbnRpcmVseSBhcyBrZXlvZiBnZXRzIHdpZGVuZWQKLy8gV3JhcCBpbiBhbiBvdXRlci1sZXZlbCBjb25kaXRpb25hbCB0eXBlIHRvIGFsbG93IGRpc3RyaWJ1dGlvbiBvdmVyIHByb3BzIHRoYXQgYXJlIHVuaW9ucwp0eXBlIERlZmF1bHRpemU8UCwgRD4gPSBQIGV4dGVuZHMgYW55CiAgICA/IHN0cmluZyBleHRlbmRzIGtleW9mIFAgPyBQIDoKICAgICAgICAmIFBpY2s8UCwgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBEPj4KICAgICAgICAmIEluZXhhY3RQYXJ0aWFsPFBpY2s8UCwgRXh0cmFjdDxrZXlvZiBQLCBrZXlvZiBEPj4+CiAgICAgICAgJiBJbmV4YWN0UGFydGlhbDxQaWNrPEQsIEV4Y2x1ZGU8a2V5b2YgRCwga2V5b2YgUD4+PgogICAgOiBuZXZlcjsKCnR5cGUgUmVhY3RNYW5hZ2VkQXR0cmlidXRlczxDLCBQPiA9IEMgZXh0ZW5kcyB7IHByb3BUeXBlczogaW5mZXIgVDsgZGVmYXVsdFByb3BzOiBpbmZlciBEOyB9CiAgICA/IERlZmF1bHRpemU8TWVyZ2VQcm9wVHlwZXM8UCwgUHJvcFR5cGVzLkluZmVyUHJvcHM8VD4+LCBEPgogICAgOiBDIGV4dGVuZHMgeyBwcm9wVHlwZXM6IGluZmVyIFQ7IH0KICAgICAgICA/IE1lcmdlUHJvcFR5cGVzPFAsIFByb3BUeXBlcy5JbmZlclByb3BzPFQ+PgogICAgICAgIDogQyBleHRlbmRzIHsgZGVmYXVsdFByb3BzOiBpbmZlciBEOyB9CiAgICAgICAgICAgID8gRGVmYXVsdGl6ZTxQLCBEPgogICAgICAgICAgICA6IFA7CgpkZWNsYXJlIGdsb2JhbCB7CiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSBgUmVhY3QuSlNYYCBpbnN0ZWFkIG9mIHRoZSBnbG9iYWwgYEpTWGAgbmFtZXNwYWNlLgogICAgICovCiAgICBuYW1lc3BhY2UgSlNYIHsKICAgICAgICAvLyBXZSBkb24ndCBqdXN0IGFsaWFzIFJlYWN0LkVsZW1lbnRUeXBlIGJlY2F1c2UgUmVhY3QuRWxlbWVudFR5cGUKICAgICAgICAvLyBoaXN0b3JpY2FsbHkgZG9lcyBtb3JlIHRoYW4gd2UgbmVlZCBpdCB0by4KICAgICAgICAvLyBFLmcuIGl0IGFsc28gY29udGFpbnMgLnByb3BUeXBlcyBhbmQgc28gVFMgYWxzbyB2ZXJpZmllcyB0aGUgZGVjbGFyZWQKICAgICAgICAvLyBwcm9wcyB0eXBlIGRvZXMgbWF0Y2ggdGhlIGRlY2xhcmVkIC5wcm9wVHlwZXMuCiAgICAgICAgLy8gQnV0IGlmIGxpYnJhcmllcyBkZWNsYXJlZCB0aGVpciAucHJvcFR5cGVzIGJ1dCBub3QgcHJvcHMgdHlwZSwKICAgICAgICAvLyBvciB0aGV5IG1pc21hdGNoLCB5b3Ugd29uJ3QgYmUgYWJsZSB0byB1c2UgdGhlIGNsYXNzIGNvbXBvbmVudAogICAgICAgIC8vIGFzIGEgSlNYLkVsZW1lbnRUeXBlLgogICAgICAgIC8vIFdlIGNvdWxkIGZpeCB0aGlzIGV2ZXJ5d2hlcmUgYnV0IHdlJ3JlIHVsdGltYXRlbHkgbm90IGludGVyZXN0ZWQgaW4KICAgICAgICAvLyAucHJvcFR5cGVzIGFzc2lnbmFiaWxpdHkgc28gd2UgbWlnaHQgYXMgd2VsbCBkcm9wIGl0IGVudGlyZWx5IGhlcmUgdG8KICAgICAgICAvLyAgcmVkdWNlIHRoZSB3b3JrIG9mIHRoZSB0eXBlLWNoZWNrZXIuCiAgICAgICAgLy8gVE9ETzogQ2hlY2sgaW1wYWN0IG9mIG1ha2luZyBSZWFjdC5FbGVtZW50VHlwZTxQID0gYW55PiA9IFJlYWN0LkpTWEVsZW1lbnRDb25zdHJ1Y3RvcjxQPgogICAgICAgIHR5cGUgRWxlbWVudFR5cGUgPSBzdHJpbmcgfCBSZWFjdC5KU1hFbGVtZW50Q29uc3RydWN0b3I8YW55PjsKICAgICAgICBpbnRlcmZhY2UgRWxlbWVudCBleHRlbmRzIFJlYWN0LlJlYWN0RWxlbWVudDxhbnksIGFueT4geyB9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRDbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnk+IHsKICAgICAgICAgICAgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICB9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRBdHRyaWJ1dGVzUHJvcGVydHkgeyBwcm9wczoge307IH0KICAgICAgICBpbnRlcmZhY2UgRWxlbWVudENoaWxkcmVuQXR0cmlidXRlIHsgY2hpbGRyZW46IHt9OyB9CgogICAgICAgIC8vIFdlIGNhbid0IHJlY3Vyc2UgZm9yZXZlciBiZWNhdXNlIGB0eXBlYCBjYW4ndCBiZSBzZWxmLXJlZmVyZW50aWFsOwogICAgICAgIC8vIGxldCdzIGFzc3VtZSBpdCdzIHJlYXNvbmFibGUgdG8gZG8gYSBzaW5nbGUgUmVhY3QubGF6eSgpIGFyb3VuZCBhIHNpbmdsZSBSZWFjdC5tZW1vKCkgLyB2aWNlLXZlcnNhCiAgICAgICAgdHlwZSBMaWJyYXJ5TWFuYWdlZEF0dHJpYnV0ZXM8QywgUD4gPSBDIGV4dGVuZHMgUmVhY3QuTWVtb0V4b3RpY0NvbXBvbmVudDxpbmZlciBUPiB8IFJlYWN0LkxhenlFeG90aWNDb21wb25lbnQ8aW5mZXIgVD4KICAgICAgICAgICAgPyBUIGV4dGVuZHMgUmVhY3QuTWVtb0V4b3RpY0NvbXBvbmVudDxpbmZlciBVPiB8IFJlYWN0LkxhenlFeG90aWNDb21wb25lbnQ8aW5mZXIgVT4KICAgICAgICAgICAgICAgID8gUmVhY3RNYW5hZ2VkQXR0cmlidXRlczxVLCBQPgogICAgICAgICAgICAgICAgOiBSZWFjdE1hbmFnZWRBdHRyaWJ1dGVzPFQsIFA+CiAgICAgICAgICAgIDogUmVhY3RNYW5hZ2VkQXR0cmlidXRlczxDLCBQPjsKCiAgICAgICAgaW50ZXJmYWNlIEludHJpbnNpY0F0dHJpYnV0ZXMgZXh0ZW5kcyBSZWFjdC5BdHRyaWJ1dGVzIHsgfQogICAgICAgIGludGVyZmFjZSBJbnRyaW5zaWNDbGFzc0F0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBSZWFjdC5DbGFzc0F0dHJpYnV0ZXM8VD4geyB9CgogICAgICAgIGludGVyZmFjZSBJbnRyaW5zaWNFbGVtZW50cyB7CiAgICAgICAgICAgIC8vIEhUTUwKICAgICAgICAgICAgYTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuQW5jaG9ySFRNTEF0dHJpYnV0ZXM8SFRNTEFuY2hvckVsZW1lbnQ+LCBIVE1MQW5jaG9yRWxlbWVudD47CiAgICAgICAgICAgIGFiYnI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBhZGRyZXNzOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgYXJlYTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuQXJlYUhUTUxBdHRyaWJ1dGVzPEhUTUxBcmVhRWxlbWVudD4sIEhUTUxBcmVhRWxlbWVudD47CiAgICAgICAgICAgIGFydGljbGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBhc2lkZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGF1ZGlvOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5BdWRpb0hUTUxBdHRyaWJ1dGVzPEhUTUxBdWRpb0VsZW1lbnQ+LCBIVE1MQXVkaW9FbGVtZW50PjsKICAgICAgICAgICAgYjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGJhc2U6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkJhc2VIVE1MQXR0cmlidXRlczxIVE1MQmFzZUVsZW1lbnQ+LCBIVE1MQmFzZUVsZW1lbnQ+OwogICAgICAgICAgICBiZGk6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBiZG86IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBiaWc6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBibG9ja3F1b3RlOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5CbG9ja3F1b3RlSFRNTEF0dHJpYnV0ZXM8SFRNTFF1b3RlRWxlbWVudD4sIEhUTUxRdW90ZUVsZW1lbnQ+OwogICAgICAgICAgICBib2R5OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MQm9keUVsZW1lbnQ+LCBIVE1MQm9keUVsZW1lbnQ+OwogICAgICAgICAgICBicjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEJSRWxlbWVudD4sIEhUTUxCUkVsZW1lbnQ+OwogICAgICAgICAgICBidXR0b246IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkJ1dHRvbkhUTUxBdHRyaWJ1dGVzPEhUTUxCdXR0b25FbGVtZW50PiwgSFRNTEJ1dHRvbkVsZW1lbnQ+OwogICAgICAgICAgICBjYW52YXM6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkNhbnZhc0hUTUxBdHRyaWJ1dGVzPEhUTUxDYW52YXNFbGVtZW50PiwgSFRNTENhbnZhc0VsZW1lbnQ+OwogICAgICAgICAgICBjYXB0aW9uOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgY2VudGVyOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgY2l0ZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGNvZGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBjb2w6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkNvbEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNvbEVsZW1lbnQ+LCBIVE1MVGFibGVDb2xFbGVtZW50PjsKICAgICAgICAgICAgY29sZ3JvdXA6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkNvbGdyb3VwSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ29sRWxlbWVudD4sIEhUTUxUYWJsZUNvbEVsZW1lbnQ+OwogICAgICAgICAgICBkYXRhOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5EYXRhSFRNTEF0dHJpYnV0ZXM8SFRNTERhdGFFbGVtZW50PiwgSFRNTERhdGFFbGVtZW50PjsKICAgICAgICAgICAgZGF0YWxpc3Q6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxEYXRhTGlzdEVsZW1lbnQ+LCBIVE1MRGF0YUxpc3RFbGVtZW50PjsKICAgICAgICAgICAgZGQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBkZWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkRlbEhUTUxBdHRyaWJ1dGVzPEhUTUxNb2RFbGVtZW50PiwgSFRNTE1vZEVsZW1lbnQ+OwogICAgICAgICAgICBkZXRhaWxzOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5EZXRhaWxzSFRNTEF0dHJpYnV0ZXM8SFRNTERldGFpbHNFbGVtZW50PiwgSFRNTERldGFpbHNFbGVtZW50PjsKICAgICAgICAgICAgZGZuOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZGlhbG9nOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5EaWFsb2dIVE1MQXR0cmlidXRlczxIVE1MRGlhbG9nRWxlbWVudD4sIEhUTUxEaWFsb2dFbGVtZW50PjsKICAgICAgICAgICAgZGl2OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4sIEhUTUxEaXZFbGVtZW50PjsKICAgICAgICAgICAgZGw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxETGlzdEVsZW1lbnQ+LCBIVE1MRExpc3RFbGVtZW50PjsKICAgICAgICAgICAgZHQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBlbTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGVtYmVkOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5FbWJlZEhUTUxBdHRyaWJ1dGVzPEhUTUxFbWJlZEVsZW1lbnQ+LCBIVE1MRW1iZWRFbGVtZW50PjsKICAgICAgICAgICAgZmllbGRzZXQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkZpZWxkc2V0SFRNTEF0dHJpYnV0ZXM8SFRNTEZpZWxkU2V0RWxlbWVudD4sIEhUTUxGaWVsZFNldEVsZW1lbnQ+OwogICAgICAgICAgICBmaWdjYXB0aW9uOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZmlndXJlOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZm9vdGVyOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZm9ybTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuRm9ybUhUTUxBdHRyaWJ1dGVzPEhUTUxGb3JtRWxlbWVudD4sIEhUTUxGb3JtRWxlbWVudD47CiAgICAgICAgICAgIGgxOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgICAgICBoMjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICAgICAgaDM6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgICAgIGg0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgICAgICBoNTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICAgICAgaDY6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgICAgIGhlYWQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkRWxlbWVudD4sIEhUTUxIZWFkRWxlbWVudD47CiAgICAgICAgICAgIGhlYWRlcjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGhncm91cDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGhyOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MSFJFbGVtZW50PiwgSFRNTEhSRWxlbWVudD47CiAgICAgICAgICAgIGh0bWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lkh0bWxIVE1MQXR0cmlidXRlczxIVE1MSHRtbEVsZW1lbnQ+LCBIVE1MSHRtbEVsZW1lbnQ+OwogICAgICAgICAgICBpOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgaWZyYW1lOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JZnJhbWVIVE1MQXR0cmlidXRlczxIVE1MSUZyYW1lRWxlbWVudD4sIEhUTUxJRnJhbWVFbGVtZW50PjsKICAgICAgICAgICAgaW1nOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JbWdIVE1MQXR0cmlidXRlczxIVE1MSW1hZ2VFbGVtZW50PiwgSFRNTEltYWdlRWxlbWVudD47CiAgICAgICAgICAgIGlucHV0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+LCBIVE1MSW5wdXRFbGVtZW50PjsKICAgICAgICAgICAgaW5zOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JbnNIVE1MQXR0cmlidXRlczxIVE1MTW9kRWxlbWVudD4sIEhUTUxNb2RFbGVtZW50PjsKICAgICAgICAgICAga2JkOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAga2V5Z2VuOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5LZXlnZW5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbGFiZWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkxhYmVsSFRNTEF0dHJpYnV0ZXM8SFRNTExhYmVsRWxlbWVudD4sIEhUTUxMYWJlbEVsZW1lbnQ+OwogICAgICAgICAgICBsZWdlbmQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxMZWdlbmRFbGVtZW50PiwgSFRNTExlZ2VuZEVsZW1lbnQ+OwogICAgICAgICAgICBsaTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuTGlIVE1MQXR0cmlidXRlczxIVE1MTElFbGVtZW50PiwgSFRNTExJRWxlbWVudD47CiAgICAgICAgICAgIGxpbms6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkxpbmtIVE1MQXR0cmlidXRlczxIVE1MTGlua0VsZW1lbnQ+LCBIVE1MTGlua0VsZW1lbnQ+OwogICAgICAgICAgICBtYWluOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbWFwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5NYXBIVE1MQXR0cmlidXRlczxIVE1MTWFwRWxlbWVudD4sIEhUTUxNYXBFbGVtZW50PjsKICAgICAgICAgICAgbWFyazogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIG1lbnU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lk1lbnVIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbWVudWl0ZW06IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBtZXRhOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5NZXRhSFRNTEF0dHJpYnV0ZXM8SFRNTE1ldGFFbGVtZW50PiwgSFRNTE1ldGFFbGVtZW50PjsKICAgICAgICAgICAgbWV0ZXI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lk1ldGVySFRNTEF0dHJpYnV0ZXM8SFRNTE1ldGVyRWxlbWVudD4sIEhUTUxNZXRlckVsZW1lbnQ+OwogICAgICAgICAgICBuYXY6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBub2luZGV4OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbm9zY3JpcHQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBvYmplY3Q6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lk9iamVjdEhUTUxBdHRyaWJ1dGVzPEhUTUxPYmplY3RFbGVtZW50PiwgSFRNTE9iamVjdEVsZW1lbnQ+OwogICAgICAgICAgICBvbDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuT2xIVE1MQXR0cmlidXRlczxIVE1MT0xpc3RFbGVtZW50PiwgSFRNTE9MaXN0RWxlbWVudD47CiAgICAgICAgICAgIG9wdGdyb3VwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5PcHRncm91cEhUTUxBdHRyaWJ1dGVzPEhUTUxPcHRHcm91cEVsZW1lbnQ+LCBIVE1MT3B0R3JvdXBFbGVtZW50PjsKICAgICAgICAgICAgb3B0aW9uOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5PcHRpb25IVE1MQXR0cmlidXRlczxIVE1MT3B0aW9uRWxlbWVudD4sIEhUTUxPcHRpb25FbGVtZW50PjsKICAgICAgICAgICAgb3V0cHV0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5PdXRwdXRIVE1MQXR0cmlidXRlczxIVE1MT3V0cHV0RWxlbWVudD4sIEhUTUxPdXRwdXRFbGVtZW50PjsKICAgICAgICAgICAgcDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFBhcmFncmFwaEVsZW1lbnQ+LCBIVE1MUGFyYWdyYXBoRWxlbWVudD47CiAgICAgICAgICAgIHBhcmFtOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5QYXJhbUhUTUxBdHRyaWJ1dGVzPEhUTUxQYXJhbUVsZW1lbnQ+LCBIVE1MUGFyYW1FbGVtZW50PjsKICAgICAgICAgICAgcGljdHVyZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHByZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFByZUVsZW1lbnQ+LCBIVE1MUHJlRWxlbWVudD47CiAgICAgICAgICAgIHByb2dyZXNzOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5Qcm9ncmVzc0hUTUxBdHRyaWJ1dGVzPEhUTUxQcm9ncmVzc0VsZW1lbnQ+LCBIVE1MUHJvZ3Jlc3NFbGVtZW50PjsKICAgICAgICAgICAgcTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuUXVvdGVIVE1MQXR0cmlidXRlczxIVE1MUXVvdGVFbGVtZW50PiwgSFRNTFF1b3RlRWxlbWVudD47CiAgICAgICAgICAgIHJwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgcnQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBydWJ5OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgczogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHNhbXA6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBzZWFyY2g6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBzbG90OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5TbG90SFRNTEF0dHJpYnV0ZXM8SFRNTFNsb3RFbGVtZW50PiwgSFRNTFNsb3RFbGVtZW50PjsKICAgICAgICAgICAgc2NyaXB0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5TY3JpcHRIVE1MQXR0cmlidXRlczxIVE1MU2NyaXB0RWxlbWVudD4sIEhUTUxTY3JpcHRFbGVtZW50PjsKICAgICAgICAgICAgc2VjdGlvbjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHNlbGVjdDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuU2VsZWN0SFRNTEF0dHJpYnV0ZXM8SFRNTFNlbGVjdEVsZW1lbnQ+LCBIVE1MU2VsZWN0RWxlbWVudD47CiAgICAgICAgICAgIHNtYWxsOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgc291cmNlOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5Tb3VyY2VIVE1MQXR0cmlidXRlczxIVE1MU291cmNlRWxlbWVudD4sIEhUTUxTb3VyY2VFbGVtZW50PjsKICAgICAgICAgICAgc3BhbjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFNwYW5FbGVtZW50PiwgSFRNTFNwYW5FbGVtZW50PjsKICAgICAgICAgICAgc3Ryb25nOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgc3R5bGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LlN0eWxlSFRNTEF0dHJpYnV0ZXM8SFRNTFN0eWxlRWxlbWVudD4sIEhUTUxTdHlsZUVsZW1lbnQ+OwogICAgICAgICAgICBzdWI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBzdW1tYXJ5OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgc3VwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgdGFibGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LlRhYmxlSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlRWxlbWVudD4sIEhUTUxUYWJsZUVsZW1lbnQ+OwogICAgICAgICAgICB0ZW1wbGF0ZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRlbXBsYXRlRWxlbWVudD4sIEhUTUxUZW1wbGF0ZUVsZW1lbnQ+OwogICAgICAgICAgICB0Ym9keTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+LCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudD47CiAgICAgICAgICAgIHRkOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5UZEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD4sIEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD47CiAgICAgICAgICAgIHRleHRhcmVhOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5UZXh0YXJlYUhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+LCBIVE1MVGV4dEFyZWFFbGVtZW50PjsKICAgICAgICAgICAgdGZvb3Q6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PiwgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+OwogICAgICAgICAgICB0aDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuVGhIVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sIEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PjsKICAgICAgICAgICAgdGhlYWQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PiwgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+OwogICAgICAgICAgICB0aW1lOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5UaW1lSFRNTEF0dHJpYnV0ZXM8SFRNTFRpbWVFbGVtZW50PiwgSFRNTFRpbWVFbGVtZW50PjsKICAgICAgICAgICAgdGl0bGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUaXRsZUVsZW1lbnQ+LCBIVE1MVGl0bGVFbGVtZW50PjsKICAgICAgICAgICAgdHI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVJvd0VsZW1lbnQ+LCBIVE1MVGFibGVSb3dFbGVtZW50PjsKICAgICAgICAgICAgdHJhY2s6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LlRyYWNrSFRNTEF0dHJpYnV0ZXM8SFRNTFRyYWNrRWxlbWVudD4sIEhUTUxUcmFja0VsZW1lbnQ+OwogICAgICAgICAgICB1OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgdWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxVTGlzdEVsZW1lbnQ+LCBIVE1MVUxpc3RFbGVtZW50PjsKICAgICAgICAgICAgInZhciI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICB2aWRlbzogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuVmlkZW9IVE1MQXR0cmlidXRlczxIVE1MVmlkZW9FbGVtZW50PiwgSFRNTFZpZGVvRWxlbWVudD47CiAgICAgICAgICAgIHdicjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHdlYnZpZXc6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LldlYlZpZXdIVE1MQXR0cmlidXRlczxIVE1MV2ViVmlld0VsZW1lbnQ+LCBIVE1MV2ViVmlld0VsZW1lbnQ+OwoKICAgICAgICAgICAgLy8gU1ZHCiAgICAgICAgICAgIHN2ZzogUmVhY3QuU1ZHUHJvcHM8U1ZHU1ZHRWxlbWVudD47CgogICAgICAgICAgICBhbmltYXRlOiBSZWFjdC5TVkdQcm9wczxTVkdFbGVtZW50PjsgLy8gVE9ETzogSXQgaXMgU1ZHQW5pbWF0ZUVsZW1lbnQgYnV0IGlzIG5vdCBpbiBUeXBlU2NyaXB0J3MgbGliLmRvbS5kLnRzIGZvciBub3cuCiAgICAgICAgICAgIGFuaW1hdGVNb3Rpb246IFJlYWN0LlNWR1Byb3BzPFNWR0VsZW1lbnQ+OwogICAgICAgICAgICBhbmltYXRlVHJhbnNmb3JtOiBSZWFjdC5TVkdQcm9wczxTVkdFbGVtZW50PjsgLy8gVE9ETzogSXQgaXMgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQgYnV0IGlzIG5vdCBpbiBUeXBlU2NyaXB0J3MgbGliLmRvbS5kLnRzIGZvciBub3cuCiAgICAgICAgICAgIGNpcmNsZTogUmVhY3QuU1ZHUHJvcHM8U1ZHQ2lyY2xlRWxlbWVudD47CiAgICAgICAgICAgIGNsaXBQYXRoOiBSZWFjdC5TVkdQcm9wczxTVkdDbGlwUGF0aEVsZW1lbnQ+OwogICAgICAgICAgICBkZWZzOiBSZWFjdC5TVkdQcm9wczxTVkdEZWZzRWxlbWVudD47CiAgICAgICAgICAgIGRlc2M6IFJlYWN0LlNWR1Byb3BzPFNWR0Rlc2NFbGVtZW50PjsKICAgICAgICAgICAgZWxsaXBzZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRWxsaXBzZUVsZW1lbnQ+OwogICAgICAgICAgICBmZUJsZW5kOiBSZWFjdC5TVkdQcm9wczxTVkdGRUJsZW5kRWxlbWVudD47CiAgICAgICAgICAgIGZlQ29sb3JNYXRyaXg6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50PjsKICAgICAgICAgICAgZmVDb21wb25lbnRUcmFuc2ZlcjogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ+OwogICAgICAgICAgICBmZUNvbXBvc2l0ZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVDb21wb3NpdGVFbGVtZW50PjsKICAgICAgICAgICAgZmVDb252b2x2ZU1hdHJpeDogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ+OwogICAgICAgICAgICBmZURpZmZ1c2VMaWdodGluZzogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50PjsKICAgICAgICAgICAgZmVEaXNwbGFjZW1lbnRNYXA6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudD47CiAgICAgICAgICAgIGZlRGlzdGFudExpZ2h0OiBSZWFjdC5TVkdQcm9wczxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ+OwogICAgICAgICAgICBmZURyb3BTaGFkb3c6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ+OwogICAgICAgICAgICBmZUZsb29kOiBSZWFjdC5TVkdQcm9wczxTVkdGRUZsb29kRWxlbWVudD47CiAgICAgICAgICAgIGZlRnVuY0E6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRnVuY0FFbGVtZW50PjsKICAgICAgICAgICAgZmVGdW5jQjogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVGdW5jQkVsZW1lbnQ+OwogICAgICAgICAgICBmZUZ1bmNHOiBSZWFjdC5TVkdQcm9wczxTVkdGRUZ1bmNHRWxlbWVudD47CiAgICAgICAgICAgIGZlRnVuY1I6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRnVuY1JFbGVtZW50PjsKICAgICAgICAgICAgZmVHYXVzc2lhbkJsdXI6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudD47CiAgICAgICAgICAgIGZlSW1hZ2U6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFSW1hZ2VFbGVtZW50PjsKICAgICAgICAgICAgZmVNZXJnZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVNZXJnZUVsZW1lbnQ+OwogICAgICAgICAgICBmZU1lcmdlTm9kZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PjsKICAgICAgICAgICAgZmVNb3JwaG9sb2d5OiBSZWFjdC5TVkdQcm9wczxTVkdGRU1vcnBob2xvZ3lFbGVtZW50PjsKICAgICAgICAgICAgZmVPZmZzZXQ6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFT2Zmc2V0RWxlbWVudD47CiAgICAgICAgICAgIGZlUG9pbnRMaWdodDogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVQb2ludExpZ2h0RWxlbWVudD47CiAgICAgICAgICAgIGZlU3BlY3VsYXJMaWdodGluZzogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudD47CiAgICAgICAgICAgIGZlU3BvdExpZ2h0OiBSZWFjdC5TVkdQcm9wczxTVkdGRVNwb3RMaWdodEVsZW1lbnQ+OwogICAgICAgICAgICBmZVRpbGU6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFVGlsZUVsZW1lbnQ+OwogICAgICAgICAgICBmZVR1cmJ1bGVuY2U6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ+OwogICAgICAgICAgICBmaWx0ZXI6IFJlYWN0LlNWR1Byb3BzPFNWR0ZpbHRlckVsZW1lbnQ+OwogICAgICAgICAgICBmb3JlaWduT2JqZWN0OiBSZWFjdC5TVkdQcm9wczxTVkdGb3JlaWduT2JqZWN0RWxlbWVudD47CiAgICAgICAgICAgIGc6IFJlYWN0LlNWR1Byb3BzPFNWR0dFbGVtZW50PjsKICAgICAgICAgICAgaW1hZ2U6IFJlYWN0LlNWR1Byb3BzPFNWR0ltYWdlRWxlbWVudD47CiAgICAgICAgICAgIGxpbmU6IFJlYWN0LlNWR0xpbmVFbGVtZW50QXR0cmlidXRlczxTVkdMaW5lRWxlbWVudD47CiAgICAgICAgICAgIGxpbmVhckdyYWRpZW50OiBSZWFjdC5TVkdQcm9wczxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ+OwogICAgICAgICAgICBtYXJrZXI6IFJlYWN0LlNWR1Byb3BzPFNWR01hcmtlckVsZW1lbnQ+OwogICAgICAgICAgICBtYXNrOiBSZWFjdC5TVkdQcm9wczxTVkdNYXNrRWxlbWVudD47CiAgICAgICAgICAgIG1ldGFkYXRhOiBSZWFjdC5TVkdQcm9wczxTVkdNZXRhZGF0YUVsZW1lbnQ+OwogICAgICAgICAgICBtcGF0aDogUmVhY3QuU1ZHUHJvcHM8U1ZHRWxlbWVudD47CiAgICAgICAgICAgIHBhdGg6IFJlYWN0LlNWR1Byb3BzPFNWR1BhdGhFbGVtZW50PjsKICAgICAgICAgICAgcGF0dGVybjogUmVhY3QuU1ZHUHJvcHM8U1ZHUGF0dGVybkVsZW1lbnQ+OwogICAgICAgICAgICBwb2x5Z29uOiBSZWFjdC5TVkdQcm9wczxTVkdQb2x5Z29uRWxlbWVudD47CiAgICAgICAgICAgIHBvbHlsaW5lOiBSZWFjdC5TVkdQcm9wczxTVkdQb2x5bGluZUVsZW1lbnQ+OwogICAgICAgICAgICByYWRpYWxHcmFkaWVudDogUmVhY3QuU1ZHUHJvcHM8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50PjsKICAgICAgICAgICAgcmVjdDogUmVhY3QuU1ZHUHJvcHM8U1ZHUmVjdEVsZW1lbnQ+OwogICAgICAgICAgICBzdG9wOiBSZWFjdC5TVkdQcm9wczxTVkdTdG9wRWxlbWVudD47CiAgICAgICAgICAgIHN3aXRjaDogUmVhY3QuU1ZHUHJvcHM8U1ZHU3dpdGNoRWxlbWVudD47CiAgICAgICAgICAgIHN5bWJvbDogUmVhY3QuU1ZHUHJvcHM8U1ZHU3ltYm9sRWxlbWVudD47CiAgICAgICAgICAgIHRleHQ6IFJlYWN0LlNWR1RleHRFbGVtZW50QXR0cmlidXRlczxTVkdUZXh0RWxlbWVudD47CiAgICAgICAgICAgIHRleHRQYXRoOiBSZWFjdC5TVkdQcm9wczxTVkdUZXh0UGF0aEVsZW1lbnQ+OwogICAgICAgICAgICB0c3BhbjogUmVhY3QuU1ZHUHJvcHM8U1ZHVFNwYW5FbGVtZW50PjsKICAgICAgICAgICAgdXNlOiBSZWFjdC5TVkdQcm9wczxTVkdVc2VFbGVtZW50PjsKICAgICAgICAgICAgdmlldzogUmVhY3QuU1ZHUHJvcHM8U1ZHVmlld0VsZW1lbnQ+OwogICAgICAgIH0KICAgIH0KfQoKLy8gUmVhY3QuSlNYIG5lZWRzIHRvIHBvaW50IHRvIGdsb2JhbC5KU1ggdG8ga2VlcCBnbG9iYWwgbW9kdWxlIGF1Z21lbnRhdGlvbnMgaW50YWN0LgovLyBCdXQgd2UgY2FuJ3QgYWNjZXNzIGdsb2JhbC5KU1ggc28gd2UgbmVlZCB0byBjcmVhdGUgdGhlc2UgYWxpYXNlcyBpbnN0ZWFkLgovLyBPbmNlIHRoZSBnbG9iYWwgSlNYIG5hbWVzcGFjZSB3aWxsIGJlIHJlbW92ZWQgd2UgcmVwbGFjZSBSZWFjdC5KU1ggd2l0aCB0aGUgY29udGVudHMgb2YgZ2xvYmFsLkpTWAp0eXBlIEdsb2JhbEpTWEVsZW1lbnRUeXBlID0gSlNYLkVsZW1lbnRUeXBlOwppbnRlcmZhY2UgR2xvYmFsSlNYRWxlbWVudCBleHRlbmRzIEpTWC5FbGVtZW50IHt9CmludGVyZmFjZSBHbG9iYWxKU1hFbGVtZW50Q2xhc3MgZXh0ZW5kcyBKU1guRWxlbWVudENsYXNzIHt9CmludGVyZmFjZSBHbG9iYWxKU1hFbGVtZW50QXR0cmlidXRlc1Byb3BlcnR5IGV4dGVuZHMgSlNYLkVsZW1lbnRBdHRyaWJ1dGVzUHJvcGVydHkge30KaW50ZXJmYWNlIEdsb2JhbEpTWEVsZW1lbnRDaGlsZHJlbkF0dHJpYnV0ZSBleHRlbmRzIEpTWC5FbGVtZW50Q2hpbGRyZW5BdHRyaWJ1dGUge30KCnR5cGUgR2xvYmFsSlNYTGlicmFyeU1hbmFnZWRBdHRyaWJ1dGVzPEMsIFA+ID0gSlNYLkxpYnJhcnlNYW5hZ2VkQXR0cmlidXRlczxDLCBQPjsKCmludGVyZmFjZSBHbG9iYWxKU1hJbnRyaW5zaWNBdHRyaWJ1dGVzIGV4dGVuZHMgSlNYLkludHJpbnNpY0F0dHJpYnV0ZXMge30KaW50ZXJmYWNlIEdsb2JhbEpTWEludHJpbnNpY0NsYXNzQXR0cmlidXRlczxUPiBleHRlbmRzIEpTWC5JbnRyaW5zaWNDbGFzc0F0dHJpYnV0ZXM8VD4ge30KCmludGVyZmFjZSBHbG9iYWxKU1hJbnRyaW5zaWNFbGVtZW50cyBleHRlbmRzIEpTWC5JbnRyaW5zaWNFbGVtZW50cyB7fQo=",
8
+ "base64",
9
+ ).toString("utf8"),
10
+ },
11
+ elements: {
12
+ url: "https://tlkfrontprodpublic.blob.core.windows.net/template-builder-production/tb-jsx.editor/elements.d.ts",
13
+ sha256: "e3981b97a14159fcb236b232a765795765872a18ebdf2c7708c7fe9606a94e4b",
14
+ source: Buffer.from(
15
+ "Cgp0eXBlIFByaW1pdGl2ZSA9IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCB8IGJpZ2ludCB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkOwoKZGVjbGFyZSBuYW1lc3BhY2UgdXRpbCB7CiAgICB0eXBlIEFzc2VydEVxdWFsPFQsIFU+ID0gKDxWPigpID0+IFYgZXh0ZW5kcyBUID8gMSA6IDIpIGV4dGVuZHMgPFY+KCkgPT4gViBleHRlbmRzIFUgPyAxIDogMiA/IHRydWUgOiBmYWxzZTsKICAgIGV4cG9ydCB0eXBlIGlzQW55PFQ+ID0gMCBleHRlbmRzIDEgJiBUID8gdHJ1ZSA6IGZhbHNlOwogICAgZXhwb3J0IGNvbnN0IGFzc2VydEVxdWFsOiA8QSwgQj4odmFsOiBBc3NlcnRFcXVhbDxBLCBCPikgPT4gQXNzZXJ0RXF1YWw8QSwgQj47CiAgICBleHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4oX2FyZzogVCk6IHZvaWQ7CiAgICBleHBvcnQgZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoX3g6IG5ldmVyKTogbmV2ZXI7CiAgICBleHBvcnQgdHlwZSBPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBLPj47CiAgICBleHBvcnQgdHlwZSBPbWl0S2V5czxULCBLIGV4dGVuZHMgc3RyaW5nPiA9IFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBLPj47CiAgICBleHBvcnQgdHlwZSBNYWtlUGFydGlhbDxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBPbWl0PFQsIEs+ICYgUGFydGlhbDxQaWNrPFQsIEs+PjsKICAgIGV4cG9ydCB0eXBlIEV4YWN0bHk8VCwgWD4gPSBUICYgUmVjb3JkPEV4Y2x1ZGU8a2V5b2YgWCwga2V5b2YgVD4sIG5ldmVyPjsKICAgIGV4cG9ydCBjb25zdCBhcnJheVRvRW51bTogPFQgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBbVCwgLi4uVFtdXT4oaXRlbXM6IFUpID0+IHsgW2sgaW4gVVtudW1iZXJdXTogazsgfTsKICAgIGV4cG9ydCBjb25zdCBnZXRWYWxpZEVudW1WYWx1ZXM6IChvYmo6IGFueSkgPT4gYW55W107CiAgICBleHBvcnQgY29uc3Qgb2JqZWN0VmFsdWVzOiAob2JqOiBhbnkpID0+IGFueVtdOwogICAgZXhwb3J0IGNvbnN0IG9iamVjdEtleXM6IE9iamVjdENvbnN0cnVjdG9yWyJrZXlzIl07CiAgICBleHBvcnQgY29uc3QgZmluZDogPFQ+KGFycjogVFtdLCBjaGVja2VyOiAoYXJnOiBUKSA9PiBhbnkpID0+IFQgfCB1bmRlZmluZWQ7CiAgICBleHBvcnQgdHlwZSBpZGVudGl0eTxUPiA9IG9iamVjdFV0aWwuaWRlbnRpdHk8VD47CiAgICBleHBvcnQgdHlwZSBmbGF0dGVuPFQ+ID0gb2JqZWN0VXRpbC5mbGF0dGVuPFQ+OwogICAgZXhwb3J0IHR5cGUgbm9VbmRlZmluZWQ8VD4gPSBUIGV4dGVuZHMgdW5kZWZpbmVkID8gbmV2ZXIgOiBUOwogICAgZXhwb3J0IGNvbnN0IGlzSW50ZWdlcjogTnVtYmVyQ29uc3RydWN0b3JbImlzSW50ZWdlciJdOwogICAgZXhwb3J0IGZ1bmN0aW9uIGpvaW5WYWx1ZXM8VCBleHRlbmRzIGFueVtdPihhcnJheTogVCwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nOwogICAgZXhwb3J0IGNvbnN0IGpzb25TdHJpbmdpZnlSZXBsYWNlcjogKF86IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55OwogICAgZXhwb3J0IHt9Owp9CmRlY2xhcmUgbmFtZXNwYWNlIG9iamVjdFV0aWwgewogICAgZXhwb3J0IHR5cGUgTWVyZ2VTaGFwZXM8VSwgVj4gPSB7CiAgICAgICAgW2sgaW4gRXhjbHVkZTxrZXlvZiBVLCBrZXlvZiBWPl06IFVba107CiAgICB9ICYgVjsKICAgIHR5cGUgb3B0aW9uYWxLZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0gewogICAgICAgIFtrIGluIGtleW9mIFRdOiB1bmRlZmluZWQgZXh0ZW5kcyBUW2tdID8gayA6IG5ldmVyOwogICAgfVtrZXlvZiBUXTsKICAgIHR5cGUgcmVxdWlyZWRLZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0gewogICAgICAgIFtrIGluIGtleW9mIFRdOiB1bmRlZmluZWQgZXh0ZW5kcyBUW2tdID8gbmV2ZXIgOiBrOwogICAgfVtrZXlvZiBUXTsKICAgIGV4cG9ydCB0eXBlIGFkZFF1ZXN0aW9uTWFya3M8VCBleHRlbmRzIG9iamVjdCwgX08gPSBhbnk+ID0gewogICAgICAgIFtLIGluIHJlcXVpcmVkS2V5czxUPl06IFRbS107CiAgICB9ICYgewogICAgICAgIFtLIGluIG9wdGlvbmFsS2V5czxUPl0/OiBUW0tdOwogICAgfSAmIHsKICAgICAgICBbayBpbiBrZXlvZiBUXT86IHVua25vd247CiAgICB9OwogICAgZXhwb3J0IHR5cGUgaWRlbnRpdHk8VD4gPSBUOwogICAgZXhwb3J0IHR5cGUgZmxhdHRlbjxUPiA9IGlkZW50aXR5PHsKICAgICAgICBbayBpbiBrZXlvZiBUXTogVFtrXTsKICAgIH0+OwogICAgZXhwb3J0IHR5cGUgbm9OZXZlcktleXM8VD4gPSB7CiAgICAgICAgW2sgaW4ga2V5b2YgVF06IFtUW2tdXSBleHRlbmRzIFtuZXZlcl0gPyBuZXZlciA6IGs7CiAgICB9W2tleW9mIFRdOwogICAgZXhwb3J0IHR5cGUgbm9OZXZlcjxUPiA9IGlkZW50aXR5PHsKICAgICAgICBbayBpbiBub05ldmVyS2V5czxUPl06IGsgZXh0ZW5kcyBrZXlvZiBUID8gVFtrXSA6IG5ldmVyOwogICAgfT47CiAgICBleHBvcnQgY29uc3QgbWVyZ2VTaGFwZXM6IDxVLCBUPihmaXJzdDogVSwgc2Vjb25kOiBUKSA9PiBUICYgVTsKICAgIGV4cG9ydCB0eXBlIGV4dGVuZFNoYXBlPEEgZXh0ZW5kcyBvYmplY3QsIEIgZXh0ZW5kcyBvYmplY3Q+ID0gewogICAgICAgIFtLIGluIGtleW9mIEEgYXMgSyBleHRlbmRzIGtleW9mIEIgPyBuZXZlciA6IEtdOiBBW0tdOwogICAgfSAmIHsKICAgICAgICBbSyBpbiBrZXlvZiBCXTogQltLXTsKICAgIH07CiAgICBleHBvcnQge307Cn0KZGVjbGFyZSBjb25zdCBab2RQYXJzZWRUeXBlOiB7CiAgICBzdHJpbmc6ICJzdHJpbmciOwogICAgbnVtYmVyOiAibnVtYmVyIjsKICAgIGJpZ2ludDogImJpZ2ludCI7CiAgICBib29sZWFuOiAiYm9vbGVhbiI7CiAgICBzeW1ib2w6ICJzeW1ib2wiOwogICAgdW5kZWZpbmVkOiAidW5kZWZpbmVkIjsKICAgIG9iamVjdDogIm9iamVjdCI7CiAgICBmdW5jdGlvbjogImZ1bmN0aW9uIjsKICAgIG1hcDogIm1hcCI7CiAgICBuYW46ICJuYW4iOwogICAgaW50ZWdlcjogImludGVnZXIiOwogICAgZmxvYXQ6ICJmbG9hdCI7CiAgICBkYXRlOiAiZGF0ZSI7CiAgICBudWxsOiAibnVsbCI7CiAgICBhcnJheTogImFycmF5IjsKICAgIHVua25vd246ICJ1bmtub3duIjsKICAgIHByb21pc2U6ICJwcm9taXNlIjsKICAgIHZvaWQ6ICJ2b2lkIjsKICAgIG5ldmVyOiAibmV2ZXIiOwogICAgc2V0OiAic2V0IjsKfTsKdHlwZSBab2RQYXJzZWRUeXBlID0ga2V5b2YgdHlwZW9mIFpvZFBhcnNlZFR5cGU7Cgp0eXBlIGFsbEtleXM8VD4gPSBUIGV4dGVuZHMgYW55ID8ga2V5b2YgVCA6IG5ldmVyOwp0eXBlIHR5cGVUb0ZsYXR0ZW5lZEVycm9yPFQsIFUgPSBzdHJpbmc+ID0gewogICAgZm9ybUVycm9yczogVVtdOwogICAgZmllbGRFcnJvcnM6IHsKICAgICAgICBbUCBpbiBhbGxLZXlzPFQ+XT86IFVbXTsKICAgIH07Cn07CmRlY2xhcmUgY29uc3QgWm9kSXNzdWVDb2RlOiB7CiAgICBpbnZhbGlkX3R5cGU6ICJpbnZhbGlkX3R5cGUiOwogICAgaW52YWxpZF9saXRlcmFsOiAiaW52YWxpZF9saXRlcmFsIjsKICAgIGN1c3RvbTogImN1c3RvbSI7CiAgICBpbnZhbGlkX3VuaW9uOiAiaW52YWxpZF91bmlvbiI7CiAgICBpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3I6ICJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3IiOwogICAgaW52YWxpZF9lbnVtX3ZhbHVlOiAiaW52YWxpZF9lbnVtX3ZhbHVlIjsKICAgIHVucmVjb2duaXplZF9rZXlzOiAidW5yZWNvZ25pemVkX2tleXMiOwogICAgaW52YWxpZF9hcmd1bWVudHM6ICJpbnZhbGlkX2FyZ3VtZW50cyI7CiAgICBpbnZhbGlkX3JldHVybl90eXBlOiAiaW52YWxpZF9yZXR1cm5fdHlwZSI7CiAgICBpbnZhbGlkX2RhdGU6ICJpbnZhbGlkX2RhdGUiOwogICAgaW52YWxpZF9zdHJpbmc6ICJpbnZhbGlkX3N0cmluZyI7CiAgICB0b29fc21hbGw6ICJ0b29fc21hbGwiOwogICAgdG9vX2JpZzogInRvb19iaWciOwogICAgaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXM6ICJpbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlcyI7CiAgICBub3RfbXVsdGlwbGVfb2Y6ICJub3RfbXVsdGlwbGVfb2YiOwogICAgbm90X2Zpbml0ZTogIm5vdF9maW5pdGUiOwp9Owp0eXBlIFpvZElzc3VlQ29kZSA9IGtleW9mIHR5cGVvZiBab2RJc3N1ZUNvZGU7CnR5cGUgWm9kSXNzdWVCYXNlID0gewogICAgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXTsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn07CmludGVyZmFjZSBab2RJbnZhbGlkVHlwZUlzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlOwogICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGU7CiAgICByZWNlaXZlZDogWm9kUGFyc2VkVHlwZTsKfQppbnRlcmZhY2UgWm9kSW52YWxpZExpdGVyYWxJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmludmFsaWRfbGl0ZXJhbDsKICAgIGV4cGVjdGVkOiB1bmtub3duOwogICAgcmVjZWl2ZWQ6IHVua25vd247Cn0KaW50ZXJmYWNlIFpvZFVucmVjb2duaXplZEtleXNJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzOwogICAga2V5czogc3RyaW5nW107Cn0KaW50ZXJmYWNlIFpvZEludmFsaWRVbmlvbklzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbjsKICAgIHVuaW9uRXJyb3JzOiBab2RFcnJvcltdOwp9CmludGVyZmFjZSBab2RJbnZhbGlkVW5pb25EaXNjcmltaW5hdG9ySXNzdWUgZXh0ZW5kcyBab2RJc3N1ZUJhc2UgewogICAgY29kZTogdHlwZW9mIFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3I7CiAgICBvcHRpb25zOiBQcmltaXRpdmVbXTsKfQppbnRlcmZhY2UgWm9kSW52YWxpZEVudW1WYWx1ZUlzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIHJlY2VpdmVkOiBzdHJpbmcgfCBudW1iZXI7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZTsKICAgIG9wdGlvbnM6IChzdHJpbmcgfCBudW1iZXIpW107Cn0KaW50ZXJmYWNlIFpvZEludmFsaWRBcmd1bWVudHNJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmludmFsaWRfYXJndW1lbnRzOwogICAgYXJndW1lbnRzRXJyb3I6IFpvZEVycm9yOwp9CmludGVyZmFjZSBab2RJbnZhbGlkUmV0dXJuVHlwZUlzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZTsKICAgIHJldHVyblR5cGVFcnJvcjogWm9kRXJyb3I7Cn0KaW50ZXJmYWNlIFpvZEludmFsaWREYXRlSXNzdWUgZXh0ZW5kcyBab2RJc3N1ZUJhc2UgewogICAgY29kZTogdHlwZW9mIFpvZElzc3VlQ29kZS5pbnZhbGlkX2RhdGU7Cn0KdHlwZSBTdHJpbmdWYWxpZGF0aW9uID0gImVtYWlsIiB8ICJ1cmwiIHwgImVtb2ppIiB8ICJ1dWlkIiB8ICJuYW5vaWQiIHwgInJlZ2V4IiB8ICJjdWlkIiB8ICJjdWlkMiIgfCAidWxpZCIgfCAiZGF0ZXRpbWUiIHwgImRhdGUiIHwgInRpbWUiIHwgImR1cmF0aW9uIiB8ICJpcCIgfCAiY2lkciIgfCAiYmFzZTY0IiB8ICJqd3QiIHwgImJhc2U2NHVybCIgfCB7CiAgICBpbmNsdWRlczogc3RyaW5nOwogICAgcG9zaXRpb24/OiBudW1iZXI7Cn0gfCB7CiAgICBzdGFydHNXaXRoOiBzdHJpbmc7Cn0gfCB7CiAgICBlbmRzV2l0aDogc3RyaW5nOwp9OwppbnRlcmZhY2UgWm9kSW52YWxpZFN0cmluZ0lzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmc7CiAgICB2YWxpZGF0aW9uOiBTdHJpbmdWYWxpZGF0aW9uOwp9CmludGVyZmFjZSBab2RUb29TbWFsbElzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsOwogICAgbWluaW11bTogbnVtYmVyIHwgYmlnaW50OwogICAgaW5jbHVzaXZlOiBib29sZWFuOwogICAgZXhhY3Q/OiBib29sZWFuOwogICAgdHlwZTogImFycmF5IiB8ICJzdHJpbmciIHwgIm51bWJlciIgfCAic2V0IiB8ICJkYXRlIiB8ICJiaWdpbnQiOwp9CmludGVyZmFjZSBab2RUb29CaWdJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLnRvb19iaWc7CiAgICBtYXhpbXVtOiBudW1iZXIgfCBiaWdpbnQ7CiAgICBpbmNsdXNpdmU6IGJvb2xlYW47CiAgICBleGFjdD86IGJvb2xlYW47CiAgICB0eXBlOiAiYXJyYXkiIHwgInN0cmluZyIgfCAibnVtYmVyIiB8ICJzZXQiIHwgImRhdGUiIHwgImJpZ2ludCI7Cn0KaW50ZXJmYWNlIFpvZEludmFsaWRJbnRlcnNlY3Rpb25UeXBlc0lzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXM7Cn0KaW50ZXJmYWNlIFpvZE5vdE11bHRpcGxlT2ZJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZjsKICAgIG11bHRpcGxlT2Y6IG51bWJlciB8IGJpZ2ludDsKfQppbnRlcmZhY2UgWm9kTm90RmluaXRlSXNzdWUgZXh0ZW5kcyBab2RJc3N1ZUJhc2UgewogICAgY29kZTogdHlwZW9mIFpvZElzc3VlQ29kZS5ub3RfZmluaXRlOwp9CmludGVyZmFjZSBab2RDdXN0b21Jc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmN1c3RvbTsKICAgIHBhcmFtcz86IHsKICAgICAgICBbazogc3RyaW5nXTogYW55OwogICAgfTsKfQp0eXBlIFpvZElzc3VlT3B0aW9uYWxNZXNzYWdlID0gWm9kSW52YWxpZFR5cGVJc3N1ZSB8IFpvZEludmFsaWRMaXRlcmFsSXNzdWUgfCBab2RVbnJlY29nbml6ZWRLZXlzSXNzdWUgfCBab2RJbnZhbGlkVW5pb25Jc3N1ZSB8IFpvZEludmFsaWRVbmlvbkRpc2NyaW1pbmF0b3JJc3N1ZSB8IFpvZEludmFsaWRFbnVtVmFsdWVJc3N1ZSB8IFpvZEludmFsaWRBcmd1bWVudHNJc3N1ZSB8IFpvZEludmFsaWRSZXR1cm5UeXBlSXNzdWUgfCBab2RJbnZhbGlkRGF0ZUlzc3VlIHwgWm9kSW52YWxpZFN0cmluZ0lzc3VlIHwgWm9kVG9vU21hbGxJc3N1ZSB8IFpvZFRvb0JpZ0lzc3VlIHwgWm9kSW52YWxpZEludGVyc2VjdGlvblR5cGVzSXNzdWUgfCBab2ROb3RNdWx0aXBsZU9mSXNzdWUgfCBab2ROb3RGaW5pdGVJc3N1ZSB8IFpvZEN1c3RvbUlzc3VlOwp0eXBlIFpvZElzc3VlID0gWm9kSXNzdWVPcHRpb25hbE1lc3NhZ2UgJiB7CiAgICBmYXRhbD86IGJvb2xlYW47CiAgICBtZXNzYWdlOiBzdHJpbmc7Cn07CnR5cGUgcmVjdXJzaXZlWm9kRm9ybWF0dGVkRXJyb3I8VD4gPSBUIGV4dGVuZHMgW2FueSwgLi4uYW55W11dID8gewogICAgW0sgaW4ga2V5b2YgVF0/OiBab2RGb3JtYXR0ZWRFcnJvcjxUW0tdPjsKfSA6IFQgZXh0ZW5kcyBhbnlbXSA/IHsKICAgIFtrOiBudW1iZXJdOiBab2RGb3JtYXR0ZWRFcnJvcjxUW251bWJlcl0+Owp9IDogVCBleHRlbmRzIG9iamVjdCA/IHsKICAgIFtLIGluIGtleW9mIFRdPzogWm9kRm9ybWF0dGVkRXJyb3I8VFtLXT47Cn0gOiB1bmtub3duOwp0eXBlIFpvZEZvcm1hdHRlZEVycm9yPFQsIFUgPSBzdHJpbmc+ID0gewogICAgX2Vycm9yczogVVtdOwp9ICYgcmVjdXJzaXZlWm9kRm9ybWF0dGVkRXJyb3I8Tm9uTnVsbGFibGU8VD4+OwpkZWNsYXJlIGNsYXNzIFpvZEVycm9yPFQgPSBhbnk+IGV4dGVuZHMgRXJyb3IgewogICAgaXNzdWVzOiBab2RJc3N1ZVtdOwogICAgZ2V0IGVycm9ycygpOiBab2RJc3N1ZVtdOwogICAgY29uc3RydWN0b3IoaXNzdWVzOiBab2RJc3N1ZVtdKTsKICAgIGZvcm1hdCgpOiBab2RGb3JtYXR0ZWRFcnJvcjxUPjsKICAgIGZvcm1hdDxVPihtYXBwZXI6IChpc3N1ZTogWm9kSXNzdWUpID0+IFUpOiBab2RGb3JtYXR0ZWRFcnJvcjxULCBVPjsKICAgIHN0YXRpYyBjcmVhdGU6IChpc3N1ZXM6IFpvZElzc3VlW10pID0+IFpvZEVycm9yPGFueT47CiAgICBzdGF0aWMgYXNzZXJ0KHZhbHVlOiB1bmtub3duKTogYXNzZXJ0cyB2YWx1ZSBpcyBab2RFcnJvcjsKICAgIHRvU3RyaW5nKCk6IHN0cmluZzsKICAgIGdldCBtZXNzYWdlKCk6IHN0cmluZzsKICAgIGdldCBpc0VtcHR5KCk6IGJvb2xlYW47CiAgICBhZGRJc3N1ZTogKHN1YjogWm9kSXNzdWUpID0+IHZvaWQ7CiAgICBhZGRJc3N1ZXM6IChzdWJzPzogWm9kSXNzdWVbXSkgPT4gdm9pZDsKICAgIGZsYXR0ZW4oKTogdHlwZVRvRmxhdHRlbmVkRXJyb3I8VD47CiAgICBmbGF0dGVuPFU+KG1hcHBlcj86IChpc3N1ZTogWm9kSXNzdWUpID0+IFUpOiB0eXBlVG9GbGF0dGVuZWRFcnJvcjxULCBVPjsKICAgIGdldCBmb3JtRXJyb3JzKCk6IHR5cGVUb0ZsYXR0ZW5lZEVycm9yPFQsIHN0cmluZz47Cn0KdHlwZSBzdHJpcFBhdGg8VCBleHRlbmRzIG9iamVjdD4gPSBUIGV4dGVuZHMgYW55ID8gdXRpbC5PbWl0S2V5czxULCAicGF0aCI+IDogbmV2ZXI7CnR5cGUgSXNzdWVEYXRhID0gc3RyaXBQYXRoPFpvZElzc3VlT3B0aW9uYWxNZXNzYWdlPiAmIHsKICAgIHBhdGg/OiAoc3RyaW5nIHwgbnVtYmVyKVtdOwogICAgZmF0YWw/OiBib29sZWFuOwp9Owp0eXBlIEVycm9yTWFwQ3R4ID0gewogICAgZGVmYXVsdEVycm9yOiBzdHJpbmc7CiAgICBkYXRhOiBhbnk7Cn07CnR5cGUgWm9kRXJyb3JNYXAgPSAoaXNzdWU6IFpvZElzc3VlT3B0aW9uYWxNZXNzYWdlLCBfY3R4OiBFcnJvck1hcEN0eCkgPT4gewogICAgbWVzc2FnZTogc3RyaW5nOwp9OwoKdHlwZSBQYXJzZVBhcmFtcyA9IHsKICAgIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW107CiAgICBlcnJvck1hcDogWm9kRXJyb3JNYXA7CiAgICBhc3luYzogYm9vbGVhbjsKfTsKdHlwZSBQYXJzZVBhdGhDb21wb25lbnQgPSBzdHJpbmcgfCBudW1iZXI7CnR5cGUgUGFyc2VQYXRoID0gUGFyc2VQYXRoQ29tcG9uZW50W107CmludGVyZmFjZSBQYXJzZUNvbnRleHQgewogICAgcmVhZG9ubHkgY29tbW9uOiB7CiAgICAgICAgcmVhZG9ubHkgaXNzdWVzOiBab2RJc3N1ZVtdOwogICAgICAgIHJlYWRvbmx5IGNvbnRleHR1YWxFcnJvck1hcD86IFpvZEVycm9yTWFwOwogICAgICAgIHJlYWRvbmx5IGFzeW5jOiBib29sZWFuOwogICAgfTsKICAgIHJlYWRvbmx5IHBhdGg6IFBhcnNlUGF0aDsKICAgIHJlYWRvbmx5IHNjaGVtYUVycm9yTWFwPzogWm9kRXJyb3JNYXA7CiAgICByZWFkb25seSBwYXJlbnQ6IFBhcnNlQ29udGV4dCB8IG51bGw7CiAgICByZWFkb25seSBkYXRhOiBhbnk7CiAgICByZWFkb25seSBwYXJzZWRUeXBlOiBab2RQYXJzZWRUeXBlOwp9CnR5cGUgUGFyc2VJbnB1dCA9IHsKICAgIGRhdGE6IGFueTsKICAgIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW107CiAgICBwYXJlbnQ6IFBhcnNlQ29udGV4dDsKfTsKZGVjbGFyZSBjbGFzcyBQYXJzZVN0YXR1cyB7CiAgICB2YWx1ZTogImFib3J0ZWQiIHwgImRpcnR5IiB8ICJ2YWxpZCI7CiAgICBkaXJ0eSgpOiB2b2lkOwogICAgYWJvcnQoKTogdm9pZDsKICAgIHN0YXRpYyBtZXJnZUFycmF5KHN0YXR1czogUGFyc2VTdGF0dXMsIHJlc3VsdHM6IFN5bmNQYXJzZVJldHVyblR5cGU8YW55PltdKTogU3luY1BhcnNlUmV0dXJuVHlwZTsKICAgIHN0YXRpYyBtZXJnZU9iamVjdEFzeW5jKHN0YXR1czogUGFyc2VTdGF0dXMsIHBhaXJzOiB7CiAgICAgICAga2V5OiBQYXJzZVJldHVyblR5cGU8YW55PjsKICAgICAgICB2YWx1ZTogUGFyc2VSZXR1cm5UeXBlPGFueT47CiAgICB9W10pOiBQcm9taXNlPFN5bmNQYXJzZVJldHVyblR5cGU8YW55Pj47CiAgICBzdGF0aWMgbWVyZ2VPYmplY3RTeW5jKHN0YXR1czogUGFyc2VTdGF0dXMsIHBhaXJzOiB7CiAgICAgICAga2V5OiBTeW5jUGFyc2VSZXR1cm5UeXBlPGFueT47CiAgICAgICAgdmFsdWU6IFN5bmNQYXJzZVJldHVyblR5cGU8YW55PjsKICAgICAgICBhbHdheXNTZXQ/OiBib29sZWFuOwogICAgfVtdKTogU3luY1BhcnNlUmV0dXJuVHlwZTsKfQp0eXBlIElOVkFMSUQgPSB7CiAgICBzdGF0dXM6ICJhYm9ydGVkIjsKfTsKZGVjbGFyZSBjb25zdCBJTlZBTElEOiBJTlZBTElEOwp0eXBlIERJUlRZPFQ+ID0gewogICAgc3RhdHVzOiAiZGlydHkiOwogICAgdmFsdWU6IFQ7Cn07CmRlY2xhcmUgY29uc3QgRElSVFk6IDxUPih2YWx1ZTogVCkgPT4gRElSVFk8VD47CnR5cGUgT0s8VD4gPSB7CiAgICBzdGF0dXM6ICJ2YWxpZCI7CiAgICB2YWx1ZTogVDsKfTsKZGVjbGFyZSBjb25zdCBPSzogPFQ+KHZhbHVlOiBUKSA9PiBPSzxUPjsKdHlwZSBTeW5jUGFyc2VSZXR1cm5UeXBlPFQgPSBhbnk+ID0gT0s8VD4gfCBESVJUWTxUPiB8IElOVkFMSUQ7CnR5cGUgQXN5bmNQYXJzZVJldHVyblR5cGU8VD4gPSBQcm9taXNlPFN5bmNQYXJzZVJldHVyblR5cGU8VD4+Owp0eXBlIFBhcnNlUmV0dXJuVHlwZTxUPiA9IFN5bmNQYXJzZVJldHVyblR5cGU8VD4gfCBBc3luY1BhcnNlUmV0dXJuVHlwZTxUPjsKCmRlY2xhcmUgbmFtZXNwYWNlIGVycm9yVXRpbCB7CiAgICB0eXBlIEVyck1lc3NhZ2UgPSBzdHJpbmcgfCB7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH07CiAgICBjb25zdCBlcnJUb09iajogKG1lc3NhZ2U/OiBFcnJNZXNzYWdlKSA9PiB7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH07CiAgICBjb25zdCB0b1N0cmluZzogKG1lc3NhZ2U/OiBFcnJNZXNzYWdlKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7Cn0KCi8qKgogKiBUaGUgU3RhbmRhcmQgU2NoZW1hIGludGVyZmFjZS4KICovCnR5cGUgU3RhbmRhcmRTY2hlbWFWMTxJbnB1dCA9IHVua25vd24sIE91dHB1dCA9IElucHV0PiA9IHsKICAgIC8qKgogICAgICogVGhlIFN0YW5kYXJkIFNjaGVtYSBwcm9wZXJ0aWVzLgogICAgICovCiAgICByZWFkb25seSAifnN0YW5kYXJkIjogU3RhbmRhcmRTY2hlbWFWMS5Qcm9wczxJbnB1dCwgT3V0cHV0PjsKfTsKZGVjbGFyZSBuYW1lc3BhY2UgU3RhbmRhcmRTY2hlbWFWMSB7CiAgICAvKioKICAgICAqIFRoZSBTdGFuZGFyZCBTY2hlbWEgcHJvcGVydGllcyBpbnRlcmZhY2UuCiAgICAgKi8KICAgIGV4cG9ydCBpbnRlcmZhY2UgUHJvcHM8SW5wdXQgPSB1bmtub3duLCBPdXRwdXQgPSBJbnB1dD4gewogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgc3RhbmRhcmQuCiAgICAgICAgICovCiAgICAgICAgcmVhZG9ubHkgdmVyc2lvbjogMTsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgdmVuZG9yIG5hbWUgb2YgdGhlIHNjaGVtYSBsaWJyYXJ5LgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IHZlbmRvcjogc3RyaW5nOwogICAgICAgIC8qKgogICAgICAgICAqIFZhbGlkYXRlcyB1bmtub3duIGlucHV0IHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICByZWFkb25seSB2YWxpZGF0ZTogKHZhbHVlOiB1bmtub3duKSA9PiBSZXN1bHQ8T3V0cHV0PiB8IFByb21pc2U8UmVzdWx0PE91dHB1dD4+OwogICAgICAgIC8qKgogICAgICAgICAqIEluZmVycmVkIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NoZW1hLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IHR5cGVzPzogVHlwZXM8SW5wdXQsIE91dHB1dD4gfCB1bmRlZmluZWQ7CiAgICB9CiAgICAvKioKICAgICAqIFRoZSByZXN1bHQgaW50ZXJmYWNlIG9mIHRoZSB2YWxpZGF0ZSBmdW5jdGlvbi4KICAgICAqLwogICAgZXhwb3J0IHR5cGUgUmVzdWx0PE91dHB1dD4gPSBTdWNjZXNzUmVzdWx0PE91dHB1dD4gfCBGYWlsdXJlUmVzdWx0OwogICAgLyoqCiAgICAgKiBUaGUgcmVzdWx0IGludGVyZmFjZSBpZiB2YWxpZGF0aW9uIHN1Y2NlZWRzLgogICAgICovCiAgICBleHBvcnQgaW50ZXJmYWNlIFN1Y2Nlc3NSZXN1bHQ8T3V0cHV0PiB7CiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIHR5cGVkIG91dHB1dCB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICByZWFkb25seSB2YWx1ZTogT3V0cHV0OwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBub24tZXhpc3RlbnQgaXNzdWVzLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGlzc3Vlcz86IHVuZGVmaW5lZDsKICAgIH0KICAgIC8qKgogICAgICogVGhlIHJlc3VsdCBpbnRlcmZhY2UgaWYgdmFsaWRhdGlvbiBmYWlscy4KICAgICAqLwogICAgZXhwb3J0IGludGVyZmFjZSBGYWlsdXJlUmVzdWx0IHsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgaXNzdWVzIG9mIGZhaWxlZCB2YWxpZGF0aW9uLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGlzc3VlczogUmVhZG9ubHlBcnJheTxJc3N1ZT47CiAgICB9CiAgICAvKioKICAgICAqIFRoZSBpc3N1ZSBpbnRlcmZhY2Ugb2YgdGhlIGZhaWx1cmUgb3V0cHV0LgogICAgICovCiAgICBleHBvcnQgaW50ZXJmYWNlIElzc3VlIHsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgZXJyb3IgbWVzc2FnZSBvZiB0aGUgaXNzdWUuCiAgICAgICAgICovCiAgICAgICAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nOwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBwYXRoIG9mIHRoZSBpc3N1ZSwgaWYgYW55LgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IHBhdGg/OiBSZWFkb25seUFycmF5PFByb3BlcnR5S2V5IHwgUGF0aFNlZ21lbnQ+IHwgdW5kZWZpbmVkOwogICAgfQogICAgLyoqCiAgICAgKiBUaGUgcGF0aCBzZWdtZW50IGludGVyZmFjZSBvZiB0aGUgaXNzdWUuCiAgICAgKi8KICAgIGV4cG9ydCBpbnRlcmZhY2UgUGF0aFNlZ21lbnQgewogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBrZXkgcmVwcmVzZW50aW5nIGEgcGF0aCBzZWdtZW50LgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGtleTogUHJvcGVydHlLZXk7CiAgICB9CiAgICAvKioKICAgICAqIFRoZSBTdGFuZGFyZCBTY2hlbWEgdHlwZXMgaW50ZXJmYWNlLgogICAgICovCiAgICBleHBvcnQgaW50ZXJmYWNlIFR5cGVzPElucHV0ID0gdW5rbm93biwgT3V0cHV0ID0gSW5wdXQ+IHsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgaW5wdXQgdHlwZSBvZiB0aGUgc2NoZW1hLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGlucHV0OiBJbnB1dDsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgb3V0cHV0IHR5cGUgb2YgdGhlIHNjaGVtYS4KICAgICAgICAgKi8KICAgICAgICByZWFkb25seSBvdXRwdXQ6IE91dHB1dDsKICAgIH0KICAgIC8qKgogICAgICogSW5mZXJzIHRoZSBpbnB1dCB0eXBlIG9mIGEgU3RhbmRhcmQgU2NoZW1hLgogICAgICovCiAgICBleHBvcnQgdHlwZSBJbmZlcklucHV0PFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjE+ID0gTm9uTnVsbGFibGU8U2NoZW1hWyJ+c3RhbmRhcmQiXVsidHlwZXMiXT5bImlucHV0Il07CiAgICAvKioKICAgICAqIEluZmVycyB0aGUgb3V0cHV0IHR5cGUgb2YgYSBTdGFuZGFyZCBTY2hlbWEuCiAgICAgKi8KICAgIGV4cG9ydCB0eXBlIEluZmVyT3V0cHV0PFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjE+ID0gTm9uTnVsbGFibGU8U2NoZW1hWyJ+c3RhbmRhcmQiXVsidHlwZXMiXT5bIm91dHB1dCJdOwogICAgZXhwb3J0IHt9Owp9CgppbnRlcmZhY2UgUmVmaW5lbWVudEN0eCB7CiAgICBhZGRJc3N1ZTogKGFyZzogSXNzdWVEYXRhKSA9PiB2b2lkOwogICAgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXTsKfQp0eXBlIFpvZFJhd1NoYXBlID0gewogICAgW2s6IHN0cmluZ106IFpvZFR5cGVBbnk7Cn07CnR5cGUgWm9kVHlwZUFueSA9IFpvZFR5cGU8YW55LCBhbnksIGFueT47CnR5cGUgaW5wdXQ8VCBleHRlbmRzIFpvZFR5cGU8YW55LCBhbnksIGFueT4+ID0gVFsiX2lucHV0Il07CnR5cGUgb3V0cHV0PFQgZXh0ZW5kcyBab2RUeXBlPGFueSwgYW55LCBhbnk+PiA9IFRbIl9vdXRwdXQiXTsKCnR5cGUgQ3VzdG9tRXJyb3JQYXJhbXMgPSBQYXJ0aWFsPHV0aWwuT21pdDxab2RDdXN0b21Jc3N1ZSwgImNvZGUiPj47CmludGVyZmFjZSBab2RUeXBlRGVmIHsKICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXA7CiAgICBkZXNjcmlwdGlvbj86IHN0cmluZzsKfQp0eXBlIFJhd0NyZWF0ZVBhcmFtcyA9IHsKICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXA7CiAgICBpbnZhbGlkX3R5cGVfZXJyb3I/OiBzdHJpbmc7CiAgICByZXF1aXJlZF9lcnJvcj86IHN0cmluZzsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7CiAgICBkZXNjcmlwdGlvbj86IHN0cmluZzsKfSB8IHVuZGVmaW5lZDsKdHlwZSBTYWZlUGFyc2VTdWNjZXNzPE91dHB1dD4gPSB7CiAgICBzdWNjZXNzOiB0cnVlOwogICAgZGF0YTogT3V0cHV0OwogICAgZXJyb3I/OiBuZXZlcjsKfTsKdHlwZSBTYWZlUGFyc2VFcnJvcjxJbnB1dD4gPSB7CiAgICBzdWNjZXNzOiBmYWxzZTsKICAgIGVycm9yOiBab2RFcnJvcjxJbnB1dD47CiAgICBkYXRhPzogbmV2ZXI7Cn07CnR5cGUgU2FmZVBhcnNlUmV0dXJuVHlwZTxJbnB1dCwgT3V0cHV0PiA9IFNhZmVQYXJzZVN1Y2Nlc3M8T3V0cHV0PiB8IFNhZmVQYXJzZUVycm9yPElucHV0PjsKZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBab2RUeXBlPE91dHB1dCA9IGFueSwgRGVmIGV4dGVuZHMgWm9kVHlwZURlZiA9IFpvZFR5cGVEZWYsIElucHV0ID0gT3V0cHV0PiB7CiAgICByZWFkb25seSBfdHlwZTogT3V0cHV0OwogICAgcmVhZG9ubHkgX291dHB1dDogT3V0cHV0OwogICAgcmVhZG9ubHkgX2lucHV0OiBJbnB1dDsKICAgIHJlYWRvbmx5IF9kZWY6IERlZjsKICAgIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAifnN0YW5kYXJkIjogU3RhbmRhcmRTY2hlbWFWMS5Qcm9wczxJbnB1dCwgT3V0cHV0PjsKICAgIGFic3RyYWN0IF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTxPdXRwdXQ+OwogICAgX2dldFR5cGUoaW5wdXQ6IFBhcnNlSW5wdXQpOiBzdHJpbmc7CiAgICBfZ2V0T3JSZXR1cm5DdHgoaW5wdXQ6IFBhcnNlSW5wdXQsIGN0eD86IFBhcnNlQ29udGV4dCB8IHVuZGVmaW5lZCk6IFBhcnNlQ29udGV4dDsKICAgIF9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQ6IFBhcnNlSW5wdXQpOiB7CiAgICAgICAgc3RhdHVzOiBQYXJzZVN0YXR1czsKICAgICAgICBjdHg6IFBhcnNlQ29udGV4dDsKICAgIH07CiAgICBfcGFyc2VTeW5jKGlucHV0OiBQYXJzZUlucHV0KTogU3luY1BhcnNlUmV0dXJuVHlwZTxPdXRwdXQ+OwogICAgX3BhcnNlQXN5bmMoaW5wdXQ6IFBhcnNlSW5wdXQpOiBBc3luY1BhcnNlUmV0dXJuVHlwZTxPdXRwdXQ+OwogICAgcGFyc2UoZGF0YTogdW5rbm93biwgcGFyYW1zPzogUGFydGlhbDxQYXJzZVBhcmFtcz4pOiBPdXRwdXQ7CiAgICBzYWZlUGFyc2UoZGF0YTogdW5rbm93biwgcGFyYW1zPzogUGFydGlhbDxQYXJzZVBhcmFtcz4pOiBTYWZlUGFyc2VSZXR1cm5UeXBlPElucHV0LCBPdXRwdXQ+OwogICAgIn52YWxpZGF0ZSIoZGF0YTogdW5rbm93bik6IFN0YW5kYXJkU2NoZW1hVjEuUmVzdWx0PE91dHB1dD4gfCBQcm9taXNlPFN0YW5kYXJkU2NoZW1hVjEuUmVzdWx0PE91dHB1dD4+OwogICAgcGFyc2VBc3luYyhkYXRhOiB1bmtub3duLCBwYXJhbXM/OiBQYXJ0aWFsPFBhcnNlUGFyYW1zPik6IFByb21pc2U8T3V0cHV0PjsKICAgIHNhZmVQYXJzZUFzeW5jKGRhdGE6IHVua25vd24sIHBhcmFtcz86IFBhcnRpYWw8UGFyc2VQYXJhbXM+KTogUHJvbWlzZTxTYWZlUGFyc2VSZXR1cm5UeXBlPElucHV0LCBPdXRwdXQ+PjsKICAgIC8qKiBBbGlhcyBvZiBzYWZlUGFyc2VBc3luYyAqLwogICAgc3BhOiAoZGF0YTogdW5rbm93biwgcGFyYW1zPzogUGFydGlhbDxQYXJzZVBhcmFtcz4pID0+IFByb21pc2U8U2FmZVBhcnNlUmV0dXJuVHlwZTxJbnB1dCwgT3V0cHV0Pj47CiAgICByZWZpbmU8UmVmaW5lZE91dHB1dCBleHRlbmRzIE91dHB1dD4oY2hlY2s6IChhcmc6IE91dHB1dCkgPT4gYXJnIGlzIFJlZmluZWRPdXRwdXQsIG1lc3NhZ2U/OiBzdHJpbmcgfCBDdXN0b21FcnJvclBhcmFtcyB8ICgoYXJnOiBPdXRwdXQpID0+IEN1c3RvbUVycm9yUGFyYW1zKSk6IFpvZEVmZmVjdHM8dGhpcywgUmVmaW5lZE91dHB1dCwgSW5wdXQ+OwogICAgcmVmaW5lKGNoZWNrOiAoYXJnOiBPdXRwdXQpID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+LCBtZXNzYWdlPzogc3RyaW5nIHwgQ3VzdG9tRXJyb3JQYXJhbXMgfCAoKGFyZzogT3V0cHV0KSA9PiBDdXN0b21FcnJvclBhcmFtcykpOiBab2RFZmZlY3RzPHRoaXMsIE91dHB1dCwgSW5wdXQ+OwogICAgcmVmaW5lbWVudDxSZWZpbmVkT3V0cHV0IGV4dGVuZHMgT3V0cHV0PihjaGVjazogKGFyZzogT3V0cHV0KSA9PiBhcmcgaXMgUmVmaW5lZE91dHB1dCwgcmVmaW5lbWVudERhdGE6IElzc3VlRGF0YSB8ICgoYXJnOiBPdXRwdXQsIGN0eDogUmVmaW5lbWVudEN0eCkgPT4gSXNzdWVEYXRhKSk6IFpvZEVmZmVjdHM8dGhpcywgUmVmaW5lZE91dHB1dCwgSW5wdXQ+OwogICAgcmVmaW5lbWVudChjaGVjazogKGFyZzogT3V0cHV0KSA9PiBib29sZWFuLCByZWZpbmVtZW50RGF0YTogSXNzdWVEYXRhIHwgKChhcmc6IE91dHB1dCwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiBJc3N1ZURhdGEpKTogWm9kRWZmZWN0czx0aGlzLCBPdXRwdXQsIElucHV0PjsKICAgIF9yZWZpbmVtZW50KHJlZmluZW1lbnQ6IFJlZmluZW1lbnRFZmZlY3Q8T3V0cHV0PlsicmVmaW5lbWVudCJdKTogWm9kRWZmZWN0czx0aGlzLCBPdXRwdXQsIElucHV0PjsKICAgIHN1cGVyUmVmaW5lPFJlZmluZWRPdXRwdXQgZXh0ZW5kcyBPdXRwdXQ+KHJlZmluZW1lbnQ6IChhcmc6IE91dHB1dCwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiBhcmcgaXMgUmVmaW5lZE91dHB1dCk6IFpvZEVmZmVjdHM8dGhpcywgUmVmaW5lZE91dHB1dCwgSW5wdXQ+OwogICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudDogKGFyZzogT3V0cHV0LCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IHZvaWQpOiBab2RFZmZlY3RzPHRoaXMsIE91dHB1dCwgSW5wdXQ+OwogICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudDogKGFyZzogT3V0cHV0LCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IFByb21pc2U8dm9pZD4pOiBab2RFZmZlY3RzPHRoaXMsIE91dHB1dCwgSW5wdXQ+OwogICAgY29uc3RydWN0b3IoZGVmOiBEZWYpOwogICAgb3B0aW9uYWwoKTogWm9kT3B0aW9uYWw8dGhpcz47CiAgICBudWxsYWJsZSgpOiBab2ROdWxsYWJsZTx0aGlzPjsKICAgIG51bGxpc2goKTogWm9kT3B0aW9uYWw8Wm9kTnVsbGFibGU8dGhpcz4+OwogICAgYXJyYXkoKTogWm9kQXJyYXk8dGhpcz47CiAgICBwcm9taXNlKCk6IFpvZFByb21pc2U8dGhpcz47CiAgICBvcjxUIGV4dGVuZHMgWm9kVHlwZUFueT4ob3B0aW9uOiBUKTogWm9kVW5pb248W3RoaXMsIFRdPjsKICAgIGFuZDxUIGV4dGVuZHMgWm9kVHlwZUFueT4oaW5jb21pbmc6IFQpOiBab2RJbnRlcnNlY3Rpb248dGhpcywgVD47CiAgICB0cmFuc2Zvcm08TmV3T3V0Pih0cmFuc2Zvcm06IChhcmc6IE91dHB1dCwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiBOZXdPdXQgfCBQcm9taXNlPE5ld091dD4pOiBab2RFZmZlY3RzPHRoaXMsIE5ld091dD47CiAgICBkZWZhdWx0KGRlZjogdXRpbC5ub1VuZGVmaW5lZDxJbnB1dD4pOiBab2REZWZhdWx0PHRoaXM+OwogICAgZGVmYXVsdChkZWY6ICgpID0+IHV0aWwubm9VbmRlZmluZWQ8SW5wdXQ+KTogWm9kRGVmYXVsdDx0aGlzPjsKICAgIGJyYW5kPEIgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w+KGJyYW5kPzogQik6IFpvZEJyYW5kZWQ8dGhpcywgQj47CiAgICBjYXRjaChkZWY6IE91dHB1dCk6IFpvZENhdGNoPHRoaXM+OwogICAgY2F0Y2goZGVmOiAoY3R4OiB7CiAgICAgICAgZXJyb3I6IFpvZEVycm9yOwogICAgICAgIGlucHV0OiBJbnB1dDsKICAgIH0pID0+IE91dHB1dCk6IFpvZENhdGNoPHRoaXM+OwogICAgZGVzY3JpYmUoZGVzY3JpcHRpb246IHN0cmluZyk6IHRoaXM7CiAgICBwaXBlPFQgZXh0ZW5kcyBab2RUeXBlQW55Pih0YXJnZXQ6IFQpOiBab2RQaXBlbGluZTx0aGlzLCBUPjsKICAgIHJlYWRvbmx5KCk6IFpvZFJlYWRvbmx5PHRoaXM+OwogICAgaXNPcHRpb25hbCgpOiBib29sZWFuOwogICAgaXNOdWxsYWJsZSgpOiBib29sZWFuOwp9CnR5cGUgSXBWZXJzaW9uID0gInY0IiB8ICJ2NiI7CnR5cGUgWm9kU3RyaW5nQ2hlY2sgPSB7CiAgICBraW5kOiAibWluIjsKICAgIHZhbHVlOiBudW1iZXI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogIm1heCI7CiAgICB2YWx1ZTogbnVtYmVyOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJsZW5ndGgiOwogICAgdmFsdWU6IG51bWJlcjsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiZW1haWwiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJ1cmwiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJlbW9qaSI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInV1aWQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJuYW5vaWQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJjdWlkIjsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiaW5jbHVkZXMiOwogICAgdmFsdWU6IHN0cmluZzsKICAgIHBvc2l0aW9uPzogbnVtYmVyOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJjdWlkMiI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInVsaWQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJzdGFydHNXaXRoIjsKICAgIHZhbHVlOiBzdHJpbmc7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImVuZHNXaXRoIjsKICAgIHZhbHVlOiBzdHJpbmc7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInJlZ2V4IjsKICAgIHJlZ2V4OiBSZWdFeHA7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInRyaW0iOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJ0b0xvd2VyQ2FzZSI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInRvVXBwZXJDYXNlIjsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiand0IjsKICAgIGFsZz86IHN0cmluZzsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiZGF0ZXRpbWUiOwogICAgb2Zmc2V0OiBib29sZWFuOwogICAgbG9jYWw6IGJvb2xlYW47CiAgICBwcmVjaXNpb246IG51bWJlciB8IG51bGw7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImRhdGUiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJ0aW1lIjsKICAgIHByZWNpc2lvbjogbnVtYmVyIHwgbnVsbDsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiZHVyYXRpb24iOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJpcCI7CiAgICB2ZXJzaW9uPzogSXBWZXJzaW9uOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJjaWRyIjsKICAgIHZlcnNpb24/OiBJcFZlcnNpb247CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImJhc2U2NCI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImJhc2U2NHVybCI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9OwppbnRlcmZhY2UgWm9kU3RyaW5nRGVmIGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICBjaGVja3M6IFpvZFN0cmluZ0NoZWNrW107CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFN0cmluZzsKICAgIGNvZXJjZTogYm9vbGVhbjsKfQpkZWNsYXJlIGNsYXNzIFpvZFN0cmluZyBleHRlbmRzIFpvZFR5cGU8c3RyaW5nLCBab2RTdHJpbmdEZWYsIHN0cmluZz4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHN0cmluZz47CiAgICBwcm90ZWN0ZWQgX3JlZ2V4KHJlZ2V4OiBSZWdFeHAsIHZhbGlkYXRpb246IFN0cmluZ1ZhbGlkYXRpb24sIG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZEVmZmVjdHM8dGhpcywgc3RyaW5nLCBzdHJpbmc+OwogICAgX2FkZENoZWNrKGNoZWNrOiBab2RTdHJpbmdDaGVjayk6IFpvZFN0cmluZzsKICAgIGVtYWlsKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIHVybChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBlbW9qaShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICB1dWlkKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIG5hbm9pZChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBjdWlkKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIGN1aWQyKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIHVsaWQobWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgYmFzZTY0KG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIGJhc2U2NHVybChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBqd3Qob3B0aW9ucz86IHsKICAgICAgICBhbGc/OiBzdHJpbmc7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH0pOiBab2RTdHJpbmc7CiAgICBpcChvcHRpb25zPzogc3RyaW5nIHwgewogICAgICAgIHZlcnNpb24/OiBJcFZlcnNpb247CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH0pOiBab2RTdHJpbmc7CiAgICBjaWRyKG9wdGlvbnM/OiBzdHJpbmcgfCB7CiAgICAgICAgdmVyc2lvbj86IElwVmVyc2lvbjsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAgfSk6IFpvZFN0cmluZzsKICAgIGRhdGV0aW1lKG9wdGlvbnM/OiBzdHJpbmcgfCB7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVjaXNpb24/OiBudW1iZXIgfCBudWxsOwogICAgICAgIG9mZnNldD86IGJvb2xlYW47CiAgICAgICAgbG9jYWw/OiBib29sZWFuOwogICAgfSk6IFpvZFN0cmluZzsKICAgIGRhdGUobWVzc2FnZT86IHN0cmluZyk6IFpvZFN0cmluZzsKICAgIHRpbWUob3B0aW9ucz86IHN0cmluZyB8IHsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHByZWNpc2lvbj86IG51bWJlciB8IG51bGw7CiAgICB9KTogWm9kU3RyaW5nOwogICAgZHVyYXRpb24obWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgcmVnZXgocmVnZXg6IFJlZ0V4cCwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgaW5jbHVkZXModmFsdWU6IHN0cmluZywgb3B0aW9ucz86IHsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAgICAgIHBvc2l0aW9uPzogbnVtYmVyOwogICAgfSk6IFpvZFN0cmluZzsKICAgIHN0YXJ0c1dpdGgodmFsdWU6IHN0cmluZywgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgZW5kc1dpdGgodmFsdWU6IHN0cmluZywgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgbWluKG1pbkxlbmd0aDogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBtYXgobWF4TGVuZ3RoOiBudW1iZXIsIG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIGxlbmd0aChsZW46IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgLyoqCiAgICAgKiBFcXVpdmFsZW50IHRvIGAubWluKDEpYAogICAgICovCiAgICBub25lbXB0eShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICB0cmltKCk6IFpvZFN0cmluZzsKICAgIHRvTG93ZXJDYXNlKCk6IFpvZFN0cmluZzsKICAgIHRvVXBwZXJDYXNlKCk6IFpvZFN0cmluZzsKICAgIGdldCBpc0RhdGV0aW1lKCk6IGJvb2xlYW47CiAgICBnZXQgaXNEYXRlKCk6IGJvb2xlYW47CiAgICBnZXQgaXNUaW1lKCk6IGJvb2xlYW47CiAgICBnZXQgaXNEdXJhdGlvbigpOiBib29sZWFuOwogICAgZ2V0IGlzRW1haWwoKTogYm9vbGVhbjsKICAgIGdldCBpc1VSTCgpOiBib29sZWFuOwogICAgZ2V0IGlzRW1vamkoKTogYm9vbGVhbjsKICAgIGdldCBpc1VVSUQoKTogYm9vbGVhbjsKICAgIGdldCBpc05BTk9JRCgpOiBib29sZWFuOwogICAgZ2V0IGlzQ1VJRCgpOiBib29sZWFuOwogICAgZ2V0IGlzQ1VJRDIoKTogYm9vbGVhbjsKICAgIGdldCBpc1VMSUQoKTogYm9vbGVhbjsKICAgIGdldCBpc0lQKCk6IGJvb2xlYW47CiAgICBnZXQgaXNDSURSKCk6IGJvb2xlYW47CiAgICBnZXQgaXNCYXNlNjQoKTogYm9vbGVhbjsKICAgIGdldCBpc0Jhc2U2NHVybCgpOiBib29sZWFuOwogICAgZ2V0IG1pbkxlbmd0aCgpOiBudW1iZXIgfCBudWxsOwogICAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIgfCBudWxsOwogICAgc3RhdGljIGNyZWF0ZTogKHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcyAmIHsKICAgICAgICBjb2VyY2U/OiB0cnVlOwogICAgfSkgPT4gWm9kU3RyaW5nOwp9CnR5cGUgWm9kTnVtYmVyQ2hlY2sgPSB7CiAgICBraW5kOiAibWluIjsKICAgIHZhbHVlOiBudW1iZXI7CiAgICBpbmNsdXNpdmU6IGJvb2xlYW47CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogIm1heCI7CiAgICB2YWx1ZTogbnVtYmVyOwogICAgaW5jbHVzaXZlOiBib29sZWFuOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJpbnQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJtdWx0aXBsZU9mIjsKICAgIHZhbHVlOiBudW1iZXI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImZpbml0ZSI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9OwppbnRlcmZhY2UgWm9kTnVtYmVyRGVmIGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICBjaGVja3M6IFpvZE51bWJlckNoZWNrW107CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE51bWJlcjsKICAgIGNvZXJjZTogYm9vbGVhbjsKfQpkZWNsYXJlIGNsYXNzIFpvZE51bWJlciBleHRlbmRzIFpvZFR5cGU8bnVtYmVyLCBab2ROdW1iZXJEZWYsIG51bWJlcj4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPG51bWJlcj47CiAgICBzdGF0aWMgY3JlYXRlOiAocGFyYW1zPzogUmF3Q3JlYXRlUGFyYW1zICYgewogICAgICAgIGNvZXJjZT86IGJvb2xlYW47CiAgICB9KSA9PiBab2ROdW1iZXI7CiAgICBndGUodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kTnVtYmVyOwogICAgbWluOiAodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKSA9PiBab2ROdW1iZXI7CiAgICBndCh2YWx1ZTogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBsdGUodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kTnVtYmVyOwogICAgbWF4OiAodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKSA9PiBab2ROdW1iZXI7CiAgICBsdCh2YWx1ZTogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBwcm90ZWN0ZWQgc2V0TGltaXQoa2luZDogIm1pbiIgfCAibWF4IiwgdmFsdWU6IG51bWJlciwgaW5jbHVzaXZlOiBib29sZWFuLCBtZXNzYWdlPzogc3RyaW5nKTogWm9kTnVtYmVyOwogICAgX2FkZENoZWNrKGNoZWNrOiBab2ROdW1iZXJDaGVjayk6IFpvZE51bWJlcjsKICAgIGludChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBwb3NpdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBuZWdhdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBub25wb3NpdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBub25uZWdhdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBtdWx0aXBsZU9mKHZhbHVlOiBudW1iZXIsIG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZE51bWJlcjsKICAgIHN0ZXA6ICh2YWx1ZTogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpID0+IFpvZE51bWJlcjsKICAgIGZpbml0ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBzYWZlKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZE51bWJlcjsKICAgIGdldCBtaW5WYWx1ZSgpOiBudW1iZXIgfCBudWxsOwogICAgZ2V0IG1heFZhbHVlKCk6IG51bWJlciB8IG51bGw7CiAgICBnZXQgaXNJbnQoKTogYm9vbGVhbjsKICAgIGdldCBpc0Zpbml0ZSgpOiBib29sZWFuOwp9CmludGVyZmFjZSBab2RVbmtub3duRGVmIGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVua25vd247Cn0KZGVjbGFyZSBjbGFzcyBab2RVbmtub3duIGV4dGVuZHMgWm9kVHlwZTx1bmtub3duLCBab2RVbmtub3duRGVmLCB1bmtub3duPiB7CiAgICBfdW5rbm93bjogdHJ1ZTsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgc3RhdGljIGNyZWF0ZTogKHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kVW5rbm93bjsKfQppbnRlcmZhY2UgWm9kQXJyYXlEZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgdHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQXJyYXk7CiAgICBleGFjdExlbmd0aDogewogICAgICAgIHZhbHVlOiBudW1iZXI7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH0gfCBudWxsOwogICAgbWluTGVuZ3RoOiB7CiAgICAgICAgdmFsdWU6IG51bWJlcjsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAgfSB8IG51bGw7CiAgICBtYXhMZW5ndGg6IHsKICAgICAgICB2YWx1ZTogbnVtYmVyOwogICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7CiAgICB9IHwgbnVsbDsKfQp0eXBlIEFycmF5Q2FyZGluYWxpdHkgPSAibWFueSIgfCAiYXRsZWFzdG9uZSI7CnR5cGUgYXJyYXlPdXRwdXRUeXBlPFQgZXh0ZW5kcyBab2RUeXBlQW55LCBDYXJkaW5hbGl0eSBleHRlbmRzIEFycmF5Q2FyZGluYWxpdHkgPSAibWFueSI+ID0gQ2FyZGluYWxpdHkgZXh0ZW5kcyAiYXRsZWFzdG9uZSIgPyBbVFsiX291dHB1dCJdLCAuLi5UWyJfb3V0cHV0Il1bXV0gOiBUWyJfb3V0cHV0Il1bXTsKZGVjbGFyZSBjbGFzcyBab2RBcnJheTxUIGV4dGVuZHMgWm9kVHlwZUFueSwgQ2FyZGluYWxpdHkgZXh0ZW5kcyBBcnJheUNhcmRpbmFsaXR5ID0gIm1hbnkiPiBleHRlbmRzIFpvZFR5cGU8YXJyYXlPdXRwdXRUeXBlPFQsIENhcmRpbmFsaXR5PiwgWm9kQXJyYXlEZWY8VD4sIENhcmRpbmFsaXR5IGV4dGVuZHMgImF0bGVhc3RvbmUiID8gW1RbIl9pbnB1dCJdLCAuLi5UWyJfaW5wdXQiXVtdXSA6IFRbIl9pbnB1dCJdW10+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgZ2V0IGVsZW1lbnQoKTogVDsKICAgIG1pbihtaW5MZW5ndGg6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogdGhpczsKICAgIG1heChtYXhMZW5ndGg6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogdGhpczsKICAgIGxlbmd0aChsZW46IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogdGhpczsKICAgIG5vbmVtcHR5KG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZEFycmF5PFQsICJhdGxlYXN0b25lIj47CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4oc2NoZW1hOiBUXzEsIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kQXJyYXk8VF8xLCAibWFueSI+Owp9CnR5cGUgVW5rbm93bktleXNQYXJhbSA9ICJwYXNzdGhyb3VnaCIgfCAic3RyaWN0IiB8ICJzdHJpcCI7CnR5cGUgb2JqZWN0T3V0cHV0VHlwZTxTaGFwZSBleHRlbmRzIFpvZFJhd1NoYXBlLCBDYXRjaGFsbCBleHRlbmRzIFpvZFR5cGVBbnksIFVua25vd25LZXlzIGV4dGVuZHMgVW5rbm93bktleXNQYXJhbSA9IFVua25vd25LZXlzUGFyYW0+ID0gb2JqZWN0VXRpbC5mbGF0dGVuPG9iamVjdFV0aWwuYWRkUXVlc3Rpb25NYXJrczxiYXNlT2JqZWN0T3V0cHV0VHlwZTxTaGFwZT4+PiAmIENhdGNoYWxsT3V0cHV0PENhdGNoYWxsPiAmIFBhc3N0aHJvdWdoVHlwZTxVbmtub3duS2V5cz47CnR5cGUgYmFzZU9iamVjdE91dHB1dFR5cGU8U2hhcGUgZXh0ZW5kcyBab2RSYXdTaGFwZT4gPSB7CiAgICBbayBpbiBrZXlvZiBTaGFwZV06IFNoYXBlW2tdWyJfb3V0cHV0Il07Cn07CnR5cGUgb2JqZWN0SW5wdXRUeXBlPFNoYXBlIGV4dGVuZHMgWm9kUmF3U2hhcGUsIENhdGNoYWxsIGV4dGVuZHMgWm9kVHlwZUFueSwgVW5rbm93bktleXMgZXh0ZW5kcyBVbmtub3duS2V5c1BhcmFtID0gVW5rbm93bktleXNQYXJhbT4gPSBvYmplY3RVdGlsLmZsYXR0ZW48YmFzZU9iamVjdElucHV0VHlwZTxTaGFwZT4+ICYgQ2F0Y2hhbGxJbnB1dDxDYXRjaGFsbD4gJiBQYXNzdGhyb3VnaFR5cGU8VW5rbm93bktleXM+Owp0eXBlIGJhc2VPYmplY3RJbnB1dFR5cGU8U2hhcGUgZXh0ZW5kcyBab2RSYXdTaGFwZT4gPSBvYmplY3RVdGlsLmFkZFF1ZXN0aW9uTWFya3M8ewogICAgW2sgaW4ga2V5b2YgU2hhcGVdOiBTaGFwZVtrXVsiX2lucHV0Il07Cn0+Owp0eXBlIENhdGNoYWxsT3V0cHV0PFQgZXh0ZW5kcyBab2RUeXBlPiA9IFpvZFR5cGUgZXh0ZW5kcyBUID8gdW5rbm93biA6IHsKICAgIFtrOiBzdHJpbmddOiBUWyJfb3V0cHV0Il07Cn07CnR5cGUgQ2F0Y2hhbGxJbnB1dDxUIGV4dGVuZHMgWm9kVHlwZT4gPSBab2RUeXBlIGV4dGVuZHMgVCA/IHVua25vd24gOiB7CiAgICBbazogc3RyaW5nXTogVFsiX2lucHV0Il07Cn07CnR5cGUgUGFzc3Rocm91Z2hUeXBlPFQgZXh0ZW5kcyBVbmtub3duS2V5c1BhcmFtPiA9IFQgZXh0ZW5kcyAicGFzc3Rocm91Z2giID8gewogICAgW2s6IHN0cmluZ106IHVua25vd247Cn0gOiB1bmtub3duOwp0eXBlIFpvZFVuaW9uT3B0aW9ucyA9IFJlYWRvbmx5PFtab2RUeXBlQW55LCAuLi5ab2RUeXBlQW55W11dPjsKaW50ZXJmYWNlIFpvZFVuaW9uRGVmPFQgZXh0ZW5kcyBab2RVbmlvbk9wdGlvbnMgPSBSZWFkb25seTxbCiAgICBab2RUeXBlQW55LAogICAgWm9kVHlwZUFueSwKICAgIC4uLlpvZFR5cGVBbnlbXQpdPj4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIG9wdGlvbnM6IFQ7CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVuaW9uOwp9CmRlY2xhcmUgY2xhc3MgWm9kVW5pb248VCBleHRlbmRzIFpvZFVuaW9uT3B0aW9ucz4gZXh0ZW5kcyBab2RUeXBlPFRbbnVtYmVyXVsiX291dHB1dCJdLCBab2RVbmlvbkRlZjxUPiwgVFtudW1iZXJdWyJfaW5wdXQiXT4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBnZXQgb3B0aW9ucygpOiBUOwogICAgc3RhdGljIGNyZWF0ZTogPFRfMSBleHRlbmRzIHJlYWRvbmx5IFtab2RUeXBlQW55LCBab2RUeXBlQW55LCAuLi5ab2RUeXBlQW55W11dPih0eXBlczogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZFVuaW9uPFRfMT47Cn0KaW50ZXJmYWNlIFpvZEludGVyc2VjdGlvbkRlZjxUIGV4dGVuZHMgWm9kVHlwZUFueSA9IFpvZFR5cGVBbnksIFUgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGxlZnQ6IFQ7CiAgICByaWdodDogVTsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kSW50ZXJzZWN0aW9uOwp9CmRlY2xhcmUgY2xhc3MgWm9kSW50ZXJzZWN0aW9uPFQgZXh0ZW5kcyBab2RUeXBlQW55LCBVIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFRbIl9vdXRwdXQiXSAmIFVbIl9vdXRwdXQiXSwgWm9kSW50ZXJzZWN0aW9uRGVmPFQsIFU+LCBUWyJfaW5wdXQiXSAmIFVbIl9pbnB1dCJdPiB7CiAgICBfcGFyc2UoaW5wdXQ6IFBhcnNlSW5wdXQpOiBQYXJzZVJldHVyblR5cGU8dGhpc1siX291dHB1dCJdPjsKICAgIHN0YXRpYyBjcmVhdGU6IDxUXzEgZXh0ZW5kcyBab2RUeXBlQW55LCBVXzEgZXh0ZW5kcyBab2RUeXBlQW55PihsZWZ0OiBUXzEsIHJpZ2h0OiBVXzEsIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kSW50ZXJzZWN0aW9uPFRfMSwgVV8xPjsKfQppbnRlcmZhY2UgWm9kUHJvbWlzZURlZjxUIGV4dGVuZHMgWm9kVHlwZUFueSA9IFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICB0eXBlOiBUOwogICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RQcm9taXNlOwp9CmRlY2xhcmUgY2xhc3MgWm9kUHJvbWlzZTxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFByb21pc2U8VFsiX291dHB1dCJdPiwgWm9kUHJvbWlzZURlZjxUPiwgUHJvbWlzZTxUWyJfaW5wdXQiXT4+IHsKICAgIHVud3JhcCgpOiBUOwogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4oc2NoZW1hOiBUXzEsIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kUHJvbWlzZTxUXzE+Owp9CnR5cGUgUmVmaW5lbWVudEVmZmVjdDxUPiA9IHsKICAgIHR5cGU6ICJyZWZpbmVtZW50IjsKICAgIHJlZmluZW1lbnQ6IChhcmc6IFQsIGN0eDogUmVmaW5lbWVudEN0eCkgPT4gYW55Owp9Owp0eXBlIFRyYW5zZm9ybUVmZmVjdDxUPiA9IHsKICAgIHR5cGU6ICJ0cmFuc2Zvcm0iOwogICAgdHJhbnNmb3JtOiAoYXJnOiBULCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IGFueTsKfTsKdHlwZSBQcmVwcm9jZXNzRWZmZWN0PFQ+ID0gewogICAgdHlwZTogInByZXByb2Nlc3MiOwogICAgdHJhbnNmb3JtOiAoYXJnOiBULCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IGFueTsKfTsKdHlwZSBFZmZlY3Q8VD4gPSBSZWZpbmVtZW50RWZmZWN0PFQ+IHwgVHJhbnNmb3JtRWZmZWN0PFQ+IHwgUHJlcHJvY2Vzc0VmZmVjdDxUPjsKaW50ZXJmYWNlIFpvZEVmZmVjdHNEZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgc2NoZW1hOiBUOwogICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzOwogICAgZWZmZWN0OiBFZmZlY3Q8YW55PjsKfQpkZWNsYXJlIGNsYXNzIFpvZEVmZmVjdHM8VCBleHRlbmRzIFpvZFR5cGVBbnksIE91dHB1dCA9IG91dHB1dDxUPiwgSW5wdXQgPSBpbnB1dDxUPj4gZXh0ZW5kcyBab2RUeXBlPE91dHB1dCwgWm9kRWZmZWN0c0RlZjxUPiwgSW5wdXQ+IHsKICAgIGlubmVyVHlwZSgpOiBUOwogICAgc291cmNlVHlwZSgpOiBUOwogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlOiA8SSBleHRlbmRzIFpvZFR5cGVBbnk+KHNjaGVtYTogSSwgZWZmZWN0OiBFZmZlY3Q8SVsiX291dHB1dCJdPiwgcGFyYW1zPzogUmF3Q3JlYXRlUGFyYW1zKSA9PiBab2RFZmZlY3RzPEksIElbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlV2l0aFByZXByb2Nlc3M6IDxJIGV4dGVuZHMgWm9kVHlwZUFueT4ocHJlcHJvY2VzczogKGFyZzogdW5rbm93biwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiB1bmtub3duLCBzY2hlbWE6IEksIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kRWZmZWN0czxJLCBJWyJfb3V0cHV0Il0sIHVua25vd24+Owp9CgppbnRlcmZhY2UgWm9kT3B0aW9uYWxEZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgaW5uZXJUeXBlOiBUOwogICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPcHRpb25hbDsKfQpkZWNsYXJlIGNsYXNzIFpvZE9wdGlvbmFsPFQgZXh0ZW5kcyBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGU8VFsiX291dHB1dCJdIHwgdW5kZWZpbmVkLCBab2RPcHRpb25hbERlZjxUPiwgVFsiX2lucHV0Il0gfCB1bmRlZmluZWQ+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgdW53cmFwKCk6IFQ7CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4odHlwZTogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZE9wdGlvbmFsPFRfMT47Cn0KaW50ZXJmYWNlIFpvZE51bGxhYmxlRGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGlubmVyVHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVsbGFibGU7Cn0KZGVjbGFyZSBjbGFzcyBab2ROdWxsYWJsZTxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFRbIl9vdXRwdXQiXSB8IG51bGwsIFpvZE51bGxhYmxlRGVmPFQ+LCBUWyJfaW5wdXQiXSB8IG51bGw+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgdW53cmFwKCk6IFQ7CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4odHlwZTogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZE51bGxhYmxlPFRfMT47Cn0KaW50ZXJmYWNlIFpvZERlZmF1bHREZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgaW5uZXJUeXBlOiBUOwogICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1dGlsLm5vVW5kZWZpbmVkPFRbIl9pbnB1dCJdPjsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdDsKfQpkZWNsYXJlIGNsYXNzIFpvZERlZmF1bHQ8VCBleHRlbmRzIFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZTx1dGlsLm5vVW5kZWZpbmVkPFRbIl9vdXRwdXQiXT4sIFpvZERlZmF1bHREZWY8VD4sIFRbIl9pbnB1dCJdIHwgdW5kZWZpbmVkPiB7CiAgICBfcGFyc2UoaW5wdXQ6IFBhcnNlSW5wdXQpOiBQYXJzZVJldHVyblR5cGU8dGhpc1siX291dHB1dCJdPjsKICAgIHJlbW92ZURlZmF1bHQoKTogVDsKICAgIHN0YXRpYyBjcmVhdGU6IDxUXzEgZXh0ZW5kcyBab2RUeXBlQW55Pih0eXBlOiBUXzEsIHBhcmFtczogewogICAgICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXAgfCB1bmRlZmluZWQ7CiAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlcXVpcmVkX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGRlZmF1bHQ6IFRfMVsiX2lucHV0Il0gfCAoKCkgPT4gdXRpbC5ub1VuZGVmaW5lZDxUXzFbIl9pbnB1dCJdPik7CiAgICB9KSA9PiBab2REZWZhdWx0PFRfMT47Cn0KaW50ZXJmYWNlIFpvZENhdGNoRGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGlubmVyVHlwZTogVDsKICAgIGNhdGNoVmFsdWU6IChjdHg6IHsKICAgICAgICBlcnJvcjogWm9kRXJyb3I7CiAgICAgICAgaW5wdXQ6IHVua25vd247CiAgICB9KSA9PiBUWyJfaW5wdXQiXTsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQ2F0Y2g7Cn0KZGVjbGFyZSBjbGFzcyBab2RDYXRjaDxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFRbIl9vdXRwdXQiXSwgWm9kQ2F0Y2hEZWY8VD4sIHVua25vd24+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgcmVtb3ZlQ2F0Y2goKTogVDsKICAgIHN0YXRpYyBjcmVhdGU6IDxUXzEgZXh0ZW5kcyBab2RUeXBlQW55Pih0eXBlOiBUXzEsIHBhcmFtczogewogICAgICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXAgfCB1bmRlZmluZWQ7CiAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlcXVpcmVkX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNhdGNoOiBUXzFbIl9vdXRwdXQiXSB8ICgoKSA9PiBUXzFbIl9vdXRwdXQiXSk7CiAgICB9KSA9PiBab2RDYXRjaDxUXzE+Owp9CmludGVyZmFjZSBab2RCcmFuZGVkRGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgdHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQnJhbmRlZDsKfQpkZWNsYXJlIGNvbnN0IEJSQU5EOiB1bmlxdWUgc3ltYm9sOwp0eXBlIEJSQU5EPFQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w+ID0gewogICAgW0JSQU5EXTogewogICAgICAgIFtrIGluIFRdOiB0cnVlOwogICAgfTsKfTsKZGVjbGFyZSBjbGFzcyBab2RCcmFuZGVkPFQgZXh0ZW5kcyBab2RUeXBlQW55LCBCIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sPiBleHRlbmRzIFpvZFR5cGU8VFsiX291dHB1dCJdICYgQlJBTkQ8Qj4sIFpvZEJyYW5kZWREZWY8VD4sIFRbIl9pbnB1dCJdPiB7CiAgICBfcGFyc2UoaW5wdXQ6IFBhcnNlSW5wdXQpOiBQYXJzZVJldHVyblR5cGU8YW55PjsKICAgIHVud3JhcCgpOiBUOwp9CmludGVyZmFjZSBab2RQaXBlbGluZURlZjxBIGV4dGVuZHMgWm9kVHlwZUFueSwgQiBleHRlbmRzIFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICBpbjogQTsKICAgIG91dDogQjsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUGlwZWxpbmU7Cn0KZGVjbGFyZSBjbGFzcyBab2RQaXBlbGluZTxBIGV4dGVuZHMgWm9kVHlwZUFueSwgQiBleHRlbmRzIFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZTxCWyJfb3V0cHV0Il0sIFpvZFBpcGVsaW5lRGVmPEEsIEI+LCBBWyJfaW5wdXQiXT4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPGFueT47CiAgICBzdGF0aWMgY3JlYXRlPEEgZXh0ZW5kcyBab2RUeXBlQW55LCBCIGV4dGVuZHMgWm9kVHlwZUFueT4oYTogQSwgYjogQik6IFpvZFBpcGVsaW5lPEEsIEI+Owp9CnR5cGUgQnVpbHRJbiA9ICgoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHwgKG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueSkpIHwgewogICAgcmVhZG9ubHkgW1N5bWJvbC50b1N0cmluZ1RhZ106IHN0cmluZzsKfSB8IERhdGUgfCBFcnJvciB8IEdlbmVyYXRvciB8IFByb21pc2U8dW5rbm93bj4gfCBSZWdFeHA7CnR5cGUgTWFrZVJlYWRvbmx5PFQ+ID0gVCBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPiA/IFJlYWRvbmx5TWFwPEssIFY+IDogVCBleHRlbmRzIFNldDxpbmZlciBWPiA/IFJlYWRvbmx5U2V0PFY+IDogVCBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXSA/IHJlYWRvbmx5IFtIZWFkLCAuLi5UYWlsXSA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBWPiA/IFJlYWRvbmx5QXJyYXk8Vj4gOiBUIGV4dGVuZHMgQnVpbHRJbiA/IFQgOiBSZWFkb25seTxUPjsKaW50ZXJmYWNlIFpvZFJlYWRvbmx5RGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGlubmVyVHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVhZG9ubHk7Cn0KZGVjbGFyZSBjbGFzcyBab2RSZWFkb25seTxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPE1ha2VSZWFkb25seTxUWyJfb3V0cHV0Il0+LCBab2RSZWFkb25seURlZjxUPiwgTWFrZVJlYWRvbmx5PFRbIl9pbnB1dCJdPj4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4odHlwZTogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZFJlYWRvbmx5PFRfMT47CiAgICB1bndyYXAoKTogVDsKfQpkZWNsYXJlIGVudW0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kIHsKICAgIFpvZFN0cmluZyA9ICJab2RTdHJpbmciLAogICAgWm9kTnVtYmVyID0gIlpvZE51bWJlciIsCiAgICBab2ROYU4gPSAiWm9kTmFOIiwKICAgIFpvZEJpZ0ludCA9ICJab2RCaWdJbnQiLAogICAgWm9kQm9vbGVhbiA9ICJab2RCb29sZWFuIiwKICAgIFpvZERhdGUgPSAiWm9kRGF0ZSIsCiAgICBab2RTeW1ib2wgPSAiWm9kU3ltYm9sIiwKICAgIFpvZFVuZGVmaW5lZCA9ICJab2RVbmRlZmluZWQiLAogICAgWm9kTnVsbCA9ICJab2ROdWxsIiwKICAgIFpvZEFueSA9ICJab2RBbnkiLAogICAgWm9kVW5rbm93biA9ICJab2RVbmtub3duIiwKICAgIFpvZE5ldmVyID0gIlpvZE5ldmVyIiwKICAgIFpvZFZvaWQgPSAiWm9kVm9pZCIsCiAgICBab2RBcnJheSA9ICJab2RBcnJheSIsCiAgICBab2RPYmplY3QgPSAiWm9kT2JqZWN0IiwKICAgIFpvZFVuaW9uID0gIlpvZFVuaW9uIiwKICAgIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiA9ICJab2REaXNjcmltaW5hdGVkVW5pb24iLAogICAgWm9kSW50ZXJzZWN0aW9uID0gIlpvZEludGVyc2VjdGlvbiIsCiAgICBab2RUdXBsZSA9ICJab2RUdXBsZSIsCiAgICBab2RSZWNvcmQgPSAiWm9kUmVjb3JkIiwKICAgIFpvZE1hcCA9ICJab2RNYXAiLAogICAgWm9kU2V0ID0gIlpvZFNldCIsCiAgICBab2RGdW5jdGlvbiA9ICJab2RGdW5jdGlvbiIsCiAgICBab2RMYXp5ID0gIlpvZExhenkiLAogICAgWm9kTGl0ZXJhbCA9ICJab2RMaXRlcmFsIiwKICAgIFpvZEVudW0gPSAiWm9kRW51bSIsCiAgICBab2RFZmZlY3RzID0gIlpvZEVmZmVjdHMiLAogICAgWm9kTmF0aXZlRW51bSA9ICJab2ROYXRpdmVFbnVtIiwKICAgIFpvZE9wdGlvbmFsID0gIlpvZE9wdGlvbmFsIiwKICAgIFpvZE51bGxhYmxlID0gIlpvZE51bGxhYmxlIiwKICAgIFpvZERlZmF1bHQgPSAiWm9kRGVmYXVsdCIsCiAgICBab2RDYXRjaCA9ICJab2RDYXRjaCIsCiAgICBab2RQcm9taXNlID0gIlpvZFByb21pc2UiLAogICAgWm9kQnJhbmRlZCA9ICJab2RCcmFuZGVkIiwKICAgIFpvZFBpcGVsaW5lID0gIlpvZFBpcGVsaW5lIiwKICAgIFpvZFJlYWRvbmx5ID0gIlpvZFJlYWRvbmx5Igp9Cgp0eXBlIExvZ1ZhbHVlT2JqZWN0ID0gewogICAgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCBMb2dWYWx1ZU9iamVjdCB8IExvZ1ZhbHVlT2JqZWN0W107Cn07CgppbnRlcmZhY2UgR2l0SHViV29ya2Zsb3dSZXN1bHQgewogICAgam9iX2lkOiBzdHJpbmc7CiAgICBzdGF0dXM6ICdwZW5kaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAndGltZW91dCc7CiAgICByZXN1bHQ/OiB7CiAgICAgICAgb3V0cHV0PzogYW55OwogICAgICAgIHdvcmtmbG93X3J1bl9pZD86IG51bWJlcjsKICAgICAgICB3b3JrZmxvd19jb25jbHVzaW9uPzogc3RyaW5nOwogICAgICAgIGV4ZWN1dGlvbl90aW1lPzogbnVtYmVyOwogICAgfTsKICAgIGFydGlmYWN0cz86IEFycmF5PHsKICAgICAgICBpZDogbnVtYmVyOwogICAgICAgIG5hbWU6IHN0cmluZzsKICAgICAgICBzaXplX2J5dGVzOiBudW1iZXI7CiAgICAgICAgY29udGVudD86IGFueTsKICAgICAgICBjb250ZW50X3R5cGU/OiBzdHJpbmc7CiAgICB9PjsKICAgIHN0YXJ0ZWRfYXQ/OiBzdHJpbmc7CiAgICBjb21wbGV0ZWRfYXQ/OiBzdHJpbmc7CiAgICBnaXRodWJfdXJsPzogc3RyaW5nOwogICAgZXJyb3I/OiBzdHJpbmc7Cn0KCmludGVyZmFjZSBUcmFpbmluZ0V4YW1wbGVSZW5kZXJDb250ZXh0IHsKICAgIC8qKiBTY29wZWQgYWN0aW9uczogYGdldGAvYHNldGAgcmVhZCBhbmQgd3JpdGUgdGhlIGV4YW1wbGUgc2FuZGJveCBpbnN0ZWFkIG9mIHRoZSB0YXNrIGRhdGEgcm9vdC4gKi8KICAgIGFjdGlvbnM6IHR5cGVvZiBhY3Rpb25zOwogICAgLyoqCiAgICAgKiBUaGUgY3VycmVudCBleGFtcGxlIGlucHV0IEFGVEVSIHRoZSBub2RlIHByZXByb2Nlc3MgcnVucyAoaWRlbnRpdHkgd2hlbgogICAgICogdGhlIGJsb2NrIGhhcyBubyBwcmVwcm9jZXNzKSwgc28gdGhlIGludGVyZmFjZSBzZWVzIHRoZSBzYW1lIGRhdGEgYXMKICAgICAqIHByb2R1Y3Rpb24uIEFsc28gcmVhZGFibGUgdmlhIGBhY3Rpb25zLmdldCgnPG5hbWU+JylgLgogICAgICovCiAgICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47CiAgICBleGFtcGxlSWQ6IHN0cmluZzsKfQoKZGVjbGFyZSBjb25zdCBTdXNwZW5zZVBlbmRpbmdNYXJrZXI6IFJlYWN0LkZDOwpkZWNsYXJlIGNvbnN0IEZpZWxkOiB7CiAgICByZWFkb25seSBBaUVkaXRvcjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbW1lbnRzPzogewogICAgICAgICAgICB1c2VyVHlwZTogc3RyaW5nOwogICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRlbnRFZGl0YWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWlDaGVja3M/OiB7CiAgICAgICAgICAgIGNvZGU/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgdmFsaWRhdGU6IGJvb2xlYW47CiAgICAgICAgICAgICAgICBjaGVja1R5cGVzPzogKCJDT0RFQkxPQ0tfRVhJU1RTIiB8ICJJTlRST19DT01NRU5UX0VYSVNUUyIgfCAiTEFOR19TUEVDSUZJRUQiIHwgIkNPREVfQ09NTUVOVFNfRVhJU1RTIilbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgaW50ZW50PzogewogICAgICAgICAgICAgICAgZW5hYmxlZDogYm9vbGVhbjsKICAgICAgICAgICAgICAgIHZhbGlkYXRlOiBib29sZWFuOwogICAgICAgICAgICAgICAgcHJvbXB0OiBzdHJpbmc7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZhY3RzPzogewogICAgICAgICAgICAgICAgZW5hYmxlZDogYm9vbGVhbjsKICAgICAgICAgICAgICAgIHNvdXJjZVRleHRzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBzb3VyY2VMaW5rcz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgbWF4U2VsZWN0ZWRTeW1ib2xzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgc3VnZ2VzdGVkRmFjdHM/OiB7CiAgICAgICAgICAgICAgICAgICAgY29udGVudDogc3RyaW5nOwogICAgICAgICAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBncmFtbWFyU2NvcmU/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgbWluU2NvcmU6IG51bWJlcjsKICAgICAgICAgICAgICAgIHZhbGlkYXRlOiBib29sZWFuOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3b3JkQ291bnQ/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgdmFsaWRhdGU6IGJvb2xlYW47CiAgICAgICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRva2VuQ291bnQ/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgdmFsaWRhdGU6IGJvb2xlYW47CiAgICAgICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBpZ25vcmVNYXJrZG93bj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB0b2tlbml6ZXJJZD86ICJ1bmlncmFtXzAycGN0X2NjX3YxLjBfaGZfY29udmVydGVkX2NsZWFuZWQiIHwgImNsYXVkZS0zLTUtc29ubmV0LTIwMjQwNjIwLWFudGhyb3BpYy1haS1jb3VudC10b2tlbnMiIHwgImNsYXVkZS0zLTUtc29ubmV0LTIwMjQxMDIyLWFudGhyb3BpYy1haS1jb3VudC10b2tlbnMiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBhaUdlbmVyYXRlZD86IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47CiAgICAgICAgICAgICAgICB2YWxpZGF0ZTogYm9vbGVhbjsKICAgICAgICAgICAgICAgIG9yaWdpbmFsVGhyZXNob2xkOiBudW1iZXI7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0TW9kZT86ICJtYXJrZG93biIgfCAicmljaC10ZXh0IiB8IHVuZGVmaW5lZDsKICAgICAgICBpbWFnZVR5cGU/OiAidXJsIiB8ICJiYXNlNjQiIHwgImJsb2IiIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZVNpbmdsZURvbGxhck1hdGg/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRlZmF1bHRBaVBhbmVsQ29udGVudD86ICJjb2RlIiB8ICJjb21tZW50cyIgfCAiaW50ZW50IiB8ICJncmFtbWFyU2NvcmUiIHwgImFpR2VuZXJhdGVkIiB8ICJmYWN0IiB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZENvbnRlbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlQ29udGVudD86ICgoYXJnc18wOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgQ2hlY2tib3g6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVzZXJ2ZUZhbHNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgQ2hhdEFzc2lzdGFudDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBvcHRpb25zPzogewogICAgICAgICAgICB0aGlua2luZz86IHsKICAgICAgICAgICAgICAgIHR5cGU6ICJlbmFibGVkIjsKICAgICAgICAgICAgICAgIGJ1ZGdldF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRvcF9wPzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdG9wX2s/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXhfdG9rZW5zPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0b29scz86IGFueVtdIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGluaXRpYWxNZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IENvZGU6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgbGFuZ3VhZ2U6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybWF0aW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgQ29kZUV4ZWN1dGlvbjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBsYW5ndWFnZTogInB5dGhvbkAzLjEwLjAiIHwgImphdmFzY3JpcHRAMjAuMTEuMSI7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm1hdGluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IERpYWxvZ1JldmlldzogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBhbGxvd2VkTWV0YU1vZGVsczogUGFydGlhbDxSZWNvcmQ8ImNoYXRncHQiIHwgImNsYXVkZSIgfCAiZ2VtaW5pIiB8ICJtZXRhIiB8ICJtZXRhXzEiIHwgIm1ldGFfMiIsIHN0cmluZz4+OwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRvcGljPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHFhPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbHM/OiAoImNoYXRncHQiIHwgImNsYXVkZSIgfCAiZ2VtaW5pIiB8ICJtZXRhIiB8ICJtZXRhXzEiIHwgIm1ldGFfMiIpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgZGltZW5zaW9ucz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBFeHRlcm5hbDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB1cmw6IHN0cmluZzsKICAgICAgICBjb25maWc6IHt9OwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBGYWNlQ29sbGVjdGlvbjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBxYT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9iaWxlT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWF0aW9uPzogIkEiIHwgIkIiIHwgdW5kZWZpbmVkOwogICAgICAgIHBhZ2U/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVidWc/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNhbWVQZXJzb25UaHJlc2hvbGQ/OiB7CiAgICAgICAgICAgIHNlbGZpZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcG9zZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgaGlzdG9yaWNhbD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBGaWxlVXBsb2FkOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG11bHRpcGxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhY2NlcHQ/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDsKICAgICAgICBsaW5rVHlwZT86ICJzYXNMaW5rIiB8ICJkb3dubG9hZExpbmsiIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbmltdW1GaWxlcz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgSW1hZ2VBbm5vdGF0aW9uOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIGltYWdlOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRvb2xzPzogKCJyZWN0YW5nbGUiIHwgInBvbHlnb24iKVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVscz86IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgY29sb3I6ICJyZWQiIHwgIm9yYW5nZSIgfCAiYW1iZXIiIHwgInllbGxvdyIgfCAibGltZSIgfCAiZ3JlZW4iIHwgImVtZXJhbGQiIHwgInRlYWwiIHwgImN5YW4iIHwgInNreSIgfCAiYmx1ZSIgfCAiaW5kaWdvIiB8ICJ2aW9sZXQiIHwgInB1cnBsZSIgfCAiZnVjaHNpYSIgfCAicGluayIgfCAicm9zZSIgfCAid2hpdGUiOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBxdWVzdGlvbnM/OiAoewogICAgICAgICAgICB0eXBlOiAidGV4dCI7CiAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgewogICAgICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgfVtdOwogICAgICAgICAgICB0eXBlOiAidG9nZ2xlLWdyb3VwIjsKICAgICAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgICAgICB9W107CiAgICAgICAgICAgIHR5cGU6ICJzZWxlY3QiOwogICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdHlwZTogIm51bWJlciI7CiAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGRlY2ltYWxTY2FsZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB9KVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGFubm90YXRpb25TaXplPzogewogICAgICAgICAgICBtaW5IZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbldpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzcGxheUxhYmVscz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbmF2aWdhdG9yPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0QW5ub3RhdGlvbkNvbG9yPzogInJlZCIgfCAib3JhbmdlIiB8ICJhbWJlciIgfCAieWVsbG93IiB8ICJsaW1lIiB8ICJncmVlbiIgfCAiZW1lcmFsZCIgfCAidGVhbCIgfCAiY3lhbiIgfCAic2t5IiB8ICJibHVlIiB8ICJpbmRpZ28iIHwgInZpb2xldCIgfCAicHVycGxlIiB8ICJmdWNoc2lhIiB8ICJwaW5rIiB8ICJyb3NlIiB8ICJ3aGl0ZSIgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IEltYWdlU2tlbGV0b25Bbm5vdGF0aW9uOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHRvb2xzOiB7CiAgICAgICAgICAgIHR5cGU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgY29sb3I6ICJyZWQiIHwgIm9yYW5nZSIgfCAiYW1iZXIiIHwgInllbGxvdyIgfCAibGltZSIgfCAiZ3JlZW4iIHwgImVtZXJhbGQiIHwgInRlYWwiIHwgImN5YW4iIHwgInNreSIgfCAiYmx1ZSIgfCAiaW5kaWdvIiB8ICJ2aW9sZXQiIHwgInB1cnBsZSIgfCAiZnVjaHNpYSIgfCAicGluayIgfCAicm9zZSIgfCAid2hpdGUiOwogICAgICAgICAgICB0ZW1wbGF0ZTogUmVjb3JkPHN0cmluZywgW251bWJlciwgbnVtYmVyXT47CiAgICAgICAgICAgIGNvbm5lY3Rpb25zOiBbc3RyaW5nLCBzdHJpbmddW107CiAgICAgICAgICAgIHBvaW50c0NvbG9yPzogUmVjb3JkPHN0cmluZywgInJlZCIgfCAib3JhbmdlIiB8ICJhbWJlciIgfCAieWVsbG93IiB8ICJsaW1lIiB8ICJncmVlbiIgfCAiZW1lcmFsZCIgfCAidGVhbCIgfCAiY3lhbiIgfCAic2t5IiB8ICJibHVlIiB8ICJpbmRpZ28iIHwgInZpb2xldCIgfCAicHVycGxlIiB8ICJmdWNoc2lhIiB8ICJwaW5rIiB8ICJyb3NlIiB8ICJ3aGl0ZSI+IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBzaG93UG9pbnRMYWJlbD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHNjYWxlPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICBpbWFnZTogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgSnNvblNjaGVtYUZvcm06IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc2NoZW1hPzogYW55OwogICAgfT47CiAgICByZWFkb25seSBMaXN0OiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHJlbmRlckl0ZW06IChhcmdzXzA6IHN0cmluZywgYXJnc18xOiBhbnksIGFyZ3NfMjogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBmbGF0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4TGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGl0ZW1XaXRoQm9yZGVyPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhZGRCdXR0b25MYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhZGRCdXR0b25WYXJpYW50PzogImRlZmF1bHQiIHwgInNlY29uZGFyeSIgfCAiZ2hvc3QiIHwgIm91dGxpbmUiIHwgdW5kZWZpbmVkOwogICAgICAgIGdhcD86IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICByZW9yZGVyYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE1lZGlhVGFza1JldmlldzogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgTWxFbmRwb2ludDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIGVuZHBvaW50OiBzdHJpbmc7CiAgICAgICAgZGF0YToge30gfCAoKCkgPT4ge30pOwogICAgICAgIGZ1bmN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB1c2VfY2FjaGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHBvc3RQcm9jZXNzaW5nRm4/OiAoKGVuZHBvaW50UmVzdWx0OiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWFudD86ICJkZWZhdWx0IiB8ICJzZWNvbmRhcnkiIHwgImdob3N0IiB8ICJvdXRsaW5lIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb21wbGFpbj86IHsKICAgICAgICAgICAgdHlwZT86ICJidXR0b24iIHwgImNoZWNrYm94IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGRlZmF1bHRDb21tZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBvblN1Y2Nlc3M/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGluc3RydWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE1sRW5kcG9pbnRNdWx0aXBsZTogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIHJlcXVlc3RzOiB7CiAgICAgICAgICAgIGVuZHBvaW50OiBzdHJpbmc7CiAgICAgICAgICAgIGRhdGE6IHt9IHwgKCgpID0+IHt9KTsKICAgICAgICAgICAgZnVuY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1vbmRheVN1Yml0ZW1JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdXNlX2NhY2hlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcG9zdFByb2Nlc3NpbmdGbj86ICgoZW5kcG9pbnRSZXN1bHQ6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWFudD86ICJkZWZhdWx0IiB8ICJzZWNvbmRhcnkiIHwgImdob3N0IiB8ICJvdXRsaW5lIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb21wbGFpbj86IHsKICAgICAgICAgICAgdHlwZT86ICJidXR0b24iIHwgImNoZWNrYm94IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGRlZmF1bHRDb21tZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBvblN1Y2Nlc3M/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGluc3RydWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE11bHRpU2VsZWN0OiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE51bWJlcjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRlY2ltYWxTY2FsZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgUG9ydGFsQ2hhdEFzc2lzdGFudDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBvcHRpb25zPzogewogICAgICAgICAgICB0aGlua2luZz86IHsKICAgICAgICAgICAgICAgIHR5cGU6ICJlbmFibGVkIjsKICAgICAgICAgICAgICAgIGJ1ZGdldF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRvcF9wPzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdG9wX2s/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXhfdG9rZW5zPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0b29scz86IGFueVtdIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGluaXRpYWxNZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFJhZGlvR3JvdXA6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgICAgICBoaW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgU2VsZWN0OiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFNob3BpZnlPbmVEY2c6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgc2hvcEFwcEVtYWlsOiBzdHJpbmc7CiAgICAgICAgY291bnRyeTogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcWE/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHF1ZXJ5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHF1ZXJ5U2hhcGU/OiAia2V5d29yZCIgfCAiY29tcGxleCIgfCAiY29udmVyc2F0aW9uYWwiIHwgdW5kZWZpbmVkOwogICAgICAgIHBlcnNvbmE/OiB7CiAgICAgICAgICAgIHV1aWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlbGF0aW9uc2hpcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgc3VtbWFyeT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgc25hcHNob3Q/OiB1bmtub3duOwogICAgICAgICAgICBsb29rdXBfc291cmNlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgcGFpcnNUYXJnZXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgaXNUZXN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByZWFzb25pbmdGYWN0b3JzPzogewogICAgICAgICAgICBpZDogc3RyaW5nOwogICAgICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgU2hvcGlmeVN0b3JlZnJvbnQ6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAganVkZ2VzOiB7CiAgICAgICAgICAgIHNob3BfYXBwX2VtYWlsOiBzdHJpbmc7CiAgICAgICAgICAgIGNvdW50cnk6IHN0cmluZzsKICAgICAgICAgICAgcGVyc29uYTogewogICAgICAgICAgICAgICAgdXVpZDogc3RyaW5nOwogICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwOiBzdHJpbmc7CiAgICAgICAgICAgICAgICBzdW1tYXJ5OiBzdHJpbmc7CiAgICAgICAgICAgICAgICBsb29rdXBfc291cmNlOiBzdHJpbmc7CiAgICAgICAgICAgICAgICBzbmFwc2hvdD86IHVua25vd247CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHN0b3JlczogewogICAgICAgICAgICAgICAgc2hvcF9naWQ6IHN0cmluZzsKICAgICAgICAgICAgICAgIG1lcmNoYW50X25hbWU6IHN0cmluZzsKICAgICAgICAgICAgICAgIGRvbWFpbjogc3RyaW5nOwogICAgICAgICAgICAgICAgbWVyY2hhbnRfY2F0ZWdvcnk6IHN0cmluZzsKICAgICAgICAgICAgICAgIHNhbXBsZV9wcm9kdWN0czogc3RyaW5nW107CiAgICAgICAgICAgICAgICB2aXNpdGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJhbms/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH1bXTsKICAgICAgICAgICAgbGF0ZXN0X3F1ZXJ5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGlzVGVzdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFNwZWVjaFRvVGV4dDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG1vbmRheVN1Yml0ZW1JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9kZWxJZD86ICJncHQtNG8tdHJhbnNjcmliZSIgfCAiZ3B0LTRvLW1pbmktdHJhbnNjcmliZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFNwZWVjaFRvVGV4dFYyOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbElkPzogImdwdC00by10cmFuc2NyaWJlIiB8ICJncHQtNG8tbWluaS10cmFuc2NyaWJlIiB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVGV4dDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcGVsbENoZWNrPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZENvcHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkUGFzdGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBUZXh0QW5ub3RhdGlvbjogUmVhY3QuRkM8ewogICAgICAgIGNvbnRlbnQ6IHN0cmluZzsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgIGNvbG9yOiAicmVkIiB8ICJvcmFuZ2UiIHwgImFtYmVyIiB8ICJ5ZWxsb3ciIHwgImxpbWUiIHwgImdyZWVuIiB8ICJlbWVyYWxkIiB8ICJ0ZWFsIiB8ICJjeWFuIiB8ICJza3kiIHwgImJsdWUiIHwgImluZGlnbyIgfCAidmlvbGV0IiB8ICJwdXJwbGUiIHwgImZ1Y2hzaWEiIHwgInBpbmsiIHwgInJvc2UiIHwgIndoaXRlIjsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9kZT86ICJjbGFzc2lmeWluZyIgfCAiY2xhc3NpZnlpbmctY29tbWVudGluZyIgfCB1bmRlZmluZWQ7CiAgICAgICAgYWRqdXN0PzogInN5bWJvbHMiIHwgIndvcmRzIiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVGV4dGFyZWE6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3BlbGxDaGVjaz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWRDb3B5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZFBhc3RlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByZXNpemFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJvd3M/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFRvZ2dsZUdyb3VwOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiAibXVsdGlwbGUiIHwgInNpbmdsZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBWaWRlb1RpbWVsaW5lU2VnbWVudGF0aW9uOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHZpZGVvOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcXVlc3Rpb25zPzogewogICAgICAgICAgICBrZXlmcmFtZXM/OiAoewogICAgICAgICAgICAgICAgdHlwZTogInRleHQiOwogICAgICAgICAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgewogICAgICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9W107CiAgICAgICAgICAgICAgICB0eXBlOiAidG9nZ2xlLWdyb3VwIjsKICAgICAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0pW10gfCAoKGFyZ3NfMDogb2JqZWN0SW5wdXRUeXBlPHsKICAgICAgICAgICAgICAgIHRpbWU6IFpvZE51bWJlcjsKICAgICAgICAgICAgfSwgWm9kVW5rbm93biwgInN0cmlwIj4pID0+ICh7CiAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCI7CiAgICAgICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB7CiAgICAgICAgICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH1bXTsKICAgICAgICAgICAgICAgIHR5cGU6ICJ0b2dnbGUtZ3JvdXAiOwogICAgICAgICAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSlbXSkgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHNlZ21lbnRzPzogKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IjsKICAgICAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfVtdOwogICAgICAgICAgICAgICAgdHlwZTogInRvZ2dsZS1ncm91cCI7CiAgICAgICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9KVtdIHwgKChhcmdzXzA6IG9iamVjdElucHV0VHlwZTx7CiAgICAgICAgICAgICAgICBmcm9tOiBab2ROdW1iZXI7CiAgICAgICAgICAgICAgICB0bzogWm9kTnVtYmVyOwogICAgICAgICAgICB9LCBab2RVbmtub3duLCAic3RyaXAiPikgPT4gKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IjsKICAgICAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfVtdOwogICAgICAgICAgICAgICAgdHlwZTogInRvZ2dsZS1ncm91cCI7CiAgICAgICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9KVtdKSB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgIG1vZGU/OiAia2V5ZnJhbWVzIiB8ICJzZWdtZW50cyIgfCAia2V5ZnJhbWVzLXNlZ21lbnRzIiB8IHVuZGVmaW5lZDsKICAgICAgICB2aWRlb0hlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0UGxheWJhY2tSYXRlPzogMSB8IDIgfCAwLjI1IHwgMC41IHwgMC43NSB8IDEuMjUgfCAxLjUgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFZpZGVvRnJhbWluZzogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2aWRlbzogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZpZGVvSGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGRlZmF1bHRQbGF5YmFja1JhdGU/OiAxIHwgMiB8IDAuMjUgfCAwLjUgfCAwLjc1IHwgMS4yNSB8IDEuNSB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVmlkZW9SZWNvcmQ6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgZnBzVG9sZXJhbmNlRnJhY3Rpb246IG51bWJlcjsKICAgICAgICByZXNvbHV0aW9uVG9sZXJhbmNlRnJhY3Rpb246IG51bWJlcjsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtb2JpbGVPbmx5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsaW5rVHlwZT86ICJzYXNMaW5rIiB8ICJkb3dubG9hZExpbmsiIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtaW5XaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvcmllbnRhdGlvbj86ICJsYW5kc2NhcGUiIHwgInBvcnRyYWl0IiB8IHVuZGVmaW5lZDsKICAgICAgICBsb2NrU2NyZWVuT3JpZW50YXRpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkR1cmF0aW9uU2VjPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1heER1cmF0aW9uU2VjPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGNhbWVyYUZhY2luZz86ICJ1c2VyIiB8ICJlbnZpcm9ubWVudCIgfCB1bmRlZmluZWQ7CiAgICAgICAgYXVkaW8/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJlY29yZGluZ1F1YWxpdHk/OiAiaGlnaCIgfCAibG93IiB8ICJiYWxhbmNlZCIgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5zdXBwb3J0ZWRNZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hdGl2ZUNhbWVyYT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhdGZvcm0/OiAiaW9zIiB8ICJhbmRyb2lkIiB8ICJib3RoIiB8IHVuZGVmaW5lZDsKICAgICAgICBsZW5zPzogImRlZmF1bHQiIHwgIndpZGUiIHwgInVsdHJhV2lkZSIgfCAidGVsZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluRm92RGVnPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkZwcz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtaW5CaXRyYXRlPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGhkck1vZGU/OiAib2ZmIiB8ICJoZHIxMCIgfCAiYXV0byIgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlnaHRpbmdUaHJlc2hvbGQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVjb3JkSW11PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVmlkZW9VcGxvYWQ6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbXVsdGlwbGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGFjY2VwdD86IHN0cmluZ1tdIHwgdW5kZWZpbmVkOwogICAgICAgIGxpbmtUeXBlPzogInNhc0xpbmsiIHwgImRvd25sb2FkTGluayIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluaW11bUZpbGVzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG9yaWVudGF0aW9uPzogImxhbmRzY2FwZSIgfCAicG9ydHJhaXQiIHwgInNxdWFyZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluRHVyYXRpb25TZWM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4RHVyYXRpb25TZWM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFdvcmxkU2VhcmNoOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIGF2YWlsYWJsZVdvcmxkczogc3RyaW5nW107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGVyUGFnZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzZWxlY3REb2N1bWVudHM/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47Cn07CmRlY2xhcmUgY29uc3QgTGF5b3V0OiB7CiAgICBTdGlja3lIZWFkZXI6IFJlYWN0LkZDPHsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWFkZXI/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKfTsKZGVjbGFyZSBjb25zdCBWaWV3OiB7CiAgICBBY3Rpb25CdXR0b246IFJlYWN0LkZDPHsKICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIGFjdGlvbjogKCkgPT4gYW55OwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YXJpYW50PzogImRlZmF1bHQiIHwgInNlY29uZGFyeSIgfCAiZ2hvc3QiIHwgIm91dGxpbmUiIHwgdW5kZWZpbmVkOwogICAgICAgIGxvYWRpbmdMYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgQWxlcnQ6IFJlYWN0LkZDPHsKICAgICAgICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBkZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YXJpYW50PzogImVycm9yIiB8ICJkZWZhdWx0IiB8ICJpbmZvIiB8ICJzdWNjZXNzIiB8ICJ3YXJuaW5nIiB8IHVuZGVmaW5lZDsKICAgICAgICBwYWRkaW5nPzogInNtIiB8ICJtZCIgfCB1bmRlZmluZWQ7CiAgICAgICAgaWNvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIEF1ZGlvOiBSZWFjdC5GQzx7CiAgICAgICAgdXJsOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgcGxheWVkRnVsbHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIENhcmQ6IFJlYWN0LkZDPHsKICAgICAgICBmbGF0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBkZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YXJpYW50PzogImVycm9yIiB8ICJkZWZhdWx0IiB8ICJpbmZvIiB8ICJzdWNjZXNzIiB8ICJ3YXJuaW5nIiB8IHVuZGVmaW5lZDsKICAgICAgICB2aWV3PzogImZpbGwiIHwgIm91dGxpbmUiIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBDb2RlRGlmZjogUmVhY3QuRkM8ewogICAgICAgIG9yaWdpbmFsOiBzdHJpbmc7CiAgICAgICAgbGFuZ3VhZ2U6IHN0cmluZzsKICAgICAgICBtb2RpZmllZDogc3RyaW5nOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzaWRlQnlTaWRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgQ29sOiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvZmZzZXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2V0UGFyYW1zPzogKChhcmdzXzA6IG51bWJlcikgPT4gewogICAgICAgICAgICBzcGFuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgfSkgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIENvbGxhcHNpYmxlOiBSZWFjdC5GQzx7CiAgICAgICAgZmxhdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdGl0bGU/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhcmlhbnQ/OiAiZGVmYXVsdCIgfCAiaW5mbyIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdE9wZW4/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBEaXZpZGVyOiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3JpZW50YXRpb24/OiAiaG9yaXpvbnRhbCIgfCAidmVydGljYWwiIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBGbGV4OiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2FwPzogc3RyaW5nIHwgbnVtYmVyIHwgW3N0cmluZyB8IG51bWJlciwgc3RyaW5nIHwgbnVtYmVyXSB8IHVuZGVmaW5lZDsKICAgICAgICBqdXN0aWZ5PzogInN0YXJ0IiB8ICJlbmQiIHwgImNlbnRlciIgfCAibm9ybWFsIiB8ICJzcGFjZS1hcm91bmQiIHwgInNwYWNlLWJldHdlZW4iIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRpY2FsPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB3cmFwPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhbGlnbj86ICJzdGFydCIgfCAiZW5kIiB8ICJtaWRkbGUiIHwgInN0cmV0Y2giIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBJbWFnZTogUmVhY3QuRkM8ewogICAgICAgIHNyYzogc3RyaW5nOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHByZXZpZXc/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBJbWFnZUdhbGxlcnk6IFJlYWN0LkZDPHsKICAgICAgICBpbWFnZXM6IHN0cmluZ1tdOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmV2aWV3PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgTGFiZWw6IFJlYWN0LkZDPHsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBMYWJlbHM6IFJlYWN0LkZDPHsKICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgdGl0bGU6IHN0cmluZzsKICAgICAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aGVtZT86ICJkZWZhdWx0IiB8ICJhbGVydCIgfCAic3VjY2VzcyIgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBMZWFmbGV0TWFwOiBSZWFjdC5GQzx7CiAgICAgICAgY2VudGVyOiBbbnVtYmVyLCBudW1iZXJdOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB6b29tPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1hcmtlcnM/OiB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBbbnVtYmVyLCBudW1iZXJdOwogICAgICAgICAgICBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcG9wdXA/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBMaW5rOiBSZWFjdC5GQzx7CiAgICAgICAgdXJsOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgb3BlbmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBNYXJrZG93bjogUmVhY3QuRkM8ewogICAgICAgIGNvbnRlbnQ6IHN0cmluZzsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZENvcHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGh0bWw/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBSb3c6IFJlYWN0LkZDPHsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnYXA/OiBzdHJpbmcgfCBudW1iZXIgfCBbc3RyaW5nIHwgbnVtYmVyLCBzdHJpbmcgfCBudW1iZXJdIHwgdW5kZWZpbmVkOwogICAgICAgIGp1c3RpZnk/OiAic3RhcnQiIHwgImVuZCIgfCAiY2VudGVyIiB8ICJzcGFjZS1hcm91bmQiIHwgInNwYWNlLWJldHdlZW4iIHwgdW5kZWZpbmVkOwogICAgICAgIGFsaWduPzogInN0YXJ0IiB8ICJlbmQiIHwgIm1pZGRsZSIgfCAic3RyZXRjaCIgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIFRhYnM6IFJlYWN0LkZDPHsKICAgICAgICB0YWJzOiB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIGNvbnRlbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICBmbGF0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBkZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0VGFiPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYnNWaWV3S2V5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUZXh0OiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sb3I/OiAiZXJyb3IiIHwgInNlY29uZGFyeSIgfCAicHJpbWFyeSIgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWFudD86ICJjb2RlIiB8ICJibG9ja3F1b3RlIiB8ICJoMSIgfCAiaDIiIHwgImgzIiB8ICJoNCIgfCAicCIgfCAic21hbGwiIHwgImxhcmdlIiB8IHVuZGVmaW5lZDsKICAgIH0gJiB7CiAgICAgICAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTsKICAgIH0+OwogICAgVGV4dERpZmY6IFJlYWN0LkZDPHsKICAgICAgICBzb3VyY2U6IHN0cmluZzsKICAgICAgICB0YXJnZXQ6IHN0cmluZzsKICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0T3Blbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWxnb3JpdGhtPzogInN5bWJvbHMiIHwgIndvcmRzIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50SGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYnNMYWJlbHM/OiB7CiAgICAgICAgICAgIHNvdXJjZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBkaWZmPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIFR1dG9yaWFsOiBSZWFjdC5GQzx7CiAgICAgICAgdW5pcXVlSWQ6IHN0cmluZzsKICAgICAgICBzdGVwczogewogICAgICAgICAgICB0aXRsZTogc3RyaW5nOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZGlzYWJsZUFjdGl2ZUludGVyYWN0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB9W107CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW5zdGFudD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgd2l0aEJ1dHRvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWxsb3dDbG9zZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIFBkZjogUmVhY3QuRkM8ewogICAgICAgIHVybDogc3RyaW5nOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgVmlkZW86IFJlYWN0LkZDPHsKICAgICAgICB1cmw6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBwbGF5ZWRGdWxseT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByYXRpbz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgT25ib2FyZGluZzogUmVhY3QuRkM8ewogICAgICAgIG1vZHVsZXM6IHsKICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgcm9sZTogc3RyaW5nOwogICAgICAgICAgICBzdGVwczogewogICAgICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM6IHsKICAgICAgICAgICAgICAgICAgICBpZDogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGJvb2xlYW47CiAgICAgICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGNyaXRlcmlhOiBzdHJpbmc7CiAgICAgICAgICAgICAgICB9W107CiAgICAgICAgICAgICAgICBjb250ZW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgICAgICB9W107CiAgICAgICAgICAgIHNjZW5hcmlvOiBzdHJpbmc7CiAgICAgICAgICAgIGdvYWw6IHN0cmluZzsKICAgICAgICAgICAgc3VjY2Vzc0NyaXRlcmlhOiBzdHJpbmc7CiAgICAgICAgfVtdOwogICAgICAgIGZsYXQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHRpdGxlPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGRlc2NyaXB0aW9uPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUcmFpbmluZzogUmVhY3QuRkM8ewogICAgICAgIHN0ZXBzOiB7CiAgICAgICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgICAgIGJsb2NrczogYW55W107CiAgICAgICAgfVtdOwogICAgICAgIHRpdGxlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUcmFpbmluZ1RoZW9yeTogUmVhY3QuRkM8ewogICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgY29udGVudD86ICh7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJtYXJrZG93biI7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogImltYWdlIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGFsdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAidmlkZW8iOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAiY29kZSI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsYW5ndWFnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9KVtdIHwgdW5kZWZpbmVkOwogICAgICAgIHRpdGxlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUcmFpbmluZ0NvbnNlbnQ6IFJlYWN0LkZDPHsKICAgICAgICBpZDogc3RyaW5nOwogICAgICAgIGNvbnNlbnRMYWJlbDogc3RyaW5nOwogICAgICAgIGNvbnRlbnQ/OiAoewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAibWFya2Rvd24iOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJpbWFnZSI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogInZpZGVvIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogImNvZGUiOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFuZ3VhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSlbXSB8IHVuZGVmaW5lZDsKICAgICAgICBwYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRpdGxlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgVHJhaW5pbmdRdWl6OiBSZWFjdC5GQzx7CiAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICBxdWVzdGlvbnM6IHsKICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgIH1bXTsKICAgICAgICAgICAgdHlwZTogInNpbmdsZS1jaG9pY2UiIHwgIm11bHRpcGxlLWNob2ljZSI7CiAgICAgICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgICAgIHF1ZXN0aW9uOiBzdHJpbmc7CiAgICAgICAgICAgIGNvcnJlY3RBbnN3ZXI6IHN0cmluZyB8IHN0cmluZ1tdOwogICAgICAgICAgICBoaW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBjb3JyZWN0QW5zd2VyRmVlZGJhY2s/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGluY29ycmVjdEFuc3dlckZlZWRiYWNrPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICBjb250ZW50PzogKHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogIm1hcmtkb3duIjsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgYWx0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJ2aWRlbyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJjb2RlIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxhbmd1YWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0pW10gfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIFRyYWluaW5nUHJhY3RpY2U6IFJlYWN0LkZDPHsKICAgICAgICBpZDogc3RyaW5nOwogICAgICAgIHZhbGlkYXRvcnM6IHsKICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZzsKICAgICAgICAgICAgcmVxdWlyZWQ6IGJvb2xlYW47CiAgICAgICAgICAgIG5hbWU6IHN0cmluZzsKICAgICAgICAgICAgY3JpdGVyaWE6IHN0cmluZzsKICAgICAgICB9W107CiAgICAgICAgZWRpdG9yVHlwZTogIlRFWFQiIHwgIk1BUktET1dOIiB8ICJDT0RFIjsKICAgICAgICBjb250ZW50PzogKHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogIm1hcmtkb3duIjsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgYWx0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJ2aWRlbyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJjb2RlIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxhbmd1YWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0pW10gfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VVcmw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZWRpdG9yQ29uZmlnPzogewogICAgICAgICAgICBsYW5ndWFnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJvd3M/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgVHJhaW5pbmdFeGFtcGxlczogUmVhY3QuRkM8ewogICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgZXhhbXBsZXM6IHsKICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgY2hlY2tzOiAoewogICAgICAgICAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgICAgICAgICAgdHlwZTogImV4YWN0IjsKICAgICAgICAgICAgICAgIGhpbnQ6IHN0cmluZzsKICAgICAgICAgICAgICAgIGdvbGRlbjogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVua25vd25bXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIGNvZGU6IHN0cmluZzsKICAgICAgICAgICAgICAgIHR5cGU6ICJjb2RlIjsKICAgICAgICAgICAgICAgIGhpbnQ6IHN0cmluZzsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIHR5cGU6ICJsbG0iOwogICAgICAgICAgICAgICAgY3JpdGVyaWE6IHN0cmluZzsKICAgICAgICAgICAgICAgIHBhdGhzOiBzdHJpbmdbXTsKICAgICAgICAgICAgICAgIGhpbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBpbWFnZVVybD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJlZmVyZW5jZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSlbXTsKICAgICAgICAgICAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OwogICAgICAgICAgICBleHBsYW5hdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9W107CiAgICAgICAgcGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcHJlcHJvY2Vzcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb3N0cHJvY2Vzcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0gJiB7CiAgICAgICAgY2hpbGRyZW46IChjb250ZXh0OiBUcmFpbmluZ0V4YW1wbGVSZW5kZXJDb250ZXh0KSA9PiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIFRyYWluaW5nSW5mbzogUmVhY3QuRkM8ewogICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgcm9sZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnb2FsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN1Y2Nlc3NDcml0ZXJpYT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb21wbGV0aW9uVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+Owp9OwpkZWNsYXJlIGNvbnN0IFZhbGlkYXRpb246IFJlYWN0LkZDPHsKICAgIG1lc3NhZ2U6IHN0cmluZzsKICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIGlzVmFsaWQ/OiBhbnk7Cn0gJiB7CiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwp9PjsKZGVjbGFyZSBjb25zdCBhY3Rpb25zOiB7CiAgICBsbG06IChwYXJhbXM6IHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgcHJvbXB0OiBzdHJpbmcgfCB7CiAgICAgICAgICAgIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZzsKICAgICAgICAgICAgfVtdOwogICAgICAgICAgICByb2xlOiBzdHJpbmc7CiAgICAgICAgfVtdIHwgKCgpID0+IHN0cmluZyB8IHsKICAgICAgICAgICAgY29udGVudDogewogICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nOwogICAgICAgICAgICB9W107CiAgICAgICAgICAgIHJvbGU6IHN0cmluZzsKICAgICAgICB9W10pOwogICAgICAgIG9wdGlvbnM/OiB7CiAgICAgICAgICAgIHRoaW5raW5nPzogewogICAgICAgICAgICAgICAgdHlwZTogImVuYWJsZWQiOwogICAgICAgICAgICAgICAgYnVkZ2V0X3Rva2Vucz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdG9wX3A/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0b3Bfaz86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRvb2xzPzogYW55W10gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzeXN0ZW1fcHJvbXB0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1vZGVsX2lkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlc3BvbnNlX2Zvcm1hdF90eXBlPzogImpzb25fb2JqZWN0IiB8IHVuZGVmaW5lZDsKICAgICAgICBpbWFnZV91cmw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VfZGV0YWlsPzogImhpZ2giIHwgImxvdyIgfCB1bmRlZmluZWQ7CiAgICAgICAganNvbl9zY2hlbWE/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICBwbHVnaW5zPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7CiAgICAgICAgcmV0dXJuX2Z1bGxfYm9keT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdXNlX2xpdGVsbG0/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHBhcnNlSnNvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5X3N1Yml0ZW1faWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhdGZvcm1fcHJvamVjdF9pZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47CiAgICBsbG1NdWx0aXBsZTogKHBhcmFtczogewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICByZXF1ZXN0czogewogICAgICAgICAgICBwcm9tcHQ6IHN0cmluZyB8IHsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmc7CiAgICAgICAgICAgICAgICB9W107CiAgICAgICAgICAgICAgICByb2xlOiBzdHJpbmc7CiAgICAgICAgICAgIH1bXSB8ICgoKSA9PiBzdHJpbmcgfCB7CiAgICAgICAgICAgICAgICBjb250ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nOwogICAgICAgICAgICAgICAgfVtdOwogICAgICAgICAgICAgICAgcm9sZTogc3RyaW5nOwogICAgICAgICAgICB9W10pOwogICAgICAgICAgICBvcHRpb25zPzogewogICAgICAgICAgICAgICAgdGhpbmtpbmc/OiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogImVuYWJsZWQiOwogICAgICAgICAgICAgICAgICAgIGJ1ZGdldF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgdG9wX3A/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgdG9wX2s/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgbWF4X3Rva2Vucz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB0b29scz86IGFueVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtb25kYXlTdWJpdGVtSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRlbXBlcmF0dXJlPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBzeXN0ZW1fcHJvbXB0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtb2RlbF9pZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVzcG9uc2VfZm9ybWF0X3R5cGU/OiAianNvbl9vYmplY3QiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBpbWFnZV91cmw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGltYWdlX2RldGFpbD86ICJoaWdoIiB8ICJsb3ciIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBqc29uX3NjaGVtYT86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwbHVnaW5zPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJldHVybl9mdWxsX2JvZHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB1c2VfbGl0ZWxsbT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhcnNlSnNvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdOwogICAgfSkgPT4gUHJvbWlzZTwoc3RyaW5nIHwgbnVsbClbXT47CiAgICBsbG1RYTogKHBhcmFtczogewogICAgICAgIGNvbmZpZ0lkOiBudW1iZXI7CiAgICAgICAgaW5wdXRQYXRoOiBzdHJpbmc7CiAgICAgICAgb3V0cHV0UGF0aDogc3RyaW5nOwogICAgICAgIHN0YXRlUGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB0aW1lb3V0TXM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9KSA9PiBQcm9taXNlPHsKICAgICAgICBzdGF0dXM6IHN0cmluZzsKICAgICAgICBydW5fa2V5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1ldHJpY3M/OiB1bmtub3duW10gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIG1sRW5kcG9pbnQ6IChwYXJhbXM6IHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgZW5kcG9pbnQ6IHN0cmluZzsKICAgICAgICBkYXRhOiB7fSB8ICgoKSA9PiB7fSk7CiAgICAgICAgZnVuY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZV9jYWNoZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcG9zdFByb2Nlc3NpbmdGbj86ICgoZW5kcG9pbnRSZXN1bHQ6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8YW55PjsKICAgIG1sRW5kcG9pbnRNdWx0aXBsZTogKHBhcmFtczogewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICByZXF1ZXN0czogewogICAgICAgICAgICBlbmRwb2ludDogc3RyaW5nOwogICAgICAgICAgICBkYXRhOiB7fSB8ICgoKSA9PiB7fSk7CiAgICAgICAgICAgIGZ1bmN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtb25kYXlTdWJpdGVtSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHVzZV9jYWNoZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBvc3RQcm9jZXNzaW5nRm4/OiAoKGVuZHBvaW50UmVzdWx0OiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdOwogICAgfSkgPT4gUHJvbWlzZTxhbnlbXT47CiAgICBnaXRodWJXb3JrZmxvdzogKChwYXJhbXM6IHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgcmVmOiBzdHJpbmc7CiAgICAgICAgb3duZXI6IHN0cmluZzsKICAgICAgICByZXBvOiBzdHJpbmc7CiAgICAgICAgd29ya2Zsb3c6IHN0cmluZzsKICAgICAgICBpbnB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCAoKCkgPT4gUmVjb3JkPHN0cmluZywgYW55Pik7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgcG9zdFByb2Nlc3NpbmdGbj86ICgoZW5kcG9pbnRSZXN1bHQ6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8YW55PikgJiB7CiAgICAgICAgc3RhcnQ6IChwYXJhbXM6IHsKICAgICAgICAgICAgcmVmOiBzdHJpbmc7CiAgICAgICAgICAgIG93bmVyOiBzdHJpbmc7CiAgICAgICAgICAgIHJlcG86IHN0cmluZzsKICAgICAgICAgICAgd29ya2Zsb3c6IHN0cmluZzsKICAgICAgICAgICAgaW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgKCgpID0+IFJlY29yZDxzdHJpbmcsIGFueT4pOwogICAgICAgICAgICBtb25kYXlTdWJpdGVtSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGpvYlN0b3JlUGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9KSA9PiBQcm9taXNlPEdpdEh1YldvcmtmbG93UmVzdWx0PjsKICAgICAgICBwb2xsOiAocGFyYW1zOiB7CiAgICAgICAgICAgIG1vbmRheVN1Yml0ZW1JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgam9iU3RvcmVQYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBqb2JJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9KSA9PiBQcm9taXNlPEdpdEh1YldvcmtmbG93UmVzdWx0PjsKICAgICAgICBnZXRSZXN1bHRzOiAocGFyYW1zOiB7CiAgICAgICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwb3N0UHJvY2Vzc2luZ0ZuPzogKChlbmRwb2ludFJlc3VsdDogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBqb2JTdG9yZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGpvYklkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0pID0+IFByb21pc2U8dW5rbm93bj47CiAgICB9OwogICAgZ2V0OiAocGF0aDogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpID0+IGFueTsKICAgIHNldDogKHBhdGg6IHN0cmluZywgcGF5bG9hZDogYW55KSA9PiB2b2lkOwogICAgc2V0VGFiOiAocGFyYW1zOiB7CiAgICAgICAgdGFic1ZpZXdLZXk6IHN0cmluZzsKICAgICAgICB0YWJWYWx1ZTogc3RyaW5nOwogICAgICAgIHNjcm9sbFRvVGFiU3RhcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfSkgPT4gdm9pZDsKICAgIG5leHRUYWI6IChwYXJhbXM6IHsKICAgICAgICB0YWJzVmlld0tleTogc3RyaW5nOwogICAgICAgIHNjcm9sbFRvVGFiU3RhcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGN5Y2xlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0pID0+IHZvaWQ7CiAgICBjb252ZXJ0TWFya2Rvd25Ub0xsbVByb21wdDogKHBhcmFtczogewogICAgICAgIG1hcmtkb3duOiBzdHJpbmc7CiAgICAgICAgbW9kZWw/OiAiY2xhdWRlIiB8ICJncHQiIHwgdW5kZWZpbmVkOwogICAgfSkgPT4gewogICAgICAgIGNvbnRlbnQ6IG9iamVjdE91dHB1dFR5cGU8ewogICAgICAgICAgICB0eXBlOiBab2RTdHJpbmc7CiAgICAgICAgfSwgWm9kVW5rbm93biwgInN0cmlwIj5bXTsKICAgICAgICByb2xlOiBzdHJpbmc7CiAgICB9W107CiAgICBnZXRUZXh0RGlmZjogKHBhcmFtczogewogICAgICAgIHNvdXJjZTogc3RyaW5nOwogICAgICAgIHRhcmdldDogc3RyaW5nOwogICAgICAgIGFsZ29yaXRobT86ICJzeW1ib2xzIiB8ICJ3b3JkcyIgfCB1bmRlZmluZWQ7CiAgICB9KSA9PiBQcm9taXNlPG51bWJlcj47CiAgICBub3RpZnk6IChwYXJhbXM6IHsKICAgICAgICBtZXNzYWdlOiBzdHJpbmc7CiAgICAgICAgdmFyaWFudDogImVycm9yIiB8ICJpbmZvIiB8ICJzdWNjZXNzIiB8ICJ3YXJuaW5nIjsKICAgIH0pID0+IHZvaWQ7CiAgICBleGVjdXRlQ29kZTogKHBhcmFtczogewogICAgICAgIGNvZGU6IHN0cmluZzsKICAgICAgICBsYW5ndWFnZTogInB5dGhvbkAzLjEwLjAiIHwgImphdmFzY3JpcHRAMjAuMTEuMSI7CiAgICB9KSA9PiBQcm9taXNlPHsKICAgICAgICBvdXRwdXQ6IHN0cmluZzsKICAgICAgICBpc0Vycm9yOiBib29sZWFuOwogICAgfT47CiAgICBzdGFydEVkaXRpbmc6IChwYXJhbXM6IHVuZGVmaW5lZCkgPT4gUHJvbWlzZTx7CiAgICAgICAgc3VjY2VzczogYm9vbGVhbjsKICAgIH0+OwogICAgc3VibWl0VGFzazogKHBhcmFtczogewogICAgICAgIHBhdGNoVmFsdWVzPzogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDsKICAgICAgICByZXNldFZhbHVlcz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7CiAgICB9KSA9PiBQcm9taXNlPHsKICAgICAgICBzdWNjZXNzOiBib29sZWFuOwogICAgfT47CiAgICBpbnZhbGlkYXRlVGFzazogKHBhcmFtczogdW5kZWZpbmVkKSA9PiBQcm9taXNlPHsKICAgICAgICBzdWNjZXNzOiBib29sZWFuOwogICAgfT47CiAgICB1bmFzc2lnbkFuZEV4aXQ6IChwYXJhbXM6IHsKICAgICAgICB3aXRob3V0Q29uZmlybWF0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8ewogICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47CiAgICB9PjsKICAgIHNlbmRVc2VyTG9nOiAocGFyYW1zOiB7CiAgICAgICAgdmFsdWU6IExvZ1ZhbHVlT2JqZWN0OwogICAgICAgIHR5cGU6IHN0cmluZzsKICAgIH0pID0+IFByb21pc2U8dW5rbm93bj47CiAgICBzaWduV2l0aEdlb0lwOiAocGFyYW1zOiB7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47CiAgICB9KSA9PiBQcm9taXNlPHN0cmluZz47Cn07CgpleHBvcnQgeyBGaWVsZCwgTGF5b3V0LCBTdXNwZW5zZVBlbmRpbmdNYXJrZXIsIFZhbGlkYXRpb24sIFZpZXcsIGFjdGlvbnMgfTsK",
16
+ "base64",
17
+ ).toString("utf8"),
18
+ },
19
+ };