openstack-uicore-foundation 3.0.78 → 3.0.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/components.js CHANGED
@@ -1236,8 +1236,7 @@ const ExtraQuestionsForm = ({
1236
1236
  className: className
1237
1237
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_final_form__WEBPACK_IMPORTED_MODULE_8__["Form"], {
1238
1238
  onSubmit: onSubmit,
1239
- initialValues: answers,
1240
- validate: validate
1239
+ initialValues: answers
1241
1240
  }, ({
1242
1241
  handleSubmit,
1243
1242
  form,
@@ -11125,4 +11124,4 @@ module.exports = require("video.js/dist/video-js.css");
11125
11124
 
11126
11125
  /******/ });
11127
11126
  });
11128
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9hamF4bG9hZGVyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2F0dGVuZGFuY2UtdHJhY2tlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jaXJjbGUtYnV0dG9uL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2NpcmNsZS1idXR0b24vaW5kZXgubW9kdWxlLnNjc3M/NGMyNiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jbG9jay5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leGNsdXNpdmUtd3JhcHBlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZm9ybXMvcnN2cC1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2Zvcm1zL3NpbXBsZS1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyYWdtZW4tcGFyc2VyLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyZWUtdGV4dC1zZWFyY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZ29vZ2xlLW1hcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWNjZXNzLWxldmVscy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWN0aW9uLWRyb3Bkb3duL2FjdGlvbi1kcm9wZG93bi5sZXNzP2Q3NDMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2FjdGlvbi1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY2hlY2tib3gtbGlzdC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY29tcGFueS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXIubGVzcz84Y2Q1Iiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9kYXRldGltZXBpY2tlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2VkaXRvci1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZXZlbnQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2ZyZWUtbXVsdGktdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZ3JvdXAtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vT3B0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vb3B0aW9uZ3JvdXAubGVzcz9hNDAxIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9sYW5ndWFnZS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvbWVtYmVyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9vcmdhbml6YXRpb24taW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JhZGlvLWxpc3QuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JlZ2lzdHJhdGlvbi1jb21wYW55LWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcGVha2VyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcG9uc29yLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zdW1taXQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RhZy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dGFyZWEtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RpY2tldC10eXBlcy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2Ryb3B6b25lLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaWNvbi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaW5kZXgubGVzcz9hZDBlIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvZmlsZS5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L2pwZy5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9tb3YucG5nIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvbXA0LnBuZyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L3BkZi5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC91cGxvYWQubGVzcz80NjNmIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3Jhdy1odG1sL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3Rpb25zL3BhbmVsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L2Fic3RyYWN0LWF1dGgtY2FsbGJhY2stcm91dGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2VjdXJpdHkvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zZWN1cml0eS9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L3Nlc3Npb24tY2hlY2tlci9vcC1zZXNzaW9uLWNoZWNrZXIuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2ltcGxlLWxpbmstbGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zaW1wbGUtbGluay1saXN0L3NpbXBsZS1saW5rLWxpc3QubGVzcz8xYzlkIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3N1bW1pdC1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zdW1taXQtZHJvcGRvd24vc3VtbWl0LWRyb3Bkb3duLmxlc3M/ZThiNSIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlUm93LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLWVkaXRhYmxlL2VkaXRhYmxlLXRhYmxlLmNzcz83ZTBjIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL1NlbGVjdGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL3NlbGVjdGFibGUtdGFibGUuY3NzPzVlM2QiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVBY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNvcnRhYmxlL1NvcnRhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zb3J0YWJsZS90YWJsZS1zb3J0YWJsZS5jc3M/ZjhmMiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9BY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9UYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvVGFibGVSb3cuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY3NzPzM3OTMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdXNlLWZpdC10ZXh0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3ZpZGVvLXN0cmVhbS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvaTE4biBzeW5jIF5cXC5cXC8uKlxcLmpzb24kIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVyeS1hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVzdGlvbnMtc2V0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImF3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImJyb3dzZXItdGFicy1sb2NrXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiZHJvcHpvbmVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJkcm9wem9uZS9kaXN0L2Ryb3B6b25lLmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImV4dGVuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImkxOG4tcmVhY3RcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImlkdG9rZW4tdmVyaWZpZXJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpbW11dGFiaWxpdHktaGVscGVyXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibW9tZW50LXRpbWV6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZGF0ZXRpbWVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmRcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmQtaHRtbDUtYmFja2VuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRvbVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRyb3B6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZmluYWwtZm9ybVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWdvb2dsZS1tYXBzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXJlZHV4XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtcnRlXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvY29tcG9uZW50c1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXRvb2x0aXBcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJzdXBlcmFnZW50XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwic3dlZXRhbGVydDJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJ1cmlqc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInZpZGVvLmpzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwidmlkZW8uanMvZGlzdC92aWRlby1qcy5jc3NcIiJdLCJuYW1lcyI6WyJsYW5ndWFnZSIsImdldEN1cnJlbnRVc2VyTGFuZ3VhZ2UiLCJsZW5ndGgiLCJzcGxpdCIsIlQiLCJzZXRUZXh0cyIsInJlcXVpcmUiLCJlIiwiQWpheExvYWRlciIsInNob3ciLCJyZWxhdGl2ZSIsImNvbG9yIiwic2l6ZSIsImNoaWxkcmVuIiwic3R5bGVzIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJ6SW5kZXgiLCJtYXJnaW4iLCJjdXJzb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0b3AiLCJsZWZ0Iiwic3R5bGVTcGlubmVyIiwiZm9udFNpemUiLCJzdHlsZVNwaW5uZXJDb250YWluZXIiLCJ0ZXh0QWxpZ24iLCJyaWdodCIsImJvdHRvbSIsInN0eWxlQmFja2dyb3VuZCIsImJhY2tncm91bmQiLCJvcGFjaXR5IiwiQXR0ZW5kYW5jZVRyYWNrZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImFwaUJhc2VVcmwiLCJzdW1taXRJZCIsInNvdXJjZUlkIiwic291cmNlTmFtZSIsInByb3BzIiwibG9jYXRpb24iLCJnZXRMb2NhdGlvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QWNjZXNzVG9rZW4iLCJodHRwIiwicHV0Iiwic2VuZCIsImFjY2Vzc190b2tlbiIsInR5cGUiLCJzb3VyY2VfaWQiLCJlbmQiLCJjb25zb2xlIiwibG9nIiwicG9zdCIsIm5hdmlnYXRvciIsInNlbmRCZWFjb24iLCJ1bmRlZmluZWQiLCJ3aW5kb3ciLCJlbmNvZGVVUklDb21wb25lbnQiLCJocmVmIiwiY29tcG9uZW50RGlkTW91bnQiLCJ0cmFja0VudGVyIiwib25CZWZvcmVVbmxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ0cmFja0xlYXZlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlciIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJkZWZhdWx0UHJvcHMiLCJpc0xpdmUiLCJldmVudCIsIm5vd1V0YyIsImhhc0VuZGVkIiwiZW5kX2RhdGUiLCJoYXNTdGFydGVkIiwic3RhcnRfZGF0ZSIsIkNpcmNsZUJ1dHRvbiIsImlzU2NoZWR1bGVkIiwiYWRkVG9TY2hlZHVsZSIsInJlbW92ZUZyb21TY2hlZHVsZSIsImVudGVyQ2xpY2siLCJhbHdheXNTaG93RW50ZXIiLCJpc0xpdmVOb3ciLCJidXR0b25DbGFzcyIsImljb25DbGFzcyIsIm9uQ2xpY2siLCJoYW5kbGVDbGljayIsImV2IiwiYWN0aW9uIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJlbnRlciIsImFkZGVkIiwiYWRkIiwiY2lyY2xlQnV0dG9uIiwib2JqZWN0IiwiYm9vbCIsImZ1bmMiLCJDbG9jayIsImNvbnN0cnVjdG9yIiwicmVzcG9uc2UiLCJmZXRjaCIsImNhdGNoIiwiZXJyIiwianNvbiIsInRpbWVzdGFtcCIsInN0YXRlIiwib25UaWNrIiwic2V0U3RhdGUiLCJmcmFnbWVudFBhcnNlciIsIkZyYWdtZW50UGFyc2VyIiwiaW50ZXJ2YWwiLCJ0aW1lem9uZSIsIm5vdyIsIm5vd1FTIiwiZ2V0UGFyYW0iLCJtb21lbnRRUyIsIm1vbWVudCIsInR6IiwiaXNWYWxpZCIsInZhbHVlT2YiLCJsb2NhbCIsInVuaXgiLCJzZXJ2ZXJUaW1lIiwiZ2V0U2VydmVyVGltZSIsImxvY2FsQWZ0ZXIiLCJzZXRJbnRlcnZhbCIsInRpY2siLCJjbGVhckludGVydmFsIiwibWFyZ2luVG9wIiwiZm9ybWF0IiwiRXhjbHVzaXZlIiwic2hvd0ZpZWxkIiwiYmluZCIsIm5hbWUiLCJleGNsdXNpdmVTZWN0aW9ucyIsIkVYQ0xVU0lWRV9TRUNUSU9OUyIsImluY2x1ZGVzIiwiRXh0cmFRdWVzdGlvbnNGb3JtIiwiZXh0cmFRdWVzdGlvbnMiLCJ1c2VyQW5zd2VycyIsIm9uQW5zd2VyQ2hhbmdlcyIsImNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lIiwicXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZSIsImZvcm1SZWYiLCJyZWFkT25seSIsImRlYnVnIiwiYnV0dG9uVGV4dCIsInN1Ym1pdCIsInF1ZXN0aW9uUmVmIiwidXNlUmVmIiwiYW5zd2VycyIsInNldEFuc3dlcnMiLCJ1c2VTdGF0ZSIsImZvcm1FcnJvcnMiLCJzZXRGb3JtRXJyb3JzIiwidXNlRWZmZWN0IiwiZm9ybWF0VXNlckFuc3dlcnMiLCJxcyIsIlF1ZXN0aW9uc1NldCIsImZvcm1hdEFuc3dlcnMiLCJDb25kaXRpb24iLCJ3aGVuIiwicnVsZSIsInZhbHVlIiwiaW5wdXQiLCJjaGVja1Zpc2liaWxpdHkiLCJjaGVja1J1bGUiLCJFcnJvciIsImVycm9yIiwidmFsdWVzIiwiYW5zd2VyX3ZhbHVlcyIsIkFycmF5IiwiaXNBcnJheSIsInJlcyIsImFud2VyX3ZhbHVlc19vcGVyYXRvciIsImZvckVhY2giLCJ2IiwicGFyc2VJbnQiLCJ0b1N0cmluZyIsInJ1bGVSZXN1bHQiLCJ2aXNpYmlsaXR5IiwidmlzaWJpbGl0eV9jb25kaXRpb24iLCJjdXJyZW50Iiwic3ViX3F1ZXN0aW9uIiwiaWQiLCJyZW5kZXJRdWVzdGlvbiIsInEiLCJxdWVzdGlvblZhbHVlcyIsImVsIiwibWFuZGF0b3J5IiwibGFiZWwiLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJvbkNoYW5nZSIsInBsYWNlaG9sZGVyIiwic3ViX3F1ZXN0aW9uX3J1bGVzIiwibWFwIiwiciIsInZhbCIsImlzVmlzaWJsZSIsInZhbGlkYXRlUXVlc3Rpb24iLCJlcnJvcnMiLCJoYXNPd25Qcm9wZXJ0eSIsIm9uU3VibWl0IiwidmFsaWRhdGUiLCJPYmplY3QiLCJrZXlzIiwiaGFuZGxlU3VibWl0IiwiZm9ybSIsInN1Ym1pdHRpbmciLCJwcmlzdGluZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcnJheSIsIm9uZU9mVHlwZSIsInNoYXBlIiwiYW55IiwiUnN2cEZvcm0iLCJxdWVzdGlvbnMiLCJxdWVzdGlvbl9pZCIsImhhbmRsZUNoYW5nZSIsImhhc0Vycm9ycyIsImZpbmQiLCJhIiwiY2xhc3NfbmFtZSIsImlzX2NvdW50cnlfc2VsZWN0b3IiLCJpc19tdWx0aXNlbGVjdCIsImVtcHR5X3N0cmluZyIsInRhcmdldCIsImFuc3dlciIsImZpZWxkIiwiaXNfbWFuZGF0b3J5IiwiU2ltcGxlRm9ybSIsImVudGl0eSIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsInNuYXBzaG90Iiwic2Nyb2xsVG9FcnJvciIsInNoYWxsb3dFcXVhbCIsImlzRW1wdHkiLCJjaGVja2VkIiwiY3JlYXRlRmllbGQiLCJmaWVsZHMiLCJmIiwidHJhbnNsYXRlIiwib3JpZ2luYWxIYXNoIiwiaGFzaCIsImNvbnZlcnRUb0hhc2giLCJzdHJIYXNoIiwic3Vic3RyIiwidG9Mb3dlckNhc2UiLCJwYXJhbXMiLCJwYXJhbSIsInRyaW0iLCJjbGVhclBhcmFtcyIsImtleSIsImdldFBhcmFtcyIsImRlbGV0ZVBhcmFtIiwiZGVsZXRlUGFyYW1zIiwic2V0UGFyYW0iLCJzZXJpYWxpemUiLCJGcmVlVGV4dFNlYXJjaCIsIm9uU2VhcmNoQ2xpY2siLCJvbkNsZWFyQ2xpY2siLCJvbktleVByZXNzZWQiLCJkb0ZpbHRlcmluZyIsInRlcm0iLCJvblNlYXJjaCIsImNvZGUiLCJrZXlDb2RlIiwid2hpY2giLCJNQVAiLCJkZWZhdWx0Wm9vbSIsImRlZmF1bHRDZW50ZXIiLCJsYXQiLCJsbmciLCJvcHRpb25zIiwibWluWm9vbSIsIm1heFpvb20iLCJHb29nbGVNYXBXcmFwcGVyIiwid2l0aEdvb2dsZU1hcCIsIm9uTWFwTG9hZCIsInpvb20iLCJjZW50ZXIiLCJvbk1hcENoYW5nZSIsIm9uTWFwQ2xpY2siLCJzaG93TWFya2VycyIsIm1hcmtlcnMiLCJtYXJrZXIiLCJvblRvZ2dsZUluZm9XaW5kb3ciLCJvbk1hcmtlckRyYWciLCJkcmFnZ2FibGUiLCJpc0luZm9XaW5kb3dPcGVuIiwiR01hcCIsImhhbmRsZU1hcExvYWQiLCJoYW5kbGVNYXBDaGFuZ2UiLCJoYW5kbGVNYXJrZXJEcmFnIiwiaGFuZGxlTWFwQ2xpY2siLCJuZXdfbWFya2VycyIsImFycmF5c0VxdWFsIiwib2xkX21hcmtlcnNfc3RyIiwibSIsInNvcnQiLCJqb2luIiwibmV3X21hcmtlcnNfc3RyIiwibWFya2VyQm91bmRzIiwiZ29vZ2xlIiwibWFwcyIsIkxhdExuZ0JvdW5kcyIsIm1hcmtlcl9sb2MiLCJMYXRMbmciLCJleHRlbmQiLCJfbWFwQ29tcG9uZW50IiwiZml0Qm91bmRzIiwidmlzaWJsZV9tYXJrZXJzIiwiZmlsdGVyIiwiZ2V0Qm91bmRzIiwiY29udGFpbnMiLCJvbkNoYW5nZUNhbGxiYWNrIiwiaGFuZGxlTWFya2VyQ2xpY2siLCJtYXJrZXJfaWQiLCJpc19vcGVuIiwib25NYXJrZXJEcmFnZ2VkIiwibGF0TG5nIiwiQWNjZXNzTGV2ZWxzSW5wdXQiLCJnZXRBY2Nlc3NMZXZlbHMiLCJnZXRPcHRpb25WYWx1ZSIsImdldE9wdGlvbkxhYmVsIiwiYWNjZXNzTGV2ZWwiLCJjYWxsYmFjayIsIlByb21pc2UiLCJyZXNvbHZlIiwicXVlcnlBY2Nlc3NMZXZlbHMiLCJtdWx0aSIsInJlc3QiLCJpc011bHRpIiwiaGFzX2Vycm9yIiwiQWN0aW9uRHJvcGRvd24iLCJhY3Rpb25MYWJlbCIsInNtYWxsRGRsIiwic21hbGxCdG4iLCJ0aGVWYWx1ZSIsIm9wdCIsIkNoZWNrYm94TGlzdCIsIm90aGVyVmFsdWUiLCJvcCIsIm90aGVyQ2hlY2tlZCIsImhhbmRsZU90aGVyQ0JDaGFuZ2UiLCJvcHRpb25WYWx1ZXMiLCJ0aGVWYWwiLCJpc05hTiIsInB1c2giLCJkaXNhYmxlZCIsImlubGluZSIsImh0bWwiLCJhbGxvd090aGVyIiwiaXNEaXNhYmxlZCIsInN0eWxlIiwicGFkZGluZ0xlZnQiLCJtYXJnaW5MZWZ0IiwiZmxvYXQiLCJDb21wYW55SW5wdXQiLCJoYW5kbGVOZXciLCJnZXRDb21wYW5pZXMiLCJ0cmFuc2xhdGVWYWx1ZSIsIm5ld1ZhbHVlIiwib25DcmVhdGUiLCJ0cmFuc2xhdGVPcHRpb25zIiwibmV3T3B0aW9ucyIsImMiLCJxdWVyeUNvbXBhbmllcyIsImFsbG93Q3JlYXRlIiwiQXN5bmNDb21wb25lbnQiLCJBc3luY0NyZWF0YWJsZVNlbGVjdCIsIkFzeW5jU2VsZWN0IiwiQ291bnRyeURyb3Bkb3duIiwic2V0T3B0aW9ucyIsImFib3J0Q29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImdldENvdW50cnlMaXN0Iiwic2lnbmFsIiwiYWJvcnQiLCJjb3VudHJ5TGlzdCIsImlzb19jb2RlIiwiQ291bnRyeUlucHV0IiwiRGF0ZVRpbWVQaWNrZXIiLCJpc1ZhbGlkRGF0ZSIsImRhdGUiLCJpc01vbWVudCIsImN1cnJlbnREYXRlIiwic2VsZWN0ZWREYXRlIiwidmFsaWRhdGlvbiIsImFmdGVyIiwiYmVmb3JlIiwiaXNCZWZvcmUiLCJpc0FmdGVyIiwiYWZ0ZXJEYXRlIiwic3VidHJhY3QiLCJiZWZvcmVEYXRlIiwiaW5wdXRQcm9wcyIsImlucHV0RGlzYWJsZWQiLCJ0aW1lIiwiYXV0b0NvbXBsZXRlIiwiRHJvcGRvd24iLCJzZWxlY3Rpb24iLCJjbGVhcmFibGUiLCJvdmVycmlkZUNTUyIsImlzQ2xlYXJhYmxlIiwic2VsZWN0Q2xhc3NOYW1lIiwic2VsZWN0U3R5bGVzIiwibWVudSIsIlRleHRFZGl0b3IiLCJSaWNoVGV4dEVkaXRvciIsImRlZmF1bHQiLCJlZGl0b3JWYWx1ZSIsImNyZWF0ZUVtcHR5VmFsdWUiLCJjdXJyZW50VmFsdWUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJzZXRDb250ZW50RnJvbVN0cmluZyIsIm9sZEVkaXRvclZhbHVlIiwib2xkQ29udGVudFN0YXRlIiwiZ2V0RWRpdG9yU3RhdGUiLCJnZXRDdXJyZW50Q29udGVudCIsIm5ld0NvbnRlbnRTdGF0ZSIsInN0cmluZ1ZhbHVlIiwiRXZlbnRJbnB1dCIsImdldEV2ZW50cyIsInN1bW1pdCIsIm9ubHlQdWJsaXNoZWQiLCJxdWVyeUV2ZW50cyIsIm9wdGlvbiIsInRpdGxlIiwiRnJlZU11bHRpVGV4dElucHV0IiwiaW5wdXRWYWx1ZSIsImhhbmRsZUlucHV0Q2hhbmdlIiwiaGFuZGxlS2V5RG93biIsImxpbWl0IiwiRHJvcGRvd25JbmRpY2F0b3IiLCJHcm91cElucHV0IiwiZ2V0R3JvdXBzIiwicXVlcnlHcm91cHMiLCJPcHRpb25Hcm91cCIsImkiLCJHcm91cGVkRHJvcGRvd24iLCJMYW5ndWFnZUlucHV0Iiwic2hvdWxkVXNlSWQiLCJnZXRMYW5ndWFnZUxpc3QiLCJsYW5ndWFnZUxpc3QiLCJsIiwiTWVtYmVySW5wdXQiLCJnZXRNZW1iZXJzIiwibWVtYmVyIiwiZmlyc3RfbmFtZSIsImxhc3RfbmFtZSIsInF1ZXJ5TWVtYmVycyIsIk9yZ2FuaXphdGlvbklucHV0IiwiZ2V0T3JnYW5pemF0aW9ucyIsIm9yZyIsInF1ZXJ5T3JnYW5pemF0aW9ucyIsIlJhZGlvTGlzdCIsImdldExhYmVsIiwic2ltcGxlIiwiZGVzY3JpcHRpb24iLCJSZWdpc3RyYXRpb25Db21wYW55SW5wdXQiLCJvbkVycm9yIiwic2V0VGhlVmFsdWUiLCJmcmVlSW5wdXQiLCJzZXRGcmVlSW5wdXQiLCJzZXRJbnB1dFZhbHVlIiwiaXNNdWx0aU9wdGlvbmFsIiwic2V0SXNNdWx0aU9wdGlvbmFsIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsImV2ZW50VmFsdWUiLCJuZXdWYWx1ZVN0YXRlIiwiaGFuZGxlSW5wdXRDbGVhciIsImV2dCIsIm90aGVyT3B0aW9uIiwicXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMiLCJwYWRkaW5nUmlnaHQiLCJTcGVha2VySW5wdXQiLCJnZXRTcGVha2VycyIsInNwZWFrZXJJZCIsImhpc3RvcnkiLCJxdWVyeVNwZWFrZXJzIiwic3BlYWtlciIsIk11bHRpVmFsdWVMYWJlbCIsImRhdGEiLCJzIiwiU3BvbnNvcklucHV0IiwiZ2V0U3BvbnNvcnMiLCJxdWVyeVNwb25zb3JzIiwiY29tcGFueSIsInNwb25zb3JzaGlwIiwiU3VtbWl0SW5wdXQiLCJnZXRTdW1taXRzIiwicXVlcnlTdW1taXRzIiwiVGFnSW5wdXQiLCJ0IiwidGFnIiwiZ2V0VGFncyIsIm5leHRWYWx1ZSIsInF1ZXJ5VGFncyIsIm9yZGVyZWRUYWdzIiwiYiIsIklucHV0IiwiVGV4dEFyZWEiLCJUaWNrZXRUeXBlc0lucHV0IiwiZ2V0VGlja2V0VHlwZXMiLCJ0aWNrZXRUeXBlIiwicXVlcnlUaWNrZXRUeXBlcyIsIkRyb3B6b25lIiwiRHJvcHpvbmVKUyIsImZpbGVzIiwib25VcGxvYWRDb21wbGV0ZSIsImdldERqc0NvbmZpZyIsImRlZmF1bHRzIiwidXJsIiwiY29uZmlnIiwicG9zdFVybCIsImRqc0NvbmZpZyIsImFjY2VwdCIsImZpbGUiLCJkb25lIiwibWF4RmlsZXMiLCJ1cGxvYWRDb3VudCIsImF1dG9EaXNjb3ZlciIsImV2ZW50SGFuZGxlcnMiLCJkcm9wIiwiaW5mbyIsImRyb3B6b25lTm9kZSIsImRyb3B6b25lU2VsZWN0b3IiLCJSZWFjdERPTSIsImZpbmRET01Ob2RlIiwiZHJvcHpvbmUiLCJzZXR1cEV2ZW50cyIsImdldEFjdGl2ZUZpbGVzIiwicXVldWVEZXN0cm95IiwiZGVzdHJveUludGVydmFsIiwiZGVzdHJveSIsImRqc0NvbmZpZ09iaiIsInBvc3RVcmxDb25maWdPYmoiLCJpY29ucyIsInNob3dGaWxldHlwZUljb24iLCJpY29uRmlsZXR5cGVzIiwiZXZlbnRIYW5kbGVyIiwicHJvdG90eXBlIiwiY2FsbCIsIm9uIiwiZmlsZUluRmlsZXMiLCJzcGxpY2UiLCJwcm9ncmVzcyIsImJ5dGVzU2VudCIsInByZXZpZXdFbGVtZW50IiwiZWxlbSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ4aHIiLCJmb3JtRGF0YSIsImFwcGVuZCIsIl90aGlzIiwiZHJvcHpvbmVPbkxvYWQiLCJvbmxvYWQiLCJ1cGxvYWRSZXNwb25zZSIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwib2ZmIiwiSWNvbiIsImZpbGV0eXBlIiwiVXBsb2FkSW5wdXRWMiIsIm9uUmVtb3ZlIiwibWVkaWFUeXBlIiwidGltZU91dCIsImFsbG93ZWRFeHQiLCJhbGxvd2VkX2V4dGVuc2lvbnMiLCJleHQiLCJtYXhTaXplIiwibWF4X3NpemUiLCJjYW5VcGxvYWQiLCJkanNDb25maWdTZXQiLCJwYXJhbU5hbWUiLCJtYXhGaWxlc2l6ZSIsInRpbWVvdXQiLCJjaHVua2luZyIsInJldHJ5Q2h1bmtzIiwicGFyYWxsZWxDaHVua1VwbG9hZHMiLCJhZGRSZW1vdmVMaW5rcyIsImFjY2VwdGVkRmlsZXMiLCJjb21wb25lbnRDb25maWciLCJtZWRpYV90eXBlIiwibWVkaWFfdXBsb2FkIiwicmVtb3ZlZGZpbGUiLCJwcml2YXRlX3VybCIsInB1YmxpY191cmwiLCJmaWxlbmFtZSIsIlVwbG9hZElucHV0Iiwic2hvd19yZW1vdmUiLCJsb2dvX3ByZXZpZXciLCJwcmV2aWV3IiwiZmlsZUhhc1ByZXZpZXciLCJvbkRyb3AiLCJmaWxlUmVqZWN0aW9ucyIsImhhbmRsZVVwbG9hZCIsImhhbmRsZUVycm9yIiwiaGFuZGxlUmVtb3ZlIiwic2hvd1ZlaWwiLCJoaWRlVmVpbCIsImZpbGVOYW1lIiwicGF0dGVybiIsInRlc3QiLCJpY29uIiwiZmlsZV9pY29uIiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsInBkZl9pY29uIiwibW92X2ljb24iLCJtcDRfaWNvbiIsIlJhd0hUTUwiLCJfX2h0bWwiLCJQYW5lbCIsInRoZUlkIiwidGhlQ2xhc3MiLCJBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlIiwiaXNzdWVyIiwiYXVkaWVuY2UiLCJpZF90b2tlbl9pc192YWxpZCIsImVycm9yX2Rlc2NyaXB0aW9uIiwiZmxvdyIsImdldE9BdXRoMkZsb3ciLCJfaW1wbGljaXRGbG93IiwiaWRfdG9rZW4iLCJzZXNzaW9uX3N0YXRlIiwiZXhwaXJlc19pbiIsImV4dHJhY3RIYXNoUGFyYW1zIiwiZG9Mb2dpbiIsImdldEN1cnJlbnRQYXRoTmFtZSIsInZhbGlkYXRlSWRUb2tlbiIsIm9uVXNlckF1dGgiLCJwYXJlbnQiLCJwb3N0TWVzc2FnZSIsIm9yaWdpbiIsIl9jb2RlRmxvdyIsIlVSSSIsImdldEN1cnJlbnRIcmVmIiwicXVlcnkiLCJzZWFyY2giLCJiYWNrVXJsIiwiZW1pdEFjY2Vzc1Rva2VuIiwidGhlbiIsInJlZnJlc2hfdG9rZW4iLCJlcnJvcjIiLCJlcnJvcl9kZXNjcmlwdGlvbjIiLCJSRVNQT05TRV9UWVBFX0lNUExJQ0lUIiwiUkVTUE9OU0VfVFlQRV9DT0RFIiwicGFyc2VRdWVyeSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRQcm9wcyIsIm5leHRTdGF0ZSIsIm5leHRDb250ZXh0IiwiZnJhZ21lbnQiLCJsZW5naHQiLCJidWlsZFF1ZXJ5IiwiX2NhbGxiYWNrIiwiX3JlZGlyZWN0MkVycm9yIiwiU0VUX0xPR0dFRF9VU0VSIiwiTE9HT1VUX1VTRVIiLCJSRVFVRVNUX1VTRVJfSU5GTyIsIlJFQ0VJVkVfVVNFUl9JTkZPIiwiQ0xFQVJfU0VTU0lPTl9TVEFURSIsIlVQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyIsIlNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCIsIlNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQiLCJTRVNTSU9OX1NUQVRFX1NUQVRVU19FUlJPUiIsIlVQREFURV9VU0VSX0lORk8iLCJpZFRva2VuIiwic2Vzc2lvblN0YXRlIiwiZXhwaXJlc0luIiwicmVmcmVzaFRva2VuIiwiZGlzcGF0Y2giLCJzdG9yZUF1dGhJbmZvIiwicGF5bG9hZCIsImRvTG9nb3V0IiwiZ2V0U3RhdGUiLCJnZXRVc2VySW5mbyIsImV4cGFuZCIsImVycm9ySGFuZGxlciIsIkFsbG93ZWRVc2VyR3JvdXBzIiwiZ2V0QWxsb3dlZFVzZXJHcm91cHMiLCJsb2dnZWRVc2VyU3RhdGUiLCJhdXRoRXJyb3JIYW5kbGVyIiwic3RhcnRMb2FkaW5nIiwiZ2V0UmVxdWVzdCIsImNyZWF0ZUFjdGlvbiIsImJ1aWxkQVBJQmFzZVVybCIsInN0b3BMb2FkaW5nIiwiZXJyb3JfbWVzc2FnZSIsInNob3dNZXNzYWdlIiwiaW5pdExvZ091dCIsImFsbG93ZWRHcm91cHMiLCJncm91cHMiLCJncm91cCIsImlkeCIsInVwZGF0ZVVzZXJJbmZvIiwidXBkYXRlZE1lbWJlciIsInVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cyIsIm5ld1N0YXR1cyIsInNlc3Npb25TdGF0ZVN0YXR1cyIsInJlcXVlc3QiLCJsb2NrIiwiTG9jayIsIkdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSIsIk5PTkNFX0xFTiIsIkFDQ0VTU19UT0tFTl9TS0VXX1RJTUUiLCJBVVRIX0lORk8iLCJOT05DRSIsIlBLQ0UiLCJnZXRBdXRoVXJsIiwicHJvbXB0IiwidG9rZW5JZEhpbnQiLCJwcm92aWRlciIsIm9hdXRoMkNsaWVudElkIiwiZ2V0T0F1dGgyQ2xpZW50SWQiLCJyZWRpcmVjdFVyaSIsImdldEF1dGhDYWxsYmFjayIsImJhc2VVcmwiLCJnZXRPQXV0aDJJRFBCYXNlVXJsIiwic2NvcGVzIiwiZ2V0T0F1dGgyU2NvcGVzIiwiZW5jb2RlVVJJIiwibm9uY2UiLCJjcmVhdGVOb25jZSIsInB1dE9uTG9jYWxTdG9yYWdlIiwicGtjZSIsImNyZWF0ZVBLQ0VDb2RlcyIsImNvZGVDaGFsbGVuZ2UiLCJnZXRMb2dvdXRVcmwiLCJwb3N0TG9nT3V0VXJpIiwiZ2V0T3JpZ2luIiwibGVuIiwicG9zc2libGUiLCJjaGFyQXQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJnZXRDdXJyZW50TG9jYXRpb24iLCJkb0xvZ2luQmFzaWNMb2dpbiIsImNvZGVWZXJpZmllciIsImJhc2U2NFVSTEVuY29kZSIsInJhbmRvbUJ5dGVzIiwic2hhMjU2IiwiQnVmZmVyIiwiZnJvbSIsImNyZWF0ZWRBdCIsIkRhdGUiLCJjb2RlUGFpciIsImdldEZyb21Mb2NhbFN0b3JhZ2UiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIm1lc3NhZ2UiLCJjbGVhckFjY2Vzc1Rva2VuIiwicmV0cnlQcm9taXNlIiwiYWNxdWlyZUxvY2siLCJhdXRoSW5mbyIsImdldEF1dGhJbmZvIiwiYWNjZXNzVG9rZW5VcGRhdGVkQXQiLCJyZWxlYXNlTG9jayIsInRpbWVFbGFwc2VkU2VjcyIsInVzZU9BdXRoMlJlZnJlc2hUb2tlbiIsImNsZWFyQXV0aEluZm8iLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJzdGF0dXMiLCJjdXJyZW50TG9jYXRpb24iLCJzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSIsInN0YXR1c1RleHQiLCJmb3JtZXJBdXRoSW5mbyIsInJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UiLCJnZXRJZFRva2VuIiwiT0FVVEgyX0NMSUVOVF9JRCIsIk9BVVRIMl9GTE9XIiwiQm9vbGVhbiIsIk9BVVRIMl9VU0VfUkVGUkVTSF9UT0tFTiIsIklEUF9CQVNFX1VSTCIsIlNDT1BFUyIsInZlcmlmaWVyIiwiSWRUb2tlblZlcmlmaWVyIiwic3RvcmVkTm9uY2UiLCJqd3QiLCJkZWNvZGUiLCJhbGciLCJoZWFkZXIiLCJraWQiLCJhdWQiLCJpc3MiLCJleHAiLCJuYmYiLCJ0bm9uY2UiLCJwYXNzd29yZGxlc3NTdGFydCIsImNvbm5lY3Rpb24iLCJlbWFpbCIsInBob25lX251bWJlciIsInJlcSIsInJlamVjdCIsInBhc3N3b3JkbGVzc0xvZ2luIiwib3RwIiwiQ0hFQ0tfU0VTU0lPTl9JTlRFUlZBTCIsIk9QU2Vzc2lvbkNoZWNrZXIiLCJvcEZyYW1lX3NyYyIsInJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMiLCJyZWNlaXZlTWVzc2FnZSIsInJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkIiwic2V0VGltZXIiLCJjaGVja1Nlc3Npb24iLCJvblNldHVwQ2hlY2tTZXNzaW9uUlAiLCJycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQiLCJvcEZyYW1lIiwicnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lIiwic2V0T1BGcmFtZVJlZiIsImVsZW1lbnQiLCJzZXRDaGVja1Nlc3Npb25TdGF0ZUZyYW1lUmVmIiwiaXNMb2dnZWRVc2VyIiwiZnJhbWUiLCJjb250ZW50RG9jdW1lbnQiLCJyZXN1bHRVcmwiLCJVUkwiLCJ0b0xvY2FsZVN0cmluZyIsImNsaWVudElkIiwidGFyZ2V0T3JpZ2luIiwiaWRwQmFzZVVybCIsImNvbnRlbnRXaW5kb3ciLCJzZXNzaW9uQ2hlY2tFbmRwb2ludCIsIlN0cmluZyIsImJvcmRlciIsIm1hcFN0YXRlVG9Qcm9wcyIsImNvbm5lY3QiLCJTaW1wbGVMaW5rTGlzdCIsImdldE9wdGlvbnMiLCJoYW5kbGVMaW5rIiwiZmlsdGVyT3B0aW9uIiwiZ2V0TmV3T3B0aW9uRGF0YSIsImlzVmFsaWROZXdPcHRpb24iLCJkZWZhdWx0T3B0aW9ucyIsImFjdGlvbnMiLCJvcHRpb25MYWJlbCIsInNlbGVjdFZhbHVlIiwic2VsZWN0T3B0aW9ucyIsImxhYmVsS2V5Iiwib3B0aW9uRm91bmQiLCJvbkNyZWF0ZVRhZyIsImNhbmRpZGF0ZSIsImFsbG93RHVwbGljYXRlcyIsImNvbHVtbnMiLCJkaXNhYmxlZEFkZCIsInZhbHVlS2V5IiwidGFibGVPcHRpb25zIiwiZGVsZXRlIiwiZWRpdCIsImN1c3RvbSIsIml0ZW1BIiwic29ydENvbCIsIml0ZW1CIiwiU3VtbWl0RHJvcGRvd24iLCJzdW1taXRWYWx1ZSIsInN1bW1pdHMiLCJhY3Rpb25DbGFzcyIsInN1bW1pdE9wdGlvbnMiLCJiaWdDbGFzcyIsIkVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCIsImlzX2VkaXRpbmciLCJvbkRlbGV0ZSIsIm9uU2F2ZSIsInNhdmUiLCJvbkVkaXQiLCJvbkNhbmNlbCIsImNhbmNlbCIsImNvbFdpZHRoIiwiY3JlYXRlUm93Iiwicm93Iiwic2hvdWxkVXNlVGV4dEFyZWEiLCJhY3Rpb25fYnV0dG9ucyIsImNlbGxzIiwiY29sIiwiY29sdW1uS2V5IiwiaXNfZWRpdCIsImNyZWF0ZU5ld1JvdyIsIm5ld19yb3ciLCJhZGROZXciLCJjZWxsX3ZhbHVlIiwiRWRpdGFibGVUYWJsZSIsInJvd3MiLCJlZGl0Um93Iiwic2F2ZVJvdyIsImRlbGV0ZUNsaWNrIiwib25DaGFuZ2VDZWxsIiwiZWRpdFJvd0NhbmNlbCIsInNhdmVOZXdSb3ciLCJoYW5kbGVOZXdDaGFuZ2UiLCJvbkNoYW5nZU5ld0NlbGwiLCJlZGl0aW5nX3JvdyIsIm5vQWxlcnQiLCJTd2FsIiwiZmlyZSIsInRleHQiLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY29uZmlybUJ1dHRvblRleHQiLCJyZXN1bHQiLCJyb3dJZHgiLCJmaW5kSW5kZXgiLCJ0YWJsZUNsYXNzIiwidGV4dEFyZWEiLCJ3YXJuIiwiRWRpdGFibGVUYWJsZUNlbGwiLCJFZGl0YWJsZVRhYmxlSGVhZGluZyIsIkVkaXRhYmxlVGFibGVSb3ciLCJldmVuIiwiU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwiLCJoYW5kbGVBY3Rpb24iLCJzaG91bGREaXNwbGF5QWN0aW9uIiwidG9vbHRpcCIsInNvcnRGdW5jIiwic29ydGFibGUiLCJzb3J0RGlyIiwiZ2V0U29ydERpciIsImNvbHVtbkluZGV4IiwiU2VsZWN0YWJsZVRhYmxlIiwic2VsZWN0ZWRJZHMiLCJvblNlbGVjdGVkQWxsIiwic2VsZWN0ZWRBbGwiLCJvblNvcnQiLCJhY3Rpb25zSGVhZGVyIiwiU2VsZWN0YWJsZVRhYmxlQ2VsbCIsImlzVmFsaWRFbGVtZW50IiwiU2VsZWN0YWJsZVRhYmxlSGVhZGluZyIsImhhbmRsZVNvcnQiLCJnZXRTb3J0Q2xhc3MiLCJTZWxlY3RhYmxlVGFibGVSb3ciLCJoYW5kbGVFZGl0IiwiaGFuZGxlU2VsZWN0Iiwib25TZWxlY3RlZCIsImNhbkVkaXQiLCJyb3dDbGFzcyIsIlNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCIsIlNvcnRhYmxlVGFibGUiLCJtb3ZlUm93IiwiZHJvcFJvdyIsImRyYWdJbmRleCIsImhvdmVySW5kZXgiLCJkcmFnUm93IiwidXBkYXRlIiwiJHNwbGljZSIsImluZGV4Iiwib3JkZXJGaWVsZCIsIm5ld09yZGVyIiwiJHNldCIsImRyb3BDYWxsYmFjayIsImFycmF5T2YiLCJEcmFnRHJvcENvbnRleHQiLCJIVE1MNUJhY2tlbmQiLCJTb3J0YWJsZVRhYmxlQ2VsbCIsIlNvcnRhYmxlVGFibGVIZWFkaW5nIiwicGFkZGluZyIsIm1hcmdpbkJvdHRvbSIsInJvd1NvdXJjZSIsImJlZ2luRHJhZyIsImVuZERyYWciLCJtb25pdG9yIiwiZGlkRHJvcCIsImRyb3BDYXJkIiwicm93VGFyZ2V0IiwiaG92ZXIiLCJjb21wb25lbnQiLCJnZXRJdGVtIiwiaG92ZXJCb3VuZGluZ1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJob3Zlck1pZGRsZVkiLCJjbGllbnRPZmZzZXQiLCJnZXRDbGllbnRPZmZzZXQiLCJob3ZlckNsaWVudFkiLCJ5IiwibW92ZUNhcmQiLCJTb3J0YWJsZVRhYmxlUm93IiwiaXNEcmFnZ2luZyIsImNvbm5lY3REcmFnU291cmNlIiwiY29ubmVjdERyb3BUYXJnZXQiLCJEcmFnU291cmNlIiwiZHJhZ1NvdXJjZSIsIkRyb3BUYXJnZXQiLCJkcm9wVGFyZ2V0IiwiQWN0aW9uc1RhYmxlQ2VsbCIsIlRhYmxlIiwiVGFibGVDZWxsIiwiVGFibGVIZWFkaW5nIiwiVGFibGVSb3ciLCJ1c2VGaXRUZXh0IiwibWluU2l6ZSIsIk1JTl9GT05UX1NJWkUiLCJNQVhfRk9OVF9TSVpFIiwiUkVTT0xVVElPTiIsInJlZiIsImZvbnRTaXplUHJldiIsImZvbnRTaXplTWF4IiwiZm9udFNpemVNaW4iLCJpc0RvbmUiLCJhYnMiLCJpc092ZXJmbG93Iiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsV2lkdGgiLCJvZmZzZXRXaWR0aCIsImlzQXNjIiwiZm9udFNpemVOZXciLCJkZWx0YSIsIm5ld01heCIsIm5ld01pbiIsIm1pbiIsIm1heCIsImxpbmVIZWlnaHQiLCJZb3V0dWJlVmlkZW9Db21wb25lbnQiLCJ2aWRlb1NyY1VSTCIsInZpZGVvVGl0bGUiLCJMaXZlVmlkZW9QbGF5ZXIiLCJwbGF5ZXIiLCJ2aWRlb2pzIiwidmlkZW9Ob2RlIiwiZGlzcG9zZSIsIm5vZGUiLCJWaWRlb1N0cmVhbSIsImxheW91dCIsImNoZWNrTGl2ZVZpZGVvIiwiaXNMaXZlVmlkZW8iLCJtYXRjaCIsInZpZGVvSnNPcHRpb25zIiwiYXV0b3BsYXkiLCJjb250cm9scyIsImZsdWlkIiwic291cmNlcyIsInNyYyIsIkdFTkVSSUNfRVJST1IiLCJSRVNFVF9MT0FESU5HIiwiU1RBUlRfTE9BRElORyIsIlNUT1BfTE9BRElORyIsIlZBTElEQVRFIiwiQ0xFQVJfTUVTU0FHRSIsIlNIT1dfTUVTU0FHRSIsInJlc2V0TG9hZGluZyIsInhocnMiLCJzY2hlZHVsZSIsImlzT2JqZWN0RW1wdHkiLCJvYmoiLCJtc2ciLCJjbGVhcmluZ19zZXNzaW9uX3N0YXRlIiwiaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSIsImVudHJpZXMiLCJyZXF1ZXN0QWN0aW9uQ3JlYXRvciIsInJlY2VpdmVBY3Rpb25DcmVhdG9yIiwiZW5kcG9pbnQiLCJkZWZhdWx0RXJyb3JIYW5kbGVyIiwicmVxdWVzdEFjdGlvblBheWxvYWQiLCJnZXQiLCJkZWFkbGluZSIsInJlc3BvbnNlSGFuZGxlciIsInB1dFJlcXVlc3QiLCJkZWxldGVSZXF1ZXN0IiwicG9zdFJlcXVlc3QiLCJzZXQiLCJwb3N0RmlsZSIsImZpbGVNZXRhZGF0YSIsImF0dGFjaCIsInB1dEZpbGUiLCJvayIsImZldGNoRXJyb3JIYW5kbGVyIiwiZmV0Y2hSZXNwb25zZUhhbmRsZXIiLCJzZXR0aW5ncyIsInNob3dTdWNjZXNzTWVzc2FnZSIsImRvd25sb2FkRmlsZUJ5Q29udGVudCIsImNvbnRlbnQiLCJtaW1lIiwibGluayIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInRleHRDb250ZW50IiwiZG93bmxvYWQiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJnZXRDU1YiLCJjc3YiLCJnZXRSYXdDU1YiLCJlc2NhcGVGaWx0ZXJWYWx1ZSIsImZpbmRFbGVtZW50UG9zIiwiY3VydG9wIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0VG9wIiwiZXBvY2hUb01vbWVudCIsImF0aW1lIiwiZXBvY2hUb01vbWVudFRpbWVab25lIiwidGltZV96b25lIiwiZm9ybWF0RXBvY2giLCJvYmplY3RUb1F1ZXJ5U3RyaW5nIiwic3RyIiwiZ2V0QmFja1VSTCIsInBhdGhuYW1lIiwiQUxMT1dFRF9VU0VSX0dST1VQUyIsInJlbGF0aXZlVXJsIiwiQVBJX0JBU0VfVVJMIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInJlbW92ZUl0IiwicmVtb3ZlSXRlbSIsImxhbmd1YWdlcyIsInVzZXJMYW5ndWFnZSIsImZpcnN0RXJyb3IiLCJmaXJzdE5vZGUiLCJnZXRFbGVtZW50QnlJZCIsInNjcm9sbFRvIiwib2JqZWN0MSIsIm9iamVjdDIiLCJrZXlzMSIsImtleXMyIiwiYTEiLCJhMiIsImV2ZXJ5IiwibyIsImJ1ZmZlciIsImNyZWF0ZUhhc2giLCJkaWdlc3QiLCJjYiIsIm1heE51bWJlck9mUmV0cmllcyIsIlJFQ0VJVkVfQ09VTlRSSUVTIiwiY2FsbERlbGF5IiwiXyIsImRlYm91bmNlIiwiZmlsdGVycyIsImFwaVVybCIsInF1ZXJ5VHJhY2tzIiwicXVlcnlUcmFja0dyb3VwcyIsImFkZFF1ZXJ5IiwiZ2VvY29kZXIiLCJnZW9Db2RlQWRkcmVzcyIsImFkZHJlc3MiLCJHZW9jb2RlciIsImdlb2NvZGUiLCJyZXN1bHRzIiwiR2VvY29kZXJTdGF0dXMiLCJPSyIsImdlb0NvZGVMYXRMbmciLCJsYXRsbmciLCJwYXJzZUZsb2F0IiwiQ2hlY2tCb3hRdWVzdGlvblR5cGUiLCJDb21ib0JveFF1ZXN0aW9uVHlwZSIsIkNoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSIsIlJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSIsIkFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlIiwiQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kIiwiQW5zd2VyVmFsdWVzT3BlcmF0b3JfT3IiLCJWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsIiwiVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbCIsIlZpc2liaWxpdHlfVmlzaWJsZSIsIk1haW5RdWVzdGlvbkNsYXNzVHlwZSIsInF1ZXN0aW9uQnlOYW1lIiwicXVlc3Rpb25CeUlkIiwicnVsZXMiLCJfcGFyc2VRdWVzdGlvbiIsImF2IiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiaW5pdGlhbENvbmRpdGlvbiIsImFuc3dlcl92YWx1ZXNfb3BlcmF0b3IiLCJwYXJlbnRRdWVzdGlvbkFuc3dlciIsIl9nZXRBbnN3ZXJGb3IiLCJwYXJlbnRfcXVlc3Rpb25faWQiLCJhbnN3ZXJWYWx1ZSIsIl9hbnN3ZXJDb250YWlucyIsImNsYXNzIiwiX2hhc1ZhbHVlIiwiX2FsbG93c1ZhbHVlcyIsIl9hbGxvd3NWYWx1ZSIsInJ1bGVJZCIsInBhcmVudF9ydWxlcyIsIl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSIsIl9pc0Fuc3dlcmVkIiwiX2NoZWNrUXVlc3Rpb24iLCJxdWVzdGlvbiIsInVzZXJBbnN3ZXIiLCJvcmlnaW5hbEFuc3dlcnMiLCJhbnNWYWwiLCJyZXMxIiwiX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyIiwiX3BhcnNlUXVlc3Rpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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bUM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEsNkM7Ozs7Ozs7Ozs7O0FDQUEsZ0Q7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsNEM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7O0FDQUEsMkM7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEsb0Q7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEsMkM7Ozs7Ozs7Ozs7O0FDQUEsNkM7Ozs7Ozs7Ozs7O0FDQUEsOEM7Ozs7Ozs7Ozs7O0FDQUEsb0Y7Ozs7Ozs7Ozs7O0FDQUEsd0M7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEseUM7Ozs7Ozs7Ozs7O0FDQUEsbUQ7Ozs7Ozs7Ozs7O0FDQUEsNEQ7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEsd0Q7Ozs7Ozs7Ozs7O0FDQUEsMEM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsd0M7Ozs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7O0FDQUEscUM7Ozs7Ozs7Ozs7O0FDQUEsdUQiLCJmaWxlIjoiY29tcG9uZW50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9jb21wb25lbnRzLmpzXCIpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QnO1xuXG5pbXBvcnQgeyBBamF4TG9hZGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL2FqYXhsb2FkZXInO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi9jb21wb25lbnRzL3Jhdy1odG1sL2luZGV4JztcbmltcG9ydCBGcmVlVGV4dFNlYXJjaCBmcm9tICcuL2NvbXBvbmVudHMvZnJlZS10ZXh0LXNlYXJjaC9pbmRleCc7XG5pbXBvcnQgR01hcCBmcm9tICcuL2NvbXBvbmVudHMvZ29vZ2xlLW1hcC9pbmRleCc7XG5pbXBvcnQgRGF0ZVRpbWVQaWNrZXIgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9kYXRldGltZXBpY2tlci9pbmRleCdcbmltcG9ydCBHcm91cGVkRHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9ncm91cGVkLWRyb3Bkb3duL2luZGV4J1xuaW1wb3J0IFVwbG9hZElucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L2luZGV4J1xuaW1wb3J0IFVwbG9hZElucHV0VjIgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaW5kZXgnXG5pbXBvcnQgQ29tcGFueUlucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvY29tcGFueS1pbnB1dCdcbmltcG9ydCBTcG9uc29ySW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9zcG9uc29yLWlucHV0J1xuaW1wb3J0IE9yZ2FuaXphdGlvbklucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvb3JnYW5pemF0aW9uLWlucHV0J1xuaW1wb3J0IENvdW50cnlEcm9wZG93biBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2NvdW50cnktZHJvcGRvd24nXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9kcm9wZG93bidcbmltcG9ydCBUZXh0RWRpdG9yIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZWRpdG9yLWlucHV0J1xuaW1wb3J0IFRleHRBcmVhIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGV4dGFyZWEtaW5wdXQnXG5pbXBvcnQgRXZlbnRJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2V2ZW50LWlucHV0J1xuaW1wb3J0IEdyb3VwSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9ncm91cC1pbnB1dCdcbmltcG9ydCBNZW1iZXJJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL21lbWJlci1pbnB1dCdcbmltcG9ydCBTdW1taXRJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3N1bW1pdC1pbnB1dCdcbmltcG9ydCBTcGVha2VySW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9zcGVha2VyLWlucHV0J1xuaW1wb3J0IFRhZ0lucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGFnLWlucHV0J1xuaW1wb3J0IElucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dCdcbmltcG9ydCBQYW5lbCBmcm9tICcuL2NvbXBvbmVudHMvc2VjdGlvbnMvcGFuZWwnXG5pbXBvcnQgU2ltcGxlTGlua0xpc3QgZnJvbSAnLi9jb21wb25lbnRzL3NpbXBsZS1saW5rLWxpc3QvaW5kZXgnXG5pbXBvcnQgU3VtbWl0RHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL3N1bW1pdC1kcm9wZG93bi9pbmRleCdcbmltcG9ydCBUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvVGFibGUnXG5pbXBvcnQgU29ydGFibGVUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZSdcbmltcG9ydCBFZGl0YWJsZVRhYmxlIGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlJ1xuaW1wb3J0IFNlbGVjdGFibGVUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGUnXG5pbXBvcnQgU2ltcGxlRm9ybSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybXMvc2ltcGxlLWZvcm0nXG5pbXBvcnQgUnN2cEZvcm0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1zL3JzdnAtZm9ybSc7XG5pbXBvcnQgUmFkaW9MaXN0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvcmFkaW8tbGlzdCdcbmltcG9ydCBDaGVja2JveExpc3QgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9jaGVja2JveC1saXN0J1xuaW1wb3J0IEFjdGlvbkRyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvYWN0aW9uLWRyb3Bkb3duJ1xuaW1wb3J0IENvdW50cnlJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2NvdW50cnktaW5wdXQnXG5pbXBvcnQgTGFuZ3VhZ2VJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2xhbmd1YWdlLWlucHV0J1xuaW1wb3J0IEZyZWVNdWx0aVRleHRJbnB1dCBmcm9tIFwiLi9jb21wb25lbnRzL2lucHV0cy9mcmVlLW11bHRpLXRleHQtaW5wdXRcIjtcbmltcG9ydCBPUFNlc3Npb25DaGVja2VyIGZyb20gXCIuL2NvbXBvbmVudHMvc2VjdXJpdHkvc2Vzc2lvbi1jaGVja2VyL29wLXNlc3Npb24tY2hlY2tlclwiO1xuaW1wb3J0IEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGUgZnJvbSAgXCIuL2NvbXBvbmVudHMvc2VjdXJpdHkvYWJzdHJhY3QtYXV0aC1jYWxsYmFjay1yb3V0ZVwiO1xuaW1wb3J0IEV4Y2x1c2l2ZSBmcm9tIFwiLi9jb21wb25lbnRzL2V4Y2x1c2l2ZS13cmFwcGVyXCI7XG5pbXBvcnQgRnJhZ21lbnRQYXJzZXIgZnJvbSBcIi4vY29tcG9uZW50cy9mcmFnbWVuLXBhcnNlclwiO1xuaW1wb3J0IENsb2NrIGZyb20gXCIuL2NvbXBvbmVudHMvY2xvY2tcIjtcbmltcG9ydCBDaXJjbGVCdXR0b24gZnJvbSBcIi4vY29tcG9uZW50cy9jaXJjbGUtYnV0dG9uXCI7XG5pbXBvcnQgVmlkZW9TdHJlYW0gZnJvbSBcIi4vY29tcG9uZW50cy92aWRlby1zdHJlYW1cIjtcbmltcG9ydCBBdHRlbmRhbmNlVHJhY2tlciBmcm9tIFwiLi9jb21wb25lbnRzL2F0dGVuZGFuY2UtdHJhY2tlclwiO1xuaW1wb3J0IHtnZXRDdXJyZW50VXNlckxhbmd1YWdlfSBmcm9tICcuL3V0aWxzL21ldGhvZHMnO1xuaW1wb3J0IHVzZUZpdFRleHQgZnJvbSAnLi9jb21wb25lbnRzL3VzZS1maXQtdGV4dCc7XG5pbXBvcnQgQWNjZXNzTGV2ZWxzSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9hY2Nlc3MtbGV2ZWxzLWlucHV0JztcbmltcG9ydCBSZWdpc3RyYXRpb25Db21wYW55SW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9yZWdpc3RyYXRpb24tY29tcGFueS1pbnB1dCc7XG5pbXBvcnQgVGlja2V0VHlwZXNJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3RpY2tldC10eXBlcy1pbnB1dCc7XG5pbXBvcnQgRXh0cmFRdWVzdGlvbnNGb3JtIGZyb20gJy4vY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMnO1xuXG5sZXQgbGFuZ3VhZ2UgPSBnZXRDdXJyZW50VXNlckxhbmd1YWdlKCk7XG5cbi8vIGxhbmd1YWdlIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGVzLUVTIG9yIGVzX0VTXG4vLyBIb3dldmVyIHdlIHN0b3JlIG91ciBmaWxlcyB3aXRoIGZvcm1hdCBlcy5qc29uIG9yIGVuLmpzb25cbi8vIHRoZXJlZm9yZSByZXRyaWV2ZSBvbmx5IHRoZSBmaXJzdCAyIGRpZ2l0c1xuXG5pZiAobGFuZ3VhZ2UubGVuZ3RoID4gMikge1xuICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3BsaXQoXCItXCIpWzBdO1xuICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3BsaXQoXCJfXCIpWzBdO1xufVxuXG50cnkge1xuICAgIFQuc2V0VGV4dHMocmVxdWlyZShgLi9pMThuLyR7bGFuZ3VhZ2V9Lmpzb25gKSk7XG59IGNhdGNoIChlKSB7XG4gICAgVC5zZXRUZXh0cyhyZXF1aXJlKGAuL2kxOG4vZW4uanNvbmApKTtcbn1cblxuZXhwb3J0IHtcbiAgICBBamF4TG9hZGVyLFxuICAgIFJhd0hUTUwsXG4gICAgRnJlZVRleHRTZWFyY2gsXG4gICAgR01hcCxcbiAgICBEYXRlVGltZVBpY2tlcixcbiAgICBHcm91cGVkRHJvcGRvd24sXG4gICAgVXBsb2FkSW5wdXQsXG4gICAgVXBsb2FkSW5wdXRWMixcbiAgICBDb21wYW55SW5wdXQsXG4gICAgU3BvbnNvcklucHV0LFxuICAgIENvdW50cnlJbnB1dCxcbiAgICBMYW5ndWFnZUlucHV0LFxuICAgIE9yZ2FuaXphdGlvbklucHV0LFxuICAgIENvdW50cnlEcm9wZG93bixcbiAgICBEcm9wZG93bixcbiAgICBFdmVudElucHV0LFxuICAgIEdyb3VwSW5wdXQsXG4gICAgU3VtbWl0SW5wdXQsXG4gICAgTWVtYmVySW5wdXQsXG4gICAgU3BlYWtlcklucHV0LFxuICAgIFRhZ0lucHV0LFxuICAgIFRleHRFZGl0b3IsXG4gICAgVGV4dEFyZWEsXG4gICAgSW5wdXQsXG4gICAgUGFuZWwsXG4gICAgU2ltcGxlTGlua0xpc3QsXG4gICAgU3VtbWl0RHJvcGRvd24sXG4gICAgVGFibGUsXG4gICAgU29ydGFibGVUYWJsZSxcbiAgICBFZGl0YWJsZVRhYmxlLFxuICAgIFNpbXBsZUZvcm0sXG4gICAgUnN2cEZvcm0sXG4gICAgUmFkaW9MaXN0LFxuICAgIENoZWNrYm94TGlzdCxcbiAgICBBY3Rpb25Ecm9wZG93bixcbiAgICBGcmVlTXVsdGlUZXh0SW5wdXQsXG4gICAgT1BTZXNzaW9uQ2hlY2tlcixcbiAgICBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlLFxuICAgIEV4Y2x1c2l2ZSxcbiAgICBGcmFnbWVudFBhcnNlcixcbiAgICBDbG9jayxcbiAgICBDaXJjbGVCdXR0b24sXG4gICAgVmlkZW9TdHJlYW0sXG4gICAgQXR0ZW5kYW5jZVRyYWNrZXIsXG4gICAgU2VsZWN0YWJsZVRhYmxlLFxuICAgIHVzZUZpdFRleHQsXG4gICAgQWNjZXNzTGV2ZWxzSW5wdXQsXG4gICAgUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0LFxuICAgIFRpY2tldFR5cGVzSW5wdXQsXG4gICAgRXh0cmFRdWVzdGlvbnNGb3JtLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IEFqYXhMb2FkZXIgPSAgKHtcbiAgICBzaG93LFxuICAgIHJlbGF0aXZlLFxuICAgIGNvbG9yLFxuICAgIHNpemUsXG4gICAgY2hpbGRyZW4sXG59KSA9PiB7XG5cbiAgICBsZXQgc3R5bGVzID0ge1xuICAgICAgICBkaXNwbGF5IDogc2hvdyA/ICdibG9jayc6ICdub25lJyxcbiAgICAgICAgd2lkdGg6JzEwMCUnLFxuICAgICAgICBoZWlnaHQ6JzEwMCUnLFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmUgPyAnYWJzb2x1dGUnIDogJ2ZpeGVkJyxcbiAgICAgICAgekluZGV4OjEwMDAwMDAwLFxuICAgICAgICBtYXJnaW46J2F1dG8nLFxuICAgICAgICBjdXJzb3I6ICd3YWl0JyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjIpJyxcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICBsZWZ0OiAwXG4gICAgfTtcblxuICAgIGxldCBzdHlsZVNwaW5uZXIgPSB7XG4gICAgICAgIGZvbnRTaXplOiBzaXplICsgJ3B4JyxcbiAgICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgfTtcblxuICAgIGxldCBzdHlsZVNwaW5uZXJDb250YWluZXIgPSB7XG4gICAgICAgIHdpZHRoOiAnMjUwcHgnLFxuICAgICAgICBoZWlnaHQ6Jzc1cHgnLFxuICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmUgPyAncmVsYXRpdmUnIDogJ2ZpeGVkJyxcbiAgICAgICAgdG9wOiByZWxhdGl2ZSA/ICc1MCUnIDogJzAnLFxuICAgICAgICBsZWZ0OiByZWxhdGl2ZSA/ICcnIDogJzAnLFxuICAgICAgICByaWdodDonMCcsXG4gICAgICAgIGJvdHRvbTonMCcsXG4gICAgICAgIG1hcmdpbjonYXV0bycsXG4gICAgICAgIHpJbmRleDoxMCxcbiAgICAgICAgY29sb3I6JyNmZmZmZmYnXG4gICAgfTtcblxuICAgIGxldCBzdHlsZUJhY2tncm91bmQgPSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGNvbG9yLFxuICAgICAgICBvcGFjaXR5OicwLjgnLFxuICAgICAgICB3aWR0aDonMTAwJScsXG4gICAgICAgIGhlaWdodDonMTAwJScsXG4gICAgICAgIHBvc2l0aW9uOidhYnNvbHV0ZScsXG4gICAgICAgIHRvcDowXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWpheC1sb2FkZXItY29udGFpbmVyXCIgc3R5bGU9e3N0eWxlc30+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtzdHlsZVNwaW5uZXJDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXNwaW5uZXIgZmEtc3BpblwiIHN0eWxlPXtzdHlsZVNwaW5uZXJ9PjwvaT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVCYWNrZ3JvdW5kfSBjbGFzc05hbWU9XCJsb2FkZXItYmFja2dyb3VuZFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbik7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBodHRwIGZyb20gJ3N1cGVyYWdlbnQnO1xuaW1wb3J0IHtnZXRBY2Nlc3NUb2tlbn0gZnJvbSAnLi9zZWN1cml0eS9tZXRob2RzJztcblxuLy8gU0NPUEVTIE5FRURFRFxuLy8gJXMvbWUvc3VtbWl0cy9ldmVudHMvbGVhdmVcbi8vICVzL21lL3N1bW1pdHMvZXZlbnRzL2VudGVyXG5cbmNsYXNzIEF0dGVuZGFuY2VUcmFja2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBjb25zdCB7dHJhY2tFbnRlciwgb25CZWZvcmVVbmxvYWR9ID0gdGhpcztcblxuICAgICAgICAvLyB0cmFjayBlbnRlclxuICAgICAgICB0cmFja0VudGVyKCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBvbkJlZm9yZVVubG9hZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3RyYWNrTGVhdmUsIG9uQmVmb3JlVW5sb2FkfSA9IHRoaXM7XG5cbiAgICAgICAgLy8gdHJhY2sgbGVhdmVcbiAgICAgICAgdHJhY2tMZWF2ZSgpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgb25CZWZvcmVVbmxvYWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhY2tFbnRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qge2FwaUJhc2VVcmwsIHN1bW1pdElkLCBzb3VyY2VJZCwgc291cmNlTmFtZX0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgaHR0cC5wdXQoYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9lbnRlcmApXG4gICAgICAgICAgICAgICAgLnNlbmQoe2FjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sIHR5cGU6IHNvdXJjZU5hbWUsIHNvdXJjZV9pZDogc291cmNlSWQsIGxvY2F0aW9uOiBsb2NhdGlvbn0pXG4gICAgICAgICAgICAgICAgLmVuZCgoKSA9PiBjb25zb2xlLmxvZygnRU5URVIgUEFHRScpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0cmFja0xlYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7YXBpQmFzZVVybCwgc3VtbWl0SWQsIHNvdXJjZUlkLCBzb3VyY2VOYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuXG4gICAgICAgICAgICBodHRwLnBvc3QoYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9sZWF2ZWApXG4gICAgICAgICAgICAgICAgLnNlbmQoe2FjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sIHR5cGU6IHNvdXJjZU5hbWUsIHNvdXJjZV9pZDogc291cmNlSWQsIGxvY2F0aW9uOiBsb2NhdGlvbn0pXG4gICAgICAgICAgICAgICAgLmVuZCgoKSA9PiBjb25zb2xlLmxvZygnTEVGVCBQQUdFJykpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG9uQmVmb3JlVW5sb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7YXBpQmFzZVVybCwgc3VtbWl0SWQsIHNvdXJjZUlkLCBzb3VyY2VOYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgbmF2aWdhdG9yLnNlbmRCZWFjb24oXG4gICAgICAgICAgICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9sZWF2ZT9hY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn0mdHlwZT0ke3NvdXJjZU5hbWV9JnNvdXJjZV9pZD0ke3NvdXJjZUlkfSZsb2NhdGlvbj0ke2xvY2F0aW9ufWAsIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0TG9jYXRpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbkF0dGVuZGFuY2VUcmFja2VyLnByb3BUeXBlcyA9IHtcbiAgICBzb3VyY2VOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHN1bW1pdElkOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgYXBpQmFzZVVybDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59O1xuXG5BdHRlbmRhbmNlVHJhY2tlci5kZWZhdWx0UHJvcHMgPSB7XG4gICAgc291cmNlSWQ6IDAsXG4gICAgc291cmNlTmFtZTogJ0dFTkVSQUwnXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBdHRlbmRhbmNlVHJhY2tlcjtcblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2luZGV4Lm1vZHVsZS5zY3NzJztcblxuY29uc3QgaXNMaXZlID0gKGV2ZW50LCBub3dVdGMpID0+IHtcbiAgICBjb25zdCBoYXNFbmRlZCA9IG5vd1V0YyA+IGV2ZW50LmVuZF9kYXRlO1xuICAgIGNvbnN0IGhhc1N0YXJ0ZWQgPSAoZXZlbnQuc3RhcnRfZGF0ZSAtIG5vd1V0YykgPCAxO1xuICAgIHJldHVybiBoYXNTdGFydGVkICYmICFoYXNFbmRlZDtcbn07XG5cbmNvbnN0IENpcmNsZUJ1dHRvbiA9ICh7ZXZlbnQsIGlzU2NoZWR1bGVkLCBub3dVdGMsIGFkZFRvU2NoZWR1bGUsIHJlbW92ZUZyb21TY2hlZHVsZSwgZW50ZXJDbGljaywgYWx3YXlzU2hvd0VudGVyfSkgPT4ge1xuXG4gICAgY29uc3QgaXNMaXZlTm93ID0gaXNMaXZlKGV2ZW50LCBub3dVdGMpO1xuICAgIGxldCBidXR0b25DbGFzcyA9IG51bGw7XG4gICAgbGV0IGljb25DbGFzcyA9IG51bGw7XG4gICAgbGV0IG9uQ2xpY2sgPSBudWxsO1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGV2LCBhY3Rpb24pID0+IHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGFjdGlvbihldmVudCk7XG4gICAgfTtcblxuXG4gICAgaWYgKGlzTGl2ZU5vdyB8fCBhbHdheXNTaG93RW50ZXIpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuZW50ZXJ9IGVudGVyYDtcbiAgICAgICAgaWNvbkNsYXNzID0gJ2ZhLXNpZ24taW4nO1xuICAgICAgICBvbkNsaWNrID0gZXYgPT4gaGFuZGxlQ2xpY2soZXYsIGVudGVyQ2xpY2spO1xuICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVNjaGVkdWxlICYmIGFkZFRvU2NoZWR1bGUgJiYgaXNTY2hlZHVsZWQpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuYWRkZWR9IGFkZGVkYDtcbiAgICAgICAgaWNvbkNsYXNzID0gJ2ZhLWNoZWNrJztcbiAgICAgICAgb25DbGljayA9IGV2ID0+IGhhbmRsZUNsaWNrKGV2LCByZW1vdmVGcm9tU2NoZWR1bGUpO1xuICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVNjaGVkdWxlICYmIGFkZFRvU2NoZWR1bGUpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuYWRkfSBhZGRgO1xuICAgICAgICBpY29uQ2xhc3MgPSAnZmEtcGx1cyc7XG4gICAgICAgIG9uQ2xpY2sgPSBldiA9PiBoYW5kbGVDbGljayhldiwgYWRkVG9TY2hlZHVsZSk7XG4gICAgfVxuXG4gICAgaWYgKCFvbkNsaWNrKSByZXR1cm4gbnVsbDtcblxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9e2Ake3N0eWxlcy5jaXJjbGVCdXR0b259ICR7YnV0dG9uQ2xhc3N9YH0gb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8aSBjbGFzc05hbWU9e2BmYSAke2ljb25DbGFzc31gfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICApO1xufTtcblxuQ2lyY2xlQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgICBldmVudDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIG5vd1V0YzogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGlzU2NoZWR1bGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGVudGVyQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgYWRkVG9TY2hlZHVsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcmVtb3ZlRnJvbVNjaGVkdWxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhbHdheXNTaG93RW50ZXI6IFByb3BUeXBlcy5ib29sLFxufTtcblxuQ2lyY2xlQnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBhZGRUb1NjaGVkdWxlOiBudWxsLFxuICAgIHJlbW92ZUZyb21TY2hlZHVsZTogbnVsbCxcbiAgICBhbHdheXNTaG93RW50ZXI6IGZhbHNlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaXJjbGVCdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiY2lyY2xlQnV0dG9uXCI6XCJfMzRsMldtWWpzZVpHdFlZd0VDMjZaUlwiLFwiYWRkXCI6XCJfMS1wYzFsWU5aMjVqVlJKY0NpU0VCdFwiLFwiYWRkZWRcIjpcIl8yQkxzX3dUenIyR19QSEdHS3VXdkN0XCIsXCJlbnRlclwiOlwiXzF2YnNnNnhmNU9XRjNpR0RQeXFfMDNcIn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50LXRpbWV6b25lXCI7XG5pbXBvcnQgRnJhZ21lbnRQYXJzZXIgZnJvbSBcIi4vZnJhZ21lbi1wYXJzZXJcIjtcblxuY2xhc3MgQ2xvY2sgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLmZyYWdtZW50UGFyc2VyID0gbmV3IEZyYWdtZW50UGFyc2VyKCk7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdGltZXN0YW1wOiBudWxsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3RpbWV6b25lID0gJ1VUQycsIG5vd30gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBub3dRUyA9IHRoaXMuZnJhZ21lbnRQYXJzZXIuZ2V0UGFyYW0oJ25vdycpO1xuICAgICAgICBjb25zdCBtb21lbnRRUyA9IG1vbWVudC50eihub3dRUywgJ1lZWVktTU0tREQsaGg6bW06c3MnLCB0aW1lem9uZSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXA7XG5cbiAgICAgICAgaWYgKG1vbWVudFFTLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGltZXN0YW1wID0gbW9tZW50UVMudmFsdWVPZigpIC8gMTAwMDtcbiAgICAgICAgfSBlbHNlIGlmIChub3cpIHtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IG5vd1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbG9jYWwgPSBtb21lbnQoKS51bml4KCk7XG4gICAgICAgICAgICBjb25zdCBzZXJ2ZXJUaW1lID0gIGF3YWl0IHRoaXMuZ2V0U2VydmVyVGltZSgpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxBZnRlciA9IG1vbWVudCgpLnVuaXgoKTtcblxuICAgICAgICAgICAgaWYgKHNlcnZlclRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBzZXJ2ZXJUaW1lLnRpbWVzdGFtcCArIChsb2NhbEFmdGVyIC0gbG9jYWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBsb2NhbEFmdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGltZXN0YW1wfSk7XG4gICAgICAgIHRoaXMucHJvcHMub25UaWNrKHRpbWVzdGFtcCk7XG5cbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKHRoaXMudGljaywgMTAwMCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgfVxuXG4gICAgZ2V0U2VydmVyVGltZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vdGltZWludGVydmFsc2luY2UxOTcwLmFwcHNwb3QuY29tL2ApXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9O1xuXG4gICAgdGljayA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qge3RpbWVzdGFtcH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBpZiAodGltZXN0YW1wICE9PSBudWxsKSB7ICAgXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uVGljayh0aW1lc3RhbXAgKyAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RpbWVzdGFtcDogdGltZXN0YW1wICsgMX0pXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZXBvY2ggdXRjIHRpbWUgaW4gc2Vjb25kc1xuICAgIG5vdyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGltZXN0YW1wO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHtkaXNwbGF5LCB0aW1lem9uZSA9ICdVVEMnfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHt0aW1lc3RhbXB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoIWRpc3BsYXkgfHwgIXRpbWVzdGFtcCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Ub3A6ICc1MHB4JywgdGV4dEFsaWduOiAnY2VudGVyJywgZm9udFNpemU6ICcyMHB4J319PlxuICAgICAgICAgICAgICAgIHttb21lbnQudHoodGltZXN0YW1wKjEwMDAsIHRpbWV6b25lKS5mb3JtYXQoJ1lZWVktTU0tREQgaGg6bW06c3MnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBDbG9jaztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTkgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4Y2x1c2l2ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zaG93RmllbGQgPSB0aGlzLnNob3dGaWVsZC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHNob3dGaWVsZCgpIHtcbiAgICAgICAgbGV0IHtuYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBleGNsdXNpdmVTZWN0aW9ucyA9IHdpbmRvdy5FWENMVVNJVkVfU0VDVElPTlM7XG5cbiAgICAgICAgcmV0dXJuIGV4Y2x1c2l2ZVNlY3Rpb25zID8gZXhjbHVzaXZlU2VjdGlvbnMuaW5jbHVkZXMobmFtZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7Y2hpbGRyZW59ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAodGhpcy5zaG93RmllbGQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vaW5wdXRzL3RleHQtaW5wdXQnXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi4vaW5wdXRzL2Ryb3Bkb3duJ1xuaW1wb3J0IFJhZGlvTGlzdCBmcm9tICcuLi9pbnB1dHMvcmFkaW8tbGlzdCdcbmltcG9ydCBDaGVja2JveExpc3QgZnJvbSAnLi4vaW5wdXRzL2NoZWNrYm94LWxpc3QnXG5pbXBvcnQgUXVlc3Rpb25zU2V0IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXN0aW9ucy1zZXQnO1xuaW1wb3J0IHtGaWVsZCwgRm9ybX0gZnJvbSBcInJlYWN0LWZpbmFsLWZvcm1cIjtcblxuY29uc3QgRXh0cmFRdWVzdGlvbnNGb3JtID0gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFRdWVzdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJBbnN3ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFuc3dlckNoYW5nZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICdxdWVzdGlvbnMtZm9ybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lID0gJ3F1ZXN0aW9uLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWUgPSAncXVlc3Rpb24tbGFiZWwtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lPSAncXVlc3Rpb24tY29udHJvbC1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUmVmID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVGV4dCA9ICdTdWJtaXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4ge1xuXG4gICAgbGV0IHN1Ym1pdCA9IG51bGw7XG5cbiAgICBjb25zdCBxdWVzdGlvblJlZiA9IHVzZVJlZih7fSk7XG5cbiAgICBjb25zdCBbYW5zd2Vycywgc2V0QW5zd2Vyc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2Zvcm1FcnJvcnMsIHNldEZvcm1FcnJvcnNdID0gdXNlU3RhdGUoe30pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZm9ybWF0VXNlckFuc3dlcnMoKTtcbiAgICB9LCBbZXh0cmFRdWVzdGlvbnNdKVxuXG4gICAgY29uc3QgZm9ybWF0VXNlckFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHFzID0gbmV3IFF1ZXN0aW9uc1NldChleHRyYVF1ZXN0aW9ucywgdXNlckFuc3dlcnMpO1xuICAgICAgICBzZXRBbnN3ZXJzKHFzLmZvcm1hdEFuc3dlcnMoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgQ29uZGl0aW9uID0gKHt3aGVuLCBydWxlLCBjaGlsZHJlbn0pID0+IChcbiAgICAgICAgPEZpZWxkIG5hbWU9e3doZW59IHN1YnNjcmlwdGlvbj17e3ZhbHVlOiB0cnVlfX0+XG4gICAgICAgICAgICB7KHtpbnB1dDoge3ZhbHVlfX0pID0+XG4gICAgICAgICAgICAgICAgY2hlY2tWaXNpYmlsaXR5KHJ1bGUsIGNoZWNrUnVsZSh2YWx1ZSwgcnVsZSksIGNoaWxkcmVuKVxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgICk7XG5cbiAgICBjb25zdCBFcnJvciA9ICh7bmFtZX0pID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBmb3JtRXJyb3JzW25hbWVdIHx8ICcnO1xuICAgICAgICByZXR1cm4gZXJyb3IgPyA8c3BhbiBjbGFzc05hbWU9J2V4dHJhLXF1ZXN0aW9uLWVycm9yJz5lcnJvcjwvc3Bhbj4gOiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1J1bGUgPSAodmFsdWUsIHJ1bGUpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IHJ1bGUuYW5zd2VyX3ZhbHVlcztcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBsZXQgcmVzID0gcnVsZS5hbndlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCI7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLmFud2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gXCJBbmRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMgJiYgdmFsdWUuaW5jbHVkZXMocGFyc2VJbnQodikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9yXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcyB8fCB2YWx1ZS5pbmNsdWRlcyhwYXJzZUludCh2KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXMuaW5jbHVkZXModmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVmlzaWJpbGl0eSA9IChydWxlLCBydWxlUmVzdWx0LCBjaGlsZHJlbikgPT4ge1xuICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5ID09PSBcIlZpc2libGVcIikge1xuICAgICAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24gPT09IFwiRXF1YWxcIikge1xuICAgICAgICAgICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5vbiBFcXVhbFxuICAgICAgICAgICAgaWYoIXJ1bGVSZXN1bHQpe1xuICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIGxldCBxdWVzdGlvblZhbHVlcyA9IHEudmFsdWVzO1xuICAgICAgICAvLyBAc2VlIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy92ZzA1eT9maWxlPS9pbmRleC5qc1xuICAgICAgICBpZiAocS50eXBlID09PSBcIlRleHRcIikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YCR7cS5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb3BzLmlucHV0LnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3EucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17cS5uYW1lfS8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMubWFwKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25kaXRpb24gd2hlbj17cS5uYW1lfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfSBuYW1lPXtxLm5hbWV9IGlkPXtgJHtxLmlkfWB9IGNvbXBvbmVudD1cInRleHRhcmVhXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBzdHlsZT17e2Rpc3BsYXk6ICdmbGV4J319IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfSBuYW1lPXtxLm5hbWV9IGlkPXtgJHtxLmlkfWB9IGNvbXBvbmVudD1cImlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtgZXEtY2hlY2tib3gtbGFiZWwgJHtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiUmFkaW9CdXR0b25MaXN0XCIpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uVmFsdWVzID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoey4uLnZhbCwgdmFsdWU6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIG5hbWU9e3EubmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9MaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3EuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuaW5wdXQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17cXVlc3Rpb25WYWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDb21ib0JveFwiKSB7XG4gICAgICAgICAgICBxdWVzdGlvblZhbHVlcyA9IHF1ZXN0aW9uVmFsdWVzLm1hcCh2YWwgPT4gKHsuLi52YWwsIHZhbHVlOiB2YWwuaWR9KSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e3EubWFuZGF0b3J5ID8gcS5sYWJlbD8uZW5kc1dpdGgoJzwvcD4nKSA/IHEubGFiZWwucmVwbGFjZSgvPFxcL3A+JC9nLCBcIiA8Yj4qPC9iPjwvcD5cIikgOiBgJHtxLmxhYmVsfSA8Yj4qPC9iPmAgOiBxLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXtxLm5hbWV9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgJHtxLmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5pbnB1dC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3F1ZXN0aW9uVmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDaGVja0JveExpc3RcIikge1xuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZXMgPSBxdWVzdGlvblZhbHVlcy5tYXAodmFsID0+ICh7Li4udmFsLCB2YWx1ZTogdmFsLmlkfSkpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94TGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3EuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e3EubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5pbnB1dC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3F1ZXN0aW9uVmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IChxKSA9PiB7XG4gICAgICAgIHJldHVybiAhIXF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF07XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRlUXVlc3Rpb24gPSAocSwgdmFsdWVzLCBlcnJvcnMpID0+IHtcbiAgICAgICAgaWYgKHEubWFuZGF0b3J5ICYmIGlzVmlzaWJsZShxKSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkocS5uYW1lKSB8fCB2YWx1ZXNbcS5uYW1lXSA9PT0gXCJcIiB8fCB2YWx1ZXNbcS5uYW1lXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvcnNbcS5uYW1lXSA9IFwiUmVxdWlyZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB2YWxpZGF0ZSBzdWIgcnVsZXNcbiAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXM/LmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgIHZhbGlkYXRlUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24sIHZhbHVlcywgZXJyb3JzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VibWl0ID0gKHZhbHVlcykgPT4ge1xuICAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlKHZhbHVlcyk7XG4gICAgICAgaWYoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICBvbkFuc3dlckNoYW5nZXModmFsdWVzKVxuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZSA9ICh2YWx1ZXMpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0ge307XG4gICAgICAgIGV4dHJhUXVlc3Rpb25zLmZvckVhY2goIHEgPT4ge1xuICAgICAgICAgICAgdmFsaWRhdGVRdWVzdGlvbihxLCB2YWx1ZXMsIGVycm9ycyk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRGb3JtRXJyb3JzKHsuLi5lcnJvcnN9KVxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgIDxGb3JtXG4gICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e2Fuc3dlcnN9XG4gICAgICAgICAgICAgICAgdmFsaWRhdGU9e3ZhbGlkYXRlfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsoe2hhbmRsZVN1Ym1pdCwgZm9ybSwgc3VibWl0dGluZywgcHJpc3RpbmUsIHZhbHVlc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0ID0gaGFuZGxlU3VibWl0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gcmVmPXtmb3JtUmVmfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVhZE9ubHkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2V4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkZWJ1ZyAmJiA8cHJlPntKU09OLnN0cmluZ2lmeSh2YWx1ZXMsIDAsIDIpfTwvcHJlPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgeyFmb3JtUmVmICYmXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBzdHlsZT17e21hcmdpblRvcDogMTB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtidXR0b25UZXh0fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIClcbn1cblxuRXh0cmFRdWVzdGlvbnNGb3JtLnByb3BUeXBlcyA9IHtcbiAgICBleHRyYVF1ZXN0aW9uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgdXNlckFuc3dlcnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIG9uQW5zd2VyQ2hhbmdlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZm9ybVJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICAgIFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBQcm9wVHlwZXMuc2hhcGUoe2N1cnJlbnQ6IFByb3BUeXBlcy5hbnl9KVxuICAgIF0pLFxuICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBidXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWUgOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEV4dHJhUXVlc3Rpb25zRm9ybTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAnYXdlc29tZS1ib290c3RyYXAtY2hlY2tib3gvYXdlc29tZS1ib290c3RyYXAtY2hlY2tib3guY3NzJ1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0cy90ZXh0LWlucHV0J1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4uL2lucHV0cy9kcm9wZG93bidcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJ1xuaW1wb3J0IENoZWNrYm94TGlzdCBmcm9tICcuLi9pbnB1dHMvY2hlY2tib3gtbGlzdCdcbmltcG9ydCBSYWRpb0xpc3QgZnJvbSAnLi4vaW5wdXRzL3JhZGlvLWxpc3QnXG5cblxuY2xhc3MgUnN2cEZvcm0gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgYW5zd2VyczogcHJvcHMucXVlc3Rpb25zLm1hcChxID0+ICh7cXVlc3Rpb25faWQ6IHEuaWQsIHZhbHVlOiBudWxsfSkpLFxuICAgICAgICAgICAgZXJyb3JzOiBwcm9wcy5lcnJvcnNcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFzRXJyb3JzID0gdGhpcy5oYXNFcnJvcnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVTdWJtaXQgPSB0aGlzLmhhbmRsZVN1Ym1pdC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHJlbmRlclF1ZXN0aW9uKHEpIHtcbiAgICAgICAgY29uc3Qge2Fuc3dlcnN9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhbnN3ZXJzLmZpbmQoYSA9PiBhLnF1ZXN0aW9uX2lkID09PSBxLmlkKS52YWx1ZTtcblxuICAgICAgICBzd2l0Y2gocS5jbGFzc19uYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdSU1ZQTWVtYmVyRW1haWxRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBNZW1iZXJGaXJzdE5hbWVRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBNZW1iZXJMYXN0TmFtZVF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgY2FzZSAnUlNWUFRleHRCb3hRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtxLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXt0aGlzLmhhc0Vycm9ycyhxLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUlNWUFRleHRBcmVhUXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17cS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIC8+KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBMaXRlcmFsQ29udGVudFF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdj48UmF3SFRNTD57cS52YWx1ZX08L1Jhd0hUTUw+PC9kaXY+KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBDaGVja0JveExpc3RRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17cS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3EudmFsdWVzLm1hcCh2ID0+ICh7dmFsdWU6IGAke3YuaWR9YCwgbGFiZWw6IHYubGFiZWx9KSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17dGhpcy5oYXNFcnJvcnMocS5pZCl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8UmFkaW9MaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17cS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3EudmFsdWVzLm1hcCh2ID0+ICh7dmFsdWU6IGAke3YuaWR9YCwgbGFiZWw6IHYubGFiZWx9KSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17dGhpcy5oYXNFcnJvcnMocS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUlNWUERyb3BEb3duUXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IChxLmlzX2NvdW50cnlfc2VsZWN0b3IpID8gcS52YWx1ZXMubWFwKHYgPT4gKHt2YWx1ZTp2LmlkLCBsYWJlbDogdi52YWx1ZX0pKSA6IHEudmFsdWVzO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17cS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e3EuaXNfbXVsdGlzZWxlY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cS5lbXB0eV9zdHJpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXt2YWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICBsZXQgYW5zd2VycyA9IFsuLi50aGlzLnN0YXRlLmFuc3dlcnNdO1xuICAgICAgICBsZXQge3ZhbHVlLCBpZH0gPSBldi50YXJnZXQ7XG5cbiAgICAgICAgaWYgKGV2LnRhcmdldC50eXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlT2YoKSAvIDEwMDA7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYW5zd2VyID0gYW5zd2Vycy5maW5kKGEgPT4gYS5xdWVzdGlvbl9pZCA9PT0gcGFyc2VJbnQoaWQpKTtcbiAgICAgICAgYW5zd2VyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YW5zd2Vyc30pO1xuICAgIH1cblxuICAgIGhhc0Vycm9ycyhmaWVsZCkge1xuICAgICAgICBsZXQge2Vycm9yc30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBpZihmaWVsZCBpbiBlcnJvcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcnNbZmllbGRdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGhhbmRsZVN1Ym1pdChldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGxldCB7IG9uU3VibWl0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge2Fuc3dlcnN9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBvblN1Ym1pdChhbnN3ZXJzKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7IHF1ZXN0aW9ucywgb25TdWJtaXQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxmb3JtIGNsYXNzTmFtZT1cInJzdnAtZm9ybVwiPlxuICAgICAgICAgICAgICAgIHtxdWVzdGlvbnMubWFwKHEgPT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9eydxdWVzdGlvbl8nK3EuaWR9IGNsYXNzTmFtZT1cInJvdyBmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+e3EubGFiZWx9PC9SYXdIVE1MPiB7cS5pc19tYW5kYXRvcnkgJiYgJyonfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyUXVlc3Rpb24ocSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7b25TdWJtaXQgJiZcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnlcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZVN1Ym1pdH0+U3VibWl0PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUnN2cEZvcm07XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0J1xuaW1wb3J0ICdhd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC9hd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC5jc3MnXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vaW5wdXRzL3RleHQtaW5wdXQnXG5pbXBvcnQgeyBzY3JvbGxUb0Vycm9yLCBpc0VtcHR5LCBzaGFsbG93RXF1YWwsIGhhc0Vycm9ycyB9IGZyb20gJy4uLy4uL3V0aWxzL21ldGhvZHMnXG5cblxuY2xhc3MgU2ltcGxlRm9ybSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBlbnRpdHk6IHsuLi5wcm9wcy5lbnRpdHl9LFxuICAgICAgICAgICAgZXJyb3JzOiBwcm9wcy5lcnJvcnNcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlU3VibWl0ID0gdGhpcy5oYW5kbGVTdWJtaXQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0ge307XG4gICAgICAgIHNjcm9sbFRvRXJyb3IodGhpcy5wcm9wcy5lcnJvcnMpO1xuXG4gICAgICAgIGlmKHByZXZQcm9wcy5lbnRpdHkuaWQgIT09IHRoaXMucHJvcHMuZW50aXR5LmlkKSB7XG4gICAgICAgICAgICBzdGF0ZS5lbnRpdHkgPSB7Li4udGhpcy5wcm9wcy5lbnRpdHl9O1xuICAgICAgICAgICAgc3RhdGUuZXJyb3JzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNoYWxsb3dFcXVhbChwcmV2UHJvcHMuZXJyb3JzLCB0aGlzLnByb3BzLmVycm9ycykpIHtcbiAgICAgICAgICAgIHN0YXRlLmVycm9ycyA9IHsuLi50aGlzLnByb3BzLmVycm9yc307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRW1wdHkoc3RhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCAuLi5zdGF0ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgICAgbGV0IGVudGl0eSA9IHsuLi50aGlzLnN0YXRlLmVudGl0eX07XG4gICAgICAgIGxldCBlcnJvcnMgPSB7Li4udGhpcy5zdGF0ZS5lcnJvcnN9O1xuICAgICAgICBsZXQge3ZhbHVlLCBpZH0gPSBldi50YXJnZXQ7XG5cbiAgICAgICAgaWYgKGV2LnRhcmdldC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGV2LnRhcmdldC5jaGVja2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3JzW2lkXSA9ICcnO1xuICAgICAgICBlbnRpdHlbaWRdID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2VudGl0eTogZW50aXR5LCBlcnJvcnM6IGVycm9yc30pO1xuICAgIH1cblxuICAgIGhhbmRsZVN1Ym1pdChldikge1xuICAgICAgICBsZXQgZW50aXR5ID0gey4uLnRoaXMuc3RhdGUuZW50aXR5fTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uU3VibWl0KHRoaXMuc3RhdGUuZW50aXR5KTtcbiAgICB9XG5cbiAgICBjcmVhdGVGaWVsZChmaWVsZCkge1xuICAgICAgICBsZXQge2VudGl0eSwgZXJyb3JzfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17XCJmaWVsZF9cIitmaWVsZC5uYW1lfSBjbGFzc05hbWU9XCJyb3cgZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4ge2ZpZWxkLmxhYmVsfSA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17ZmllbGQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2VudGl0eVtmaWVsZC5uYW1lXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17aGFzRXJyb3JzKGZpZWxkLm5hbWUsIGVycm9ycyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e1wiZmllbGRfXCIrZmllbGQubmFtZX0gY2xhc3NOYW1lPVwicm93IGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+IHtmaWVsZC5sYWJlbH0gPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2ZpZWxkLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlbnRpdHlbZmllbGQubmFtZV19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17XCJmaWVsZF9cIitmaWVsZC5uYW1lfSBjbGFzc05hbWU9XCJyb3cgZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jaGVjayBhYmMtY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtmaWVsZC5uYW1lfSBjaGVja2VkPXtlbnRpdHlbZmllbGQubmFtZV19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9IGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ZpZWxkLm5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZpZWxkLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2VudGl0eX0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQge2ZpZWxkc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Zm9ybSBjbGFzc05hbWU9XCJzaW1wbGUtZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJpZFwiIHZhbHVlPXtlbnRpdHkuaWR9IC8+XG5cbiAgICAgICAgICAgICAgICB7ZmllbGRzLm1hcChmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRmllbGQoZik7XG4gICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMiBzdWJtaXQtYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgcHVsbC1yaWdodFwiIHZhbHVlPXtULnRyYW5zbGF0ZShcImdlbmVyYWwuc2F2ZVwiKX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpbXBsZUZvcm07XG4iLCJcbmNsYXNzIEZyYWdtZW50UGFyc2VyIHtcblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMub3JpZ2luYWxIYXNoID0gJyc7XG4gICAgICAgIHRoaXMuaGFzaCAgICAgICAgID0ge307XG4gICAgfVxuXG4gICAgY29udmVydFRvSGFzaChzdHJIYXNoKVxuICAgIHtcbiAgICAgICAgc3RySGFzaCAgICA9IHN0ckhhc2guc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBwYXJhbXMgPSBzdHJIYXNoLnNwbGl0KCcmJyk7XG4gICAgICAgIGxldCByZXMgPSB7fTtcbiAgICAgICAgZm9yKGxldCBwYXJhbSBvZiBwYXJhbXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtID0gcGFyYW0uc3BsaXQoJz0nKTtcbiAgICAgICAgICAgIGlmKHBhcmFtLmxlbmd0aCAhPT0gIDIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHZhbCA9IHBhcmFtWzFdLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKHZhbCA9PT0gJycpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsID09PSAndHJ1ZScgfHwgdmFsID09PSAnZmFsc2UnKVxuICAgICAgICAgICAgICAgIHBhcmFtWzFdID0gdmFsID09ICd0cnVlJztcblxuICAgICAgICAgICAgcmVzW3BhcmFtWzBdXSA9IHBhcmFtWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY2xlYXJQYXJhbXMoKXtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEhhc2ggPSAnJztcbiAgICAgICAgdGhpcy5oYXNoICAgICAgICAgPSB7fTtcbiAgICB9XG5cbiAgICBnZXRQYXJhbShrZXkpe1xuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yaWdpbmFsSGFzaCAhPT0gd2luZG93LmxvY2F0aW9uLmhhc2gpe1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgICAgICAgICAgIHRoaXMuaGFzaCA9IHRoaXMuY29udmVydFRvSGFzaCh0aGlzLm9yaWdpbmFsSGFzaCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighdGhpcy5oYXNoLmhhc093blByb3BlcnR5KGtleSkgKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzaFtrZXldO1xuICAgIH1cblxuICAgIGdldFBhcmFtcygpe1xuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yaWdpbmFsSGFzaCAhPT0gIHdpbmRvdy5sb2NhdGlvbi5oYXNoKXtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxIYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSB0aGlzLmNvbnZlcnRUb0hhc2godGhpcy5vcmlnaW5hbEhhc2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uIHRoaXMuaGFzaCB9O1xuICAgIH1cblxuICAgIGRlbGV0ZVBhcmFtKHBhcmFtKXtcbiAgICAgICAgdmFyIGhhc2ggICAgPSB0aGlzLmdldFBhcmFtcygpO1xuICAgICAgICB0aGlzLmNsZWFyUGFyYW1zKCk7XG4gICAgICAgIGZvcihsZXQga2V5IGluIGhhc2gpIHtcbiAgICAgICAgICAgIGlmKGtleSA9PSBwYXJhbSkgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLmhhc2hba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlbGV0ZVBhcmFtcyhwYXJhbXMpe1xuICAgICAgICB2YXIgaGFzaCAgICA9IHRoaXMuZ2V0UGFyYW1zKCk7XG4gICAgICAgIHRoaXMuY2xlYXJQYXJhbXMoKTtcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gaGFzaCkge1xuICAgICAgICAgICAgaWYocGFyYW1zLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5oYXNoW2tleV0gPSBoYXNoW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRQYXJhbShrZXksIHZhbHVlKXtcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcmlnaW5hbEhhc2ggIT09ICB3aW5kb3cubG9jYXRpb24uaGFzaCl7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICAgICAgICAgICAgdGhpcy5oYXNoID0gdGhpcy5jb252ZXJ0VG9IYXNoKHRoaXMub3JpZ2luYWxIYXNoKTtcbiAgICAgICAgfVxuICAgICAgICBpZih2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpXG4gICAgICAgICAgICB0aGlzLmhhc2hba2V5XSA9IHZhbHVlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5oYXNoW2tleV07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpe1xuICAgICAgICBsZXQgcmVzID0gJyc7XG4gICAgICAgIGZvcihsZXQga2V5IGluIHRoaXMuaGFzaClcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IHZhbCA9IHRoaXMuaGFzaFtrZXldO1xuICAgICAgICAgICAgaWYocmVzICE9PSAnJykgcmVzICs9ICcmJztcbiAgICAgICAgICAgIHJlcyArPSBrZXkrJz0nK3ZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnJhZ21lbnRQYXJzZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFQgZnJvbSBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCI7XG5cbmNsYXNzIEZyZWVUZXh0U2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLm9uU2VhcmNoQ2xpY2sgID0gdGhpcy5vblNlYXJjaENsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25DbGVhckNsaWNrICAgPSB0aGlzLm9uQ2xlYXJDbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uS2V5UHJlc3NlZCAgID0gdGhpcy5vbktleVByZXNzZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSAgICAgICA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uU2VhcmNoQ2xpY2soKXtcbiAgICAgICAgdGhpcy5kb0ZpbHRlcmluZyh0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICBvbkNsZWFyQ2xpY2soKXtcbiAgICAgICAgdGhpcy5kb0ZpbHRlcmluZygnJyk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiAnJ30pO1xuICAgIH1cblxuICAgIGRvRmlsdGVyaW5nKHRlcm0pe1xuICAgICAgICB0aGlzLnByb3BzLm9uU2VhcmNoKHRlcm0udHJpbSgpKTtcbiAgICB9XG5cbiAgICBvbktleVByZXNzZWQoZXZlbnQpe1xuICAgICAgICB2YXIgY29kZSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG4gICAgICAgIGlmKGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLmRvRmlsdGVyaW5nKHRoaXMuc3RhdGUudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoZXZlbnQpe1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCB7dmFsdWV9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvdyBzZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbktleVByZXNzPXt0aGlzLm9uS2V5UHJlc3NlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbnB1dC1ncm91cC1idG5cIiBzdHlsZT17e3dpZHRoOiA1ICsnJSd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e3RoaXMub25TZWFyY2hDbGlja30gY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0XCIgdGl0bGU9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5zZWFyY2hcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1zZWFyY2hcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17dGhpcy5vbkNsZWFyQ2xpY2t9IGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiIHRpdGxlPXtULnRyYW5zbGF0ZShcImdlbmVyYWwuY2xlYXJcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10aW1lc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZyZWVUZXh0U2VhcmNoOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHdpdGhTY3JpcHRqcywgd2l0aEdvb2dsZU1hcCwgR29vZ2xlTWFwLCBNYXJrZXIsIEluZm9XaW5kb3cgfSBmcm9tIFwicmVhY3QtZ29vZ2xlLW1hcHNcIjtcbmltcG9ydCBNYXJrZXJDbHVzdGVyZXIgZnJvbSBcInJlYWN0LWdvb2dsZS1tYXBzL2xpYi9jb21wb25lbnRzL2FkZG9ucy9NYXJrZXJDbHVzdGVyZXJcIjtcbmltcG9ydCB7YXJyYXlzRXF1YWx9IGZyb20gXCIuLi8uLi91dGlscy9tZXRob2RzXCI7XG5cbmNvbnN0IE1BUCA9IHtcbiAgICBkZWZhdWx0Wm9vbTogMixcbiAgICBkZWZhdWx0Q2VudGVyOiB7IGxhdDogMzAuMjcwMTY2LCBsbmc6IC05Ny43MzEyNzEgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICAgIG1pblpvb206IDEsXG4gICAgICAgIG1heFpvb206IDE5XG4gICAgfVxufTtcblxuY29uc3QgR29vZ2xlTWFwV3JhcHBlciA9IHdpdGhHb29nbGVNYXAoKHByb3BzKSA9PiB7XG4gICAgICAgIHJldHVybiAgPEdvb2dsZU1hcFxuICAgICAgICAgICAgcmVmPXtwcm9wcy5vbk1hcExvYWR9XG4gICAgICAgICAgICB6b29tPXsgcHJvcHMuem9vbSB9XG4gICAgICAgICAgICBjZW50ZXI9eyBwcm9wcy5jZW50ZXIgfVxuICAgICAgICAgICAgb25Cb3VuZHNDaGFuZ2VkPXtwcm9wcy5vbk1hcENoYW5nZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3Byb3BzLm9uTWFwQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtwcm9wcy5zaG93TWFya2VycyAmJlxuICAgICAgICAgICAgPE1hcmtlckNsdXN0ZXJlclxuICAgICAgICAgICAgICAgIGF2ZXJhZ2VDZW50ZXJcbiAgICAgICAgICAgICAgICBlbmFibGVSZXRpbmFJY29uc1xuICAgICAgICAgICAgICAgIGdyaWRTaXplPXs2MH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7cHJvcHMubWFya2Vycy5tYXAobWFya2VyID0+IChcbiAgICAgICAgICAgICAgICAgICAgPE1hcmtlclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXttYXJrZXIuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj17eyBsYXQ6IG1hcmtlci5sYXQsIGxuZzogbWFya2VyLmxuZyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcHJvcHMub25Ub2dnbGVJbmZvV2luZG93KG1hcmtlci5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkRyYWdFbmQ9e3Byb3BzLm9uTWFya2VyRHJhZ31cbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZT17cHJvcHMuZHJhZ2dhYmxlfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bWFya2VyLmlzSW5mb1dpbmRvd09wZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxJbmZvV2luZG93IG9uQ2xvc2VDbGljaz17KCkgPT4gcHJvcHMub25Ub2dnbGVJbmZvV2luZG93KG1hcmtlci5pZCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e21hcmtlci5uYW1lfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9JbmZvV2luZG93PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L01hcmtlcj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvTWFya2VyQ2x1c3RlcmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L0dvb2dsZU1hcD5cbiAgICB9XG4pO1xuXG5leHBvcnQgY2xhc3MgR01hcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG1hcmtlcnM6IHByb3BzLm1hcmtlcnNcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZU1hcExvYWQgPSB0aGlzLmhhbmRsZU1hcExvYWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVNYXBDaGFuZ2UgPSB0aGlzLmhhbmRsZU1hcENoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU1hcmtlckRyYWcgPSB0aGlzLmhhbmRsZU1hcmtlckRyYWcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVNYXBDbGljayA9IHRoaXMuaGFuZGxlTWFwQ2xpY2suYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IG5ld19tYXJrZXJzID0gdGhpcy5wcm9wcy5tYXJrZXJzO1xuXG4gICAgICAgIGlmICghYXJyYXlzRXF1YWwobmV3X21hcmtlcnMsIHByZXZQcm9wcy5tYXJrZXJzKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IG1hcmtlcnM6IG5ld19tYXJrZXJzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9sZF9tYXJrZXJzX3N0ciA9IHByZXZQcm9wcy5tYXJrZXJzLm1hcCggbSA9PiBtLmlkICkuc29ydCgpLmpvaW4oKTtcbiAgICAgICAgbGV0IG5ld19tYXJrZXJzX3N0ciA9IG5ld19tYXJrZXJzLm1hcCggbSA9PiBtLmlkICkuc29ydCgpLmpvaW4oKTtcblxuICAgICAgICBpZiAobmV3X21hcmtlcnMubGVuZ3RoID4gMSAmJiBvbGRfbWFya2Vyc19zdHIgIT09IG5ld19tYXJrZXJzX3N0cikge1xuICAgICAgICAgICAgY29uc3QgbWFya2VyQm91bmRzID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcygpO1xuICAgICAgICAgICAgZm9yIChsZXQgbWFya2VyIG9mIG5ld19tYXJrZXJzKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hcmtlcl9sb2MgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKG1hcmtlci5sYXQsIG1hcmtlci5sbmcpO1xuICAgICAgICAgICAgICAgIG1hcmtlckJvdW5kcy5leHRlbmQobWFya2VyX2xvYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXBDb21wb25lbnQuZml0Qm91bmRzKG1hcmtlckJvdW5kcyk7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgaGFuZGxlTWFwTG9hZChtYXApIHtcbiAgICAgICAgdGhpcy5fbWFwQ29tcG9uZW50ID0gbWFwO1xuICAgIH1cblxuICAgIGhhbmRsZU1hcENoYW5nZSgpIHtcbiAgICAgICAgbGV0IHZpc2libGVfbWFya2VycyA9IHRoaXMucHJvcHMubWFya2Vycy5maWx0ZXIobSA9PiB7XG4gICAgICAgICAgICBsZXQgbWFya2VyX2xvYyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmcobS5sYXQsIG0ubG5nKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5fbWFwQ29tcG9uZW50LmdldEJvdW5kcygpLmNvbnRhaW5zKG1hcmtlcl9sb2MpKSA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdvbkNoYW5nZUNhbGxiYWNrJykpXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlQ2FsbGJhY2sodmlzaWJsZV9tYXJrZXJzKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlTWFya2VyQ2xpY2sobWFya2VyX2lkKSB7XG4gICAgICAgIGxldCBtYXJrZXJzID0gdGhpcy5zdGF0ZS5tYXJrZXJzO1xuICAgICAgICBsZXQgaXNfb3BlbiA9IG1hcmtlcnMuZmluZChtID0+IG0uaWQgPT0gbWFya2VyX2lkKS5pc0luZm9XaW5kb3dPcGVuO1xuICAgICAgICBtYXJrZXJzLmZpbmQobSA9PiBtLmlkID09IG1hcmtlcl9pZCkuaXNJbmZvV2luZG93T3BlbiA9ICFpc19vcGVuO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBtYXJrZXJzOiBtYXJrZXJzIH0pO1xuICAgIH07XG5cbiAgICBoYW5kbGVNYXJrZXJEcmFnKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25NYXJrZXJEcmFnZ2VkKGV2LmxhdExuZy5sYXQoKSwgZXYubGF0TG5nLmxuZygpKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlTWFwQ2xpY2soZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1hcENsaWNrKGV2LmxhdExuZy5sYXQoKSwgZXYubGF0TG5nLmxuZygpKTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge21hcmtlcnN9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHt6b29tLCBjZW50ZXJ9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGRyYWdnYWJsZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2RyYWdnYWJsZScpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8R29vZ2xlTWFwV3JhcHBlclxuICAgICAgICAgICAgICAgIHNob3dNYXJrZXJzPXttYXJrZXJzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICAgbWFya2Vycz17bWFya2Vyc31cbiAgICAgICAgICAgICAgICB6b29tPXsgem9vbSA/IHpvb20gOiBNQVAuZGVmYXVsdFpvb20gfVxuICAgICAgICAgICAgICAgIGNlbnRlcj17IGNlbnRlci5sYXQgPyBjZW50ZXIgOiBNQVAuZGVmYXVsdENlbnRlciB9XG4gICAgICAgICAgICAgICAgbG9hZGluZ0VsZW1lbnQ9ezxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBgMTAwJWAgfX0gLz59XG4gICAgICAgICAgICAgICAgY29udGFpbmVyRWxlbWVudD17PGRpdiBzdHlsZT17eyBoZWlnaHQ6IGA0MDBweGAgfX0gLz59XG4gICAgICAgICAgICAgICAgbWFwRWxlbWVudD17PGRpdiBzdHlsZT17eyBoZWlnaHQ6IGAxMDAlYCB9fSAvPn1cbiAgICAgICAgICAgICAgICBvbk1hcExvYWQ9e3RoaXMuaGFuZGxlTWFwTG9hZH1cbiAgICAgICAgICAgICAgICBvbk1hcENoYW5nZT17dGhpcy5oYW5kbGVNYXBDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25Ub2dnbGVJbmZvV2luZG93PXt0aGlzLmhhbmRsZU1hcmtlckNsaWNrfVxuICAgICAgICAgICAgICAgIG9uTWFya2VyRHJhZz17dGhpcy5oYW5kbGVNYXJrZXJEcmFnfVxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZT17ZHJhZ2dhYmxlfVxuICAgICAgICAgICAgICAgIG9uTWFwQ2xpY2s9e3RoaXMuaGFuZGxlTWFwQ2xpY2t9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR01hcDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlBY2Nlc3NMZXZlbHN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2Nlc3NMZXZlbHNJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRBY2Nlc3NMZXZlbHMgPSB0aGlzLmdldEFjY2Vzc0xldmVscy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvbkxhYmVsID0gdGhpcy5nZXRPcHRpb25MYWJlbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGdldE9wdGlvblZhbHVlKGFjY2Vzc0xldmVsKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvblZhbHVlXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvblZhbHVlKGFjY2Vzc0xldmVsKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIGFjY2Vzc0xldmVsLmlkO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkxhYmVsKGFjY2Vzc0xldmVsKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvbkxhYmVsXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvbkxhYmVsKGFjY2Vzc0xldmVsKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIGAke2FjY2Vzc0xldmVsLm5hbWV9YDtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYWNjZXNzbGV2ZWxpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldEFjY2Vzc0xldmVscyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7c3VtbWl0SWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlBY2Nlc3NMZXZlbHMoc3VtbWl0SWQsaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIGVycm9yLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRBY2Nlc3NMZXZlbHN9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXttID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUobSl9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXttID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwobSl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vYWN0aW9uLWRyb3Bkb3duLmxlc3MnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY3Rpb25Ecm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHZhbHVlfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2xpY2soZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKHRoaXMuc3RhdGUudmFsdWUudmFsdWUpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29wdGlvbnMsIGFjdGlvbkxhYmVsLCBwbGFjZWhvbGRlciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge3ZhbHVlfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgbGV0IHNtYWxsRGRsID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc21hbGwnKSA/ICdzbWFsbCcgOiAnJztcbiAgICAgICAgbGV0IHNtYWxsQnRuID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc21hbGwnKSA/ICdidG4tZ3JvdXAtc20nIDogJ25vcm1hbCc7XG5cbiAgICAgICAgbGV0IHRoZVZhbHVlID0gKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0IHx8IHZhbHVlID09IG51bGwpID8gdmFsdWUgOiBvcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PSB2YWx1ZSk7XG5cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiYWN0aW9uLWRyb3Bkb3duIGJ0bi1ncm91cCBcIiArIHNtYWxsQnRufT5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJidG4tZ3JvdXAgYWN0aW9uLXNlbGVjdCB0ZXh0LWxlZnRcIiArIHNtYWxsRGRsfVxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHQgYWN0aW9uLWJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICB7YWN0aW9uTGFiZWx9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoZWNrYm94TGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgbGV0IG90aGVyVmFsdWUgPSBwcm9wcy52YWx1ZSA/IHByb3BzLnZhbHVlLmZpbmQoIHYgPT4gIXByb3BzLm9wdGlvbnMubWFwKG9wID0+IG9wLnZhbHVlKS5pbmNsdWRlcyh2KSApIDogZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG90aGVyQ2hlY2tlZDogISFvdGhlclZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU90aGVyQ0JDaGFuZ2UgPSB0aGlzLmhhbmRsZU90aGVyQ0JDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgbGV0IG9wdGlvblZhbHVlcyA9IHRoaXMucHJvcHMub3B0aW9ucy5tYXAob3AgPT4gb3AudmFsdWUpO1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlID8gWy4uLnRoaXMucHJvcHMudmFsdWVdIDogW107XG5cbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGVWYWwgPSBpc05hTihldmVudC50YXJnZXQudmFsdWUpID8gZXZlbnQudGFyZ2V0LnZhbHVlIDogcGFyc2VJbnQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKHRoZVZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZmlsdGVyKCB2ID0+IHYgIT0gZXZlbnQudGFyZ2V0LnZhbHVlIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZmlsdGVyKHYgPT4gb3B0aW9uVmFsdWVzLmluY2x1ZGVzKHYpKTtcbiAgICAgICAgICAgIHZhbHVlLnB1c2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94bGlzdCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGhhbmRsZU90aGVyQ0JDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3RoZXJDaGVja2VkOiBldmVudC50YXJnZXQuY2hlY2tlZH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBvcHRpb25zLCBpZCwgY2hpbGRyZW4sIGVycm9yLCBkaXNhYmxlZCxuYW1lLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7IG90aGVyQ2hlY2tlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBsZXQgaW5saW5lID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpbmxpbmUnKSApO1xuICAgICAgICBsZXQgaHRtbCA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaHRtbCcpICk7XG4gICAgICAgIGxldCBhbGxvd090aGVyID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhbGxvd090aGVyJykgKTtcbiAgICAgICAgbGV0IG90aGVyVmFsdWUgPSB2YWx1ZSA/IHZhbHVlLmZpbmQoIHYgPT4gIW9wdGlvbnMubWFwKG9wID0+IG9wLnZhbHVlKS5pbmNsdWRlcyh2KSApIDogZmFsc2UgO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuXG5cbiAgICAgICAgbGV0IHN0eWxlLCBsYWJlbDtcblxuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnLFxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcyMHB4JyxcbiAgICAgICAgICAgICAgICBmbG9hdDogJ2xlZnQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICc3cHgnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBpZD17YGNobF93cmFwcGVyXyR7aWR9YH0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiY2hlY2tib3hlcy1kaXZcIiArIChoYXNfZXJyb3IgPyAnIGVycm9yJyA6ICcnKSB9PlxuICAgICAgICAgICAgICAgICAgICB7IG9wdGlvbnMubWFwKG9wID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGVja2VkID0gdmFsdWUgPyB2YWx1ZS5pbmNsdWRlcyhvcC52YWx1ZSkgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1jaGVja2JveFwiIGtleT17XCJyYWRpb19rZXlfXCIgKyBvcC52YWx1ZX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YGNiXyR7aWR9XyR7b3AudmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWU/IG5hbWUgOiBpZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9IGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIiB2YWx1ZT17b3AudmFsdWV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YGNiXyR7aWR9XyR7b3AudmFsdWV9YCAgfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPntvcC5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IWh0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgICAgICAgICB7YWxsb3dPdGhlciAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLWNoZWNrYm94XCIgc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17XCJjYl9vdGhlclwiICsgaWR9IGNoZWNrZWQ9e290aGVyQ2hlY2tlZH0gZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT3RoZXJDQkNoYW5nZX0gY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1pbnB1dFwiIHZhbHVlPVwib3RoZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtcImNiX290aGVyXCIgKyBpZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5vdGhlclwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAge2FsbG93T3RoZXIgJiYgb3RoZXJDaGVja2VkICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3twYWRkaW5nTGVmdDogJzIycHgnLCB3aWR0aDogJzUwJSd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBkaXNhYmxlZD17aXNEaXNhYmxlZH0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfSB2YWx1ZT17b3RoZXJWYWx1ZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cblxuQ2hlY2tib3hMaXN0LnByb3BUeXBlcyA9IHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlDb21wYW5pZXN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuaW1wb3J0IEFzeW5jQ3JlYXRhYmxlU2VsZWN0IGZyb20gXCJyZWFjdC1zZWxlY3QvbGliL0FzeW5jQ3JlYXRhYmxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBhbnlJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU5ldyA9IHRoaXMuaGFuZGxlTmV3LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0Q29tcGFuaWVzID0gdGhpcy5nZXRDb21wYW5pZXMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgY29uc3QgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpIHx8IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2lzTXVsdGknKSk7XG4gICAgICAgIGNvbnN0IHRoZVZhbHVlID0gaXNNdWx0aSA/IHZhbHVlLm1hcCh2ID0+ICh7aWQ6IHYudmFsdWUsIG5hbWU6IHYubGFiZWx9KSkgOiB7aWQ6IHZhbHVlLnZhbHVlLCBuYW1lOiB2YWx1ZS5sYWJlbH07XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGVWYWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgaGFuZGxlTmV3KHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZVZhbHVlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh7dmFsdWU6IG5ld1ZhbHVlLmlkLCBsYWJlbDogbmV3VmFsdWUubmFtZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNyZWF0ZSh2YWx1ZSwgdHJhbnNsYXRlVmFsdWUpO1xuICAgIH1cblxuICAgIGdldENvbXBhbmllcyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZU9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld09wdGlvbnMgPSBvcHRpb25zLm1hcChjID0+ICh7dmFsdWU6IGMuaWQudG9TdHJpbmcoKSwgbGFiZWw6IGMubmFtZX0pKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ld09wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHF1ZXJ5Q29tcGFuaWVzKGlucHV0LCB0cmFuc2xhdGVPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZXJyb3IsIHZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSB8fCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpc011bHRpJykpO1xuICAgICAgICBsZXQgYWxsb3dDcmVhdGUgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhbGxvd0NyZWF0ZScpO1xuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzTXVsdGkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB2YWx1ZS5tYXAodiA9PiAoe3ZhbHVlOiB2LmlkLnRvU3RyaW5nKCksIGxhYmVsOiB2Lm5hbWV9ICkpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc011bHRpICYmIHZhbHVlKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHt2YWx1ZTogdmFsdWUuaWQudG9TdHJpbmcoKSwgbGFiZWw6IHZhbHVlLm5hbWV9O1xuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCBBc3luY0NvbXBvbmVudCA9IGFsbG93Q3JlYXRlXG4gICAgICAgICAgICA/IEFzeW5jQ3JlYXRhYmxlU2VsZWN0XG4gICAgICAgICAgICA6IEFzeW5jU2VsZWN0O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY0NvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0Q29tcGFuaWVzfVxuICAgICAgICAgICAgICAgICAgICBvbkNyZWF0ZU9wdGlvbj17dGhpcy5oYW5kbGVOZXd9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9kcm9wZG93bic7XG5pbXBvcnQge2dldENvdW50cnlMaXN0fSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ291bnRyeURyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3B0aW9uczogW11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGlmKG9wdGlvbnMubGVuZ3RoID09IDApe1xuICAgICAgICAgICAgZ2V0Q291bnRyeUxpc3QodGhpcy5zZXRPcHRpb25zLCB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb3VudHJ5ZGRsJ1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgc2V0T3B0aW9ucyhyZXNwb25zZSkge1xuICAgICAgICBsZXQgY291bnRyeUxpc3QgPSByZXNwb25zZS5tYXAoYyA9PiAoe2xhYmVsOiBjLm5hbWUsIHZhbHVlOiBjLmlzb19jb2RlfSkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcHRpb25zOiBjb3VudHJ5TGlzdH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e29wdGlvbnN9IHsuLi50aGlzLnByb3BzfSAvPlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuaW1wb3J0IHtnZXRDb3VudHJ5TGlzdH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvdW50cnlJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG9wdGlvbnM6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnMuYmluZCh0aGlzKTtcblxuICAgICAgICBnZXRDb3VudHJ5TGlzdCh0aGlzLnNldE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHNldE9wdGlvbnMocmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGNvdW50cnlMaXN0ID0gcmVzcG9uc2UubWFwKGMgPT4gKHtsYWJlbDogYy5uYW1lLCB2YWx1ZTogYy5pc29fY29kZX0pKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3B0aW9uczogY291bnRyeUxpc3R9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdmFsdWUubWFwKHYgPT4gdi52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGVWYWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY291bnRyeWlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSBvcHRpb25zLmZpbHRlcihvcCA9PiB2YWx1ZS5pbmNsdWRlcyhvcC52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgfHwgdmFsdWUgPT0gbnVsbCkgPyB2YWx1ZSA6IG9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcImRyb3Bkb3duXCIgKyAoaGFzX2Vycm9yID8gJyBlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9kYXRldGltZXBpY2tlci5sZXNzJztcbmltcG9ydCBEYXRldGltZSBmcm9tICdyZWFjdC1kYXRldGltZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVUaW1lUGlja2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmlzVmFsaWREYXRlID0gdGhpcy5pc1ZhbGlkRGF0ZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWUgIT09IHByZXZQcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHRoaXMucHJvcHMudmFsdWV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGRhdGUpIHtcblxuICAgICAgICBsZXQgeyB0aW1lem9uZSB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoZGF0ZSAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkpIHtcbiAgICAgICAgICAgIGRhdGUgPSBtb21lbnQudHooZGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKSwgdGltZXpvbmUpXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIGRhdGUgPSBtb21lbnQoMCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGRhdGUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGV0aW1lJ1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgaWYgKGRhdGUgJiYgbW9tZW50LmlzTW9tZW50KGRhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgaXNWYWxpZERhdGUoY3VycmVudERhdGUsIHNlbGVjdGVkRGF0ZSkge1xuICAgICAgICBsZXQgeyB0aW1lem9uZSwgdmFsaWRhdGlvbiB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHthZnRlciwgYmVmb3JlfSA9IHZhbGlkYXRpb247XG5cbiAgICAgICAgaWYgKGFmdGVyID09ICc8JylcbiAgICAgICAgICAgIHJldHVybiAoY3VycmVudERhdGUuaXNCZWZvcmUobW9tZW50LnR6KGJlZm9yZSAqIDEwMDAsIHRpbWV6b25lKSkpO1xuICAgICAgICBlbHNlIGlmKGFmdGVyID09ICc+JylcbiAgICAgICAgICAgIHJldHVybiAoY3VycmVudERhdGUuaXNBZnRlcihtb21lbnQudHooYmVmb3JlICogMTAwMCwgdGltZXpvbmUpKSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGFmdGVyRGF0ZSA9IG1vbWVudC50eihhZnRlciAqIDEwMDAsIHRpbWV6b25lKS5zdWJ0cmFjdCgxLCAnZGF5Jyk7XG4gICAgICAgICAgICBsZXQgYmVmb3JlRGF0ZSA9IG1vbWVudC50eihiZWZvcmUgKiAxMDAwLCB0aW1lem9uZSk7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuaXNBZnRlcihhZnRlckRhdGUpICYmIGN1cnJlbnREYXRlLmlzQmVmb3JlKGJlZm9yZURhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgdmFsaWRhdGUgPSAodHlwZW9mIHRoaXMucHJvcHMudmFsaWRhdGlvbiAhPSAndW5kZWZpbmVkJyk7XG4gICAgICAgIGxldCB7b25DaGFuZ2UsIGlkLCB2YWx1ZSwgZm9ybWF0LCBlcnJvciwgaW5wdXRQcm9wcywgZGlzYWJsZWQsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgY2xhc3NOYW1lID0gJ2Zvcm0tY29udHJvbCAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyk7XG4gICAgICAgIGxldCBpbnB1dERpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykpID8gZGlzYWJsZWQgOiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICB7dmFsaWRhdGUgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRldGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZERhdGU9e3RoaXMuaXNWYWxpZERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0PXtmb3JtYXQuZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQ9e2Zvcm1hdC50aW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXt7Li4uaW5wdXRQcm9wcywgaWQ6IGlkLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgZGlzYWJsZWQ6IGlucHV0RGlzYWJsZWQsIGF1dG9Db21wbGV0ZTogJ29mZid9fVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPERhdGV0aW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0PXtmb3JtYXQuZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQ9e2Zvcm1hdC50aW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXt7Li4uaW5wdXRQcm9wcywgaWQ6IGlkLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgZGlzYWJsZWQ6IGlucHV0RGlzYWJsZWQsIGF1dG9Db21wbGV0ZTogJ29mZid9fVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzZWxlY3Rpb24pIHtcblxuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5pc011bHRpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi5tYXAodmFsID0+IHZhbC52YWx1ZSkgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBzZWxlY3Rpb24gPyBzZWxlY3Rpb24udmFsdWUgOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZHJvcGRvd24nXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIGNsZWFyYWJsZSwgZGlzYWJsZWQsIG92ZXJyaWRlQ1NTLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlzQ2xlYXJhYmxlID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2NsZWFyYWJsZScpKTtcbiAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBkaXNhYmxlZCA9PSB0cnVlKTtcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcblxuICAgICAgICBsZXQgc2VsZWN0Q2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnb3ZlcnJpZGVDU1MnKSB8fCBvdmVycmlkZUNTUyA9PSBmYWxzZSkge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3NOYW1lID0gJ2Ryb3Bkb3duICcgKyBjbGFzc05hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmlzTXVsdGkpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdGhpcy5wcm9wcy5vcHRpb25zLmZpbHRlcihvcCA9PiB2YWx1ZS5pbmNsdWRlcyhvcC52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgfHwgdmFsdWUgPT0gbnVsbCkgPyB2YWx1ZSA6IHRoaXMucHJvcHMub3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0U3R5bGVzID0geyBtZW51OiBzdHlsZXMgPT4gKHsgLi4uc3R5bGVzLCB6SW5kZXg6IDk5OSB9KSB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzZWxlY3RDbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyYWJsZT17aXNDbGVhcmFibGV9XG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlcz17c2VsZWN0U3R5bGVzfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0RWRpdG9yIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5SaWNoVGV4dEVkaXRvciA9IG51bGw7XG5cbiAgICAgICAgLy8gdGhpcyBpcyBkb25lIGJjIGR1ZSBTU1IgaXNzdWVzXG4gICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3NzdHVyL3JlYWN0LXJ0ZS9pc3N1ZXMvMzczXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5SaWNoVGV4dEVkaXRvciA9IHJlcXVpcmUoJ3JlYWN0LXJ0ZScpLmRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZWRpdG9yVmFsdWU6IHRoaXMuUmljaFRleHRFZGl0b3I/LmNyZWF0ZUVtcHR5VmFsdWUoKSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgICAgICBjb25zdCB7dmFsdWV9ID0gcHJvcHM7XG4gICAgICAgIGNvbnN0IHtlZGl0b3JWYWx1ZSwgY3VycmVudFZhbHVlfSA9IHN0YXRlO1xuXG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBlZGl0b3JWYWx1ZTogZWRpdG9yVmFsdWUuc2V0Q29udGVudEZyb21TdHJpbmcodmFsdWUsICdodG1sJyksIGN1cnJlbnRWYWx1ZTogdmFsdWV9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGVkaXRvclZhbHVlKSB7XG5cbiAgICAgICAgbGV0IG9sZEVkaXRvclZhbHVlID0gdGhpcy5zdGF0ZS5lZGl0b3JWYWx1ZTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRpdG9yVmFsdWV9KTtcblxuICAgICAgICBsZXQgb2xkQ29udGVudFN0YXRlID0gb2xkRWRpdG9yVmFsdWUgPyBvbGRFZGl0b3JWYWx1ZS5nZXRFZGl0b3JTdGF0ZSgpLmdldEN1cnJlbnRDb250ZW50KCkgOiBudWxsO1xuICAgICAgICBsZXQgbmV3Q29udGVudFN0YXRlID0gZWRpdG9yVmFsdWUuZ2V0RWRpdG9yU3RhdGUoKS5nZXRDdXJyZW50Q29udGVudCgpO1xuXG4gICAgICAgIGlmIChvbGRDb250ZW50U3RhdGUgIT09IG5ld0NvbnRlbnRTdGF0ZSkge1xuICAgICAgICAgICAgbGV0IHN0cmluZ1ZhbHVlID0gZWRpdG9yVmFsdWUudG9TdHJpbmcoJ2h0bWwnKTtcbiAgICAgICAgICAgIHN0cmluZ1ZhbHVlID0gc3RyaW5nVmFsdWUgPT09ICc8cD48YnI+PC9wPicgPyAnJyA6IHN0cmluZ1ZhbHVlO1xuXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtjdXJyZW50VmFsdWU6IHN0cmluZ1ZhbHVlfSk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpbmdWYWx1ZSAhPT0gdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZ1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHRlZGl0b3InXG4gICAgICAgICAgICAgICAgICAgIH19O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGVycm9yLCBjbGFzc05hbWUsIGlkLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT09ICcnICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAge3RoaXMuUmljaFRleHRFZGl0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgPHRoaXMuUmljaFRleHRFZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5lZGl0b3JWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5RXZlbnRzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldEV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnZXZlbnRpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0RXZlbnRzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHtzdW1taXQsIG9ubHlQdWJsaXNoZWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeUV2ZW50cyhzdW1taXQuaWQsIGlucHV0LCBvbmx5UHVibGlzaGVkLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldEV2ZW50c31cbiAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvbi5pZH1cbiAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IG9wdGlvbi50aXRsZX1cbiAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDcmVhdGFibGVTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9DcmVhdGFibGUnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZyZWVNdWx0aVRleHRJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGlucHV0VmFsdWU6ICcnXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlID0gdGhpcy5oYW5kbGVJbnB1dENoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleURvd24gPSB0aGlzLmhhbmRsZUtleURvd24uYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGxpbWl0ID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbGltaXQnKSA/IHRoaXMucHJvcHMubGltaXQgOiBmYWxzZTtcblxuICAgICAgICBpZiAoIWxpbWl0IHx8IGxpbWl0ID49IHZhbHVlLmxlbmd0aCApIHtcbiAgICAgICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ZyZWV0ZXh0bGlzdCdcbiAgICAgICAgICAgICAgICB9fTtcblxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVJbnB1dENoYW5nZShpbnB1dFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBpbnB1dFZhbHVlIH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgeyBpbnB1dFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgeyB2YWx1ZSB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0VmFsdWUpIHJldHVybjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZTogJycsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShbLi4udmFsdWUsIHtsYWJlbDogaW5wdXRWYWx1ZSwgdmFsdWU6IGlucHV0VmFsdWV9XSlcblxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBpbnB1dFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQge2lkLCB2YWx1ZSwgb25DaGFuZ2UsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENyZWF0YWJsZVNlbGVjdFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3tEcm9wZG93bkluZGljYXRvcjogbnVsbH19XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgICAgICBpc011bHRpXG4gICAgICAgICAgICAgICAgbWVudUNvbnRhaW5lclN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25JbnB1dENoYW5nZT17dGhpcy5oYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICBvbklucHV0S2V5RG93bj17dGhpcy5oYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtULnRyYW5zbGF0ZShcImdlbmVyYWwudHlwZV9zb21ldGhpbmdcIil9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5R3JvdXBzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3JvdXBJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnZ3JvdXBpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0R3JvdXBzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVlcnlHcm91cHMoaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0R3JvdXBzfVxuICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uLmlkfVxuICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gb3B0aW9uLnRpdGxlfVxuICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBjb25zdCBPcHRpb25Hcm91cCA9ICAoe1xuICAgIHZhbHVlLFxuICAgIGxhYmVsLFxuICAgIG9wdGlvbnNcbn0pID0+IHtcbiAgICByZXR1cm4gKFtcbiAgICAgICAgPG9wdGlvbiBrZXk9e1wiZ3JvdXBcIiArIHZhbHVlfSBjbGFzc05hbWU9XCJvcHRpb24tZ3JvdXBcIiB2YWx1ZT17dmFsdWV9PntsYWJlbH08L29wdGlvbj4sXG4gICAgICAgIG9wdGlvbnMubWFwKChvcHQsaSkgPT4gKFxuICAgICAgICAgICAgPG9wdGlvbiBjbGFzc05hbWU9XCJvcHRpb24tY2hpbGRcIiBrZXk9e29wdC52YWx1ZX0gdmFsdWU9e29wdC52YWx1ZX0+IC0ge29wdC5sYWJlbH08L29wdGlvbj5cbiAgICAgICAgKSlcbiAgICBdKTtcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgT3B0aW9uR3JvdXAgfSBmcm9tICcuL09wdGlvbkdyb3VwJztcbmltcG9ydCAnLi9vcHRpb25ncm91cC5sZXNzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3JvdXBlZERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWUgIT09IHByZXZQcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHRoaXMucHJvcHMudmFsdWV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtpZCwgb3B0aW9ucywgcGxhY2Vob2xkZXIsIGNsYXNzTmFtZSwgZXJyb3J9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQge3ZhbHVlfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lICsgJyBmb3JtLWNvbnRyb2wgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgZGlzYWJsZWQ+e3BsYWNlaG9sZGVyfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMubWFwKChvcHQsaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0Lm9wdGlvbnMgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvbkdyb3VwIGtleT17J2dyb3VwX29wdF8nK2l9IGxhYmVsPXtvcHQubGFiZWx9IHZhbHVlPXtvcHQudmFsdWV9IG9wdGlvbnM9e29wdC5vcHRpb25zfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17b3B0LnZhbHVlfSB2YWx1ZT17b3B0LnZhbHVlfT57b3B0LmxhYmVsfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuaW1wb3J0IHtnZXRMYW5ndWFnZUxpc3R9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYW5ndWFnZUlucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgICBzaG91bGRVc2VJZDogcHJvcHMuaGFzT3duUHJvcGVydHkoJ3Nob3VsZFVzZUlkJykgPyBwcm9wcy5zaG91bGRVc2VJZCA6IGZhbHNlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zID0gdGhpcy5zZXRPcHRpb25zLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgICAgIGdldExhbmd1YWdlTGlzdCh0aGlzLnNldE9wdGlvbnMsIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG5cbiAgICBzZXRPcHRpb25zKHJlc3BvbnNlKSB7XG4gICAgICAgIGxldCBsYW5ndWFnZUxpc3QgPSAodGhpcy5zdGF0ZS5zaG91bGRVc2VJZCkgP1xuICAgICAgICAgICAgcmVzcG9uc2UubWFwKGwgPT4gKHtsYWJlbDogbC5uYW1lLCB2YWx1ZTogbC5pZH0pKTpcbiAgICAgICAgICAgIHJlc3BvbnNlLm1hcChsID0+ICh7bGFiZWw6IGwubmFtZSwgdmFsdWU6IGwuaXNvX2NvZGV9KSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wdGlvbnM6IGxhbmd1YWdlTGlzdH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcblxuICAgICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB2YWx1ZS5tYXAodiA9PiB2LnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoZVZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdsYWd1YWdlaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IG9wdGlvbnMuZmlsdGVyKG9wID0+IHZhbHVlLmluY2x1ZGVzKG9wLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9ICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCB8fCB2YWx1ZSA9PSBudWxsKSA/IHZhbHVlIDogb3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeU1lbWJlcnN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZW1iZXJJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRNZW1iZXJzID0gdGhpcy5nZXRNZW1iZXJzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUobWVtYmVyKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvblZhbHVlXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvblZhbHVlKG1lbWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBtZW1iZXIuaWQ7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWwobWVtYmVyKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvbkxhYmVsXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvbkxhYmVsKG1lbWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBgJHttZW1iZXIuZmlyc3RfbmFtZX0gJHttZW1iZXIubGFzdF9uYW1lfSAoJHttZW1iZXIuaWR9KWA7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ21lbWJlcmlucHV0J1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRNZW1iZXJzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5TWVtYmVycyhpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgZXJyb3IsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldE1lbWJlcnN9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXttID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUobSl9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXttID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwobSl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQgQXN5bmNDcmVhdGFibGVTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luY0NyZWF0YWJsZSc7XG5pbXBvcnQge3F1ZXJ5T3JnYW5pemF0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZ2FuaXphdGlvbklucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmV3ID0gdGhpcy5oYW5kbGVOZXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcmdhbml6YXRpb25zID0gdGhpcy5nZXRPcmdhbml6YXRpb25zLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZToge2lkOiB2YWx1ZS52YWx1ZSwgbmFtZTogdmFsdWUubGFiZWx9LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdvcmdhbml6YXRpb25pbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGhhbmRsZU5ldyh2YWx1ZSkge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVWYWx1ZSA9IChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2Uoe3ZhbHVlOiBuZXdWYWx1ZS5pZCwgbGFiZWw6IG5ld1ZhbHVlLm5hbWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcHMub25DcmVhdGUodmFsdWUsIHRyYW5zbGF0ZVZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRPcmdhbml6YXRpb25zIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlT3B0aW9ucyA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3T3B0aW9ucyA9IG9wdGlvbnMubWFwKG9yZyA9PiAoe3ZhbHVlOiBvcmcuaWQudG9TdHJpbmcoKSwgbGFiZWw6IG9yZy5uYW1lfSkpO1xuICAgICAgICAgICAgY2FsbGJhY2sobmV3T3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcXVlcnlPcmdhbml6YXRpb25zKGlucHV0LCB0cmFuc2xhdGVPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZXJyb3IsIHZhbHVlLCBpZCwgb25DaGFuZ2UsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgYWxsb3dDcmVhdGUgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhbGxvd0NyZWF0ZScpO1xuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuICAgICAgICBsZXQgdGhlVmFsdWUgPSB2YWx1ZSA/IHt2YWx1ZTogdmFsdWUuaWQudG9TdHJpbmcoKSwgbGFiZWw6IHZhbHVlLm5hbWV9IDogbnVsbDtcblxuICAgICAgICBjb25zdCBBc3luY0NvbXBvbmVudCA9IGFsbG93Q3JlYXRlXG4gICAgICAgICAgICA/IEFzeW5jQ3JlYXRhYmxlU2VsZWN0XG4gICAgICAgICAgICA6IEFzeW5jU2VsZWN0O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY0NvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0T3JnYW5pemF0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgb25DcmVhdGVPcHRpb249e3RoaXMuaGFuZGxlTmV3fVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cblxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhZGlvTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHNlbGVjdGlvbikge1xuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGlvbi50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAncmFkaW8nXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldExhYmVsKG9wdGlvbiwgaWQsIGlubGluZSwgc2ltcGxlLCBodG1sKSB7XG4gICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtgcmFkaW9fJHtpZH1fJHtvcHRpb24udmFsdWV9YH0gc3R5bGU9e3tkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ319PlxuICAgICAgICAgICAgICAgICAgICB7aHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7IWh0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5sYWJlbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2ltcGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YHJhZGlvXyR7aWR9XyR7b3B0aW9uLnZhbHVlfWB9ID5cbiAgICAgICAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtgcmFkaW9fJHtpZH1fJHtvcHRpb24udmFsdWV9YH0gc3R5bGU9e3tkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ319PlxuICAgICAgICAgICAgICAgICAgICA8aDQgc3R5bGU9e3ttYXJnaW5Ub3A6ICcwcHgnfX0+e29wdGlvbi5sYWJlbH08L2g0PlxuICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTD57b3B0aW9uLmRlc2NyaXB0aW9ufTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBlcnJvciwgZGlzYWJsZWQsIG9wdGlvbnMsaWQsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaW5saW5lID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpbmxpbmUnKSApO1xuICAgICAgICBsZXQgc2ltcGxlID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzaW1wbGUnKSApO1xuICAgICAgICBsZXQgaHRtbCA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaHRtbCcpICk7XG4gICAgICAgIGxldCBpc0Rpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgZGlzYWJsZWQgPT0gdHJ1ZSk7XG5cbiAgICAgICAgbGV0IHN0eWxlLCBsYWJlbDtcblxuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnLFxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcyMHB4JyxcbiAgICAgICAgICAgICAgICBmbG9hdDogJ2xlZnQnXG4gICAgICAgICAgICB9O1xuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMjJweCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGlkPXtgcmxfd3JhcHBlcl8ke2lkfWB9PlxuICAgICAgICAgICAgICAgIHsgb3B0aW9ucy5tYXAob3AgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hlY2tlZCA9IChvcC52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLXJhZGlvXCIga2V5PXtgcmFkaW9fa2V5XyR7aWR9XyR7b3AudmFsdWV9YH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgcmFkaW9fJHtpZH1fJHtvcC52YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17b3AudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e2ByYWRpb18ke2lkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5nZXRMYWJlbChvcCwgaWQsIGlubGluZSwgc2ltcGxlLCBodG1sKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5SYWRpb0xpc3QucHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7IHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmNvbnN0IFJlZ2lzdHJhdGlvbkNvbXBhbnlJbnB1dCA9ICh7IGVycm9yLCB2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgaXNNdWx0aSwgY2xhc3NOYW1lLCBzdW1taXRJZCwgb25FcnJvciwgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICBjb25zdCBbdGhlVmFsdWUsIHNldFRoZVZhbHVlXSA9IHVzZVN0YXRlKHsgdmFsdWU6IG51bGwsIGxhYmVsOiAnJyB9KTtcbiAgICBjb25zdCBbZnJlZUlucHV0LCBzZXRGcmVlSW5wdXRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbaXNNdWx0aU9wdGlvbmFsLCBzZXRJc011bHRpT3B0aW9uYWxdID0gdXNlU3RhdGUobXVsdGkgfHwgaXNNdWx0aSk7XG4gICAgY29uc3QgW2hhc0Vycm9yLCBzZXRIYXNFcnJvcl0gPSB1c2VTdGF0ZShlcnJvcik7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIH0sIFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghdmFsdWUuaWQgJiYgdmFsdWUubmFtZSkgeyAgICAgICAgICAgIFxuICAgICAgICAgICAgc2V0RnJlZUlucHV0KHRydWUpO1xuICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgIHNldFRoZVZhbHVlKHsgdmFsdWU6IG51bGwsIGxhYmVsOiB2YWx1ZS5uYW1lIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNNdWx0aSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhlVmFsdWUodmFsdWUubWFwKHYgPT4gKHsgdmFsdWU6IHYuaWQsIGxhYmVsOiB2Lm5hbWUgfSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGkgJiYgdmFsdWUuaWQpIHtcbiAgICAgICAgICAgICAgICBzZXRUaGVWYWx1ZSh7IHZhbHVlOiB2YWx1ZS5pZCwgbGFiZWw6IHZhbHVlLm5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbdmFsdWVdKVxuXG4gICAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50VmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50VmFsdWUudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEZyZWVJbnB1dCh0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlU3RhdGUgPSBpc011bHRpT3B0aW9uYWwgPyBldmVudFZhbHVlLm1hcCh2ID0+ICh7IHZhbHVlOiB2LnZhbHVlLCBsYWJlbDogJycgfSkpIDogeyB2YWx1ZTogZXZlbnRWYWx1ZS52YWx1ZSwgbGFiZWw6ICcnIH07XG4gICAgICAgICAgICBzZXRUaGVWYWx1ZShuZXdWYWx1ZVN0YXRlKTtcbiAgICAgICAgICAgIGxldCBldiA9IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBhbnlpbnB1dCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb25DaGFuZ2UoZXYpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBpc011bHRpT3B0aW9uYWwgPyBldmVudFZhbHVlLm1hcCh2ID0+ICh7IGlkOiB2LnZhbHVlLCBuYW1lOiB2LmxhYmVsIH0pKSA6IHsgaWQ6IGV2ZW50VmFsdWUudmFsdWUsIG5hbWU6IGV2ZW50VmFsdWUubGFiZWwgfTtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVTdGF0ZSA9IGlzTXVsdGlPcHRpb25hbCA/IGV2ZW50VmFsdWUubWFwKHYgPT4gKHsgdmFsdWU6IHYudmFsdWUsIGxhYmVsOiB2LmxhYmVsIH0pKSA6IHsgdmFsdWU6IGV2ZW50VmFsdWUudmFsdWUsIGxhYmVsOiBldmVudFZhbHVlLmxhYmVsIH07XG4gICAgICAgIHNldFRoZVZhbHVlKG5ld1ZhbHVlU3RhdGUpO1xuXG5cbiAgICAgICAgbGV0IGV2ID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRDbGVhciA9ICgpID0+IHtcbiAgICAgICAgc2V0RnJlZUlucHV0KCFmcmVlSW5wdXQpO1xuICAgICAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICAgICAgc2V0VGhlVmFsdWUoeyB2YWx1ZTogbnVsbCwgbGFiZWw6ICcnIH0pO1xuICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHsgaWQ6IG51bGwsIG5hbWU6ICcnIH0sXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBhbnlpbnB1dCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKGV2dCkgPT4ge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKGV2dC50YXJnZXQudmFsdWUpO1xuICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHsgaWQ6IG51bGwsIG5hbWU6IGV2dC50YXJnZXQudmFsdWUgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0Q29tcGFuaWVzID0gKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZU9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgb25FcnJvcihvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcbiAgICAgICAgICAgIGNvbnN0IG90aGVyT3B0aW9uID0geyB2YWx1ZTogbnVsbCwgbGFiZWw6ICdPdGhlcicgfTtcbiAgICAgICAgICAgIGxldCBuZXdPcHRpb25zID0gWy4uLm9wdGlvbnMubWFwKGMgPT4gKHsgdmFsdWU6IGMuaWQudG9TdHJpbmcoKSwgbGFiZWw6IGMubmFtZSB9KSksIG90aGVyT3B0aW9uXTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ld09wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzKHN1bW1pdElkLCBpbnB1dCwgdHJhbnNsYXRlT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIHtmcmVlSW5wdXQgP1xuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgY29tcGFueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgcGFkZGluZ1JpZ2h0OiAyNSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxpIGFyaWEtbGFiZWw9J0NsZWFyJyBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgYm90dG9tOiAxMCwgcmlnaHQ6IDI1LCBjdXJzb3I6ICdwb2ludGVyJywgb3BhY2l0eTogJzY1JScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUlucHV0Q2xlYXJ9IGNsYXNzTmFtZT0nZmEgZmEtY2xvc2UnPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgaWYgbm8gbGFiZWwgYW5kIHZhbHVlIHRvIHNob3cgdGhlIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZS5sYWJlbCAmJiB0aGVWYWx1ZS52YWx1ZSA/IHRoZVZhbHVlIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J1NlbGVjdCBhIGNvbXBhbnknXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRPcHRpb25zPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17Z2V0Q29tcGFuaWVzfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpT3B0aW9uYWx9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2hhc0Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xuXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlZ2lzdHJhdGlvbkNvbXBhbnlJbnB1dDtcblxuUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0LnByb3BUeXBlcyA9IHtcbiAgICBvbkVycm9yOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7IGNvbXBvbmVudHMgfSBmcm9tICdyZWFjdC1zZWxlY3QvbGliL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBxdWVyeVNwZWFrZXJzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwZWFrZXJJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFNwZWFrZXJzID0gdGhpcy5nZXRTcGVha2Vycy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvbkxhYmVsID0gdGhpcy5nZXRPcHRpb25MYWJlbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzcGVha2VyaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayhzcGVha2VySWQpIHtcbiAgICAgICAgbGV0IHtoaXN0b3J5fSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaGlzdG9yeS5wdXNoKGAvYXBwL3NwZWFrZXJzLyR7c3BlYWtlcklkfWApO1xuICAgIH1cblxuICAgIGdldFNwZWFrZXJzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN1bW1pdElkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3N1bW1pdElkJykpID8gdGhpcy5wcm9wcy5zdW1taXRJZCA6IG51bGw7XG5cbiAgICAgICAgcXVlcnlTcGVha2VycyhzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25WYWx1ZShzcGVha2VyKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvblZhbHVlXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvblZhbHVlKHNwZWFrZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gc3BlYWtlci5pZDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25MYWJlbChzcGVha2VyKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvbkxhYmVsXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvbkxhYmVsKHNwZWFrZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gYCR7c3BlYWtlci5maXJzdF9uYW1lfSAke3NwZWFrZXIubGFzdF9uYW1lfSAoJHtzcGVha2VyLmlkfSlgO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGhpc3RvcnksIHN1bW1pdElkLCBlcnJvciwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG5cbiAgICAgICAgY29uc3QgTXVsdGlWYWx1ZUxhYmVsID0gKHByb3BzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxhIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ2xpY2socHJvcHMuZGF0YS5pZCl9IHN0eWxlPXt7Y3Vyc29yOiAncG9pbnRlcid9fT5cbiAgICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudHMuTXVsdGlWYWx1ZUxhYmVsIHsuLi5wcm9wc30gLz5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0U3BlYWtlcnN9XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgTXVsdGlWYWx1ZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtzID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUocyl9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtzID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwocyl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeVNwb25zb3JzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BvbnNvcklucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0U3BvbnNvcnMgPSB0aGlzLmdldFNwb25zb3JzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0U3BvbnNvcnMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge3N1bW1pdElkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVlcnlTcG9uc29ycyhzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZXJyb3IsIHZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCBzdW1taXRJZCwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uLmlkfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IGAke29wdGlvbi5jb21wYW55Lm5hbWV9ICgke29wdGlvbi5zcG9uc29yc2hpcC5sYWJlbH0pYH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRTcG9uc29yc31cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5U3VtbWl0c30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1bW1pdElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFN1bW1pdHMgPSB0aGlzLmdldFN1bW1pdHMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnc3VtbWl0aW5wdXQnXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldFN1bW1pdHMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeVN1bW1pdHMoaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgZXJyb3IsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldFN1bW1pdHN9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcCA9PiBvcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wID0+IChgJHtvcC5uYW1lfSAoJHtvcC5pZH0pYCl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5VGFnc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5pbXBvcnQge3NoYWxsb3dFcXVhbH0gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFnSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUubWFwKCh0KSA9PiAoe3RhZzogdC50YWd9KSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0VGFncyA9IHRoaXMuZ2V0VGFncy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYoIXNoYWxsb3dFcXVhbCh0aGlzLnByb3BzLnZhbHVlLCBwcmV2UHJvcHMudmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgbmV4dFZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZS5tYXAoKHQpID0+ICh7dGFnOiB0LnRhZ30pKTtcblxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IG5leHRWYWx1ZX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RhZ2lucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0VGFncyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdW1taXRJZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzdW1taXRJZCcpKSA/IHRoaXMucHJvcHMuc3VtbWl0SWQgOiBudWxsO1xuXG4gICAgICAgIHF1ZXJ5VGFncyhzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7Y2xhc3NOYW1lLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgbGV0IG9yZGVyZWRUYWdzID0gdGhpcy5zdGF0ZS52YWx1ZS5zb3J0KChhLCBiKSA9PiAoYS50YWcudG9Mb3dlckNhc2UoKSA+IGIudGFnLnRvTG93ZXJDYXNlKCkgPyAxIDogKGEudGFnLnRvTG93ZXJDYXNlKCkgPCBiLnRhZy50b0xvd2VyQ2FzZSgpID8gLTEgOiAwKSkpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17b3JkZXJlZFRhZ3N9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0VGFnc31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb24udGFnfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvbi50YWd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gcHJldlByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGNsYXNzX25hbWUgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IGNsYXNzTmFtZSA6ICdmb3JtLWNvbnRyb2wnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzX25hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dEFyZWEgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWUgIT09IHByZXZQcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHRoaXMucHJvcHMudmFsdWV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBjbGFzc19uYW1lID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBjbGFzc05hbWUgOiAnZm9ybS1jb250cm9sJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc19uYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlUaWNrZXRUeXBlc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpY2tldFR5cGVzSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0VGlja2V0VHlwZXMgPSB0aGlzLmdldFRpY2tldFR5cGVzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUodGlja2V0VHlwZSl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25WYWx1ZVwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25WYWx1ZSh0aWNrZXRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIHRpY2tldFR5cGUuaWQ7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWwodGlja2V0VHlwZSl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25MYWJlbFwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25MYWJlbCh0aWNrZXRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIGAke3RpY2tldFR5cGUubmFtZX1gO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0aWNrZXR0eXBlaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRUaWNrZXRUeXBlcyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7c3VtbWl0SWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlUaWNrZXRUeXBlcyhzdW1taXRJZCxpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge3ZhbHVlLCBlcnJvciwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0VGlja2V0VHlwZXN9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXttID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUobSl9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXttID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwobSl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IGV4dGVuZCBmcm9tICdleHRlbmQnXG5pbXBvcnQgJ2Ryb3B6b25lL2Rpc3QvZHJvcHpvbmUuY3NzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuL2ljb24nXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5sZXQgRHJvcHpvbmUgPSBudWxsO1xuLyoqXG4gKiBjbGFzcyBEcm9wem9uZUpTXG4gKi9cbmV4cG9ydCBjbGFzcyBEcm9wem9uZUpTIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtmaWxlczogW119O1xuICAgICAgICB0aGlzLm9uVXBsb2FkQ29tcGxldGUgPSB0aGlzLm9uVXBsb2FkQ29tcGxldGUuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBvblVwbG9hZENvbXBsZXRlKHJlc3BvbnNlKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5vblVwbG9hZENvbXBsZXRlKVxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblVwbG9hZENvbXBsZXRlKHJlc3BvbnNlLCB0aGlzLnByb3BzLmlkLCB0aGlzLnByb3BzLmRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gb2YgRHJvcHpvbmUuanMuIERlZmF1bHRzIGFyZVxuICAgICAqIG92ZXJyaWRlbiBieSB0aGUgJ2Rqc0NvbmZpZycgcHJvcGVydHlcbiAgICAgKiBGb3IgYSBmdWxsIGxpc3Qgb2YgcG9zc2libGUgY29uZmlndXJhdGlvbnMsXG4gICAgICogcGxlYXNlIGNvbnN1bHRcbiAgICAgKiBodHRwOi8vd3d3LmRyb3B6b25lanMuY29tLyNjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgZ2V0RGpzQ29uZmlnICgpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBudWxsO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHVybDogdGhpcy5wcm9wcy5jb25maWcucG9zdFVybCA/IHRoaXMucHJvcHMuY29uZmlnLnBvc3RVcmwgOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGpzQ29uZmlnKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHRydWUsIHt9LCBkZWZhdWx0cywgdGhpcy5wcm9wcy5kanNDb25maWcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZGVmYXVsdHNcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMuYWNjZXB0ID0gKGZpbGUsIGRvbmUpID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm1heEZpbGVzIDwgKHRoaXMuc3RhdGUuZmlsZXMubGVuZ3RoICsgdGhpcy5wcm9wcy51cGxvYWRDb3VudCkpIHtcbiAgICAgICAgICAgICAgICBkb25lKCdNYXggZmlsZXMgcmVhY2hlZCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAnY29tcG9uZW50RGlkTW91bnQnIG1ldGhvZFxuICAgICAqIFNldHMgdXAgZHJvcHpvbmUuanMgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0RGpzQ29uZmlnKCk7XG5cbiAgICAgICAgRHJvcHpvbmUgPSBEcm9wem9uZSB8fCByZXF1aXJlKCdkcm9wem9uZScpO1xuICAgICAgICBEcm9wem9uZS5hdXRvRGlzY292ZXIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuY29uZmlnLnBvc3RVcmwgJiYgIXRoaXMucHJvcHMuZXZlbnRIYW5kbGVycy5kcm9wKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oJ05laXRoZXIgcG9zdFVybCBub3IgYSBcImRyb3BcIiBldmVudEhhbmRsZXIgc3BlY2lmaWVkLCB0aGUgUmVhY3QtRHJvcHpvbmUgY29tcG9uZW50IG1pZ2h0IG1pc2JlaGF2ZS4nKVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRyb3B6b25lTm9kZSA9IHRoaXMucHJvcHMuY29uZmlnLmRyb3B6b25lU2VsZWN0b3IgfHwgUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICAgIHRoaXMuZHJvcHpvbmUgPSBuZXcgRHJvcHpvbmUoZHJvcHpvbmVOb2RlLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAnY29tcG9uZW50V2lsbFVubW91bnQnXG4gICAgICogUmVtb3ZlcyBkcm9wem9uZS5qcyAoYW5kIGFsbCBpdHMgZ2xvYmFscykgaWYgdGhlIGNvbXBvbmVudCBpcyBiZWluZyB1bm1vdW50ZWRcbiAgICAgKi9cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3B6b25lKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZHJvcHpvbmUuZ2V0QWN0aXZlRmlsZXMoKTtcblxuICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBXZWxsLCBzZWVtcyBsaWtlIHdlIHN0aWxsIGhhdmUgc3R1ZmYgdXBsb2FkaW5nLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZGlydHksIGJ1dCBsZXQncyBrZWVwIHRyeWluZyB0byBnZXQgcmlkXG4gICAgICAgICAgICAgICAgLy8gb2YgdGhlIGRyb3B6b25lIHVudGlsIHdlJ3JlIGRvbmUgaGVyZS5cbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlRGVzdHJveSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkZXN0cm95SW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWV1ZURlc3Ryb3kgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmNsZWFySW50ZXJ2YWwoZGVzdHJveUludGVydmFsKVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJvcHpvbmUuZ2V0QWN0aXZlRmlsZXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUgPSB0aGlzLmRlc3Ryb3kodGhpcy5kcm9wem9uZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmNsZWFySW50ZXJ2YWwoZGVzdHJveUludGVydmFsKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgNTAwKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lID0gdGhpcy5kZXN0cm95KHRoaXMuZHJvcHpvbmUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAnY29tcG9uZW50RGlkVXBkYXRlJ1xuICAgICAqIElmIHRoZSBEcm9wem9uZSBoYXNuJ3QgYmVlbiBjcmVhdGVkLCBjcmVhdGUgaXRcbiAgICAgKi9cbiAgICBjb21wb25lbnREaWRVcGRhdGUgKCkge1xuICAgICAgICBjb25zdCB7Y29uZmlnLCBkanNDb25maWd9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgZGpzQ29uZmlnT2JqID0gZGpzQ29uZmlnID8gZGpzQ29uZmlnIDoge307XG4gICAgICAgIGNvbnN0IHBvc3RVcmxDb25maWdPYmogPSBjb25maWcgJiYgY29uZmlnLnBvc3RVcmwgPyB7IHVybDogY29uZmlnLnBvc3RVcmwgfSA6IHt9O1xuICAgICAgICB0aGlzLnF1ZXVlRGVzdHJveSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5kcm9wem9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHJvcHpvbmVOb2RlID0gdGhpcy5wcm9wcy5jb25maWcuZHJvcHpvbmVTZWxlY3RvciB8fCBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUgPSBuZXcgRHJvcHpvbmUoZHJvcHpvbmVOb2RlLCB0aGlzLmdldERqc0NvbmZpZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJvcHpvbmUub3B0aW9ucyA9IGV4dGVuZCh0cnVlLCB7fSwgdGhpcy5kcm9wem9uZS5vcHRpb25zLCBkanNDb25maWdPYmosIHBvc3RVcmxDb25maWdPYmopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWN0ICdyZW5kZXInXG4gICAgICovXG4gICAgcmVuZGVyICgpIHtcbiAgICAgICAgY29uc3QgaWNvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICh0aGlzLnByb3BzLmNsYXNzTmFtZSkgPyAnZmlsZXBpY2tlciBkcm9wem9uZSAnICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgOiAnZmlsZXBpY2tlciBkcm9wem9uZSc7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zaG93RmlsZXR5cGVJY29uICYmIGNvbmZpZy5pY29uRmlsZXR5cGVzICYmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoIDwgMSkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wcy5jb25maWcuaWNvbkZpbGV0eXBlcy5sZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgICAgICAgIGljb25zLnB1c2goPEljb24gZmlsZXR5cGU9e2NvbmZpZy5pY29uRmlsZXR5cGVzW2ldfSBrZXk9eydpY29uLWNvbXBvbmVudCcgKyBpfSAvPilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5jb25maWcucG9zdFVybCAmJiB0aGlzLnByb3BzLmFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249e3RoaXMucHJvcHMuYWN0aW9ufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgIHtpY29uc31cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdiBpZD17dGhpcy5wcm9wcy5pZH0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PiB7aWNvbnN9IHt0aGlzLnByb3BzLmNoaWxkcmVufSA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWtlcyBldmVudCBoYW5kbGVycyBpbiB0aGlzLnByb3BzLmV2ZW50SGFuZGxlcnNcbiAgICAgKiBhbmQgYmluZHMgdGhlbSB0byBkcm9wem9uZS5qcyBldmVudHNcbiAgICAgKi9cbiAgICBzZXR1cEV2ZW50cyAoKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlcnMgPSB0aGlzLnByb3BzLmV2ZW50SGFuZGxlcnM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmRyb3B6b25lIHx8ICFldmVudEhhbmRsZXJzKSByZXR1cm47XG5cbiAgICAgICAgZm9yICh2YXIgZXZlbnRIYW5kbGVyIGluIGV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmIChldmVudEhhbmRsZXJzLmhhc093blByb3BlcnR5KGV2ZW50SGFuZGxlcikgJiYgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBhcnJheSBvZiBldmVudCBoYW5kbGVyc1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXS5sZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhbiBpbml0IGhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudEhhbmRsZXIgPT09ICdpbml0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXVtpXSh0aGlzLmRyb3B6b25lKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lLm9uKGV2ZW50SGFuZGxlciwgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdW2ldKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50SGFuZGxlciA9PT0gJ2luaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl0odGhpcy5kcm9wem9uZSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUub24oZXZlbnRIYW5kbGVyLCBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCdhZGRlZGZpbGUnLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5zdGF0ZS5maWxlcyB8fCBbXTtcblxuICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmaWxlcyB9KVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCdyZW1vdmVkZmlsZScsIChmaWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLnN0YXRlLmZpbGVzIHx8IFtdO1xuICAgICAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZUluRmlsZXMsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZUluRmlsZXMubmFtZSA9PT0gZmlsZS5uYW1lICYmIGZpbGVJbkZpbGVzLnNpemUgPT09IGZpbGUuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlcy5zcGxpY2UoaSwgMSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZpbGVzIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZHJvcHpvbmUub24oJ3VwbG9hZHByb2dyZXNzJywgKGZpbGUsIHByb2dyZXNzLCBieXRlc1NlbnQpID0+IHtcbiAgICAgICAgICAgIHByb2dyZXNzID0gYnl0ZXNTZW50IC8gZmlsZS5zaXplICogMTAwO1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZXMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3F1ZXJ5U2VsZWN0b3JcbiAgICAgICAgICAgIC8vbGV0IGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHt0aGlzLnByb3BzLmlkfSAuZHotdXBsb2FkYCk7XG4gICAgICAgICAgICBpZihmaWxlLnByZXZpZXdFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBmaWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei11cGxvYWRwcm9ncmVzc11cIik7XG5cbiAgICAgICAgICAgICAgICBpZihlbGVtLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW0pXG4gICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUud2lkdGggPSBwcm9ncmVzcyArIFwiJVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCdzZW5kaW5nJyAsIChmaWxlLCB4aHIsIGZvcm1EYXRhKSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhY2Nlc3NfdG9rZW4nKSkge1xuICAgICAgICAgICAgICAgIC8vIG9hdXRoMiB0b2tlblxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImFjY2Vzc190b2tlblwiLCB0aGlzLnByb3BzLmFjY2Vzc190b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHRyYWNrIGFsbCByZXF1ZXN0IHNvIHdlIGNhbiBnZXQgdGhlIGNvcnJlY3QgcmVxdWVzdCB0aGF0IHJldHVybnMgZmluYWwgcmVzcG9uc2U6XG4gICAgICAgICAgICAvLyBXZSB3aWxsIGNoYW5nZSB0aGUgbG9hZCBjYWxsYmFjayBidXQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSB3aWxsIGNhbGwgb3JpZ2luYWxcbiAgICAgICAgICAgIC8vIGxvYWQgY2FsbGJhY2sgZnJvbSBkcm9wem9uZVxuICAgICAgICAgICAgbGV0IGRyb3B6b25lT25Mb2FkID0geGhyLm9ubG9hZDtcbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGRyb3B6b25lT25Mb2FkKGUpO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBmaW5hbCBjaHVuayBhbmQgZ2V0IHRoZSByZXNwb25zZVxuICAgICAgICAgICAgICAgIGxldCB1cGxvYWRSZXNwb25zZSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRSZXNwb25zZS5uYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vblVwbG9hZENvbXBsZXRlKHVwbG9hZFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBBTEwgbGlzdGVuZXJzIGFuZCBEZXN0cm95cyBkcm9wem9uZS4gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbnlvL2Ryb3B6b25lL2lzc3Vlcy8xMTc1XG4gICAgICovXG4gICAgZGVzdHJveSAoZHJvcHpvbmUpIHtcbiAgICAgICAgZHJvcHpvbmUub2ZmKCk7XG4gICAgICAgIHJldHVybiBkcm9wem9uZS5kZXN0cm95KClcbiAgICB9XG59XG5cbkRyb3B6b25lSlMuZGVmYXVsdFByb3BzID0ge1xuICAgIGRqc0NvbmZpZzoge30sXG4gICAgY29uZmlnOiB7fSxcbiAgICBldmVudEhhbmRsZXJzOiB7fSxcbiAgICBkYXRhOiB7fSxcbn07XG5cbkRyb3B6b25lSlMucHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERyb3B6b25lSlM7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgSWNvbiA9IChwcm9wcykgPT4ge1xuICAgIHJldHVybiAoPGRpdiBkYXRhLWZpbGV0eXBlPXtwcm9wcy5maWxldHlwZX0gY2xhc3NOYW1lPSdmaWxlcGlja2VyLWZpbGUtaWNvbicgLz4pXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgRHJvcHpvbmVKUyBmcm9tICcuL2Ryb3B6b25lJ1xuaW1wb3J0ICcuL2luZGV4Lmxlc3MnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGxvYWRJbnB1dFYyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25SZW1vdmUsIGVycm9yLCBtZWRpYVR5cGUsIHBvc3RVcmwsIG1heEZpbGVzID0gMSwgdGltZU91dCwgb25VcGxvYWRDb21wbGV0ZSwgZGpzQ29uZmlnLCBpZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcbiAgICAgICAgY29uc3QgYWxsb3dlZEV4dCA9IG1lZGlhVHlwZSAmJiBtZWRpYVR5cGUudHlwZSA/IG1lZGlhVHlwZS50eXBlLmFsbG93ZWRfZXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gYC4ke2V4dC50b0xvd2VyQ2FzZSgpfWApLmpvaW4oXCIsXCIpIDogJyc7XG4gICAgICAgIGNvbnN0IG1heFNpemUgPSBtZWRpYVR5cGUgPyBtZWRpYVR5cGUubWF4X3NpemUgLyAxMDI0IDogMTAwO1xuICAgICAgICBjb25zdCBjYW5VcGxvYWQgPSB2YWx1ZS5sZW5ndGggPCBtYXhGaWxlcztcblxuICAgICAgICBjb25zdCBkanNDb25maWdTZXQgPSB7XG4gICAgICAgICAgICBwYXJhbU5hbWU6IFwiZmlsZVwiLCAvLyBUaGUgbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCB0byB0cmFuc2ZlciB0aGUgZmlsZSxcbiAgICAgICAgICAgIG1heEZpbGVzaXplOiBtYXhTaXplLCAvLyBNQixcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVPdXQgfHwgKDEwMDAgKiA2MCAqIDEwKSxcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgcmV0cnlDaHVua3M6IHRydWUsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICBhZGRSZW1vdmVMaW5rczogdHJ1ZSxcbiAgICAgICAgICAgIG1heEZpbGVzOiBtYXhGaWxlcyxcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IGFsbG93ZWRFeHQsXG4gICAgICAgICAgICBkcm9wem9uZVNlbGVjdG9yOiBgbWVkaWFfdXBsb2FkXyR7bWVkaWFUeXBlLmlkfWAsXG4gICAgICAgICAgICAuLi5kanNDb25maWdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50Q29uZmlnID0ge1xuICAgICAgICAgICAgc2hvd0ZpbGV0eXBlSWNvbjogZmFsc2UsXG4gICAgICAgICAgICBwb3N0VXJsOiBwb3N0VXJsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBtZWRpYV90eXBlOiBtZWRpYVR5cGUsXG4gICAgICAgICAgICBtZWRpYV91cGxvYWQ6IHZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBldmVudEhhbmRsZXJzID0ge307XG4gICAgICAgIGlmIChvblJlbW92ZSkge1xuICAgICAgICAgICAgZXZlbnRIYW5kbGVycyA9IHtyZW1vdmVkZmlsZTogb25SZW1vdmV9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiICBzdHlsZT17e2hlaWdodDogMTgwfX0+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5VcGxvYWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcHpvbmVKU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkanNDb25maWc9e2Rqc0NvbmZpZ1NldH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc9e2NvbXBvbmVudENvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXJzPXtldmVudEhhbmRsZXJzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkQ291bnQ9e3ZhbHVlLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblVwbG9hZENvbXBsZXRlPXtvblVwbG9hZENvbXBsZXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZXBpY2tlciBkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCBudW1iZXIgb2YgZmlsZXMgdXBsb2FkZWQgZm9yIHRoaXMgdHlwZSAtIFJlbW92ZSB1cGxvYWRlZCBmaWxlIHRvIGFkZCBuZXcgZmlsZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VXBsb2FkZWQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZS5tYXAoKHYsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2B1cGxvYWRlZC0ke2l9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17di5wcml2YXRlX3VybCB8fCB2LnB1YmxpY191cmx9IHRhcmdldD1cIl9ibGFua1wiPnt2LmZpbGVuYW1lfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b25SZW1vdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IC0gPGEgb25DbGljaz17ZXYgPT4gb25SZW1vdmUodil9PlJlbW92ZTwvYT48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FZQUFBRDBlTlQ2QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFMRXdBQUN4TUJBSnFjR0FBQUVIMUpSRUZVZUp6dDNYL3M3WFZCeC9IWDVmSkx1QWhNS3hDSFA5Z1VSQ09WaUg0b2lXVTF5TEowaEloVXE3aHRydlZySVc1UnRHcHU1Y3BwbE9XdmpGTEtpc0lmdWJubEttM1ZIOVhNWldra1dLTmltWkkvSUg3Yy9qaGdtTkU5NTk3ek9lL1BPYS9IWS92K3hZZlBlVjIrWDg3M2VjK1B6MGtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQjEyak42QUlmbGpDUVhKamszeVJPVFBDN0ppVW4ySmRrN2NCY3dEODlMY3VOQmp2bmVKSzlQY3RmMGM1aVRJMGNQWUdXbko3a2l5WXVTUEdId0ZtRDdYWkRrR1VrdVMzSmc4QlkyU0FCc2p6T1R2Q3pKcGZGOUE5YnIwaVMzSm5ucDZDRnN6aEdqQjNCUSs1SzhJc243azF3ZXYveUJhVnlWWlAvb0VXeU9YeWJ6ZGw2U0c1SThkdkFPb01PcmszdzB5ZHRIRDJGNkhnR1lyeXVUL0VuODhnYzJaMjhXZitsNCt1Z2hURThBek5PMVNYNHB5VkdqaHdCMWpzL2lFWURIRHQ3QnhBVEEvUHg0a210R2p3Q3FmVkdTZHlRNWVmUVFwaU1BNXVYS0pEODJlZ1JBa3JPeXVJYkFNYU9ITUEwQk1CL25KWG5WNkJFQUQvTE1KRytJaThidEpPOENtSWQ5V2J6dzVuQ2U4Lzlva2o5TGNuT1NPNUxjdTRaZHdQenN5ZkovSy8vZ0dtN3YwaVMzSkxsNkRlY0MvcGRYWkhFRnJsVy9QcG5rNTVNOFpmT1RnUjN4bGl4M2YzUGxxSUd3cTg1TWNuZFcvK1YvZlJZdjFBRTRITXNHd0QxSkxocTBFWGJTbTdMYUwvNjdrcng0eUZKZ0Z5MGJBQTg4NnVnYUFiQUdwMmUxdi8zZmxlVHJoaXdGZHRVcUFYQWd5VzFKSGpOa0tXdmxYUUJqWFpIVlhvajUzVW5lTmRFV2dHV2NrdVNkU1U0YVBRUzIyZDlsdGVmOEFkWnQxVWNBSHZoNlQ1S2pOejhYdHQ4WldlMTVOeS80QTZad3FBRndJTWx2eERVQ3RwYW5BTWE1Y0lWalg1dmtYNmNhQW5DSUxrM3kwNk5Id0xaNVRaYXZiTy96QjZaeU9JOEFQUERsR2dHd2d2ZGt1Zit4YmhtMEQraXdqZ0J3allBdDVDbUFjUjYzNUhGL1B1a0tnTU8zTjR2TG1idEd3QllSQU9PY3VPUnhOMCs2QW1BOWprL3l0cmhHd05ZUUFPUHNXL0s0T3laZEFiQStyaEd3UlFUQU9IdVhQTTZuK2dIYjVLd2tOOFkxQW1aUEFBQ3diaGNrZVVOY0kyRFdCQUFBVTNoaGtwOGFQWUtISmdBQW1NclZXWHlHQ1RNa0FBQ1kwblZKdm1IMENENmZBQUJnU2tjbStjMGtUeDA5aE04bEFBQ1kycjRrYjA5eSt1Z2gvQThCQU1BbW5KcmtIVm4rSW1oTVRBQUFzQ2xuSi9tZEpFZU5Ib0lBQUdDekxrenl1dEVqRUFBQWJON2xTWDVpOUloMkFnQ0FFWDQweVhlT0h0Rk1BQUF3eW11U1BHZjBpRllDQUlCUmprenkxaVRuakI3U1NBQUFNTklKV1Z3ajROR2poN1FSQUFDTWRsb1dFZkR3MFVPYUNBQUE1dUNMczNnNjRNalJRMW9JQUFEbTRtdVQvUExvRVMwRUFBQno4aDFKcmhrOW9vRUFBR0J1cmszeTR0RWpkcDBBQUdDT1hwdkZaWU9aaUFBQVlJNk95dUtEZzg0ZVBXUlhDUUFBNXVyRUxENUMrTlRSUTNhUkFBQmd6azVQOHJZa3g0OGVzbXNFQUFCejk3UWtOeVRaTzNySUxoRUFBR3lEaTVLOGV2U0lYU0lBQU5nVys1UDh5T2dSdTBJQUFMQk5YcDdra3RFamRvRUFBR0NiN0VueXEwbSthdlNRYlNjQUFOZzJ4eVM1TWNrVFJnL1paZ0lBZ0czMGlDeXVFZkFGbzRkc0t3RUF3TFk2SThsTlNSNDJlc2cyRWdBQWJMTXZTM0o5L0Q1Ym1mOWdBR3k3YjBueXM2TkhiQnNCQU1BdStJRWtMeGs5WXBzSUFBQjJ4U3VUUEhmMGlHMGhBQURZRlVja2VYT1NjMGNQMlFZQ0FJQmRjbHdXN3d4NHpPZ2hjeWNBQU5nMXAyUnhqWUNUUmcrWk13RUF3QzU2VXBMZlRuTFU2Q0Z6SlFBQTJGVVhKdm1WMFNQbVNnQUFzTXV1U0hMTjZCRnpKQUFBMkhYWEpublI2QkZ6SXdBQWFQQzZKQmVNSGpFbkFnQ0FCa2NuK2Qwa1R4dzlaQzcyakI2d0l3Nk1IZ0FsYmtqeWJhTkg3SmkzSkxsazlJZ051am5KK1VsdUh6MWtOSThBQU5EazhVbCtQOG14bzRlTUpnQUFhSE4ra2plbC9GRndBUUJBb3hjaytjblJJMFlTQUFDMGVsbVNieDg5WXBRalJ3OEFZS2ozalI0dzJMT3llRTNBeDBZUDJiVHE1ei9XeUxzQVlETzhDd0RXeEZNQUFGQklBQUJBSVFFQUFJVUVBQUFVRWdBQVVNamJBTGZYZlVsdUd6M2lJZXhMY3VKQmp2bFVrbyt2Y003VERuM09WcG56OS9YQmprbnl5TkVqZ0VNbkFMYlg3VWtlUFhyRVEvamhKRDl6a0dPdVQ3Si95Zk1kbStReks5eis5Mlg1RC9wNGZwSnZYZUhjVS91UHpQZjcrbUJmbitTZG8wY0FoMDRBc0l0dVN2S1JKWTg5TS9NS0FHQTlqa2h5M0pMSDNwbmtuZ20zekpMWEFBQ3dpNTZVNUQrWC9IcitvSTFEQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkRyQVBUWW4rVEpHN3F0TDluUTdiRFo3K3VEblQ3Z05vRTFFZ0E5TGs1eTBlZ1JySjN2SzNCSVBBVUFBSVVFQUFDNzZPN1JBK1pPQUFDd2krNGRQV0R1QkFBQUZCSUFBRkJJQUFCQUlRRUFBSVVFQUFBVUVnQUFVRWdBQUVBaGx3S0c3ZmFKSlArK3dkczdOc254Rzd3OVlDSUNvTWNIa3B3MDBibVBTL0xVaWM3Ti8rK3lEZC9lL2lTL3VPSGJCQ1lnQUhwY05lRzVuNXprL1JPZUg0QTE4eG9BQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUXE0REFOdHRmeGJYWWRpVXN6ZDRXOENFQkVDUGE1S2NOOUc1VDVqb3ZCemN4VWt1R2owQzJENENvTWQ1OFlzQ2dQdDVEUUFBRkJJQUFGQklBQUJBSVFFQUFJVUVBQUFVRWdBQVVFZ0FBRUFoQVFBQWhRUUFBQlFTQUFCUVNBQUFRQ0VCQUFDRmZCZ1E3VzVOOHQ0TjN0NitKT2VzOFh3ZlNITFNHcyszaW5YL1dZQU5FZ0MwZS8zOVg1dHlicEsvV09QNXJscmp1VmExN2o4THNFR2VBZ0NBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBc0JiYStUazd4N2hlUG5kc1cyaTdQOC9sVkQ5Zm9rZDY3NDcyektDUWY1NXcvUGF0L1hrUTcyWndGbVRBQnNyNk9UUEh2MGlNTncydjFmVS9qS2ljNjdDVWRsdTcrdndKYndGQUFBRkJJQUFGQklBQUJBSVFFQUFJVUVBQUFVRWdBQVVFZ0FBRUFoQVFBQWhRUUFBQlFTQUFCUVNBQUFRQ0dmQmJBZWV3N2gzem13NUhGWEozbjVJWndmQUI2U1J3QUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0NBZGdkR0R4aEJBSXh6ejVMSEhUWHBDb0RkZE13S3g5NDkyWW9aRXdEamZITEo0MDZaZEFYQWJqcDFoV1B2bUd6RmpBbUFjVzViOHJpblRMb0NZRGV0Y3QvNUw1T3RtREVCTU00L0xIbmNlVW1PbjNJSXdBNTYxcExIM1pmazVpbUh6SlVBR09ldmxqenVtQ1RmTk9VUWdCMXpjcExuTEhuc2g1Tjhlc0l0c3lVQXhubmZDc2QrLzJRckFIYlAvaXovSXNEM1Rqa0UvaS9ISmJremk3ZWZMUFAxZ2pFekFiYktJNU44TE12ZnQxNHlaaWJ0YnN6eVA2UzNKZm5DTVRNQnRzWnZaZm43MWM4a09XSE1UTnA5YzViL1FUMlE1SStTSER0a0tjRDh2VFNyM2FmKytwaVprT3hOOG85WjdRZjJYVW4yalJnTE1HTS9sTlh1U3c4a09YL0lVcmpmbFZuOWgvWnY0dm9BQU1uaUlmdzNadlg3MFhjUDJBcWY0OGdrZjV2VmYzai9LOG5QWmJXclhRSHNpcU9UZkZlU2Y4N3E5NS8zSm5uNjVpZkQ1M3RXVnY4QmZuQUkvRjZTNzBseVRyeWdCZGhOUnlkNWZKTG5KYmt1eWIvbDBPODNmMkhEMjJkcHorZ0JmTmFya3J4a1RlZTZMNHNmY29CZHNYZE41L2xRa3FkbCtjOWoyVmtDWUQ2T1NmTEhTYjUwOUJDQUhmWHBKRitSNUs5SEQ1a0RWd0tjajd1eXVPVHZMYU9IQU95Z2U1TmNGci84UDBzQXpNdHRTYjRteVQrTkhnS3dRKzdMNGdXRE40NGVNaWNDWUg0K25PUVpTVDQ0ZWdqQURyZ3ppOHY5dm5Id2p0a1JBUFAwa1NSZm51U213VHNBdHRtdFNaNlo1SzJqaDh6UnVsNVZ5ZnJkbWVUTlNXNVBja0VXYjRFQllEblhKM2x1a3B0SEQ1a3Jqd0RNMzNWSnprcnlhMWs4andYQVEvdkxKTTlPY25tU2p3L2VNbXZlQnJoZHprenlnMGxlbU9UNHdWc0E1dUpBa2o5TThzb3NuanAxSFpRbENJRHR0Qy9KeFVtK01jbFhKM25VMERVQW0vZXBKSCthNUEreWVJN2ZXNmhYSkFCMnc2T3llSnJnOUNTUFNQS3dlSDBIc0RzT1pIR3RsRTlrY2UzL0R5WDUreXplMnc4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUxCOS9odDh4bVh4U2dOZStRQUFBQUJKUlU1RXJrSmdnZz09XCIiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRHJvcHpvbmUgZnJvbSAncmVhY3QtZHJvcHpvbmUnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuaW1wb3J0ICcuL3VwbG9hZC5sZXNzJztcblxuaW1wb3J0IGZpbGVfaWNvbiBmcm9tICcuL2ZpbGUucG5nJztcbmltcG9ydCBwZGZfaWNvbiBmcm9tICcuL3BkZi5wbmcnO1xuaW1wb3J0IG1vdl9pY29uIGZyb20gJy4vbW92LnBuZyc7XG5pbXBvcnQgbXA0X2ljb24gZnJvbSAnLi9tcDQucG5nJztcbmltcG9ydCBqcGdfaWNvbiBmcm9tICcuL2pwZy5wbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGxvYWRJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHNob3dfcmVtb3ZlOiBmYWxzZSxcbiAgICAgICAgICAgIGxvZ29fcHJldmlldzoge1xuICAgICAgICAgICAgICAgIHByZXZpZXc6IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWxlSGFzUHJldmlldyA9IHRoaXMuZmlsZUhhc1ByZXZpZXcuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBvbkRyb3AoYWNjZXB0ZWRGaWxlcywgZmlsZVJlamVjdGlvbnMsIGV2dCkgeyAgICAgICAgXG4gICAgICAgIGlmKGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGZpbGUgPSBhY2NlcHRlZEZpbGVzWzBdO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVVcGxvYWQoZmlsZSwgdGhpcy5wcm9wcyk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbG9nb19wcmV2aWV3OlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3OiBmaWxlLnByZXZpZXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYoZmlsZVJlamVjdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiaGFuZGxlRXJyb3JcIikpXG4gICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZUVycm9yKGZpbGVSZWplY3Rpb25zLCB0aGlzLnByb3BzKVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKGV2KXtcbiAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVSZW1vdmUoZXYsIHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIHNob3dWZWlsKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBzaG93X3JlbW92ZTp0cnVlfSk7XG4gICAgfVxuXG4gICAgaGlkZVZlaWwoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIHNob3dfcmVtb3ZlOmZhbHNlfSk7XG4gICAgfVxuXG4gICAgZmlsZUhhc1ByZXZpZXcoZmlsZU5hbWUpe1xuICAgICAgICBpZighZmlsZU5hbWUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGV0IHBhdHRlcm4gPSAvKC4qKVxcLihnaWZ8Ym1wfHN2Z3xqcGU/Z3xwbmcpL2dcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChmaWxlTmFtZSk7XG4gICAgfVxuXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIGZpbGUsIGhhbmRsZVJlbW92ZSwgaGFuZGxlVXBsb2FkLCBoYW5kbGVFcnJvciwgZmlsZU5hbWUsIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7bG9nb19wcmV2aWV3LCBzaG93X3JlbW92ZX0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlICggcmVzb3VyY2UgKVxuICAgICAgICBsZXQgaWNvbiA9IGZpbGVfaWNvbjtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmKCFmaWxlTmFtZSkgZmlsZU5hbWUgPSB2YWx1ZS5zbGljZSh2YWx1ZS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlICYmIGZpbGUuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpICYmIGZpbGUubmFtZSkge1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgIC8vIGZpbGVzIHdpdGhvdXQgcHJldmlld1xuICAgICAgICBpY29uID0gIChmaWxlTmFtZSAmJiBmaWxlTmFtZS5lbmRzV2l0aCgncGRmJykgPyBwZGZfaWNvbjogaWNvbik7XG4gICAgICAgIGljb24gPSAgKGZpbGVOYW1lICYmIGZpbGVOYW1lLmVuZHNXaXRoKCdtb3YnKSA/IG1vdl9pY29uOiBpY29uKTtcbiAgICAgICAgaWNvbiA9ICAoZmlsZU5hbWUgJiYgZmlsZU5hbWUuZW5kc1dpdGgoJ21wNCcpID8gbXA0X2ljb246IGljb24pO1xuXG4gICAgICAgIC8vIGlmIGZpbGUgaGFzIHByZXZpZXcgKCBhbHJlYWR5IG9uIGRhdGEgbW9kZWwpXG4gICAgICAgIGlmKHRoaXMuZmlsZUhhc1ByZXZpZXcoZmlsZU5hbWUpICYmIHZhbHVlKXtcbiAgICAgICAgICAgIGljb24gPSB2YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvZ29fcHJldmlldy5wcmV2aWV3ICYmIGxvZ29fcHJldmlldy5uYW1lKSB7XG4gICAgICAgICAgICBpY29uID0gbG9nb19wcmV2aWV3LnByZXZpZXc7XG4gICAgICAgICAgICBmaWxlTmFtZSA9IGxvZ29fcHJldmlldy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZS11cGxvYWRcIj5cbiAgICAgICAgICAgICAgICA8RHJvcHpvbmVcbiAgICAgICAgICAgICAgICAgICAgb25Ecm9wPXt0aGlzLm9uRHJvcC5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdj57VC50cmFuc2xhdGUoXCJnZW5lcmFsLmRyb3BfZmlsZXNcIil9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Ecm9wem9uZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGVkLWZpbGVzLWJveCBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5TZWxlY3RlZCBGaWxlczwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3RlZC1maWxlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbGUtYm94XCIgb25Nb3VzZUVudGVyPXt0aGlzLnNob3dWZWlsLmJpbmQodGhpcyl9IG9uTW91c2VMZWF2ZT17dGhpcy5oaWRlVmVpbC5iaW5kKHRoaXMpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17aWNvbn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXt2YWx1ZX0gdGFyZ2V0PVwiX2JsYW5rXCI+e2ZpbGVOYW1lfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2hvd19yZW1vdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbW92ZVwiIG9uQ2xpY2s9e3RoaXMub25SZW1vdmUuYmluZCh0aGlzKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZ0FBQUFJQUNBTUFBQUREcGlUSUFBQUFBM05DU1ZRSUNBamI0VS9nQUFBQUNYQklXWE1BQUF6ZUFBQU0zZ0VUVUJCNkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCM2QzY3VhVzVyYzJOaGNHVXViM0pubSs0OEdnQUFBdnBRVEZSRi8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBV3NBYzl3QUFBUDEwVWs1VEFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2RIaDhnSVNJakpDVW1KeWdwS2lzc0xTNHZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldsdGNYVjVmWUdGaVkyUmxabWRvYVdwcmJHMXViM0J4Y25OMGRYWjNlSGw2ZTN4OWZuK0FnWUtEaElXR2g0aUppb3VNalk2UGtKR1NrNVNWbHBlWW1acWJuSjJlbjZDaG9xT2twYWFvcWFxcnJLMnVzTEd5czdTMXRyZTR1YnE3dkwyK3Y4REJ3c1BFeGNiSHlNbkt5OHpOenMvUTBkTFQxTlhXMTlqWjJ0dmMzZDdmNE9IaTQrVGw1dWZvNmVycjdPM3U3L0R4OHZQMDlmYjMrUG42Ky96OS9vOWFISmNBQUJVN1NVUkJWSGphN2QxNWZFMW5HZ2Z3YzdPSmtJUklDYkZFYTZKQ2hkcW14cjYyMmdsdFVFUXNnNkYwVVlUV3RKaFl5cFNtUmF2RGxJeWxvWWJhSXZabFdscGIwZ2lwcFZLdDZKQ0lXRUsyKzN3K1E5ZG83cjNudmZjc2VkKzh2OS9mM25QZTh6eGZOL2UrWjFNVUErTGJmK20yNUN0V2tpNDVKK0k3S3JMSFBYcnJYWkk0cVozazduOUVHa21lb3JFU3R6L2tJQ0UwWDlyK2Q3eUs3dC9QWkVuN1A3b0F2Zjh4MXVlbDdQOGdkUDZYM0cwdllmOWI1S0h4ditiYW85TDF2L3BGdEwxRUx0U1FEVUE4bXY1QWpsU1NxLy9oeGVqNWc5bnNMaFdBSkhUODkxa2lVLzlibzkrbE0wVWlBSFBSYmh2TEFRUGtBWEFhN2JhMUhOQkJsdjZIb3RtMmx3TWFTUUlnQ3IyMnN4d1FKQWVBR0xUYVRvN0tzUndRaDA3Ynl4WXBsZ01TMEdpNytWQUdBSWsyRG54MGtCeDVURTNBYXhJQTJHN2p1R1g1RVJ5a3Vod3dFQUNrQmtENUhRRkFhZ0NVMHdnQXBBWkFHVUVBSURVQU9sWUpBS1FHUUZ2ZEFVQnFBUFJQQUpBYkFMME9BSElEc0E0Q0FLa0JVSDRuQUpBYUFPV0VBWURVQUNpakpnQklEWUNPVlFZQXFRSFFOZzhBa0JvQUxRVUF1UUhRVkFDUUc0QTFDZ0NrQmtENW5RRkFhZ0NVMHhnQXBBWkEzOVlFQUtrQjBQSEtBQ0ExQUVyMEFBQ3BBZEF5QUpBYkFQME5BT1FHUUlNQlFHNEErVjBBUUdvQWRMMHhBRWdOZ0M3V0FnQ3BBZEFKWHdDUUdnQnQ5d0FBcVFIUXZ3QkFiZ0QwQmdESURZQ2lBVUJ1QUFWZEFVQnFBSFM5Q1FCSURhQjhMQWNBZ0lZayt3S0ExQUFveVFNQXBBWkFId0dBM0FCb0dnRElEWUNHQUlEY0FFUmZEZ0FBcmNsOURBQ2tCa0RmQlFPQTFBREVYZzRBQUIyeXd3TUFwQVpBeXdGQWJnQTBIUURrQmtCREFVQnVBQVhkQUVCcUFKVGJGQUNrQmlEcWNnQUE2SllVUHdDUUdnRHQ4QVFBcVFIUUNnQ1FHd0ROQUFDNUFkQndBSkFiUUVGM0FKQWFnSGpMQVFDZ2M3NnZEUUJTQTZDdi9BQkFhZ0MwMHhNQXBBWkE4UUFnTndENk93RElEWUQrQWdCeUF5anNBUUJTQTZBYjRRQWdOUUM2VkFjQXBBWkFxZjRBSURVQTJ1VUpBRklEb0g4RGdOd0FLQllBNUFaQUl3QkFiZ0NGUFFGQWFnQjBveGtBU0ExQWdPVUFBREEyM0M4SEFJREIyZTBKQUZJRG9KVUFJRGNBbWdrQWNnT2drUUFnTjREQ0p3RkFhZ0Iwc3prQVNBMkFNdXNDZ05RQTZLUS9BRWdOZ1BaNEFZRFVBR2dWQU1nTmdHWUJnTndBYUJRQXlBMmc4Q2tBa0JvQW44c0JBR0JpZUZ3T0FBQXprMVlGQUtRR1FIdTlBRUJxQUxUYUFnQlNBNkNYQUVCdUFEbUJBQ0ExQVBvUUFPUUdVQndBQUZJRG9JNEFJRGVBY1FEQVNXcVVEWUFQQUlDVFdITExCTUJHQU9BbGU4b0V3SFlBNENWekFVQnVBQkVBSURjQXkxNEFrQnFBRW5JVEFLUUdvSXdDQUxrQktIMnZBb0RVQUpUcUd3QkFhZ0NLRWpwdy90NTBnM0xKUm5rVEFVQ2VETUFuQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ05RQUFudVBuYlVpS1RXalJPN1ltT0dsZE1UQVY4YmNLVm4vMUtRVnM4YjJEalNqKzMrWWRLQ1lFQzVUdEc5OGlMSGRyekR4Rk1yTWQwNk04elNzL1c3UjM2TEEvT2Y4UUlzeC9lOXhBc1VWSThlNkc5QityMlVvckRoWjVxVjMveDg2Z0txS2xBTVA2ZHYvcGhtb3FWakphS3Jybi85YnFLaG91ZFZEdi82SDVhS2U0aVUzVEsvK0I1eEROVVhNdVFCOSt1K3hHN1VVTTdzOWRBR3dFSlVVTll2MDZIOHJLd29wYXF5dGRBQ3dGM1VVTjN1MTkvOXBWRkhrUEszNUJGQXFpaWh5VXQwMEFoaUNHb3FkSVJvQjdFQUp4YzRPYmYzM0swQUp4VTZCbnlZQXo2T0NvdWQ1VFFEV29JQ2laNDJtVmVBY0ZGRDA1R2haRDI2TStwbVZPem1aMytVVUdySGx4aG9BZEJleGxNVzUzNTA2dk9NL0t4Yk9mMnZtdEttVFgzMXB6TWloVWYyZjYvZVg4Vy8rWThucVRYdVBmcDE1azR2bDdadW50aTk3YzFqWHh4b0VCMVQ4K1RwTzc4RDZqejNSNDdraDQ2Yk1pdi9zaWo2NzBYS0I0RENEU3pCbnZFb21NWGY5MHFHMWI3L2NwM1hEV3BWWnJvbDFxL0xIdjc1LzhIcFp0ZjdHZ1hlSE5LdWlPa3YvbGdPbnJUeVVwWEZud3pRQW1HcHdJUjVWbTRDMzJoWnlVN2N1bVRxNFE0aHJGOE9IUkx6eHlkZm0zdWR5YStlOEFhSE9YYmRkOVltWXJSb3V5Wm1xQWNCaXJnRzgzYXVKdnc1bnUzeGFUVGhRWkU3M1Q3L1RyWUpyazNSdk5XbUxpd2dXYTZqTkJxNEJkTkx4ZHNmaEcvTU1QdGJibTEvUWVOK1dlOHRKaDF6WThRYWRiL290bHdEdXhYZHNtb0ZmVEpQNlZkQmxsbUVMblA1cXVCMEFXTlBwRTBOK2gxSEc5THI2VGRJemNsc1JBQmdENE42M3d0VzYvMERNWDl2RFRlZFo5Z1VBb3dBb1N2T2R1aDVoWGx5US9uT2NEUURHQVZDVW51ZjFhLzg3UVViTThEQUFHQWxBOFYydTAvZitCVFVNbVo4L3ZnTVlDMEJSSXJPMEgxdlJlOVVObWwwRWZnVVlEVUNwZFZUcm9SMXJZZGprM2dNQXd3RW9sWk8wTGZpKzZtN2MzRTRDZ1BFQUZNOVZHbzVyYzEwRFp4YUVoU0F6QUNpV0QxdzlxcXkraGs1c0VBQ1lBa0J4VysvaVgvOTZ4czdySXdBd0I0RGk3ZEpqY2VLOURaNVdCZ0NZQkVDcDR2enBvWUt4UmsvcUVad01NZzJBMHNqWmM4U1piUTJmMDE4QndEd0F5b3ZPSFU5S1RlT250QllBVEFTZ0pEcHpPRWNEakorUUJkY0RtQW9nS0p2OWFBNzVtekNoY0FJQU13RW9yekFmekFGZk0rWXpBUURNQmVERmVuSjRkeVV6cHFOc0FRRFhBTGo1QlFlNmRKUFVBTFpEMmVsdFN2ODliZ0tBTXdDcXRodXphTXYrNDJjdi8vU28wOXlNNDdzV1J2M0J1VzlkVENjRzAvMU42Yi9TbGdDQUhVRG9KZHNEczdlL1hKVzlDSkVNQjVJVHFuM2xPY0NmNFJQcVRRQndBa0F6KzJQdnJHclAvS21icVg3eHg1T3VWcmptczJQZmlGdTU5ZENaN1BzM0tPVm5YengxWk4rV3Rjdm5ER3RyK3dWQSt3QkFId0Qza3NxNmFoZXJlaHdUWFZ2VUhiNzhySU9OWGp1ODhvMytqUjRjNHBNUEFMb0JvT0lGRlptcVVFZnRHcngvTzEvWnBpK3V6V1FxVWVhcW9iVi9HOWFEQUVBL0FFUmZ0OVRqcDljeFoyLzY4UnFTN0ZTWjBoZjNxZnpUeUhrQW9Dc0F5bVVTTU1yaE5nckRuU3Rxd091WG5LL1VyZmlPOTI4cFBnb0ErZ0tnckNZTVpRaDJ1SW5aVHBXMHdmdTNYU3pXK1duMXFoWURnTTRBNkhJRGhqcWtPUHA4ZHVZUFFJdU5XcDVHWUhYcDlsVUFVRm5DWjZqRFd3NmEwczZKbi9xdkY1TDVBUUNWOUZPdlF4ZjdvOTlucjJhdHNubnpCZ0NvNUlMNlozaWczY0VYMlU4QlBuT1ZBSUJIQUJTalhnaTdWMkVNWlMxbGhUSjc4UW9BcUNWRnZSRDc3UXc5eTNvRFVLTVVBZ0JlQVpENmhmeEw3SXhrZlJoN3l6SjdJaDBBTUdTY3E5Y0ZuV0g4QUdoK2pRQ0FZd0JKcW9XSXNqMHdtbkhoUDRzQWdHY0FWOVcvd2RzK2xjRDJBUkQ4UHdJQXJnRllWYS9FYUc5ejNHQ21JbnArVGdEQU53QlN2WitqcWExUlY5aWVUMXZXTDk0RUFQV29ucytyWjJ0VUhGTU55L3lsS3dDZ0h0VTNyVDlzYTFRemxoSUdaZ0VBL3dDNnFHM3BqellHSlRPVmNEa0JBUDhBd3RTMlpPdkJYT05aS3RqT0NnQUNBS2ltdHFXUnBjY1VzandGenAyREY2OENnR29LVkYvZ1lPUE5HWit5RkhBZ0FZQUFBTDVYTGNTN3BRZjFaeWxnTWdDSUFHQy9haUUrTHIxNEZNaFF2NmNJQUVRQU1FbTFFTHRLamZtS3BYNzdBRUFJQU9yWGhYNVZhc3hDaHZMeDhkcEZBRkJMcW5vaExwY2E5Q3hEK1dZQ2dCQUFZdFhQNTVTNk9jeGFqYUY4WndCQUJBRDVqNmpXb1pOTHk0Q1BFd0NJQUdDZWVoMUszeGZ3TGtQMTVnR0FDQUF5R1M3c1BsNXFWS1RpeWlnQTRCQUF3NFhkTlVvdjZEZFNIK1ZiQkFBQ0FFaGtlSS92NEZLamlyelVSL0h5Nm5VQWNKUURQZ3hsS1AzdWlQTU1vMllBQVA4QXZtUzVzOHRTK3FMT2JRekRkZ0VBOXdDU21SNFdadVBuSE11UEFNWnJnYS9QY0MyckFVQXJBT3RDSDZZcXZGNTZLTU5iQVNveDFpRER4ZDQ4Q1FBYUFaeGxmVkNjalhPNlhkVkhOUUVBcmdIY251L0RXSVN1TmtiWFVSLzJad0RnR01ESkY5a2Y3V3JybFFFTXR3UzlEQUM4QXJpMDBvbkh1dGo4S005akdMY0FBTW9jUU5DSHV5NDgrRkNtdk04VzlLdmpYQTFzZmR2K0g4TzRwUUJRNWdEdXh5dTBWZnR1ejBSR0RlclZ0bEhOaXM2WG9JMnQ2N3BaMW9IV0FBQVhBRFRHOG9XdFBUTThVMFRaQ0FEbEFjQXdtM3YrakdIa1RnQW9Cd0FDZm5DNXBwOERRRGtBc01uMm50Y3pERDNDV0lNTEFNQXZnRmZ0N0RtZVlXd1NQZ0dFQjlDNndNNmVsN240OHhFQWhBSVEvSzI5UGE5aUdQMHVBQWdPSVBDVTNUMnpmQWY0R3dDSURjRFB3Y3NadGpLTUh3MEFRZ1B3M2U5Z3ozc1lOaEFKQUNJRHFIL1MwWjRQTVd5aEF3QUlES0NENDBlN24yRFlSQmdBaUF0Z1pJSGplYWN6YktNNkFJZ0tvTklIYXZPK3pMQVZkeXNBaUFtZ1o0YnF2SzBzTDRyNkhnQkVCRkJ0SmN2RVdWNUF2Z29BeEFQZ051UUswOFM3TVd4cktBQ0lCc0E5T3AxeDRpTlpWcElCUUN3QW5pUE9NVTk4RnNzR1R6TnQ2bUlWMndFQWN3SFVpc2x3WXVJc1o0TTBQaWZlR3dETUErQVRsZVRjemZ3SFdiWWFBUUJDQVBCOVpzVk5aeWQrbFdYRGZrVUFvSktHWlEzQTQwOHovdXZTKzN4WmZnY3Fud09BU3VxcWZqWWJCOENyYWRUY3hCdXV6cHpwaFlHeEFLQVMxZHZ6cTJvQ1VLbDF3NW9QM2dKcThhc2IzcW5QOEFrelB6NVpvR25tUzFqS0YyWUZBTWRSZlZ0WGtDWUFQOTRiV0poOUlmbkE1algvV3JmanlMa3MzWjdibE1KVXYwOEF3R0h1cUU0Z1JEc0FZMUxNOU5id3BsWUFjSlFycWhOb3lDc0Fsa2RFS096M2gwa0s0Sno2ZnlGdUFVeGpLbUFMQUhBVTlRdHJXbkVMNEJoYkJiY0FnSU9vdjZtalBiY0E2R0dtQ3JZQkFBZFJ2OEdtRDc4QUpyT1ZNQWtBN09jbDFRbU01UmZBRWJZU3Rpa0NBTHZwb0RxQldmd0NvUHBzTlp3SUFIYWplczdiOFl0WHl4aEFER01SRXdEQVRyN1YrQmUwakFFdy9nMVFLcVVDZ08xc1VwOUFLc2NBcUFWakZSdmtBSUNyMzZPemVRYXdocldNVDFzQndFYUthcW51dnhyeERLQ3dObXNkcHdPQWpURGNZOTJaYXdBc3I1djYrU3gwQWdDVVRsLzEvYi9DTjRDY3lzd0MvbTRGZ044bGkrRzFPeC94RFlCZVppOWwzMXNBOEdEbU1Pei9DT2NBdnZGa3IyVjRCZ0NVVERyRGMzdmQ4amdId1BEZThkL3kwSDRBK0MzRlR6RHNYdVdsR3h3QXVCSGtSRFU5UHdTQVgvTTJ5KzRuY0ErQVZqaFZ6NGhrQVBncCs3MVpkcC9FUHdCckc2Y0thbmt1QlFEdTVXT1dCeXdvRmUvd0Q0QytzRGhYVWt2ZlZBQ1l6VmEwbmlRQUFCcnViRkV0L2RQS080QzdEbGM5VXZvdzdqMU9DQURYSDNhNnJHNDk0MDZXYXdEL3JOWjcvcGQyYnJrNy9HZld6MHpMZVNFQTBGRXZWMG9iUE94akJ3OGp1YjVwZ3B2QUFINDh6VmU1ZSt6dU13K2VDTDM4bjRtdDJIZmVtY1FBUUl0Y3JLNmwrWlJQdjdqdyt4VkNhL2JXU1MwWlhrdkhNNERJRXI5OWE0VjNHL1RLckxjbWorcmJwYjV6TzE4bENvQ1N4K3RDZk9xMTZqVXNadWJrTVFONy9hbEpIWC9XRDBpZUFZUXJPc1EvVHhnQUxud04wQjZlQVZUVzR3REhrREFBNkdnbEFDaVJIM1E1d0JNQ0FhQmRGUURndDN5bXgvRTlSeUlCb0UwZUFQQnJWdXB3ZUc1cFlnR2dCRGNBK0NYVGREaThhQklNQUgxa0FZQ2ZFNlg5NkR5L0VRNEFMYklBd0U5cG8vM29wcEI0QUdpdE53RDhtRUROQjlma3JvZ0E2UE5BQUxpL0xLTDlEOEFKRWhJQW5Rc0ZBT1puWnpqSUxCSVVBR1YzQUFCYXAvWFF1aFFKQzREeXgxcWtCekJINDVFMXl5VnhBUkR0cUNNN2dCSGFEaXdrazRRR1FOZUhTUTZnazZiakN2eWFCQWRBdENsSWFnQzF0UnhXdlpNa1BnREtHdUV1TDRBN1dyNEZ0YnhNNVFFQVVYcC9pNndBMGpUc3IvZHRLaWNBaUk3M2toVEFKcGYzNWoyM21Nb1BBS0tEUmk0S05GL0dLNEE0VjNmV050M0pQZkVPNE42bndBditSalRmdTllUzc5a25ZVGFBY2E3dHF2STd4VlR1QUJEZGptK25jL2Ryak5qbzFCOUswd0U4NmNxT2ZHS3VHdkI3a3dNQTkzSjZZckJlelE5Njl1MHZuSDdVaU5rQUdqaS9tNHF2L21ESWdnTWZBTzRsWlc1SFQ0MjlkMjgrYnZVM0x1M2NaQUJGVGg5cHEwVlpycFZWSEFEM2tydGhsTXNMSkFGUHo5NXp5K1U5bXd5Z2NNWEE2dXc3c0RSODdaVExSeVlVZ1B2SjJEaWpUNGhULyswZjZUVit5WjVMMnZacS9nVWgxaFAvZUtxbStzYXI5SnkrTFZ2TGtlMUpVTWwyNGpEWDk3ODNvbnRqdGNja1YyczdmTzZHdEh3OWRsaEd0NGRuN1gxdlpKdGdPeGRKdVRjYkUzL2FTakxuOXBtOXErZTlNbnpnczA5MWZxSjVvL3ExSG5tOFU4VGdzYS9OV2J6cTA3M0h6bDdUY1U5bCszeUF2TytTZDY5Yk1udkMwR2ZhOWVnM0ttYlc0dFdiRDZaZXZFT0lhZEVDWUQzS0ozN1dhd0N3RU9VVFB3czFBSmlDOG9tZktSb0FSS044NGlkYUE0Q3VLSi80NmFvQndLTW9uL2g1VkFNQXR5dW9uK2k1b3VtMjVlVW9vT2hacnVrY1ZHOFVVUFQwMWdUQUp3OFZGRHQ1UHRwT1EyOUNDY1hPSm0zOVZ5SlJRckVUcVJHQWNoZzFGRG1ITlYrRzFnRkZGRGs2WEptT2J3RVNmd080bjdBaTFGSFVGSVhwY1MzeWRCUlMxRXpYNVdKMHl6cFVVc3lzMCtrR1ZaOWpxS1dJT2VhajZKVGFsMUZOOFhLNXRxSmJIb2NBOGZyL3VKNTNKTlk1am9xS2xlTTZQNnZLQnhjSUM1WDFQb3JPc2NSYVVWWlJZbzAxNGdFMTRZbW9yQmhKREZlTVNlY3ZVVnorODJWbkE1OU1FNW1Zandyem5QekVTTVhZK0QyZmtJczY4NW5jaEFGK2lnbnhhdDNuaGRobFcvYVZpSzI3V1UvdFEzU0tyV2NvWEN2NUQ3WXNpMzJoVDJzdnBjeGk2emJpQVFxaVV3YllLTzkycm1ZSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0F4Z0VBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUtCeEFJQklER0Q5REVTbnJCY1NBR0pvQUFBQUFBQUFBQUFBdUVnaUdtSjJFcmtDa0lDR21KMEVyZ0RFb1NGbUo0NHJBREZvaU5tSjRRcEFGQnBpZHFLNEFoQ0tocGlkVUw1V3EwK2pJK2JtTkdlbksrYWlKZVptTG1jQVdxTWw1cVkxYjJjc2s5QVRNNVBFM1NucjhHSjB4YndVaC9OMzBVSTgybUplNGptOGFxWDZSZlRGckZ5c3p1TjFTeTN5MEJsemt0ZUN6eXZYQnFFMTVtUVFyOWN1amk1QWM0eFB3V2grcjE3dGVCWDlNVHBYTy9KOC9YTElRWFRJMkJ3TTRmd1M5b2cwTk1tNHBFWHdmeE9EZS9UV3UraVVFYm03TmRwZGpCdFpmUHN2M1paOHhZcVc2UlhybGVSdFMvdjdHdEdyL3dNSXdqbGlUR0J2MXdBQUFBQkpSVTVFcmtKZ2dnPT1cIiIsIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWdBQUFBSUFDQU1BQUFERHBpVElBQUFBQTNOQ1NWUUlDQWpiNFUvZ0FBQUFDWEJJV1hNQUFBemVBQUFNM2dFVFVCQjZBQUFBR1hSRldIUlRiMlowZDJGeVpRQjNkM2N1YVc1cmMyTmhjR1V1YjNKbm0rNDhHZ0FBQXdCUVRGUkYvLy8vQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ3lPMzRRQUFBUDkwVWs1VEFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2RIaDhnSVNJakpDVW1KeWdwS2lzc0xTNHZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldsdGNYVjVmWUdGaVkyUmxabWRvYVdwcmJHMXViM0J4Y25OMGRYWjNlSGw2ZTN4OWZuK0FnWUtEaElXR2g0aUppb3VNalk2UGtKR1NrNVNWbHBlWW1acWJuSjJlbjZDaG9xT2twYWFucUttcXE2eXRycSt3c2JLenRMVzJ0N2k1dXJ1OHZiNi93TUhDdzhURnhzZkl5Y3JMek0zT3o5RFIwdFBVMWRiWDJObmEyOXpkM3QvZzRlTGo1T1htNStqcDZ1dnM3ZTd2OFBIeTgvVDE5dmY0K2ZyNy9QMys2d2paTlFBQUpqQkpSRUZVZU5ydG5YZUExVVRYeHJQY1paZTJpeXh0NlV1VlJSQldCRjVBV0JBRVZJcStJbEwxVTZxSUtCMVVWRVNLSXFLZzFCZEJBUVVVbEY1VXFncElWWW9nU0pXNmRMYTNmSFQySnVja004bmszdHprUEgvdW5Ua3p5Zmx0TWpselprYVNMRkJZbTZuTGQ1M0xsRjJuU3p0bnhrcHVsNmZUc21UWnhkcmQwTjMrYjdsWGRyblNlN3ZZL1ZFYlpaSTh6clgrajQwajc5L1FRSmY2djNzcStmNm1NcDl6cGYvYmsrZnZLTG1lQy8xZlBaRWNmMWNYSzdyTy80V09rOXV6NkhCaHR3RXdrNXp1cGEyNTNlWC9xaG5rYzI4dDhiZ0tnRlhrY2FVbXVzbi9OY25mN2c0SGpDWjNBK0dBdHU0QjRDOXlOeFFPcU84Vy8xY2daN3M3SE5DQmZBM3JpRXZDQVFQSTFlNE9CNHdqVDdzN0hEQ1hISTFxa2hzQVdBRmNlUGRJZDZpS0hnR0RYQURBU3VDNjNmSVJIRW5oQUFMQTllRUFBc0RsNFFBQ3dPWGhBQUpBUjl0eUV3Q3VCa0JlNmlFQVhBMkF3OE1CQklDK0JoRUE3Z1lnc3gwQjRHb0FIQjBPSUFDWXNnT2lDUUJYQXlBZmlTUUFYQTJBYzhNQkJBQ2puQm9PSUFCWU5aa0FjRGNBOG1BQ3dOMEFPRE1jUUFDd0t5V1dBSEExQUk0TUJ4QUFQRG9hU1FDNEdnQUhoZ01JQUQ0dDh4QUFyZ2JBY2VFQUFvQlhnd2tBZHdPUTJaNEFjRFVBRGdzSEVBRDh1aFJOQUxnYUFFZUZBd2dBSTlxZW13QndOUUFPQ2djUUFNWTBoUUJ3TndEeUVBTEEzUUE0SlJ4QUFCaFZTZ01Dd05VQXlKY3FFUUN1QnNBWjRRQUN3SVMyNXlFQVhBMkFFOElCQklBcFRTRUEzQTJBL0FZQjRHNEFNanNRQUs0R0lPRERBUVNBV1FWNE9JQUFNSzFqUlFnQVZ3TWc3OGhEQUxnYUFIbDVNQUhnYWdEa3FRU0F1d0VJNEhBQUFTQkVnUnNPSUFERUtLVWhBZUJxQU9STER4QUFyZ1lnVU1NQkJJQXdCV1k0Z0FBUXA0QU1CeEFBQWpXVkFIQTNBUEtiQklDN0FaQTdFZ0R1QmlEd3dnRUVnRmhkZm9BQWNEVUFBUmNPSUFCRUs4RENBUVNBY0swSUpnQmNEWUE4alFCd053QUJGUTRnQUt4UVJ3TEEzUUFFVURpQUFMQkVnUk1PSUFDczBiR2lCSUNyQVpCMzVpRUFYQTFBb0lRRENBRExOSTBBY0RjQThsc0VnTHNCa0RzUkFPNEdJUFZSQXNEVkFNaVhLeE1BcmdaQVBsNlVBSEExQVBMT01BTEExUURJSzRNSkFGY0RJUCtQQUhBM0FEWVBCd1FtQUo2OHhhT2ppK2YxQkFRQTlnNEhCQkFBd2VXZTdETjU2Zm9kQjg4azNPbHB3cG1ETzlZdm5kem55WExCTmdiQTF1R0FnQUFncEU3WE1ZdjJwMnJlNVAyTHhuU3RFMkpMQUd3ZERyQTlBSjVhZzFjbnNON3BoTldEYTNuc0I0Q2R3d0cyQmlDb1dwOGxWM2h2OXBVbGZhb0YyUXdBRzRjRGJBeEE3WWx4UnU5MzNNVGE5Z0xBdnVFQXV3SVFOZlJ2YzNmODc2RlJkZ0xBdHVFQVd3S1F0OHVHVFBPM1BITkRsN3oyQVVBZVNnQXdLdWJySkZFM1BlbnJHTnNBSUQ5UEFEQzkrWmVKdmUzTGF0c0ZnTlJHQklDdUdxMFJmK1BYTkxJSEFQWU1COWdLZ09hYnJMbnptNXJiQWdCYmhnTnNCRURUWGRiZCtsMU43UUNBdkN1TUFNQlUvRnRyNy8yM3hXMEFnTHdxbUFDQUozcjZYN1A2M2wvckgreC9BT1RwQkFDa2VyczU3MlBDbGpYTEY4NzViazhLVDZYZDlmd1BnTnlOQUZDcDBKZDgvOHJMQnYwbis1MG54LzFQVGJqSVh2WExRbjRINEh3RUFhQlEyMHM4Ti9Ca2YrVkFLa2U3bjVqamhwZmEraHNBZVNJQjRLWFFTVHgzYi85TDRKUi9OSHY0WUZLb253SElpQ0FBc3FqY1RwN28va2RveHNmejU1aG5ac3Y1RndBNWxnQzRwK2V1Y3R5NTAwMDBMRVY4dzJybTZuUCtCZUFWQXVEdTQzOGl6NDM3dWFDbXNhQlAyVi9EdDE0RGhXVWFCUGdWZ0xJN2VPN2JobHg2OW9ZejI5cFI5aVl5Vi93Q3dBOEV3QzNWNEVyNDJSYXViM0VnZThwUXpSdmwxL2dGZ0pVRXdFMDE0WXI5N2MzUFluTVdzNzM0WnRlTGp5WUEvQWRBdTFTZW01WlNrY2xvMkQvc3MvTWRKYWtsQWVBM0FGN2p5L2theG1qMlAybnMzNVQ5cGFDMUJJQ2ZBQmpKZDgvMmg3SWFIc1poOWFPZ3FHc0VnRDhBOEV5M0xIYVNsMmRrUHl0N1Z3TEFEd0FFemVhOFplczVqSC9JWTNoK3R0WnhCSURQQVJqSGU4dGU0REJlbEd1RytET3AwRUlDd01jQURPSk81Y2pOWS80TEx0dHZTVktGZGgrdDNXK1JUZ0pOcm5BNUFDOWFuRVhUZ3M5NEYwc3Z0aTA5QVZUK1NlTUdvQWxYQS9reXVJeW50eUlBZkFsQTNVVCtsMlpodmlZNGs0c1RIeUVBZkFmQUF4ZjUvWCtlczQzeG5QWXZQa0FBK0FxQThFTUdSczNyT1J2cHlOdkFvWEFDd0VjQXpQZkYvSGtMN2hibUV3QytBYUNub2U5bTNtM1dHdkUzMFpNQThBVUFNY21HQUhpZnM1azYvRTBreHhBQTFnTVFmdEJZNU94anpuYXFHV2pqWURnQllEa0FjdzJHVGlmelBtaU1OREtYQUxBYWdCNUdZK2RmY2piVXpsQXJQUWdBYXdHSU5yenZ5MXJPbHQ0MzFFcFNOQUZnS1FER0V6QVQrZmIvbEw3M0RXY0VBSmZhbTVnL3JjdlhsTkg5NVRvUUFOWUJFSDdhQkFCdmNEVlZOTU5nTTJmeUVnQ1dBZkNwQ2YvTHE3bWFlc053TzU4UkFGWUJVQzNkREFBWlpUbWFDanBrdkozcUJJQTFBQVNaM1AxckVrZGJEVXkwODNzMkFzQVNBTHFZektKTEtzVGUxamRtR25xWkFMQUNnTER6WnZNbzJhY0RIakcxeWZERmNBTEFBZ0FHbXZXL0hIOC9ZMVBaOTVocmFBZ0JJQjZBbkdmTXAxSnZad3dHRFRIWnpybGNCSUJ3QUY0VmtVei9FVnU4T2RGc082OFJBS0lCeUg1Y0JBQ1pUUm1hS25YQ2REc25RZ2dBd1FCMEZyT2VKcUdaYmt1UkJ3VzAwNVVBRUF1QTU2QVlBT1JVdlc1RjdCYlJ6Q0VQQVNBVWdQYXlLR1ZvZjZYWCtrZE1NKzBKQUtFQTdKYkZhWDRrMmt5Mk45TUVOYktiQUJBSlFGMVpwQzUxUlU0RXJMQk9YQ04xQ1FDQjlxZklZcldoT2ZDT3J2bGRoc0FtcGhBQTRzem51Q1NMMXFsUjViMmF5Tjk2cmRnR0x1VWdBSVRwV2RrSy9USG56ZjlXekYrczdBUFZuL3Q4ZDZadzg4OFNBTUswUkE1QUxTRUFSS2xRV2lBQ2tGYUlBQkNrMStXQTFPc0VnQ0R0Q0V3QWRoQUFZbFJKRGxCVklnQ0VxRStnQXRDSEFCQ2l4ZHF4L1Q5V0xwd3o3Yk9sUnpKdEI4QmlBa0RJUk9CbGZIcC95NGZONzd0VExuZU43aHZ0QmNCbER3RWdRRFhRbWQyWnFuMlpLbnh3eGs0RTFDQUFCQWpaRWpSaGJIR29kSENmYS9ZQllCQUJZSkh0Njk5WWFJWnZpUjlzQThCS0FzQzhzc2RETC8reFdrbDNyUzdaQklENDdBU0FhVUdwQUZkMWNqdXJuYlVKQVhVSkFOTWFxcmFjV0YrdjB2MG5MUE5wNnRramU3Zitjb3l0OEZBQ3dMVFVPM1drUHE1ZnE5UmhLNXgvWmVXYnNUbHZOUkJXNjZYeCtyc1ZmRThBbU5ZK3BkMzAxaXpWcXFjS2QvL09kc0dLTDQ3bUMzUmEyVWNBbUE0RHFXNHg0NFovQXdTNy8yZHd1L21DbjJpbWthVjZDQUNUS3E4MGV6d1BXOFdnbjBTNi84SlRXRHNQYXg1Y1hwNEFNS25tU3JQTUp6TVV1U3JPLzJ1S2FUeWorbXVjTDlTY0FEQ3BmZ3FySEdjbWp4WGwvc3doMm50K05FMUFxL1lqQUV4cW12SHdlbkg5Y1dEYWFaYU5KMS9SYStrUjlKakJhUVNBU1cxUVpQTHkxSjJoNmRZelU1c1h1ZjZmbmIvZWh6cnJEaG0yZTNnSU96ZHdBd0ZnVW9xWVhtK2V1bHFwUkptZjN6dEZMdHNBclIzb1I3RTAxUkQ1R0RoTEFKaFRtTGZONUFpdTJ2aS85dkhHM3Foc1Ewc3luczgzQXFrZVJnQ1lVZ2x2bTB2NWF2OFA4K29jNVhhZXdlOGlKUk5Mc3pVVmpPeGhWNElBTUNYRlUzd2tYKzNuRWE5dURWYVhSWTRLSGN6YVZ1bDQ2eEpEWFF4QUxXK2JuRHN4UjhGT1RZWk9lQXNIOTZEWnd6NmhDNTlsWElzQU1LWEczamFyY1ZhUDQvaXZiZ3hsbGJabWI2c0V1SDZwTVFGZ1NrOTdad0R6cnJnOUF2bmtkeVJBUDFGZE5JNW5zNmV2b01hZUpnQk15ZnN0SHNkYmZSL2trK2ZZWHhoY0owMVZoaHA3bmdBd3BWZThVNng0cTBPTHlsTEMyRXZ6SFFlNzEwZ1VrUURRMUdEdlZ3QnY5ZCtBZnExRFM0OVdaUUR3dFRiSnpGY0VBY0FTWCtFZEEvd085R3MyV3JxWHN1aDB2dGFnZzhaR0VBQ205SkczelFqTzZ0Q01NTDVkYkd0bDBiNThyUlhqYW8wQVlORXdiNXVjWjdPV2tNMEIwSlN6dDBBb1lSZ0JZRXI5dlcxeWJzTGNURGIzQ2lqTzJWc2dPYWcvQVdCSzNiMXRMdUNyM1E4Q0FEL1piNVF5L1pTM3Q3K3FXK3RPQUppU1lvdll1Q0N1MnVEQzhpUTBxVkExSmNpYjB2bWp1clgyQklBcHRWQVlyY3hUdVRDOHVSUzJmMXRKMDNPNWk5U050U0FBVEVsNWVoZlhvWHo5NGJtZzM1QU1QL1dwaEx6N2ZDMVVOOWFBQURDbDZzcnArUUltSTNONHBtYXNlaklvaXJPM3dKYlcxUWtBVTZwZzRyUHFFU3dkSkFsYVdwNEhXRXhXbTYrendVQitlQVVDd0pTS3FGWm81R2F0NnNGM2w5c0V2QVFtQStVRzhIVTJHakJSaEFBd3BWQlZzdVducHI0QmIydUc4a3ZBQXg0VXhwbUIxbHB0SVNPVUFEQW45UUVlVDdCVkxCV3ZsZXA5cEtGWDRZcWJ3VktYK0E2QkJWYWkvQ01SQU9hMFhKMXBYWmpwQmJCS1o3WFBoQ3hwNGYydzVTRmNvZWRnWUlPcTVRU0FTUUdaZHFzWTRqTkJNM1RYKzV5WjJDVC85WkpoTlVmK2paWVp6OVBWVm9DQmNRU0FTZlVBTEM4TU5jSU5wSlJUQ1pxL0orUTNGd2FTZXhBQUp0VVE4c3VQZXA4Qzc0aGFGL29PZTArTFFuSEhoZ1NBNk8vQVc5OXhtb2tCWVY4Sld4Y2V4MzRLOEd6WnFxOUFkMjhSQTYveVAva01Ya1BVMFg5OEdUMU5vZHBYSlFMQXJMWWlubG1NTExyS05WVG8rU0lac1d6ZHpBVm1vRzhsQUV4ckZ1YWFhOE5LcWtzWEdIWmVGcXNUK1l4K3JWelhMQUxBdEhwcS9IZXVmTlpyNFVib0l4TVNaT0ZpU2tKNUdhN2Jrd0F3cldoTjcxejhlWHozUndvWEtWdWxaclAzMWlYSmxtaWlmaFpLVzJSN2dHZ0N3THhPeWY3V3JHQ2RMajZPYkVaelNpSUF6R3VPM3dHUXY5ZU9QSFZQeExZaElBQUVxTFAvQVpDM2FVd0tSQ3hFcTNVbUFBU29qQTBBa05NL3dvS1BqZjdGYTVVaEFFVG9xQjBJa0krMGhkNERqMnNkT0g5VUlnQkU2QXZaSHJvd1FmRWlDT3Y0cDJhRkx3Z0FJZW9vMjBaL1R1clY4RWFxY0hCNHlkYWZiay9YS2QyUkFCQ2lBcW15clhUNU1sdUhVZ3NRQUdLMFNBNUlMWklJQURGNkpqQUJlSVlBRUtUUWk0SG8vNHVoQklBb1RSYnVuV3NuRC82NWVjc1ZLd0dZSkJFQW9sUkhxR2RPZnQyajB1MzVuZUpOKzM2ZlpoRUFkUWdBY1Rvb0xxUTNUM25pUU9FQmYxbmgvNE1TQVNCT2J3dnlTdng0Y08vbjJKM2lBWGliQUJCb3YweW1FS2Rzd1BidTl2U05GK3ovekRJRWdNZ0dGb3Q0K3IrdHNhS2t4REt4QUN5V0NBQ1JEZFFTTVBiVFBzZzMyMVNoQU5RaUFJUUNJSmsrQlRCT056M3JJNEgrLzBraUFNUUMwTUNrUjY0d2JOWHh0amdBR2hBQWdnR0F0bURqa1A2QjR6YzBRNVQvZjVVSUFORUFQR0hLSTJ6Sldia1BDQUxnQ1FKQU9BRFNEaE1PV2N2WVJreUtFUC92a0FnQThRQ1ltQk5NWXQ2cXFaL041Z0VKZ0N6ZmFic01PK1JONWtaQ1RncncvNjVzQklBRkFFaDFqSVlETDNCTXpQWVhFQVNzSXhFQVZnQWdUVGZvRVo2TlhzSXVtd1pndWtRQVdBTkFnUXZHUE1KMTJOd28wOG5EQlFnQWl3Q1F1aG55eUhhdU5xcWFCYUNiUkFCWUJVRFFaaU1lNmNNMzFqVDVEdGdjUkFCWUJvQVVrMjdBSmJGOGJTdzNOK1VZSXhFQTFnRWdUVERnRTg1TjM5OHdCY0FFaVFDd0VvQzgvQXNGejNNMjBkQ00vNC9tSlFBc0JVQ3F4YjFNYUNObkMyWkdnYW0xSkFMQVdnRDRnN1d6T1Jzb2J3S0FmaElCWURVQTNObGg4emp0RjdOSkhoZ0JnQ2ppR0o5WGVKZm81VFBzLzJNUkJJQVBBSkJxOHkzbFdNVnBQdHlvLzlOcVN3U0FMd0NRQm5ENVpUMm45WWVNQWpCQUlnQjhBMERRRWg2L0hPQzAzc21nLzVjRUVRQStBa0RLczgzQ1FOQm9ZLzdmbGtjaUFId0ZnRlR3Yit2eWM1WVk4di9mQlNVQ3dIY0FTRkVjKzRkK3ltVTUyMmtqL2o4VkpSRUF2Z1JBZXBCOTBtNG5sK0ZtUnZ4LytVR0pBUEF0QUZKOTlxMmhxL0xZbldjazZiUytSQUQ0R2dEcEtlYXBZWjR0ZXlPU0RVd0JQeVVSQUw0SFFPcWN3UnFoS2NWdXREZS8vek02U3dTQVB3Q1EyckF1NDJEUENvMDR5KzMvbERZU0FlQWZBS1JHVnhsWEJqSWYzTUNmZUh5MWtVUUErQXNBS2VZTW01ZitZRndaRU11OTlPQk1qRVFBK0E4QXFld2hrUytCblB0NS9YK29yRVFBK0JNQXFkQjJOaysxWUxBVnNvSTc0N3lRUkFENEZ3QXA3RWNtVjhVMzFyWGsrWmJYL3orR1NRU0F2d0dRUENPWlh0ekpyWFRzTUJ3NHJsZ0RPTUlqRVFEK0IwQ1Ntc1V4UlFNNmFCcko5eDJuLzg4MThka0ZFZ0E2S3JhUktXQXpYdU9KWGY4NHAvL1hGWlVJQUxzQUlIbEdNYjBHVG1DdmdaRDNNL2pjbnpIY0l4RUE5Z0ZBa2g1bmVnM0lDNkhQOXZDQnZOdENuSDNNcHhkSEFEQ29PT05Xbnp0NzUvZXVXR1kwOTNMUVJVVWtBc0J1QUVqUzA0ejU0aW5MUjNXTXlYbTlRbzU4VlYvNTVsL3U0TytSRnI2K01nS0FUYmxIczY4Ynl6Z2ZueUViVWNxSW5CSUJZRThBSkNsNnJXeXhmcTdvaDhzaUFOalY0YlNWN2ovZDNpOFhSUUJ3S084d3k0Nll1amdzcjBRQTJCMEFTUW9iZE5ZSzk1OGRIT2F2S3lJQU9KV3o5d25SN2ovUk82Zi9yb2NBNEZaSTEwTWkzWCtvYTRnL3I0WUFNQklkYnJNOFhZejMwNWUzOGZqM1dnZ0FZNHJzSytBMHNKMTlJLzErSVFTQVlWVVpZMnIzNTVOanF0amhLZ2dBTTYrQ0p0T1BHdlArMGVsTlBQYTRCZ0xBcEVwM25uT0t6L21uNW5RdWJaLytFd0FDVkxIbmQrY1lVMzIrNjFuUlhuMG5BQVNwWUwwdVl4WWZRTGNZU2p1d2VFeVhlZ1h0MTI4Q1FLaXlWMnpWYThqSUNUTVhyTjYwNTlpeFBadFdMNWc1WWVTUVhxMHFacmRyandrQWw0c0FJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FINER1a1NSQjZoNlFBSkFzRlFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBZUN0ak1NcnBuMzhicjl1SFRxLzl0WUhuOC9kZG9VQWNBMEFLUnZmZTdwU3FQS2lJdXQxL2ZJNEFTQU1nQ1BhSm5xeVhmZENUU1BWRE56SjNTTWE1OEl0bHVzMkw0SEZTanZNd0JpT1oxQUJ4TVlFUndDd1U5dEVLYmFiMUZIVFNCbGU3NThkRjZON2NlRmRmdEUzOUMxV3V5RjdaMzVGVEdRNzVRZ0ExdXJZMk1OeWoxTHYwN1JSZ00vOUc1c0hzMTFmK2JHSk9xYmljeUJWczE5bDdzNFF4RVNzTTE0QkMzVnNqQmJ3NWd2aGNuOWpqaXVNL0NSSjIxb3JyT1pDNWc1VlFTeDg3Z3dBdnRDeFVZL2xIblhUTVpMTWZMZDNOT2E4eHFLVE1yVHNmWW5WNjhMYW82T0lBYzhaWndEd3NZNE56MFdHWVZKaEhTUG5HRzkyMHFCZy9xdXN1MS9ENGtYTVlERldBRDdqR2tVRUhnQkQ5WXg4bzI5amc1Nk5RMnozZW0xNVE1ZVo0OE4wM09aaldLMWRqQUEwUStwUGNnZ0FyK29aNmFodjQzVTlHenRZN25SNi95Q2pGMXJuTkdwMUVsWm5GSnYvNDBPUkorTTVod0RRU2M5SS9neGRHeVgxYkt4ajZFamNveWF1dERpSzJPbHNaZ1kzc3Z3OVVyMnhVd0pCelhXdC9LcG5ZcHV1aWNYNi9kaGEwdFNsNXBxUEdhNkwxQWkreEFSQVo2VDZWS2NBOElpdWxUZjBUTHloYTJLMi9vZGtEcFBYR3ZRcFlua3NWbU0raS84ekl4Rjh6anNGZ01xNlZxcnFtYmhmMThSRXkvMlBmWmRyeExyL2p3V0EzNUhLVFJ3ekYxQk0zOHdKYlF0NzlTMk05b0gvcGFBcHNIRXNxaHlaeVhCNzNrWXEvODh4QU9UV056TkYyOEp3eWV4YlpGME9JWmNiOUExZi83WXozSjZIa0VqeUJhY0FrTXBncHFXMkNmMTVHNm1YcG9GelJRUmRiOWhocmlmVWNQM2I4eTlTOVhISFRBZWZZeGxoSjVtWVQ3NnA1elhIV2MyRVhYQ2RkSjR4U20zOTJ6TUZxVHJETVFEOHpXSm5oWmFGc1F3R250SXk4S0Z1OVpBeURWLzR2OWlTSHYyRzN1T1p6c3QyWHZmMnRFQTZkTWt4QVB6T1lrZnpDVjZYd2NDakd2VzNaTmVzbXZPRm4wN2VEa1dsL3JPaVk2aDJROEZib0JBRFZ2cHJ2YnVUaU9Ta1BPbWNqS0JWTEhaS2F4aEFJMjFaOVRCZS8zSnByWXBWSmlqKzE4NlBLYWZaVXZsNGpraWxicFI3S1ZMeFMrY0FNSS9KMEQ2WlA5YWVWUlh3K3M5cVZDdTBEQm95TENxazFWUlhvTXByU05tQ2VsSHVIbkM5ME12T0FRQWE1YWdmczJNNFp0dWc3OHBJN2xIV3pSZkhLYmpPU2MzbzVRL3FDdXV4c2x0MDdrNXg3cytpZ0FOZ05GQnRvT292c2V6ejdVV2dNVjB1clBxSm5Ham5QY1BSLzgrMEFScnpoc1ZTMWZrSzJEUGpIV1A1a3JNZEJNQmdvTnB5OWRnS2ZlYk5WTDFYUDRGNmtvWlU3NE1QNTVacGRYdUJSdUxJTFBhTXBScUdRbHc1cmpvSUFPZ3RkMGdkbUptSDFXK3BHaDk5RHZVRVNTdTZtSWMzc3ErWHAzTmRNZXh1Q2RKT1ZhckYvMUViY0FBOEIxUTczWW81a3FQT3VqMDVEZXJKRWJqNmUyalhYOVhyZUUvOHN0WFpCNmw1a2FKZmFTYW5CL0YvUFFZY0FFMkJhbGZmWng0dnoxY1dqRmEvRkc3b0QvZ3p1eURXODJicGVoMVBhOHdUdXNiV0xiUTFrQytiODVxVEFJQ2VjaGxBY0dBelhGMTFCRlZ2K1d1b0p4dkIyaE93anBkZ1dBRjRxUXhXTzl2ZnpNbnZFVnFnL1JldTgxL1pTUUJVQU1ZNDhnWDFIOThDYXllSEtjc3RoaGZqZ0NPNnRDakp5Sk5aejZuUWVyWUViSm1aUnJwVENqSkFtZWNvQUlBUHBQeXlYSlpsWkFWRnlvS3Z5ajlBUFFFbmFtZGovWDZJWmFaZWx1dWdzMWNYV2YrYnBUZTVnNlM1NGgwRlFJaTZWaW53Y01HVFVPMlhWTk54c3J3YzZnbVlVb0F0dVpGK1pzdlgvQlc5OEZITXNNVnc1MHMvS3pzSmdBU2dWaVZ3dGNnMEtKRTdQeEJaK1JIcUNSUktYSWQxKzBuR2pIMzVhY3hDVGZXVVF3anlJWGdLdFk1TVVuenJLQUJPd3RHUmpXd2Z2MnVnd1I3bzE2RkE3VGV4YnJNdTJaQVBZQk5Sd2VxQk9wWjA4QVZucGx2dVJFY0JBRjFsZytzUEJ2WFVleDVnZlY4dlZhRlVXZjRONnNsckhLL3dCMlZteFdKWHZrcFZkQ3BTc2pWUGtQeTZucE1kQmNBdnlCTzRDc3M5VlNlVU5zZG0zMTlVVjc2R1JYTkhzZ013RWJ0eWRSTGlXZVJwa1RlTkwxOStnYk1BZ0NhODIwQ2pPMGthb0tyOHA2ck1KOWYvK2dmVWsyZlVUUy9IZW4yWUhZQnpXSkpRWFhYWitralI5YkRwODdEcFBFbk9BbUEyOHQ4S3pQSlhWMVZXRHhWdjdDYXhEK3JKWStxbSt5T2RyaVZ6cUFsaUpFVDlwdjRFS1RvSXRqd0xMdDFlZGhZQVVDenVSZ0xZZGlDK3BzcURlMEpacE1pTnZ4NWs5R3AxcE5PZjhBQXdIYnYwTmFxaXg1Q1NWZGduU1NRdzJ5Q2dBUmlPL0V1a2h1cGZlNm9xVXRZSnZkSFI2b25BYk9iZkFOZXRZSWtCd0V6L3cwaFJjTjFMR3J6cFRYaXl3d0RvQjlSNkQ1a2pVSTdrMWQrS04xUGxUa0U5VVcvSGdLMjZ6U2R6Q2NzUWJLQXVPaElwQ2k3elJMWk8wczBpRERRQWdNR2VOQmI4d2xNL0s5K0JvNFZ4VUUvQ1dPTnNHc2xIb05wZzBXQjEwZjFJVVhCNnZ5OWNkckhUQUlCQzVKTnYvQURzclJNVXA1TVBYdW5tbjYrQUFUZlZkREt5NWdxTUdIQ210TjBVa0xWVENTNFpsc0kyU1hiam16SEZhUUJBbXpMY1RLbUNGb3g0cjZlK3F2cU83Mzlya2gvc2ltcCtGMXNPTm9NUEFEU3RIVWhCZVl0OTZnRlpML09DN0RRQW9IVjlDN0dFMkplOXFpNkI0c0EzSmdqWVJsclljcEFkZkFERVlkZStWVjEyQjFLMG43b29zdHhwbWVNQUtJMkdVWUd0WXlwcUo5dmZ5Um9DQitaN2xla2NXQlEvaFE4QWRIbjdTdmJwbmNwc1Q4YnJBOVJVeHdHUUQ2aDFhd2ZXR2NBdlhqTm5EMkRoWG5EZWJSUGJNL1pXS0lGSDJNZmRiTVp2bnJ1RFY2OVVSM2p1OEVYWmFRQmtRaC9qTzlHNHlad3NWVStoY1lJOExMTXoyRngrTkM4QWpSQkRuM0lrRUtqR0hVdmdjaXNjQjhCbHFOYnRqRG9nNWE2elZxZzBaNExHVTBVMWkvNEQwdVhhdkFBOGd4aUNKcUF6a1pGbk85MXB6cHVLU0hNY0FFY2wvRUhmUmYxTDFsMi9YMUQrMkZJankweTlwY28wcE12TmVBRjRDVEVFN25QL01seTJZQ1pUZUlsbGQ5a0FBMkNueGhjYmxOMTdWR1B3TmYzT0wrQ0N1bzhadzNKdGVRRkFJalkzNXpSVitoRXByTmdzNWgrNDFHcm5BUUFHUEc5blNwL1dmRm4rcFpvck9xczUxbjVYMFRLMkpxd0hMd0RERUVPUGdSSCtmSEJoUlE0aHVMaEpLcERtUEFDZ2dIem9uUitqMWI4OWowOGozcHVCQjNkazZhdG9HVnVwTVpnWGdERThBVjcxaSt1V0ZCcy90d1FMZFpPZEJ3QzA5aVhpem8rdnFIOHJmcmVtYXZYWWgzZC9xc3p5L213aENnQnNIemY0aGIwSUxod1NyejNOZVZNL09SQUFhSy80RW5kKy9FNWpFSkN1V215M1h6TzZxSG9sZHhUMUNzQTJmNER6UEpLUXhSNUw5V2NDQzZVN0VBRG8zK2R1dk84OEVOSzdzeXBtay9LSCsrOFpyY1V5dW45ZDFDQVFlYWhqZTFvZ0c1TDB6bHBta0FrMEF3d0FhRTcyWHVwWE5mV1BmYkJFa29FNjJaUjFGQzIvajNUNWNWNEFzRE5oa0hUdmIrRFNYbEh1YW1DUnRVNEVBTm9ydnI3V1NMME9sbytkWlkxZFE1WjQreVJSZ1NBc014eVp1YitLYkRPVzVTVEMwK0JrUm1TR0V3Rm9vZmsvQ0FSRWM5eWFEa2xReHNvTFo3azkwSXB6cWFTaTVXOUZoWUtySVlaK1E4by9DUmZQRXFpQ2p4bDZSWFlpQVBXQVN2ZFdTbHdCTXFOdnpiS3UwQW9TZ3ljUTNNZVdjaVVWNVFVQTJjZEpPc0NYUnBwbGtOb2VMTERla1FCQVgyeFpraDVxcW4rZEFFK3JMZGJKTXBJOGlwWjNJMTNPemprZGZCbTdkbXczNXpnNDN6L2k3aU1NUGlpMFNJWWpBU2l1SFVRSGRwQzZsUlZaVmZIWFhJbTZDZFdLUmRXbnNUNXY0d01BTzY4cUcrcXdobkNGdXp2R3dmdUt2aW83RWdEb3F6akxDcURWNmwvTDNmajd1U0N0c0J2OGlhOVloWXZ1VWo2RkQ0RHhpQm44c0ZKa1c1TDN0VExsc1MxT0FoMkFOSjJvZlJLd2k5K05EWmJuS3Y4NFUzOStUbm00WHpqUzUrNThBR0JIK2xSR2Evd0xMeVZvb3ZtRUtKYnBTQURpOUNJb3dJQitHVEJUN1BIYWRyczcySmZmRlczWFJ2cjhNQjhBMlBxaVRuZ1ZlUE8zdkxmZkdXbmdaakt2eTQ0RUFGekZOVWs3VlB6MjlUOUhLZjRXeXpEUnA0eWtZM3U0aDZieStEOE5PMnRrUEY3bkE3akc3bHUvYnVINnFBeHdBTUM5NHJOdXRMa0hmRlFlVXY1dG5KZFZlT09IaGF4M2Fqc1BBTDlnVmpaeFluOTM4QUhtQTVmSWRDWUFxNkZLMzJ2bjNONlhLVTlXL3MxN09kOElzQzh6RlcyajJ3Tzh3UU1BTmhXVVhXc1Y5NE5nbGR1SGlJSGJ6dlNWblFuQWZLalNqem9EdXIvazFvcS9LTGIwR01mMlRFYjJZWldpTXRuOW40a2xoVCtrVmV0ZHNFb0ZqWVMyelE0RllJcnV3M091K3ZjWkdSSEFzRURQNnIzUHJEc2FpUFg2RjNZQU5tSTJCbXJWK2hPdWMzTWtld0Q2cFpUc1VBQSswQmdNM2RJRmRkNTREOVZKc1lyRlBMUFlYTElNNnpWSFNrQnZZeERCT1o5TDBFanhBS2NDQUk3RWozZ1ZVVWVEcTQzV21lZFp3T2JXSzlqMkx2bVp2d015aWlJbWRJNENHWWdQUGw2RWZ0bnFWQURBRTFHODF3Q3JGMVFHNWRTSmtxNEErNkxlV3dWYjA2TzlGMnRXemNFczZKd0t1eG1zZEhOTGdmTEFEMlZrcHdMUUZxcVV4UGFXdlNmbDRscjRnSlluWmVaQlFGbkdDYUdVS016Q1FpTmp4OXhwc253VyttR1FZd0dBTms4TVZrUmF3dlVheWFmTWxvWlBrNituL2g1SHp4c2J3M2F6MFJNTEkzUzI4a0pXL214SFhsL2JIUXNBOUNXV1YxSG1LYjFHVkx1bWdOdUVRV2VRbzZiem5tTzUxNWNpc1ByOTlhcXVBYXROZ0tPWTVXVEhBZ0JsOEJkanpOMjZxKytVVm8rQ3hVcXpUK1V5emdnTndHcG4rMGV2YW5vQlpKaFN3MnhrS3JBQUtBelVxYWdvYzFpbmpSeXFiWG5oNDRqekErM1h3SXg2TnVqZjZqWG9pYU5QNkZjR1p5eWo1SGdvUExuTHVRQ0VzTXpHYVovVUNRenU0dUhnTE5EK1hOUnF4Rjk2ZDNwL1ByVHljbjAvd1VlQ252b1pqeEE2RVlCRTlHTW9xMTdSYmtPOWpYd0dYQkFZbUtXWFFzMUduZGJ1KzNtY3kvOHcrRWw5MU1rTkxZQVdHcjdsWEFEQUhmMmFLMHN0MW13aTJ4bTFYWGlLOWl6UWc0OXh3dzlkMC93Q3JJL1haRXJmQkwrQSt6MEcvUEZQNXdJQTdvaXZXcHB6VGZOMDd6cUFYWGgwZmhBb2VWWGpJN1BCR2J6blp4dnp2Sk9ZNThGeUJldVBpWndFQUxoamlucFJaYXhXRXg4eVoycURYOU5ETlV3WFhJU08veUkxSGtscy83SHhPUmp2NGRzT0JnQ2NqbEVuUDQzVWFnSkt2NGMzV1Z3TFBzcGp0SXgzQmM5bnluaEg2OFI2eGdVY3lCSnd0Zlk2R0FEd0lDWDFtR2ViUmd2Z1FoN1lxZkQvODc2Y1doZFFicEpxaS9MRUx4L1dxbEUybnRGVE05bHU0UU95Z3dFQXo5OGRyWTZjRjhSYkdBTFpyUXNXblFWM1lxSk9tS0hkNnF3emUzdDY1OU1lazI1ZzlkVEZZS1piT016SkFJQXJkRDlUbDJ1UHQ3QUZzdnNZV0JRN0RicTUzbFVVYmRadHhPd04yeForM0x0bEpiMnlmZGhkMVpqcEZ2N2xaQURBZlJObjhqd3RpNExwVy9DSzdWSFlpTDZ3dUF1dW1jVHVxb2tzQnF2SVRnYWdNMU5vSDRrWDNCU2N2Tk9PL1cyaG1SckVyYWl6SEs0NkhjUmdjYmlqQVhpR3RjNkRmQTEwNWh5ZTl4SjB1ZmZ0NC9KVlhRYVRCeHdOQUxnak1wUk5oNTN2RkE1bmJzQm5RZUJyZFpLYkNMbmFrSi81ZkRWVzMyUTEyZEVBZ0djMlFITmYyUDZLeUNHSzhCNDdyVFFtSlI0VmNMRTVWM0w2NnJDK3paSE9CcUFNVk9jUTlDK0tITDcrRFd3WDNydXhvVVpQRW1KTlgydjRCbTVueGVnYVBlUnNBTUJQNmpPc3VXT1NsUDB5YkJmZXU3RzZWbGV1bVgwTDVOL0c3U3RrSVhqV0NTblowUUNBZThWTFlDUU5YdXpUaE9zRHE3eDJqczVycHE0MDVpQy9yN0Rqb2JXQ1lvNENBRDdkQ2Z5eWg5UDhKbkpGV1F2cjNMcHBJY1l2dEVleWJFVDM2NWc5N0d3QWprSlY4c0JsUzBDcy9Nc3oxU3JsMEx0M3Y1WXplSmxoYzJWakdxSnR0NGJzYkFCMlFWVWkyV05HTmZqeXJTVGRCVCtKL1QxR3JyTGRTWVArUjdZRHVxc3hEZ2RnSFRqL3h2NVBQWUl2NlZvNnIzLzdmcS9DZlkyVjE4bkdWVkxUOUZHSEEvQTlSK2dET3VsM0QyWjRzL0UzYXZwWGZPK0JNcFBTVFBoZjFoeDUxcElkRGdCMExoaXdnT2VXYXJFK0syUjArVFZiZW5YYUY2V1pyNi82dkhUWmxOWnJXUi9yZEFEQWJ6dHNzK2JKRFpRYWh4bytCUGVHTlZLVHR1Z1psZytDcUpmWHlHYVZVUWkzSDNUYzZRQ0FSeTA4SzVzWE1udTRsTjNDaGMvcmF1WnJoRFlldTA4V29hNTRHN1ZscHdQdzIyUkFhd1RjMWVUSm9QN2hNbkoxeVd1VnNYLzl4Zkd5SU8yZmpHcXo0d0d3dnk1di9YcFl4enFWU3R6bmtZSWlvbVBiOUJvKzVZZmZqdHE2eXdTQU5VcE1EWkNPcmlBQTNDMTZBaEFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQklGNHJ5Q0crbHIyeWd1ZVNRM3l0dWJZQ1lCdzV4TmNhWnlzQUJwQkRmSzBCdGdLZ0F6bkUxK3BnS3dBcWtFTjhyUXEyQW9CN3MzT1NTZjFsTC84YjJlaU9aRWFqYlFaQVRYS0piMVhUWmdCSXE4Z252dFFxdS9sZnFwcEJYdkdkTXFyYURnRG9CQmlTVlpwcFAvOUxoWTZUWDN5bDQ0VnNDSUJVUFpFODR4c2xWcGRzcWZia0d0K292V1JUZFU4bDUxaXYxTzZTYlJVYlIvNnhXbkd4a28wVnRaRThaSzAyUmtuMlZzdTk1Q1RydExlbFpIdDVPaTFMSms5Wm9lUmxuVHhTUUNpc3pkVGx1ODVsa3N0RUtmUGNydVZUMjRSWjRhdi9Cd1JOZFFpeWFibHhBQUFBQUVsRlRrU3VRbUNDXCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FNQUFBRERwaVRJQUFBQUEzTkNTVlFJQ0FqYjRVL2dBQUFBQ1hCSVdYTUFBQXplQUFBTTNnRVRVQkI2QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUIzZDNjdWFXNXJjMk5oY0dVdWIzSm5tKzQ4R2dBQUF3QlFURlJGLy8vL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUN5TzM0UUFBQVA5MFVrNVRBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2TURFeU16UTFOamM0T1RvN1BEMCtQMEJCUWtORVJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVltWnFibkoyZW42Q2hvcU9rcGFhbnFLbXFxNnl0cnErd3NiS3p0TFcydDdpNXVydTh2YjYvd01IQ3c4VEZ4c2ZJeWNyTHpNM096OURSMHRQVTFkYlgyTm5hMjl6ZDN0L2c0ZUxqNU9YbTUranA2dXZzN2U3djhQSHk4L1QxOXZmNCtmcjcvUDMrNndqWk5RQUFGbjlKUkVGVWVOcnRuUWQ0VkZVV3grK2toeVFtS0JCU0tMTFVBQ2tRbEJZSmhFQUFON0RDZ25SRUlBRkVta0lFcE9xQ0lFVkVPaXVLTE5JRlNhalNWWXBDa0dwUVFicWhoRUNvSVptRkJERTQ1ODY4bWN5OHZNejUvNzV2djVWNzNyd3A5emZuM0hmZW14Y0hZUU84MnM1TlNrN04xck1qN2VEQ0JxSnc0V0QxUFRwMlRyeTh0R2V6a09JNndRNmYwSzdiRDBmeUZpRDJwOCtidXdyR1ZOdlNoN0VBWlhldENSTE1jZnprUTdZQ05OaGZYd0F4ZUFoVEFlSTJGOFBzUDJKQ081WUNkSmp0akxuUFFmZFpCRU1CYXM3SHpQK0o2NXJLN0FRb3Nkb2RFLytFb3V0OXVRa3dzUlNtUGUveDBEb1BYZ0tFZE1ha1AwWDRsNDZzQkpqb2dEbC9tcGRuY0JMZ2hTYVk4YjhUUDVTUkFLOWd2ZzBaL3lvZkFWcGl1b2wyd01LWHVBaFFzVEttbTJvSGZGV0ZpUUMxTU5sME95Q3BKQThCL0RIWGhiUWRBQUZzVE0ybGpod0U4TU5NeTJqeENRY0J2S25EWUQ4ZVZETHgyY1FsTUJDQXV2NHYvUklQVWsxOU9QOXB6NkFQQUl5MUF4cEFBTmE0YUxnZEFBSFV3R2Q5U1FqQW1qS0pIaENBTlRXV09VSUExalNmQ1FGNDArc2RDTUNiOXp0QUFON3RnRThqSVFEdmRzRHFJQWpBdXgyUTVBY0JlTGNEMW5sQ0FPYnRBQ2NJd0pwbU15RUFiM29PZ3dDOGVhOGpCT0RkRHZodlF3akF1eDJ3cWlvRVFEc0FBakNtZEtJbkJHQk4ySEluQ01DYW1Ga1FnRGM5aGtNQTV1MkFUaENBTndzYVFRQzBBeUFBWTd6WCswTUExcFJLOUlJQXJBblZRRHNBQWhRa1RXZERBTjY4UGdJQzhHWmNad2pBdkIwUUJRRlk0N3l5R2dUZzNRNUk4b2NBdk5zQlNWNFFnRFVoSzV3Z0FHdWF6SUVBdk9rK0VnTHdaa3dYQ01DYitWRVFnSGM3WUZWMUNNQ2FaNUlDSUFCckFndm02Z0FJb0oxMndFb25DTUNhNkxrUWdEZXZqWUlBdkJuZEZRTHdabDVqQ01DN0hiQXlHQUx3Ymdja0JrQUEzdTJBcEdjZ0FHdUNWemhEQUxRRElBQmp1bzJHQUx3WjlSb0U0TTJjYUFqQXV4MndJaGdDOEc0SEpBVkNBTllFcU5VT2dBQWFwZnBLWndqQW1zYnpJQUJ2dW82QkFMd1oyUjBDTUc4SE5JRUFySEZhRVFJQldPT1ZWQW9Dc01ZL3lSc0NzS2FhcmRzQkVFRGpSTTJIQUx6cE1oWUM4T2JkMXlFQWIyWTNoUUM4MndITFF5RUE3M1pBWWlrSWdIWUFCT0RjRGxqbERBRlkwMmdCQk9CTjUzRVFnRGNqZWtBQTNzeUtnUURNMndGaEVJQTFub21sSVFCci9HelFEb0FBaFltcXExMGdBR3NhTG9BQXZPbjBIZ1RnemZDZUVJQTNNNXRCQU43dGdHVmhFQUR0QUFqQXVSMnczZ2NDc0NiSWl1MEFDRkFZaWZ5dkRnS3dwdU1iRUlBM1k0dEJBTmI0dkFjQmVOUHpXUWpBR29mcUVJQTMxU0NBUnRBWHpOTldoUUFhSWYxcWdUeXRQd1RRQ2o4V3lMTzZRUURlQXVBd1VEUHNnUUM4K1hvN0JGQ0RLZGUxU1FmOWF4a1FRQVdLZUdzVEYzRjZFQVRnemJ4L1g0RUFhckNsbWRZNGwvdkNWbFJkRFFGVTRQd0dyWEhyOFN0TGZhVlNoOG5iZjdZUkY0alBRczlSQUMyVHN1U3RocFZ0eEdEaStYUVFBREFWSURpU29INXVqQXBGVnM0SmxTVmp1UjNWY0NvVURnRzB5Y1J0Qk90eVkxUm9XMEpPcUJzWks1a1RtMCtGSHQrbU9ldzBSVWNJd0FYWE1oUmVFQUJBQUFBQkFBUUFFQUJBQUFBQlZDSWpuU0kzUm9adTU0VHVrckhzbk5oTktuUVRBbWlUTmo0RVpYSmpWTWluVDA1b0FoazdreE9Mb0VJUnViczhUcDRHVElRQVhFZ25Ud09laFFBQUFnQUlBQ0NBZXJTN3BEWEtRd0ExY2ZPOW5hd2h6dm42T2tJQWRWa1dveUZHb0FTb3lmejJEN253cFlhSWVQU0sydStBQU9yd3c2UFB2RWc3RFZFelI0TlRFQUJBQUFBQkFBUUFFQUJBQUFBQkFBUUFFQUJBQUFBQkFBUUFFQUJBQUFBQkFBUUFFQUJBQURXNWhXbG1MY0FteitKejlaaHB2Z0pNRjFmaUluL0dWTE1WSU92aC8zYUd2SmVKeWVhOENMejNibzI5bUczV1J3Rkg2cjZaZ2ZubWZCaVkvWEZRSWlhY2RSL2c3TXV2cG1MS0dRc2d4TklxbjJMT09Rc2dybldQK2dXenpsZ0FJYllHZi9BQTg4NVlBSEVub2RZUG1IakdBZ2lSWEh2d2JVdzlZd0ZFMXBTcUd6SDNqQVVRNG5STTV5dVlmY0g1ZW9BdnFueUI2V2Q5UWNpVnprMVBRUURXVndSdHFqWWxDd0p3NXZiZ0Y1TWhBR3QrckpWd0J3Snc1c0VIMWIrQkFLejV0WEgzYXhDQU5aOVcrUklDc0NhMS9jdG5JQUJyRXF0T3o0WUFuTW5vWC9jd0JHRE4zcG9qN2tFQXptUytIN3dUQXJBbUpiTFhkUWpBR2YyOG9KVVFnRFVYMjdRNkR3RllzeVpvRmdSZ3pZMCtteUVBYjlJaEFHZWNocndDQVJoVFk5OEhEaENBTFVVbTdRdkRVUUJmb2crLzVTZ2dBRmVlKzJ4VE9XWnZHUUxrb2NQeEx1emVNd1I0UXBta3hjVUZCT0NLUS8ranpWaStiMHg5RHRXL24rWWhJQUJYM043LzhRV3VtUSt6TDBTRFE4T2NCUVRnaXMvY2JSVVpyMzNZejMvcll6MTFBZ0p3SmVDckZYNjhqMzVZdjN0ZDcyTXR1Ui8rY243elZYYk5mRVpBQUs2NGpFeXVoeVV3WHdIcUhCempndmxuSzREWGpOMUJtSDIrQXZ6eldGOGNBUE1Wd0hmcDJrQk1QVjhCdWg5dmk0bm5LMEQ1clF1S1l0N1pDdUNVY0xnaFpwMnZBT0UvakhmRHBMTVZ3R1B5bmhCTU9WOEJtaDRaNUlnWlp5dEFzVVVieW1LKytRclE2WGduekRaZkFjcHVXRlFNazgxVWdQYkNjZUNScHBocXRnSjBXWGxpaW0wdStkWkRnRUxCSytWdHRHTWRCQUFRQUVBQUFBRUFCQUFRQUVBQUFBRUFCQUFRQUVBQUFBRUFCQUFRQUVBQUFBRUFCQUFRd0dJQ1F4OXk5NUNHT1BQb0ZZVStDd0hVWWNUQmg1UU0xUkNySHIyaWc3RVFRRVdpcG1tSU9KUUExUW52cnlGYVFRQ1ZXVkpVYTV5RUFHcHkvN3JXeUlZQUFBSUFDS0FtWVFNb2N2L2VUeHNxMURPM2owQStMUGR1Z2ZYSVdKSGM1L1AySWZDQUFBVkdnNmtVQVRteE42alF1SnhRZWZKaHVYOHA1SjlrN1BHTmhIOVBJMWdNQVFBRUFCQUFRQUFBQVFBRUFCQUFRQUExT0xlRElpTW5sa3lGdnNzSlhTY2ZkaWtuOWhzWnV3OEJOTW1LU0lwZmNtSURxTkFydVc2UUQ5dVFFNXRMeHE3bFBsOUZQNEp1RUlBTnFaY0lya01BQUFFQUJGQVZ6N0phd3hrQ3FFbnJVMXFqSEFRQUVBQkFBQlVZNHFkTmxrSUFkYmh4U1p2Y2dRQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQVVGc0E3NUxBU25nWFNnRm1Yd1JXWWpaS0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FOQ0NBTGZTVFpGaDNkMWxLOXZSamFPN05xOWQ5dG5zYWVOSER1blhzMVByRm8zcWhsVXVHMWdwdkdGc3gvaTN4MDZkdi9KNEZnU3dBczE5VEZIYW5BODYyT1R1RGh0OWZPYnBuVitNNzkwaTJNZTcya3ROV3JicjFudmdzSEdUWnN4ZnZDcHAyL2ZKUC85K1B1WEg3Vi8vYjg2SG93YjFiQlBrV2JQN3RLMVhJVUQrdUc1eWk3VHZsTzh0K1RmVFgyMXA1TE8yZFFMY25tL1FlZGpzcE1QcENwN3M3b0ZQQjBZVkMyZzI5UklFc0tVQUlsSDUzbGFKZkFpd1lmbWVDOWxtdjRFTEd3WUZ4aXkrRFFFc0pFMDdBbGhNMXNaT3ZsMDJaME1BU3o2N202YTNPWEpHNmQ1U2pwcmVKdDBtN3lOalVaTlM4L1JXMkZGN2QrUHNzek1CRkUxSG9oVVRnQzB5d09OYTBDdmlXTDUzc3Y3THU4YlIyNWtBYWZZamdCRGZobzY0bTc4OTNPbkxyUVJjVjdMUjFqdktkbloyZjhFS0lETGZyNzRsWHpzWWV3b0NVTitMYmRaTEFEWVZRSWhmb3Z2bkkwa2ZuY3h1RWFpb0JDaXRBUm9RUUlqcGZTMDJRQitYS1pBQkxCY2dkYmNXQkJDekxEWmd3YmNDQXBEOGZrVEpWbXV5TlNHQXhRWmNIc3F3RDZDc0JDaExBWW9xZ0FvQ1dHckE0R3NDR1NBZkFxUnYxWW9BWXRaWUN4NjBkWkdBQURLK1U1QXAxdDNYakFEaVA4Zk5mc2k5M29LakFBcExRTlpHYTFVQWNVdU4wL2ozNDh3dUFoTlNCREpBZm1yQTdRMEtkM1ZUamZlMWE0R1pEMGdaTHlDQUVUYVlYT0Z2VUhwR1ZwVWFJSWFrbXJkOTczczhCVkJZQXNTVnZWYXFBQllMNEZteVFsaEVzell0NmxVTGRGWHl4Z2FadGZjdnRncGtnSHpWZ1B2cmJDaEF2OW03cnQyOG1ISmdaOUx5ZGJzUG44MDRNT2YxZjVoNnpHSnp1anBwZ3dWUEFlN2R0WllBVzlOdEtNRDB1UHBGOC96VEthelgvSk5iMmpnYmY5RG5aanpCMEZTbUFxUXAzakw1dkpVcWdKWFdBTHFvNWIrM05ickZ5Z2VLZC9idGZNRlVnT3ZLTnpXZUFyTFhxQ3pBUS95V3JpaGhKSHhWOFpuaHpIZzlCSGpxMjFYVmJBRjJHK2JRWWtFMlB3cG9mYkNja2VoU3BidVpZbmlxdzdVQzV4TGczcFVZL09hZW1SWGc1VHEyUHd6MDMrSXZEMzZsckRVcFRoT040L2krbkRPQXh3dkU0SzN0WmdyUTJGR0ZQc0R6bTl6bGIyNmpzbjMwTmV4Z3VBMjV4VnFBbWc1bTFvRDlad3RJQUZIMWJYbHN1YUk5ckVneUhPdmhmNXVIQUhRSjhQQ3NZcVlBUkFLbzdxdUtBR0pvb0RTazZDcUdHLzBOeDF3VEJPOE1JS2dhOE5zSnN3U0lGazZxQ0ZEa1hXbm9ySkxIRDc5Z09QWjZnTGpOVzRCYTVoMElIaVhPcERVVzZtUUE4Uy9wWjNWRlFadnJoNW1HWXk0Smdrc0dTRE1qQXhnUmdFZ0FMaStwSlVEeEY2V2hjeVlmbkJWSG5PWHFYa3B3endEQjFQbVczVGZNRUtDT2gxb0NpQmI1cUFFZkh6QWNjMzVIQ041cmdDTENPWXdZenR3azJjdHZ5ZFFTUUtVMWdCQVZMUmZnM0VoaXNGdHB3U1lEeUVvQXZRaVFuZkJiTGFnbGdDd0QzTFIyMzlYWGNnSGVKSzVPY1I0bXVHZUFod0tRaTREMWtxbGJhVGprRXk0VklOdmFuMjFKYWNURUNTenhOYVZ1bDdKQ3NGOEQwQUtrMHIvOXU3akhjS3lobzFRQXEvOUF2S2cwWXVMS2tWdjlpRUduWVlKUEJyaVpKUk9nZ28veTQ0RFZlbklKSUZzRFdIMFJjTTJDNHBERDZOK0p3YzY1NTVkNFpBREoyZUNIQXVqQ2xRdXdpbDRDU0RPQXRRWDRReG9wWWZSeFAwMGpCaDJIQzBZWlFDNEFYUU1PWEtibWM0ZmhXSmtLS2dwd3liSU1vSStqcmhqcG1IdXRXZFk5RmdLa21TbUFmanN4dVBVQm5RQlVFK0M4WlFMTTJVTWxnQkZDRXhXZzRETUFlUndvcUd0bnFaT3UwVUxGTmNBV2l3VDQ0eDFxdEgwRkNKQXJnSDhBRmRtbVRBQmRsSW9aSU9NYmk5WUFBNmszN3pCQ2FHTUpVUEFsZ0s0QlB4dWVPanRKM0ZVbHRKaUtBbXlRbG10dkk0ZUJtNWRRbzY5V0VzZ0Fqd1dnYThBMlJSV2dzVkJSZ00ra2tWcnlCOTN0STR3bEFDNFo0THE1R1VDaEFORkN2VFhBSnZrdlVwcktIL1grTDlSb3B5Y1h3dHpsSVlDeEVoQ3VVN1FLdkU4c0MxenJxNWNCTXZzTEN3UTRNWkVhOVpra05FUEJad0R2eWxUbzFOK2JaOThTeWJLQnUzb0NUSkJmcCtSZlhScUtKeThZSGw4Q0FqekNKVGQzUnlxcUFWUUZpQldxQ1RCdnBEeldSQnBadUlNYWZhR1g0Q1pBbWp3QkNORlFVU2VBRXFCbDd2ODUyMTZBLzhVTEN5ckFWZkpLWXNmWkRnSVpJSThBa1RvRkdlRFNJY05OYWp5K1R0Zk4xZ0prVGVocTVMWUZEdEd5eU50WHFORytZUUlDNUJXZ2VEVXFlTzdwNWZNbXZUUUIyRnlBWTNYZk1mYjd6NWpuSklHZEM2bFJ2M0dDblFDU2U4VS9Ga0JSRFRCU0FZUzdUUVg0OWEwYXhtL2RQa1l5ZnAvK0tlalVaL2dKa0s0M0trQWowNnRBL1diRERjcUVtTWdBRCs3ays1WGZYeE5UWWJMeEUzWXR3eVdCU2VRZHhLTGJDWDRDR0RzS2ZIUTA1MkJTQU9yOGNLd3dJWUQ1S2VEajlTZi92SXR2MXBYalN3YlVlYWJWUmhOWEZ1cGtDZURYOTZoUjEwOEVRd0hTakF2Z1E2Nksvamltc0FKWVVZQTNtMWQwOS9ZdFV5bTRuSTl6OGFBT0grMHhmYmErVFlnazBJZHM4aVZVRU1nQWZ4ZEFzZ2pZWmx3QW53YldGK0RSTi85RzZwbVV3NmZTRlY1UzdEQmFFdmlTdkxhOWZJSkFCbEFxUUo1VjRNM3ZEY1BObjV3Q2NMZW1BR2JTVFhKM2l2U0I1UEFNTjRFTVlDaEFCSGs2WjhkZlg4S3RtVVlxZ0hVemdIbUV6NUFFM2lHdkgydmJWRUNBdnlqeTUzOTRrUXZwcXovOTFRVXdqTHJFUFBsUFI2ZUNFaUJnalNUNzdKMURqWHBORlR3Rk1GVUNKRFhnZS9xSUlKZklQSWZUYmdVa1FKRzFraHZIUElnak80ZmovQVV5QUNrQTNRbDRjakhsSDhlTlZZQUNFMEQzZVExSjVLTkQxR2pvR3dJQzBBTFVjekVxd0haaHBBc2diTjBLbERLdXRTUndaaFRweTJ4SHJnS1lMQUh1dGFsNFNwcGNnSnFCQlowQkhDWU1sNFg2a1JkNjlYcFJJQU5JQktBWEFmcDljZ0h5Vm9BQ0VjQnp0ZlF2LzN5MWxob3RQbDVBQVBNRStMTUdYRHFoUFFIS2ZoY3JDMlgwSTRjbkZlVXJnTWtTSUdxN0d4R0FTQUJsZ3d0VUFGMmZRL0xMd0VhU040eDVxYXRBQnBBTDRGcVgybUNmWG5ZUStQVFhUeVpBdW8zZVQ5RHVUK1RuZEE5T3AwYWRad20rQXNqdUZaOUhBTG9HWER1cGFBbWc4bEZBOFlrSDY4cWoyWEhrVCtFSEJURVdRSGF2K0x3Q1JNa1hBUmNNN3cxWDlDVkZHY0FXQXZoK2VPcHRGeVB4V2VUTkxaeWI3S1dSL2lINkkzbTNPbCs0QmJpdVFJQmE1QkpwcnlRQnRIQXFJQUZDcHA4YTdHRnNnNHZEeU9ITXFObzBmV1E3NnBGM3EvbDJLWUJEM25sempKSm1BRUtBVmtLUkFQZnVXL2ZMUHpBNXVaKzc4VzBHcVBPbnF1eWlCRHo5VFNJdnJ2L3BEcmtHZEl0NSt0OUZoTTFUUUVEclNidk9UUWt4dFZuS01nRUJsR1lBejZmK1JaNG9mZkNERU9jTmYxM1gyRU5OQWR6cURscDI1dHlLdCtvN21kNzJqb0FBRmdwUXVwSmtFV0R5R01DS0FzUjNhQkVSWExhbzQ4UDBGRmd0SXJaci85RWZmYjcveHJlVC8xMUsyQ3NGV0FLZUZvQk9BWHVvQ3VEdzl5YWMxUzRKbXJWNDNjNURwNjQ5dUhVLzQremhuV3NXVGh2MVp1ZHdaMkhQYUNZRDBJdUFQVlFHcUZQQ1Zobmd5UTd0ZTlLMUtVQWtkWFI5L3Z6WlgwMGRBNml5Q0lRQU5pOEJIdlhJRktCZ0NRQUI3Q0lEU0JZQmhnSUVWWUFBZGlrQXVRaVlzOFIwQllBQWRsRUNSQ2gxMzR5YmR4UUk0QTRCN0NFRDZLSVY3UzBnSEJuQVBnVVF5bjQxRWF1REFJVkxBTW05NGcwRmlOWXAyVjByQVFFS2x3Q3lzOEVHQXBRTVZyQTM3NFlRd0Y0Rk1ISzdyYjlvN2d3QkNwa0FhWW9GVUxJSUlDcUFjSGFDQUhhUkFlb1hNYmt6bDJiVXFEc0VzQXNCWEJ1WTNGa2pMMnBVSnM2dExKVS96a3JKWmlLOTJPdnp2RnZGMjJVSklLNnRNNzBJYUNYTUVVRGNWRmtBdHhBektTL2JVOFc4Vy9reXlRQ21Gd0c2V1BNRVFBMG9YQUpVQ1RTeHJ4ZjhJSUM5bEFBMzZzZlNwbElBWFFFZ1FHSE1BSjdVWUJQTEJNRFpJSHNSb0xIeDExT3BNaktBM1pRQVVvQm53eTFKQUJEQWJqS0FpVVZBU3doZzd3SVlYUVNVckcydUFPbVk0UUlYUUhLdmVJa0F0WTNkVEQxV2h3eFErQVNRM1hXWEZzQ3BrUVZMQUFpZ1pRSE02QU9aV0FSNFNlWEFZYUNHQlVnelR3QWppNEFZVjJRQSs4OEE1Y3FiWHdFZ2dCMEpJRThCemkwZ0FJTVNJRjhFUkhwREFBNFpvS0d6MlJVQUF0aVRBRjUxNkhGZHJQdzVwRWNCR1hwTWNXRXJBYkpGUU0xQUN6SkFkZ2FtV0tzWlFIcTN0YVptVndDNUFLZ0JoYThFaUJyUFFRRFdKWUQrWTh6bHEwSUFKaG1BWGdTMEZCQ0Fpd0F4cnhKME12WWMwcDhHUVFETmxnQkgrWjlROUZ0Q0VHcjBTWEEyU0xNQzZBY2trQXkzNnJNTVNaQkFYVVRZWnJRTTlULy8wcklYN204dkF1akcwNHl4NnJPTWtEekxlS3FyMUhxVURQVUZlRjcyd2t2Wml3Q0EreG9BUUFBQUFRQUVBQkFBUUFBQUFRQUVBQkFBUUFCZ053TGcya3ZWMFd0S0FQd01XM1hTTlNYQVJVeUkybHpVbEFBWE1DRnFjd0VDUUFEdENMQWZFNkkyK3pVbFFNb0p6SWk2bkVqUlZoOWdEYVpFWGF6MWdWdExnRldZRW5WWnBURUI5bTNHbktqSjVuMGFFMEFNUlROUVJmUkRoZFlFT0xnWTA2SWVpdzlxVGdBeEJMMEE5WG9BUTRUMkJMalk2aTVtUmgzdXRycW9RUUhFL2g2WUduWG9ZY1crbXpXdkIxZ2NuNG5Kc1QyWjhkWmNibG4xZ3BBNTBWY3dQN2JtU3ZRY29WVUJ4STVhdXpGRHRtVjNyUjFDdXdLSTB4RXRqMkdTYk1leGxoR25oWllGRUdKdGNKZWtlNWdwVzNBdnFVdndXbXZ2MVBvWGhXWXRhbEc4M2J6MWh5NmpOV2cxOUpjUHJaL1hybmlMUmRiL1U3ai9COTJ2Rm94V0p6RmxBQUFBQUVsRlRrU3VRbUNDXCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FNQUFBRERwaVRJQUFBREFGQk1WRVVBQUFEL0FBRC9BQUQvQUFEL0FELy9NelAvS2lyK0pDVGZIeC9pSEJ6bEdSbm5GeTdwRlNyckV5ZnNKQ1R1SWlMdkh4L3dIaDd3SENyeEdpanlHU2J5R0NUbkZ5TG9JU0hwSHgvcUhpanJIU2ZzSENYc0d5VHRHaVB1R1NMdUdDRHZIeWZ2SGlid0hpWHdIU1RwSENQcUd5THFHaUhyR2lmckdTYnNIeVhzSGlUdEhTUHRIQ0x0SENIdUd5SHVHeVh2R2lYdkdpVHFHU1BySGlQckhTTHJIQ0hzSENYc0d5WHNHeVR0R2lQdEdpUHRHU0x1SFNMdUhTWHVIQ1h1SENUckd5UHJHeVByR3lMckdpTHNHaVhzSFNUc0hTVHRIQ1B0SENQdEd5THRHeUx0R3lYdUdpVHVHaVRySFNQckhTUHJIQ1BzSENMc0d5WHNHeVRzR3lUdEd5VHRHaVB0SFNQdEhDTHRIQ1h0SENUdUhDVHVHeVRyR3lQc0d5UHNHaUxzSFNYc0hDVHNIQ1RzSENUdEhDUHRHeVB0R3lQdEd5WHRHaVR0SFNUdUhDVHJIQ1BzSENQc0hDUHNHeVhzR3lUc0d5VHNHeVR0SFNQdEhDUHRIQ1B0SENYdEhDVHRHeVR1R3lUc0d5UHNHeVBzSFNQc0hDWHNIQ1RzSENUc0hDVHRHeVB0R3lQdEd5UHRHeVB0R3lUdEhDVHRIQ1RzSENQc0hDUHNHeVBzR3lQc0d5VHNHeVRyR3lUdEhDTHRIQ1B0SENQdEhDUHRHaVR0R3lUdEd5VHNHeUxzR3lQc0hDUHNIQ1BzSENUc0hDVHJHaVR0R3lMdEd5UHRHeVB0R3lQdEhDVHRIQ1R0SENUc0hDTHNHaVBzR2lQc0d5UHNHeVRyR3lUckhDVHRIQ1R0SENMdEhDUHRIQ1B0R2lUdEd5VHRHeVR0R3lUc0hDTHNIQ1BzSENQc0hDVHJIQ1RyR2lUckdpVHRHeUx0R3lQdEhDUHRIQ1R0SENUdEhDVHRIQ1RzR2lMc0dpTHNHeVByR3lUckhDVHJIQ1RySENUdEhDTHRIQ0x0R2lQdEdpVHRHaVR0R3lUdEhDVHNIQ0xzSENMckhDUHJIQ1RyR2lUckdpVHJHaVR0R3lMdEd5THRIQ1B0SENQdEhDVHRIQ1R0R2lUc0dpTHNHaUxyR3lMckd5UHJIQ1RySENUckhDVHRIQ0x0R2lMdEdpTHRHaVB0R2lUdEd5VHRIQ1RzSENMckhDTHJIQ0xyR2lQckdpVHJHaVRyR2lUdEd5THRIQ0x0SENMdEhDTHRIQ1R0R2lUdEdpVHNHaUxyR2lMckdpTHJIQ0xySENUckhDVHJIQ1R0SENUQ3pIRzlBQUFBLzNSU1RsTUFBUUlEQkFVR0J3Z0pDZ3NNRFE0UEVCRVNFeFFWRmhjWUdSb2JIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJrZElTVXBMVEUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNENCZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXV2w1aVptcHVjblo2Zm9LR2lvNlNscHFlb3FhcXJySzJ1cjdDeHNyTzB0YmEzdUxtNnU3eTl2ci9Bd2NMRHhNWEd4OGpKeXN2TXpjN1AwTkhTMDlUVjF0ZlkyZHJiM04zZTMrRGg0dVBrNWVibjZPbnE2K3p0N3UvdzhmTHo5UFgyOS9qNSt2djgvZjdyQ05rMUFBQVUvVWxFUVZSNDJ1M2RkNXdVWlo3SDhXZnl3QkNHSElhNFlFUUJBK2JFS2lpS2hEMHppTHFMaWlLNm91aUpCNElKNUZ3OFhWRUV4TUNLc0lxZ0lpaGhSUkJZRUJVVUVFSEpPUTdEREFPVDZtQjM3N2E2cTU2ZTZhcHVucWZyK1h6Lzd0ZFR2K2Y1dldlNkt3dEJDQ0dFRUVJSUlTY3U5WC9iOTlYUEZxeFl2L2VvRmFnVUxCdlNrTzVHVHNvRmcrWWRzSUtidzQvUVkzbHEzVHNseU0zL1o5NUlvdEd1U2U0NCthaGxRc1luMDJ4bjZnN1paSm1TZHhBUW50b2pDaXlEOHBjVVdtNVB6ZWNQV1dabFVpcGQvL2QzL3dNSExlUHlBUUwrTDZjdnNrek1SMm0wL25qU2h4NjF6TXpINlhSZmlCWXJMR016UFlQK1gzdkFNamd6TXcxdmY5TGdVc3Zvektwa2RQOHJmMnlabnJtVkRlNS8xZmtXbVpkbGJQOXJMS0g5eDdLZ2lxSDlyN09jNXY4akM2dVorZmUvc2tLclU3aDdhNkptUjBVRi9MMjZpWWQvdmlwblZUWlBmdXFtTTJzbThzR3lSdUZUeXQwZ21ldlNiUE1BL0NWUzg0dW05enMxOGFmb0FMQzF5YStTQ1g5YjA3VCtENDNRL3RXUDFBM0VISjBBUk9OMWtqbC9YOHVzL3ZlUXQzOSsrNkJNMGdXQXlQbFpNdTBWZFV6cWYwdnB5ZjlGVndWbmxtNEFSSU9mSkROZldkZWMvcWZLRGdEcy8zMlFwdWtLUU5SYkpmdm1xMjhNZ0dka2wwZ0Vhd25jQVlpNlAwcW12OGFVR3dZdUxuR2QvNUUvQkd5ZUVnQ2l0dXdFK0xwR1pod0JjUDhsdkxtZE1BU0FxUFdkUk1DdlRVd0E4SmpyM0pjRTcxZXdGSUNvc1V3aVlFT3o0UGUvWHA3cnpsOVZZUkFBa2IxVUltRGpid0lQNEUyM2VjOEo0bG54Q0FCRTljV3lJK0F0QTk3L2M5d3VBZnA3SUsrTGlRUkFWRjBvRWJEMTVHQURtT2t5NS9YQlBBWVNFWUNvSXJzYVp2dXBRZTcvbVc2SGZ3STY0OGdBUk5ZOGlZQ2Rwd2NZd0RzdUUrNGlqQVFnS3MrVkNOaDlabUQ3bjFQa25PNW9ZU2dBVVdtV1JNQ2VOa0Zka3hFdUIwQXJHd3RBWkg0dUViRHZyR0F1U1liTFhTQVhDWE1CaUl6UFpLZkZ6ZzNra25SM3p2UTlZVElBa2Y2SlJFRHUrVUZja3I4NjVsblF5R3dBSW0ycVJNREJDNE8zSWxVUE82WTVSQmdPUUtSOUtCR1FkMG5nVnFTblk1S0hhaGdQUUtST2xnakl2enhvS3pMZE1jZVhCUUJFeWtTSmdJTGZCbXRCMGh4UGdTcHBCb0RqQWlaSUJCenVFS2dGdWNBeHdha0NBTWVUL0xic3ZxaXJnN1Fneml0QmJnVEF2d1NNa3dnNGNtMkFGc1J4MENPdkVnRCtsYVEzSkFLT1hoK1k5VWpPRFovY0JBR0EveGZ3bXV3MnVXNUJXWTh6SEhPN0dRQzJ2Q0lSVUh4RFFOYmpCc2ZVNmdQQW5wZGtBZ0x5aC9KRStNVFdDZ0NFNUVXSmdKTGJBckVlNDhQbk5SWUFZUmt1RVZEYUt3anJzU0I4V3ZjQklEelB5Z1RjRllEMTJCaytxNnNBNElqc3VRbGx2Uk4rT1RJY2syb0tBR2NHeXdUY20rakxVY2R4a0NzWkFDNFpLQlBRTjhHWG83bmpiZ0FCQUxjOEpudDR4a09KdlJ5T093SitBSUI3K3NzRTlFL281YmpROFRRWUFFanlrRXpBWTRtOEhCMGREOG9HZ0N4OXl5UUNCaWJ3Y25RTm44dzBBRWpUUnlaZ2NPSXVSemNBVkJ5QXVGc200R2tBR0FGQTNDVjdrOFp6QURBQ2dPZ2xFL0FDQUl3QUlIcVVTQVQ4Q1FCR0FCQzN5QVM4REFBakFJZ2JpeVVDUmlVQndBUUE0bmRGRWdHamt3QmdBZ0RSVmZaUzFYSEpBREFCZ09oOFJDTGdyV1FBbUFCQWRKSUptSkFDQU0yVEV3c0FvbU9oUk1ERUZBRG9uWHJoTTk3bGFaaXJEa3NFVEU0RmdOYkpEcC94QVcvanRDK1FDSmlTQmdDZFU4bHhmYi9ISDI2WHlkNndNeTBkQURySHNRL245ZVZ3bCtSSkJIeWFBUUNOc3oxOHltZDRIZW1pZ3hJQk16SUJvRzkrQ0oreTkxdTl6OCtWQ1BnaUV3RGF4dkZrOUVlOGo5WHVnRVRBbkVvQTBEV3ZoMC81WFIrRG5iMVBJdUJ2V1FEUU5JNHIvRmY2R2EzdFhvbUFyNm9BUU05MGNkemRrKzFudU5hN0pRSytyZ29BTGVPNEdjcnk5OENmVnJza0FoWlhBNENPU1hMc3ZMM21iOERUZGtnRUxNa0dnSTV4dkJKa3M4OEJUOWttRWJDc0JnQTBqUE1seVg0ZkFYN1NWb21BNzJvQlFMOWM0K2pUcTM2SGJMRlpJbUJGYlFCb2x5ekgxUndIZkIrMmFiNVJJdURIdWdEUUxyTWRiZkwvaXZTbTZ5VUNWdFVEZ0c1eDN1cS95di8xdkUxK2xRajRxUUVBdEQ4U1lIWHpQMnFqZFJJQlArY0FRTE00M3hMK1F3d3U1MjM0czBUQUw0MEJvUHQzZ0hWSERJYXR2MW9pWUgxVEFHaVZ1czU3ZTdiSDRzaDl2WlVTQVJ1YkEwQ3JmQkNuZXp2ci9DQVJzS2tGQUhUS2xTN1BmYjA0RmdQWFhpNFJzT1VrQU9nVWx6NzlHcE9UZHpXL2t3allkZ29BTkVvdmx4YTlINU9SYXl5VENOaHhHZ0QwU1pyYmdidUhZekowOWhLSmdGMnRBS0JQN25KN0JVU25tQXhkYlpGRXdPN1dBTkFtS1d2ZFhnc2JtOWZEVi8xYUltQnZXd0RvTy9OL2RPak1tSXhkWmI1RXdQNXpBS0JONXJwK1Q3ZUp5ZGhaWDBvRUhHZ0hBRjF5aHV1amZnN0U1SENBcUR4SElpRDNBZ0RvRXZkWEFSWGVFcFBCSzgyU0NNaTdHQUNhSkdPTiswdEFYb2pKUXo0eVowb0VITG9VQUpxa25lU0pmL01heGNUWGRJbUEvQ3NBb0VtZWxQMVU2eG1MMGRNL2xneGZjQ1VBOUVpeTdLZWE5VVhMR0F5Zk5sVXkrdUdPQU5BamRXU1hjMXRILzFUVC8vQ3BIMGhHTCt3RUFFMStCc2dlOTJaWkI1L3hmMDEvNmlUSjRFYzZBMENQM0ZBbUZXQWRIdTM3c0ZES2U3TC9NRjBCb0VjZXRTSmwyY00rTCtoTWVWY3ljdEh2QUtCSGhrVVVZSlY5UDZ5RG4rc0ZrOStTREZ6Y0hRQjY1TTlXZVNsZE5XblE3WmVlV2lmTHkxTkFrOGJLOWdaUEJvQVdTWHJaVXBOUEFhQkpubGNEb0t3NUFEVEpnNlZLQkR3QUFGM1NwVUFGZ0RFQTBDYXRmMUVBNENNQTZKUHNUMDg4Z0drQTBDbjlDZ0ZnTkFEUjZoc0FHQTFBcFBRdkFJQXdPazBtQWNEd1hMSUlBSWJuMm1VQU1EeFh6Z1NBNFRubHhUMEFNRHZwM2Q3UEI0RFpxZFI1MUhvQUdKN0d0NzY2TUE4QVppZXBXWWQ3bmgvL3lhSWZmdDZ3WmF1UDdBV0EyZWtHQUFBQUFBQUFBQUFBQUFBQUFBQUFBTlFFQUdvQ0FEVUJnSm9BUUUwQW9DWUFVQk1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBc05nQVlMRUJ3R0lEZ01VR0FJc05BQlliQUN3MkFBQUFBQUFBQUFBQUFBQUFBQUFBQU5BbkFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNvQ1FEVUJBQnFBZ0ExQVlDYUFFQk5BS0FtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdDeEFjQmlBNERGQmdDTERRQVdHd0FzTmdCWWJBQUFBQUFBQUFBQUFBQUFBQUFBQUFDZ1R3QWdBQ0FBSUlGWjdFNTlwSGs5dktibGZSSTI5LzYreHcwZHoycVVCb0R3VExkTVN1bkcyYVB1T1RzTkFLWUMrR2VPTEJoNmVUb0F6QVZ3UEFjbjNsQVpBQVlET0phOGNSY0R3R1FBeDdMcTdrd0FtSjNkZzZvQndPenNHMWdGQUdabis1MUpBREE3Uzg4RmdOa3BlYkVTQU16T3Vnc0FZSGFLbjB3R2dObjVXeDBBbUoxTlp3UEE3QlRlQkFDelU5WWZBSVpuSkFBTXorZ2tBSmlkOGNrQU1QeC9BQUFNenpBQUdKNytBREE3cFYwQllIYnl6d0tBMmRsWUV3Qm1aMFlTQU16T2Z3SEE3QlNmQndDenM3WXlBTXpPcXdBd08yVVhBY0RzckV3RGdObDVBZ0JtNTFCOUFKaWQ4UUF3L0t4UUd3QTRzNzkzcE56VGIrRElTVXZ6eWg5bXFHeUV1KzhmTVB6dGVUc3FYbER2S0JQRlhEOEdnRE5iS3pCdVVvdWViKzJLUEV6YmNvYW8zV240OXhVcktOcEpSelBaY3dIZ0NjRHhKRi8xZnJFUEFNZlRiT0E2eFFDbUE4QXpnR05wTXFiRUY0QmovMHF1VzZnVWdOVUtBRDRBQ05GNnFUOEF4M0x0R3BVQTNnS0FMd0FpZGJoZkFDSjlTSkU2QUVjYkFzQVhBQ0Y2RlBrRUlFUzc5Y29BV0lNQjRCT0E2RkxrRjRDb01Wc1pnTTBwQVBBSlFQVDBEVUNrdmFzS2dOVVpBSDRCaUJHK0FZaWtzYW9BZkFpQUNBQzZEQW5Ma3c5MFA4VnhRV1hxMHNnQVRyV1BNUGpSTzYrbzdYSlk0ZjJLQU9neXJ2eEVPZC9DYWdDUUEzQmR6VDF2WFJLK04xZ1NFVUEzNXdWWnIxem8yQmxZVUFFQVErSndSdUFPQUVRSjRGam1uaHk2b1RGUkFqaVdiN3VFRlZ0dmh4b0FNd0FRUFFBci8vcVFEVFV0amhxQVpjM01DYTIyWTVrU0FFZXlBQkE5QUt2NG1wQXRmZUFCZ0xYbnN0Qnl4eW9CWUhVSGdBY0FWbTR6K3djN2V3RmdIUW5kQjZ1MVh3bUE4UUR3QXNDYWFmOWdScjRYQU5hUlMwUHFIYUFFd0dZQWVBSmdYV0gvNUF4UEFLemRqZXlEVk42akFvRFZBZ0NlQUlRY1FobmtEWUExTitTb3d0TktBUFFHZ0NjQWhmWm5jSGYzQ01DNjA3NjlScVVxQUx3TEFFOEFyUGEyVDdieENtQjd5S1BjNTZnQThCTUF2QUhvWnorTTR4V0E5YUI5Zy9lcEFGQmFGUUNlQUx4ZysyU21ad0JyN1J0c3BnSkE2TTlaQUZRWXdDajc2VHpQQUt5UUYveHRWQUhnUVFCNEF2Q0svWXlnZHdEL2JkL2lKQlVBWGdPQUp3QlAyVDZaN1IzQWN2c1dIMWNCNEVzQWVBTFEwL2JKRnQ0QmxOcGY3ZGRWQllBZEFQQUV3SDVPdUwxM0FKYjlqVTZ0VlFBb3l3Q0FCd0MvMkQvWnh3ZUEyKzBuaEZRQWlQZkI0SUFDZURMU0o2TUI4Si8ydllsU0ZRQ3VBRUQwQVBiWHNIOXlyUThBSSt3REhWUUI0RFlBUkEvZ0h2c0hXMW8rQUlROHNHdTNDZ0FQQUNCcUFIOE4yZEtUZmdDOGJoOXBwd29BZ3dBUUxZRFBRODdocEt6M0EyQjBoUUdjM0RsUy91Z1p3RWdBUkFlZ1pIaHF5SVp1dFU0TWdNZzUxek9Bc1FDSUJrRFI1RE5DdDVPK0xzRUJ2QU9BQ2dMSTN6aC8xRzJPcCswUHNoSWN3UHNBY0FkUXNiUXJTblFBVXdEZ0EwRDl6VmFpQS9nUUFONEIxRmh1SlR5QWlRRHdES0MrYS84VERNRGJBUEFLNEx3dFZnQUF2QUVBYndEU0Jza2U4SlJZQUVZQXdCT0F6cXVsdzhUblVQRGxFUjhOTWMwemdDY0FFRDJBak51V1JSakc4OG1nUFpFQTlJblR1WUErQUlnU1FOWHJ4KzZQT0V3MEFJYmJSODVYQWVCR0FMZ0RTRTROUzJaMmszTzZQRHp1dStMeWhva0d3R1AyMDBxV0NnQVhBY0RMTllHeEFtQy9IS08rRWdDTkFhQVN3SGtSZjhtZkFBQWxLUUJRQ0tERS9nN0htMVVBMkNnQW9CREF0L1l0UHEwQ3dFd0FxQVFRc2hQd21Rb0FMd0ZBSllEejdic2QrMVVBdUFjQUNnSDhWTTdSM0JNQTREd0FLQVJ3djMyRFExUUFLTW9BZ0RvQVd6THRHMXl0QXNDM0FnRHFBTmh2TVJidExCVUFYZ09BT2dCZmhCVDhqaElBTndOQUdZQ2REZXliYTF5a0JFQTlBS2dDY0RqMExNd1lTd1dBVlFJQWlnQVVYaDFTYnVzU0pRQkdBa0FSZ0YwaHp3Y1R5ZTV2RVkwN2dQWUFVQVBnNHdhaDFUNXFLUUdRbXdvQUZRQ1dkZ29yOXZ3aU5RQW1DZ0NjY0FDclI3WUxyelZubTZVR1FCY0F4QnRBeUd2akJ2WHZkVmxOWjZuWkt5dzFBUGFuQXlEZUFDcVE2b3N0UlFER0NnQ29COURnZTBzVmdBc0FvQjdBMlpzdFZRQldDQUFvQjNCL29hVU13UDBBVUEzZ043TWlqeFJYQUxsVkFhQVdRUGF3UWtzaGdCY0VBRlFDeUhrK3Q5eVI0Z25nYUVNQXFBTlF2Y2VueFJVWUtaNEF4Z2tBS0FHUTNMenJjMThYVjJ5a09BSW9hZ29BUndyc2Q5eXY4YnkySDhsdTRuOXp3dFN2MWhaRzgxZHF5OWV4QmZDNkFJREpLY2dCZ05FWktnQmdjclpsQWNEbzlCUUFNRG16QlFCTXp1RVdBREE2QXdRQVRNNVh5UUF3T1FlYkNnQ1luRnNFQUV6T253VUFUTTdpZEFDWW5DMzFCUUFNVG41YkFRQ0RVM3k5QUlEQktidGRBTURrOUJNQU1EbC9GQUF3K2YvL2ZRSUFCcWVvbHdDQXdjbnJJQUJnY0RhMUZRQXdPRi9XRVFBdytPZmZ5RlFCQUhPejh4b2hBR0J1cHRVVEFEQTN1MjRTQWdER3B1UzFXZ0lBNW1idW1VSUF3TmdzdWxJSUFCaWJPZGNJQVFCVFV6Qyt0UkFBTVBXNHo4TGVWWVVBZ0puZFB6cTNiNDdRS1FBNGdmLzRGNDY0dXJMUUxBQTRBVG04YWNsN1EzcTBTaEVhUmhtQTVtMmxlZGh4c3F4dHdxYk5hYzBiVmhFYVJ4bUFCS3Nwc0FFQUFBQUFBQUFBQUFBQUFBQUFBQUFBYWdJQU5RR0FtZ0JBVFFDZ0pnQW9TRmNBS0FRd1ZYMU4xNFhYTkowK3hTMDNoUy8yWlBVMWRRaXZhUlo5aWx0dUQxL3NDZXBydWl5OHBxWDBLVzdwRjc3WTQ5VFgxRHE4cGwvb1U5enlWUGhpdjZpK3BoekhKVlgwS1c0WkU3N1lBOVhYbE9tNHFLNE9qWXBYdmdoZjYzczFLR3B2ZUZFWDA2aDRaVVA0V2wrclFWSGY2cWd5bU1rcUMxL3JWaHBVTlNXOHFEZm9WSnh5aWVQclZvZHJtSjhOTDJvRm5ZcFRIZzFmNmkwNlZIVnJlRldsTldsVmZPSzRQK2R6SGFwcTVmaS9kQ090aWt2U0RtbDRHRUNJNUx6d3N0NmxWM0ZKQjAzLzFPYUdsN1UvaldiRkk2ODdBRFRXb3E2bkhYVjFwVm54K0Fad0hISFpyRWRoanROQk9weWxEbUFjRndOWTQzWDliVkxjbUhiRlByTWRBRzdUcExLcGpzcUcwYTRUc0xkVm9zdFpsMTZPMGc1bTA3Qlk1ejNIS3MvVHBiVHNJa2R0UTJoWWpITktpV09SSDlTbXVFOGN0UjJxUjh0aW0ybk9iNEFHMmhUWDNmbWtuVGRwV1V6VDNybkVNelRhUTkzdGZMNGVWd1hFTXVtcm5RQnUxcWkrNTV6bHJjbWtiYkhMczg0RjNxN1Q4ZGFjWW1lQi8wUGJZcGJ6bmI4QXJjR2E3Nk5ZVmhjYUY2dmRyQTB1anpPc3E5ZFJpakpuaVFkT3BuVXhTZklNbHordmx6VXI4a09YR3Rkd1pVaE04cUxiWTR4ek5Ddnk5QkszdHl4VW9udis4NURiQTIxZjBxN01zVzVsem1KWHdIZnVkdmwydFhKcmFWZG5nenczQWJPcjBFRi82ZXZXZjJ1QWhwVSs3UHJzN2FWMTZhR1BKRDNqdXFxcmRMem1LbVc1YTYyYjJ0Qkd6NmswMmYyUjl1MjFyUGFzSXZmbjcvZW1rUjV6Nm8vdS9kZjExcHVuSks5Z21NTHRvcDcrL1Q5UTRMNmVHM1Q5WVpXNlNDSmd6eCtTNkdlME9XTys3QTJtbDJwYmM1TjlzdmV3Zk5PZWprYVYrcU9MWldzNVVPT3lyeXVWdm9ybnl3NTB0Y0pwL1BKaDZVTE8wUHEvNmVNUjNzYTAraUYyQ1N2MFRYcmQxQkw1S3Y1VVhlL3EzNG4wUXE3aVdmMWEwdUNJcWQ3dHpkMlJsbkRmU1pwUElPM3pjdDdLdHUzRFFmL1J0azR5clE1UHRaWWQrNDc5cnJTY3R4bGVxUDA4c2haWDVPVjhwWWYyN2lUL3pxN2NveFZadHFMT2lmQlBiSWxGNHBPaTdvbnhOYmFZVnNYblZjYmRFK1RiTEdzbXpZcEQ4cTVNbU44emFXL1RycGhuMnptSjlKTjJRQ2tkaTIyK2FaaFlPelZYNzZGbnNjeWJDWGQxWGM1OHVoYXo1UGRLd0FNYnlRT08wTG5ZWkg2THhEeTJkZm9DZWhlREhId3dZWStiSnQyNWkvNzV6Y1FHSW9GVGRXZytMZlNUZWVjbCtqbU9laS9rMFVhdithcGpFRTV6MVhoOEE2MzBjdVIvY21DZXNaRGMrWU5DR2hwZFZnMXNJSUtVNm5kTU9VUlhLNXJ2bjJrYndDc2VNaTRmUE9jQXpTMG5KU3ZIOU1nUndVM3pybytNbXI1ay9iNzhFbnB0UzFsaDdyWVZjeVlNN2RXTzIya0pJWVFRUWdnaHNjNy9BbnhQYSttMzJqTE9BQUFBQUVsRlRrU3VRbUNDXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBSYXdIVE1MID0gKHtjaGlsZHJlbiwgY2xhc3NOYW1lID0gXCJcIn0pID0+XG4gICAgPHNwYW4gY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBjaGlsZHJlbj8ucmVwbGFjZSgvXFxuL2csICc8YnIgLz4nKX19IC8+XG5cbmV4cG9ydCBkZWZhdWx0IFJhd0hUTUw7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhbmVsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge2NoaWxkcmVuLCBzaG93LCB0aXRsZSwgaGFuZGxlQ2xpY2ssIGNsYXNzTmFtZSwgaWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHRoZUlkID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaWQnKSA/IGlkIDogYGlkXyR7dGl0bGV9YDtcbiAgICAgICAgbGV0IHRoZUNsYXNzID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBjbGFzc05hbWUgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wicGFuZWwtZ3JvdXAgXCIgKyB0aGVDbGFzc30gaWQ9e3RoZUlkfSA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT17c2hvdyA/ICdjb2xsYXBzZWQnIDogJyd9IG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJwYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtY29sbGFwc2UgY29sbGFwc2UgaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzaG93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmltcG9ydCB7XG4gICAgZG9Mb2dpbixcbiAgICBlbWl0QWNjZXNzVG9rZW4sXG4gICAgZ2V0T0F1dGgyRmxvdyxcbiAgICBSRVNQT05TRV9UWVBFX0lNUExJQ0lULFxuICAgIFJFU1BPTlNFX1RZUEVfQ09ERSxcbiAgICB2YWxpZGF0ZUlkVG9rZW5cbn0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuaW1wb3J0IHtnZXRDdXJyZW50UGF0aE5hbWUsIGdldEN1cnJlbnRIcmVmfSBmcm9tICcuLi8uLi91dGlscy9tZXRob2RzJztcblxuY2xhc3MgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihpc3N1ZXIsIGF1ZGllbmNlLCBwcm9wcykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6Y29uc3RydWN0b3IgaW5pdCcpO1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgLy8gaW5pdGlhbCBzdGF0ZVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaWRfdG9rZW5faXNfdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBudWxsLFxuICAgICAgICAgICAgaXNzdWVyOiBpc3N1ZXIsXG4gICAgICAgICAgICBhdWRpZW5jZTogYXVkaWVuY2UsXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogbnVsbCxcbiAgICAgICAgICAgIGZsb3c6IGdldE9BdXRoMkZsb3coKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfaW1wbGljaXRGbG93KCkge1xuICAgICAgICAvLyBnZXQgZGF0YSBmcm9tIHVybCBoYXNoXG4gICAgICAgIGNvbnN0IHthY2Nlc3NfdG9rZW4sIGlkX3Rva2VuLCBzZXNzaW9uX3N0YXRlLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGV4cGlyZXNfaW59ID0gdGhpcy5leHRyYWN0SGFzaFBhcmFtcygpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgLy8gaWYgZXJyb3IgY29uZGl0aW9uIHNob3J0IGN1dC4uLlxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgZXJyb3I6IGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb259KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgIC8vIHJlIHN0YXJ0IGZsb3dcbiAgICAgICAgICAgIGRvTG9naW4oZ2V0Q3VycmVudFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWRfdG9rZW5faXNfdmFsaWQgPSBpZF90b2tlbiA/IHZhbGlkYXRlSWRUb2tlblxuICAgICAgICAoXG4gICAgICAgICAgICBpZF90b2tlbixcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuaXNzdWVyLFxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hdWRpZW5jZVxuICAgICAgICApIDogZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaWRfdG9rZW5faXNfdmFsaWQ6IGlkX3Rva2VuX2lzX3ZhbGlkLFxuICAgICAgICAgICAgZXJyb3I6ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogbnVsbCxcbiAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IG51bGwsXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChhY2Nlc3NfdG9rZW4gJiYgaWRfdG9rZW5faXNfdmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25Vc2VyQXV0aChhY2Nlc3NfdG9rZW4sIGlkX3Rva2VuLCBzZXNzaW9uX3N0YXRlLCBleHBpcmVzX2luKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbiAhPT0gd2luZG93LnBhcmVudC5sb2NhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9pbXBsaWNpdEZsb3cgcnVubmluZyBpbnNpZGUgaWZyYW1lLCBzZW5kaW5nIGF1dGggc3RhdGUgdG8gcGFyZW50XCIpO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ1NFVF9BVVRIX0lORk9fU0lMRU5UTFknLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZF90b2tlbjogaWRfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzZXNzaW9uX3N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJlc19pbjogZXhwaXJlc19pbixcbiAgICAgICAgICAgICAgICAgICAgfSksIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jb2RlRmxvdygpIHtcblxuICAgICAgICBjb25zdCB7Y29kZSwgc2Vzc2lvbl9zdGF0ZSwgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9ufSA9IHRoaXMuZXh0cmFjdEhhc2hQYXJhbXMoKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIGlmIGVycm9yIGNvbmRpdGlvbiBzaG9ydCBjdXQuLi5cbiAgICAgICAgICAgIC8vIHdlIHNldCBoZXJlIGRpcmVjdGx5IGJjIHdlIGFyZSBhdCBjb25zdHJ1Y3Rpb24gdGltZVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgZXJyb3I6IGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb259KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICAvLyByZSBzdGFydCBmbG93XG4gICAgICAgICAgICBkb0xvZ2luKGdldEN1cnJlbnRQYXRoTmFtZSgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB1cmwgPSBVUkkoZ2V0Q3VycmVudEhyZWYoKSk7XG4gICAgICAgIGxldCBxdWVyeSA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgICAgIGxldCBiYWNrVXJsID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiBudWxsO1xuICAgICAgICAvLyBhc3luYyBjb2RlXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgZ2V0dGluZyBhY2Nlc3MgdG9rZW4gd2l0aCBjb2RlICR7Y29kZX1gKVxuXG4gICAgICAgIGVtaXRBY2Nlc3NUb2tlbihjb2RlLCBiYWNrVXJsKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgW0FTWU5DXSBnb3QgcmVzcG9uc2UgJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCk7XG4gICAgICAgICAgICBsZXQge2lkX3Rva2VuLCBhY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGV4cGlyZXNfaW4sIGVycm9yOiBlcnJvcjIsIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvcl9kZXNjcmlwdGlvbjJ9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgICAgIGlmIChlcnJvcjIpIHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgd2l0aFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IyLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb24yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpZF90b2tlbl9pc192YWxpZCA9IGlkX3Rva2VuID8gdmFsaWRhdGVJZFRva2VuXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgaWRfdG9rZW4sXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5pc3N1ZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5hdWRpZW5jZVxuICAgICAgICAgICAgKSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyB0aGlzLnN0YXRlLmlkX3Rva2VuX2lzX3ZhbGlkID0gaWRfdG9rZW5faXNfdmFsaWQ7XG4gICAgICAgICAgICAvL3RoaXMuc3RhdGUuZXJyb3IgPSAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IGVycm9yO1xuICAgICAgICAgICAgLy90aGlzLnN0YXRlLmVycm9yX2Rlc2NyaXB0aW9uID0gIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcl9kZXNjcmlwdGlvbjtcblxuICAgICAgICAgICAgLy8gc2V0IHdpdGhcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgW0FTWU5DXSBzZXR0aW5nIHN0YXRlYCk7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHN0YXRlIGFzeW5jaHJvbnVzbHkgYmMgd2UgYXJlIG5vdCAgb24gY29uc3RydWN0b3IgY29udGV4dFxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBpZF90b2tlbl9pc192YWxpZDogaWRfdG9rZW5faXNfdmFsaWQsXG4gICAgICAgICAgICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICBlcnJvcjogIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcl9kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoYWNjZXNzX3Rva2VuICYmIGlkX3Rva2VuX2lzX3ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9jb2RlRmxvdyBbQVNZTkNdIG9uVXNlckF1dGhgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uVXNlckF1dGgoYWNjZXNzX3Rva2VuLCBpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24gIT09IHdpbmRvdy5wYXJlbnQubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2NvZGVGbG93IHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSwgc2VuZGluZyBhdXRoIHN0YXRlIHRvIHBhcmVudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ1NFVF9BVVRIX0lORk9fU0lMRU5UTFknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuOiBpZF90b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzZXNzaW9uX3N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IGV4cGlyZXNfaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaF90b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcblxuICAgICAgICBsZXQge2Zsb3d9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoZmxvdyA9PT0gUkVTUE9OU0VfVFlQRV9JTVBMSUNJVCkge1xuICAgICAgICAgICAgdGhpcy5faW1wbGljaXRGbG93KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmxvdyA9PT0gUkVTUE9OU0VfVFlQRV9DT0RFKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2RlRmxvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXh0cmFjdEhhc2hQYXJhbXMoKSB7XG4gICAgICAgIHJldHVybiBVUkkucGFyc2VRdWVyeSh0aGlzLnByb3BzLmxvY2F0aW9uLmhhc2guc3Vic3RyKDEpKTtcbiAgICB9XG5cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7XG5cbiAgICAgICAgaWYgKG5leHRTdGF0ZS5hY2Nlc3NUb2tlbiAhPT0gdGhpcy5zdGF0ZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHRTdGF0ZS5lcnJvciAhPT0gdGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dFN0YXRlLmlkX3Rva2VuX2lzX3ZhbGlkICE9PSB0aGlzLnN0YXRlLmlkX3Rva2VuX2lzX3ZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYW4gYWNjZXNzIHRva2VuIHJlZnJlc2ggLi4uXG4gICAgICAgIGlmIChwcmV2U3RhdGUuYWNjZXNzVG9rZW4gIT09IHRoaXMuc3RhdGUuYWNjZXNzVG9rZW4pIHtcblxuICAgICAgICAgICAgbGV0IHVybCA9IFVSSShnZXRDdXJyZW50SHJlZigpKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgICAgICAgICBsZXQgZnJhZ21lbnQgPSBVUkkucGFyc2VRdWVyeSh1cmwuZnJhZ21lbnQoKSk7XG5cbiAgICAgICAgICAgIC8vIHB1cmdlIGZyYWdtZW50XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ2NvZGUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnYWNjZXNzX3Rva2VuJ107XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ2V4cGlyZXNfaW4nXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsndG9rZW5fdHlwZSddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydzY29wZSddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydpZF90b2tlbiddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydzZXNzaW9uX3N0YXRlJ107XG5cbiAgICAgICAgICAgIGxldCBiYWNrVXJsID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiAnL2FwcCc7XG5cbiAgICAgICAgICAgIGlmIChmcmFnbWVudC5sZW5naHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgYmFja1VybCArPSBgIyR7VVJJLmJ1aWxkUXVlcnkoZnJhZ21lbnQpfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKGJhY2tVcmwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWJzdHJhY3RcbiAgICAgKiBAcGFyYW0gZXJyb3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9jYWxsYmFjayhiYWNrVXJsKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWJzdHJhY3RcbiAgICAgKiBAcGFyYW0gZXJyb3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9yZWRpcmVjdDJFcnJvcihlcnJvcikge1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge2lkX3Rva2VuX2lzX3ZhbGlkLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb259ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0MkVycm9yKGAke2Vycm9yfSAtICR7ZXJyb3JfZGVzY3JpcHRpb259LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpZF90b2tlbl9pc192YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0MkVycm9yKFwiVG9rZW4gVmFsaWRhdGlvbiBFcnJvciAtIFRva2VuIGlzIGludmFsaWQuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlO1xuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBUIGZyb20gXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiO1xuaW1wb3J0IHthdXRoRXJyb3JIYW5kbGVyLCBjcmVhdGVBY3Rpb24sIGdldFJlcXVlc3QsIHNob3dNZXNzYWdlLCBzdGFydExvYWRpbmcsIHN0b3BMb2FkaW5nfSBmcm9tIFwiLi4vLi4vdXRpbHMvYWN0aW9uc1wiO1xuaW1wb3J0IHtidWlsZEFQSUJhc2VVcmwsIGdldEFsbG93ZWRVc2VyR3JvdXBzfSBmcm9tICcuLi8uLi91dGlscy9tZXRob2RzJztcbmltcG9ydCB7IGdldEFjY2Vzc1Rva2VuLCBzdG9yZUF1dGhJbmZvLCBpbml0TG9nT3V0fSBmcm9tICcuL21ldGhvZHMnO1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNvbnN0IFNFVF9MT0dHRURfVVNFUiA9ICdTRVRfTE9HR0VEX1VTRVInO1xuZXhwb3J0IGNvbnN0IExPR09VVF9VU0VSID0gJ0xPR09VVF9VU0VSJztcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1VTRVJfSU5GTyA9ICdSRVFVRVNUX1VTRVJfSU5GTyc7XG5leHBvcnQgY29uc3QgUkVDRUlWRV9VU0VSX0lORk8gPSAnUkVDRUlWRV9VU0VSX0lORk8nO1xuZXhwb3J0IGNvbnN0IENMRUFSX1NFU1NJT05fU1RBVEUgPSAnQ0xFQVJfU0VTU0lPTl9TVEFURSc7XG5leHBvcnQgY29uc3QgVVBEQVRFX1NFU1NJT05fU1RBVEVfU1RBVFVTID0gJ1VQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyc7XG5leHBvcnQgY29uc3QgU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEID0gJ3VuY2hhbmdlZCc7XG5leHBvcnQgY29uc3QgU0VTU0lPTl9TVEFURV9TVEFUVVNfQ0hBTkdFRCA9ICdjaGFuZ2VkJztcbmV4cG9ydCBjb25zdCBTRVNTSU9OX1NUQVRFX1NUQVRVU19FUlJPUiA9ICdlcnJvcic7XG5leHBvcnQgY29uc3QgVVBEQVRFX1VTRVJfSU5GTyA9ICdVUERBVEVfVVNFUl9JTkZPJztcblxuZXhwb3J0IGNvbnN0IG9uVXNlckF1dGggPSAoYWNjZXNzVG9rZW4sIGlkVG9rZW4sIHNlc3Npb25TdGF0ZSwgZXhwaXJlc0luID0gMCwgcmVmcmVzaFRva2VuID0gbnVsbCkgPT4gKGRpc3BhdGNoKSA9PiB7XG5cbiAgICBzdG9yZUF1dGhJbmZvKGFjY2Vzc1Rva2VuLCBleHBpcmVzSW4sIHJlZnJlc2hUb2tlbiwgaWRUb2tlbik7XG5cbiAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNFVF9MT0dHRURfVVNFUixcbiAgICAgICAgcGF5bG9hZDogeyBzZXNzaW9uU3RhdGUgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZG9Mb2dvdXQgPSAoYmFja1VybCkgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogTE9HT1VUX1VTRVIsXG4gICAgICAgIHBheWxvYWQ6IHtiYWNrVXJsOiBiYWNrVXJsfVxuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VXNlckluZm8gPSAoZXhwYW5kID0gJ2dyb3VwcycsIGZpZWxkcz0nJywgYmFja1VybCA9IG51bGwsIGhpc3RvcnkgPSBudWxsLCBlcnJvckhhbmRsZXIgPSBudWxsICkgPT5cbiAgICBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG5cbiAgICBsZXQgQWxsb3dlZFVzZXJHcm91cHMgPSBnZXRBbGxvd2VkVXNlckdyb3VwcygpO1xuICAgIEFsbG93ZWRVc2VyR3JvdXBzID0gQWxsb3dlZFVzZXJHcm91cHMgIT09ICcnID8gQWxsb3dlZFVzZXJHcm91cHMuc3BsaXQoJyAnKSA6IFtdO1xuICAgIGxldCB7bG9nZ2VkVXNlclN0YXRlfSA9IGdldFN0YXRlKCk7XG4gICAgbGV0IHttZW1iZXJ9ID0gbG9nZ2VkVXNlclN0YXRlO1xuXG4gICAgbGV0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcblxuICAgIGlmIChtZW1iZXIgIT0gbnVsbCkge1xuICAgICAgICBpZihoaXN0b3J5ICE9IG51bGwgJiYgYmFja1VybCAhPSBudWxsKVxuICAgICAgICAgICAgaGlzdG9yeS5wdXNoKGJhY2tVcmwpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgaWYoZXJyb3JIYW5kbGVyID09IG51bGwpXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGF1dGhFcnJvckhhbmRsZXI7XG5cbiAgICBkaXNwYXRjaChzdGFydExvYWRpbmcoKSk7XG5cbiAgICBsZXQgcGFyYW1zID0ge1xuICAgICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgICBleHBhbmQgOiBleHBhbmQsXG4gICAgfVxuXG4gICAgaWYoZmllbGRzKXtcbiAgICAgICAgcGFyYW1zWydmaWVsZHMnXSA9IGZpZWxkcztcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0UmVxdWVzdChcbiAgICAgICAgY3JlYXRlQWN0aW9uKFJFUVVFU1RfVVNFUl9JTkZPKSxcbiAgICAgICAgY3JlYXRlQWN0aW9uKFJFQ0VJVkVfVVNFUl9JTkZPKSxcbiAgICAgICAgYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL21lbWJlcnMvbWVgKSxcbiAgICAgICAgZXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoLCBnZXRTdGF0ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcblxuICAgICAgICAgICAgbGV0IHttZW1iZXJ9ID0gZ2V0U3RhdGUoKS5sb2dnZWRVc2VyU3RhdGU7XG4gICAgICAgICAgICBpZiAobWVtYmVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JfbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdFUlJPUicsXG4gICAgICAgICAgICAgICAgICAgIGh0bWw6IFQudHJhbnNsYXRlKFwiZXJyb3JzLnVzZXJfbm90X3NldFwiKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goc2hvd01lc3NhZ2UoZXJyb3JfbWVzc2FnZSwgaW5pdExvZ091dCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayB1c2VyIGdyb3VwcyAoIGlmIGRlZmluZWQgKVxuICAgICAgICAgICAgaWYgKEFsbG93ZWRVc2VyR3JvdXBzLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgICAgIGxldCBhbGxvd2VkR3JvdXBzID0gbWVtYmVyLmdyb3Vwcy5maWx0ZXIoKGdyb3VwLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFsbG93ZWRVc2VyR3JvdXBzLmluY2x1ZGVzKGdyb3VwLmNvZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRHcm91cHMubGVuZ3RoID09PSAwKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yX21lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0VSUk9SJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IFQudHJhbnNsYXRlKFwiZXJyb3JzLnVzZXJfbm90X2F1dGh6XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHNob3dNZXNzYWdlKGVycm9yX21lc3NhZ2UsIGluaXRMb2dPdXQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoaGlzdG9yeSAhPSBudWxsICYmIGJhY2tVcmwgIT0gbnVsbClcbiAgICAgICAgICAgICAgICBoaXN0b3J5LnB1c2goYmFja1VybCk7XG4gICAgICAgIH1cbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVVzZXJJbmZvID0gKHVwZGF0ZWRNZW1iZXIpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBsZXQge2xvZ2dlZFVzZXJTdGF0ZX0gPSBnZXRTdGF0ZSgpO1xuICAgIGxldCB7bWVtYmVyfSA9IGxvZ2dlZFVzZXJTdGF0ZTtcbiAgICBpZihtZW1iZXIgPT0gbnVsbCl7XG4gICAgICAgIHRocm93IEVycm9yKFwiTWVtYmVyIGlzIG5vdCBzZXQuXCIpO1xuICAgIH1cbiAgICBpZih1cGRhdGVkTWVtYmVyLmlkICE9IG1lbWJlci5pZCl7XG4gICAgICAgIHRocm93IEVycm9yKFwiTWVtYmVyIGlzIG5vdCB0aGUgc2FtZS5cIik7XG4gICAgfVxuICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVBEQVRFX1VTRVJfSU5GTyxcbiAgICAgICAgcGF5bG9hZDogey4uLnVwZGF0ZWRNZW1iZXJ9XG4gICAgfSk7XG5cbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cyA9IChuZXdTdGF0dXMpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyxcbiAgICAgICAgcGF5bG9hZDoge3Nlc3Npb25TdGF0ZVN0YXR1czogbmV3U3RhdHVzfVxuICAgIH0pO1xufSIsImltcG9ydCB7XG4gICAgYmFzZTY0VVJMRW5jb2RlLFxuICAgIGdldEF1dGhDYWxsYmFjayxcbiAgICBnZXRDdXJyZW50TG9jYXRpb24sXG4gICAgZ2V0Q3VycmVudFBhdGhOYW1lLFxuICAgIGdldEZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZSxcbiAgICBnZXRPcmlnaW4sXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UsXG4gICAgcmV0cnlQcm9taXNlLFxuICAgIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlLFxuICAgIHNoYTI1NlxufSBmcm9tIFwiLi4vLi4vdXRpbHMvbWV0aG9kc1wiO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQge3JhbmRvbUJ5dGVzfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgTG9jayBmcm9tICdicm93c2VyLXRhYnMtbG9jayc7XG5sZXQgaHR0cCA9IHJlcXVlc3Q7XG5cbi8qKlxuICogQGlnbm9yZVxuICovXG5jb25zdCBsb2NrID0gbmV3IExvY2soKTtcblxuY29uc3QgR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZID0gJ29wZW5zdGFja3VpY29yZS5sb2NrLmdldFRva2VuU2lsZW50bHknO1xuY29uc3QgTk9OQ0VfTEVOID0gMTY7XG5leHBvcnQgY29uc3QgQUNDRVNTX1RPS0VOX1NLRVdfVElNRSA9IDIwO1xuZXhwb3J0IGNvbnN0IFJFU1BPTlNFX1RZUEVfSU1QTElDSVQgPSBcInRva2VuIGlkX3Rva2VuXCI7XG5leHBvcnQgY29uc3QgUkVTUE9OU0VfVFlQRV9DT0RFID0gJ2NvZGUnO1xuY29uc3QgQVVUSF9JTkZPID0gJ2F1dGhJbmZvJztcbmNvbnN0IE5PTkNFID0gJ25vbmNlJztcbmNvbnN0IFBLQ0UgPSAncGtjZSc7XG5cbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCI7XG5pbXBvcnQgSWRUb2tlblZlcmlmaWVyIGZyb20gXCJpZHRva2VuLXZlcmlmaWVyXCI7XG5pbXBvcnQge1NFVF9MT0dHRURfVVNFUn0gZnJvbSBcIi4vYWN0aW9uc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0QXV0aFVybCA9IChiYWNrVXJsID0gbnVsbCwgcHJvbXB0ID0gbnVsbCwgdG9rZW5JZEhpbnQgPSBudWxsLCBwcm92aWRlciA9IG51bGwpID0+IHtcblxuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG4gICAgbGV0IHJlZGlyZWN0VXJpID0gZ2V0QXV0aENhbGxiYWNrKCk7XG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IHNjb3BlcyA9IGdldE9BdXRoMlNjb3BlcygpO1xuICAgIGxldCBmbG93ID0gZ2V0T0F1dGgyRmxvdygpO1xuXG4gICAgaWYgKGJhY2tVcmwgIT0gbnVsbClcbiAgICAgICAgcmVkaXJlY3RVcmkgKz0gYD9CYWNrVXJsPSR7ZW5jb2RlVVJJKGJhY2tVcmwpfWA7XG5cbiAgICBsZXQgbm9uY2UgPSBjcmVhdGVOb25jZShOT05DRV9MRU4pO1xuXG4gICAgLy8gc3RvcmUgbm9uY2UgdG8gY2hlY2sgaXQgbGF0ZXJcbiAgICBwdXRPbkxvY2FsU3RvcmFnZShOT05DRSwgbm9uY2UpO1xuICAgIGxldCB1cmwgPSBVUkkoYCR7YmFzZVVybH0vb2F1dGgyL2F1dGhgKTtcblxuICAgIGxldCBxdWVyeSA9IHtcbiAgICAgICAgXCJyZXNwb25zZV90eXBlXCI6IGVuY29kZVVSSShmbG93KSxcbiAgICAgICAgXCJzY29wZVwiOiBlbmNvZGVVUkkoc2NvcGVzKSxcbiAgICAgICAgXCJub25jZVwiOiBub25jZSxcbiAgICAgICAgXCJyZXNwb25zZV9tb2RlXCIgOiAnZnJhZ21lbnQnLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcInJlZGlyZWN0X3VyaVwiOiBlbmNvZGVVUkkocmVkaXJlY3RVcmkpXG4gICAgfTtcblxuICAgIGlmKGZsb3cgPT09IFJFU1BPTlNFX1RZUEVfQ09ERSl7XG4gICAgICAgIGNvbnN0IHBrY2UgPSBjcmVhdGVQS0NFQ29kZXMoKVxuICAgICAgICBwdXRPbkxvY2FsU3RvcmFnZShQS0NFLCBKU09OLnN0cmluZ2lmeShwa2NlKSk7XG4gICAgICAgIHF1ZXJ5Wydjb2RlX2NoYWxsZW5nZSddID0gcGtjZS5jb2RlQ2hhbGxlbmdlO1xuICAgICAgICBxdWVyeVsnY29kZV9jaGFsbGVuZ2VfbWV0aG9kJ10gPSAnUzI1Nic7XG4gICAgICAgIHF1ZXJ5WydhcHByb3ZhbF9wcm9tcHQnXSA9ICdmb3JjZSc7XG4gICAgfVxuXG4gICAgaWYgKHByb21wdCkge1xuICAgICAgICBxdWVyeVsncHJvbXB0J10gPSBwcm9tcHQ7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuSWRIaW50KSB7XG4gICAgICAgIHF1ZXJ5WydpZF90b2tlbl9oaW50J10gPSB0b2tlbklkSGludDtcbiAgICB9XG5cbiAgICBpZiAocHJvdmlkZXIpIHtcbiAgICAgICAgcXVlcnlbJ3Byb3ZpZGVyJ10gPSBwcm92aWRlcjtcbiAgICB9XG5cbiAgICB1cmwgPSB1cmwucXVlcnkocXVlcnkpO1xuICAgIC8vY29uc29sZS5sb2coYGdldEF1dGhVcmwgJHt1cmwudG9TdHJpbmcoKX1gKTtcbiAgICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9nb3V0VXJsID0gKGlkVG9rZW4pID0+IHtcbiAgICBsZXQgYmFzZVVybCA9IGdldE9BdXRoMklEUEJhc2VVcmwoKTtcbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuICAgIGxldCB1cmwgPSBVUkkoYCR7YmFzZVVybH0vb2F1dGgyL2VuZC1zZXNzaW9uYCk7XG4gICAgbGV0IHN0YXRlID0gY3JlYXRlTm9uY2UoTk9OQ0VfTEVOKTtcbiAgICBsZXQgcG9zdExvZ091dFVyaSA9IGdldE9yaWdpbigpICsgJy9hdXRoL2xvZ291dCc7XG4gICAgLy8gc3RvcmUgbm9uY2UgdG8gY2hlY2sgaXQgbGF0ZXJcbiAgICBwdXRPbkxvY2FsU3RvcmFnZSgncG9zdF9sb2dvdXRfc3RhdGUnLCBzdGF0ZSk7XG4gICAgLyoqXG4gICAgICogcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHNob3VsZCBiZSBsaXN0ZWQgb24gb2F1dGgyIGNsaWVudCBzZXR0aW5nc1xuICAgICAqIG9uIElEUFxuICAgICAqIFwiU2VjdXJpdHkgU2V0dGluZ3NcIiBUYWIgLT4gTG9nb3V0IE9wdGlvbnMgLT4gUG9zdCBMb2dvdXQgVXJpc1xuICAgICAqL1xuICAgIHJldHVybiB1cmwucXVlcnkoe1xuICAgICAgICBcImlkX3Rva2VuX2hpbnRcIjogaWRUb2tlbixcbiAgICAgICAgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIjogZW5jb2RlVVJJKHBvc3RMb2dPdXRVcmkpLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcInN0YXRlXCI6IHN0YXRlLFxuICAgIH0pO1xufVxuXG5jb25zdCBjcmVhdGVOb25jZSA9IChsZW4pID0+IHtcbiAgICBsZXQgcG9zc2libGUgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XCI7XG4gICAgbGV0IG5vbmNlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBub25jZSArPSBwb3NzaWJsZS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcG9zc2libGUubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiBub25jZTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvTG9naW4gPSAoYmFja1VybCA9IG51bGwsIHByb3ZpZGVyID0gbnVsbCwgcHJvbXB0ID0gJ2NvbnNlbnQnKSA9PiB7XG4gICAgbGV0IHVybCA9IGdldEF1dGhVcmwoYmFja1VybCwgcHJvbXB0ICxudWxsLCBwcm92aWRlcik7XG4gICAgbGV0IGxvY2F0aW9uID0gZ2V0Q3VycmVudExvY2F0aW9uKClcbiAgICBsb2NhdGlvbi5yZXBsYWNlKHVybC50b1N0cmluZygpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvTG9naW5CYXNpY0xvZ2luID0gKGJhY2tVcmwgPSBudWxsKSA9PiB7XG4gICAgZG9Mb2dpbihiYWNrVXJsLCBudWxsLCBudWxsKTtcbn1cblxuY29uc3QgY3JlYXRlUEtDRUNvZGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvZGVWZXJpZmllciA9IGJhc2U2NFVSTEVuY29kZShyYW5kb21CeXRlcyg2NCkpXG4gICAgY29uc3QgY29kZUNoYWxsZW5nZSA9IGJhc2U2NFVSTEVuY29kZShzaGEyNTYoQnVmZmVyLmZyb20oY29kZVZlcmlmaWVyKSkpXG4gICAgY29uc3QgY3JlYXRlZEF0ID0gbmV3IERhdGUoKVxuICAgIGNvbnN0IGNvZGVQYWlyID0ge1xuICAgICAgICBjb2RlVmVyaWZpZXIsXG4gICAgICAgIGNvZGVDaGFsbGVuZ2UsXG4gICAgICAgIGNyZWF0ZWRBdFxuICAgIH1cbiAgICByZXR1cm4gY29kZVBhaXJcbn1cblxuZXhwb3J0IGNvbnN0IGVtaXRBY2Nlc3NUb2tlbiA9IGFzeW5jIChjb2RlLCBiYWNrVXJsID0gbnVsbCkgPT4ge1xuXG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgcmVkaXJlY3RVcmkgPSBnZXRBdXRoQ2FsbGJhY2soKTtcbiAgICBsZXQgcGtjZSA9IEpTT04ucGFyc2UoZ2V0RnJvbUxvY2FsU3RvcmFnZShQS0NFLCB0cnVlKSk7XG5cbiAgICBpZiAoYmFja1VybCAhPSBudWxsKVxuICAgICAgICByZWRpcmVjdFVyaSArPSBgP0JhY2tVcmw9JHtlbmNvZGVVUkkoYmFja1VybCl9YDtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICdjb2RlJyA6ICBjb2RlLFxuICAgICAgICAnZ3JhbnRfdHlwZScgOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgICAgJ2NvZGVfdmVyaWZpZXInIDogcGtjZS5jb2RlVmVyaWZpZXIsXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwicmVkaXJlY3RfdXJpXCI6IGVuY29kZVVSSShyZWRpcmVjdFVyaSlcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy9jb25zdCByZXNwb25zZSA9IGF3YWl0IGh0dHAucG9zdChgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gLCBwYXlsb2FkKTtcbiAgICAgICAgLy9jb25zdCB7Ym9keToge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW4sIGV4cGlyZXNfaW59fSA9IHJlc3BvbnNlO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L29hdXRoMi90b2tlbmAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUmVxdWVzdCBmYWlsZWQ6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW4sIGV4cGlyZXNfaW4sIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbn0gPSBqc29uO1xuICAgICAgICByZXR1cm4ge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW4sIGV4cGlyZXNfaW4sIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbn1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJBY2Nlc3NUb2tlbiA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAgIGF3YWl0IHJldHJ5UHJvbWlzZShcbiAgICAgICAgICAgICgpID0+IGxvY2suYWNxdWlyZUxvY2soR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZLCA1MDAwKSxcbiAgICAgICAgICAgIDEwXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgbGV0IGF1dGhJbmZvID0gIGdldEF1dGhJbmZvKCk7XG5cbiAgICAgICAgICAgIGlmKCAhYXV0aEluZm8gKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIEF1dGggaW5mby5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB7IGFjY2Vzc1Rva2VuLCBleHBpcmVzSW4sIGFjY2Vzc1Rva2VuVXBkYXRlZEF0LCByZWZyZXNoVG9rZW4gfSA9IGF1dGhJbmZvO1xuXG4gICAgICAgICAgICBzdG9yZUF1dGhJbmZvKG51bGwsIDAgLCByZWZyZXNoVG9rZW4gKVxuXG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBsb2NrLnJlbGVhc2VMb2NrKEdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRBY2Nlc3NUb2tlbiA9IGFzeW5jICgpID0+IHtcblxuICAgIGlmIChcbiAgICAgICAgYXdhaXQgcmV0cnlQcm9taXNlKFxuICAgICAgICAgICAgKCkgPT4gbG9jay5hY3F1aXJlTG9jayhHRVRfVE9LRU5fU0lMRU5UTFlfTE9DS19LRVksIDUwMDApLFxuICAgICAgICAgICAgMTBcbiAgICAgICAgKVxuICAgICkge1xuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICBsZXQgYXV0aEluZm8gPSAgZ2V0QXV0aEluZm8oKTtcblxuICAgICAgICAgICAgaWYoICFhdXRoSW5mbyApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk1pc3NpbmcgQXV0aCBpbmZvLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHsgYWNjZXNzVG9rZW4sIGV4cGlyZXNJbiwgYWNjZXNzVG9rZW5VcGRhdGVkQXQsIHJlZnJlc2hUb2tlbiB9ID0gYXV0aEluZm87XG4gICAgICAgICAgICBsZXQgZmxvdyA9IGdldE9BdXRoMkZsb3coKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGxpZmUgdGltZVxuICAgICAgICAgICAgbGV0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgbGV0IHRpbWVFbGFwc2VkU2VjcyA9IChub3cgLSBhY2Nlc3NUb2tlblVwZGF0ZWRBdCk7XG4gICAgICAgICAgICBleHBpcmVzSW4gPSAoZXhwaXJlc0luIC0gQUNDRVNTX1RPS0VOX1NLRVdfVElNRSk7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBnZXRBY2Nlc3NUb2tlbiBub3cgJHtub3d9IGFjY2Vzc1Rva2VuVXBkYXRlZEF0ICR7YWNjZXNzVG9rZW5VcGRhdGVkQXR9IHRpbWVFbGFwc2VkU2VjcyAke3RpbWVFbGFwc2VkU2Vjc30gZXhwaXJlc0luICR7ZXhwaXJlc0lufS5gKTtcblxuICAgICAgICAgICAgaWYgKHRpbWVFbGFwc2VkU2VjcyA+IGV4cGlyZXNJbiB8fCBhY2Nlc3NUb2tlbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYGdldEFjY2Vzc1Rva2VuIGFjY2VzcyB0b2tlbiBleHBpcmVkYClcbiAgICAgICAgICAgICAgICBpZihmbG93ID09PSBSRVNQT05TRV9UWVBFX0NPREUgJiYgdXNlT0F1dGgyUmVmcmVzaFRva2VuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnZ2V0QWNjZXNzVG9rZW4gZ2V0dGluZyBuZXcgYWNjZXNzIHRva2VuLCBhY2Nlc3MgdG9rZW4gZ290IHZvaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyQXV0aEluZm8oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwibWlzc2luZyBSZWZyZXNoIFRva2VuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHJlZnJlc2hBY2Nlc3NUb2tlbihyZWZyZXNoVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbn0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gYWNjZXNzX3Rva2VuICR7YWNjZXNzX3Rva2VufSBleHBpcmVzX2luICR7ZXhwaXJlc19pbn0gcmVmcmVzaF90b2tlbiAke3JlZnJlc2hfdG9rZW59YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmcmVzaF90b2tlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW4gPSBudWxsOyAvLyBub3QgdXNpbmcgcm90YXRlIHBvbGljeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlQXV0aEluZm8oYWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gYWNjZXNzX3Rva2VuICR7YWNjZXNzX3Rva2VufSBbTkVXXWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjZXNzX3Rva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGVhckF1dGhJbmZvKCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBY2Nlc3MgVG9rZW4gRXhwaXJlZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBnZXRBY2Nlc3NUb2tlbiBhY2Nlc3NfdG9rZW4gJHthY2Nlc3NUb2tlbn0gW0NBQ0hFRF1gKTtcbiAgICAgICAgICAgIHJldHVybiBhY2Nlc3NUb2tlbjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGxvY2sucmVsZWFzZUxvY2soR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBFcnJvcihcIkxvY2sgYWNxdWlyZSBlcnJvci5cIik7XG59XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoQWNjZXNzVG9rZW4gPSBhc3luYyAocmVmcmVzaF90b2tlbikgPT4ge1xuXG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICdncmFudF90eXBlJyA6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJyZWZyZXNoX3Rva2VuXCI6IHJlZnJlc2hfdG9rZW5cbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKXtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudExvY2F0aW9uID0gZ2V0Q3VycmVudFBhdGhOYW1lKCk7XG4gICAgICAgICAgICAgICAgc2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYCR7cmVzcG9uc2Uuc3RhdHVzfSAtICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcblxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFJlcXVlc3QgZmFpbGVkOiAgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgZXhwaXJlc19pbn0gPSBqc29uO1xuICAgICAgICByZXR1cm4ge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgZXhwaXJlc19pbn1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHN0b3JlQXV0aEluZm8gPSAoYWNjZXNzVG9rZW4sIGV4cGlyZXNJbiwgcmVmcmVzaFRva2VuID0gbnVsbCwgaWRUb2tlbiA9IG51bGwpID0+IHtcblxuICAgIGxldCBmb3JtZXJBdXRoSW5mbyA9IGdldEF1dGhJbmZvKCk7XG5cbiAgICBsZXQgYXV0aEluZm8gPSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuIDogYWNjZXNzVG9rZW4sXG4gICAgICAgIGV4cGlyZXNJbjogZXhwaXJlc0luLFxuICAgICAgICBhY2Nlc3NUb2tlblVwZGF0ZWRBdCA6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgIH07XG5cbiAgICBpZihyZWZyZXNoVG9rZW4gPT09IG51bGwgJiYgZm9ybWVyQXV0aEluZm8pe1xuICAgICAgICByZWZyZXNoVG9rZW4gPSBmb3JtZXJBdXRoSW5mby5yZWZyZXNoVG9rZW47XG4gICAgfVxuXG4gICAgaWYoaWRUb2tlbiA9PT0gbnVsbCAmJiBmb3JtZXJBdXRoSW5mbyl7XG4gICAgICAgIGlkVG9rZW4gPSBmb3JtZXJBdXRoSW5mby5pZFRva2VuO1xuICAgIH1cblxuICAgIGlmKHJlZnJlc2hUb2tlbil7XG4gICAgICAgIGF1dGhJbmZvWydyZWZyZXNoVG9rZW4nXSA9IHJlZnJlc2hUb2tlbjtcbiAgICB9XG5cbiAgICBpZihpZFRva2VuKXtcbiAgICAgICAgYXV0aEluZm9bJ2lkVG9rZW4nXSA9IGlkVG9rZW47XG4gICAgfVxuXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UoQVVUSF9JTkZPLCBKU09OLnN0cmluZ2lmeShhdXRoSW5mbykpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0QXV0aEluZm8gPSAoKSA9PiB7XG4gICAgbGV0IHJlcyA9IGdldEZyb21Mb2NhbFN0b3JhZ2UoQVVUSF9JTkZPLCBmYWxzZSlcbiAgICBpZihyZXMgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGVhckF1dGhJbmZvID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShBVVRIX0lORk8pO1xuICAgICAgICByZW1vdmVGcm9tTG9jYWxTdG9yYWdlKE5PTkNFKTtcbiAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShQS0NFKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJZFRva2VuID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IGF1dGhJbmZvID0gZ2V0QXV0aEluZm8oKTtcbiAgICAgICAgaWYoYXV0aEluZm8pe1xuICAgICAgICAgICAgcmV0dXJuIGF1dGhJbmZvLmlkVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9BdXRoMkNsaWVudElkID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuT0FVVEgyX0NMSUVOVF9JRDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T0F1dGgyRmxvdyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93Lk9BVVRIMl9GTE9XIHx8IFwidG9rZW4gaWRfdG9rZW5cIjtcbiAgICB9XG4gICAgcmV0dXJuIFwidG9rZW4gaWRfdG9rZW5cIjtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZU9BdXRoMlJlZnJlc2hUb2tlbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4od2luZG93Lk9BVVRIMl9VU0VfUkVGUkVTSF9UT0tFTiB8fCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aDJJRFBCYXNlVXJsID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuSURQX0JBU0VfVVJMO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aDJTY29wZXMgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5TQ09QRVM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRMb2dPdXQgPSAoKSA9PiB7XG4gICAgbGV0IGxvY2F0aW9uID0gZ2V0Q3VycmVudExvY2F0aW9uKCk7XG4gICAgbG9jYXRpb24ucmVwbGFjZShnZXRMb2dvdXRVcmwoZ2V0SWRUb2tlbigpKS50b1N0cmluZygpKTtcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlSWRUb2tlbiA9IChpZFRva2VuLCBpc3N1ZXIsIGF1ZGllbmNlKSA9PiB7XG5cbiAgICBsZXQgdmVyaWZpZXIgPSBuZXcgSWRUb2tlblZlcmlmaWVyKHtcbiAgICAgICAgaXNzdWVyOiBpc3N1ZXIsXG4gICAgICAgIGF1ZGllbmNlOiBhdWRpZW5jZVxuICAgIH0pO1xuXG4gICAgbGV0IHN0b3JlZE5vbmNlID0gZ2V0RnJvbUxvY2FsU3RvcmFnZShOT05DRSwgdHJ1ZSk7XG4gICAgbGV0IGp3dCA9IHZlcmlmaWVyLmRlY29kZShpZFRva2VuKTtcbiAgICBsZXQgYWxnID0gand0LmhlYWRlci5hbGc7XG4gICAgbGV0IGtpZCA9IGp3dC5oZWFkZXIua2lkO1xuICAgIGxldCBhdWQgPSBqd3QucGF5bG9hZC5hdWQ7XG4gICAgbGV0IGlzcyA9IGp3dC5wYXlsb2FkLmlzcztcbiAgICBsZXQgZXhwID0gand0LnBheWxvYWQuZXhwO1xuICAgIGxldCBuYmYgPSBqd3QucGF5bG9hZC5uYmY7XG4gICAgbGV0IHRub25jZSA9IGp3dC5wYXlsb2FkLm5vbmNlIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdG5vbmNlID09IHN0b3JlZE5vbmNlICYmIGF1ZCA9PSBhdWRpZW5jZSAmJiBpc3MgPT0gaXNzdWVyO1xufVxuXG5leHBvcnQgY29uc3QgcGFzc3dvcmRsZXNzU3RhcnQgPSAocGFyYW1zKSA9PiB7XG5cbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuICAgIGxldCBzY29wZXMgPSBnZXRPQXV0aDJTY29wZXMoKTtcbiAgICBsZXQgbm9uY2UgPSBjcmVhdGVOb25jZShOT05DRV9MRU4pO1xuICAgIC8vIHN0b3JlIG5vbmNlIHRvIGNoZWNrIGl0IGxhdGVyXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UoTk9OQ0UsIG5vbmNlKTtcbiAgICBsZXQgYmFzZVVybCA9IGdldE9BdXRoMklEUEJhc2VVcmwoKTtcbiAgICBsZXQgdXJsID0gVVJJKGAke2Jhc2VVcmx9L29hdXRoMi9hdXRoYCk7XG5cbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgICAgXCJyZXNwb25zZV90eXBlXCI6IFwib3RwXCIsXG4gICAgICAgIFwic2NvcGVcIjogZW5jb2RlVVJJKHNjb3BlcyksXG4gICAgICAgIFwibm9uY2VcIjogbm9uY2UsXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwiY29ubmVjdGlvblwiOiBwYXJhbXMuY29ubmVjdGlvbiB8fCBcImVtYWlsXCIsXG4gICAgICAgIFwic2VuZFwiOiBwYXJhbXMuc2VuZCB8fCBcImNvZGVcIixcbiAgICB9O1xuXG4gICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KCdlbWFpbCcpKXtcbiAgICAgICAgcGF5bG9hZFtcImVtYWlsXCJdID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KCdwaG9uZV9udW1iZXInKSl7XG4gICAgICAgIHBheWxvYWRbXCJwaG9uZV9udW1iZXJcIl0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zLnBob25lX251bWJlcik7XG4gICAgfVxuXG4gICAgbGV0IHJlcSA9IGh0dHAucG9zdCh1cmwudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gcmVxLnNlbmQocGF5bG9hZCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGxldCBqc29uID0gcmVzLmJvZHk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Jlc3BvbnNlOmpzb259KTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH0pO1xuXG59XG5cbmV4cG9ydCBjb25zdCBwYXNzd29yZGxlc3NMb2dpbiA9IChwYXJhbXMpID0+IChkaXNwYXRjaCkgPT4ge1xuXG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgc2NvcGVzID0gZ2V0T0F1dGgyU2NvcGVzKCk7XG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IHVybCA9IFVSSShgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gKTtcblxuICAgIGlmKCFwYXJhbXMuaGFzT3duUHJvcGVydHkoXCJvdHBcIikpe1xuICAgICAgICB0aHJvdyBFcnJvcihcIm90cCBwYXJhbSBpcyBtYW5kYXRvcnkuXCIpO1xuICAgIH1cblxuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICBcImdyYW50X3R5cGVcIjogXCJwYXNzd29yZGxlc3NcIixcbiAgICAgICAgXCJjb25uZWN0aW9uXCI6IHBhcmFtcy5jb25uZWN0aW9uIHx8IFwiZW1haWxcIixcbiAgICAgICAgXCJzY29wZVwiOiBlbmNvZGVVUkkoc2NvcGVzKSxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJvdHBcIjogcGFyYW1zLm90cFxuICAgIH07XG5cbiAgICBpZihwYXJhbXMuaGFzT3duUHJvcGVydHkoJ2VtYWlsJykpe1xuICAgICAgICBwYXlsb2FkW1wiZW1haWxcIl0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zLmVtYWlsKTtcbiAgICB9XG5cbiAgICBpZihwYXJhbXMuaGFzT3duUHJvcGVydHkoJ3Bob25lX251bWJlcicpKXtcbiAgICAgICAgcGF5bG9hZFtcInBob25lX251bWJlclwiXSA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXMucGhvbmVfbnVtYmVyKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxID0gaHR0cC5wb3N0KHVybC50b1N0cmluZygpKTtcblxuICAgIHJldHVybiByZXEuc2VuZChwYXlsb2FkKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIG5vdyB3ZSBnb3QgdG9rZW5cbiAgICAgICAgICAgIGxldCBqc29uID0gcmVzLmJvZHk7XG4gICAgICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW59ID0ganNvbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZyZXNoX3Rva2VuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW4gPSBudWxsOyAvLyBub3QgdXNpbmcgcm90YXRlIHBvbGljeVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGlkX3Rva2VuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGlkX3Rva2VuID0gbnVsbDsgLy8gbm90IHVzaW5nIHJvdGF0ZSBwb2xpY3lcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdmVyaWZ5IGlkIHRva2VuXG5cbiAgICAgICAgICAgIGlmIChpZF90b2tlbikge1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVJZFRva2VuKGlkX3Rva2VuLCBiYXNlVXJsLCBvYXV0aDJDbGllbnRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJpZCB0b2tlbiBpcyBub3QgdmFsaWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RvcmVBdXRoSW5mbyhhY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VuKTtcblxuICAgICAgICAgICAgaWYgKGRpc3BhdGNoKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTRVRfTE9HR0VEX1VTRVIsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtzZXNzaW9uU3RhdGU6IG51bGx9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Jlc3BvbnNlOiBqc29ufSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfSk7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcblxuaW1wb3J0IHtcbiAgICBkb0xvZ291dCxcbiAgICBTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VELFxuICAgIFNFU1NJT05fU1RBVEVfU1RBVFVTX0VSUk9SLFxuICAgIFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCxcbiAgICB1cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMsXG4gICAgb25Vc2VyQXV0aFxufSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xuXG5pbXBvcnQge1xuICAgIGdldEF1dGhVcmwsXG4gICAgaW5pdExvZ091dFxufSBmcm9tIFwiLi4vbWV0aG9kc1wiO1xuXG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiXG4vLyBpbiBtaW51dGVzXG5jb25zdCBDSEVDS19TRVNTSU9OX0lOVEVSVkFMID0gKDEwMDAgKiA2MCkgKiAzMDtcblxuY2xhc3MgT1BTZXNzaW9uQ2hlY2tlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29uc3RydWN0b3JcIik7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9e1xuICAgICAgICAgICAgb3BGcmFtZV9zcmM6IFwiXCIsXG4gICAgICAgICAgICBycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjIDogXCJcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVjZWl2ZU1lc3NhZ2UgPSB0aGlzLnJlY2VpdmVNZXNzYWdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQgPSB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0VGltZXIgPSB0aGlzLnNldFRpbWVyLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY2hlY2tTZXNzaW9uID0gdGhpcy5jaGVja1Nlc3Npb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAgPSB0aGlzLm9uU2V0dXBDaGVja1Nlc3Npb25SUC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCA9IHRoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5vcEZyYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWUgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0T1BGcmFtZVJlZiA9IGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcEZyYW1lID0gZWxlbWVudDtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnNldENoZWNrU2Vzc2lvblN0YXRlRnJhbWVSZWYgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lID0gZWxlbWVudDtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50V2lsbFVubW91bnRgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQsIGZhbHNlKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLnJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgaWYoIXRoaXMucHJvcHMuaXNMb2dnZWRVc2VyKSByZXR1cm47XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRNb3VudFwiKTtcbiAgICAgICAgLy8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvIHJlY2VpdmUgbWVzc2FnZXMgZnJvbSBpZHAgdGhyb3VnaCBPUCBmcmFtZVxuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKCB3aW5kb3cubG9jYXRpb24gIT09IHdpbmRvdy5wYXJlbnQubG9jYXRpb24gKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudERpZE1vdW50IHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSwgc2tpcHBpbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc2V0IHVwIG9wIGZyYW1lXG4gICAgICAgICAgICB0aGlzLm9uU2V0dXBDaGVja1Nlc3Npb25SUCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkKGV2ZW50KXtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZFwiKTtcbiAgICAgICAgbGV0IGZyYW1lID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZih0aGlzLnN0YXRlLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgPT0gXCJcIikgcmV0dXJuO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCBmcmFtZS5zcmMgJHtmcmFtZS5zcmN9YCk7XG4gICAgICAgIC8vIHRoaXMgaXMgY2FsbGVkIGJjIHdlIHNldCB0aGUgUlAgZnJhbWUgdG8gY2hlY2sgdGhlIHNlc3Npb24gc3RhdGUgd2l0aCBwcm9tcD1ub25lXG4gICAgICAgIGlmKCFmcmFtZS5jb250ZW50RG9jdW1lbnQpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCAhZnJhbWUuY29udGVudERvY3VtZW50KSBpcyBudWxsXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLCBmYWxzZSk7XG4gICAgICAgIGxldCByZXN1bHRVcmwgPSBuZXcgVVJJKGZyYW1lLmNvbnRlbnREb2N1bWVudC5VUkwpO1xuICAgICAgICAvLyB0ZXN0IHRoZSByZXN1bHQgVXJsMXFhXG4gICAgICAgIGNvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIC0gcmVzdWx0VXJsIFwiICsgcmVzdWx0VXJsKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gcmVzdWx0VXJsLnNlYXJjaCh0cnVlKTtcbiAgICAgICAgbGV0IGZyYWdtZW50ID0gVVJJLnBhcnNlUXVlcnkocmVzdWx0VXJsLmZyYWdtZW50KCkpO1xuICAgICAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIHNvbWUgZXJyb3Igb24gcXVlcnkgc3RyaW5nIG9yIGZyYWdtZW50XG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgICAgIGlmKHF1ZXJ5Lmhhc093blByb3BlcnR5KFwiZXJyb3JcIikpIGVycm9yID0gcXVlcnlbJ2Vycm9yJ107XG4gICAgICAgIGlmKGZyYWdtZW50Lmhhc093blByb3BlcnR5KFwiZXJyb3JcIikpIGVycm9yID0gZnJhZ21lbnRbJ2Vycm9yJ107XG4gICAgICAgIGlmKGVycm9yKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIC0gZXJyb3IgXCIgKyBlcnJvcik7XG4gICAgICAgICAgICAvLyBjaGVjayBzZXNzaW9uIHN0YXRlIHdpdGggcHJvbXB0IG5vbmUgZmFpbGVkIGRvIGxvZ291dDtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ09QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCAtIGluaXRpYXRpbmcgbG9nb3V0Jyk7XG4gICAgICAgICAgICBpbml0TG9nT3V0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gZXJyb3Igd2Ugc3RpbGwgbG9nZ2VkIHNvIHJlIGluaXQgdGhlIGNoZWNraW5nXG4gICAgICAgIC8vIHNldCB1cCBvcCBmcmFtZVxuICAgICAgICAvL2NvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgJHt0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1c31gKTtcbiAgICAgICAgdGhpcy5wcm9wcy51cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMoU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGVcIik7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyAhPT0gcHJldlByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cykge1xuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgPT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQpe1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGUgc2Vzc2lvblN0YXRlU3RhdHVzID09PSBjaGFuZ2VkXCIpO1xuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBnZXRBdXRoVXJsKG51bGwsICdub25lJyk7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LXNlc3Npb24tMV8wLmh0bWwjUlBpZnJhbWVcbiAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIGZyYW1lIHRvIGlkcFxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyYyA9PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBvcEZyYW1lX3NyYyA6IFwiXCIsIHJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgOiB1cmwudG9TdHJpbmcoKX0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzID09PSBTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQpe1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGUgc2Vzc2lvblN0YXRlU3RhdHVzID09PSB1bmNoYW5nZWRcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGUgIT09IHByZXZQcm9wcy5zZXNzaW9uU3RhdGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudERpZFVwZGF0ZSB1cGRhdGVkIHNlc3Npb24gc3RhdGUgJHt0aGlzLnByb3BzLnNlc3Npb25TdGF0ZX1gKTtcbiAgICAgICAgICAgIHRoaXMub25TZXR1cENoZWNrU2Vzc2lvblJQKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja1Nlc3Npb24oKVxuICAgIHtcblxuICAgICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiBub3cgJHtub3cudG9Mb2NhbGVTdHJpbmcoKX1gKTtcblxuICAgICAgICBpZih0aGlzLm9wRnJhbWUgPT0gbnVsbCApe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiAtIHRoaXMub3BGcmFtZSA9PSBudWxsIFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlID09IG51bGwpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiAtIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlID09IG51bGwgXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5wcm9wcy5jbGllbnRJZCA9PSBudWxsKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gLSB0aGlzLnByb3BzLmNsaWVudElkID09IG51bGwgXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhcmdldE9yaWdpbiA9IHRoaXMucHJvcHMuaWRwQmFzZVVybDtcbiAgICAgICAgbGV0IGZyYW1lID0gdGhpcy5vcEZyYW1lLmNvbnRlbnRXaW5kb3c7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGhpcy5wcm9wcy5jbGllbnRJZCArIFwiIFwiICsgdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGU7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gLSBtZXNzYWdlXCIgKyBtZXNzYWdlKTtcbiAgICAgICAgLy8gcG9zdE1lc3NhZ2UgdG8gdGhlIE9QIGlmcmFtZVxuICAgICAgICBmcmFtZS5wb3N0TWVzc2FnZShtZXNzYWdlLCB0YXJnZXRPcmlnaW4pO1xuICAgIH1cblxuICAgIHNldFRpbWVyKGV2ZW50KVxuICAgIHtcbiAgICAgICAgbGV0IGZyYW1lID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZih0aGlzLnN0YXRlLm9wRnJhbWVfc3JjID09IFwiXCIpIHJldHVybjtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnNldFRpbWVyXCIpO1xuXG4gICAgICAgIGlmKCF0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcil7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6c2V0VGltZXIgLSAhdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXJcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyAhPT0gU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEICl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6c2V0VGltZXIgLSB0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1c1wiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6c2V0VGltZXIgc2V0dGluZyBpbnRlcnZhbCAke0NIRUNLX1NFU1NJT05fSU5URVJWQUx9YCk7XG4gICAgICAgICAgICB0aGlzLmludGVydmFsID0gd2luZG93LnNldEludGVydmFsKHRoaXMuY2hlY2tTZXNzaW9uLCBDSEVDS19TRVNTSU9OX0lOVEVSVkFMKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2V0dXBDaGVja1Nlc3Npb25SUCgpe1xuICAgICAgICAvLyBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3Qtc2Vzc2lvbi0xXzAuaHRtbCNPUGlmcmFtZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6Om9uU2V0dXBDaGVja1Nlc3Npb25SUFwiKTtcbiAgICAgICAgaWYodGhpcy5vcEZyYW1lID09IG51bGwpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6Om9uU2V0dXBDaGVja1Nlc3Npb25SUCAtIG9wRnJhbWUgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5yZWNlaXZlTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICBjb25zdCBzZXNzaW9uQ2hlY2tFbmRwb2ludCA9IGAke3RoaXMucHJvcHMuaWRwQmFzZVVybH0vb2F1dGgyL2NoZWNrLXNlc3Npb25gO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6b25TZXR1cENoZWNrU2Vzc2lvblJQIC0gc2Vzc2lvbkNoZWNrRW5kcG9pbnQgXCIrIHNlc3Npb25DaGVja0VuZHBvaW50KTtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5vcEZyYW1lX3NyYyA9PSBcIlwiKVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgb3BGcmFtZV9zcmMgOiBzZXNzaW9uQ2hlY2tFbmRwb2ludCwgcnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyYyA6IFwiXCJ9KTtcbiAgICB9XG5cbiAgICByZWNlaXZlTWVzc2FnZUZyb21DaGlsZChlKXtcbiAgICAgICAgaWYgKHR5cGVvZiBlLmRhdGEgPT09ICdzdHJpbmcnIHx8IGUuZGF0YSBpbnN0YW5jZW9mIFN0cmluZyl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBhdXRoSW5mbyA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoYXV0aEluZm8uaGFzT3duUHJvcGVydHkoJ2FjdGlvbicpICYmIGF1dGhJbmZvLmFjdGlvbiA9PSAnU0VUX0FVVEhfSU5GT19TSUxFTlRMWScpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25Vc2VyQXV0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLmlkX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aEluZm8uc2Vzc2lvbl9zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLmV4cGlyZXNfaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoSW5mby5oYXNPd25Qcm9wZXJ0eShcInJlZnJlc2hfdG9rZW5cIikgPyBhdXRoSW5mby5yZWZyZXNoX3Rva2VuIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlY2VpdmVNZXNzYWdlKGUpXG4gICAge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSBlLm9yaWdpbiBcIiArIGUub3JpZ2luKTtcbiAgICAgICAgaWYgKGUub3JpZ2luICE9PSB0aGlzLnByb3BzLmlkcEJhc2VVcmwgKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSBlLm9yaWdpbiAhPT0gdGhpcy5wcm9wcy5pZHBCYXNlVXJsXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGF0dXMgPSBlLmRhdGE7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIHN0YXR1cyBcIisgc3RhdHVzKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgXCIrIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIgXCIrIHRoaXMucHJvcHMuaXNMb2dnZWRVc2VyKTtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgPT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCAmJiB0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcil7XG4gICAgICAgICAgICBpZihzdGF0dXMgPT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gc2Vzc2lvbiBzdGF0ZSBoYXMgY2hhbmdlZCBvbiBPUFwiKTtcbiAgICAgICAgICAgICAgICAvLyBzaWduYWwgc2Vzc2lvbiBzdGFydCBjaGVja1xuICAgICAgICAgICAgICAgIC8vIGtpbGwgdGltZXJcblxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBXaGVuIHRoZSBSUCBkZXRlY3RzIGEgc2Vzc2lvbiBzdGF0ZSBjaGFuZ2UsIGl0IFNIT1VMRCBmaXJzdCB0cnkgYSBwcm9tcHQ9bm9uZSByZXF1ZXN0IHdpdGhpbiBhblxuICAgICAgICAgICAgICAgICAqIGlmcmFtZSB0byBvYnRhaW4gYSBuZXcgSUQgVG9rZW4gYW5kIHNlc3Npb24gc3RhdGUsIHNlbmRpbmcgdGhlIG9sZCBJRCBUb2tlbiBhcyB0aGUgaWRfdG9rZW5faGludC5cbiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgUlAgcmVjZWl2ZXMgYW4gSUQgdG9rZW4gZm9yIHRoZSBzYW1lIEVuZC1Vc2VyLCBpdCBTSE9VTEQgc2ltcGx5IHVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlXG4gICAgICAgICAgICAgICAgICogc2Vzc2lvbiBzdGF0ZS4gSWYgaXQgZG9lcyBub3QgcmVjZWl2ZSBhbiBJRCB0b2tlbiBvciByZWNlaXZlcyBhbiBJRCB0b2tlbiBmb3IgYW5vdGhlciBFbmQtVXNlcixcbiAgICAgICAgICAgICAgICAgKiB0aGVuIGl0IG5lZWRzIHRvIGhhbmRsZSB0aGlzIGNhc2UgYXMgYSBsb2dvdXQgZm9yIHRoZSBvcmlnaW5hbCBFbmQtVXNlci4gSWYgdGhlIG9yaWdpbmFsIEVuZC1Vc2VyXG4gICAgICAgICAgICAgICAgICogaXMgYWxyZWFkeSBsb2dnZWQgb3V0IGF0IHRoZSBSUCB3aGVuIHRoZSBzdGF0ZSBjaGFuZ2VzIGluZGljYXRlIHRoYXQgRW5kLVVzZXIgc2hvdWxkIGJlIGxvZ2dlZCBvdXQsXG4gICAgICAgICAgICAgICAgICogdGhlIGxvZ291dCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgc3VjY2VlZGVkLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLnJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy51cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMoU0VTU0lPTl9TVEFURV9TVEFUVVNfQ0hBTkdFRCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGlmKCF0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcikgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmKCF0aGlzLnByb3BzLnNlc3Npb25TdGF0ZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICggd2luZG93LmxvY2F0aW9uICE9PSB3aW5kb3cucGFyZW50LmxvY2F0aW9uICkge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZW5kZXIgcnVubmluZyBpbnNpZGUgaWZyYW1lLCBza2lwcGluZ1wiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZW5kZXJcIik7XG4gICAgICAgIHJldHVybihcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3toZWlnaHQ6ICcwcHgnfX0+XG4gICAgICAgICAgICAgICAgPGlmcmFtZVxuICAgICAgICAgICAgICAgICAgICByZWY9e3RoaXMuc2V0T1BGcmFtZVJlZn1cbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJPUEZyYW1lXCIgb25Mb2FkPXt0aGlzLnNldFRpbWVyfVxuICAgICAgICAgICAgICAgICAgICBzcmM9e3RoaXMuc3RhdGUub3BGcmFtZV9zcmN9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7dmlzaWJpbGl0eTonaGlkZGVuJywgcG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IDAsIHRvcDogMCwgYm9yZGVyOiAnbm9uZScsIHdpZHRoOjAgLCBoZWlnaHQ6MH19Pj48L2lmcmFtZT5cbiAgICAgICAgICAgICAgICA8aWZyYW1lIHJlZj17dGhpcy5zZXRDaGVja1Nlc3Npb25TdGF0ZUZyYW1lUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJSUENIZWNrU2Vzc2lvblN0YXRlRnJhbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXt0aGlzLnN0YXRlLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmN9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkxvYWQ9e3RoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3t2aXNpYmlsaXR5OidoaWRkZW4nLCBwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogMCwgdG9wOiAwLCBib3JkZXI6ICdub25lJywgd2lkdGg6MCAsIGhlaWdodDowfX0+PjwvaWZyYW1lPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBsb2dnZWRVc2VyU3RhdGUgfSkgPT4gKHtcbiAgICBzZXNzaW9uU3RhdGU6IGxvZ2dlZFVzZXJTdGF0ZS5zZXNzaW9uU3RhdGUsXG4gICAgaXNMb2dnZWRVc2VyOiBsb2dnZWRVc2VyU3RhdGUuaXNMb2dnZWRVc2VyLFxuICAgIHNlc3Npb25TdGF0ZVN0YXR1czogbG9nZ2VkVXNlclN0YXRlLnNlc3Npb25TdGF0ZVN0YXR1cyxcbn0pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCB7XG4gICAgZG9Mb2dvdXQsIHVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cywgb25Vc2VyQXV0aFxufSkoT1BTZXNzaW9uQ2hlY2tlcik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICcuL3NpbXBsZS1saW5rLWxpc3QubGVzcyc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uL3RhYmxlL1RhYmxlXCI7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5pbXBvcnQgQXN5bmNDcmVhdGFibGVTZWxlY3QgZnJvbSBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIjtcblxuXG5jbGFzcyBTaW1wbGVMaW5rTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25zID0gdGhpcy5nZXRPcHRpb25zLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTGluayA9IHRoaXMuaGFuZGxlTGluay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbiA9IHRoaXMuZmlsdGVyT3B0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmV3ID0gdGhpcy5oYW5kbGVOZXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXROZXdPcHRpb25EYXRhID0gdGhpcy5nZXROZXdPcHRpb25EYXRhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNWYWxpZE5ld09wdGlvbiA9IHRoaXMuaXNWYWxpZE5ld09wdGlvbi5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGdldE9wdGlvbnMoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdkZWZhdWx0T3B0aW9ucycpID8gb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoIWlucHV0ICYmICFkZWZhdWx0T3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFjdGlvbnMuc2VhcmNoKGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlTGluayhldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWN0aW9ucy5hZGQub25DbGljayh0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6ICcnfSk7XG4gICAgfVxuXG4gICAgZ2V0TmV3T3B0aW9uRGF0YShpbnB1dFZhbHVlLCBvcHRpb25MYWJlbCkge1xuICAgICAgICByZXR1cm4ge3RhZzogb3B0aW9uTGFiZWwsIGlkOmlucHV0VmFsdWV9O1xuICAgIH1cblxuICAgIGlzVmFsaWROZXdPcHRpb24oaW5wdXRWYWx1ZSwgc2VsZWN0VmFsdWUsIHNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBsYWJlbEtleSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhYmVsS2V5JykgPyBvcHRpb25zLmxhYmVsS2V5IDogJ2xhYmVsJztcbiAgICAgICAgbGV0IG9wdGlvbkZvdW5kID0gc2VsZWN0T3B0aW9ucy5maW5kKG9wID0+IG9wW2xhYmVsS2V5XSA9PSBpbnB1dFZhbHVlKTtcbiAgICAgICAgcmV0dXJuICghaW5wdXRWYWx1ZSB8fCBvcHRpb25Gb3VuZCkgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuXG4gICAgaGFuZGxlTmV3KHZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5vbkNyZWF0ZVRhZyh2YWx1ZSwgdGhpcy5oYW5kbGVDaGFuZ2UpO1xuICAgIH1cblxuICAgIGZpbHRlck9wdGlvbihjYW5kaWRhdGUsIGlucHV0VmFsdWUpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zLCB2YWx1ZXN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGFsbG93RHVwbGljYXRlcyA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2FsbG93RHVwbGljYXRlcycpO1xuICAgICAgICBsZXQgbGFiZWxLZXkgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdsYWJlbEtleScpID8gb3B0aW9ucy5sYWJlbEtleSA6ICdsYWJlbCc7XG5cbiAgICAgICAgaWYgKGFsbG93RHVwbGljYXRlcykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgbGV0IG9wdGlvbkZvdW5kID0gdmFsdWVzLmZpbmQodmFsID0+IHZhbFtsYWJlbEtleV0gPT09IGNhbmRpZGF0ZS5sYWJlbCk7XG5cbiAgICAgICAgcmV0dXJuICFvcHRpb25Gb3VuZDtcbiAgICB9XG5cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29wdGlvbnMsIHZhbHVlcywgY29sdW1uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgZGlzYWJsZWRBZGQgPSAoIXRoaXMuc3RhdGUudmFsdWUpO1xuXG4gICAgICAgIGxldCB0aXRsZSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3RpdGxlJykgPyBvcHRpb25zLnRpdGxlIDogJ1RhYmxlJztcbiAgICAgICAgbGV0IHZhbHVlS2V5ID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgndmFsdWVLZXknKSA/IG9wdGlvbnMudmFsdWVLZXkgOiAndmFsdWUnO1xuICAgICAgICBsZXQgbGFiZWxLZXkgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdsYWJlbEtleScpID8gb3B0aW9ucy5sYWJlbEtleSA6ICdsYWJlbCc7XG4gICAgICAgIGxldCBhbGxvd0NyZWF0ZSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ29uQ3JlYXRlVGFnJyk7XG4gICAgICAgIGxldCBkZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRPcHRpb25zJykgPyBvcHRpb25zLmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCB0YWJsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkYXRhVGFibGUnLFxuICAgICAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgICAgICAgIGRlbGV0ZTogb3B0aW9ucy5hY3Rpb25zLmRlbGV0ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSkge1xuICAgICAgICAgICAgdGFibGVPcHRpb25zLmNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3NOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpKSB7XG4gICAgICAgICAgICB0YWJsZU9wdGlvbnMuYWN0aW9ucy5lZGl0ID0gb3B0aW9ucy5hY3Rpb25zLmVkaXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5hY3Rpb25zLmhhc093blByb3BlcnR5KCdjdXN0b20nKSkge1xuICAgICAgICAgICAgdGFibGVPcHRpb25zLmFjdGlvbnMuY3VzdG9tID0gb3B0aW9ucy5hY3Rpb25zLmN1c3RvbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KCdzb3J0Q29sJykpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5zb3J0KFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1BID0gaXNOYU4oYVtvcHRpb25zLnNvcnRDb2xdKSA/IGFbb3B0aW9ucy5zb3J0Q29sXS50b0xvd2VyQ2FzZSgpIDogYVtvcHRpb25zLnNvcnRDb2xdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtQiA9IGlzTmFOKGJbb3B0aW9ucy5zb3J0Q29sXSkgPyBiW29wdGlvbnMuc29ydENvbF0udG9Mb3dlckNhc2UoKSA6IGJbb3B0aW9ucy5zb3J0Q29sXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpdGVtQSA+IGl0ZW1CID8gMSA6IChpdGVtQSA8IGl0ZW1CID8gLTEgOiAwKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgQXN5bmNDb21wb25lbnQgPSBudWxsO1xuXG4gICAgICAgIGlmIChhbGxvd0NyZWF0ZSkge1xuICAgICAgICAgICAgQXN5bmNDb21wb25lbnQgPVxuICAgICAgICAgICAgICAgIDxBc3luY0NyZWF0YWJsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJsaW5rLXNlbGVjdCBidG4tZ3JvdXAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uW3ZhbHVlS2V5XX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb25bbGFiZWxLZXldfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlck9wdGlvbj17dGhpcy5maWx0ZXJPcHRpb259XG4gICAgICAgICAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uPXt0aGlzLmhhbmRsZU5ld31cbiAgICAgICAgICAgICAgICAgICAgZ2V0TmV3T3B0aW9uRGF0YT17dGhpcy5nZXROZXdPcHRpb25EYXRhfVxuICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkTmV3T3B0aW9uPXt0aGlzLmlzVmFsaWROZXdPcHRpb259XG4gICAgICAgICAgICAgICAgLz47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBc3luY0NvbXBvbmVudCA9XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxpbmstc2VsZWN0IGJ0bi1ncm91cCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb25bdmFsdWVLZXldfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IG9wdGlvbltsYWJlbEtleV19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyT3B0aW9uPXt0aGlzLmZpbHRlck9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE9wdGlvbnM9e2RlZmF1bHRPcHRpb25zfVxuICAgICAgICAgICAgICAgIC8+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IHNpbXBsZS1saW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC00IHNpbXBsZS1saW5rLWxpc3QtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg0Pnt0aXRsZX08L2g0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kIHB1bGwtcmlnaHQgYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIHtBc3luY0NvbXBvbmVudH1cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGFkZC1idXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUxpbmt9IGRpc2FibGVkPXtkaXNhYmxlZEFkZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7VC50cmFuc2xhdGUoXCJnZW5lcmFsLmFkZFwiKX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkYXRhVGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dGFibGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT17dmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5TaW1wbGVMaW5rTGlzdC5wcm9wVHlwZXMgPSB7XG4gICAgdmFsdWVzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgc29ydENvbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgdmFsdWVLZXk6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgbGFiZWxLZXk6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBhY3Rpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICAgICAgc2VhcmNoOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgZGVsZXRlOiBQcm9wVHlwZXMuc2hhcGUoe29uQ2xpY2s6UHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZH0pLFxuICAgICAgICAgICAgYWRkOiBQcm9wVHlwZXMuc2hhcGUoe29uQ2xpY2s6UHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZH0pLFxuICAgICAgICAgICAgZWRpdDogUHJvcFR5cGVzLnNoYXBlKHtvbkNsaWNrOlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWR9KSxcbiAgICAgICAgICAgIGN1c3RvbTogUHJvcFR5cGVzLmFycmF5LFxuICAgICAgICB9KS5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZFxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVMaW5rTGlzdDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9zdW1taXQtZHJvcGRvd24ubGVzcyc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1bW1pdERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc3VtbWl0VmFsdWU6IG51bGwsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzdW1taXQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c3VtbWl0VmFsdWU6IHN1bW1pdH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvcHMub25DbGljayh0aGlzLnN0YXRlLnN1bW1pdFZhbHVlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtzdW1taXRzLCBhY3Rpb25MYWJlbCwgYWN0aW9uQ2xhc3N9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHN1bW1pdE9wdGlvbnMgPSBzdW1taXRzXG4gICAgICAgICAgICAuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gKGEuc3RhcnRfZGF0ZSA8IGIuc3RhcnRfZGF0ZSA/IDEgOiAoYS5zdGFydF9kYXRlID4gYi5zdGFydF9kYXRlID8gLTEgOiAwKSlcbiAgICAgICAgICAgICkubWFwKHMgPT4gKHtsYWJlbDogcy5uYW1lLCB2YWx1ZTogcy5pZH0pKTtcblxuICAgICAgICBsZXQgYmlnQ2xhc3MgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdiaWcnKSA/ICdiaWcnIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN1bW1pdC1kcm9wZG93biBidG4tZ3JvdXAgXCIgKyBiaWdDbGFzc30+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cInN1bW1pdC1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5zdW1taXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtzdW1taXRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17VC50cmFuc2xhdGUoXCJnZW5lcmFsLnNlbGVjdF9zdW1taXRcIil9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1ncm91cCBzdW1taXQtc2VsZWN0IHRleHQtbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17YGJ0biBidG4tZGVmYXVsdCAke2FjdGlvbkNsYXNzfWB9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICB7YWN0aW9uTGFiZWx9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGlzX2VkaXRpbmc6IGZhbHNlXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIG9uRGVsZXRlKGlkLCBldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZGVsZXRlKGlkKTtcbiAgICB9XG5cbiAgICBvblNhdmUoaWQsIGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNfZWRpdGluZzogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLnNhdmUoaWQpO1xuICAgIH1cblxuICAgIG9uRWRpdChpZCwgZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc19lZGl0aW5nOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5lZGl0KGlkKTtcbiAgICB9XG5cbiAgICBvbkNhbmNlbChpZCwgZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc19lZGl0aW5nOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuY2FuY2VsKGlkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7YWN0aW9ucywgaWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc19lZGl0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBvbkNsaWNrPXt0aGlzLm9uU2F2ZS5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cInNhdmVcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1mbG9wcHktb1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgb25DbGljaz17dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cImNhbmNlbFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIHsnZWRpdCcgaW4gYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIG9uQ2xpY2s9e3RoaXMub25FZGl0LmJpbmQodGhpcyxpZCl9IGRhdGEtdGlwPVwiZWRpdFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeydkZWxldGUnIGluIGFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBvbkNsaWNrPXt0aGlzLm9uRGVsZXRlLmJpbmQodGhpcyxpZCl9IGRhdGEtdGlwPVwiZGVsZXRlXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRyYXNoLW8gZGVsZXRlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEVkaXRhYmxlVGFibGVIZWFkaW5nIGZyb20gJy4vRWRpdGFibGVUYWJsZUhlYWRpbmcnO1xuaW1wb3J0IEVkaXRhYmxlVGFibGVDZWxsIGZyb20gJy4vRWRpdGFibGVUYWJsZUNlbGwnO1xuaW1wb3J0IEVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBmcm9tICcuL0VkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgRWRpdGFibGVUYWJsZVJvdyBmcm9tICcuL0VkaXRhYmxlVGFibGVSb3cnO1xuaW1wb3J0IFN3YWwgZnJvbSBcInN3ZWV0YWxlcnQyXCI7XG5pbXBvcnQgVCBmcm9tIFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIjtcbmltcG9ydCAnLi9lZGl0YWJsZS10YWJsZS5jc3MnO1xuaW1wb3J0IFJlYWN0VG9vbHRpcCBmcm9tIFwicmVhY3QtdG9vbHRpcFwiO1xuaW1wb3J0IHsgc2hhbGxvd0VxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWV0aG9kcydcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgY29sV2lkdGg6ICcnXG59O1xuXG5jb25zdCBjcmVhdGVSb3cgPSAocm93LCBjb2x1bW5zLCBhY3Rpb25zLCBzaG91bGRVc2VUZXh0QXJlYSkgPT4ge1xuXG4gICAgdmFyIGFjdGlvbl9idXR0b25zID0gJyc7XG4gICAgdmFyIGNlbGxzID0gY29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RWRpdGFibGVUYWJsZUNlbGwgc2hvdWxkVXNlVGV4dEFyZWE9e3Nob3VsZFVzZVRleHRBcmVhfSBrZXk9e3Jvd1snaWQnXSArICdfZmllbGQnICsgaX0gbmFtZT17Y29sLmNvbHVtbktleX0gaWQ9e3Jvdy5pZH0gaXNfZWRpdD17cm93LmlzX2VkaXR9IGhhbmRsZUNoYW5nZT17YWN0aW9ucy5oYW5kbGVDaGFuZ2V9PlxuICAgICAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG4gICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVDZWxsPlxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgY2VsbHMucHVzaCg8RWRpdGFibGVBY3Rpb25zVGFibGVDZWxsIGtleT17J2FjdGlvbnNfJyArIHJvd1snaWQnXX0gaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17YWN0aW9uc30vPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuY29uc3QgY3JlYXRlTmV3Um93ID0gKGNvbHVtbnMsIG5ld19yb3csIGFkZE5ldywgaGFuZGxlQ2hhbmdlLCBzaG91bGRVc2VUZXh0QXJlYSkgPT4ge1xuXG4gICAgdmFyIGNlbGxzID0gY29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgIGxldCBjZWxsX3ZhbHVlID0gKHR5cGVvZiBuZXdfcm93W2NvbC5jb2x1bW5LZXldICE9PSAndW5kZWZpbmVkJykgPyBuZXdfcm93W2NvbC5jb2x1bW5LZXldIDogJyc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQga2V5PXsnbmV3X3Jvd18nICsgaX0+XG4gICAgICAgICAgICAgICAge3Nob3VsZFVzZVRleHRBcmVhICYmXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBpZD17J25ld18nICsgY29sLmNvbHVtbktleX0gbmFtZT17Y29sLmNvbHVtbktleX0gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjZWxsX3ZhbHVlfS8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHshc2hvdWxkVXNlVGV4dEFyZWEgJiZcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIGlkPXsnbmV3XycgKyBjb2wuY29sdW1uS2V5fSBuYW1lPXtjb2wuY29sdW1uS2V5fSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NlbGxfdmFsdWV9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgY2VsbHMucHVzaChcbiAgICAgICAgPHRkIGtleT0nYWRkX25ldyc+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiIG9uQ2xpY2s9e2FkZE5ld30+IEFkZCA8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICApO1xuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZVRhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgcm93czogcHJvcHMuZGF0YSxcbiAgICAgICAgICAgIG5ld19yb3c6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gd2Ugc3RvcmUgdGhlIGRlbGV0ZSBhbmQgc2F2ZSBmdW5jdGlvbnMgaW4gcHJvcHMgY2F1c2Ugd2UgbmVlZCB0byBleHRlbmQgdGhlbVxuICAgICAgICB0aGlzLm9uU2F2ZSA9IHByb3BzLm9wdGlvbnMuYWN0aW9ucy5zYXZlLm9uQ2xpY2s7XG5cbiAgICAgICAgdGhpcy5hY3Rpb25zID0gey4uLnByb3BzLm9wdGlvbnMuYWN0aW9uc307XG4gICAgICAgIHRoaXMuYWN0aW9ucy5lZGl0ID0gdGhpcy5lZGl0Um93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5zYXZlID0gdGhpcy5zYXZlUm93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5kZWxldGUgPSB0aGlzLmRlbGV0ZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5oYW5kbGVDaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlQ2VsbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGlvbnMuY2FuY2VsID0gdGhpcy5lZGl0Um93Q2FuY2VsLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5zYXZlTmV3Um93ID0gdGhpcy5zYXZlTmV3Um93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmV3Q2hhbmdlID0gdGhpcy5vbkNoYW5nZU5ld0NlbGwuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmKCFzaGFsbG93RXF1YWwodGhpcy5wcm9wcy5kYXRhLCBwcmV2UHJvcHMuZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3Jvd3M6IHRoaXMucHJvcHMuZGF0YX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzYXZlUm93KGlkLCBldikge1xuICAgICAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCByb3cgPSByb3dzLmZpbmQociA9PiByLmlkID09IGlkKTtcbiAgICAgICAgcm93LmlzX2VkaXQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmVkaXRpbmdfcm93ID0gbnVsbDtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vblNhdmUocm93KTtcbiAgICB9XG5cbiAgICBkZWxldGVDbGljayhpZCkge1xuICAgICAgICBsZXQgb25EZWxldGUgPSB0aGlzLnByb3BzLm9wdGlvbnMuYWN0aW9ucy5kZWxldGUub25DbGljaztcbiAgICAgICAgbGV0IG5vQWxlcnQgPSB0aGlzLnByb3BzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ25vQWxlcnQnKTtcblxuICAgICAgICBpZiAobm9BbGVydCkge1xuICAgICAgICAgICAgb25EZWxldGUoaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogVC50cmFuc2xhdGUoXCJnZW5lcmFsLmFyZV95b3Vfc3VyZVwiKSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBULnRyYW5zbGF0ZShcImdlbmVyYWwucmVtb3ZlX3dhcm5pbmdcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogXCJ3YXJuaW5nXCIsXG4gICAgICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiI0RENkI1NVwiLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBULnRyYW5zbGF0ZShcImdlbmVyYWwueWVzX2RlbGV0ZVwiKVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgb25EZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWRpdFJvdyhpZCwgZXYpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgcm93ID0gcm93cy5maW5kKHIgPT4gci5pZCA9PSBpZCk7XG5cbiAgICAgICAgLy9zYXZlIGVkaXRpbmcgcm93IGZvciBjYW5jZWxcbiAgICAgICAgdGhpcy5lZGl0aW5nX3JvdyA9IHsuLi5yb3d9O1xuXG4gICAgICAgIHJvdy5pc19lZGl0ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZWRpdFJvd0NhbmNlbChpZCwgZXYpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICByb3dzLmZvckVhY2gociA9PiB7XG4gICAgICAgICAgICByLmlzX2VkaXQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHJvd0lkeCA9IHJvd3MuZmluZEluZGV4KHIgPT4gci5pZCA9PSBpZCk7XG5cbiAgICAgICAgcm93c1tyb3dJZHhdID0gdGhpcy5lZGl0aW5nX3JvdztcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VDZWxsKGV2KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGZpZWxkID0gZXYudGFyZ2V0O1xuICAgICAgICBsZXQgcm93ID0gcm93cy5maW5kKHIgPT4gci5pZCA9PSBmaWVsZC5pZCk7XG5cbiAgICAgICAgcm93W2ZpZWxkLm5hbWVdID0gZmllbGQudmFsdWU7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlTmV3Q2VsbChldikge1xuICAgICAgICBjb25zdCB7bmV3X3Jvd30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgZmllbGQgPSBldi50YXJnZXQ7XG5cbiAgICAgICAgbmV3X3Jvd1tmaWVsZC5uYW1lXSA9IGZpZWxkLnZhbHVlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmV3X3JvdzogbmV3X3Jvd1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzYXZlTmV3Um93KGV2KSB7XG4gICAgICAgIGNvbnN0IHtuZXdfcm93fSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdGhpcy5vblNhdmUobmV3X3Jvdyk7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBuZXdfcm93OiB7fVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7b3B0aW9ucywgY29sdW1ucyB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHRhYmxlQ2xhc3MgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XG4gICAgICAgIGxldCB0ZXh0QXJlYSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJ0ZXh0QXJlYVwiKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkIGVkaXRhYmxlVGFibGUgXCIgKyB0YWJsZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKGNvbC53aWR0aCkgPyBjb2wud2lkdGggOiBkZWZhdWx0cy5jb2xXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlSGVhZGluZyB3aWR0aD17Y29sV2lkdGh9IGtleT17J2hlYWRpbmdfJyArIGl9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlSGVhZGluZyBrZXk9J2FjdGlvbnNfaGVhZGluZycgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgdGhpcy5zdGF0ZS5yb3dzLm1hcCgocm93LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJvdykgJiYgcm93Lmxlbmd0aCAhPT0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEYXRhIGF0IHJvdyAke2l9IGlzICR7cm93Lmxlbmd0aH0uIEl0IHNob3VsZCBiZSAke2NvbHVtbnMubGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVUYWJsZVJvdyBldmVuPXtpJTIgPT09IDB9IGtleT17J3Jvd18nICsgcm93LmlkfSBpZD17cm93LmlkfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlUm93KHJvdywgY29sdW1ucywgdGhpcy5hY3Rpb25zLCB0ZXh0QXJlYSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZVJvdz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlUm93IGV2ZW49ezB9IGlkPSduZXdfcm93JyBrZXk9J25ld19yb3cnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVOZXdSb3coY29sdW1ucywgdGhpcy5zdGF0ZS5uZXdfcm93LCB0aGlzLnNhdmVOZXdSb3csIHRoaXMuaGFuZGxlTmV3Q2hhbmdlLCB0ZXh0QXJlYSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVSb3c+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICA8UmVhY3RUb29sdGlwIGRlbGF5U2hvdz17MTB9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgRWRpdGFibGVUYWJsZUNlbGwgPSAocHJvcHMpID0+IHtcblxuICAgIGlmIChwcm9wcy5pc19lZGl0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgeyFwcm9wcy5zaG91bGRVc2VUZXh0QXJlYSAmJlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBkZWZhdWx0VmFsdWU9e3Byb3BzLmNoaWxkcmVufSBuYW1lPXtwcm9wcy5uYW1lfSBpZD17cHJvcHMuaWR9IG9uQ2hhbmdlPXtwcm9wcy5oYW5kbGVDaGFuZ2V9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge3Byb3BzLnNob3VsZFVzZVRleHRBcmVhICYmXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBkZWZhdWx0VmFsdWU9e3Byb3BzLmNoaWxkcmVufSBuYW1lPXtwcm9wcy5uYW1lfSBpZD17cHJvcHMuaWR9IG9uQ2hhbmdlPXtwcm9wcy5oYW5kbGVDaGFuZ2V9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQ+e3Byb3BzLmNoaWxkcmVufTwvdGQ+XG4gICAgICAgICk7XG4gICAgfVxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGl0YWJsZVRhYmxlQ2VsbDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jbGFzcyBFZGl0YWJsZVRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHJlbmRlciAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGggd2lkdGg9e3RoaXMucHJvcHMud2lkdGh9PlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRhYmxlVGFibGVIZWFkaW5nOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuLCBldmVuLCBpZCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRyIGlkPXtpZH0gcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17ZXZlbiA/ICdldmVuJyA6ICdvZGQnfT5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGFibGVBY3Rpb25zVGFibGVDZWxsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbiA9IHRoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbiA9IHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbi5iaW5kKHRoaXMpO1xuXG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUFjdGlvbihhY3Rpb24sIGlkLCBldikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBhY3Rpb24oaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHthY3Rpb25zLCBpZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cImFjdGlvbnNcIiBrZXk9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlbGV0ZScpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmRlbGV0ZSkgICYmXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD1cImRlbGV0ZVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYWN0aW9ucy5kZWxldGUub25DbGljaywgaWQpfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10cmFzaC1vIGRlbGV0ZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdjdXN0b20nKSAmJiBhY3Rpb25zLmN1c3RvbS5tYXAoYSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYSkgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPXthLnRvb2x0aXB9IGtleT17J2N1c3RvbV8nICsgYS5uYW1lfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGEub25DbGljaywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthLmljb259XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3RhYmxlVGFibGVIZWFkaW5nIGZyb20gJy4vU2VsZWN0YWJsZVRhYmxlSGVhZGluZyc7XG5pbXBvcnQgU2VsZWN0YWJsZVRhYmxlQ2VsbCBmcm9tICcuL1NlbGVjdGFibGVUYWJsZUNlbGwnO1xuaW1wb3J0IFNlbGVjdGFibGVUYWJsZVJvdyBmcm9tICcuL1NlbGVjdGFibGVUYWJsZVJvdyc7XG5pbXBvcnQgU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZnJvbSAnLi9TZWxlY3RhYmxlQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgUmVhY3RUb29sdGlwIGZyb20gJ3JlYWN0LXRvb2x0aXAnXG5pbXBvcnQgJy4vc2VsZWN0YWJsZS10YWJsZS5jc3MnO1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgICBzb3J0RnVuYzogKGEsYikgPT4gKGEgPCBiID8gLTEgOiAoYSA+IGIgPyAxIDogMCkpLFxuICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICBzb3J0Q29sOiAwLFxuICAgIHNvcnREaXI6IDEsXG4gICAgY29sV2lkdGg6ICcnXG59XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuICAgIHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNlbGVjdGFibGVUYWJsZUNlbGwga2V5PXtyb3dbJ2lkJ10gKyAnX2ZpZWxkJyArIGl9IG5hbWU9e2NvbC5jb2x1bW5LZXl9IGlkPXtyb3cuaWR9PlxuICAgICAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG4gICAgICAgICAgICA8L1NlbGVjdGFibGVUYWJsZUNlbGw+XG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICBjZWxscy5wdXNoKDxTZWxlY3RhYmxlQWN0aW9uc1RhYmxlQ2VsbCBrZXk9J2FjdGlvbnNfY2VsbCcgaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17YWN0aW9uc30gLz4pO1xuICAgIH1cblxuICAgIHJldHVybiBjZWxscztcbn07XG5cbmNvbnN0IGdldFNvcnREaXIgPSAoY29sdW1uS2V5LCBjb2x1bW5JbmRleCwgc29ydENvbCwgc29ydERpcikgPT4ge1xuICAgIGlmKGNvbHVtbktleSAmJiAoY29sdW1uS2V5ID09PSBzb3J0Q29sKSkge1xuICAgICAgICByZXR1cm4gc29ydERpcjtcbiAgICB9XG4gICAgaWYoc29ydENvbCA9PT0gY29sdW1uSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHNvcnREaXI7XG4gICAgfVxuICAgIHJldHVybiBudWxsXG59O1xuXG5cbmNsYXNzIFNlbGVjdGFibGVUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge29wdGlvbnMsIGNvbHVtbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHNlbGVjdGVkSWRzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0ZWRJZHMnKSA/IG9wdGlvbnMuc2VsZWN0ZWRJZHMgOiBbXTtcbiAgICAgICAgbGV0IHRhYmxlQ2xhc3MgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XG4gICAgICAgIHRhYmxlQ2xhc3MgKz0gKG9wdGlvbnMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpKSA/ICcgdGFibGUtaG92ZXInIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIGRhdGFUYWJsZSBcIiArIHRhYmxlQ2xhc3N9PlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJzZWxlY3RfYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdF9hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b3B0aW9ucy5hY3Rpb25zLmVkaXQub25TZWxlY3RlZEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17b3B0aW9ucy5zZWxlY3RlZEFsbH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0Q29sID0gKHR5cGVvZiBvcHRpb25zLnNvcnRDb2wgIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5zb3J0Q29sIDogZGVmYXVsdHMuc29ydENvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydERpciA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0RGlyICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydERpciA6IGRlZmF1bHRzLnNvcnREaXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRGdW5jID0gKHR5cGVvZiBvcHRpb25zLnNvcnRGdW5jICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydEZ1bmMgOiBkZWZhdWx0cy5zb3J0RnVuYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydGFibGUgPSAodHlwZW9mIGNvbC5zb3J0YWJsZSAhPSAndW5kZWZpbmVkJykgPyBjb2wuc29ydGFibGUgOiBkZWZhdWx0cy5zb3J0YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sV2lkdGggPSAodHlwZW9mIGNvbC53aWR0aCAhPSAndW5kZWZpbmVkJykgPyBjb2wud2lkdGggOiBkZWZhdWx0cy5jb2xXaWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RhYmxlVGFibGVIZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNvcnQ9e3RoaXMucHJvcHMub25Tb3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcj17Z2V0U29ydERpcihjb2wuY29sdW1uS2V5LCBpLCBzb3J0Q29sLCBzb3J0RGlyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlPXtzb3J0YWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRGdW5jPXtzb3J0RnVuY31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uS2V5PXtjb2wuY29sdW1uS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9e2NvbFdpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXsnaGVhZGluZ18nK2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0YWJsZVRhYmxlSGVhZGluZyBrZXk9J2FjdGlvbnNfaGVhZGluZycgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmFjdGlvbnNIZWFkZXIgfHwgJyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgdGhpcy5wcm9wcy5kYXRhLm1hcCgocm93LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocm93KSAmJiByb3cubGVuZ3RoICE9PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBhdCByb3cgJHtpfSBpcyAke3Jvdy5sZW5ndGh9LiBJdCBzaG91bGQgYmUgJHtjb2x1bW5zLmxlbmd0aH0uYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ciBrZXk9eydyb3dfJytpfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RhYmxlVGFibGVSb3cgY2hlY2tlZD17b3B0aW9ucy5zZWxlY3RlZEFsbCB8fCBzZWxlY3RlZElkcy5pbmNsdWRlcyhyb3dbJ2lkJ10pfSBldmVuPXtpJTIgPT09IDB9IGtleT17J3Jvd18nK3Jvd1snaWQnXX0gaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17b3B0aW9ucy5hY3Rpb25zfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZVJvdyhyb3csIGNvbHVtbnMsIG9wdGlvbnMuYWN0aW9ucyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RhYmxlVGFibGVSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDxSZWFjdFRvb2x0aXAgZGVsYXlTaG93PXsxMH0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RhYmxlVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuXG5jb25zdCBTZWxlY3RhYmxlVGFibGVDZWxsID0gKHByb3BzKSA9PiB7XG4gICAgbGV0IHtjaGlsZHJlbn0gPSBwcm9wcztcblx0bGV0IHZhbHVlID0gJyc7XG5cdGlmKGNoaWxkcmVuKSB7XG5cdCAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG5cdCAgICAgICAgdmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YWx1ZSA9IDxSYXdIVE1MPntjaGlsZHJlbi50b1N0cmluZygpfTwvUmF3SFRNTD5cbiAgICAgICAgfVxuICAgIH1cblxuXHRyZXR1cm4gKFxuXHRcdDx0ZCB7Li4ucHJvcHN9PlxuICAgICAgICAgICAge3ZhbHVlfVxuXHRcdDwvdGQ+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RhYmxlVGFibGVDZWxsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNsYXNzIFNlbGVjdGFibGVUYWJsZUhlYWRpbmcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG5cdGNvbnN0cnVjdG9yIChwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLmhhbmRsZVNvcnQgPSB0aGlzLmhhbmRsZVNvcnQuYmluZCh0aGlzKTtcblx0fVxuXG5cdGdldFNvcnRDbGFzcygpIHtcblxuXHRcdGlmICghdGhpcy5wcm9wcy5zb3J0YWJsZSkgcmV0dXJuIG51bGw7XG5cblx0XHRzd2l0Y2godGhpcy5wcm9wcy5zb3J0RGlyKSB7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHJldHVybiAnc29ydGluZ19hc2MnO1xuXHRcdFx0Y2FzZSAtMTpcblx0XHRcdFx0cmV0dXJuICdzb3J0aW5nX2Rlc2MnO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvcHMuc29ydGFibGUgPyAnc29ydGluZycgOiBudWxsXG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlU29ydChlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmKCF0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdvblNvcnQnKSB8fCAhdGhpcy5wcm9wcy5zb3J0YWJsZSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5wcm9wcy5vblNvcnQoXG5cdFx0XHR0aGlzLnByb3BzLmNvbHVtbkluZGV4LFxuXHRcdFx0dGhpcy5wcm9wcy5jb2x1bW5LZXksXG5cdFx0XHR0aGlzLnByb3BzLnNvcnREaXIgPyB0aGlzLnByb3BzLnNvcnREaXIqLTEgOiAxLFxuXHRcdFx0dGhpcy5wcm9wcy5zb3J0RnVuY1xuXHRcdCk7XG5cdH1cblxuXHRyZW5kZXIgKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8dGggb25DbGljaz17dGhpcy5oYW5kbGVTb3J0fVxuXHRcdFx0XHRjbGFzc05hbWU9e3RoaXMuZ2V0U29ydENsYXNzKCl9XG5cdFx0XHRcdHdpZHRoPXt0aGlzLnByb3BzLndpZHRofVxuXHRcdFx0XHQ+XG5cdFx0XHRcdHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXHRcdFx0PC90aD5cblx0XHQpO1x0XG5cdH1cblx0XG59XG5cblNlbGVjdGFibGVUYWJsZUhlYWRpbmcucHJvcFR5cGVzID0ge1xuXHRvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHRzb3J0RGlyOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRjb2x1bW5JbmRleDogUHJvcFR5cGVzLm51bWJlcixcblx0Y29sdW1uS2V5OiBQcm9wVHlwZXMuYW55LFxuXHRzb3J0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cdHNvcnRGdW5jOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0YWJsZVRhYmxlSGVhZGluZzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3RhYmxlVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLmhhbmRsZUVkaXQgPSB0aGlzLmhhbmRsZUVkaXQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3QgPSB0aGlzLmhhbmRsZVNlbGVjdC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGxldCB7aWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKCFhY3Rpb24uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc3BsYXkoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRWRpdChpZCwgZXYpIHtcbiAgICAgICAgLy8gYnkgcGFzc1xuICAgICAgICBpZihldi50YXJnZXQudHlwZSA9PT0gXCJjaGVja2JveFwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmVkaXQub25DbGljayhpZCk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2VsZWN0KGlkLCBldikge1xuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZWRpdC5vblNlbGVjdGVkKGlkLCBldi50YXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7ZXZlbiwgYWN0aW9ucywgaWQsIGNoaWxkcmVuLCBjaGVja2VkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBjYW5FZGl0ID0gKGFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5lZGl0KSk7XG4gICAgICAgIGxldCByb3dDbGFzcyA9IGV2ZW4gPyAnZXZlbicgOiAnb2RkJztcblxuICAgICAgICBpZiAoY2FuRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dHIgcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17cm93Q2xhc3MgKyBcIiBjYW4tZWRpdFwifSBvbkNsaWNrPXt0aGlzLmhhbmRsZUVkaXQuYmluZCh0aGlzLCBpZCl9PlxuICAgICAgICAgICAgICAgICAgICA8dGQga2V5PXtpZCArICdfc2VsZWN0J30+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtpZCArICdfc2VsZWN0J30gbmFtZT17aWQgKyAnX3NlbGVjdCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzLCBpZCl9Lz48L3RkPlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ciByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtyb3dDbGFzc30+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBrZXk9e2lkICsgJ19zZWxlY3QnfSA+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtpZCArICdfc2VsZWN0J30gbmFtZT17aWQgKyAnX3NlbGVjdCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzLCBpZCl9Lz48L3RkPlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgKTtcblxuICAgIH1cbn07XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24gPSB0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMpO1xuXG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUFjdGlvbihhY3Rpb24sIGlkLCBldikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBhY3Rpb24oaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHthY3Rpb25zLCBpZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cImFjdGlvbnNcIiBrZXk9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5lZGl0KSAmJlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD1cImVkaXRcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGFjdGlvbnMuZWRpdC5vbkNsaWNrLCBpZCl9ID5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlbGV0ZScpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmRlbGV0ZSkgICYmXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPVwiZGVsZXRlXCIgb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhY3Rpb25zLmRlbGV0ZS5vbkNsaWNrLCBpZCl9ID5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdHJhc2gtbyBkZWxldGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHsnY3VzdG9tJyBpbiBhY3Rpb25zICYmIGFjdGlvbnMuY3VzdG9tLm1hcChhID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhLCBpZCkgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPXthLnRvb2x0aXB9IGtleT17J2N1c3RvbV8nICsgYS5uYW1lfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGEub25DbGljaywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthLmljb259XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgdXBkYXRlIGZyb20gJ2ltbXV0YWJpbGl0eS1oZWxwZXInO1xuaW1wb3J0IHsgRHJhZ0Ryb3BDb250ZXh0IH0gZnJvbSAncmVhY3QtZG5kJztcbmltcG9ydCBIVE1MNUJhY2tlbmQgZnJvbSAncmVhY3QtZG5kLWh0bWw1LWJhY2tlbmQnO1xuaW1wb3J0IFNvcnRhYmxlVGFibGVIZWFkaW5nIGZyb20gJy4vU29ydGFibGVUYWJsZUhlYWRpbmcnO1xuaW1wb3J0IFNvcnRhYmxlVGFibGVDZWxsIGZyb20gJy4vU29ydGFibGVUYWJsZUNlbGwnO1xuaW1wb3J0IFNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBmcm9tICcuL1NvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgU29ydGFibGVUYWJsZVJvdyBmcm9tICcuL1NvcnRhYmxlVGFibGVSb3cnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuaW1wb3J0ICcuL3RhYmxlLXNvcnRhYmxlLmNzcyc7XG5pbXBvcnQge3NoYWxsb3dFcXVhbH0gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgY29sV2lkdGg6ICcnXG59XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuXHR2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdDxTb3J0YWJsZVRhYmxlQ2VsbCBrZXk9e2l9PlxuICAgICAgICAgICAge3Jvd1tjb2wuY29sdW1uS2V5XX1cblx0XHQ8L1NvcnRhYmxlVGFibGVDZWxsPlxuXHRcdCk7XG5cdH0pO1xuXG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgY2VsbHMucHVzaCg8U29ydGFibGVBY3Rpb25zVGFibGVDZWxsIGtleT0nYWN0aW9ucycgaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17YWN0aW9uc30vPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuXG5jbGFzcyBTb3J0YWJsZVRhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5tb3ZlUm93ID0gdGhpcy5tb3ZlUm93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZHJvcFJvdyA9IHRoaXMuZHJvcFJvdy5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICByb3dzOiBwcm9wcy5kYXRhXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZighc2hhbGxvd0VxdWFsKHRoaXMucHJvcHMuZGF0YSwgcHJldlByb3BzLmRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtyb3dzOiB0aGlzLnByb3BzLmRhdGF9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZVJvdyhkcmFnSW5kZXgsIGhvdmVySW5kZXgpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCBkcmFnUm93ID0gcm93c1tkcmFnSW5kZXhdO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUodXBkYXRlKHRoaXMuc3RhdGUsIHtcbiAgICAgICAgICAgIHJvd3M6IHtcbiAgICAgICAgICAgICAgICAkc3BsaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnSW5kZXgsIDFdLFxuICAgICAgICAgICAgICAgICAgICBbaG92ZXJJbmRleCwgMCwgZHJhZ1Jvd10sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBkcm9wUm93KGlkLCBpbmRleCkge1xuICAgICAgICBsZXQge29yZGVyRmllbGR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IG5ld09yZGVyID0gaW5kZXggKyAxO1xuICAgICAgICBsZXQgcm93cyA9IFsuLi50aGlzLnN0YXRlLnJvd3NdO1xuXG4gICAgICAgIGZvcih2YXIgaSBpbiByb3dzKSB7XG4gICAgICAgICAgICByb3dzW2ldW29yZGVyRmllbGRdID0gcGFyc2VJbnQoaSkgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh1cGRhdGUodGhpcy5zdGF0ZSwge3Jvd3M6IHskc2V0OiByb3dzfX0pKTtcblxuICAgICAgICB0aGlzLnByb3BzLmRyb3BDYWxsYmFjayhyb3dzLCBpZCwgbmV3T3JkZXIpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zLCBjb2x1bW5zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB0YWJsZUNsYXNzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBvcHRpb25zLmNsYXNzTmFtZSA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNvcnRhYmxlLXRhYmxlLWJveFwiPlxuICAgICAgICAgICAgICAgIDxpPntULnRyYW5zbGF0ZShcImdlbmVyYWwuZHJhZ19hbmRfZHJvcFwiKX08L2k+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHNvcnRhYmxlVGFibGUgXCIgKyB0YWJsZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKGNvbC53aWR0aCkgPyBjb2wud2lkdGggOiBkZWZhdWx0cy5jb2xXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U29ydGFibGVUYWJsZUhlYWRpbmcgd2lkdGg9e2NvbFdpZHRofSBrZXk9e2l9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU29ydGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMuYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNvcnRhYmxlVGFibGVIZWFkaW5nIGtleT0nYWN0aW9ucycgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU29ydGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubGVuZ3RoID4gMCAmJiB0aGlzLnN0YXRlLnJvd3MubWFwKChyb3csaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyb3cpICYmIHJvdy5sZW5ndGggIT09IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEYXRhIGF0IHJvdyAke2l9IGlzICR7cm93Lmxlbmd0aH0uIEl0IHNob3VsZCBiZSAke2NvbHVtbnMubGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTb3J0YWJsZVRhYmxlUm93IGV2ZW49e2klMiA9PT0gMH0ga2V5PXtyb3cuaWR9IGluZGV4PXtpfSBpZD17cm93LmlkfSBtb3ZlQ2FyZD17dGhpcy5tb3ZlUm93fSBkcm9wQ2FyZD17dGhpcy5kcm9wUm93fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZVJvdyhyb3csIGNvbHVtbnMsIG9wdGlvbnMuYWN0aW9ucyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Tb3J0YWJsZVRhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn07XG5cblNvcnRhYmxlVGFibGUucHJvcFR5cGVzID0ge1xuICAgIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgYWN0aW9uczogUHJvcFR5cGVzLm9iamVjdFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgY29sdW1uS2V5OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbiAgICB9KSkuaXNSZXF1aXJlZCxcbiAgICBvcmRlckZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgZHJvcENhbGxiYWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59XG5cbmV4cG9ydCBkZWZhdWx0IERyYWdEcm9wQ29udGV4dChIVE1MNUJhY2tlbmQpKFNvcnRhYmxlVGFibGUpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgU29ydGFibGVUYWJsZUNlbGwgPSAocHJvcHMpID0+IChcblx0PHRkIHsuLi5wcm9wc30+e3Byb3BzLmNoaWxkcmVufTwvdGQ+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBTb3J0YWJsZVRhYmxlQ2VsbDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jbGFzcyBTb3J0YWJsZVRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cblx0Y29uc3RydWN0b3IgKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHR9XG5cblx0cmVuZGVyICgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PHRoIHdpZHRoPXt0aGlzLnByb3BzLndpZHRofT5cblx0XHRcdFx0e3RoaXMucHJvcHMuY2hpbGRyZW59XG5cdFx0XHQ8L3RoPlxuXHRcdCk7XHRcblx0fVxuXHRcbn1cblxuZXhwb3J0IGRlZmF1bHQgU29ydGFibGVUYWJsZUhlYWRpbmc7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBmaW5kRE9NTm9kZSB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBEcmFnU291cmNlLCBEcm9wVGFyZ2V0IH0gZnJvbSAncmVhY3QtZG5kJztcblxuY29uc3Qgc3R5bGUgPSB7XG4gICAgYm9yZGVyOiAnMXB4IGRhc2hlZCBncmF5JyxcbiAgICBwYWRkaW5nOiAnMC41cmVtIDFyZW0nLFxuICAgIG1hcmdpbkJvdHRvbTogJy41cmVtJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gICAgY3Vyc29yOiAnbW92ZScsXG59O1xuXG5jb25zdCByb3dTb3VyY2UgPSB7XG4gICAgYmVnaW5EcmFnKHByb3BzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogcHJvcHMuaWQsXG4gICAgICAgICAgICBpbmRleDogcHJvcHMuaW5kZXgsXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBlbmREcmFnKHByb3BzLCBtb25pdG9yKSB7XG4gICAgICAgIGlmIChtb25pdG9yLmRpZERyb3AoKSkge1xuICAgICAgICAgICAgcHJvcHMuZHJvcENhcmQocHJvcHMuaWQsIHByb3BzLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IHJvd1RhcmdldCA9IHtcbiAgICBob3Zlcihwcm9wcywgbW9uaXRvciwgY29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGRyYWdJbmRleCA9IG1vbml0b3IuZ2V0SXRlbSgpLmluZGV4O1xuICAgICAgICBjb25zdCBob3ZlckluZGV4ID0gcHJvcHMuaW5kZXg7XG5cbiAgICAgICAgLy8gRG9uJ3QgcmVwbGFjZSBpdGVtcyB3aXRoIHRoZW1zZWx2ZXNcbiAgICAgICAgaWYgKGRyYWdJbmRleCA9PT0gaG92ZXJJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHJlY3RhbmdsZSBvbiBzY3JlZW5cbiAgICAgICAgY29uc3QgaG92ZXJCb3VuZGluZ1JlY3QgPSBmaW5kRE9NTm9kZShjb21wb25lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIC8vIEdldCB2ZXJ0aWNhbCBtaWRkbGVcbiAgICAgICAgY29uc3QgaG92ZXJNaWRkbGVZID0gKGhvdmVyQm91bmRpbmdSZWN0LmJvdHRvbSAtIGhvdmVyQm91bmRpbmdSZWN0LnRvcCkgLyAyO1xuXG4gICAgICAgIC8vIERldGVybWluZSBtb3VzZSBwb3NpdGlvblxuICAgICAgICBjb25zdCBjbGllbnRPZmZzZXQgPSBtb25pdG9yLmdldENsaWVudE9mZnNldCgpO1xuXG4gICAgICAgIC8vIEdldCBwaXhlbHMgdG8gdGhlIHRvcFxuICAgICAgICBjb25zdCBob3ZlckNsaWVudFkgPSBjbGllbnRPZmZzZXQueSAtIGhvdmVyQm91bmRpbmdSZWN0LnRvcDtcblxuICAgICAgICAvLyBPbmx5IHBlcmZvcm0gdGhlIG1vdmUgd2hlbiB0aGUgbW91c2UgaGFzIGNyb3NzZWQgaGFsZiBvZiB0aGUgaXRlbXMgaGVpZ2h0XG4gICAgICAgIC8vIFdoZW4gZHJhZ2dpbmcgZG93bndhcmRzLCBvbmx5IG1vdmUgd2hlbiB0aGUgY3Vyc29yIGlzIGJlbG93IDUwJVxuICAgICAgICAvLyBXaGVuIGRyYWdnaW5nIHVwd2FyZHMsIG9ubHkgbW92ZSB3aGVuIHRoZSBjdXJzb3IgaXMgYWJvdmUgNTAlXG5cbiAgICAgICAgLy8gRHJhZ2dpbmcgZG93bndhcmRzXG4gICAgICAgIGlmIChkcmFnSW5kZXggPCBob3ZlckluZGV4ICYmIGhvdmVyQ2xpZW50WSA8IGhvdmVyTWlkZGxlWSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHJhZ2dpbmcgdXB3YXJkc1xuICAgICAgICBpZiAoZHJhZ0luZGV4ID4gaG92ZXJJbmRleCAmJiBob3ZlckNsaWVudFkgPiBob3Zlck1pZGRsZVkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRpbWUgdG8gYWN0dWFsbHkgcGVyZm9ybSB0aGUgYWN0aW9uXG4gICAgICAgIHByb3BzLm1vdmVDYXJkKGRyYWdJbmRleCwgaG92ZXJJbmRleCk7XG5cbiAgICAgICAgLy8gTm90ZTogd2UncmUgbXV0YXRpbmcgdGhlIG1vbml0b3IgaXRlbSBoZXJlIVxuICAgICAgICAvLyBHZW5lcmFsbHkgaXQncyBiZXR0ZXIgdG8gYXZvaWQgbXV0YXRpb25zLFxuICAgICAgICAvLyBidXQgaXQncyBnb29kIGhlcmUgZm9yIHRoZSBzYWtlIG9mIHBlcmZvcm1hbmNlXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4cGVuc2l2ZSBpbmRleCBzZWFyY2hlcy5cbiAgICAgICAgbW9uaXRvci5nZXRJdGVtKCkuaW5kZXggPSBob3ZlckluZGV4O1xuICAgIH0sXG59O1xuXG5jbGFzcyBTb3J0YWJsZVRhYmxlUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyB0ZXh0LCBpc0RyYWdnaW5nLCBjb25uZWN0RHJhZ1NvdXJjZSwgY29ubmVjdERyb3BUYXJnZXQsIGNoaWxkcmVuLCBldmVuLCBpZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3Qgb3BhY2l0eSA9IGlzRHJhZ2dpbmcgPyAwIDogMTtcblxuICAgICAgICByZXR1cm4gY29ubmVjdERyYWdTb3VyY2UoY29ubmVjdERyb3BUYXJnZXQoXG4gICAgICAgICAgICA8dHIgaWQ9e2lkfSByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtldmVuID8gJ2V2ZW4nIDogJ29kZCd9IHN0eWxlPXt7IC4uLnN0eWxlLCBvcGFjaXR5IH19PlxuXHRcdCAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgPC90cj4sXG4gICAgICAgICkpO1xuICAgIH1cbn1cblxuU29ydGFibGVUYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gICAgY29ubmVjdERyYWdTb3VyY2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY29ubmVjdERyb3BUYXJnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBpc0RyYWdnaW5nOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGlkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgbW92ZUNhcmQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdFxuICAgIERyYWdTb3VyY2UoJ2NhcmQnLCByb3dTb3VyY2UsIChjb25uZWN0LCBtb25pdG9yKSA9PiAoe1xuICAgICAgICBjb25uZWN0RHJhZ1NvdXJjZTogY29ubmVjdC5kcmFnU291cmNlKCksXG4gICAgICAgIGlzRHJhZ2dpbmc6IG1vbml0b3IuaXNEcmFnZ2luZygpLFxuICAgICAgICB9KSkoXG4gICAgRHJvcFRhcmdldCgnY2FyZCcsIHJvd1RhcmdldCwgY29ubmVjdCA9PiAoe1xuICAgICAgICBjb25uZWN0RHJvcFRhcmdldDogY29ubmVjdC5kcm9wVGFyZ2V0KCksXG4gICAgICAgIH0pKVxuICAgIChTb3J0YWJsZVRhYmxlUm93KSk7XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFjdGlvbnNUYWJsZUNlbGwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uID0gdGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uID0gdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uLmJpbmQodGhpcyk7XG5cbiAgICB9XG5cbiAgICBzaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbikge1xuICAgICAgICBsZXQge2lkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFhY3Rpb24uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc3BsYXkoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQWN0aW9uKGFjdGlvbiwgaWQsIGV2KSB7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGFjdGlvbihpZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2FjdGlvbnMsIGlkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiIGtleT1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICB7YWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZGVsZXRlJykgJiYgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbnMuZGVsZXRlKSAgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPVwiZGVsZXRlXCIgb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhY3Rpb25zLmRlbGV0ZS5vbkNsaWNrLCBpZCl9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRyYXNoLW8gZGVsZXRlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2N1c3RvbScpICYmIGFjdGlvbnMuY3VzdG9tLm1hcChhID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhKSAmJlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9e2EudG9vbHRpcH0ga2V5PXsnY3VzdG9tXycgKyBhLm5hbWV9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYS5vbkNsaWNrLCBpZCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2EuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH1cbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRhYmxlSGVhZGluZyBmcm9tICcuL1RhYmxlSGVhZGluZyc7XG5pbXBvcnQgVGFibGVDZWxsIGZyb20gJy4vVGFibGVDZWxsJztcbmltcG9ydCBUYWJsZVJvdyBmcm9tICcuL1RhYmxlUm93JztcbmltcG9ydCBBY3Rpb25zVGFibGVDZWxsIGZyb20gJy4vQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgUmVhY3RUb29sdGlwIGZyb20gJ3JlYWN0LXRvb2x0aXAnXG5cbmltcG9ydCAnLi90YWJsZS5jc3MnO1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgICBzb3J0RnVuYzogKGEsYikgPT4gKGEgPCBiID8gLTEgOiAoYSA+IGIgPyAxIDogMCkpLFxuICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICBzb3J0Q29sOiAwLFxuICAgIHNvcnREaXI6IDEsXG4gICAgY29sV2lkdGg6ICcnXG59XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuICAgIHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICBpZihjb2wuaGFzT3duUHJvcGVydHkoXCJyZW5kZXJcIikpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwga2V5PXsnY2VsbF8nK2l9ID5cbiAgICAgICAgICAgICAgICAgICAge2NvbC5yZW5kZXIocm93LCByb3dbY29sLmNvbHVtbktleV0pfVxuICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxuICAgICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFRhYmxlQ2VsbCBrZXk9eydjZWxsXycraX0gPlxuICAgICAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG4gICAgICAgICAgICA8L1RhYmxlQ2VsbD5cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICAgIGNlbGxzLnB1c2goPEFjdGlvbnNUYWJsZUNlbGwga2V5PSdhY3Rpb25zX2NlbGwnIGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e2FjdGlvbnN9IC8+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbHM7XG59O1xuXG5jb25zdCBnZXRTb3J0RGlyID0gKGNvbHVtbktleSwgY29sdW1uSW5kZXgsIHNvcnRDb2wsIHNvcnREaXIpID0+IHtcbiAgICBpZihjb2x1bW5LZXkgJiYgKGNvbHVtbktleSA9PT0gc29ydENvbCkpIHtcbiAgICAgICAgcmV0dXJuIHNvcnREaXI7XG4gICAgfVxuICAgIGlmKHNvcnRDb2wgPT09IGNvbHVtbkluZGV4KSB7XG4gICAgICAgIHJldHVybiBzb3J0RGlyO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbFxufTtcblxuY29uc3QgVGFibGUgPSAocHJvcHMpID0+IHtcbiAgICBsZXQge29wdGlvbnMsIGNvbHVtbnN9ID0gcHJvcHM7XG4gICAgbGV0IHRhYmxlQ2xhc3MgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XG4gICAgdGFibGVDbGFzcyArPSAob3B0aW9ucy5hY3Rpb25zLmhhc093blByb3BlcnR5KCdlZGl0JykpID8gJyB0YWJsZS1ob3ZlcicgOiAnJztcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXtcInRhYmxlIHRhYmxlLXN0cmlwZWQgZGF0YVRhYmxlIFwiICsgdGFibGVDbGFzc30+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRDb2wgPSAodHlwZW9mIG9wdGlvbnMuc29ydENvbCAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnRDb2wgOiBkZWZhdWx0cy5zb3J0Q29sO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnREaXIgPSAodHlwZW9mIG9wdGlvbnMuc29ydERpciAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnREaXIgOiBkZWZhdWx0cy5zb3J0RGlyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRGdW5jID0gKHR5cGVvZiBvcHRpb25zLnNvcnRGdW5jICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydEZ1bmMgOiBkZWZhdWx0cy5zb3J0RnVuYztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0YWJsZSA9ICh0eXBlb2YgY29sLnNvcnRhYmxlICE9ICd1bmRlZmluZWQnKSA/IGNvbC5zb3J0YWJsZSA6IGRlZmF1bHRzLnNvcnRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKHR5cGVvZiBjb2wud2lkdGggIT0gJ3VuZGVmaW5lZCcpID8gY29sLndpZHRoIDogZGVmYXVsdHMuY29sV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlSGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNvcnQ9e3Byb3BzLm9uU29ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcj17Z2V0U29ydERpcihjb2wuY29sdW1uS2V5LCBpLCBzb3J0Q29sLCBzb3J0RGlyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGU9e3NvcnRhYmxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RnVuYz17c29ydEZ1bmN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5LZXk9e2NvbC5jb2x1bW5LZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtjb2xXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXsnaGVhZGluZ18nK2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUhlYWRpbmcga2V5PSdhY3Rpb25zX2hlYWRpbmcnID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zSGVhZGVyIHx8ICcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgcHJvcHMuZGF0YS5tYXAoKHJvdyxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJvdykgJiYgcm93Lmxlbmd0aCAhPT0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERhdGEgYXQgcm93ICR7aX0gaXMgJHtyb3cubGVuZ3RofS4gSXQgc2hvdWxkIGJlICR7Y29sdW1ucy5sZW5ndGh9LmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dHIga2V5PXsncm93XycraX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVSb3cgZXZlbj17aSUyID09PSAwfSBrZXk9eydyb3dfJytpfSBpZD17cm93WydpZCddfSBhY3Rpb25zPXtvcHRpb25zLmFjdGlvbnN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlUm93KHJvdywgY29sdW1ucywgb3B0aW9ucy5hY3Rpb25zKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8UmVhY3RUb29sdGlwIGRlbGF5U2hvdz17MTB9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCc7XG5cbmNvbnN0IFRhYmxlQ2VsbCA9IChwcm9wcykgPT4ge1xuICAgIGxldCB7Y2hpbGRyZW59ID0gcHJvcHM7XG5cdGxldCB2YWx1ZSA9ICcnO1xuXHRpZihjaGlsZHJlbikge1xuXHQgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuXHQgICAgICAgIHZhbHVlID0gY2hpbGRyZW47XG4gICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFsdWUgPSA8UmF3SFRNTD57Y2hpbGRyZW4udG9TdHJpbmcoKX08L1Jhd0hUTUw+XG4gICAgICAgIH1cbiAgICB9XG5cblx0cmV0dXJuIChcblx0XHQ8dGQgey4uLnByb3BzfT5cbiAgICAgICAgICAgIHt2YWx1ZX1cblx0XHQ8L3RkPlxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVDZWxsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNsYXNzIFRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cblx0Y29uc3RydWN0b3IgKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHRcdHRoaXMuaGFuZGxlU29ydCA9IHRoaXMuaGFuZGxlU29ydC5iaW5kKHRoaXMpO1xuXHR9XG5cblx0Z2V0U29ydENsYXNzKCkge1xuXG5cdFx0aWYgKCF0aGlzLnByb3BzLnNvcnRhYmxlKSByZXR1cm4gbnVsbDtcblxuXHRcdHN3aXRjaCh0aGlzLnByb3BzLnNvcnREaXIpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0cmV0dXJuICdzb3J0aW5nX2FzYyc7XG5cdFx0XHRjYXNlIC0xOlxuXHRcdFx0XHRyZXR1cm4gJ3NvcnRpbmdfZGVzYyc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5zb3J0YWJsZSA/ICdzb3J0aW5nJyA6IG51bGxcblx0XHR9XG5cdH1cblxuXHRoYW5kbGVTb3J0KGUpIHtcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0aWYoIXRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ29uU29ydCcpIHx8ICF0aGlzLnByb3BzLnNvcnRhYmxlKSByZXR1cm47XG5cblx0XHR0aGlzLnByb3BzLm9uU29ydChcblx0XHRcdHRoaXMucHJvcHMuY29sdW1uSW5kZXgsXG5cdFx0XHR0aGlzLnByb3BzLmNvbHVtbktleSxcblx0XHRcdHRoaXMucHJvcHMuc29ydERpciA/IHRoaXMucHJvcHMuc29ydERpciotMSA6IDEsXG5cdFx0XHR0aGlzLnByb3BzLnNvcnRGdW5jXG5cdFx0KTtcblx0fVxuXG5cdHJlbmRlciAoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDx0aCBvbkNsaWNrPXt0aGlzLmhhbmRsZVNvcnR9XG5cdFx0XHRcdGNsYXNzTmFtZT17dGhpcy5nZXRTb3J0Q2xhc3MoKX1cblx0XHRcdFx0d2lkdGg9e3RoaXMucHJvcHMud2lkdGh9XG5cdFx0XHRcdD5cblx0XHRcdFx0e3RoaXMucHJvcHMuY2hpbGRyZW59XG5cdFx0XHQ8L3RoPlxuXHRcdCk7XHRcblx0fVxuXHRcbn1cblxuVGFibGVIZWFkaW5nLnByb3BUeXBlcyA9IHtcblx0b25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcblx0c29ydERpcjogUHJvcFR5cGVzLm51bWJlcixcblx0Y29sdW1uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cdGNvbHVtbktleTogUHJvcFR5cGVzLmFueSxcblx0c29ydGFibGU6IFByb3BUeXBlcy5ib29sLFxuXHRzb3J0RnVuYzogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGluZzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVFZGl0ID0gdGhpcy5oYW5kbGVFZGl0LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUVkaXQoaWQsIGV2KSB7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5lZGl0Lm9uQ2xpY2soaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtldmVuLCBhY3Rpb25zLCBpZCwgY2hpbGRyZW59ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGNhbkVkaXQgPSAoYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmVkaXQpKTtcbiAgICAgICAgbGV0IHJvd0NsYXNzID0gZXZlbiA/ICdldmVuJyA6ICdvZGQnO1xuXG4gICAgICAgIGlmIChjYW5FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ciByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtyb3dDbGFzcyArIFwiIGNhbi1lZGl0XCJ9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlRWRpdC5iaW5kKHRoaXMsIGlkKX0+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHRyIHJvbGU9XCJyb3dcIiBjbGFzc05hbWU9e3Jvd0NsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCB1c2VGaXRUZXh0ID0gKG1heFNpemUgPSA1MCwgbWluU2l6ZSA9IDEzMCkgPT4ge1xuICAgIGNvbnN0IE1JTl9GT05UX1NJWkUgPSBtaW5TaXplO1xuICAgIGNvbnN0IE1BWF9GT05UX1NJWkUgPSBtYXhTaXplO1xuICAgIGNvbnN0IFJFU09MVVRJT04gPSA1O1xuXG4gICAgY29uc3QgcmVmID0gdXNlUmVmKG51bGwpO1xuXG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZSh7XG4gICAgICAgIGZvbnRTaXplOiBNQVhfRk9OVF9TSVpFLFxuICAgICAgICBmb250U2l6ZVByZXY6IE1JTl9GT05UX1NJWkUsXG4gICAgICAgIGZvbnRTaXplTWF4OiBNQVhfRk9OVF9TSVpFLFxuICAgICAgICBmb250U2l6ZU1pbjogTUlOX0ZPTlRfU0laRSxcbiAgICB9KTtcbiAgICBjb25zdCB7IGZvbnRTaXplLCBmb250U2l6ZU1heCwgZm9udFNpemVNaW4sIGZvbnRTaXplUHJldiB9ID0gc3RhdGU7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBpc0RvbmUgPSBNYXRoLmFicyhmb250U2l6ZSAtIGZvbnRTaXplUHJldikgPD0gUkVTT0xVVElPTjtcbiAgICAgICAgY29uc3QgaXNPdmVyZmxvdyA9XG4gICAgICAgICAgICAhIXJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICAocmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0ID4gcmVmLmN1cnJlbnQub2Zmc2V0SGVpZ2h0IHx8XG4gICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggPiByZWYuY3VycmVudC5vZmZzZXRXaWR0aCk7XG4gICAgICAgIGNvbnN0IGlzQXNjID0gZm9udFNpemUgPiBmb250U2l6ZVByZXY7XG5cbiAgICAgICAgLy8gcmV0dXJuIGlmIHRoZSBmb250IHNpemUgaGFzIGJlZW4gYWRqdXN0ZWQgXCJlbm91Z2hcIiAoY2hhbmdlIHdpdGhpbiBSRVNPTFVUSU9OKVxuICAgICAgICAvLyByZWR1Y2UgZm9udCBzaXplIGJ5IG9uZSBpbmNyZW1lbnQgaWYgaXQncyBvdmVyZmxvd2luZ1xuICAgICAgICBpZiAoaXNEb25lKSB7XG4gICAgICAgICAgICBpZiAoaXNPdmVyZmxvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplTmV3ID1cbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemVQcmV2IDwgZm9udFNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZm9udFNpemVQcmV2XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGZvbnRTaXplIC0gKGZvbnRTaXplUHJldiAtIGZvbnRTaXplKTtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBmb250U2l6ZU5ldyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemVNYXgsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplTWluLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZVByZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoIHRvIGFkanVzdCBmb250IHNpemVcbiAgICAgICAgbGV0IGRlbHRhO1xuICAgICAgICBsZXQgbmV3TWF4ID0gZm9udFNpemVNYXg7XG4gICAgICAgIGxldCBuZXdNaW4gPSBmb250U2l6ZU1pbjtcbiAgICAgICAgaWYgKGlzT3ZlcmZsb3cpIHtcbiAgICAgICAgICAgIGRlbHRhID0gaXNBc2MgPyBmb250U2l6ZVByZXYgLSBmb250U2l6ZSA6IGZvbnRTaXplTWluIC0gZm9udFNpemU7XG4gICAgICAgICAgICBuZXdNYXggPSBNYXRoLm1pbihmb250U2l6ZU1heCwgZm9udFNpemUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsdGEgPSBpc0FzYyA/IGZvbnRTaXplTWF4IC0gZm9udFNpemUgOiBmb250U2l6ZVByZXYgLSBmb250U2l6ZTtcbiAgICAgICAgICAgIG5ld01pbiA9IE1hdGgubWF4KGZvbnRTaXplTWluLCBmb250U2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplICsgZGVsdGEgLyAyLFxuICAgICAgICAgICAgZm9udFNpemVNYXg6IG5ld01heCxcbiAgICAgICAgICAgIGZvbnRTaXplTWluOiBuZXdNaW4sXG4gICAgICAgICAgICBmb250U2l6ZVByZXY6IGZvbnRTaXplLFxuICAgICAgICB9KTtcbiAgICB9LCBbZm9udFNpemUsIGZvbnRTaXplTWF4LCBmb250U2l6ZU1pbiwgZm9udFNpemVQcmV2LCByZWZdKTtcblxuICAgIHJldHVybiB7IGZvbnRTaXplOiBgJHtmb250U2l6ZX0lYCwgbGluZUhlaWdodDogYCR7Zm9udFNpemUgLSAxMH0lYCwgcmVmIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VGaXRUZXh0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHZpZGVvanMgZnJvbSAndmlkZW8uanMnXG5cbmltcG9ydCAndmlkZW8uanMvZGlzdC92aWRlby1qcy5jc3MnXG5cbmNvbnN0IFlvdXR1YmVWaWRlb0NvbXBvbmVudCA9ICh7IHZpZGVvU3JjVVJMLCB2aWRlb1RpdGxlIH0pID0+IChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInZpZGVvXCI+XG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCI3MjBcIlxuICAgICAgICAgICAgdGl0bGU9e3ZpZGVvVGl0bGV9XG4gICAgICAgICAgICBzcmM9e3ZpZGVvU3JjVVJMfVxuICAgICAgICAgICAgZnJhbWVCb3JkZXI9XCIwXCJcbiAgICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmVcIlxuICAgICAgICAgICAgYWxsb3dGdWxsU2NyZWVuXG4gICAgICAgIC8+XG4gICAgPC9kaXY+XG4pO1xuXG5cbmNsYXNzIExpdmVWaWRlb1BsYXllciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgdGhpcy5wbGF5ZXIgPSB2aWRlb2pzKHRoaXMudmlkZW9Ob2RlLCB0aGlzLnByb3BzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgaWYgKHRoaXMucGxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGRhdGEtdmpzLXBsYXllcj1cIlwiPlxuICAgICAgICAgICAgICAgIDx2aWRlbyByZWY9e25vZGUgPT4gdGhpcy52aWRlb05vZGUgPSBub2RlfSBjbGFzc05hbWU9XCJ2aWRlby1qcyB2anMtYmlnLXBsYXktY2VudGVyZWRcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5jb25zdCBWaWRlb1N0cmVhbSA9ICh7IHVybCB9KSA9PiB7XG4gICAgbGV0IGxheW91dCA9IG51bGw7XG4gICAgY29uc3QgY2hlY2tMaXZlVmlkZW8gPSAoKSA9PiB7XG4gICAgICAgIGxldCBpc0xpdmVWaWRlbyA9IG51bGw7XG4gICAgICAgIHVybC5tYXRjaCgvLm0zdTgvKSA/IGlzTGl2ZVZpZGVvID0gdHJ1ZSA6IGlzTGl2ZVZpZGVvID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBpc0xpdmVWaWRlbztcbiAgICB9O1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgICBpZiAoY2hlY2tMaXZlVmlkZW8oKSkge1xuICAgICAgICAgICAgY29uc3QgdmlkZW9Kc09wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgYXV0b3BsYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udHJvbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgZmx1aWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc291cmNlczogW3tcbiAgICAgICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi94LW1wZWdVUkwnXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxheW91dCA9IDxMaXZlVmlkZW9QbGF5ZXIgey4uLnZpZGVvSnNPcHRpb25zfSAvPjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxheW91dCA9IDxZb3V0dWJlVmlkZW9Db21wb25lbnQgdmlkZW9TcmNVUkw9e3VybH0gLz47XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsYXlvdXQgPSA8c3BhbiBjbGFzc05hbWU9XCJuby12aWRlb1wiPk5vIHZpZGVvIFVSTCBQcm92aWRlZDwvc3Bhbj47XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheW91dDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvU3RyZWFtO1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2VuLmpzb25cIjogXCIuL3NyYy9pMThuL2VuLmpzb25cIixcblx0XCIuL2VzLmpzb25cIjogXCIuL3NyYy9pMThuL2VzLmpzb25cIixcblx0XCIuL3poLmpzb25cIjogXCIuL3NyYy9pMThuL3poLmpzb25cIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi9zcmMvaTE4biBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qc29uJFwiOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IHJlcXVlc3QgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiO1xubGV0IGh0dHAgPSByZXF1ZXN0O1xuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IFQgZnJvbSBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCI7XG5pbXBvcnQge29iamVjdFRvUXVlcnlTdHJpbmcsIGlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUsIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlLCBnZXRDdXJyZW50UGF0aE5hbWV9IGZyb20gJy4vbWV0aG9kcyc7XG5pbXBvcnQge2RvTG9naW4sIGluaXRMb2dPdXQsIENMRUFSX1NFU1NJT05fU1RBVEUsIExPR09VVF9VU0VSfSBmcm9tICcuLi9jb21wb25lbnRzL3NlY3VyaXR5L2FjdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgR0VORVJJQ19FUlJPUiAgPSBcIllpa2VzLiBTb21ldGhpbmcgc2VlbXMgdG8gYmUgYnJva2VuLiBPdXIgd2ViIHRlYW0gaGFzIGJlZW4gbm90aWZpZWQsIGFuZCB3ZSBhcG9sb2dpemUgZm9yIHRoZSBpbmNvbnZlbmllbmNlLlwiO1xuZXhwb3J0IGNvbnN0IFJFU0VUX0xPQURJTkcgID0gJ1JFU0VUX0xPQURJTkcnO1xuZXhwb3J0IGNvbnN0IFNUQVJUX0xPQURJTkcgID0gJ1NUQVJUX0xPQURJTkcnO1xuZXhwb3J0IGNvbnN0IFNUT1BfTE9BRElORyAgID0gJ1NUT1BfTE9BRElORyc7XG5leHBvcnQgY29uc3QgVkFMSURBVEUgICAgICAgPSAnVkFMSURBVEUnO1xuZXhwb3J0IGNvbnN0IENMRUFSX01FU1NBR0UgID0gJ0NMRUFSX01FU1NBR0UnO1xuZXhwb3J0IGNvbnN0IFNIT1dfTUVTU0FHRSAgID0gJ1NIT1dfTUVTU0FHRSc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBY3Rpb24gPSB0eXBlID0+IHBheWxvYWQgPT4gKHtcbiAgICB0eXBlLFxuICAgIHBheWxvYWRcbn0pO1xuXG5leHBvcnQgY29uc3QgcmVzZXRMb2FkaW5nID0gY3JlYXRlQWN0aW9uKFJFU0VUX0xPQURJTkcpO1xuZXhwb3J0IGNvbnN0IHN0YXJ0TG9hZGluZyA9IGNyZWF0ZUFjdGlvbihTVEFSVF9MT0FESU5HKTtcbmV4cG9ydCBjb25zdCBzdG9wTG9hZGluZyAgPSBjcmVhdGVBY3Rpb24oU1RPUF9MT0FESU5HKTtcblxuY29uc3QgeGhycyA9IHt9O1xuXG5jb25zdCBjYW5jZWwgPSAoa2V5KSA9PiB7XG4gICAgaWYoeGhyc1trZXldKSB7XG4gICAgICAgIHhocnNba2V5XS5hYm9ydCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhgYWJvcnRlZCByZXF1ZXN0ICR7a2V5fWApO1xuICAgICAgICBkZWxldGUgeGhyc1trZXldO1xuICAgIH1cbn1cblxuY29uc3Qgc2NoZWR1bGUgPSAoa2V5LCByZXEpID0+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgc2NoZWR1bGluZyAke2tleX1gKTtcbiAgICB4aHJzW2tleV0gPSByZXE7XG59O1xuXG5jb25zdCBpc09iamVjdEVtcHR5ID0gKG9iaikgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMCAmJiBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCA7XG59XG5cbmV4cG9ydCBjb25zdCBhdXRoRXJyb3JIYW5kbGVyID0gKGVyciwgcmVzKSA9PiAoZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG4gICAgbGV0IGNvZGUgPSBlcnIuc3RhdHVzO1xuICAgIGxldCBtc2cgPSAnJztcblxuICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgbGV0IGVycm9yX21lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdFUlJPUicsXG4gICAgICAgICAgICAgICAgaHRtbDogVC50cmFuc2xhdGUoXCJlcnJvcnMudXNlcl9ub3RfYXV0aHpcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZGlzcGF0Y2goc2hvd01lc3NhZ2UoIGVycm9yX21lc3NhZ2UsIGluaXRMb2dPdXQgKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICBsZXQgY3VycmVudExvY2F0aW9uID0gZ2V0Q3VycmVudFBhdGhOYW1lKCk7XG4gICAgICAgICAgICBsZXQgY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSA9IGlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUoKTtcblxuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IENMRUFSX1NFU1NJT05fU1RBVEUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDoge31cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZighY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlKHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdhdXRoRXJyb3JIYW5kbGVyIDQwMSAtIHJlIGxvZ2luJyk7XG4gICAgICAgICAgICAgICAgZG9Mb2dpbihjdXJyZW50TG9jYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgbXNnID0gXCJcIjtcblxuICAgICAgICAgICAgaWYgKGVyci5yZXNwb25zZS5ib2R5ICYmIGVyci5yZXNwb25zZS5ib2R5Lm1lc3NhZ2UpIG1zZyA9IGVyci5yZXNwb25zZS5ib2R5Lm1lc3NhZ2U7XG4gICAgICAgICAgICBlbHNlIGlmIChlcnIucmVzcG9uc2UuZXJyb3IgJiYgZXJyLnJlc3BvbnNlLmVycm9yLm1lc3NhZ2UpIG1zZyA9IGVyci5yZXNwb25zZS5lcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgZWxzZSBtc2cgPSBlcnIubWVzc2FnZTtcblxuICAgICAgICAgICAgU3dhbC5maXJlKFwiTm90IEZvdW5kXCIsIG1zZywgXCJ3YXJuaW5nXCIpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTI6XG4gICAgICAgICAgICBmb3IgKHZhciBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXJyLnJlc3BvbnNlLmJvZHkuZXJyb3JzKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZyArPSBrZXkgKyAnOiAnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG1zZyArPSB2YWx1ZSArICc8YnI+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFN3YWwuZmlyZShcIlZhbGlkYXRpb24gZXJyb3JcIiwgbXNnLCBcIndhcm5pbmdcIik7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogVkFMSURBVEUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDoge2Vycm9yczogZXJyLnJlc3BvbnNlLmJvZHkuZXJyb3JzfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIFN3YWwuZmlyZShcIkVSUk9SXCIsIFQudHJhbnNsYXRlKFwiZXJyb3JzLnNlcnZlcl9lcnJvclwiKSwgXCJlcnJvclwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1ZXN0ID0oXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGxldCBrZXkgPSB1cmwudG9TdHJpbmcoKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIGNhbmNlbChrZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlcSA9IGh0dHAuZ2V0KHVybC50b1N0cmluZygpKVxuICAgICAgICAudGltZW91dCh7XG4gICAgICAgICAgICByZXNwb25zZTogNjAwMDAsXG4gICAgICAgICAgICBkZWFkbGluZTogNjAwMDAsXG4gICAgICAgIH0pXG4gICAgICAgIC5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSlcblxuICAgICAgICBzY2hlZHVsZShrZXksIHJlcSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHV0UmVxdWVzdCA9IChcbiAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICBlbmRwb2ludCxcbiAgICBwYXlsb2FkLFxuICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zID0ge30pID0+ICggZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYocGF5bG9hZCA9PSBudWxsKVxuICAgICAgICAgICAgcGF5bG9hZCA9IHt9O1xuICAgICAgICBodHRwLnB1dCh1cmwudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIC5zZW5kKHBheWxvYWQpXG4gICAgICAgICAgICAuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpXG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVxdWVzdCA9IChcbiAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICBlbmRwb2ludCxcbiAgICBwYXlsb2FkLFxuICAgIGVycm9ySGFuZGxlciAgPSBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcykgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZihwYXlsb2FkID09IG51bGwpXG4gICAgICAgICAgICBwYXlsb2FkID0ge307XG5cbiAgICAgICAgaHR0cC5kZWxldGUodXJsKVxuICAgICAgICAgICAgLnNlbmQocGF5bG9hZClcbiAgICAgICAgICAgIC5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcG9zdFJlcXVlc3QgPSAoXG4gICAgICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgICAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIHBheWxvYWQsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcyA9IHt9KSA9PiAoZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICBsZXQgcmVxdWVzdCA9IGh0dHAucG9zdCh1cmwpO1xuXG4gICAgICAgIGlmKHBheWxvYWQgIT0gbnVsbClcbiAgICAgICAgICAgIHJlcXVlc3Quc2VuZChwYXlsb2FkKTtcbiAgICAgICAgZWxzZSAvLyB0byBiZSBhIHNpbXBsZSBDT1JTIHJlcXVlc3RcbiAgICAgICAgICAgIHJlcXVlc3Quc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuXG4gICAgICAgIHJlcXVlc3QuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3RGaWxlID0gKFxuICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgIHJlY2VpdmVBY3Rpb25DcmVhdG9yLFxuICAgIGVuZHBvaW50LFxuICAgIGZpbGUsXG4gICAgZmlsZU1ldGFkYXRhID0ge30sXG4gICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcmVxID0gaHR0cC5wb3N0KHVybClcbiAgICAgICAgICAgICAgICAgICAgLmF0dGFjaCgnZmlsZScsIGZpbGUpO1xuXG4gICAgICAgIGlmKCFpc09iamVjdEVtcHR5KGZpbGVNZXRhZGF0YSkpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVNZXRhZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZmlsZU1ldGFkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgcmVxLmZpZWxkKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXEuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dEZpbGUgPSAoXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgZmlsZSA9IG51bGwsXG4gICAgZmlsZU1ldGFkYXRhID0ge30sXG4gICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcmVxID0gaHR0cC5wdXQodXJsKTtcblxuICAgICAgICBpZihmaWxlICE9IG51bGwpe1xuICAgICAgICAgICAgcmVxLmF0dGFjaCgnZmlsZScsIGZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzT2JqZWN0RW1wdHkoZmlsZU1ldGFkYXRhKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU1ldGFkYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmaWxlTWV0YWRhdGFba2V5XTtcbiAgICAgICAgICAgICAgICByZXEuZmllbGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcS5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEVycm9ySGFuZGxlciA9IChlcnIsIHJlcykgPT4gKGRpc3BhdGNoKSA9PiB7XG4gICAgbGV0IGJvZHkgPSByZXMuYm9keTtcbiAgICBsZXQgdGV4dCA9ICcnO1xuICAgIGlmKGJvZHkgaW5zdGFuY2VvZiBPYmplY3Qpe1xuICAgICAgICBpZihib2R5Lmhhc093blByb3BlcnR5KCdtZXNzYWdlJykpXG4gICAgICAgICAgICB0ZXh0ID0gYm9keS5tZXNzYWdlO1xuICAgIH1cbiAgICBTd2FsLmZpcmUocmVzLnN0YXR1c1RleHQsIHRleHQsIFwiZXJyb3JcIik7XG59XG5cbmV4cG9ydCBjb25zdCByZXNwb25zZUhhbmRsZXIgPVxuICAgICggZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QgKSA9PlxuICAgIChlcnIsIHJlcykgPT4ge1xuICAgIGlmIChlcnIgfHwgIXJlcy5vaykge1xuICAgICAgICBpZihlcnJvckhhbmRsZXIpIHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcihlcnIsIHJlcykoZGlzcGF0Y2gsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVqZWN0KHsgZXJyLCByZXMsIGRpc3BhdGNoLCBzdGF0ZSB9KVxuICAgIH1cbiAgICBsZXQganNvbiA9IHJlcy5ib2R5O1xuICAgIGlmKHR5cGVvZiByZWNlaXZlQWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBkaXNwYXRjaChyZWNlaXZlQWN0aW9uQ3JlYXRvcih7cmVzcG9uc2U6IGpzb259KSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHtyZXNwb25zZToganNvbn0pO1xuICAgIH1cbiAgICBkaXNwYXRjaChyZWNlaXZlQWN0aW9uQ3JlYXRvcik7XG4gICAgcmV0dXJuIHJlc29sdmUoe3Jlc3BvbnNlOiBqc29ufSk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGZldGNoRXJyb3JIYW5kbGVyID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgbGV0IGNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgbGV0IG1zZyA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJFUlJPUlwiLCBULnRyYW5zbGF0ZShcImVycm9ycy51c2VyX25vdF9hdXRoelwiKSwgXCJ3YXJuaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgVC50cmFuc2xhdGUoXCJlcnJvcnMuc2Vzc2lvbl9leHBpcmVkXCIpLCBcImVycm9yXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDEyOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgbXNnLCBcIndhcm5pbmdcIik7XG4gICAgICAgIGNhc2UgNTAwOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgVC50cmFuc2xhdGUoXCJlcnJvcnMuc2VydmVyX2Vycm9yXCIpLCBcImVycm9yXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZldGNoUmVzcG9uc2VIYW5kbGVyID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHNob3dNZXNzYWdlID0gKHNldHRpbmdzLCBjYWxsYmFjayA9IHt9KSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcblxuICAgIFN3YWwuZmlyZShzZXR0aW5ncykudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUgJiYgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93U3VjY2Vzc01lc3NhZ2UgPSAoaHRtbCkgPT4gKGRpc3BhdGNoKSA9PiB7XG4gICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6IFQudHJhbnNsYXRlKFwiZ2VuZXJhbC5kb25lXCIpLFxuICAgICAgICBodG1sOiBodG1sLFxuICAgICAgICB0eXBlOiAnc3VjY2VzcydcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkRmlsZUJ5Q29udGVudCA9IChmaWxlbmFtZSwgY29udGVudCwgbWltZSkgPT4ge1xuICAgIGxldCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxpbmsudGV4dENvbnRlbnQgPSAnZG93bmxvYWQnO1xuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICBsaW5rLmhyZWYgPSBgZGF0YToke21pbWV9LCR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpfWBcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcbiAgICBsaW5rLmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldENTViA9IChlbmRwb2ludCwgcGFyYW1zLCBmaWxlbmFtZSwgaGVhZGVyID0gbnVsbCkgPT4gKGRpc3BhdGNoKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuXG4gICAgcmV0dXJuIGZldGNoKHVybC50b1N0cmluZygpKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKGNzdikgPT4ge1xuICAgICAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG5cbiAgICAgICAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBjc3YgPSBoZWFkZXIgKyAnXFxyXFxyJyArIGNzdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvd25sb2FkRmlsZUJ5Q29udGVudChmaWxlbmFtZSwgY3N2LCAndGV4dC9jc3Y7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJhd0NTViA9IChlbmRwb2ludCwgcGFyYW1zLCBoZWFkZXIgPSBudWxsKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgcmV0dXJuIGZldGNoKHVybC50b1N0cmluZygpKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKGNzdikgPT4ge1xuICAgICAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgICAgIGNzdiA9IGhlYWRlciArICdcXHJcXHInICsgY3N2O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNzdjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlc2NhcGVGaWx0ZXJWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCBcIlxcXFwsXCIpO1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvOy9nLCBcIlxcXFw7XCIpO1xuICAgIHJldHVybiB2YWx1ZTtcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0bydcblxuZXhwb3J0IGNvbnN0IGZpbmRFbGVtZW50UG9zID0gKG9iaikgPT4ge1xuICAgIHZhciBjdXJ0b3AgPSAtNzA7XG4gICAgaWYgKG9iai5vZmZzZXRQYXJlbnQpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY3VydG9wICs9IG9iai5vZmZzZXRUb3A7XG4gICAgICAgIH0gd2hpbGUgKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpO1xuICAgICAgICByZXR1cm4gW2N1cnRvcF07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGVwb2NoVG9Nb21lbnQgPSAoYXRpbWUpID0+IHtcbiAgICBpZighYXRpbWUpIHJldHVybiBhdGltZTtcbiAgICBhdGltZSA9IGF0aW1lICogMTAwMDtcbiAgICByZXR1cm4gbW9tZW50KGF0aW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlcG9jaFRvTW9tZW50VGltZVpvbmUgPSAoYXRpbWUsIHRpbWVfem9uZSkgPT4ge1xuICAgIGlmKCFhdGltZSkgcmV0dXJuIGF0aW1lO1xuICAgIGF0aW1lID0gYXRpbWUgKiAxMDAwO1xuICAgIHJldHVybiBtb21lbnQoYXRpbWUpLnR6KHRpbWVfem9uZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RXBvY2ggPSAoYXRpbWUsIGZvcm1hdCA9ICdNL0QvWVlZWSBoOm1tIGEnKSA9PiB7XG4gICAgaWYoIWF0aW1lKSByZXR1cm4gYXRpbWU7XG4gICAgcmV0dXJuIGVwb2NoVG9Nb21lbnQoYXRpbWUpLmZvcm1hdChmb3JtYXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IG9iamVjdFRvUXVlcnlTdHJpbmcgPSAob2JqKSA9PiB7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoc3RyICE9IFwiXCIpIHtcbiAgICAgICAgICAgIHN0ciArPSBcIiZcIjtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0ga2V5ICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmFja1VSTCA9ICgpID0+IHtcbiAgICBsZXQgdXJsICAgICAgPSBVUkkod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGxldCBxdWVyeSAgICA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgbGV0IGZyYWdtZW50ID0gdXJsLmZyYWdtZW50KCk7XG4gICAgbGV0IGJhY2tVcmwgID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiBudWxsO1xuICAgIGlmKGZyYWdtZW50ICE9IG51bGwgJiYgZnJhZ21lbnQgIT0gJycpe1xuICAgICAgICBiYWNrVXJsICs9IGAjJHtmcmFnbWVudH1gO1xuICAgIH1cbiAgICByZXR1cm4gYmFja1VybDtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGdldEF1dGhDYWxsYmFjayA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9jYWxsYmFja2A7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRMb2NhdGlvbiA9ICgpID0+IHtcbiAgICBsZXQgbG9jYXRpb24gPSAnJztcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG9uIGlmcmFtZVxuICAgICAgICBpZiAod2luZG93LnRvcClcbiAgICAgICAgICAgIGxvY2F0aW9uID0gd2luZG93LnRvcC5sb2NhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9yaWdpbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBhdGhOYW1lID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudEhyZWYgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkVXNlckdyb3VwcyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LkFMTE9XRURfVVNFUl9HUk9VUFMgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQVBJQmFzZVVybCA9IChyZWxhdGl2ZVVybCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5BUElfQkFTRV9VUkx9JHtyZWxhdGl2ZVVybH1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbGBgO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dE9uTG9jYWxTdG9yYWdlID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5LCByZW1vdmVJdCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCB2YWwgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgaWYocmVtb3ZlSXQpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGdldEZyb21Mb2NhbFN0b3JhZ2UgcmVtb3Zpbmcga2V5ICR7a2V5fWApO1xuICAgICAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5KSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmNsZWFyaW5nX3Nlc3Npb25fc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSA9ICh2YWwpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSA9IHZhbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXJMYW5ndWFnZSA9ICgpID0+IHtcbiAgICBsZXQgbGFuZ3VhZ2UgPSAnZW4nO1xuICAgIGlmKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxhbmd1YWdlID0gKG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlc1swXSkgfHwgbmF2aWdhdG9yLmxhbmd1YWdlIHx8IG5hdmlnYXRvci51c2VyTGFuZ3VhZ2U7XG4gICAgfVxuICAgIHJldHVybiBsYW5ndWFnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb0Vycm9yID0gKGVycm9ycykgPT4ge1xuICAgIGlmKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdEVycm9yID0gT2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgICAgICAgY29uc3QgZmlyc3ROb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlyc3RFcnJvcik7XG4gICAgICAgIGlmIChmaXJzdE5vZGUpIHdpbmRvdy5zY3JvbGxUbygwLCBmaW5kRWxlbWVudFBvcyhmaXJzdE5vZGUpKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaGFzRXJyb3JzID0gKGZpZWxkLCBlcnJvcnMpID0+IHtcbiAgICBpZihmaWVsZCBpbiBlcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yc1tmaWVsZF07XG4gICAgfVxuICAgIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFsbG93RXF1YWwgPSAob2JqZWN0MSwgb2JqZWN0MikgPT4ge1xuICAgIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXMob2JqZWN0MSk7XG4gICAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyhvYmplY3QyKTtcblxuICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQga2V5IG9mIGtleXMxKSB7XG4gICAgICAgIGlmIChvYmplY3QxW2tleV0gIT09IG9iamVjdDJba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgYXJyYXlzRXF1YWwgPSAoYTEsIGEyKSA9PlxuICAgIGExLmxlbmd0aCA9PT0gYTIubGVuZ3RoICYmIGExLmV2ZXJ5KChvLCBpZHgpID0+IHNoYWxsb3dFcXVhbChvLCBhMltpZHhdKSk7XG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKG9iaikgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBiYXNlNjRVUkxFbmNvZGUgPSAoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgICAgLnJlcGxhY2UoLz0vZywgJycpXG59XG5cbmV4cG9ydCBjb25zdCBzaGEyNTYgPSAoYnVmZmVyKSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShidWZmZXIpLmRpZ2VzdCgpXG59XG5cbmV4cG9ydCBjb25zdCByZXRyeVByb21pc2UgPSBhc3luYyAoXG4gICAgY2IsXG4gICAgbWF4TnVtYmVyT2ZSZXRyaWVzID0gM1xuKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhOdW1iZXJPZlJldHJpZXM7IGkrKykge1xuICAgICAgICBpZiAoYXdhaXQgY2IoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCB7ZmV0Y2hFcnJvckhhbmRsZXIsIGZldGNoUmVzcG9uc2VIYW5kbGVyLCBlc2NhcGVGaWx0ZXJWYWx1ZSB9IGZyb20gXCIuL2FjdGlvbnNcIjtcbmltcG9ydCB7Z2V0QWNjZXNzVG9rZW59IGZyb20gJy4uL2NvbXBvbmVudHMvc2VjdXJpdHkvbWV0aG9kcyc7XG5pbXBvcnQge2J1aWxkQVBJQmFzZVVybH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5leHBvcnQgY29uc3QgUkVDRUlWRV9DT1VOVFJJRVMgID0gJ1JFQ0VJVkVfQ09VTlRSSUVTJztcbmNvbnN0IGNhbGxEZWxheSA9IDUwMDsgLy9taWxpc2Vjb25kc1xuXG5leHBvcnQgY29uc3QgcXVlcnlNZW1iZXJzID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYGZ1bGxfbmFtZT1AJHtpbnB1dH0sZmlyc3RfbmFtZT1AJHtpbnB1dH0sbGFzdF9uYW1lPUAke2lucHV0fSxlbWFpbD1AJHtpbnB1dH1gKTtcbiAgICBsZXQgZXhwYW5kID0gYHRpY2tldHMscnN2cCxzY2hlZHVsZV9zdW1taXRfZXZlbnRzLGFsbF9hZmZpbGlhdGlvbnNgXG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvbWVtYmVycz9maWx0ZXI9JHtmaWx0ZXJzfSZleHBhbmQ9JHtleHBhbmR9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3VtbWl0cyA9IF8uZGVib3VuY2UoYXN5bmMgKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvYWxsP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3BlYWtlcnMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYGZ1bGxfbmFtZT1AJHtpbnB1dH0sZmlyc3RfbmFtZT1AJHtpbnB1dH0sbGFzdF9uYW1lPUAke2lucHV0fSxlbWFpbD1AJHtpbnB1dH1gKTtcbiAgICBsZXQgYXBpVXJsID0gYC9hcGkvdjFgO1xuXG4gICAgaWYgKHN1bW1pdElkKSB7XG4gICAgICAgIGFwaVVybCArPSBgL3N1bW1pdHMvJHtzdW1taXRJZH1gO1xuICAgIH1cblxuICAgIGFwaVVybCArPSBgL3NwZWFrZXJzP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufSZleHBhbmQ9bWVtYmVyLHJlZ2lzdHJhdGlvbl9yZXF1ZXN0YDtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChhcGlVcmwpKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5VGFncyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgYXBpVXJsID0gYC9hcGkvdjFgO1xuICAgIGxldCBmaWx0ZXIgPSBlbmNvZGVVUklDb21wb25lbnQoYHRhZz1AJHtpbnB1dH1gKTtcblxuICAgIGlmIChzdW1taXRJZCkge1xuICAgICAgICBhcGlVcmwgKz0gYC9zdW1taXRzLyR7c3VtbWl0SWR9L3RyYWNrLXRhZy1ncm91cHMvYWxsL2FsbG93ZWQtdGFncz9maWx0ZXI9JHtmaWx0ZXJ9JmV4cGFuZD10YWcsdHJhY2tfdGFnX2dyb3VwYDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcGlVcmwgKz0gYC90YWdzP2ZpbHRlcj0ke2ZpbHRlcn1gO1xuICAgIH1cblxuICAgIGFwaVVybCArPSBgJm9yZGVyPXRhZyZwYWdlPTEmcGVyX3BhZ2U9NTAmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YDtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChhcGlVcmwpKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGlmIChzdW1taXRJZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCh0ID0+IHQudGFnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlUcmFja3MgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlciA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L3RyYWNrcz9maWx0ZXI9JHtmaWx0ZXJ9Jm9yZGVyPW5hbWUmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlUcmFja0dyb3VwcyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVyID0gaW5wdXQgPyBlbmNvZGVVUklDb21wb25lbnQoYGZpbHRlcj1uYW1lPUAke2lucHV0fWApIDogJyc7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS90cmFjay1ncm91cHM/b3JkZXI9bmFtZSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn0mJHtmaWx0ZXJ9YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlFdmVudHMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIG9ubHlQdWJsaXNoZWQgPSBmYWxzZSwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgYmFzZVVybCA9IGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vZXZlbnRzYCArIChvbmx5UHVibGlzaGVkID8gJy9wdWJsaXNoZWQnIDogJycpO1xuICAgIGxldCBmaWx0ZXIgPSBlbmNvZGVVUklDb21wb25lbnQoYHRpdGxlPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAke2Jhc2VVcmx9P2ZpbHRlcj0ke2ZpbHRlcn0mb3JkZXI9dGl0bGUmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlHcm91cHMgPSBfLmRlYm91bmNlKGFzeW5jIChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgdGl0bGU9QCR7aW5wdXR9LGNvZGU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvZ3JvdXBzP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5Q29tcGFuaWVzID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvY29tcGFuaWVzP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuICAgIFxuICAgIGxldCBhY2Nlc3NUb2tlbjtcblxuICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGFwaVVybCA9IFVSSShgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L3JlZ2lzdHJhdGlvbi1jb21wYW5pZXNgKTtcbiAgICBhcGlVcmwuYWRkUXVlcnkoJ2FjY2Vzc190b2tlbicsIGFjY2Vzc1Rva2VuKTtcbiAgICBhcGlVcmwuYWRkUXVlcnkoJ29yZGVyJywnbmFtZScpXG5cbiAgICBpZihpbnB1dCkge1xuICAgICAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICAgICAgYXBpVXJsLmFkZFF1ZXJ5KCdmaWx0ZXJbXScsIGBuYW1lPUAke2lucHV0fWApO1xuICAgIH1cblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChhcGlVcmwudG9TdHJpbmcoKSkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlTcG9uc29ycyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgY29tcGFueV9uYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vc3BvbnNvcnM/ZmlsdGVyPSR7ZmlsdGVyc30mZXhwYW5kPWNvbXBhbnksc3BvbnNvcnNoaXAmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlBY2Nlc3NMZXZlbHMgPSBfLmRlYm91bmNlKChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vYWNjZXNzLWxldmVsLXR5cGVzP2ZpbHRlcj0ke2ZpbHRlcnN9JiZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeU9yZ2FuaXphdGlvbnMgPSBfLmRlYm91bmNlKGFzeW5jIChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9vcmdhbml6YXRpb25zP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IGdldExhbmd1YWdlTGlzdCA9IChjYWxsYmFjaywgc2lnbmFsKSA9PiB7XG4gICAgcmV0dXJuIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS9wdWJsaWMvdjEvbGFuZ3VhZ2VzYCksIHtzaWduYWx9KVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb3VudHJ5TGlzdCA9IChjYWxsYmFjaywgc2lnbmFsKSA9PiB7XG5cbiAgICByZXR1cm4gZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3B1YmxpYy92MS9jb3VudHJpZXNgKSwge3NpZ25hbH0pXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufTtcblxudmFyIGdlb2NvZGVyO1xuXG5leHBvcnQgY29uc3QgZ2VvQ29kZUFkZHJlc3MgPSAoYWRkcmVzcykgPT4ge1xuXG4gICAgaWYgKCFnZW9jb2RlcikgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcblxuICAgIC8vIHJldHVybiBhIFByb21pc2VcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3QpIHtcbiAgICAgICAgZ2VvY29kZXIuZ2VvY29kZSggeyAnYWRkcmVzcyc6IGFkZHJlc3N9LCBmdW5jdGlvbihyZXN1bHRzLCBzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gZ29vZ2xlLm1hcHMuR2VvY29kZXJTdGF0dXMuT0spIHtcbiAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHJlc3VsdHMgdXBvbiBhIHN1Y2Nlc3NmdWwgc3RhdHVzXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmVqZWN0IHN0YXR1cyB1cG9uIHVuLXN1Y2Nlc3NmdWwgc3RhdHVzXG4gICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlb0NvZGVMYXRMbmcgPSAobGF0LCBsbmcpID0+IHtcblxuICAgIGlmICghZ2VvY29kZXIpIGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XG5cbiAgICB2YXIgbGF0bG5nID0ge2xhdDogcGFyc2VGbG9hdChsYXQpLCBsbmc6IHBhcnNlRmxvYXQobG5nKX07XG4gICAgLy8gcmV0dXJuIGEgUHJvbWlzZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCkge1xuICAgICAgICBnZW9jb2Rlci5nZW9jb2RlKCB7ICdsb2NhdGlvbic6IGxhdGxuZ30sIGZ1bmN0aW9uKHJlc3VsdHMsIHN0YXR1cykge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBnb29nbGUubWFwcy5HZW9jb2RlclN0YXR1cy5PSykge1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgcmVzdWx0cyB1cG9uIGEgc3VjY2Vzc2Z1bCBzdGF0dXNcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZWplY3Qgc3RhdHVzIHVwb24gdW4tc3VjY2Vzc2Z1bCBzdGF0dXNcbiAgICAgICAgICAgICAgICByZWplY3Qoc3RhdHVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlUaWNrZXRUeXBlcyA9IF8uZGVib3VuY2UoKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGxldCBhY2Nlc3NUb2tlbiA9IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS90aWNrZXQtdHlwZXM/ZmlsdGVyPSR7ZmlsdGVyc30mJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuXG4iLCJleHBvcnQgY29uc3QgQ2hlY2tCb3hRdWVzdGlvblR5cGUgPSAnQ2hlY2tCb3gnO1xuZXhwb3J0IGNvbnN0IENvbWJvQm94UXVlc3Rpb25UeXBlID0gJ0NvbWJvQm94J1xuZXhwb3J0IGNvbnN0IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSA9ICdDaGVja0JveExpc3QnO1xuZXhwb3J0IGNvbnN0IFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSA9ICdSYWRpb0J1dHRvbkxpc3QnO1xuZXhwb3J0IGNvbnN0IEFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlID0gW0NvbWJvQm94UXVlc3Rpb25UeXBlLCBDaGVja0JveExpc3RRdWVzdGlvblR5cGUsIFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZV07XG5leHBvcnQgY29uc3QgQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kID0gJ0FuZCc7XG5leHBvcnQgY29uc3QgQW5zd2VyVmFsdWVzT3BlcmF0b3JfT3IgPSAnT3InO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwgPSAnRXF1YWwnO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb25kaXRpb25fTm90RXF1YWwgPSAnTm90RXF1YWwnO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlfVmlzaWJsZSA9ICdWaXNpYmxlJztcbmV4cG9ydCBjb25zdCBNYWluUXVlc3Rpb25DbGFzc1R5cGUgPSAnTWFpblF1ZXN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlc3Rpb25zU2V0IHtcblxuICAgIGNvbnN0cnVjdG9yKHF1ZXN0aW9ucywgYW5zd2VycyA9IFtdKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gcXVlc3Rpb25zO1xuICAgICAgICB0aGlzLm9yaWdpbmFsQW5zd2VycyA9IGFuc3dlcnNcbiAgICAgICAgdGhpcy5hbnN3ZXJzID0gW107XG4gICAgICAgIC8vIG1hcCBhbnN3ZXJzIHRvIGFzc29jaWF0ZSBhcnJheVxuICAgICAgICBmb3IgKGxldCBhIG9mIHRoaXMub3JpZ2luYWxBbnN3ZXJzKVxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2EucXVlc3Rpb25faWRdID0gYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5TmFtZSA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkID0ge31cbiAgICAgICAgLy8gYXNzb2NpYXRpdmUgYXJyYXkgKCBydWxlIGlkICwgcnVsZSk7XG4gICAgICAgIHRoaXMucnVsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbnMoKTtcbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeU5hbWVbcS5uYW1lXSA9IHE7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkW3BhcnNlSW50KHEuaWQpXSA9IHE7XG4gICAgICAgIGlmKHEuaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgciBvZiBxLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucnVsZXNbcGFyc2VJbnQoci5pZCldID0gcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGZvciAobGV0IHEgb2YgdGhpcy5xdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWxsb3dzVmFsdWVzID0gKHEpID0+IHtcbiAgICAgICAgcmV0dXJuIEFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlLmluY2x1ZGVzKHEudHlwZSk7XG4gICAgfVxuXG4gICAgX2FsbG93c1ZhbHVlID0gKHEsIGFuc3dlcikgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBhbnN3ZXIudmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiBwYXJzZUludCh2KSk7XG4gICAgICAgIGZvciAobGV0IGF2IG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXEudmFsdWVzLm1hcChlID0+IGUuaWQpLmluY2x1ZGVzKGF2KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2dldEFuc3dlckZvciA9IChxKSA9PiB7XG4gICAgICAgIGxldCBpZCA9IE51bWJlci5pc0ludGVnZXIocSkgPyBxIDogcS5pZDtcbiAgICAgICAgbGV0IGEgPSB0aGlzLmFuc3dlcnNbaWRdIHx8IG51bGw7XG4gICAgICAgIHJldHVybiBhID8gYSA6IG51bGw7XG4gICAgfVxuXG4gICAgX2hhc1ZhbHVlID0gKGFuc3dlcikgPT4ge1xuICAgICAgICByZXR1cm4gYW5zd2VyLnZhbHVlICE9PSAnJztcbiAgICB9XG5cbiAgICBfYW5zd2VyQ29udGFpbnMgPSAoYW5zd2VyLCB2YWwpID0+IHtcbiAgICAgICAgcmV0dXJuIGFuc3dlci52YWx1ZS5zcGxpdCgnLCcpLmluY2x1ZGVzKHZhbCk7XG4gICAgfVxuXG4gICAgX2lzU3ViUXVlc3Rpb25WaXNpYmxlID0gKHJ1bGUpID0+IHtcbiAgICAgICAgbGV0IGluaXRpYWxDb25kaXRpb24gPSBydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyZW50UXVlc3Rpb25BbnN3ZXIgPSB0aGlzLl9nZXRBbnN3ZXJGb3IocnVsZS5wYXJlbnRfcXVlc3Rpb25faWQpO1xuICAgICAgICBpZiAoIXBhcmVudFF1ZXN0aW9uQW5zd2VyKSB7XG4gICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gcnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbDoge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhbnN3ZXJWYWx1ZSBvZiBydWxlLmFuc3dlcl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiAmJiB0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uIHx8IHRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbDoge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhbnN3ZXJWYWx1ZSBvZiBydWxlLmFuc3dlcl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiAmJiAhdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiB8fCAhdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWwgdmlzaWJpbGl0eSBjaGVja1xuICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5ID09PSBWaXNpYmlsaXR5X1Zpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpbml0aWFsQ29uZGl0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIHJldHVybiAhaW5pdGlhbENvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBfaXNBbnN3ZXJlZCA9IChxKSA9PiB7XG4gICAgICAgIGNvbnN0IGFuc3dlciA9IHRoaXMuX2dldEFuc3dlckZvcihxKTtcblxuICAgICAgICBpZiAocS5jbGFzcyA9PT0gTWFpblF1ZXN0aW9uQ2xhc3NUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIXEubWFuZGF0b3J5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlKGFuc3dlcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbGxvd3NWYWx1ZXMocSkgJiYgIXRoaXMuX2FsbG93c1ZhbHVlKHEsIGFuc3dlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBwYXJlbnQgcnVsZXMgLi4uXG4gICAgICAgIGZvciAobGV0IHJ1bGVJZCBvZiBxLnBhcmVudF9ydWxlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSh0aGlzLnJ1bGVzW3J1bGVJZF0pKSAvLyBpZiBxdWVzdGlvbiBpcyBub3QgdmlzaWJsZSBza2lwIGl0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXEubWFuZGF0b3J5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlKGFuc3dlcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbGxvd3NWYWx1ZXMocSkgJiYgIXRoaXMuX2FsbG93c1ZhbHVlKHEsIGFuc3dlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfY2hlY2tRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB0aGlzLl9pc0Fuc3dlcmVkKHEpO1xuICAgICAgICBpZihxLmhhc093blByb3BlcnR5KCdzdWJfcXVlc3Rpb25fcnVsZXMnKSlcbiAgICAgICAgICAgIGZvciAobGV0IHJ1bGUgb2YgcS5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayByZWN1cnNpdmUgYWxsIHRoZSB0cmVlIHRpbGwgbGVhdmVzIC4uLlxuICAgICAgICAgICAgICAgIHJlcyA9IHJlcyAmJiB0aGlzLl9jaGVja1F1ZXN0aW9uKHJ1bGUuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBfZm9ybWF0UXVlc3Rpb25BbnN3ZXIgPSAocXVlc3Rpb24pID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9O1xuICAgICAgICBsZXQgdXNlckFuc3dlciA9IHRoaXMub3JpZ2luYWxBbnN3ZXJzLmZpbmQoYSA9PiBhLnF1ZXN0aW9uX2lkID09PSBxdWVzdGlvbi5pZCk/LnZhbHVlO1xuXG4gICAgICAgIGlmKHVzZXJBbnN3ZXIpIHtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBDaGVja0JveFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHVzZXJBbnN3ZXIgPT09ICdmYWxzZScgPyBmYWxzZSA6ICEhdXNlckFuc3dlcjtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGUgfHwgcXVlc3Rpb24udHlwZSA9PT0gQ29tYm9Cb3hRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSBwYXJzZUludCh1c2VyQW5zd2VyKTtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBDaGVja0JveExpc3RRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSB1c2VyQW5zd2VyLnNwbGl0KCcsJykubWFwKGFuc1ZhbCA9PiBwYXJzZUludChhbnNWYWwpKSB8fCBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc1txdWVzdGlvbi5uYW1lXSA9ICB1c2VyQW5zd2VyIHx8ICcnO1xuICAgICAgICBpZihxdWVzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIHF1ZXN0aW9uLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlY3Vyc2l2ZSBhbGwgdGhlIHRyZWUgdGlsbCBsZWF2ZXMgLi4uXG4gICAgICAgICAgICAgICAgbGV0IHJlczEgPSB0aGlzLl9mb3JtYXRRdWVzdGlvbkFuc3dlcihydWxlLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgcmVzID0gey4uLnJlcywgLi4ucmVzMX07XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZm9ybWF0QW5zd2VycyA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzMSA9IHRoaXMuX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyKHEpO1xuICAgICAgICAgICAgcmVzID0gey4uLnJlcywuLi5yZXMxfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY29tcGxldGVkID0gKCkgPT4ge1xuICAgICAgICBsZXQgcmVzID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgcSBvZiB0aGlzLnF1ZXN0aW9ucykge1xuICAgICAgICAgICAgcmVzID0gcmVzICYmIHRoaXMuX2NoZWNrUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBnZXRRdWVzdGlvbkJ5TmFtZSA9IChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQnlOYW1lW25hbWVdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0UXVlc3Rpb25CeUlkID0gKGlkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQnlJZFtwYXJzZUludChpZCldIHx8IG51bGw7XG4gICAgfVxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImF3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJicm93c2VyLXRhYnMtbG9ja1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZHJvcHpvbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZHJvcHpvbmUvZGlzdC9kcm9wem9uZS5jc3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXh0ZW5kXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImkxOG4tcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaWR0b2tlbi12ZXJpZmllclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJpbW11dGFiaWxpdHktaGVscGVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb21lbnQtdGltZXpvbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kYXRldGltZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kbmRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG5kLWh0bWw1LWJhY2tlbmRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRyb3B6b25lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWZpbmFsLWZvcm1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZ29vZ2xlLW1hcHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1yZWR1eFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1ydGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY0NyZWF0YWJsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3QvbGliL2NvbXBvbmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtdG9vbHRpcFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdXBlcmFnZW50XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN3ZWV0YWxlcnQyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVyaWpzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInZpZGVvLmpzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInZpZGVvLmpzL2Rpc3QvdmlkZW8tanMuY3NzXCIpOyJdLCJzb3VyY2VSb290IjoiIn0=
11127
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9hamF4bG9hZGVyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2F0dGVuZGFuY2UtdHJhY2tlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jaXJjbGUtYnV0dG9uL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2NpcmNsZS1idXR0b24vaW5kZXgubW9kdWxlLnNjc3M/NGMyNiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jbG9jay5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leGNsdXNpdmUtd3JhcHBlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZm9ybXMvcnN2cC1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2Zvcm1zL3NpbXBsZS1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyYWdtZW4tcGFyc2VyLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyZWUtdGV4dC1zZWFyY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZ29vZ2xlLW1hcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWNjZXNzLWxldmVscy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWN0aW9uLWRyb3Bkb3duL2FjdGlvbi1kcm9wZG93bi5sZXNzP2Q3NDMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2FjdGlvbi1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY2hlY2tib3gtbGlzdC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY29tcGFueS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXIubGVzcz84Y2Q1Iiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9kYXRldGltZXBpY2tlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2VkaXRvci1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZXZlbnQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2ZyZWUtbXVsdGktdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZ3JvdXAtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vT3B0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vb3B0aW9uZ3JvdXAubGVzcz9hNDAxIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9sYW5ndWFnZS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvbWVtYmVyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9vcmdhbml6YXRpb24taW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JhZGlvLWxpc3QuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JlZ2lzdHJhdGlvbi1jb21wYW55LWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcGVha2VyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcG9uc29yLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zdW1taXQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RhZy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dGFyZWEtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RpY2tldC10eXBlcy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2Ryb3B6b25lLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaWNvbi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaW5kZXgubGVzcz9hZDBlIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvZmlsZS5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L2pwZy5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9tb3YucG5nIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvbXA0LnBuZyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L3BkZi5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC91cGxvYWQubGVzcz80NjNmIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3Jhdy1odG1sL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3Rpb25zL3BhbmVsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L2Fic3RyYWN0LWF1dGgtY2FsbGJhY2stcm91dGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2VjdXJpdHkvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zZWN1cml0eS9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L3Nlc3Npb24tY2hlY2tlci9vcC1zZXNzaW9uLWNoZWNrZXIuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2ltcGxlLWxpbmstbGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zaW1wbGUtbGluay1saXN0L3NpbXBsZS1saW5rLWxpc3QubGVzcz8xYzlkIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3N1bW1pdC1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zdW1taXQtZHJvcGRvd24vc3VtbWl0LWRyb3Bkb3duLmxlc3M/ZThiNSIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlUm93LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLWVkaXRhYmxlL2VkaXRhYmxlLXRhYmxlLmNzcz83ZTBjIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL1NlbGVjdGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL3NlbGVjdGFibGUtdGFibGUuY3NzPzVlM2QiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVBY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNvcnRhYmxlL1NvcnRhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zb3J0YWJsZS90YWJsZS1zb3J0YWJsZS5jc3M/ZjhmMiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9BY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9UYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvVGFibGVSb3cuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY3NzPzM3OTMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdXNlLWZpdC10ZXh0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3ZpZGVvLXN0cmVhbS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvaTE4biBzeW5jIF5cXC5cXC8uKlxcLmpzb24kIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVyeS1hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVzdGlvbnMtc2V0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImF3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImJyb3dzZXItdGFicy1sb2NrXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiZHJvcHpvbmVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJkcm9wem9uZS9kaXN0L2Ryb3B6b25lLmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImV4dGVuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImkxOG4tcmVhY3RcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImlkdG9rZW4tdmVyaWZpZXJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpbW11dGFiaWxpdHktaGVscGVyXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibW9tZW50LXRpbWV6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZGF0ZXRpbWVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmRcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmQtaHRtbDUtYmFja2VuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRvbVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRyb3B6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZmluYWwtZm9ybVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWdvb2dsZS1tYXBzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXJlZHV4XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtcnRlXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvY29tcG9uZW50c1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXRvb2x0aXBcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJzdXBlcmFnZW50XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwic3dlZXRhbGVydDJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJ1cmlqc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInZpZGVvLmpzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwidmlkZW8uanMvZGlzdC92aWRlby1qcy5jc3NcIiJdLCJuYW1lcyI6WyJsYW5ndWFnZSIsImdldEN1cnJlbnRVc2VyTGFuZ3VhZ2UiLCJsZW5ndGgiLCJzcGxpdCIsIlQiLCJzZXRUZXh0cyIsInJlcXVpcmUiLCJlIiwiQWpheExvYWRlciIsInNob3ciLCJyZWxhdGl2ZSIsImNvbG9yIiwic2l6ZSIsImNoaWxkcmVuIiwic3R5bGVzIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJ6SW5kZXgiLCJtYXJnaW4iLCJjdXJzb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0b3AiLCJsZWZ0Iiwic3R5bGVTcGlubmVyIiwiZm9udFNpemUiLCJzdHlsZVNwaW5uZXJDb250YWluZXIiLCJ0ZXh0QWxpZ24iLCJyaWdodCIsImJvdHRvbSIsInN0eWxlQmFja2dyb3VuZCIsImJhY2tncm91bmQiLCJvcGFjaXR5IiwiQXR0ZW5kYW5jZVRyYWNrZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImFwaUJhc2VVcmwiLCJzdW1taXRJZCIsInNvdXJjZUlkIiwic291cmNlTmFtZSIsInByb3BzIiwibG9jYXRpb24iLCJnZXRMb2NhdGlvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QWNjZXNzVG9rZW4iLCJodHRwIiwicHV0Iiwic2VuZCIsImFjY2Vzc190b2tlbiIsInR5cGUiLCJzb3VyY2VfaWQiLCJlbmQiLCJjb25zb2xlIiwibG9nIiwicG9zdCIsIm5hdmlnYXRvciIsInNlbmRCZWFjb24iLCJ1bmRlZmluZWQiLCJ3aW5kb3ciLCJlbmNvZGVVUklDb21wb25lbnQiLCJocmVmIiwiY29tcG9uZW50RGlkTW91bnQiLCJ0cmFja0VudGVyIiwib25CZWZvcmVVbmxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ0cmFja0xlYXZlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlciIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJkZWZhdWx0UHJvcHMiLCJpc0xpdmUiLCJldmVudCIsIm5vd1V0YyIsImhhc0VuZGVkIiwiZW5kX2RhdGUiLCJoYXNTdGFydGVkIiwic3RhcnRfZGF0ZSIsIkNpcmNsZUJ1dHRvbiIsImlzU2NoZWR1bGVkIiwiYWRkVG9TY2hlZHVsZSIsInJlbW92ZUZyb21TY2hlZHVsZSIsImVudGVyQ2xpY2siLCJhbHdheXNTaG93RW50ZXIiLCJpc0xpdmVOb3ciLCJidXR0b25DbGFzcyIsImljb25DbGFzcyIsIm9uQ2xpY2siLCJoYW5kbGVDbGljayIsImV2IiwiYWN0aW9uIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJlbnRlciIsImFkZGVkIiwiYWRkIiwiY2lyY2xlQnV0dG9uIiwib2JqZWN0IiwiYm9vbCIsImZ1bmMiLCJDbG9jayIsImNvbnN0cnVjdG9yIiwicmVzcG9uc2UiLCJmZXRjaCIsImNhdGNoIiwiZXJyIiwianNvbiIsInRpbWVzdGFtcCIsInN0YXRlIiwib25UaWNrIiwic2V0U3RhdGUiLCJmcmFnbWVudFBhcnNlciIsIkZyYWdtZW50UGFyc2VyIiwiaW50ZXJ2YWwiLCJ0aW1lem9uZSIsIm5vdyIsIm5vd1FTIiwiZ2V0UGFyYW0iLCJtb21lbnRRUyIsIm1vbWVudCIsInR6IiwiaXNWYWxpZCIsInZhbHVlT2YiLCJsb2NhbCIsInVuaXgiLCJzZXJ2ZXJUaW1lIiwiZ2V0U2VydmVyVGltZSIsImxvY2FsQWZ0ZXIiLCJzZXRJbnRlcnZhbCIsInRpY2siLCJjbGVhckludGVydmFsIiwibWFyZ2luVG9wIiwiZm9ybWF0IiwiRXhjbHVzaXZlIiwic2hvd0ZpZWxkIiwiYmluZCIsIm5hbWUiLCJleGNsdXNpdmVTZWN0aW9ucyIsIkVYQ0xVU0lWRV9TRUNUSU9OUyIsImluY2x1ZGVzIiwiRXh0cmFRdWVzdGlvbnNGb3JtIiwiZXh0cmFRdWVzdGlvbnMiLCJ1c2VyQW5zd2VycyIsIm9uQW5zd2VyQ2hhbmdlcyIsImNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lIiwicXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZSIsImZvcm1SZWYiLCJyZWFkT25seSIsImRlYnVnIiwiYnV0dG9uVGV4dCIsInN1Ym1pdCIsInF1ZXN0aW9uUmVmIiwidXNlUmVmIiwiYW5zd2VycyIsInNldEFuc3dlcnMiLCJ1c2VTdGF0ZSIsImZvcm1FcnJvcnMiLCJzZXRGb3JtRXJyb3JzIiwidXNlRWZmZWN0IiwiZm9ybWF0VXNlckFuc3dlcnMiLCJxcyIsIlF1ZXN0aW9uc1NldCIsImZvcm1hdEFuc3dlcnMiLCJDb25kaXRpb24iLCJ3aGVuIiwicnVsZSIsInZhbHVlIiwiaW5wdXQiLCJjaGVja1Zpc2liaWxpdHkiLCJjaGVja1J1bGUiLCJFcnJvciIsImVycm9yIiwidmFsdWVzIiwiYW5zd2VyX3ZhbHVlcyIsIkFycmF5IiwiaXNBcnJheSIsInJlcyIsImFud2VyX3ZhbHVlc19vcGVyYXRvciIsImZvckVhY2giLCJ2IiwicGFyc2VJbnQiLCJ0b1N0cmluZyIsInJ1bGVSZXN1bHQiLCJ2aXNpYmlsaXR5IiwidmlzaWJpbGl0eV9jb25kaXRpb24iLCJjdXJyZW50Iiwic3ViX3F1ZXN0aW9uIiwiaWQiLCJyZW5kZXJRdWVzdGlvbiIsInEiLCJxdWVzdGlvblZhbHVlcyIsImVsIiwibWFuZGF0b3J5IiwibGFiZWwiLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJvbkNoYW5nZSIsInBsYWNlaG9sZGVyIiwic3ViX3F1ZXN0aW9uX3J1bGVzIiwibWFwIiwiciIsInZhbCIsImlzVmlzaWJsZSIsInZhbGlkYXRlUXVlc3Rpb24iLCJlcnJvcnMiLCJoYXNPd25Qcm9wZXJ0eSIsIm9uU3VibWl0IiwidmFsaWRhdGUiLCJPYmplY3QiLCJrZXlzIiwiaGFuZGxlU3VibWl0IiwiZm9ybSIsInN1Ym1pdHRpbmciLCJwcmlzdGluZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcnJheSIsIm9uZU9mVHlwZSIsInNoYXBlIiwiYW55IiwiUnN2cEZvcm0iLCJxdWVzdGlvbnMiLCJxdWVzdGlvbl9pZCIsImhhbmRsZUNoYW5nZSIsImhhc0Vycm9ycyIsImZpbmQiLCJhIiwiY2xhc3NfbmFtZSIsImlzX2NvdW50cnlfc2VsZWN0b3IiLCJpc19tdWx0aXNlbGVjdCIsImVtcHR5X3N0cmluZyIsInRhcmdldCIsImFuc3dlciIsImZpZWxkIiwiaXNfbWFuZGF0b3J5IiwiU2ltcGxlRm9ybSIsImVudGl0eSIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsInNuYXBzaG90Iiwic2Nyb2xsVG9FcnJvciIsInNoYWxsb3dFcXVhbCIsImlzRW1wdHkiLCJjaGVja2VkIiwiY3JlYXRlRmllbGQiLCJmaWVsZHMiLCJmIiwidHJhbnNsYXRlIiwib3JpZ2luYWxIYXNoIiwiaGFzaCIsImNvbnZlcnRUb0hhc2giLCJzdHJIYXNoIiwic3Vic3RyIiwidG9Mb3dlckNhc2UiLCJwYXJhbXMiLCJwYXJhbSIsInRyaW0iLCJjbGVhclBhcmFtcyIsImtleSIsImdldFBhcmFtcyIsImRlbGV0ZVBhcmFtIiwiZGVsZXRlUGFyYW1zIiwic2V0UGFyYW0iLCJzZXJpYWxpemUiLCJGcmVlVGV4dFNlYXJjaCIsIm9uU2VhcmNoQ2xpY2siLCJvbkNsZWFyQ2xpY2siLCJvbktleVByZXNzZWQiLCJkb0ZpbHRlcmluZyIsInRlcm0iLCJvblNlYXJjaCIsImNvZGUiLCJrZXlDb2RlIiwid2hpY2giLCJNQVAiLCJkZWZhdWx0Wm9vbSIsImRlZmF1bHRDZW50ZXIiLCJsYXQiLCJsbmciLCJvcHRpb25zIiwibWluWm9vbSIsIm1heFpvb20iLCJHb29nbGVNYXBXcmFwcGVyIiwid2l0aEdvb2dsZU1hcCIsIm9uTWFwTG9hZCIsInpvb20iLCJjZW50ZXIiLCJvbk1hcENoYW5nZSIsIm9uTWFwQ2xpY2siLCJzaG93TWFya2VycyIsIm1hcmtlcnMiLCJtYXJrZXIiLCJvblRvZ2dsZUluZm9XaW5kb3ciLCJvbk1hcmtlckRyYWciLCJkcmFnZ2FibGUiLCJpc0luZm9XaW5kb3dPcGVuIiwiR01hcCIsImhhbmRsZU1hcExvYWQiLCJoYW5kbGVNYXBDaGFuZ2UiLCJoYW5kbGVNYXJrZXJEcmFnIiwiaGFuZGxlTWFwQ2xpY2siLCJuZXdfbWFya2VycyIsImFycmF5c0VxdWFsIiwib2xkX21hcmtlcnNfc3RyIiwibSIsInNvcnQiLCJqb2luIiwibmV3X21hcmtlcnNfc3RyIiwibWFya2VyQm91bmRzIiwiZ29vZ2xlIiwibWFwcyIsIkxhdExuZ0JvdW5kcyIsIm1hcmtlcl9sb2MiLCJMYXRMbmciLCJleHRlbmQiLCJfbWFwQ29tcG9uZW50IiwiZml0Qm91bmRzIiwidmlzaWJsZV9tYXJrZXJzIiwiZmlsdGVyIiwiZ2V0Qm91bmRzIiwiY29udGFpbnMiLCJvbkNoYW5nZUNhbGxiYWNrIiwiaGFuZGxlTWFya2VyQ2xpY2siLCJtYXJrZXJfaWQiLCJpc19vcGVuIiwib25NYXJrZXJEcmFnZ2VkIiwibGF0TG5nIiwiQWNjZXNzTGV2ZWxzSW5wdXQiLCJnZXRBY2Nlc3NMZXZlbHMiLCJnZXRPcHRpb25WYWx1ZSIsImdldE9wdGlvbkxhYmVsIiwiYWNjZXNzTGV2ZWwiLCJjYWxsYmFjayIsIlByb21pc2UiLCJyZXNvbHZlIiwicXVlcnlBY2Nlc3NMZXZlbHMiLCJtdWx0aSIsInJlc3QiLCJpc011bHRpIiwiaGFzX2Vycm9yIiwiQWN0aW9uRHJvcGRvd24iLCJhY3Rpb25MYWJlbCIsInNtYWxsRGRsIiwic21hbGxCdG4iLCJ0aGVWYWx1ZSIsIm9wdCIsIkNoZWNrYm94TGlzdCIsIm90aGVyVmFsdWUiLCJvcCIsIm90aGVyQ2hlY2tlZCIsImhhbmRsZU90aGVyQ0JDaGFuZ2UiLCJvcHRpb25WYWx1ZXMiLCJ0aGVWYWwiLCJpc05hTiIsInB1c2giLCJkaXNhYmxlZCIsImlubGluZSIsImh0bWwiLCJhbGxvd090aGVyIiwiaXNEaXNhYmxlZCIsInN0eWxlIiwicGFkZGluZ0xlZnQiLCJtYXJnaW5MZWZ0IiwiZmxvYXQiLCJDb21wYW55SW5wdXQiLCJoYW5kbGVOZXciLCJnZXRDb21wYW5pZXMiLCJ0cmFuc2xhdGVWYWx1ZSIsIm5ld1ZhbHVlIiwib25DcmVhdGUiLCJ0cmFuc2xhdGVPcHRpb25zIiwibmV3T3B0aW9ucyIsImMiLCJxdWVyeUNvbXBhbmllcyIsImFsbG93Q3JlYXRlIiwiQXN5bmNDb21wb25lbnQiLCJBc3luY0NyZWF0YWJsZVNlbGVjdCIsIkFzeW5jU2VsZWN0IiwiQ291bnRyeURyb3Bkb3duIiwic2V0T3B0aW9ucyIsImFib3J0Q29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImdldENvdW50cnlMaXN0Iiwic2lnbmFsIiwiYWJvcnQiLCJjb3VudHJ5TGlzdCIsImlzb19jb2RlIiwiQ291bnRyeUlucHV0IiwiRGF0ZVRpbWVQaWNrZXIiLCJpc1ZhbGlkRGF0ZSIsImRhdGUiLCJpc01vbWVudCIsImN1cnJlbnREYXRlIiwic2VsZWN0ZWREYXRlIiwidmFsaWRhdGlvbiIsImFmdGVyIiwiYmVmb3JlIiwiaXNCZWZvcmUiLCJpc0FmdGVyIiwiYWZ0ZXJEYXRlIiwic3VidHJhY3QiLCJiZWZvcmVEYXRlIiwiaW5wdXRQcm9wcyIsImlucHV0RGlzYWJsZWQiLCJ0aW1lIiwiYXV0b0NvbXBsZXRlIiwiRHJvcGRvd24iLCJzZWxlY3Rpb24iLCJjbGVhcmFibGUiLCJvdmVycmlkZUNTUyIsImlzQ2xlYXJhYmxlIiwic2VsZWN0Q2xhc3NOYW1lIiwic2VsZWN0U3R5bGVzIiwibWVudSIsIlRleHRFZGl0b3IiLCJSaWNoVGV4dEVkaXRvciIsImRlZmF1bHQiLCJlZGl0b3JWYWx1ZSIsImNyZWF0ZUVtcHR5VmFsdWUiLCJjdXJyZW50VmFsdWUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJzZXRDb250ZW50RnJvbVN0cmluZyIsIm9sZEVkaXRvclZhbHVlIiwib2xkQ29udGVudFN0YXRlIiwiZ2V0RWRpdG9yU3RhdGUiLCJnZXRDdXJyZW50Q29udGVudCIsIm5ld0NvbnRlbnRTdGF0ZSIsInN0cmluZ1ZhbHVlIiwiRXZlbnRJbnB1dCIsImdldEV2ZW50cyIsInN1bW1pdCIsIm9ubHlQdWJsaXNoZWQiLCJxdWVyeUV2ZW50cyIsIm9wdGlvbiIsInRpdGxlIiwiRnJlZU11bHRpVGV4dElucHV0IiwiaW5wdXRWYWx1ZSIsImhhbmRsZUlucHV0Q2hhbmdlIiwiaGFuZGxlS2V5RG93biIsImxpbWl0IiwiRHJvcGRvd25JbmRpY2F0b3IiLCJHcm91cElucHV0IiwiZ2V0R3JvdXBzIiwicXVlcnlHcm91cHMiLCJPcHRpb25Hcm91cCIsImkiLCJHcm91cGVkRHJvcGRvd24iLCJMYW5ndWFnZUlucHV0Iiwic2hvdWxkVXNlSWQiLCJnZXRMYW5ndWFnZUxpc3QiLCJsYW5ndWFnZUxpc3QiLCJsIiwiTWVtYmVySW5wdXQiLCJnZXRNZW1iZXJzIiwibWVtYmVyIiwiZmlyc3RfbmFtZSIsImxhc3RfbmFtZSIsInF1ZXJ5TWVtYmVycyIsIk9yZ2FuaXphdGlvbklucHV0IiwiZ2V0T3JnYW5pemF0aW9ucyIsIm9yZyIsInF1ZXJ5T3JnYW5pemF0aW9ucyIsIlJhZGlvTGlzdCIsImdldExhYmVsIiwic2ltcGxlIiwiZGVzY3JpcHRpb24iLCJSZWdpc3RyYXRpb25Db21wYW55SW5wdXQiLCJvbkVycm9yIiwic2V0VGhlVmFsdWUiLCJmcmVlSW5wdXQiLCJzZXRGcmVlSW5wdXQiLCJzZXRJbnB1dFZhbHVlIiwiaXNNdWx0aU9wdGlvbmFsIiwic2V0SXNNdWx0aU9wdGlvbmFsIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsImV2ZW50VmFsdWUiLCJuZXdWYWx1ZVN0YXRlIiwiaGFuZGxlSW5wdXRDbGVhciIsImV2dCIsIm90aGVyT3B0aW9uIiwicXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMiLCJwYWRkaW5nUmlnaHQiLCJTcGVha2VySW5wdXQiLCJnZXRTcGVha2VycyIsInNwZWFrZXJJZCIsImhpc3RvcnkiLCJxdWVyeVNwZWFrZXJzIiwic3BlYWtlciIsIk11bHRpVmFsdWVMYWJlbCIsImRhdGEiLCJzIiwiU3BvbnNvcklucHV0IiwiZ2V0U3BvbnNvcnMiLCJxdWVyeVNwb25zb3JzIiwiY29tcGFueSIsInNwb25zb3JzaGlwIiwiU3VtbWl0SW5wdXQiLCJnZXRTdW1taXRzIiwicXVlcnlTdW1taXRzIiwiVGFnSW5wdXQiLCJ0IiwidGFnIiwiZ2V0VGFncyIsIm5leHRWYWx1ZSIsInF1ZXJ5VGFncyIsIm9yZGVyZWRUYWdzIiwiYiIsIklucHV0IiwiVGV4dEFyZWEiLCJUaWNrZXRUeXBlc0lucHV0IiwiZ2V0VGlja2V0VHlwZXMiLCJ0aWNrZXRUeXBlIiwicXVlcnlUaWNrZXRUeXBlcyIsIkRyb3B6b25lIiwiRHJvcHpvbmVKUyIsImZpbGVzIiwib25VcGxvYWRDb21wbGV0ZSIsImdldERqc0NvbmZpZyIsImRlZmF1bHRzIiwidXJsIiwiY29uZmlnIiwicG9zdFVybCIsImRqc0NvbmZpZyIsImFjY2VwdCIsImZpbGUiLCJkb25lIiwibWF4RmlsZXMiLCJ1cGxvYWRDb3VudCIsImF1dG9EaXNjb3ZlciIsImV2ZW50SGFuZGxlcnMiLCJkcm9wIiwiaW5mbyIsImRyb3B6b25lTm9kZSIsImRyb3B6b25lU2VsZWN0b3IiLCJSZWFjdERPTSIsImZpbmRET01Ob2RlIiwiZHJvcHpvbmUiLCJzZXR1cEV2ZW50cyIsImdldEFjdGl2ZUZpbGVzIiwicXVldWVEZXN0cm95IiwiZGVzdHJveUludGVydmFsIiwiZGVzdHJveSIsImRqc0NvbmZpZ09iaiIsInBvc3RVcmxDb25maWdPYmoiLCJpY29ucyIsInNob3dGaWxldHlwZUljb24iLCJpY29uRmlsZXR5cGVzIiwiZXZlbnRIYW5kbGVyIiwicHJvdG90eXBlIiwiY2FsbCIsIm9uIiwiZmlsZUluRmlsZXMiLCJzcGxpY2UiLCJwcm9ncmVzcyIsImJ5dGVzU2VudCIsInByZXZpZXdFbGVtZW50IiwiZWxlbSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ4aHIiLCJmb3JtRGF0YSIsImFwcGVuZCIsIl90aGlzIiwiZHJvcHpvbmVPbkxvYWQiLCJvbmxvYWQiLCJ1cGxvYWRSZXNwb25zZSIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwib2ZmIiwiSWNvbiIsImZpbGV0eXBlIiwiVXBsb2FkSW5wdXRWMiIsIm9uUmVtb3ZlIiwibWVkaWFUeXBlIiwidGltZU91dCIsImFsbG93ZWRFeHQiLCJhbGxvd2VkX2V4dGVuc2lvbnMiLCJleHQiLCJtYXhTaXplIiwibWF4X3NpemUiLCJjYW5VcGxvYWQiLCJkanNDb25maWdTZXQiLCJwYXJhbU5hbWUiLCJtYXhGaWxlc2l6ZSIsInRpbWVvdXQiLCJjaHVua2luZyIsInJldHJ5Q2h1bmtzIiwicGFyYWxsZWxDaHVua1VwbG9hZHMiLCJhZGRSZW1vdmVMaW5rcyIsImFjY2VwdGVkRmlsZXMiLCJjb21wb25lbnRDb25maWciLCJtZWRpYV90eXBlIiwibWVkaWFfdXBsb2FkIiwicmVtb3ZlZGZpbGUiLCJwcml2YXRlX3VybCIsInB1YmxpY191cmwiLCJmaWxlbmFtZSIsIlVwbG9hZElucHV0Iiwic2hvd19yZW1vdmUiLCJsb2dvX3ByZXZpZXciLCJwcmV2aWV3IiwiZmlsZUhhc1ByZXZpZXciLCJvbkRyb3AiLCJmaWxlUmVqZWN0aW9ucyIsImhhbmRsZVVwbG9hZCIsImhhbmRsZUVycm9yIiwiaGFuZGxlUmVtb3ZlIiwic2hvd1ZlaWwiLCJoaWRlVmVpbCIsImZpbGVOYW1lIiwicGF0dGVybiIsInRlc3QiLCJpY29uIiwiZmlsZV9pY29uIiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsInBkZl9pY29uIiwibW92X2ljb24iLCJtcDRfaWNvbiIsIlJhd0hUTUwiLCJfX2h0bWwiLCJQYW5lbCIsInRoZUlkIiwidGhlQ2xhc3MiLCJBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlIiwiaXNzdWVyIiwiYXVkaWVuY2UiLCJpZF90b2tlbl9pc192YWxpZCIsImVycm9yX2Rlc2NyaXB0aW9uIiwiZmxvdyIsImdldE9BdXRoMkZsb3ciLCJfaW1wbGljaXRGbG93IiwiaWRfdG9rZW4iLCJzZXNzaW9uX3N0YXRlIiwiZXhwaXJlc19pbiIsImV4dHJhY3RIYXNoUGFyYW1zIiwiZG9Mb2dpbiIsImdldEN1cnJlbnRQYXRoTmFtZSIsInZhbGlkYXRlSWRUb2tlbiIsIm9uVXNlckF1dGgiLCJwYXJlbnQiLCJwb3N0TWVzc2FnZSIsIm9yaWdpbiIsIl9jb2RlRmxvdyIsIlVSSSIsImdldEN1cnJlbnRIcmVmIiwicXVlcnkiLCJzZWFyY2giLCJiYWNrVXJsIiwiZW1pdEFjY2Vzc1Rva2VuIiwidGhlbiIsInJlZnJlc2hfdG9rZW4iLCJlcnJvcjIiLCJlcnJvcl9kZXNjcmlwdGlvbjIiLCJSRVNQT05TRV9UWVBFX0lNUExJQ0lUIiwiUkVTUE9OU0VfVFlQRV9DT0RFIiwicGFyc2VRdWVyeSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRQcm9wcyIsIm5leHRTdGF0ZSIsIm5leHRDb250ZXh0IiwiZnJhZ21lbnQiLCJsZW5naHQiLCJidWlsZFF1ZXJ5IiwiX2NhbGxiYWNrIiwiX3JlZGlyZWN0MkVycm9yIiwiU0VUX0xPR0dFRF9VU0VSIiwiTE9HT1VUX1VTRVIiLCJSRVFVRVNUX1VTRVJfSU5GTyIsIlJFQ0VJVkVfVVNFUl9JTkZPIiwiQ0xFQVJfU0VTU0lPTl9TVEFURSIsIlVQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyIsIlNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCIsIlNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQiLCJTRVNTSU9OX1NUQVRFX1NUQVRVU19FUlJPUiIsIlVQREFURV9VU0VSX0lORk8iLCJpZFRva2VuIiwic2Vzc2lvblN0YXRlIiwiZXhwaXJlc0luIiwicmVmcmVzaFRva2VuIiwiZGlzcGF0Y2giLCJzdG9yZUF1dGhJbmZvIiwicGF5bG9hZCIsImRvTG9nb3V0IiwiZ2V0U3RhdGUiLCJnZXRVc2VySW5mbyIsImV4cGFuZCIsImVycm9ySGFuZGxlciIsIkFsbG93ZWRVc2VyR3JvdXBzIiwiZ2V0QWxsb3dlZFVzZXJHcm91cHMiLCJsb2dnZWRVc2VyU3RhdGUiLCJhdXRoRXJyb3JIYW5kbGVyIiwic3RhcnRMb2FkaW5nIiwiZ2V0UmVxdWVzdCIsImNyZWF0ZUFjdGlvbiIsImJ1aWxkQVBJQmFzZVVybCIsInN0b3BMb2FkaW5nIiwiZXJyb3JfbWVzc2FnZSIsInNob3dNZXNzYWdlIiwiaW5pdExvZ091dCIsImFsbG93ZWRHcm91cHMiLCJncm91cHMiLCJncm91cCIsImlkeCIsInVwZGF0ZVVzZXJJbmZvIiwidXBkYXRlZE1lbWJlciIsInVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cyIsIm5ld1N0YXR1cyIsInNlc3Npb25TdGF0ZVN0YXR1cyIsInJlcXVlc3QiLCJsb2NrIiwiTG9jayIsIkdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSIsIk5PTkNFX0xFTiIsIkFDQ0VTU19UT0tFTl9TS0VXX1RJTUUiLCJBVVRIX0lORk8iLCJOT05DRSIsIlBLQ0UiLCJnZXRBdXRoVXJsIiwicHJvbXB0IiwidG9rZW5JZEhpbnQiLCJwcm92aWRlciIsIm9hdXRoMkNsaWVudElkIiwiZ2V0T0F1dGgyQ2xpZW50SWQiLCJyZWRpcmVjdFVyaSIsImdldEF1dGhDYWxsYmFjayIsImJhc2VVcmwiLCJnZXRPQXV0aDJJRFBCYXNlVXJsIiwic2NvcGVzIiwiZ2V0T0F1dGgyU2NvcGVzIiwiZW5jb2RlVVJJIiwibm9uY2UiLCJjcmVhdGVOb25jZSIsInB1dE9uTG9jYWxTdG9yYWdlIiwicGtjZSIsImNyZWF0ZVBLQ0VDb2RlcyIsImNvZGVDaGFsbGVuZ2UiLCJnZXRMb2dvdXRVcmwiLCJwb3N0TG9nT3V0VXJpIiwiZ2V0T3JpZ2luIiwibGVuIiwicG9zc2libGUiLCJjaGFyQXQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJnZXRDdXJyZW50TG9jYXRpb24iLCJkb0xvZ2luQmFzaWNMb2dpbiIsImNvZGVWZXJpZmllciIsImJhc2U2NFVSTEVuY29kZSIsInJhbmRvbUJ5dGVzIiwic2hhMjU2IiwiQnVmZmVyIiwiZnJvbSIsImNyZWF0ZWRBdCIsIkRhdGUiLCJjb2RlUGFpciIsImdldEZyb21Mb2NhbFN0b3JhZ2UiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIm1lc3NhZ2UiLCJjbGVhckFjY2Vzc1Rva2VuIiwicmV0cnlQcm9taXNlIiwiYWNxdWlyZUxvY2siLCJhdXRoSW5mbyIsImdldEF1dGhJbmZvIiwiYWNjZXNzVG9rZW5VcGRhdGVkQXQiLCJyZWxlYXNlTG9jayIsInRpbWVFbGFwc2VkU2VjcyIsInVzZU9BdXRoMlJlZnJlc2hUb2tlbiIsImNsZWFyQXV0aEluZm8iLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJzdGF0dXMiLCJjdXJyZW50TG9jYXRpb24iLCJzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSIsInN0YXR1c1RleHQiLCJmb3JtZXJBdXRoSW5mbyIsInJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UiLCJnZXRJZFRva2VuIiwiT0FVVEgyX0NMSUVOVF9JRCIsIk9BVVRIMl9GTE9XIiwiQm9vbGVhbiIsIk9BVVRIMl9VU0VfUkVGUkVTSF9UT0tFTiIsIklEUF9CQVNFX1VSTCIsIlNDT1BFUyIsInZlcmlmaWVyIiwiSWRUb2tlblZlcmlmaWVyIiwic3RvcmVkTm9uY2UiLCJqd3QiLCJkZWNvZGUiLCJhbGciLCJoZWFkZXIiLCJraWQiLCJhdWQiLCJpc3MiLCJleHAiLCJuYmYiLCJ0bm9uY2UiLCJwYXNzd29yZGxlc3NTdGFydCIsImNvbm5lY3Rpb24iLCJlbWFpbCIsInBob25lX251bWJlciIsInJlcSIsInJlamVjdCIsInBhc3N3b3JkbGVzc0xvZ2luIiwib3RwIiwiQ0hFQ0tfU0VTU0lPTl9JTlRFUlZBTCIsIk9QU2Vzc2lvbkNoZWNrZXIiLCJvcEZyYW1lX3NyYyIsInJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMiLCJyZWNlaXZlTWVzc2FnZSIsInJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkIiwic2V0VGltZXIiLCJjaGVja1Nlc3Npb24iLCJvblNldHVwQ2hlY2tTZXNzaW9uUlAiLCJycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQiLCJvcEZyYW1lIiwicnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lIiwic2V0T1BGcmFtZVJlZiIsImVsZW1lbnQiLCJzZXRDaGVja1Nlc3Npb25TdGF0ZUZyYW1lUmVmIiwiaXNMb2dnZWRVc2VyIiwiZnJhbWUiLCJjb250ZW50RG9jdW1lbnQiLCJyZXN1bHRVcmwiLCJVUkwiLCJ0b0xvY2FsZVN0cmluZyIsImNsaWVudElkIiwidGFyZ2V0T3JpZ2luIiwiaWRwQmFzZVVybCIsImNvbnRlbnRXaW5kb3ciLCJzZXNzaW9uQ2hlY2tFbmRwb2ludCIsIlN0cmluZyIsImJvcmRlciIsIm1hcFN0YXRlVG9Qcm9wcyIsImNvbm5lY3QiLCJTaW1wbGVMaW5rTGlzdCIsImdldE9wdGlvbnMiLCJoYW5kbGVMaW5rIiwiZmlsdGVyT3B0aW9uIiwiZ2V0TmV3T3B0aW9uRGF0YSIsImlzVmFsaWROZXdPcHRpb24iLCJkZWZhdWx0T3B0aW9ucyIsImFjdGlvbnMiLCJvcHRpb25MYWJlbCIsInNlbGVjdFZhbHVlIiwic2VsZWN0T3B0aW9ucyIsImxhYmVsS2V5Iiwib3B0aW9uRm91bmQiLCJvbkNyZWF0ZVRhZyIsImNhbmRpZGF0ZSIsImFsbG93RHVwbGljYXRlcyIsImNvbHVtbnMiLCJkaXNhYmxlZEFkZCIsInZhbHVlS2V5IiwidGFibGVPcHRpb25zIiwiZGVsZXRlIiwiZWRpdCIsImN1c3RvbSIsIml0ZW1BIiwic29ydENvbCIsIml0ZW1CIiwiU3VtbWl0RHJvcGRvd24iLCJzdW1taXRWYWx1ZSIsInN1bW1pdHMiLCJhY3Rpb25DbGFzcyIsInN1bW1pdE9wdGlvbnMiLCJiaWdDbGFzcyIsIkVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCIsImlzX2VkaXRpbmciLCJvbkRlbGV0ZSIsIm9uU2F2ZSIsInNhdmUiLCJvbkVkaXQiLCJvbkNhbmNlbCIsImNhbmNlbCIsImNvbFdpZHRoIiwiY3JlYXRlUm93Iiwicm93Iiwic2hvdWxkVXNlVGV4dEFyZWEiLCJhY3Rpb25fYnV0dG9ucyIsImNlbGxzIiwiY29sIiwiY29sdW1uS2V5IiwiaXNfZWRpdCIsImNyZWF0ZU5ld1JvdyIsIm5ld19yb3ciLCJhZGROZXciLCJjZWxsX3ZhbHVlIiwiRWRpdGFibGVUYWJsZSIsInJvd3MiLCJlZGl0Um93Iiwic2F2ZVJvdyIsImRlbGV0ZUNsaWNrIiwib25DaGFuZ2VDZWxsIiwiZWRpdFJvd0NhbmNlbCIsInNhdmVOZXdSb3ciLCJoYW5kbGVOZXdDaGFuZ2UiLCJvbkNoYW5nZU5ld0NlbGwiLCJlZGl0aW5nX3JvdyIsIm5vQWxlcnQiLCJTd2FsIiwiZmlyZSIsInRleHQiLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY29uZmlybUJ1dHRvblRleHQiLCJyZXN1bHQiLCJyb3dJZHgiLCJmaW5kSW5kZXgiLCJ0YWJsZUNsYXNzIiwidGV4dEFyZWEiLCJ3YXJuIiwiRWRpdGFibGVUYWJsZUNlbGwiLCJFZGl0YWJsZVRhYmxlSGVhZGluZyIsIkVkaXRhYmxlVGFibGVSb3ciLCJldmVuIiwiU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwiLCJoYW5kbGVBY3Rpb24iLCJzaG91bGREaXNwbGF5QWN0aW9uIiwidG9vbHRpcCIsInNvcnRGdW5jIiwic29ydGFibGUiLCJzb3J0RGlyIiwiZ2V0U29ydERpciIsImNvbHVtbkluZGV4IiwiU2VsZWN0YWJsZVRhYmxlIiwic2VsZWN0ZWRJZHMiLCJvblNlbGVjdGVkQWxsIiwic2VsZWN0ZWRBbGwiLCJvblNvcnQiLCJhY3Rpb25zSGVhZGVyIiwiU2VsZWN0YWJsZVRhYmxlQ2VsbCIsImlzVmFsaWRFbGVtZW50IiwiU2VsZWN0YWJsZVRhYmxlSGVhZGluZyIsImhhbmRsZVNvcnQiLCJnZXRTb3J0Q2xhc3MiLCJTZWxlY3RhYmxlVGFibGVSb3ciLCJoYW5kbGVFZGl0IiwiaGFuZGxlU2VsZWN0Iiwib25TZWxlY3RlZCIsImNhbkVkaXQiLCJyb3dDbGFzcyIsIlNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCIsIlNvcnRhYmxlVGFibGUiLCJtb3ZlUm93IiwiZHJvcFJvdyIsImRyYWdJbmRleCIsImhvdmVySW5kZXgiLCJkcmFnUm93IiwidXBkYXRlIiwiJHNwbGljZSIsImluZGV4Iiwib3JkZXJGaWVsZCIsIm5ld09yZGVyIiwiJHNldCIsImRyb3BDYWxsYmFjayIsImFycmF5T2YiLCJEcmFnRHJvcENvbnRleHQiLCJIVE1MNUJhY2tlbmQiLCJTb3J0YWJsZVRhYmxlQ2VsbCIsIlNvcnRhYmxlVGFibGVIZWFkaW5nIiwicGFkZGluZyIsIm1hcmdpbkJvdHRvbSIsInJvd1NvdXJjZSIsImJlZ2luRHJhZyIsImVuZERyYWciLCJtb25pdG9yIiwiZGlkRHJvcCIsImRyb3BDYXJkIiwicm93VGFyZ2V0IiwiaG92ZXIiLCJjb21wb25lbnQiLCJnZXRJdGVtIiwiaG92ZXJCb3VuZGluZ1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJob3Zlck1pZGRsZVkiLCJjbGllbnRPZmZzZXQiLCJnZXRDbGllbnRPZmZzZXQiLCJob3ZlckNsaWVudFkiLCJ5IiwibW92ZUNhcmQiLCJTb3J0YWJsZVRhYmxlUm93IiwiaXNEcmFnZ2luZyIsImNvbm5lY3REcmFnU291cmNlIiwiY29ubmVjdERyb3BUYXJnZXQiLCJEcmFnU291cmNlIiwiZHJhZ1NvdXJjZSIsIkRyb3BUYXJnZXQiLCJkcm9wVGFyZ2V0IiwiQWN0aW9uc1RhYmxlQ2VsbCIsIlRhYmxlIiwiVGFibGVDZWxsIiwiVGFibGVIZWFkaW5nIiwiVGFibGVSb3ciLCJ1c2VGaXRUZXh0IiwibWluU2l6ZSIsIk1JTl9GT05UX1NJWkUiLCJNQVhfRk9OVF9TSVpFIiwiUkVTT0xVVElPTiIsInJlZiIsImZvbnRTaXplUHJldiIsImZvbnRTaXplTWF4IiwiZm9udFNpemVNaW4iLCJpc0RvbmUiLCJhYnMiLCJpc092ZXJmbG93Iiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsV2lkdGgiLCJvZmZzZXRXaWR0aCIsImlzQXNjIiwiZm9udFNpemVOZXciLCJkZWx0YSIsIm5ld01heCIsIm5ld01pbiIsIm1pbiIsIm1heCIsImxpbmVIZWlnaHQiLCJZb3V0dWJlVmlkZW9Db21wb25lbnQiLCJ2aWRlb1NyY1VSTCIsInZpZGVvVGl0bGUiLCJMaXZlVmlkZW9QbGF5ZXIiLCJwbGF5ZXIiLCJ2aWRlb2pzIiwidmlkZW9Ob2RlIiwiZGlzcG9zZSIsIm5vZGUiLCJWaWRlb1N0cmVhbSIsImxheW91dCIsImNoZWNrTGl2ZVZpZGVvIiwiaXNMaXZlVmlkZW8iLCJtYXRjaCIsInZpZGVvSnNPcHRpb25zIiwiYXV0b3BsYXkiLCJjb250cm9scyIsImZsdWlkIiwic291cmNlcyIsInNyYyIsIkdFTkVSSUNfRVJST1IiLCJSRVNFVF9MT0FESU5HIiwiU1RBUlRfTE9BRElORyIsIlNUT1BfTE9BRElORyIsIlZBTElEQVRFIiwiQ0xFQVJfTUVTU0FHRSIsIlNIT1dfTUVTU0FHRSIsInJlc2V0TG9hZGluZyIsInhocnMiLCJzY2hlZHVsZSIsImlzT2JqZWN0RW1wdHkiLCJvYmoiLCJtc2ciLCJjbGVhcmluZ19zZXNzaW9uX3N0YXRlIiwiaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSIsImVudHJpZXMiLCJyZXF1ZXN0QWN0aW9uQ3JlYXRvciIsInJlY2VpdmVBY3Rpb25DcmVhdG9yIiwiZW5kcG9pbnQiLCJkZWZhdWx0RXJyb3JIYW5kbGVyIiwicmVxdWVzdEFjdGlvblBheWxvYWQiLCJnZXQiLCJkZWFkbGluZSIsInJlc3BvbnNlSGFuZGxlciIsInB1dFJlcXVlc3QiLCJkZWxldGVSZXF1ZXN0IiwicG9zdFJlcXVlc3QiLCJzZXQiLCJwb3N0RmlsZSIsImZpbGVNZXRhZGF0YSIsImF0dGFjaCIsInB1dEZpbGUiLCJvayIsImZldGNoRXJyb3JIYW5kbGVyIiwiZmV0Y2hSZXNwb25zZUhhbmRsZXIiLCJzZXR0aW5ncyIsInNob3dTdWNjZXNzTWVzc2FnZSIsImRvd25sb2FkRmlsZUJ5Q29udGVudCIsImNvbnRlbnQiLCJtaW1lIiwibGluayIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInRleHRDb250ZW50IiwiZG93bmxvYWQiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJnZXRDU1YiLCJjc3YiLCJnZXRSYXdDU1YiLCJlc2NhcGVGaWx0ZXJWYWx1ZSIsImZpbmRFbGVtZW50UG9zIiwiY3VydG9wIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0VG9wIiwiZXBvY2hUb01vbWVudCIsImF0aW1lIiwiZXBvY2hUb01vbWVudFRpbWVab25lIiwidGltZV96b25lIiwiZm9ybWF0RXBvY2giLCJvYmplY3RUb1F1ZXJ5U3RyaW5nIiwic3RyIiwiZ2V0QmFja1VSTCIsInBhdGhuYW1lIiwiQUxMT1dFRF9VU0VSX0dST1VQUyIsInJlbGF0aXZlVXJsIiwiQVBJX0JBU0VfVVJMIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInJlbW92ZUl0IiwicmVtb3ZlSXRlbSIsImxhbmd1YWdlcyIsInVzZXJMYW5ndWFnZSIsImZpcnN0RXJyb3IiLCJmaXJzdE5vZGUiLCJnZXRFbGVtZW50QnlJZCIsInNjcm9sbFRvIiwib2JqZWN0MSIsIm9iamVjdDIiLCJrZXlzMSIsImtleXMyIiwiYTEiLCJhMiIsImV2ZXJ5IiwibyIsImJ1ZmZlciIsImNyZWF0ZUhhc2giLCJkaWdlc3QiLCJjYiIsIm1heE51bWJlck9mUmV0cmllcyIsIlJFQ0VJVkVfQ09VTlRSSUVTIiwiY2FsbERlbGF5IiwiXyIsImRlYm91bmNlIiwiZmlsdGVycyIsImFwaVVybCIsInF1ZXJ5VHJhY2tzIiwicXVlcnlUcmFja0dyb3VwcyIsImFkZFF1ZXJ5IiwiZ2VvY29kZXIiLCJnZW9Db2RlQWRkcmVzcyIsImFkZHJlc3MiLCJHZW9jb2RlciIsImdlb2NvZGUiLCJyZXN1bHRzIiwiR2VvY29kZXJTdGF0dXMiLCJPSyIsImdlb0NvZGVMYXRMbmciLCJsYXRsbmciLCJwYXJzZUZsb2F0IiwiQ2hlY2tCb3hRdWVzdGlvblR5cGUiLCJDb21ib0JveFF1ZXN0aW9uVHlwZSIsIkNoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSIsIlJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSIsIkFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlIiwiQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kIiwiQW5zd2VyVmFsdWVzT3BlcmF0b3JfT3IiLCJWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsIiwiVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbCIsIlZpc2liaWxpdHlfVmlzaWJsZSIsIk1haW5RdWVzdGlvbkNsYXNzVHlwZSIsInF1ZXN0aW9uQnlOYW1lIiwicXVlc3Rpb25CeUlkIiwicnVsZXMiLCJfcGFyc2VRdWVzdGlvbiIsImF2IiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiaW5pdGlhbENvbmRpdGlvbiIsImFuc3dlcl92YWx1ZXNfb3BlcmF0b3IiLCJwYXJlbnRRdWVzdGlvbkFuc3dlciIsIl9nZXRBbnN3ZXJGb3IiLCJwYXJlbnRfcXVlc3Rpb25faWQiLCJhbnN3ZXJWYWx1ZSIsIl9hbnN3ZXJDb250YWlucyIsImNsYXNzIiwiX2hhc1ZhbHVlIiwiX2FsbG93c1ZhbHVlcyIsIl9hbGxvd3NWYWx1ZSIsInJ1bGVJZCIsInBhcmVudF9ydWxlcyIsIl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSIsIl9pc0Fuc3dlcmVkIiwiX2NoZWNrUXVlc3Rpb24iLCJxdWVzdGlvbiIsInVzZXJBbnN3ZXIiLCJvcmlnaW5hbEFuc3dlcnMiLCJhbnNWYWwiLCJyZXMxIiwiX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyIiwiX3BhcnNlUXVlc3Rpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEsNkM7Ozs7Ozs7Ozs7O0FDQUEsZ0Q7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsNEM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7O0FDQUEsMkM7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEsb0Q7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEsMkM7Ozs7Ozs7Ozs7O0FDQUEsNkM7Ozs7Ozs7Ozs7O0FDQUEsOEM7Ozs7Ozs7Ozs7O0FDQUEsb0Y7Ozs7Ozs7Ozs7O0FDQUEsd0M7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEseUM7Ozs7Ozs7Ozs7O0FDQUEsbUQ7Ozs7Ozs7Ozs7O0FDQUEsNEQ7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEsd0Q7Ozs7Ozs7Ozs7O0FDQUEsMEM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsd0M7Ozs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7O0FDQUEscUM7Ozs7Ozs7Ozs7O0FDQUEsdUQiLCJmaWxlIjoiY29tcG9uZW50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9jb21wb25lbnRzLmpzXCIpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QnO1xuXG5pbXBvcnQgeyBBamF4TG9hZGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL2FqYXhsb2FkZXInO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi9jb21wb25lbnRzL3Jhdy1odG1sL2luZGV4JztcbmltcG9ydCBGcmVlVGV4dFNlYXJjaCBmcm9tICcuL2NvbXBvbmVudHMvZnJlZS10ZXh0LXNlYXJjaC9pbmRleCc7XG5pbXBvcnQgR01hcCBmcm9tICcuL2NvbXBvbmVudHMvZ29vZ2xlLW1hcC9pbmRleCc7XG5pbXBvcnQgRGF0ZVRpbWVQaWNrZXIgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9kYXRldGltZXBpY2tlci9pbmRleCdcbmltcG9ydCBHcm91cGVkRHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9ncm91cGVkLWRyb3Bkb3duL2luZGV4J1xuaW1wb3J0IFVwbG9hZElucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L2luZGV4J1xuaW1wb3J0IFVwbG9hZElucHV0VjIgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaW5kZXgnXG5pbXBvcnQgQ29tcGFueUlucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvY29tcGFueS1pbnB1dCdcbmltcG9ydCBTcG9uc29ySW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9zcG9uc29yLWlucHV0J1xuaW1wb3J0IE9yZ2FuaXphdGlvbklucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvb3JnYW5pemF0aW9uLWlucHV0J1xuaW1wb3J0IENvdW50cnlEcm9wZG93biBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2NvdW50cnktZHJvcGRvd24nXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9kcm9wZG93bidcbmltcG9ydCBUZXh0RWRpdG9yIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZWRpdG9yLWlucHV0J1xuaW1wb3J0IFRleHRBcmVhIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGV4dGFyZWEtaW5wdXQnXG5pbXBvcnQgRXZlbnRJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2V2ZW50LWlucHV0J1xuaW1wb3J0IEdyb3VwSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9ncm91cC1pbnB1dCdcbmltcG9ydCBNZW1iZXJJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL21lbWJlci1pbnB1dCdcbmltcG9ydCBTdW1taXRJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3N1bW1pdC1pbnB1dCdcbmltcG9ydCBTcGVha2VySW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9zcGVha2VyLWlucHV0J1xuaW1wb3J0IFRhZ0lucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGFnLWlucHV0J1xuaW1wb3J0IElucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dCdcbmltcG9ydCBQYW5lbCBmcm9tICcuL2NvbXBvbmVudHMvc2VjdGlvbnMvcGFuZWwnXG5pbXBvcnQgU2ltcGxlTGlua0xpc3QgZnJvbSAnLi9jb21wb25lbnRzL3NpbXBsZS1saW5rLWxpc3QvaW5kZXgnXG5pbXBvcnQgU3VtbWl0RHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL3N1bW1pdC1kcm9wZG93bi9pbmRleCdcbmltcG9ydCBUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvVGFibGUnXG5pbXBvcnQgU29ydGFibGVUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZSdcbmltcG9ydCBFZGl0YWJsZVRhYmxlIGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlJ1xuaW1wb3J0IFNlbGVjdGFibGVUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGUnXG5pbXBvcnQgU2ltcGxlRm9ybSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybXMvc2ltcGxlLWZvcm0nXG5pbXBvcnQgUnN2cEZvcm0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1zL3JzdnAtZm9ybSc7XG5pbXBvcnQgUmFkaW9MaXN0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvcmFkaW8tbGlzdCdcbmltcG9ydCBDaGVja2JveExpc3QgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9jaGVja2JveC1saXN0J1xuaW1wb3J0IEFjdGlvbkRyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvYWN0aW9uLWRyb3Bkb3duJ1xuaW1wb3J0IENvdW50cnlJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2NvdW50cnktaW5wdXQnXG5pbXBvcnQgTGFuZ3VhZ2VJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2xhbmd1YWdlLWlucHV0J1xuaW1wb3J0IEZyZWVNdWx0aVRleHRJbnB1dCBmcm9tIFwiLi9jb21wb25lbnRzL2lucHV0cy9mcmVlLW11bHRpLXRleHQtaW5wdXRcIjtcbmltcG9ydCBPUFNlc3Npb25DaGVja2VyIGZyb20gXCIuL2NvbXBvbmVudHMvc2VjdXJpdHkvc2Vzc2lvbi1jaGVja2VyL29wLXNlc3Npb24tY2hlY2tlclwiO1xuaW1wb3J0IEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGUgZnJvbSAgXCIuL2NvbXBvbmVudHMvc2VjdXJpdHkvYWJzdHJhY3QtYXV0aC1jYWxsYmFjay1yb3V0ZVwiO1xuaW1wb3J0IEV4Y2x1c2l2ZSBmcm9tIFwiLi9jb21wb25lbnRzL2V4Y2x1c2l2ZS13cmFwcGVyXCI7XG5pbXBvcnQgRnJhZ21lbnRQYXJzZXIgZnJvbSBcIi4vY29tcG9uZW50cy9mcmFnbWVuLXBhcnNlclwiO1xuaW1wb3J0IENsb2NrIGZyb20gXCIuL2NvbXBvbmVudHMvY2xvY2tcIjtcbmltcG9ydCBDaXJjbGVCdXR0b24gZnJvbSBcIi4vY29tcG9uZW50cy9jaXJjbGUtYnV0dG9uXCI7XG5pbXBvcnQgVmlkZW9TdHJlYW0gZnJvbSBcIi4vY29tcG9uZW50cy92aWRlby1zdHJlYW1cIjtcbmltcG9ydCBBdHRlbmRhbmNlVHJhY2tlciBmcm9tIFwiLi9jb21wb25lbnRzL2F0dGVuZGFuY2UtdHJhY2tlclwiO1xuaW1wb3J0IHtnZXRDdXJyZW50VXNlckxhbmd1YWdlfSBmcm9tICcuL3V0aWxzL21ldGhvZHMnO1xuaW1wb3J0IHVzZUZpdFRleHQgZnJvbSAnLi9jb21wb25lbnRzL3VzZS1maXQtdGV4dCc7XG5pbXBvcnQgQWNjZXNzTGV2ZWxzSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9hY2Nlc3MtbGV2ZWxzLWlucHV0JztcbmltcG9ydCBSZWdpc3RyYXRpb25Db21wYW55SW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9yZWdpc3RyYXRpb24tY29tcGFueS1pbnB1dCc7XG5pbXBvcnQgVGlja2V0VHlwZXNJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3RpY2tldC10eXBlcy1pbnB1dCc7XG5pbXBvcnQgRXh0cmFRdWVzdGlvbnNGb3JtIGZyb20gJy4vY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMnO1xuXG5sZXQgbGFuZ3VhZ2UgPSBnZXRDdXJyZW50VXNlckxhbmd1YWdlKCk7XG5cbi8vIGxhbmd1YWdlIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGVzLUVTIG9yIGVzX0VTXG4vLyBIb3dldmVyIHdlIHN0b3JlIG91ciBmaWxlcyB3aXRoIGZvcm1hdCBlcy5qc29uIG9yIGVuLmpzb25cbi8vIHRoZXJlZm9yZSByZXRyaWV2ZSBvbmx5IHRoZSBmaXJzdCAyIGRpZ2l0c1xuXG5pZiAobGFuZ3VhZ2UubGVuZ3RoID4gMikge1xuICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3BsaXQoXCItXCIpWzBdO1xuICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3BsaXQoXCJfXCIpWzBdO1xufVxuXG50cnkge1xuICAgIFQuc2V0VGV4dHMocmVxdWlyZShgLi9pMThuLyR7bGFuZ3VhZ2V9Lmpzb25gKSk7XG59IGNhdGNoIChlKSB7XG4gICAgVC5zZXRUZXh0cyhyZXF1aXJlKGAuL2kxOG4vZW4uanNvbmApKTtcbn1cblxuZXhwb3J0IHtcbiAgICBBamF4TG9hZGVyLFxuICAgIFJhd0hUTUwsXG4gICAgRnJlZVRleHRTZWFyY2gsXG4gICAgR01hcCxcbiAgICBEYXRlVGltZVBpY2tlcixcbiAgICBHcm91cGVkRHJvcGRvd24sXG4gICAgVXBsb2FkSW5wdXQsXG4gICAgVXBsb2FkSW5wdXRWMixcbiAgICBDb21wYW55SW5wdXQsXG4gICAgU3BvbnNvcklucHV0LFxuICAgIENvdW50cnlJbnB1dCxcbiAgICBMYW5ndWFnZUlucHV0LFxuICAgIE9yZ2FuaXphdGlvbklucHV0LFxuICAgIENvdW50cnlEcm9wZG93bixcbiAgICBEcm9wZG93bixcbiAgICBFdmVudElucHV0LFxuICAgIEdyb3VwSW5wdXQsXG4gICAgU3VtbWl0SW5wdXQsXG4gICAgTWVtYmVySW5wdXQsXG4gICAgU3BlYWtlcklucHV0LFxuICAgIFRhZ0lucHV0LFxuICAgIFRleHRFZGl0b3IsXG4gICAgVGV4dEFyZWEsXG4gICAgSW5wdXQsXG4gICAgUGFuZWwsXG4gICAgU2ltcGxlTGlua0xpc3QsXG4gICAgU3VtbWl0RHJvcGRvd24sXG4gICAgVGFibGUsXG4gICAgU29ydGFibGVUYWJsZSxcbiAgICBFZGl0YWJsZVRhYmxlLFxuICAgIFNpbXBsZUZvcm0sXG4gICAgUnN2cEZvcm0sXG4gICAgUmFkaW9MaXN0LFxuICAgIENoZWNrYm94TGlzdCxcbiAgICBBY3Rpb25Ecm9wZG93bixcbiAgICBGcmVlTXVsdGlUZXh0SW5wdXQsXG4gICAgT1BTZXNzaW9uQ2hlY2tlcixcbiAgICBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlLFxuICAgIEV4Y2x1c2l2ZSxcbiAgICBGcmFnbWVudFBhcnNlcixcbiAgICBDbG9jayxcbiAgICBDaXJjbGVCdXR0b24sXG4gICAgVmlkZW9TdHJlYW0sXG4gICAgQXR0ZW5kYW5jZVRyYWNrZXIsXG4gICAgU2VsZWN0YWJsZVRhYmxlLFxuICAgIHVzZUZpdFRleHQsXG4gICAgQWNjZXNzTGV2ZWxzSW5wdXQsXG4gICAgUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0LFxuICAgIFRpY2tldFR5cGVzSW5wdXQsXG4gICAgRXh0cmFRdWVzdGlvbnNGb3JtLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IEFqYXhMb2FkZXIgPSAgKHtcbiAgICBzaG93LFxuICAgIHJlbGF0aXZlLFxuICAgIGNvbG9yLFxuICAgIHNpemUsXG4gICAgY2hpbGRyZW4sXG59KSA9PiB7XG5cbiAgICBsZXQgc3R5bGVzID0ge1xuICAgICAgICBkaXNwbGF5IDogc2hvdyA/ICdibG9jayc6ICdub25lJyxcbiAgICAgICAgd2lkdGg6JzEwMCUnLFxuICAgICAgICBoZWlnaHQ6JzEwMCUnLFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmUgPyAnYWJzb2x1dGUnIDogJ2ZpeGVkJyxcbiAgICAgICAgekluZGV4OjEwMDAwMDAwLFxuICAgICAgICBtYXJnaW46J2F1dG8nLFxuICAgICAgICBjdXJzb3I6ICd3YWl0JyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjIpJyxcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICBsZWZ0OiAwXG4gICAgfTtcblxuICAgIGxldCBzdHlsZVNwaW5uZXIgPSB7XG4gICAgICAgIGZvbnRTaXplOiBzaXplICsgJ3B4JyxcbiAgICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgfTtcblxuICAgIGxldCBzdHlsZVNwaW5uZXJDb250YWluZXIgPSB7XG4gICAgICAgIHdpZHRoOiAnMjUwcHgnLFxuICAgICAgICBoZWlnaHQ6Jzc1cHgnLFxuICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmUgPyAncmVsYXRpdmUnIDogJ2ZpeGVkJyxcbiAgICAgICAgdG9wOiByZWxhdGl2ZSA/ICc1MCUnIDogJzAnLFxuICAgICAgICBsZWZ0OiByZWxhdGl2ZSA/ICcnIDogJzAnLFxuICAgICAgICByaWdodDonMCcsXG4gICAgICAgIGJvdHRvbTonMCcsXG4gICAgICAgIG1hcmdpbjonYXV0bycsXG4gICAgICAgIHpJbmRleDoxMCxcbiAgICAgICAgY29sb3I6JyNmZmZmZmYnXG4gICAgfTtcblxuICAgIGxldCBzdHlsZUJhY2tncm91bmQgPSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGNvbG9yLFxuICAgICAgICBvcGFjaXR5OicwLjgnLFxuICAgICAgICB3aWR0aDonMTAwJScsXG4gICAgICAgIGhlaWdodDonMTAwJScsXG4gICAgICAgIHBvc2l0aW9uOidhYnNvbHV0ZScsXG4gICAgICAgIHRvcDowXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWpheC1sb2FkZXItY29udGFpbmVyXCIgc3R5bGU9e3N0eWxlc30+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtzdHlsZVNwaW5uZXJDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXNwaW5uZXIgZmEtc3BpblwiIHN0eWxlPXtzdHlsZVNwaW5uZXJ9PjwvaT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVCYWNrZ3JvdW5kfSBjbGFzc05hbWU9XCJsb2FkZXItYmFja2dyb3VuZFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbik7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBodHRwIGZyb20gJ3N1cGVyYWdlbnQnO1xuaW1wb3J0IHtnZXRBY2Nlc3NUb2tlbn0gZnJvbSAnLi9zZWN1cml0eS9tZXRob2RzJztcblxuLy8gU0NPUEVTIE5FRURFRFxuLy8gJXMvbWUvc3VtbWl0cy9ldmVudHMvbGVhdmVcbi8vICVzL21lL3N1bW1pdHMvZXZlbnRzL2VudGVyXG5cbmNsYXNzIEF0dGVuZGFuY2VUcmFja2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBjb25zdCB7dHJhY2tFbnRlciwgb25CZWZvcmVVbmxvYWR9ID0gdGhpcztcblxuICAgICAgICAvLyB0cmFjayBlbnRlclxuICAgICAgICB0cmFja0VudGVyKCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBvbkJlZm9yZVVubG9hZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3RyYWNrTGVhdmUsIG9uQmVmb3JlVW5sb2FkfSA9IHRoaXM7XG5cbiAgICAgICAgLy8gdHJhY2sgbGVhdmVcbiAgICAgICAgdHJhY2tMZWF2ZSgpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgb25CZWZvcmVVbmxvYWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhY2tFbnRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qge2FwaUJhc2VVcmwsIHN1bW1pdElkLCBzb3VyY2VJZCwgc291cmNlTmFtZX0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgaHR0cC5wdXQoYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9lbnRlcmApXG4gICAgICAgICAgICAgICAgLnNlbmQoe2FjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sIHR5cGU6IHNvdXJjZU5hbWUsIHNvdXJjZV9pZDogc291cmNlSWQsIGxvY2F0aW9uOiBsb2NhdGlvbn0pXG4gICAgICAgICAgICAgICAgLmVuZCgoKSA9PiBjb25zb2xlLmxvZygnRU5URVIgUEFHRScpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0cmFja0xlYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7YXBpQmFzZVVybCwgc3VtbWl0SWQsIHNvdXJjZUlkLCBzb3VyY2VOYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuXG4gICAgICAgICAgICBodHRwLnBvc3QoYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9sZWF2ZWApXG4gICAgICAgICAgICAgICAgLnNlbmQoe2FjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sIHR5cGU6IHNvdXJjZU5hbWUsIHNvdXJjZV9pZDogc291cmNlSWQsIGxvY2F0aW9uOiBsb2NhdGlvbn0pXG4gICAgICAgICAgICAgICAgLmVuZCgoKSA9PiBjb25zb2xlLmxvZygnTEVGVCBQQUdFJykpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG9uQmVmb3JlVW5sb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7YXBpQmFzZVVybCwgc3VtbWl0SWQsIHNvdXJjZUlkLCBzb3VyY2VOYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgbmF2aWdhdG9yLnNlbmRCZWFjb24oXG4gICAgICAgICAgICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9sZWF2ZT9hY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn0mdHlwZT0ke3NvdXJjZU5hbWV9JnNvdXJjZV9pZD0ke3NvdXJjZUlkfSZsb2NhdGlvbj0ke2xvY2F0aW9ufWAsIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0TG9jYXRpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbkF0dGVuZGFuY2VUcmFja2VyLnByb3BUeXBlcyA9IHtcbiAgICBzb3VyY2VOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHN1bW1pdElkOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgYXBpQmFzZVVybDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59O1xuXG5BdHRlbmRhbmNlVHJhY2tlci5kZWZhdWx0UHJvcHMgPSB7XG4gICAgc291cmNlSWQ6IDAsXG4gICAgc291cmNlTmFtZTogJ0dFTkVSQUwnXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBdHRlbmRhbmNlVHJhY2tlcjtcblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2luZGV4Lm1vZHVsZS5zY3NzJztcblxuY29uc3QgaXNMaXZlID0gKGV2ZW50LCBub3dVdGMpID0+IHtcbiAgICBjb25zdCBoYXNFbmRlZCA9IG5vd1V0YyA+IGV2ZW50LmVuZF9kYXRlO1xuICAgIGNvbnN0IGhhc1N0YXJ0ZWQgPSAoZXZlbnQuc3RhcnRfZGF0ZSAtIG5vd1V0YykgPCAxO1xuICAgIHJldHVybiBoYXNTdGFydGVkICYmICFoYXNFbmRlZDtcbn07XG5cbmNvbnN0IENpcmNsZUJ1dHRvbiA9ICh7ZXZlbnQsIGlzU2NoZWR1bGVkLCBub3dVdGMsIGFkZFRvU2NoZWR1bGUsIHJlbW92ZUZyb21TY2hlZHVsZSwgZW50ZXJDbGljaywgYWx3YXlzU2hvd0VudGVyfSkgPT4ge1xuXG4gICAgY29uc3QgaXNMaXZlTm93ID0gaXNMaXZlKGV2ZW50LCBub3dVdGMpO1xuICAgIGxldCBidXR0b25DbGFzcyA9IG51bGw7XG4gICAgbGV0IGljb25DbGFzcyA9IG51bGw7XG4gICAgbGV0IG9uQ2xpY2sgPSBudWxsO1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGV2LCBhY3Rpb24pID0+IHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGFjdGlvbihldmVudCk7XG4gICAgfTtcblxuXG4gICAgaWYgKGlzTGl2ZU5vdyB8fCBhbHdheXNTaG93RW50ZXIpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuZW50ZXJ9IGVudGVyYDtcbiAgICAgICAgaWNvbkNsYXNzID0gJ2ZhLXNpZ24taW4nO1xuICAgICAgICBvbkNsaWNrID0gZXYgPT4gaGFuZGxlQ2xpY2soZXYsIGVudGVyQ2xpY2spO1xuICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVNjaGVkdWxlICYmIGFkZFRvU2NoZWR1bGUgJiYgaXNTY2hlZHVsZWQpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuYWRkZWR9IGFkZGVkYDtcbiAgICAgICAgaWNvbkNsYXNzID0gJ2ZhLWNoZWNrJztcbiAgICAgICAgb25DbGljayA9IGV2ID0+IGhhbmRsZUNsaWNrKGV2LCByZW1vdmVGcm9tU2NoZWR1bGUpO1xuICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVNjaGVkdWxlICYmIGFkZFRvU2NoZWR1bGUpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuYWRkfSBhZGRgO1xuICAgICAgICBpY29uQ2xhc3MgPSAnZmEtcGx1cyc7XG4gICAgICAgIG9uQ2xpY2sgPSBldiA9PiBoYW5kbGVDbGljayhldiwgYWRkVG9TY2hlZHVsZSk7XG4gICAgfVxuXG4gICAgaWYgKCFvbkNsaWNrKSByZXR1cm4gbnVsbDtcblxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9e2Ake3N0eWxlcy5jaXJjbGVCdXR0b259ICR7YnV0dG9uQ2xhc3N9YH0gb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8aSBjbGFzc05hbWU9e2BmYSAke2ljb25DbGFzc31gfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICApO1xufTtcblxuQ2lyY2xlQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgICBldmVudDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIG5vd1V0YzogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGlzU2NoZWR1bGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGVudGVyQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgYWRkVG9TY2hlZHVsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcmVtb3ZlRnJvbVNjaGVkdWxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhbHdheXNTaG93RW50ZXI6IFByb3BUeXBlcy5ib29sLFxufTtcblxuQ2lyY2xlQnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBhZGRUb1NjaGVkdWxlOiBudWxsLFxuICAgIHJlbW92ZUZyb21TY2hlZHVsZTogbnVsbCxcbiAgICBhbHdheXNTaG93RW50ZXI6IGZhbHNlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaXJjbGVCdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiY2lyY2xlQnV0dG9uXCI6XCJfMzRsMldtWWpzZVpHdFlZd0VDMjZaUlwiLFwiYWRkXCI6XCJfMS1wYzFsWU5aMjVqVlJKY0NpU0VCdFwiLFwiYWRkZWRcIjpcIl8yQkxzX3dUenIyR19QSEdHS3VXdkN0XCIsXCJlbnRlclwiOlwiXzF2YnNnNnhmNU9XRjNpR0RQeXFfMDNcIn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50LXRpbWV6b25lXCI7XG5pbXBvcnQgRnJhZ21lbnRQYXJzZXIgZnJvbSBcIi4vZnJhZ21lbi1wYXJzZXJcIjtcblxuY2xhc3MgQ2xvY2sgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLmZyYWdtZW50UGFyc2VyID0gbmV3IEZyYWdtZW50UGFyc2VyKCk7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdGltZXN0YW1wOiBudWxsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3RpbWV6b25lID0gJ1VUQycsIG5vd30gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBub3dRUyA9IHRoaXMuZnJhZ21lbnRQYXJzZXIuZ2V0UGFyYW0oJ25vdycpO1xuICAgICAgICBjb25zdCBtb21lbnRRUyA9IG1vbWVudC50eihub3dRUywgJ1lZWVktTU0tREQsaGg6bW06c3MnLCB0aW1lem9uZSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXA7XG5cbiAgICAgICAgaWYgKG1vbWVudFFTLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGltZXN0YW1wID0gbW9tZW50UVMudmFsdWVPZigpIC8gMTAwMDtcbiAgICAgICAgfSBlbHNlIGlmIChub3cpIHtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IG5vd1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbG9jYWwgPSBtb21lbnQoKS51bml4KCk7XG4gICAgICAgICAgICBjb25zdCBzZXJ2ZXJUaW1lID0gIGF3YWl0IHRoaXMuZ2V0U2VydmVyVGltZSgpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxBZnRlciA9IG1vbWVudCgpLnVuaXgoKTtcblxuICAgICAgICAgICAgaWYgKHNlcnZlclRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBzZXJ2ZXJUaW1lLnRpbWVzdGFtcCArIChsb2NhbEFmdGVyIC0gbG9jYWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBsb2NhbEFmdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGltZXN0YW1wfSk7XG4gICAgICAgIHRoaXMucHJvcHMub25UaWNrKHRpbWVzdGFtcCk7XG5cbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKHRoaXMudGljaywgMTAwMCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgfVxuXG4gICAgZ2V0U2VydmVyVGltZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vdGltZWludGVydmFsc2luY2UxOTcwLmFwcHNwb3QuY29tL2ApXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9O1xuXG4gICAgdGljayA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qge3RpbWVzdGFtcH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBpZiAodGltZXN0YW1wICE9PSBudWxsKSB7ICAgXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uVGljayh0aW1lc3RhbXAgKyAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RpbWVzdGFtcDogdGltZXN0YW1wICsgMX0pXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZXBvY2ggdXRjIHRpbWUgaW4gc2Vjb25kc1xuICAgIG5vdyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGltZXN0YW1wO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHtkaXNwbGF5LCB0aW1lem9uZSA9ICdVVEMnfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHt0aW1lc3RhbXB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoIWRpc3BsYXkgfHwgIXRpbWVzdGFtcCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Ub3A6ICc1MHB4JywgdGV4dEFsaWduOiAnY2VudGVyJywgZm9udFNpemU6ICcyMHB4J319PlxuICAgICAgICAgICAgICAgIHttb21lbnQudHoodGltZXN0YW1wKjEwMDAsIHRpbWV6b25lKS5mb3JtYXQoJ1lZWVktTU0tREQgaGg6bW06c3MnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBDbG9jaztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTkgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4Y2x1c2l2ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zaG93RmllbGQgPSB0aGlzLnNob3dGaWVsZC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHNob3dGaWVsZCgpIHtcbiAgICAgICAgbGV0IHtuYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBleGNsdXNpdmVTZWN0aW9ucyA9IHdpbmRvdy5FWENMVVNJVkVfU0VDVElPTlM7XG5cbiAgICAgICAgcmV0dXJuIGV4Y2x1c2l2ZVNlY3Rpb25zID8gZXhjbHVzaXZlU2VjdGlvbnMuaW5jbHVkZXMobmFtZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7Y2hpbGRyZW59ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAodGhpcy5zaG93RmllbGQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vaW5wdXRzL3RleHQtaW5wdXQnXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi4vaW5wdXRzL2Ryb3Bkb3duJ1xuaW1wb3J0IFJhZGlvTGlzdCBmcm9tICcuLi9pbnB1dHMvcmFkaW8tbGlzdCdcbmltcG9ydCBDaGVja2JveExpc3QgZnJvbSAnLi4vaW5wdXRzL2NoZWNrYm94LWxpc3QnXG5pbXBvcnQgUXVlc3Rpb25zU2V0IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXN0aW9ucy1zZXQnO1xuaW1wb3J0IHtGaWVsZCwgRm9ybX0gZnJvbSBcInJlYWN0LWZpbmFsLWZvcm1cIjtcblxuY29uc3QgRXh0cmFRdWVzdGlvbnNGb3JtID0gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFRdWVzdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJBbnN3ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFuc3dlckNoYW5nZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICdxdWVzdGlvbnMtZm9ybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lID0gJ3F1ZXN0aW9uLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWUgPSAncXVlc3Rpb24tbGFiZWwtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lPSAncXVlc3Rpb24tY29udHJvbC1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUmVmID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVGV4dCA9ICdTdWJtaXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4ge1xuXG4gICAgbGV0IHN1Ym1pdCA9IG51bGw7XG5cbiAgICBjb25zdCBxdWVzdGlvblJlZiA9IHVzZVJlZih7fSk7XG5cbiAgICBjb25zdCBbYW5zd2Vycywgc2V0QW5zd2Vyc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2Zvcm1FcnJvcnMsIHNldEZvcm1FcnJvcnNdID0gdXNlU3RhdGUoe30pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZm9ybWF0VXNlckFuc3dlcnMoKTtcbiAgICB9LCBbZXh0cmFRdWVzdGlvbnNdKVxuXG4gICAgY29uc3QgZm9ybWF0VXNlckFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHFzID0gbmV3IFF1ZXN0aW9uc1NldChleHRyYVF1ZXN0aW9ucywgdXNlckFuc3dlcnMpO1xuICAgICAgICBzZXRBbnN3ZXJzKHFzLmZvcm1hdEFuc3dlcnMoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgQ29uZGl0aW9uID0gKHt3aGVuLCBydWxlLCBjaGlsZHJlbn0pID0+IChcbiAgICAgICAgPEZpZWxkIG5hbWU9e3doZW59IHN1YnNjcmlwdGlvbj17e3ZhbHVlOiB0cnVlfX0+XG4gICAgICAgICAgICB7KHtpbnB1dDoge3ZhbHVlfX0pID0+XG4gICAgICAgICAgICAgICAgY2hlY2tWaXNpYmlsaXR5KHJ1bGUsIGNoZWNrUnVsZSh2YWx1ZSwgcnVsZSksIGNoaWxkcmVuKVxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgICk7XG5cbiAgICBjb25zdCBFcnJvciA9ICh7bmFtZX0pID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBmb3JtRXJyb3JzW25hbWVdIHx8ICcnO1xuICAgICAgICByZXR1cm4gZXJyb3IgPyA8c3BhbiBjbGFzc05hbWU9J2V4dHJhLXF1ZXN0aW9uLWVycm9yJz5lcnJvcjwvc3Bhbj4gOiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1J1bGUgPSAodmFsdWUsIHJ1bGUpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IHJ1bGUuYW5zd2VyX3ZhbHVlcztcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBsZXQgcmVzID0gcnVsZS5hbndlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCI7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLmFud2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gXCJBbmRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMgJiYgdmFsdWUuaW5jbHVkZXMocGFyc2VJbnQodikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9yXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcyB8fCB2YWx1ZS5pbmNsdWRlcyhwYXJzZUludCh2KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXMuaW5jbHVkZXModmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVmlzaWJpbGl0eSA9IChydWxlLCBydWxlUmVzdWx0LCBjaGlsZHJlbikgPT4ge1xuICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5ID09PSBcIlZpc2libGVcIikge1xuICAgICAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24gPT09IFwiRXF1YWxcIikge1xuICAgICAgICAgICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5vbiBFcXVhbFxuICAgICAgICAgICAgaWYoIXJ1bGVSZXN1bHQpe1xuICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIGxldCBxdWVzdGlvblZhbHVlcyA9IHEudmFsdWVzO1xuICAgICAgICAvLyBAc2VlIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy92ZzA1eT9maWxlPS9pbmRleC5qc1xuICAgICAgICBpZiAocS50eXBlID09PSBcIlRleHRcIikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YCR7cS5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb3BzLmlucHV0LnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3EucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17cS5uYW1lfS8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMubWFwKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25kaXRpb24gd2hlbj17cS5uYW1lfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfSBuYW1lPXtxLm5hbWV9IGlkPXtgJHtxLmlkfWB9IGNvbXBvbmVudD1cInRleHRhcmVhXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBzdHlsZT17e2Rpc3BsYXk6ICdmbGV4J319IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfSBuYW1lPXtxLm5hbWV9IGlkPXtgJHtxLmlkfWB9IGNvbXBvbmVudD1cImlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtgZXEtY2hlY2tib3gtbGFiZWwgJHtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiUmFkaW9CdXR0b25MaXN0XCIpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uVmFsdWVzID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoey4uLnZhbCwgdmFsdWU6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIG5hbWU9e3EubmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9MaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3EuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuaW5wdXQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17cXVlc3Rpb25WYWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDb21ib0JveFwiKSB7XG4gICAgICAgICAgICBxdWVzdGlvblZhbHVlcyA9IHF1ZXN0aW9uVmFsdWVzLm1hcCh2YWwgPT4gKHsuLi52YWwsIHZhbHVlOiB2YWwuaWR9KSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e3EubWFuZGF0b3J5ID8gcS5sYWJlbD8uZW5kc1dpdGgoJzwvcD4nKSA/IHEubGFiZWwucmVwbGFjZSgvPFxcL3A+JC9nLCBcIiA8Yj4qPC9iPjwvcD5cIikgOiBgJHtxLmxhYmVsfSA8Yj4qPC9iPmAgOiBxLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXtxLm5hbWV9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgJHtxLmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5pbnB1dC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3F1ZXN0aW9uVmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDaGVja0JveExpc3RcIikge1xuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZXMgPSBxdWVzdGlvblZhbHVlcy5tYXAodmFsID0+ICh7Li4udmFsLCB2YWx1ZTogdmFsLmlkfSkpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94TGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3EuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e3EubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5pbnB1dC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3F1ZXN0aW9uVmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IChxKSA9PiB7XG4gICAgICAgIHJldHVybiAhIXF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF07XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRlUXVlc3Rpb24gPSAocSwgdmFsdWVzLCBlcnJvcnMpID0+IHtcbiAgICAgICAgaWYgKHEubWFuZGF0b3J5ICYmIGlzVmlzaWJsZShxKSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkocS5uYW1lKSB8fCB2YWx1ZXNbcS5uYW1lXSA9PT0gXCJcIiB8fCB2YWx1ZXNbcS5uYW1lXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvcnNbcS5uYW1lXSA9IFwiUmVxdWlyZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB2YWxpZGF0ZSBzdWIgcnVsZXNcbiAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXM/LmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgIHZhbGlkYXRlUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24sIHZhbHVlcywgZXJyb3JzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VibWl0ID0gKHZhbHVlcykgPT4ge1xuICAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlKHZhbHVlcyk7XG4gICAgICAgaWYoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICBvbkFuc3dlckNoYW5nZXModmFsdWVzKVxuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZSA9ICh2YWx1ZXMpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0ge307XG4gICAgICAgIGV4dHJhUXVlc3Rpb25zLmZvckVhY2goIHEgPT4ge1xuICAgICAgICAgICAgdmFsaWRhdGVRdWVzdGlvbihxLCB2YWx1ZXMsIGVycm9ycyk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRGb3JtRXJyb3JzKHsuLi5lcnJvcnN9KVxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgIDxGb3JtXG4gICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e2Fuc3dlcnN9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyh7aGFuZGxlU3VibWl0LCBmb3JtLCBzdWJtaXR0aW5nLCBwcmlzdGluZSwgdmFsdWVzfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXQgPSBoYW5kbGVTdWJtaXQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fSByZWY9e2Zvcm1SZWZ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZWFkT25seSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBkaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZXh0cmFRdWVzdGlvbnMubWFwKChxKSA9PiByZW5kZXJRdWVzdGlvbihxKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFRdWVzdGlvbnMubWFwKChxKSA9PiByZW5kZXJRdWVzdGlvbihxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2RlYnVnICYmIDxwcmU+e0pTT04uc3RyaW5naWZ5KHZhbHVlcywgMCwgMil9PC9wcmU+fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgICB7IWZvcm1SZWYgJiZcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luVG9wOiAxMH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2J1dHRvblRleHR9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgKVxufVxuXG5FeHRyYVF1ZXN0aW9uc0Zvcm0ucHJvcFR5cGVzID0ge1xuICAgIGV4dHJhUXVlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICB1c2VyQW5zd2VyczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgb25BbnN3ZXJDaGFuZ2VzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmb3JtUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgICAgUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIFByb3BUeXBlcy5zaGFwZSh7Y3VycmVudDogUHJvcFR5cGVzLmFueX0pXG4gICAgXSksXG4gICAgZGVidWc6IFByb3BUeXBlcy5ib29sLFxuICAgIGJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcXVlc3Rpb25Db250YWluZXJDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZSA6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXh0cmFRdWVzdGlvbnNGb3JtOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICdhd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC9hd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC5jc3MnXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vaW5wdXRzL3RleHQtaW5wdXQnXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi4vaW5wdXRzL2Ryb3Bkb3duJ1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnXG5pbXBvcnQgQ2hlY2tib3hMaXN0IGZyb20gJy4uL2lucHV0cy9jaGVja2JveC1saXN0J1xuaW1wb3J0IFJhZGlvTGlzdCBmcm9tICcuLi9pbnB1dHMvcmFkaW8tbGlzdCdcblxuXG5jbGFzcyBSc3ZwRm9ybSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBhbnN3ZXJzOiBwcm9wcy5xdWVzdGlvbnMubWFwKHEgPT4gKHtxdWVzdGlvbl9pZDogcS5pZCwgdmFsdWU6IG51bGx9KSksXG4gICAgICAgICAgICBlcnJvcnM6IHByb3BzLmVycm9yc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYXNFcnJvcnMgPSB0aGlzLmhhc0Vycm9ycy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZVN1Ym1pdCA9IHRoaXMuaGFuZGxlU3VibWl0LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcmVuZGVyUXVlc3Rpb24ocSkge1xuICAgICAgICBjb25zdCB7YW5zd2Vyc30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFuc3dlcnMuZmluZChhID0+IGEucXVlc3Rpb25faWQgPT09IHEuaWQpLnZhbHVlO1xuXG4gICAgICAgIHN3aXRjaChxLmNsYXNzX25hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBNZW1iZXJFbWFpbFF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgY2FzZSAnUlNWUE1lbWJlckZpcnN0TmFtZVF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgY2FzZSAnUlNWUE1lbWJlckxhc3ROYW1lUXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICBjYXNlICdSU1ZQVGV4dEJveFF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3EuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWUgfHwgJyd9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e3RoaXMuaGFzRXJyb3JzKHEuaWQpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSU1ZQVGV4dEFyZWFRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtxLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgLz4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUlNWUExpdGVyYWxDb250ZW50UXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2PjxSYXdIVE1MPntxLnZhbHVlfTwvUmF3SFRNTD48L2Rpdj4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUlNWUENoZWNrQm94TGlzdFF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxDaGVja2JveExpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtxLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17cS52YWx1ZXMubWFwKHYgPT4gKHt2YWx1ZTogYCR7di5pZH1gLCBsYWJlbDogdi5sYWJlbH0pKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXt0aGlzLmhhc0Vycm9ycyhxLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUlNWUFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxSYWRpb0xpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtxLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17cS52YWx1ZXMubWFwKHYgPT4gKHt2YWx1ZTogYCR7di5pZH1gLCBsYWJlbDogdi5sYWJlbH0pKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXt0aGlzLmhhc0Vycm9ycyhxLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSU1ZQRHJvcERvd25RdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVzID0gKHEuaXNfY291bnRyeV9zZWxlY3RvcikgPyBxLnZhbHVlcy5tYXAodiA9PiAoe3ZhbHVlOnYuaWQsIGxhYmVsOiB2LnZhbHVlfSkpIDogcS52YWx1ZXM7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtxLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17cS5pc19tdWx0aXNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtxLmVtcHR5X3N0cmluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3ZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIGxldCBhbnN3ZXJzID0gWy4uLnRoaXMuc3RhdGUuYW5zd2Vyc107XG4gICAgICAgIGxldCB7dmFsdWUsIGlkfSA9IGV2LnRhcmdldDtcblxuICAgICAgICBpZiAoZXYudGFyZ2V0LnR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWVPZigpIC8gMTAwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhbnN3ZXIgPSBhbnN3ZXJzLmZpbmQoYSA9PiBhLnF1ZXN0aW9uX2lkID09PSBwYXJzZUludChpZCkpO1xuICAgICAgICBhbnN3ZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHthbnN3ZXJzfSk7XG4gICAgfVxuXG4gICAgaGFzRXJyb3JzKGZpZWxkKSB7XG4gICAgICAgIGxldCB7ZXJyb3JzfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGlmKGZpZWxkIGluIGVycm9ycykge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yc1tmaWVsZF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaGFuZGxlU3VibWl0KGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IHsgb25TdWJtaXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7YW5zd2Vyc30gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIG9uU3VibWl0KGFuc3dlcnMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHsgcXVlc3Rpb25zLCBvblN1Ym1pdCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGZvcm0gY2xhc3NOYW1lPVwicnN2cC1mb3JtXCI+XG4gICAgICAgICAgICAgICAge3F1ZXN0aW9ucy5tYXAocSA9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17J3F1ZXN0aW9uXycrcS5pZH0gY2xhc3NOYW1lPVwicm93IGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTD57cS5sYWJlbH08L1Jhd0hUTUw+IHtxLmlzX21hbmRhdG9yeSAmJiAnKid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJRdWVzdGlvbihxKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtvblN1Ym1pdCAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlU3VibWl0fT5TdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSc3ZwRm9ybTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnXG5pbXBvcnQgJ2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzcydcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9pbnB1dHMvdGV4dC1pbnB1dCdcbmltcG9ydCB7IHNjcm9sbFRvRXJyb3IsIGlzRW1wdHksIHNoYWxsb3dFcXVhbCwgaGFzRXJyb3JzIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWV0aG9kcydcblxuXG5jbGFzcyBTaW1wbGVGb3JtIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGVudGl0eTogey4uLnByb3BzLmVudGl0eX0sXG4gICAgICAgICAgICBlcnJvcnM6IHByb3BzLmVycm9yc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVTdWJtaXQgPSB0aGlzLmhhbmRsZVN1Ym1pdC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7fTtcbiAgICAgICAgc2Nyb2xsVG9FcnJvcih0aGlzLnByb3BzLmVycm9ycyk7XG5cbiAgICAgICAgaWYocHJldlByb3BzLmVudGl0eS5pZCAhPT0gdGhpcy5wcm9wcy5lbnRpdHkuaWQpIHtcbiAgICAgICAgICAgIHN0YXRlLmVudGl0eSA9IHsuLi50aGlzLnByb3BzLmVudGl0eX07XG4gICAgICAgICAgICBzdGF0ZS5lcnJvcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2hhbGxvd0VxdWFsKHByZXZQcm9wcy5lcnJvcnMsIHRoaXMucHJvcHMuZXJyb3JzKSkge1xuICAgICAgICAgICAgc3RhdGUuZXJyb3JzID0gey4uLnRoaXMucHJvcHMuZXJyb3JzfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNFbXB0eShzdGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIC4uLnN0YXRlfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICBsZXQgZW50aXR5ID0gey4uLnRoaXMuc3RhdGUuZW50aXR5fTtcbiAgICAgICAgbGV0IGVycm9ycyA9IHsuLi50aGlzLnN0YXRlLmVycm9yc307XG4gICAgICAgIGxldCB7dmFsdWUsIGlkfSA9IGV2LnRhcmdldDtcblxuICAgICAgICBpZiAoZXYudGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZXYudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcnNbaWRdID0gJyc7XG4gICAgICAgIGVudGl0eVtpZF0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZW50aXR5OiBlbnRpdHksIGVycm9yczogZXJyb3JzfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlU3VibWl0KGV2KSB7XG4gICAgICAgIGxldCBlbnRpdHkgPSB7Li4udGhpcy5zdGF0ZS5lbnRpdHl9O1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHRoaXMucHJvcHMub25TdWJtaXQodGhpcy5zdGF0ZS5lbnRpdHkpO1xuICAgIH1cblxuICAgIGNyZWF0ZUZpZWxkKGZpZWxkKSB7XG4gICAgICAgIGxldCB7ZW50aXR5LCBlcnJvcnN9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtcImZpZWxkX1wiK2ZpZWxkLm5hbWV9IGNsYXNzTmFtZT1cInJvdyBmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiB7ZmllbGQubGFiZWx9IDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtmaWVsZC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZW50aXR5W2ZpZWxkLm5hbWVdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXtoYXNFcnJvcnMoZmllbGQubmFtZSwgZXJyb3JzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17XCJmaWVsZF9cIitmaWVsZC5uYW1lfSBjbGFzc05hbWU9XCJyb3cgZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4ge2ZpZWxkLmxhYmVsfSA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17ZmllbGQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2VudGl0eVtmaWVsZC5uYW1lXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtcImZpZWxkX1wiK2ZpZWxkLm5hbWV9IGNsYXNzTmFtZT1cInJvdyBmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e2ZpZWxkLm5hbWV9IGNoZWNrZWQ9e2VudGl0eVtmaWVsZC5uYW1lXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0gY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1pbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17ZmllbGQubmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZmllbGQubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZW50aXR5fSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCB7ZmllbGRzfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxmb3JtIGNsYXNzTmFtZT1cInNpbXBsZS1mb3JtXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImlkXCIgdmFsdWU9e2VudGl0eS5pZH0gLz5cblxuICAgICAgICAgICAgICAgIHtmaWVsZHMubWFwKGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGaWVsZChmKTtcbiAgICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTEyIHN1Ym1pdC1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSBwdWxsLXJpZ2h0XCIgdmFsdWU9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5zYXZlXCIpfS8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltcGxlRm9ybTtcbiIsIlxuY2xhc3MgRnJhZ21lbnRQYXJzZXIge1xuXG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEhhc2ggPSAnJztcbiAgICAgICAgdGhpcy5oYXNoICAgICAgICAgPSB7fTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9IYXNoKHN0ckhhc2gpXG4gICAge1xuICAgICAgICBzdHJIYXNoICAgID0gc3RySGFzaC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHBhcmFtcyA9IHN0ckhhc2guc3BsaXQoJyYnKTtcbiAgICAgICAgbGV0IHJlcyA9IHt9O1xuICAgICAgICBmb3IobGV0IHBhcmFtIG9mIHBhcmFtcylcbiAgICAgICAge1xuICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgaWYocGFyYW0ubGVuZ3RoICE9PSAgMikgY29udGludWU7XG4gICAgICAgICAgICBsZXQgdmFsID0gcGFyYW1bMV0udHJpbSgpO1xuICAgICAgICAgICAgaWYodmFsID09PSAnJykgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICh2YWwgPT09ICd0cnVlJyB8fCB2YWwgPT09ICdmYWxzZScpXG4gICAgICAgICAgICAgICAgcGFyYW1bMV0gPSB2YWwgPT0gJ3RydWUnO1xuXG4gICAgICAgICAgICByZXNbcGFyYW1bMF1dID0gcGFyYW1bMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBjbGVhclBhcmFtcygpe1xuICAgICAgICB0aGlzLm9yaWdpbmFsSGFzaCA9ICcnO1xuICAgICAgICB0aGlzLmhhc2ggICAgICAgICA9IHt9O1xuICAgIH1cblxuICAgIGdldFBhcmFtKGtleSl7XG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JpZ2luYWxIYXNoICE9PSB3aW5kb3cubG9jYXRpb24uaGFzaCl7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICAgICAgICAgICAgdGhpcy5oYXNoID0gdGhpcy5jb252ZXJ0VG9IYXNoKHRoaXMub3JpZ2luYWxIYXNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCF0aGlzLmhhc2guaGFzT3duUHJvcGVydHkoa2V5KSApIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNoW2tleV07XG4gICAgfVxuXG4gICAgZ2V0UGFyYW1zKCl7XG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JpZ2luYWxIYXNoICE9PSAgd2luZG93LmxvY2F0aW9uLmhhc2gpe1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgICAgICAgICAgIHRoaXMuaGFzaCA9IHRoaXMuY29udmVydFRvSGFzaCh0aGlzLm9yaWdpbmFsSGFzaCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyAuLi4gdGhpcy5oYXNoIH07XG4gICAgfVxuXG4gICAgZGVsZXRlUGFyYW0ocGFyYW0pe1xuICAgICAgICB2YXIgaGFzaCAgICA9IHRoaXMuZ2V0UGFyYW1zKCk7XG4gICAgICAgIHRoaXMuY2xlYXJQYXJhbXMoKTtcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gaGFzaCkge1xuICAgICAgICAgICAgaWYoa2V5ID09IHBhcmFtKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuaGFzaFtrZXldID0gaGFzaFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVsZXRlUGFyYW1zKHBhcmFtcyl7XG4gICAgICAgIHZhciBoYXNoICAgID0gdGhpcy5nZXRQYXJhbXMoKTtcbiAgICAgICAgdGhpcy5jbGVhclBhcmFtcygpO1xuICAgICAgICBmb3IobGV0IGtleSBpbiBoYXNoKSB7XG4gICAgICAgICAgICBpZihwYXJhbXMuaW5jbHVkZXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLmhhc2hba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFBhcmFtKGtleSwgdmFsdWUpe1xuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yaWdpbmFsSGFzaCAhPT0gIHdpbmRvdy5sb2NhdGlvbi5oYXNoKXtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxIYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSB0aGlzLmNvbnZlcnRUb0hhc2godGhpcy5vcmlnaW5hbEhhc2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJylcbiAgICAgICAgICAgIHRoaXMuaGFzaFtrZXldID0gdmFsdWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmhhc2hba2V5XTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCl7XG4gICAgICAgIGxldCByZXMgPSAnJztcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gdGhpcy5oYXNoKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgdmFsID0gdGhpcy5oYXNoW2tleV07XG4gICAgICAgICAgICBpZihyZXMgIT09ICcnKSByZXMgKz0gJyYnO1xuICAgICAgICAgICAgcmVzICs9IGtleSsnPScrdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGcmFnbWVudFBhcnNlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVCBmcm9tIFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIjtcblxuY2xhc3MgRnJlZVRleHRTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMub25TZWFyY2hDbGljayAgPSB0aGlzLm9uU2VhcmNoQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkNsZWFyQ2xpY2sgICA9IHRoaXMub25DbGVhckNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25LZXlQcmVzc2VkICAgPSB0aGlzLm9uS2V5UHJlc3NlZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlICAgICAgID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb25TZWFyY2hDbGljaygpe1xuICAgICAgICB0aGlzLmRvRmlsdGVyaW5nKHRoaXMuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIG9uQ2xlYXJDbGljaygpe1xuICAgICAgICB0aGlzLmRvRmlsdGVyaW5nKCcnKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6ICcnfSk7XG4gICAgfVxuXG4gICAgZG9GaWx0ZXJpbmcodGVybSl7XG4gICAgICAgIHRoaXMucHJvcHMub25TZWFyY2godGVybS50cmltKCkpO1xuICAgIH1cblxuICAgIG9uS2V5UHJlc3NlZChldmVudCl7XG4gICAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcbiAgICAgICAgaWYoY29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIHRoaXMuZG9GaWx0ZXJpbmcodGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoYW5nZShldmVudCl7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IHt2YWx1ZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIHJldHVybihcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IHNlYXJjaC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9e3RoaXMub25LZXlQcmVzc2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImlucHV0LWdyb3VwLWJ0blwiIHN0eWxlPXt7d2lkdGg6IDUgKyclJ319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17dGhpcy5vblNlYXJjaENsaWNrfSBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiB0aXRsZT17VC50cmFuc2xhdGUoXCJnZW5lcmFsLnNlYXJjaFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXNlYXJjaFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXt0aGlzLm9uQ2xlYXJDbGlja30gY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0XCIgdGl0bGU9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5jbGVhclwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRpbWVzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnJlZVRleHRTZWFyY2g7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgd2l0aFNjcmlwdGpzLCB3aXRoR29vZ2xlTWFwLCBHb29nbGVNYXAsIE1hcmtlciwgSW5mb1dpbmRvdyB9IGZyb20gXCJyZWFjdC1nb29nbGUtbWFwc1wiO1xuaW1wb3J0IE1hcmtlckNsdXN0ZXJlciBmcm9tIFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiO1xuaW1wb3J0IHthcnJheXNFcXVhbH0gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcblxuY29uc3QgTUFQID0ge1xuICAgIGRlZmF1bHRab29tOiAyLFxuICAgIGRlZmF1bHRDZW50ZXI6IHsgbGF0OiAzMC4yNzAxNjYsIGxuZzogLTk3LjczMTI3MSB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbWluWm9vbTogMSxcbiAgICAgICAgbWF4Wm9vbTogMTlcbiAgICB9XG59O1xuXG5jb25zdCBHb29nbGVNYXBXcmFwcGVyID0gd2l0aEdvb2dsZU1hcCgocHJvcHMpID0+IHtcbiAgICAgICAgcmV0dXJuICA8R29vZ2xlTWFwXG4gICAgICAgICAgICByZWY9e3Byb3BzLm9uTWFwTG9hZH1cbiAgICAgICAgICAgIHpvb209eyBwcm9wcy56b29tIH1cbiAgICAgICAgICAgIGNlbnRlcj17IHByb3BzLmNlbnRlciB9XG4gICAgICAgICAgICBvbkJvdW5kc0NoYW5nZWQ9e3Byb3BzLm9uTWFwQ2hhbmdlfVxuICAgICAgICAgICAgb25DbGljaz17cHJvcHMub25NYXBDbGlja31cbiAgICAgICAgPlxuICAgICAgICAgICAge3Byb3BzLnNob3dNYXJrZXJzICYmXG4gICAgICAgICAgICA8TWFya2VyQ2x1c3RlcmVyXG4gICAgICAgICAgICAgICAgYXZlcmFnZUNlbnRlclxuICAgICAgICAgICAgICAgIGVuYWJsZVJldGluYUljb25zXG4gICAgICAgICAgICAgICAgZ3JpZFNpemU9ezYwfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwcm9wcy5tYXJrZXJzLm1hcChtYXJrZXIgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8TWFya2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e21hcmtlci5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPXt7IGxhdDogbWFya2VyLmxhdCwgbG5nOiBtYXJrZXIubG5nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwcm9wcy5vblRvZ2dsZUluZm9XaW5kb3cobWFya2VyLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRHJhZ0VuZD17cHJvcHMub25NYXJrZXJEcmFnfVxuICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPXtwcm9wcy5kcmFnZ2FibGV9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHttYXJrZXIuaXNJbmZvV2luZG93T3BlbiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPEluZm9XaW5kb3cgb25DbG9zZUNsaWNrPXsoKSA9PiBwcm9wcy5vblRvZ2dsZUluZm9XaW5kb3cobWFya2VyLmlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57bWFya2VyLm5hbWV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0luZm9XaW5kb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvTWFya2VyPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9NYXJrZXJDbHVzdGVyZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvR29vZ2xlTWFwPlxuICAgIH1cbik7XG5cbmV4cG9ydCBjbGFzcyBHTWFwIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgbWFya2VyczogcHJvcHMubWFya2Vyc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlTWFwTG9hZCA9IHRoaXMuaGFuZGxlTWFwTG9hZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU1hcENoYW5nZSA9IHRoaXMuaGFuZGxlTWFwQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTWFya2VyRHJhZyA9IHRoaXMuaGFuZGxlTWFya2VyRHJhZy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU1hcENsaWNrID0gdGhpcy5oYW5kbGVNYXBDbGljay5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgY29uc3QgbmV3X21hcmtlcnMgPSB0aGlzLnByb3BzLm1hcmtlcnM7XG5cbiAgICAgICAgaWYgKCFhcnJheXNFcXVhbChuZXdfbWFya2VycywgcHJldlByb3BzLm1hcmtlcnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbWFya2VyczogbmV3X21hcmtlcnMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb2xkX21hcmtlcnNfc3RyID0gcHJldlByb3BzLm1hcmtlcnMubWFwKCBtID0+IG0uaWQgKS5zb3J0KCkuam9pbigpO1xuICAgICAgICBsZXQgbmV3X21hcmtlcnNfc3RyID0gbmV3X21hcmtlcnMubWFwKCBtID0+IG0uaWQgKS5zb3J0KCkuam9pbigpO1xuXG4gICAgICAgIGlmIChuZXdfbWFya2Vycy5sZW5ndGggPiAxICYmIG9sZF9tYXJrZXJzX3N0ciAhPT0gbmV3X21hcmtlcnNfc3RyKSB7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJCb3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBtYXJrZXIgb2YgbmV3X21hcmtlcnMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWFya2VyX2xvYyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmcobWFya2VyLmxhdCwgbWFya2VyLmxuZyk7XG4gICAgICAgICAgICAgICAgbWFya2VyQm91bmRzLmV4dGVuZChtYXJrZXJfbG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hcENvbXBvbmVudC5maXRCb3VuZHMobWFya2VyQm91bmRzKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBoYW5kbGVNYXBMb2FkKG1hcCkge1xuICAgICAgICB0aGlzLl9tYXBDb21wb25lbnQgPSBtYXA7XG4gICAgfVxuXG4gICAgaGFuZGxlTWFwQ2hhbmdlKCkge1xuICAgICAgICBsZXQgdmlzaWJsZV9tYXJrZXJzID0gdGhpcy5wcm9wcy5tYXJrZXJzLmZpbHRlcihtID0+IHtcbiAgICAgICAgICAgIGxldCBtYXJrZXJfbG9jID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhtLmxhdCwgbS5sbmcpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9tYXBDb21wb25lbnQuZ2V0Qm91bmRzKCkuY29udGFpbnMobWFya2VyX2xvYykpIDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ29uQ2hhbmdlQ2FsbGJhY2snKSlcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2VDYWxsYmFjayh2aXNpYmxlX21hcmtlcnMpO1xuICAgIH07XG5cbiAgICBoYW5kbGVNYXJrZXJDbGljayhtYXJrZXJfaWQpIHtcbiAgICAgICAgbGV0IG1hcmtlcnMgPSB0aGlzLnN0YXRlLm1hcmtlcnM7XG4gICAgICAgIGxldCBpc19vcGVuID0gbWFya2Vycy5maW5kKG0gPT4gbS5pZCA9PSBtYXJrZXJfaWQpLmlzSW5mb1dpbmRvd09wZW47XG4gICAgICAgIG1hcmtlcnMuZmluZChtID0+IG0uaWQgPT0gbWFya2VyX2lkKS5pc0luZm9XaW5kb3dPcGVuID0gIWlzX29wZW47XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IG1hcmtlcnM6IG1hcmtlcnMgfSk7XG4gICAgfTtcblxuICAgIGhhbmRsZU1hcmtlckRyYWcoZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1hcmtlckRyYWdnZWQoZXYubGF0TG5nLmxhdCgpLCBldi5sYXRMbmcubG5nKCkpO1xuICAgIH07XG5cbiAgICBoYW5kbGVNYXBDbGljayhldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwQ2xpY2soZXYubGF0TG5nLmxhdCgpLCBldi5sYXRMbmcubG5nKCkpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7bWFya2Vyc30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQge3pvb20sIGNlbnRlcn0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgZHJhZ2dhYmxlID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZHJhZ2dhYmxlJyk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxHb29nbGVNYXBXcmFwcGVyXG4gICAgICAgICAgICAgICAgc2hvd01hcmtlcnM9e21hcmtlcnMubGVuZ3RoID4gMH1cbiAgICAgICAgICAgICAgICBtYXJrZXJzPXttYXJrZXJzfVxuICAgICAgICAgICAgICAgIHpvb209eyB6b29tID8gem9vbSA6IE1BUC5kZWZhdWx0Wm9vbSB9XG4gICAgICAgICAgICAgICAgY2VudGVyPXsgY2VudGVyLmxhdCA/IGNlbnRlciA6IE1BUC5kZWZhdWx0Q2VudGVyIH1cbiAgICAgICAgICAgICAgICBsb2FkaW5nRWxlbWVudD17PGRpdiBzdHlsZT17eyBoZWlnaHQ6IGAxMDAlYCB9fSAvPn1cbiAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50PXs8ZGl2IHN0eWxlPXt7IGhlaWdodDogYDQwMHB4YCB9fSAvPn1cbiAgICAgICAgICAgICAgICBtYXBFbGVtZW50PXs8ZGl2IHN0eWxlPXt7IGhlaWdodDogYDEwMCVgIH19IC8+fVxuICAgICAgICAgICAgICAgIG9uTWFwTG9hZD17dGhpcy5oYW5kbGVNYXBMb2FkfVxuICAgICAgICAgICAgICAgIG9uTWFwQ2hhbmdlPXt0aGlzLmhhbmRsZU1hcENoYW5nZX1cbiAgICAgICAgICAgICAgICBvblRvZ2dsZUluZm9XaW5kb3c9e3RoaXMuaGFuZGxlTWFya2VyQ2xpY2t9XG4gICAgICAgICAgICAgICAgb25NYXJrZXJEcmFnPXt0aGlzLmhhbmRsZU1hcmtlckRyYWd9XG4gICAgICAgICAgICAgICAgZHJhZ2dhYmxlPXtkcmFnZ2FibGV9XG4gICAgICAgICAgICAgICAgb25NYXBDbGljaz17dGhpcy5oYW5kbGVNYXBDbGlja31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHTWFwO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeUFjY2Vzc0xldmVsc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFjY2Vzc0xldmVsc0lucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldEFjY2Vzc0xldmVscyA9IHRoaXMuZ2V0QWNjZXNzTGV2ZWxzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUoYWNjZXNzTGV2ZWwpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uVmFsdWVcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uVmFsdWUoYWNjZXNzTGV2ZWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gYWNjZXNzTGV2ZWwuaWQ7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWwoYWNjZXNzTGV2ZWwpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uTGFiZWxcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uTGFiZWwoYWNjZXNzTGV2ZWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gYCR7YWNjZXNzTGV2ZWwubmFtZX1gO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdhY2Nlc3NsZXZlbGlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0QWNjZXNzTGV2ZWxzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHtzdW1taXRJZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeUFjY2Vzc0xldmVscyhzdW1taXRJZCxpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgZXJyb3IsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldEFjY2Vzc0xldmVsc31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e20gPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShtKX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e20gPT4gdGhpcy5nZXRPcHRpb25MYWJlbChtKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9hY3Rpb24tZHJvcGRvd24ubGVzcyc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFjdGlvbkRyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogdmFsdWV9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayhldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5zdGF0ZS52YWx1ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b3B0aW9ucywgYWN0aW9uTGFiZWwsIHBsYWNlaG9sZGVyLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7dmFsdWV9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBsZXQgc21hbGxEZGwgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzbWFsbCcpID8gJ3NtYWxsJyA6ICcnO1xuICAgICAgICBsZXQgc21hbGxCdG4gPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzbWFsbCcpID8gJ2J0bi1ncm91cC1zbScgOiAnbm9ybWFsJztcblxuICAgICAgICBsZXQgdGhlVmFsdWUgPSAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgfHwgdmFsdWUgPT0gbnVsbCkgPyB2YWx1ZSA6IG9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHZhbHVlKTtcblxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJhY3Rpb24tZHJvcGRvd24gYnRuLWdyb3VwIFwiICsgc21hbGxCdG59PlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcImJ0bi1ncm91cCBhY3Rpb24tc2VsZWN0IHRleHQtbGVmdFwiICsgc21hbGxEZGx9XG4gICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBhY3Rpb24tYnV0dG9uXCIgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30+XG4gICAgICAgICAgICAgICAgICAgIHthY3Rpb25MYWJlbH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hlY2tib3hMaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICBsZXQgb3RoZXJWYWx1ZSA9IHByb3BzLnZhbHVlID8gcHJvcHMudmFsdWUuZmluZCggdiA9PiAhcHJvcHMub3B0aW9ucy5tYXAob3AgPT4gb3AudmFsdWUpLmluY2x1ZGVzKHYpICkgOiBmYWxzZTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3RoZXJDaGVja2VkOiAhIW90aGVyVmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlT3RoZXJDQkNoYW5nZSA9IHRoaXMuaGFuZGxlT3RoZXJDQkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldmVudCkge1xuICAgICAgICBsZXQgb3B0aW9uVmFsdWVzID0gdGhpcy5wcm9wcy5vcHRpb25zLm1hcChvcCA9PiBvcC52YWx1ZSk7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucHJvcHMudmFsdWUgPyBbLi4udGhpcy5wcm9wcy52YWx1ZV0gOiBbXTtcblxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoZVZhbCA9IGlzTmFOKGV2ZW50LnRhcmdldC52YWx1ZSkgPyBldmVudC50YXJnZXQudmFsdWUgOiBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhbHVlLnB1c2godGhlVmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIoIHYgPT4gdiAhPSBldmVudC50YXJnZXQudmFsdWUgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIodiA9PiBvcHRpb25WYWx1ZXMuaW5jbHVkZXModikpO1xuICAgICAgICAgICAgdmFsdWUucHVzaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2hlY2tib3hsaXN0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgaGFuZGxlT3RoZXJDQkNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvdGhlckNoZWNrZWQ6IGV2ZW50LnRhcmdldC5jaGVja2VkfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIG9wdGlvbnMsIGlkLCBjaGlsZHJlbiwgZXJyb3IsIGRpc2FibGVkLG5hbWUsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHsgb3RoZXJDaGVja2VkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGxldCBpbmxpbmUgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2lubGluZScpICk7XG4gICAgICAgIGxldCBodG1sID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdodG1sJykgKTtcbiAgICAgICAgbGV0IGFsbG93T3RoZXIgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2FsbG93T3RoZXInKSApO1xuICAgICAgICBsZXQgb3RoZXJWYWx1ZSA9IHZhbHVlID8gdmFsdWUuZmluZCggdiA9PiAhb3B0aW9ucy5tYXAob3AgPT4gb3AudmFsdWUpLmluY2x1ZGVzKHYpICkgOiBmYWxzZSA7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT09ICcnICk7XG4gICAgICAgIGxldCBpc0Rpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgZGlzYWJsZWQgPT0gdHJ1ZSk7XG5cblxuICAgICAgICBsZXQgc3R5bGUsIGxhYmVsO1xuXG4gICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMjJweCcsXG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogJzIwcHgnLFxuICAgICAgICAgICAgICAgIGZsb2F0OiAnbGVmdCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnLFxuICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJzdweCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGlkPXtgY2hsX3dyYXBwZXJfJHtpZH1gfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJjaGVja2JveGVzLWRpdlwiICsgKGhhc19lcnJvciA/ICcgZXJyb3InIDogJycpIH0+XG4gICAgICAgICAgICAgICAgICAgIHsgb3B0aW9ucy5tYXAob3AgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrZWQgPSB2YWx1ZSA/IHZhbHVlLmluY2x1ZGVzKG9wLnZhbHVlKSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLWNoZWNrYm94XCIga2V5PXtcInJhZGlvX2tleV9cIiArIG9wLnZhbHVlfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgY2JfJHtpZH1fJHtvcC52YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17bmFtZT8gbmFtZSA6IGlkIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0gY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1pbnB1dFwiIHZhbHVlPXtvcC52YWx1ZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtgY2JfJHtpZH1fJHtvcC52YWx1ZX1gICB9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtodG1sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+e29wLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshaHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAgICAgIHthbGxvd090aGVyICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jaGVjayBhYmMtY2hlY2tib3hcIiBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtcImNiX290aGVyXCIgKyBpZH0gY2hlY2tlZD17b3RoZXJDaGVja2VkfSBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPdGhlckNCQ2hhbmdlfSBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWlucHV0XCIgdmFsdWU9XCJvdGhlclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e1wiY2Jfb3RoZXJcIiArIGlkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7VC50cmFuc2xhdGUoXCJnZW5lcmFsLm90aGVyXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB7YWxsb3dPdGhlciAmJiBvdGhlckNoZWNrZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e3BhZGRpbmdMZWZ0OiAnMjJweCcsIHdpZHRoOiAnNTAlJ319PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIGRpc2FibGVkPXtpc0Rpc2FibGVkfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9IHZhbHVlPXtvdGhlclZhbHVlfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuXG5DaGVja2JveExpc3QucHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeUNvbXBhbmllc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5pbXBvcnQgQXN5bmNDcmVhdGFibGVTZWxlY3QgZnJvbSBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcGFueUlucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmV3ID0gdGhpcy5oYW5kbGVOZXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRDb21wYW5pZXMgPSB0aGlzLmdldENvbXBhbmllcy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykgfHwgdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaXNNdWx0aScpKTtcbiAgICAgICAgY29uc3QgdGhlVmFsdWUgPSBpc011bHRpID8gdmFsdWUubWFwKHYgPT4gKHtpZDogdi52YWx1ZSwgbmFtZTogdi5sYWJlbH0pKSA6IHtpZDogdmFsdWUudmFsdWUsIG5hbWU6IHZhbHVlLmxhYmVsfTtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoZVZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb21wYW55aW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBoYW5kbGVOZXcodmFsdWUpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlVmFsdWUgPSAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHt2YWx1ZTogbmV3VmFsdWUuaWQsIGxhYmVsOiBuZXdWYWx1ZS5uYW1lfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3BzLm9uQ3JlYXRlKHZhbHVlLCB0cmFuc2xhdGVWYWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29tcGFuaWVzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlT3B0aW9ucyA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3T3B0aW9ucyA9IG9wdGlvbnMubWFwKGMgPT4gKHt2YWx1ZTogYy5pZC50b1N0cmluZygpLCBsYWJlbDogYy5uYW1lfSkpO1xuICAgICAgICAgICAgY2FsbGJhY2sobmV3T3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcXVlcnlDb21wYW5pZXMoaW5wdXQsIHRyYW5zbGF0ZU9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtlcnJvciwgdmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpIHx8IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2lzTXVsdGknKSk7XG4gICAgICAgIGxldCBhbGxvd0NyZWF0ZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2FsbG93Q3JlYXRlJyk7XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcblxuICAgICAgICBpZiAoaXNNdWx0aSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHZhbHVlLm1hcCh2ID0+ICh7dmFsdWU6IHYuaWQudG9TdHJpbmcoKSwgbGFiZWw6IHYubmFtZX0gKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0ge3ZhbHVlOiB2YWx1ZS5pZC50b1N0cmluZygpLCBsYWJlbDogdmFsdWUubmFtZX07XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IEFzeW5jQ29tcG9uZW50ID0gYWxsb3dDcmVhdGVcbiAgICAgICAgICAgID8gQXN5bmNDcmVhdGFibGVTZWxlY3RcbiAgICAgICAgICAgIDogQXN5bmNTZWxlY3Q7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRDb21wYW5pZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uPXt0aGlzLmhhbmRsZU5ld31cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBEcm9wZG93biBmcm9tICcuL2Ryb3Bkb3duJztcbmltcG9ydCB7Z2V0Q291bnRyeUxpc3R9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3VudHJ5RHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBvcHRpb25zOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zID0gdGhpcy5zZXRPcHRpb25zLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgaWYob3B0aW9ucy5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICBnZXRDb3VudHJ5TGlzdCh0aGlzLnNldE9wdGlvbnMsIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvdW50cnlkZGwnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBzZXRPcHRpb25zKHJlc3BvbnNlKSB7XG4gICAgICAgIGxldCBjb3VudHJ5TGlzdCA9IHJlc3BvbnNlLm1hcChjID0+ICh7bGFiZWw6IGMubmFtZSwgdmFsdWU6IGMuaXNvX2NvZGV9KSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wdGlvbnM6IGNvdW50cnlMaXN0fSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17b3B0aW9uc30gey4uLnRoaXMucHJvcHN9IC8+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQge2dldENvdW50cnlMaXN0fSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ291bnRyeUlucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3B0aW9uczogW11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICAgIGdldENvdW50cnlMaXN0KHRoaXMuc2V0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc2V0T3B0aW9ucyhyZXNwb25zZSkge1xuICAgICAgICBsZXQgY291bnRyeUxpc3QgPSByZXNwb25zZS5tYXAoYyA9PiAoe2xhYmVsOiBjLm5hbWUsIHZhbHVlOiBjLmlzb19jb2RlfSkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcHRpb25zOiBjb3VudHJ5TGlzdH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcblxuICAgICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB2YWx1ZS5tYXAodiA9PiB2LnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoZVZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb3VudHJ5aW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IG9wdGlvbnMuZmlsdGVyKG9wID0+IHZhbHVlLmluY2x1ZGVzKG9wLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9ICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCB8fCB2YWx1ZSA9PSBudWxsKSA/IHZhbHVlIDogb3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1wiZHJvcGRvd25cIiArIChoYXNfZXJyb3IgPyAnIGVycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICcuL2RhdGV0aW1lcGlja2VyLmxlc3MnO1xuaW1wb3J0IERhdGV0aW1lIGZyb20gJ3JlYWN0LWRhdGV0aW1lJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVRpbWVQaWNrZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNWYWxpZERhdGUgPSB0aGlzLmlzVmFsaWREYXRlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gcHJldlByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZGF0ZSkge1xuXG4gICAgICAgIGxldCB7IHRpbWV6b25lIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmIChkYXRlICYmIG1vbWVudC5pc01vbWVudChkYXRlKSkge1xuICAgICAgICAgICAgZGF0ZSA9IG1vbWVudC50eihkYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpLCB0aW1lem9uZSlcbiAgICAgICAgfSBlbHNlIGlmIChkYXRlID09PSAnJykge1xuICAgICAgICAgICAgZGF0ZSA9IG1vbWVudCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGF0ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICBpZiAoZGF0ZSAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBpc1ZhbGlkRGF0ZShjdXJyZW50RGF0ZSwgc2VsZWN0ZWREYXRlKSB7XG4gICAgICAgIGxldCB7IHRpbWV6b25lLCB2YWxpZGF0aW9uIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge2FmdGVyLCBiZWZvcmV9ID0gdmFsaWRhdGlvbjtcblxuICAgICAgICBpZiAoYWZ0ZXIgPT0gJzwnKVxuICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50RGF0ZS5pc0JlZm9yZShtb21lbnQudHooYmVmb3JlICogMTAwMCwgdGltZXpvbmUpKSk7XG4gICAgICAgIGVsc2UgaWYoYWZ0ZXIgPT0gJz4nKVxuICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50RGF0ZS5pc0FmdGVyKG1vbWVudC50eihiZWZvcmUgKiAxMDAwLCB0aW1lem9uZSkpKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgYWZ0ZXJEYXRlID0gbW9tZW50LnR6KGFmdGVyICogMTAwMCwgdGltZXpvbmUpLnN1YnRyYWN0KDEsICdkYXknKTtcbiAgICAgICAgICAgIGxldCBiZWZvcmVEYXRlID0gbW9tZW50LnR6KGJlZm9yZSAqIDEwMDAsIHRpbWV6b25lKTtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5pc0FmdGVyKGFmdGVyRGF0ZSkgJiYgY3VycmVudERhdGUuaXNCZWZvcmUoYmVmb3JlRGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB2YWxpZGF0ZSA9ICh0eXBlb2YgdGhpcy5wcm9wcy52YWxpZGF0aW9uICE9ICd1bmRlZmluZWQnKTtcbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgaWQsIHZhbHVlLCBmb3JtYXQsIGVycm9yLCBpbnB1dFByb3BzLCBkaXNhYmxlZCwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAnZm9ybS1jb250cm9sICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKTtcbiAgICAgICAgbGV0IGlucHV0RGlzYWJsZWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSkgPyBkaXNhYmxlZCA6IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHt2YWxpZGF0ZSA/IChcbiAgICAgICAgICAgICAgICAgICAgPERhdGV0aW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkRGF0ZT17dGhpcy5pc1ZhbGlkRGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ9e2Zvcm1hdC5kYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdD17Zm9ybWF0LnRpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UHJvcHM9e3suLi5pbnB1dFByb3BzLCBpZDogaWQsIGNsYXNzTmFtZTogY2xhc3NOYW1lLCBkaXNhYmxlZDogaW5wdXREaXNhYmxlZCwgYXV0b0NvbXBsZXRlOiAnb2ZmJ319XG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8RGF0ZXRpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ9e2Zvcm1hdC5kYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdD17Zm9ybWF0LnRpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UHJvcHM9e3suLi5pbnB1dFByb3BzLCBpZDogaWQsIGNsYXNzTmFtZTogY2xhc3NOYW1lLCBkaXNhYmxlZDogaW5wdXREaXNhYmxlZCwgYXV0b0NvbXBsZXRlOiAnb2ZmJ319XG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHNlbGVjdGlvbikge1xuXG4gICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmlzTXVsdGkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLm1hcCh2YWwgPT4gdmFsLnZhbHVlKSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi52YWx1ZSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkcm9wZG93bidcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBlcnJvciwgY2xlYXJhYmxlLCBkaXNhYmxlZCwgb3ZlcnJpZGVDU1MsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaXNDbGVhcmFibGUgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xlYXJhYmxlJykpO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGxldCBzZWxlY3RDbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdvdmVycmlkZUNTUycpIHx8IG92ZXJyaWRlQ1NTID09IGZhbHNlKSB7XG4gICAgICAgICAgICBzZWxlY3RDbGFzc05hbWUgPSAnZHJvcGRvd24gJyArIGNsYXNzTmFtZSArICcgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB0aGlzLnByb3BzLm9wdGlvbnMuZmlsdGVyKG9wID0+IHZhbHVlLmluY2x1ZGVzKG9wLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9ICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCB8fCB2YWx1ZSA9PSBudWxsKSA/IHZhbHVlIDogdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RTdHlsZXMgPSB7IG1lbnU6IHN0eWxlcyA9PiAoeyAuLi5zdHlsZXMsIHpJbmRleDogOTk5IH0pIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3NlbGVjdENsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJhYmxlPXtpc0NsZWFyYWJsZX1cbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGVzPXtzZWxlY3RTdHlsZXN9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHRFZGl0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLlJpY2hUZXh0RWRpdG9yID0gbnVsbDtcblxuICAgICAgICAvLyB0aGlzIGlzIGRvbmUgYmMgZHVlIFNTUiBpc3N1ZXNcbiAgICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3N0dXIvcmVhY3QtcnRlL2lzc3Vlcy8zNzNcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLlJpY2hUZXh0RWRpdG9yID0gcmVxdWlyZSgncmVhY3QtcnRlJykuZGVmYXVsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBlZGl0b3JWYWx1ZTogdGhpcy5SaWNoVGV4dEVkaXRvcj8uY3JlYXRlRW1wdHlWYWx1ZSgpLFxuICAgICAgICAgICAgY3VycmVudFZhbHVlOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHt2YWx1ZX0gPSBwcm9wcztcbiAgICAgICAgY29uc3Qge2VkaXRvclZhbHVlLCBjdXJyZW50VmFsdWV9ID0gc3RhdGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGVkaXRvclZhbHVlOiBlZGl0b3JWYWx1ZS5zZXRDb250ZW50RnJvbVN0cmluZyh2YWx1ZSwgJ2h0bWwnKSwgY3VycmVudFZhbHVlOiB2YWx1ZX1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZWRpdG9yVmFsdWUpIHtcblxuICAgICAgICBsZXQgb2xkRWRpdG9yVmFsdWUgPSB0aGlzLnN0YXRlLmVkaXRvclZhbHVlO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtlZGl0b3JWYWx1ZX0pO1xuXG4gICAgICAgIGxldCBvbGRDb250ZW50U3RhdGUgPSBvbGRFZGl0b3JWYWx1ZSA/IG9sZEVkaXRvclZhbHVlLmdldEVkaXRvclN0YXRlKCkuZ2V0Q3VycmVudENvbnRlbnQoKSA6IG51bGw7XG4gICAgICAgIGxldCBuZXdDb250ZW50U3RhdGUgPSBlZGl0b3JWYWx1ZS5nZXRFZGl0b3JTdGF0ZSgpLmdldEN1cnJlbnRDb250ZW50KCk7XG5cbiAgICAgICAgaWYgKG9sZENvbnRlbnRTdGF0ZSAhPT0gbmV3Q29udGVudFN0YXRlKSB7XG4gICAgICAgICAgICBsZXQgc3RyaW5nVmFsdWUgPSBlZGl0b3JWYWx1ZS50b1N0cmluZygnaHRtbCcpO1xuICAgICAgICAgICAgc3RyaW5nVmFsdWUgPSBzdHJpbmdWYWx1ZSA9PT0gJzxwPjxicj48L3A+JyA/ICcnIDogc3RyaW5nVmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRWYWx1ZTogc3RyaW5nVmFsdWV9KTtcblxuICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlICE9PSB0aGlzLnByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dGVkaXRvcidcbiAgICAgICAgICAgICAgICAgICAgfX07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgZXJyb3IsIGNsYXNzTmFtZSwgaWQsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICB7dGhpcy5SaWNoVGV4dEVkaXRvciAmJlxuICAgICAgICAgICAgICAgICAgICA8dGhpcy5SaWNoVGV4dEVkaXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmVkaXRvclZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlFdmVudHN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0RXZlbnRzID0gdGhpcy5nZXRFdmVudHMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdldmVudGlucHV0J1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRFdmVudHMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge3N1bW1pdCwgb25seVB1Ymxpc2hlZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXJ5RXZlbnRzKHN1bW1pdC5pZCwgaW5wdXQsIG9ubHlQdWJsaXNoZWQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0RXZlbnRzfVxuICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uLmlkfVxuICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gb3B0aW9uLnRpdGxlfVxuICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENyZWF0YWJsZVNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZSc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJlZU11bHRpVGV4dElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaW5wdXRWYWx1ZTogJydcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UgPSB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IHRoaXMuaGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgbGltaXQgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdsaW1pdCcpID8gdGhpcy5wcm9wcy5saW1pdCA6IGZhbHNlO1xuXG4gICAgICAgIGlmICghbGltaXQgfHwgbGltaXQgPj0gdmFsdWUubGVuZ3RoICkge1xuICAgICAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZnJlZXRleHRsaXN0J1xuICAgICAgICAgICAgICAgIH19O1xuXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUlucHV0Q2hhbmdlKGlucHV0VmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlucHV0VmFsdWUgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgICBjb25zdCB7IGlucHV0VmFsdWUgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCB7IHZhbHVlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICBjYXNlICdUYWInOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlOiAnJyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKFsuLi52YWx1ZSwge2xhYmVsOiBpbnB1dFZhbHVlLCB2YWx1ZTogaW5wdXRWYWx1ZX1dKVxuXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGlucHV0VmFsdWUgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCB7aWQsIHZhbHVlLCBvbkNoYW5nZSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Q3JlYXRhYmxlU2VsZWN0XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cz17e0Ryb3Bkb3duSW5kaWNhdG9yOiBudWxsfX1cbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgIGNsZWFyYWJsZVxuICAgICAgICAgICAgICAgIGlzTXVsdGlcbiAgICAgICAgICAgICAgICBtZW51Q29udGFpbmVyU3R5bGU9e3tkaXNwbGF5OiAnbm9uZSd9fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBvbklucHV0Q2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgIG9uSW5wdXRLZXlEb3duPXt0aGlzLmhhbmRsZUtleURvd259XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC50eXBlX3NvbWV0aGluZ1wiKX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlHcm91cHN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcm91cElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzID0gdGhpcy5nZXRHcm91cHMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdncm91cGlucHV0J1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRHcm91cHMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeUdyb3VwcyhpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRHcm91cHN9XG4gICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb24uaWR9XG4gICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb24udGl0bGV9XG4gICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IE9wdGlvbkdyb3VwID0gICh7XG4gICAgdmFsdWUsXG4gICAgbGFiZWwsXG4gICAgb3B0aW9uc1xufSkgPT4ge1xuICAgIHJldHVybiAoW1xuICAgICAgICA8b3B0aW9uIGtleT17XCJncm91cFwiICsgdmFsdWV9IGNsYXNzTmFtZT1cIm9wdGlvbi1ncm91cFwiIHZhbHVlPXt2YWx1ZX0+e2xhYmVsfTwvb3B0aW9uPixcbiAgICAgICAgb3B0aW9ucy5tYXAoKG9wdCxpKSA9PiAoXG4gICAgICAgICAgICA8b3B0aW9uIGNsYXNzTmFtZT1cIm9wdGlvbi1jaGlsZFwiIGtleT17b3B0LnZhbHVlfSB2YWx1ZT17b3B0LnZhbHVlfT4gLSB7b3B0LmxhYmVsfTwvb3B0aW9uPlxuICAgICAgICApKVxuICAgIF0pO1xufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcHRpb25Hcm91cCB9IGZyb20gJy4vT3B0aW9uR3JvdXAnO1xuaW1wb3J0ICcuL29wdGlvbmdyb3VwLmxlc3MnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcm91cGVkRHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gcHJldlByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2lkLCBvcHRpb25zLCBwbGFjZWhvbGRlciwgY2xhc3NOYW1lLCBlcnJvcn0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCB7dmFsdWV9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWUgKyAnIGZvcm0tY29udHJvbCAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZD57cGxhY2Vob2xkZXJ9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdCxpKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHQub3B0aW9ucyAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uR3JvdXAga2V5PXsnZ3JvdXBfb3B0XycraX0gbGFiZWw9e29wdC5sYWJlbH0gdmFsdWU9e29wdC52YWx1ZX0gb3B0aW9ucz17b3B0Lm9wdGlvbnN9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtvcHQudmFsdWV9IHZhbHVlPXtvcHQudmFsdWV9PntvcHQubGFiZWx9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn0iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQge2dldExhbmd1YWdlTGlzdH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExhbmd1YWdlSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICAgIHNob3VsZFVzZUlkOiBwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc2hvdWxkVXNlSWQnKSA/IHByb3BzLnNob3VsZFVzZUlkIDogZmFsc2UsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAgICAgZ2V0TGFuZ3VhZ2VMaXN0KHRoaXMuc2V0T3B0aW9ucywgdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cblxuICAgIHNldE9wdGlvbnMocmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGxhbmd1YWdlTGlzdCA9ICh0aGlzLnN0YXRlLnNob3VsZFVzZUlkKSA/XG4gICAgICAgICAgICByZXNwb25zZS5tYXAobCA9PiAoe2xhYmVsOiBsLm5hbWUsIHZhbHVlOiBsLmlkfSkpOlxuICAgICAgICAgICAgcmVzcG9uc2UubWFwKGwgPT4gKHtsYWJlbDogbC5uYW1lLCB2YWx1ZTogbC5pc29fY29kZX0pKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3B0aW9uczogbGFuZ3VhZ2VMaXN0fSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHZhbHVlLm1hcCh2ID0+IHYudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhlVmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2xhZ3VhZ2VpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gb3B0aW9ucy5maWx0ZXIob3AgPT4gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0IHx8IHZhbHVlID09IG51bGwpID8gdmFsdWUgOiBvcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5TWVtYmVyc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lbWJlcklucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE1lbWJlcnMgPSB0aGlzLmdldE1lbWJlcnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25MYWJlbCA9IHRoaXMuZ2V0T3B0aW9uTGFiZWwuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25WYWx1ZShtZW1iZXIpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uVmFsdWVcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uVmFsdWUobWVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIG1lbWJlci5pZDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25MYWJlbChtZW1iZXIpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uTGFiZWxcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uTGFiZWwobWVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIGAke21lbWJlci5maXJzdF9uYW1lfSAke21lbWJlci5sYXN0X25hbWV9ICgke21lbWJlci5pZH0pYDtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnbWVtYmVyaW5wdXQnXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldE1lbWJlcnMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlNZW1iZXJzKGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBlcnJvciwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0TWVtYmVyc31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e20gPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShtKX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e20gPT4gdGhpcy5nZXRPcHRpb25MYWJlbChtKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCBBc3luY0NyZWF0YWJsZVNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jQ3JlYXRhYmxlJztcbmltcG9ydCB7cXVlcnlPcmdhbml6YXRpb25zfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JnYW5pemF0aW9uSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVOZXcgPSB0aGlzLmhhbmRsZU5ldy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9yZ2FuaXphdGlvbnMgPSB0aGlzLmdldE9yZ2FuaXphdGlvbnMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7aWQ6IHZhbHVlLnZhbHVlLCBuYW1lOiB2YWx1ZS5sYWJlbH0sXG4gICAgICAgICAgICAgICAgdHlwZTogJ29yZ2FuaXphdGlvbmlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgaGFuZGxlTmV3KHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZVZhbHVlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh7dmFsdWU6IG5ld1ZhbHVlLmlkLCBsYWJlbDogbmV3VmFsdWUubmFtZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNyZWF0ZSh2YWx1ZSwgdHJhbnNsYXRlVmFsdWUpO1xuICAgIH1cblxuICAgIGdldE9yZ2FuaXphdGlvbnMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdPcHRpb25zID0gb3B0aW9ucy5tYXAob3JnID0+ICh7dmFsdWU6IG9yZy5pZC50b1N0cmluZygpLCBsYWJlbDogb3JnLm5hbWV9KSk7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXdPcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBxdWVyeU9yZ2FuaXphdGlvbnMoaW5wdXQsIHRyYW5zbGF0ZU9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtlcnJvciwgdmFsdWUsIGlkLCBvbkNoYW5nZSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBhbGxvd0NyZWF0ZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2FsbG93Q3JlYXRlJyk7XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IHZhbHVlID8ge3ZhbHVlOiB2YWx1ZS5pZC50b1N0cmluZygpLCBsYWJlbDogdmFsdWUubmFtZX0gOiBudWxsO1xuXG4gICAgICAgIGNvbnN0IEFzeW5jQ29tcG9uZW50ID0gYWxsb3dDcmVhdGVcbiAgICAgICAgICAgID8gQXN5bmNDcmVhdGFibGVTZWxlY3RcbiAgICAgICAgICAgIDogQXN5bmNTZWxlY3Q7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRPcmdhbml6YXRpb25zfVxuICAgICAgICAgICAgICAgICAgICBvbkNyZWF0ZU9wdGlvbj17dGhpcy5oYW5kbGVOZXd9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuXG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFkaW9MaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2Uoc2VsZWN0aW9uKSB7XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogc2VsZWN0aW9uLnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdyYWRpbydcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0TGFiZWwob3B0aW9uLCBpZCwgaW5saW5lLCBzaW1wbGUsIGh0bWwpIHtcbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSBzdHlsZT17e2Rpc3BsYXk6ICdpbmxpbmUtYmxvY2snfX0+XG4gICAgICAgICAgICAgICAgICAgIHtodG1sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHshaHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChzaW1wbGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtgcmFkaW9fJHtpZH1fJHtvcHRpb24udmFsdWV9YH0gPlxuICAgICAgICAgICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSBzdHlsZT17e2Rpc3BsYXk6ICdpbmxpbmUtYmxvY2snfX0+XG4gICAgICAgICAgICAgICAgICAgIDxoNCBzdHlsZT17e21hcmdpblRvcDogJzBweCd9fT57b3B0aW9uLmxhYmVsfTwvaDQ+XG4gICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPntvcHRpb24uZGVzY3JpcHRpb259PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIGVycm9yLCBkaXNhYmxlZCwgb3B0aW9ucyxpZCwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpbmxpbmUgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2lubGluZScpICk7XG4gICAgICAgIGxldCBzaW1wbGUgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3NpbXBsZScpICk7XG4gICAgICAgIGxldCBodG1sID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdodG1sJykgKTtcbiAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBkaXNhYmxlZCA9PSB0cnVlKTtcblxuICAgICAgICBsZXQgc3R5bGUsIGxhYmVsO1xuXG4gICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMjJweCcsXG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogJzIwcHgnLFxuICAgICAgICAgICAgICAgIGZsb2F0OiAnbGVmdCdcbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgaWQ9e2BybF93cmFwcGVyXyR7aWR9YH0+XG4gICAgICAgICAgICAgICAgeyBvcHRpb25zLm1hcChvcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGVja2VkID0gKG9wLnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jaGVjayBhYmMtcmFkaW9cIiBrZXk9e2ByYWRpb19rZXlfJHtpZH1fJHtvcC52YWx1ZX1gfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2ByYWRpb18ke2lkfV8ke29wLnZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtvcC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17YHJhZGlvXyR7aWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmdldExhYmVsKG9wLCBpZCwgaW5saW5lLCBzaW1wbGUsIGh0bWwpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cblJhZGlvTGlzdC5wcm9wVHlwZXMgPSB7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHsgcXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMgfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuY29uc3QgUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0ID0gKHsgZXJyb3IsIHZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCBpc011bHRpLCBjbGFzc05hbWUsIHN1bW1pdElkLCBvbkVycm9yLCAuLi5yZXN0IH0pID0+IHtcblxuICAgIGNvbnN0IFt0aGVWYWx1ZSwgc2V0VGhlVmFsdWVdID0gdXNlU3RhdGUoeyB2YWx1ZTogbnVsbCwgbGFiZWw6ICcnIH0pO1xuICAgIGNvbnN0IFtmcmVlSW5wdXQsIHNldEZyZWVJbnB1dF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtpc011bHRpT3B0aW9uYWwsIHNldElzTXVsdGlPcHRpb25hbF0gPSB1c2VTdGF0ZShtdWx0aSB8fCBpc011bHRpKTtcbiAgICBjb25zdCBbaGFzRXJyb3IsIHNldEhhc0Vycm9yXSA9IHVzZVN0YXRlKGVycm9yKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgfSwgW10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCF2YWx1ZS5pZCAmJiB2YWx1ZS5uYW1lKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICBzZXRGcmVlSW5wdXQodHJ1ZSk7XG4gICAgICAgICAgICBzZXRJbnB1dFZhbHVlKHZhbHVlLm5hbWUpO1xuICAgICAgICAgICAgc2V0VGhlVmFsdWUoeyB2YWx1ZTogbnVsbCwgbGFiZWw6IHZhbHVlLm5hbWUgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc011bHRpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZXRUaGVWYWx1ZSh2YWx1ZS5tYXAodiA9PiAoeyB2YWx1ZTogdi5pZCwgbGFiZWw6IHYubmFtZSB9KSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaXNNdWx0aSAmJiB2YWx1ZS5pZCkge1xuICAgICAgICAgICAgICAgIHNldFRoZVZhbHVlKHsgdmFsdWU6IHZhbHVlLmlkLCBsYWJlbDogdmFsdWUubmFtZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFt2YWx1ZV0pXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZXZlbnRWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAoZXZlbnRWYWx1ZS52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0RnJlZUlucHV0KHRydWUpO1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWVTdGF0ZSA9IGlzTXVsdGlPcHRpb25hbCA/IGV2ZW50VmFsdWUubWFwKHYgPT4gKHsgdmFsdWU6IHYudmFsdWUsIGxhYmVsOiAnJyB9KSkgOiB7IHZhbHVlOiBldmVudFZhbHVlLnZhbHVlLCBsYWJlbDogJycgfTtcbiAgICAgICAgICAgIHNldFRoZVZhbHVlKG5ld1ZhbHVlU3RhdGUpO1xuICAgICAgICAgICAgbGV0IGV2ID0ge1xuICAgICAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBvbkNoYW5nZShldik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGlzTXVsdGlPcHRpb25hbCA/IGV2ZW50VmFsdWUubWFwKHYgPT4gKHsgaWQ6IHYudmFsdWUsIG5hbWU6IHYubGFiZWwgfSkpIDogeyBpZDogZXZlbnRWYWx1ZS52YWx1ZSwgbmFtZTogZXZlbnRWYWx1ZS5sYWJlbCB9O1xuICAgICAgICBjb25zdCBuZXdWYWx1ZVN0YXRlID0gaXNNdWx0aU9wdGlvbmFsID8gZXZlbnRWYWx1ZS5tYXAodiA9PiAoeyB2YWx1ZTogdi52YWx1ZSwgbGFiZWw6IHYubGFiZWwgfSkpIDogeyB2YWx1ZTogZXZlbnRWYWx1ZS52YWx1ZSwgbGFiZWw6IGV2ZW50VmFsdWUubGFiZWwgfTtcbiAgICAgICAgc2V0VGhlVmFsdWUobmV3VmFsdWVTdGF0ZSk7XG5cblxuICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb21wYW55aW5wdXQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dENsZWFyID0gKCkgPT4ge1xuICAgICAgICBzZXRGcmVlSW5wdXQoIWZyZWVJbnB1dCk7XG4gICAgICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgICAgICBzZXRUaGVWYWx1ZSh7IHZhbHVlOiBudWxsLCBsYWJlbDogJycgfSk7XG4gICAgICAgIGxldCBldiA9IHtcbiAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogeyBpZDogbnVsbCwgbmFtZTogJycgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoZXZ0KSA9PiB7XG4gICAgICAgIHNldElucHV0VmFsdWUoZXZ0LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIGxldCBldiA9IHtcbiAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogeyBpZDogbnVsbCwgbmFtZTogZXZ0LnRhcmdldC52YWx1ZSB9LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb21wYW55aW5wdXQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRDb21wYW5pZXMgPSAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlT3B0aW9ucyA9IChvcHRpb25zKSA9PiB7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBvbkVycm9yKG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuICAgICAgICAgICAgY29uc3Qgb3RoZXJPcHRpb24gPSB7IHZhbHVlOiBudWxsLCBsYWJlbDogJ090aGVyJyB9O1xuICAgICAgICAgICAgbGV0IG5ld09wdGlvbnMgPSBbLi4ub3B0aW9ucy5tYXAoYyA9PiAoeyB2YWx1ZTogYy5pZC50b1N0cmluZygpLCBsYWJlbDogYy5uYW1lIH0pKSwgb3RoZXJPcHRpb25dO1xuICAgICAgICAgICAgY2FsbGJhY2sobmV3T3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMoc3VtbWl0SWQsIGlucHV0LCB0cmFuc2xhdGVPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAge2ZyZWVJbnB1dCA/XG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgeW91ciBjb21wYW55XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nUmlnaHQ6IDI1IH19XG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGkgYXJpYS1sYWJlbD0nQ2xlYXInIHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBib3R0b206IDEwLCByaWdodDogMjUsIGN1cnNvcjogJ3BvaW50ZXInLCBvcGFjaXR5OiAnNjUlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlSW5wdXRDbGVhcn0gY2xhc3NOYW1lPSdmYSBmYS1jbG9zZSc+PC9pPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhc3NpbmcgbnVsbCBpZiBubyBsYWJlbCBhbmQgdmFsdWUgdG8gc2hvdyB0aGUgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlLmxhYmVsICYmIHRoZVZhbHVlLnZhbHVlID8gdGhlVmFsdWUgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nU2VsZWN0IGEgY29tcGFueSdcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE9wdGlvbnM9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXtnZXRDb21wYW5pZXN9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGlPcHRpb25hbH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7aGFzRXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0O1xuXG5SZWdpc3RyYXRpb25Db21wYW55SW5wdXQucHJvcFR5cGVzID0ge1xuICAgIG9uRXJyb3I6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHsgY29tcG9uZW50cyB9IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvY29tcG9uZW50cydcbmltcG9ydCB7IHF1ZXJ5U3BlYWtlcnMgfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BlYWtlcklucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0U3BlYWtlcnMgPSB0aGlzLmdldFNwZWFrZXJzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3NwZWFrZXJpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKHNwZWFrZXJJZCkge1xuICAgICAgICBsZXQge2hpc3Rvcnl9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBoaXN0b3J5LnB1c2goYC9hcHAvc3BlYWtlcnMvJHtzcGVha2VySWR9YCk7XG4gICAgfVxuXG4gICAgZ2V0U3BlYWtlcnMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3VtbWl0SWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc3VtbWl0SWQnKSkgPyB0aGlzLnByb3BzLnN1bW1pdElkIDogbnVsbDtcblxuICAgICAgICBxdWVyeVNwZWFrZXJzKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGdldE9wdGlvblZhbHVlKHNwZWFrZXIpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uVmFsdWVcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uVmFsdWUoc3BlYWtlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBzcGVha2VyLmlkO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkxhYmVsKHNwZWFrZXIpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uTGFiZWxcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uTGFiZWwoc3BlYWtlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBgJHtzcGVha2VyLmZpcnN0X25hbWV9ICR7c3BlYWtlci5sYXN0X25hbWV9ICgke3NwZWFrZXIuaWR9KWA7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvbkNoYW5nZSwgaGlzdG9yeSwgc3VtbWl0SWQsIGVycm9yLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcblxuICAgICAgICBjb25zdCBNdWx0aVZhbHVlTGFiZWwgPSAocHJvcHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGEgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVDbGljayhwcm9wcy5kYXRhLmlkKX0gc3R5bGU9e3tjdXJzb3I6ICdwb2ludGVyJ319PlxuICAgICAgICAgICAgICAgICAgICA8Y29tcG9uZW50cy5NdWx0aVZhbHVlTGFiZWwgey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRTcGVha2Vyc31cbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cz17eyBNdWx0aVZhbHVlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e3MgPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShzKX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e3MgPT4gdGhpcy5nZXRPcHRpb25MYWJlbChzKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5U3BvbnNvcnN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcG9uc29ySW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRTcG9uc29ycyA9IHRoaXMuZ2V0U3BvbnNvcnMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnc3BvbnNvcmlucHV0J1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRTcG9uc29ycyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7c3VtbWl0SWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeVNwb25zb3JzKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtlcnJvciwgdmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIHN1bW1pdElkLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb24uaWR9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gYCR7b3B0aW9uLmNvbXBhbnkubmFtZX0gKCR7b3B0aW9uLnNwb25zb3JzaGlwLmxhYmVsfSlgfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldFNwb25zb3JzfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlTdW1taXRzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VtbWl0SW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0U3VtbWl0cyA9IHRoaXMuZ2V0U3VtbWl0cy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdzdW1taXRpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0U3VtbWl0cyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXJ5U3VtbWl0cyhpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBlcnJvciwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0U3VtbWl0c31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wID0+IG9wLmlkfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3AgPT4gKGAke29wLm5hbWV9ICgke29wLmlkfSlgKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlUYWdzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcbmltcG9ydCB7c2hhbGxvd0VxdWFsfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWV0aG9kc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWdJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZS5tYXAoKHQpID0+ICh7dGFnOiB0LnRhZ30pKVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRUYWdzID0gdGhpcy5nZXRUYWdzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZighc2hhbGxvd0VxdWFsKHRoaXMucHJvcHMudmFsdWUsIHByZXZQcm9wcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIGxldCBuZXh0VmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlLm1hcCgodCkgPT4gKHt0YWc6IHQudGFnfSkpO1xuXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogbmV4dFZhbHVlfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGFnaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRUYWdzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN1bW1pdElkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3N1bW1pdElkJykpID8gdGhpcy5wcm9wcy5zdW1taXRJZCA6IG51bGw7XG5cbiAgICAgICAgcXVlcnlUYWdzKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtjbGFzc05hbWUsIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICBsZXQgb3JkZXJlZFRhZ3MgPSB0aGlzLnN0YXRlLnZhbHVlLnNvcnQoKGEsIGIpID0+IChhLnRhZy50b0xvd2VyQ2FzZSgpID4gYi50YWcudG9Mb3dlckNhc2UoKSA/IDEgOiAoYS50YWcudG9Mb3dlckNhc2UoKSA8IGIudGFnLnRvTG93ZXJDYXNlKCkgPyAtMSA6IDApKSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZSArICcgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtvcmRlcmVkVGFnc31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRUYWdzfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IG9wdGlvbi50YWd9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uLnRhZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgY2xhc3NfbmFtZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gY2xhc3NOYW1lIDogJ2Zvcm0tY29udHJvbCc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NfbmFtZSArICcgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0QXJlYSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gcHJldlByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGNsYXNzX25hbWUgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IGNsYXNzTmFtZSA6ICdmb3JtLWNvbnRyb2wnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzX25hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeVRpY2tldFR5cGVzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGlja2V0VHlwZXNJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRUaWNrZXRUeXBlcyA9IHRoaXMuZ2V0VGlja2V0VHlwZXMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25MYWJlbCA9IHRoaXMuZ2V0T3B0aW9uTGFiZWwuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25WYWx1ZSh0aWNrZXRUeXBlKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvblZhbHVlXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvblZhbHVlKHRpY2tldFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gdGlja2V0VHlwZS5pZDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25MYWJlbCh0aWNrZXRUeXBlKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvbkxhYmVsXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvbkxhYmVsKHRpY2tldFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gYCR7dGlja2V0VHlwZS5uYW1lfWA7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RpY2tldHR5cGVpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldFRpY2tldFR5cGVzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHtzdW1taXRJZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeVRpY2tldFR5cGVzKHN1bW1pdElkLGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7dmFsdWUsIGVycm9yLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRUaWNrZXRUeXBlc31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e20gPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShtKX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e20gPT4gdGhpcy5nZXRPcHRpb25MYWJlbChtKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgZXh0ZW5kIGZyb20gJ2V4dGVuZCdcbmltcG9ydCAnZHJvcHpvbmUvZGlzdC9kcm9wem9uZS5jc3MnO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gJy4vaWNvbidcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmxldCBEcm9wem9uZSA9IG51bGw7XG4vKipcbiAqIGNsYXNzIERyb3B6b25lSlNcbiAqL1xuZXhwb3J0IGNsYXNzIERyb3B6b25lSlMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnN0YXRlID0ge2ZpbGVzOiBbXX07XG4gICAgICAgIHRoaXMub25VcGxvYWRDb21wbGV0ZSA9IHRoaXMub25VcGxvYWRDb21wbGV0ZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIG9uVXBsb2FkQ29tcGxldGUocmVzcG9uc2Upe1xuICAgICAgICBpZih0aGlzLnByb3BzLm9uVXBsb2FkQ29tcGxldGUpXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uVXBsb2FkQ29tcGxldGUocmVzcG9uc2UsIHRoaXMucHJvcHMuaWQsIHRoaXMucHJvcHMuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBvZiBEcm9wem9uZS5qcy4gRGVmYXVsdHMgYXJlXG4gICAgICogb3ZlcnJpZGVuIGJ5IHRoZSAnZGpzQ29uZmlnJyBwcm9wZXJ0eVxuICAgICAqIEZvciBhIGZ1bGwgbGlzdCBvZiBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyxcbiAgICAgKiBwbGVhc2UgY29uc3VsdFxuICAgICAqIGh0dHA6Ly93d3cuZHJvcHpvbmVqcy5jb20vI2NvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBnZXREanNDb25maWcgKCkge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IG51bGw7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgdXJsOiB0aGlzLnByb3BzLmNvbmZpZy5wb3N0VXJsID8gdGhpcy5wcm9wcy5jb25maWcucG9zdFVybCA6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kanNDb25maWcpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBleHRlbmQodHJ1ZSwge30sIGRlZmF1bHRzLCB0aGlzLnByb3BzLmRqc0NvbmZpZylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBkZWZhdWx0c1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5hY2NlcHQgPSAoZmlsZSwgZG9uZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF4RmlsZXMgPCAodGhpcy5zdGF0ZS5maWxlcy5sZW5ndGggKyB0aGlzLnByb3BzLnVwbG9hZENvdW50KSkge1xuICAgICAgICAgICAgICAgIGRvbmUoJ01heCBmaWxlcyByZWFjaGVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWN0ICdjb21wb25lbnREaWRNb3VudCcgbWV0aG9kXG4gICAgICogU2V0cyB1cCBkcm9wem9uZS5qcyB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgY29tcG9uZW50RGlkTW91bnQgKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXREanNDb25maWcoKTtcblxuICAgICAgICBEcm9wem9uZSA9IERyb3B6b25lIHx8IHJlcXVpcmUoJ2Ryb3B6b25lJyk7XG4gICAgICAgIERyb3B6b25lLmF1dG9EaXNjb3ZlciA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5jb25maWcucG9zdFVybCAmJiAhdGhpcy5wcm9wcy5ldmVudEhhbmRsZXJzLmRyb3ApIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnTmVpdGhlciBwb3N0VXJsIG5vciBhIFwiZHJvcFwiIGV2ZW50SGFuZGxlciBzcGVjaWZpZWQsIHRoZSBSZWFjdC1Ecm9wem9uZSBjb21wb25lbnQgbWlnaHQgbWlzYmVoYXZlLicpXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZHJvcHpvbmVOb2RlID0gdGhpcy5wcm9wcy5jb25maWcuZHJvcHpvbmVTZWxlY3RvciB8fCBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgICAgdGhpcy5kcm9wem9uZSA9IG5ldyBEcm9wem9uZShkcm9wem9uZU5vZGUsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWN0ICdjb21wb25lbnRXaWxsVW5tb3VudCdcbiAgICAgKiBSZW1vdmVzIGRyb3B6b25lLmpzIChhbmQgYWxsIGl0cyBnbG9iYWxzKSBpZiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIHVubW91bnRlZFxuICAgICAqL1xuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcHpvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5kcm9wem9uZS5nZXRBY3RpdmVGaWxlcygpO1xuXG4gICAgICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIFdlbGwsIHNlZW1zIGxpa2Ugd2Ugc3RpbGwgaGF2ZSBzdHVmZiB1cGxvYWRpbmcuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBkaXJ0eSwgYnV0IGxldCdzIGtlZXAgdHJ5aW5nIHRvIGdldCByaWRcbiAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZHJvcHpvbmUgdW50aWwgd2UncmUgZG9uZSBoZXJlLlxuICAgICAgICAgICAgICAgIHRoaXMucXVldWVEZXN0cm95ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRlc3Ryb3lJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnF1ZXVlRGVzdHJveSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuY2xlYXJJbnRlcnZhbChkZXN0cm95SW50ZXJ2YWwpXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kcm9wem9uZS5nZXRBY3RpdmVGaWxlcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wem9uZSA9IHRoaXMuZGVzdHJveSh0aGlzLmRyb3B6b25lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuY2xlYXJJbnRlcnZhbChkZXN0cm95SW50ZXJ2YWwpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCA1MDApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUgPSB0aGlzLmRlc3Ryb3kodGhpcy5kcm9wem9uZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWN0ICdjb21wb25lbnREaWRVcGRhdGUnXG4gICAgICogSWYgdGhlIERyb3B6b25lIGhhc24ndCBiZWVuIGNyZWF0ZWQsIGNyZWF0ZSBpdFxuICAgICAqL1xuICAgIGNvbXBvbmVudERpZFVwZGF0ZSAoKSB7XG4gICAgICAgIGNvbnN0IHtjb25maWcsIGRqc0NvbmZpZ30gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBkanNDb25maWdPYmogPSBkanNDb25maWcgPyBkanNDb25maWcgOiB7fTtcbiAgICAgICAgY29uc3QgcG9zdFVybENvbmZpZ09iaiA9IGNvbmZpZyAmJiBjb25maWcucG9zdFVybCA/IHsgdXJsOiBjb25maWcucG9zdFVybCB9IDoge307XG4gICAgICAgIHRoaXMucXVldWVEZXN0cm95ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLmRyb3B6b25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcm9wem9uZU5vZGUgPSB0aGlzLnByb3BzLmNvbmZpZy5kcm9wem9uZVNlbGVjdG9yIHx8IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kcm9wem9uZSA9IG5ldyBEcm9wem9uZShkcm9wem9uZU5vZGUsIHRoaXMuZ2V0RGpzQ29uZmlnKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kcm9wem9uZS5vcHRpb25zID0gZXh0ZW5kKHRydWUsIHt9LCB0aGlzLmRyb3B6b25lLm9wdGlvbnMsIGRqc0NvbmZpZ09iaiwgcG9zdFVybENvbmZpZ09iaik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhY3QgJ3JlbmRlcidcbiAgICAgKi9cbiAgICByZW5kZXIgKCkge1xuICAgICAgICBjb25zdCBpY29ucyA9IFtdO1xuICAgICAgICBjb25zdCB7IGZpbGVzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCB7IGNvbmZpZyB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gKHRoaXMucHJvcHMuY2xhc3NOYW1lKSA/ICdmaWxlcGlja2VyIGRyb3B6b25lICcgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSA6ICdmaWxlcGlja2VyIGRyb3B6b25lJztcblxuICAgICAgICBpZiAoY29uZmlnLnNob3dGaWxldHlwZUljb24gJiYgY29uZmlnLmljb25GaWxldHlwZXMgJiYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPCAxKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BzLmNvbmZpZy5pY29uRmlsZXR5cGVzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XG4gICAgICAgICAgICAgICAgaWNvbnMucHVzaCg8SWNvbiBmaWxldHlwZT17Y29uZmlnLmljb25GaWxldHlwZXNbaV19IGtleT17J2ljb24tY29tcG9uZW50JyArIGl9IC8+KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmNvbmZpZy5wb3N0VXJsICYmIHRoaXMucHJvcHMuYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj17dGhpcy5wcm9wcy5hY3Rpb259IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAge2ljb25zfVxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPXt0aGlzLnByb3BzLmlkfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+IHtpY29uc30ge3RoaXMucHJvcHMuY2hpbGRyZW59IDwvZGl2PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRha2VzIGV2ZW50IGhhbmRsZXJzIGluIHRoaXMucHJvcHMuZXZlbnRIYW5kbGVyc1xuICAgICAqIGFuZCBiaW5kcyB0aGVtIHRvIGRyb3B6b25lLmpzIGV2ZW50c1xuICAgICAqL1xuICAgIHNldHVwRXZlbnRzICgpIHtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVycyA9IHRoaXMucHJvcHMuZXZlbnRIYW5kbGVycztcblxuICAgICAgICBpZiAoIXRoaXMuZHJvcHpvbmUgfHwgIWV2ZW50SGFuZGxlcnMpIHJldHVybjtcblxuICAgICAgICBmb3IgKHZhciBldmVudEhhbmRsZXIgaW4gZXZlbnRIYW5kbGVycykge1xuICAgICAgICAgICAgaWYgKGV2ZW50SGFuZGxlcnMuaGFzT3duUHJvcGVydHkoZXZlbnRIYW5kbGVyKSAmJiBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl0pIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGFycmF5IG9mIGV2ZW50IGhhbmRsZXJzXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl0pID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdLmxlbmd0aDsgaSA9IGkgKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGluaXQgaGFuZGxlclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50SGFuZGxlciA9PT0gJ2luaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdW2ldKHRoaXMuZHJvcHpvbmUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUub24oZXZlbnRIYW5kbGVyLCBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl1baV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVyID09PSAnaW5pdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXSh0aGlzLmRyb3B6b25lKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wem9uZS5vbihldmVudEhhbmRsZXIsIGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJvcHpvbmUub24oJ2FkZGVkZmlsZScsIChmaWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLnN0YXRlLmZpbGVzIHx8IFtdO1xuXG4gICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZpbGVzIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZHJvcHpvbmUub24oJ3JlbW92ZWRmaWxlJywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuc3RhdGUuZmlsZXMgfHwgW107XG4gICAgICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlSW5GaWxlcywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlSW5GaWxlcy5uYW1lID09PSBmaWxlLm5hbWUgJiYgZmlsZUluRmlsZXMuc2l6ZSA9PT0gZmlsZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzLnNwbGljZShpLCAxKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZmlsZXMgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kcm9wem9uZS5vbigndXBsb2FkcHJvZ3Jlc3MnLCAoZmlsZSwgcHJvZ3Jlc3MsIGJ5dGVzU2VudCkgPT4ge1xuICAgICAgICAgICAgcHJvZ3Jlc3MgPSBieXRlc1NlbnQgLyBmaWxlLnNpemUgKiAxMDA7XG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lcy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvcXVlcnlTZWxlY3RvclxuICAgICAgICAgICAgLy9sZXQgZWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3RoaXMucHJvcHMuaWR9IC5kei11cGxvYWRgKTtcbiAgICAgICAgICAgIGlmKGZpbGUucHJldmlld0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbSA9IGZpbGUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWR6LXVwbG9hZHByb2dyZXNzXVwiKTtcblxuICAgICAgICAgICAgICAgIGlmKGVsZW0ubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1bMF07XG5cbiAgICAgICAgICAgICAgICBpZiAoZWxlbSlcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS53aWR0aCA9IHByb2dyZXNzICsgXCIlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZHJvcHpvbmUub24oJ3NlbmRpbmcnICwgKGZpbGUsIHhociwgZm9ybURhdGEpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2FjY2Vzc190b2tlbicpKSB7XG4gICAgICAgICAgICAgICAgLy8gb2F1dGgyIHRva2VuXG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwiYWNjZXNzX3Rva2VuXCIsIHRoaXMucHJvcHMuYWNjZXNzX3Rva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICAvLyBUaGlzIHdpbGwgdHJhY2sgYWxsIHJlcXVlc3Qgc28gd2UgY2FuIGdldCB0aGUgY29ycmVjdCByZXF1ZXN0IHRoYXQgcmV0dXJucyBmaW5hbCByZXNwb25zZTpcbiAgICAgICAgICAgIC8vIFdlIHdpbGwgY2hhbmdlIHRoZSBsb2FkIGNhbGxiYWNrIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHdpbGwgY2FsbCBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gbG9hZCBjYWxsYmFjayBmcm9tIGRyb3B6b25lXG4gICAgICAgICAgICBsZXQgZHJvcHpvbmVPbkxvYWQgPSB4aHIub25sb2FkO1xuICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZHJvcHpvbmVPbkxvYWQoZSk7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGZpbmFsIGNodW5rIGFuZCBnZXQgdGhlIHJlc3BvbnNlXG4gICAgICAgICAgICAgICAgbGV0IHVwbG9hZFJlc3BvbnNlID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHVwbG9hZFJlc3BvbnNlLm5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm9uVXBsb2FkQ29tcGxldGUodXBsb2FkUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIEFMTCBsaXN0ZW5lcnMgYW5kIERlc3Ryb3lzIGRyb3B6b25lLiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VueW8vZHJvcHpvbmUvaXNzdWVzLzExNzVcbiAgICAgKi9cbiAgICBkZXN0cm95IChkcm9wem9uZSkge1xuICAgICAgICBkcm9wem9uZS5vZmYoKTtcbiAgICAgICAgcmV0dXJuIGRyb3B6b25lLmRlc3Ryb3koKVxuICAgIH1cbn1cblxuRHJvcHpvbmVKUy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZGpzQ29uZmlnOiB7fSxcbiAgICBjb25maWc6IHt9LFxuICAgIGV2ZW50SGFuZGxlcnM6IHt9LFxuICAgIGRhdGE6IHt9LFxufTtcblxuRHJvcHpvbmVKUy5wcm9wVHlwZXMgPSB7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRHJvcHpvbmVKUzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBjb25zdCBJY29uID0gKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuICg8ZGl2IGRhdGEtZmlsZXR5cGU9e3Byb3BzLmZpbGV0eXBlfSBjbGFzc05hbWU9J2ZpbGVwaWNrZXItZmlsZS1pY29uJyAvPilcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBEcm9wem9uZUpTIGZyb20gJy4vZHJvcHpvbmUnXG5pbXBvcnQgJy4vaW5kZXgubGVzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwbG9hZElucHV0VjIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvblJlbW92ZSwgZXJyb3IsIG1lZGlhVHlwZSwgcG9zdFVybCwgbWF4RmlsZXMgPSAxLCB0aW1lT3V0LCBvblVwbG9hZENvbXBsZXRlLCBkanNDb25maWcsIGlkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuICAgICAgICBjb25zdCBhbGxvd2VkRXh0ID0gbWVkaWFUeXBlICYmIG1lZGlhVHlwZS50eXBlID8gbWVkaWFUeXBlLnR5cGUuYWxsb3dlZF9leHRlbnNpb25zLm1hcCgoZXh0KSA9PiBgLiR7ZXh0LnRvTG93ZXJDYXNlKCl9YCkuam9pbihcIixcIikgOiAnJztcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IG1lZGlhVHlwZSA/IG1lZGlhVHlwZS5tYXhfc2l6ZSAvIDEwMjQgOiAxMDA7XG4gICAgICAgIGNvbnN0IGNhblVwbG9hZCA9IHZhbHVlLmxlbmd0aCA8IG1heEZpbGVzO1xuXG4gICAgICAgIGNvbnN0IGRqc0NvbmZpZ1NldCA9IHtcbiAgICAgICAgICAgIHBhcmFtTmFtZTogXCJmaWxlXCIsIC8vIFRoZSBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHRyYW5zZmVyIHRoZSBmaWxlLFxuICAgICAgICAgICAgbWF4RmlsZXNpemU6IG1heFNpemUsIC8vIE1CLFxuICAgICAgICAgICAgdGltZW91dDogdGltZU91dCB8fCAoMTAwMCAqIDYwICogMTApLFxuICAgICAgICAgICAgY2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHBhcmFsbGVsQ2h1bmtVcGxvYWRzOiBmYWxzZSxcbiAgICAgICAgICAgIGFkZFJlbW92ZUxpbmtzOiB0cnVlLFxuICAgICAgICAgICAgbWF4RmlsZXM6IG1heEZpbGVzLFxuICAgICAgICAgICAgYWNjZXB0ZWRGaWxlczogYWxsb3dlZEV4dCxcbiAgICAgICAgICAgIGRyb3B6b25lU2VsZWN0b3I6IGBtZWRpYV91cGxvYWRfJHttZWRpYVR5cGUuaWR9YCxcbiAgICAgICAgICAgIC4uLmRqc0NvbmZpZ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb21wb25lbnRDb25maWcgPSB7XG4gICAgICAgICAgICBzaG93RmlsZXR5cGVJY29uOiBmYWxzZSxcbiAgICAgICAgICAgIHBvc3RVcmw6IHBvc3RVcmxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIG1lZGlhX3R5cGU6IG1lZGlhVHlwZSxcbiAgICAgICAgICAgIG1lZGlhX3VwbG9hZDogdmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICAgICAgaWYgKG9uUmVtb3ZlKSB7XG4gICAgICAgICAgICBldmVudEhhbmRsZXJzID0ge3JlbW92ZWRmaWxlOiBvblJlbW92ZX07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02XCIgIHN0eWxlPXt7aGVpZ2h0OiAxODB9fT5cbiAgICAgICAgICAgICAgICAgICAge2NhblVwbG9hZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wem9uZUpTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRqc0NvbmZpZz17ZGpzQ29uZmlnU2V0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz17Y29tcG9uZW50Q29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlcnM9e2V2ZW50SGFuZGxlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRDb3VudD17dmFsdWUubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVXBsb2FkQ29tcGxldGU9e29uVXBsb2FkQ29tcGxldGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWxlcGlja2VyIGRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4IG51bWJlciBvZiBmaWxlcyB1cGxvYWRlZCBmb3IgdGhpcyB0eXBlIC0gUmVtb3ZlIHVwbG9hZGVkIGZpbGUgdG8gYWRkIG5ldyBmaWxlLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHt2YWx1ZS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5VcGxvYWRlZDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlLm1hcCgodixpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17YHVwbG9hZGVkLSR7aX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXt2LnByaXZhdGVfdXJsIHx8IHYucHVibGljX3VybH0gdGFyZ2V0PVwiX2JsYW5rXCI+e3YuZmlsZW5hbWV9PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvblJlbW92ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4gLSA8YSBvbkNsaWNrPXtldiA9PiBvblJlbW92ZSh2KX0+UmVtb3ZlPC9hPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWdBQUFBSUFDQVlBQUFEMGVOVDZBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBRUgxSlJFRlVlSnp0M1gvczdYVkJ4L0hYNWZKTHVBaE1LeENIUDlnVVJDT1ZpSDRvaVdVMXlMSjBoSWhVcTdodHJ2VnJJVzVSdEdwdTVjcHBsT1d2akZMS2lzSWZ1Ym5sS20zVkg5WE1aV2trV0tOaW1aSS9JSDdjL2poZ21ORTk1OTd6T2UvUE9hL0hZL3YreFlmUGVWMitYODczZWMrUHowa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlCMTJqTjZBSWZsakNRWEpqazN5Uk9UUEM3SmlVbjJKZGs3Y0Jjd0Q4OUxjdU5CanZuZUpLOVBjdGYwYzVpVEkwY1BZR1duSjdraXlZdVNQR0h3Rm1EN1haRGtHVWt1UzNKZzhCWTJTQUJzanpPVHZDekpwZkY5QTlicjBpUzNKbm5wNkNGc3poR2pCM0JRKzVLOElzbjdrMXdldi95QmFWeVZaUC9vRVd5T1h5YnpkbDZTRzVJOGR2QU9vTU9yazN3MHlkdEhEMkY2SGdHWXJ5dVQvRW44OGdjMloyOFdmK2w0K3VnaFRFOEF6Tk8xU1g0cHlWR2pod0IxanMvaUVZREhEdDdCeEFUQS9QeDRrbXRHandDcWZWR1NkeVE1ZWZRUXBpTUE1dVhLSkQ4MmVnUkFrck95dUliQU1hT0hNQTBCTUIvbkpYblY2QkVBRC9MTUpHK0lpOGJ0Sk84Q21JZDlXYnp3NW5DZTgvOW9rajlMY25PU081TGN1NFpkd1B6c3lmSi9LLy9nR203djBpUzNKTGw2RGVjQy9wZFhaSEVGcmxXL1Bwbms1NU04WmZPVGdSM3hsaXgzZjNQbHFJR3dxODVNY25kVy8rVi9mUll2MUFFNEhNc0d3RDFKTGhxMEVYYlNtN0xhTC82N2tyeDR5RkpnRnkwYkFBODg2dWdhQWJBR3AyZTF2LzNmbGVUcmhpd0ZkdFVxQVhBZ3lXMUpIak5rS1d2bFhRQmpYWkhWWG9qNTNVbmVOZEVXZ0dXY2t1U2RTVTRhUFFTMjJkOWx0ZWY4QWRadDFVY0FIdmg2VDVLak56OFh0dDhaV2UxNU55LzRBNlp3cUFGd0lNbHZ4RFVDdHBhbkFNYTVjSVZqWDV2a1g2Y2FBbkNJTGszeTA2Tkh3TFo1VFphdmJPL3pCNlp5T0k4QVBQRGxHZ0d3Z3Zka3VmK3hiaG0wRCtpd2pnQndqWUF0NUNtQWNSNjM1SEYvUHVrS2dNTzNONHZMbWJ0R3dCWVJBT09jdU9SeE4wKzZBbUE5amsveXRyaEd3TllRQU9Qc1cvSzRPeVpkQWJBK3JoR3dSUVRBT0h1WFBNNm4rZ0hiNUt3a044WTFBbVpQQUFDd2JoY2tlVU5jSTJEV0JBQUFVM2hoa3A4YVBZS0hKZ0FBbU1yVldYeUdDVE1rQUFDWTBuVkp2bUgwQ0Q2ZkFBQmdTa2NtK2Mwa1R4MDloTThsQUFDWTJyNGtiMDl5K3VnaC9BOEJBTUFtbkpya0hWbitJbWhNVEFBQXNDbG5KL21kSkVlTkhvSUFBR0N6TGt6eXV0RWpFQUFBYk43bFNYNWk5SWgyQWdDQUVYNDB5WGVPSHRGTUFBQXd5bXVTUEdmMGlGWUNBSUJSamt6eTFpVG5qQjdTU0FBQU1OSUpXVndqNE5Hamg3UVJBQUNNZGxvV0VmRHcwVU9hQ0FBQTV1Q0xzM2c2NE1qUlExb0lBQURtNG11VC9QTG9FUzBFQUFCejhoMUpyaGs5b29FQUFHQnVyazN5NHRFamRwMEFBR0NPWHB2RlpZT1ppQUFBWUk2T3l1S0RnODRlUFdSWENRQUE1dXJFTEQ1QytOVFJRM2FSQUFCZ3prNVA4cllreDQ4ZXNtc0VBQUJ6OTdRa055VFpPM3JJTGhFQUFHeURpNUs4ZXZTSVhTSUFBTmdXKzVQOHlPZ1J1MElBQUxCTlhwN2trdEVqZG9FQUFHQ2I3RW55cTBtK2F2U1FiU2NBQU5nMnh5UzVNY2tUUmcvWlpnSUFnRzMwaUN5dUVmQUZvNGRzS3dFQXdMWTZJOGxOU1I0MmVzZzJFZ0FBYkxNdlMzSjkvRDVibWY5Z0FHeTdiMG55czZOSGJCc0JBTUF1K0lFa0x4azlZcHNJQUFCMnhTdVRQSGYwaUcwaEFBRFlGVWNrZVhPU2MwY1AyUVlDQUlCZGNsd1c3d3g0ek9naGN5Y0FBTmcxcDJSeGpZQ1RSZytaTXdFQXdDNTZVcExmVG5MVTZDRnpKUUFBMkZVWEp2bVYwU1BtU2dBQXNNdXVTSExONkJGekpBQUEySFhYSm5uUjZCRnpJd0FBYVBDNkpCZU1IakVuQWdDQUJrY24rZDBrVHh3OVpDNzJqQjZ3SXc2TUhnQWxia2p5YmFOSDdKaTNKTGxrOUlnTnVqbkorVWx1SHoxa05JOEFBTkRrOFVsK1A4bXhvNGVNSmdBQWFITitramVsL0ZGd0FRQkFveGNrK2NuUkkwWVNBQUMwZWxtU2J4ODlZcFFqUnc4QVlLajNqUjR3MkxPeWVFM0F4MFlQMmJUcTV6L1d5THNBWURPOEN3RFd4Rk1BQUZCSUFBQkFJUUVBQUlVRUFBQVVFZ0FBVU1qYkFMZlhmVWx1R3ozaUlleExjdUpCanZsVWtvK3ZjTTdURG4zT1Zwbno5L1hCamtueXlORWpnRU1uQUxiWDdVa2VQWHJFUS9qaEpEOXprR091VDdKL3lmTWRtK1F6Szl6KzkyWDVEL3A0ZnBKdlhlSGNVL3VQelBmNyttQmZuK1NkbzBjQWgwNEFzSXR1U3ZLUkpZODlNL01LQUdBOWpraHkzSkxIM3Bua25nbTN6SkxYQUFDd2k1NlU1RCtYL0hyK29JMURDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KRHJBUFRZbitUSkc3cXRMOW5RN2JEWjcrdURuVDdnTm9FMUVnQTlMazV5MGVnUnJKM3ZLM0JJUEFVQUFJVUVBQUM3Nk83UkErWk9BQUN3aSs0ZFBXRHVCQUFBRkJJQUFGQklBQUJBSVFFQUFJVUVBQUFVRWdBQVVFZ0FBRUFobHdLRzdmYUpKUCsrd2RzN05zbnhHN3c5WUNJQ29NY0hrcHcwMGJtUFMvTFVpYzdOLysreURkL2UvaVMvdU9IYkJDWWdBSHBjTmVHNW41emsvUk9lSDRBMTh4b0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRcTREQU50dGZ4YlhZZGlVc3pkNFc4Q0VCRUNQYTVLY045RzVUNWpvdkJ6Y3hVa3VHajBDMkQ0Q29NZDU4WXNDZ1B0NURRQUFGQklBQUZCSUFBQkFJUUVBQUlVRUFBQVVFZ0FBVUVnQUFFQWhBUUFBaFFRQUFCUVNBQUJRU0FBQVFDRUJBQUNGZkJnUTdXNU44dDROM3Q2K0pPZXM4WHdmU0hMU0dzKzNpblgvV1lBTkVnQzBlLzM5WDV0eWJwSy9XT1A1cmxyanVWYTE3ajhMc0VHZUFnQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FzQmJhK1RrN3g3aGVQbmRzVzJpN1A4L2xWRDlmb2tkNjc0NzJ6S0NRZjU1dy9QYXQvWGtRNzJad0ZtVEFCc3I2T1RQSHYwaU1OdzJ2MWZVL2pLaWM2N0NVZGx1Nyt2d0pid0ZBQUFGQklBQUZCSUFBQkFJUUVBQUlVRUFBQVVFZ0FBVUVnQUFFQWhBUUFBaFFRQUFCUVNBQUJRU0FBQVFDR2ZCYkFlZXc3aDN6bXc1SEZYSjNuNUlad2ZBQjZTUndBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQ0FkZ2RHRHhoQkFJeHp6NUxISFRYcENvRGRkTXdLeDk0OTJZb1pFd0RqZkhMSjQwNlpkQVhBYmpwMWhXUHZtR3pGakFtQWNXNWI4cmluVExvQ1lEZXRjdC81TDVPdG1ERUJNTTQvTEhuY2VVbU9uM0lJd0E1NjFwTEgzWmZrNWltSHpKVUFHT2V2bGp6dW1DVGZOT1VRZ0IxemNwTG5MSG5zaDVOOGVzSXRzeVVBeG5uZkNzZCsvMlFyQUhiUC9pei9Jc0QzVGprRS9pL0hKYmt6aTdlZkxQUDFnakV6QWJiS0k1TjhMTXZmdDE0eVppYnRic3p5UDZTM0pmbkNNVE1CdHNadlpmbjcxYzhrT1dITVROcDljNWIvUVQyUTVJK1NIRHRrS2NEOHZUU3IzYWYrK3BpWmtPeE44bzlaN1FmMlhVbjJqUmdMTUdNL2xOWHVTdzhrT1gvSVVyamZsVm45aC9adjR2b0FBTW5pSWZ3M1p2WDcwWGNQMkFxZjQ4Z2tmNXZWZjNqL0s4blBaYldyWFFIc2lxT1RmRmVTZjg3cTk1LzNKbm42NWlmRDUzdFdWdjhCZm5BSS9GNlM3MGx5VHJ5Z0JkaE5SeWQ1ZkpMbkpia3V5Yi9sME84M2YySEQyMmRweitnQmZOYXJrcnhrVGVlNkw0c2Zjb0Jkc1hkTjUvbFFrcWRsK2M5ajJWa0NZRDZPU2ZMSFNiNTA5QkNBSGZYcEpGK1I1SzlIRDVrRFZ3S2NqN3V5dU9UdkxhT0hBT3lnZTVOY0ZyLzhQMHNBek10dFNiNG15VCtOSGdLd1ErN0w0Z1dETjQ0ZU1pY0NZSDQrbk9RWlNUNDRlZ2pBRHJnemk4djl2bkh3anRrUkFQUDBrU1JmbnVTbXdUc0F0dG10U1o2WjVLMmpoOHpSdWw1VnlmcmRtZVROU1c1UGNrRVdiNEVCWURuWEozbHVrcHRIRDVrcmp3RE0zM1ZKemtyeWExazhqd1hBUS92TEpNOU9jbm1TancvZU1tdmVCcmhkemt6eWcwbGVtT1Q0d1ZzQTV1SkFrajlNOHNvc25qcDFIWlFsQ0lEdHRDL0p4VW0rTWNsWEozblUwRFVBbS9lcEpIK2E1QSt5ZUk3Zlc2aFhKQUIydzZPeWVKcmc5Q1NQU1BLd2VIMEhzRHNPWkhHdGxFOWtjZTMvRHlYNSt5emUydzhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTEI5L2h0OHhtWHhTZ05lK1FBQUFBQkpSVTVFcmtKZ2dnPT1cIiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBEcm9wem9uZSBmcm9tICdyZWFjdC1kcm9wem9uZSc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5pbXBvcnQgJy4vdXBsb2FkLmxlc3MnO1xuXG5pbXBvcnQgZmlsZV9pY29uIGZyb20gJy4vZmlsZS5wbmcnO1xuaW1wb3J0IHBkZl9pY29uIGZyb20gJy4vcGRmLnBuZyc7XG5pbXBvcnQgbW92X2ljb24gZnJvbSAnLi9tb3YucG5nJztcbmltcG9ydCBtcDRfaWNvbiBmcm9tICcuL21wNC5wbmcnO1xuaW1wb3J0IGpwZ19pY29uIGZyb20gJy4vanBnLnBuZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwbG9hZElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc2hvd19yZW1vdmU6IGZhbHNlLFxuICAgICAgICAgICAgbG9nb19wcmV2aWV3OiB7XG4gICAgICAgICAgICAgICAgcHJldmlldzogbnVsbCxcbiAgICAgICAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbGVIYXNQcmV2aWV3ID0gdGhpcy5maWxlSGFzUHJldmlldy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIG9uRHJvcChhY2NlcHRlZEZpbGVzLCBmaWxlUmVqZWN0aW9ucywgZXZ0KSB7ICAgICAgICBcbiAgICAgICAgaWYoYWNjZXB0ZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgZmlsZSA9IGFjY2VwdGVkRmlsZXNbMF07XG4gICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZVVwbG9hZChmaWxlLCB0aGlzLnByb3BzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBsb2dvX3ByZXZpZXc6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXc6IGZpbGUucHJldmlldyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBpZihmaWxlUmVqZWN0aW9ucy5sZW5ndGggPiAwICYmIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJoYW5kbGVFcnJvclwiKSlcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlRXJyb3IoZmlsZVJlamVjdGlvbnMsIHRoaXMucHJvcHMpXG4gICAgfVxuXG4gICAgb25SZW1vdmUoZXYpe1xuICAgICAgICB0aGlzLnByb3BzLmhhbmRsZVJlbW92ZShldiwgdGhpcy5wcm9wcyk7XG4gICAgfVxuXG4gICAgc2hvd1ZlaWwoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIHNob3dfcmVtb3ZlOnRydWV9KTtcbiAgICB9XG5cbiAgICBoaWRlVmVpbCgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgc2hvd19yZW1vdmU6ZmFsc2V9KTtcbiAgICB9XG5cbiAgICBmaWxlSGFzUHJldmlldyhmaWxlTmFtZSl7XG4gICAgICAgIGlmKCFmaWxlTmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBsZXQgcGF0dGVybiA9IC8oLiopXFwuKGdpZnxibXB8c3ZnfGpwZT9nfHBuZykvZ1xuICAgICAgICByZXR1cm4gcGF0dGVybi50ZXN0KGZpbGVOYW1lKTtcbiAgICB9XG5cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgZmlsZSwgaGFuZGxlUmVtb3ZlLCBoYW5kbGVVcGxvYWQsIGhhbmRsZUVycm9yLCBmaWxlTmFtZSwgZXJyb3IsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHtsb2dvX3ByZXZpZXcsIHNob3dfcmVtb3ZlfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT09ICcnICk7XG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgKCByZXNvdXJjZSApXG4gICAgICAgIGxldCBpY29uID0gZmlsZV9pY29uO1xuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYoIWZpbGVOYW1lKSBmaWxlTmFtZSA9IHZhbHVlLnNsaWNlKHZhbHVlLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGUgJiYgZmlsZS5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikgJiYgZmlsZS5uYW1lKSB7XG4gICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGUubmFtZTtcbiAgICAgICAgfVxuICAgICAgICAgLy8gZmlsZXMgd2l0aG91dCBwcmV2aWV3XG4gICAgICAgIGljb24gPSAgKGZpbGVOYW1lICYmIGZpbGVOYW1lLmVuZHNXaXRoKCdwZGYnKSA/IHBkZl9pY29uOiBpY29uKTtcbiAgICAgICAgaWNvbiA9ICAoZmlsZU5hbWUgJiYgZmlsZU5hbWUuZW5kc1dpdGgoJ21vdicpID8gbW92X2ljb246IGljb24pO1xuICAgICAgICBpY29uID0gIChmaWxlTmFtZSAmJiBmaWxlTmFtZS5lbmRzV2l0aCgnbXA0JykgPyBtcDRfaWNvbjogaWNvbik7XG5cbiAgICAgICAgLy8gaWYgZmlsZSBoYXMgcHJldmlldyAoIGFscmVhZHkgb24gZGF0YSBtb2RlbClcbiAgICAgICAgaWYodGhpcy5maWxlSGFzUHJldmlldyhmaWxlTmFtZSkgJiYgdmFsdWUpe1xuICAgICAgICAgICAgaWNvbiA9IHZhbHVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9nb19wcmV2aWV3LnByZXZpZXcgJiYgbG9nb19wcmV2aWV3Lm5hbWUpIHtcbiAgICAgICAgICAgIGljb24gPSBsb2dvX3ByZXZpZXcucHJldmlldztcbiAgICAgICAgICAgIGZpbGVOYW1lID0gbG9nb19wcmV2aWV3Lm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWxlLXVwbG9hZFwiPlxuICAgICAgICAgICAgICAgIDxEcm9wem9uZVxuICAgICAgICAgICAgICAgICAgICBvbkRyb3A9e3RoaXMub25Ecm9wLmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2PntULnRyYW5zbGF0ZShcImdlbmVyYWwuZHJvcF9maWxlc1wiKX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L0Ryb3B6b25lPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0ZWQtZmlsZXMtYm94IGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlNlbGVjdGVkIEZpbGVzPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGVkLWZpbGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZS1ib3hcIiBvbk1vdXNlRW50ZXI9e3RoaXMuc2hvd1ZlaWwuYmluZCh0aGlzKX0gb25Nb3VzZUxlYXZlPXt0aGlzLmhpZGVWZWlsLmJpbmQodGhpcyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXtpY29ufSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e3ZhbHVlfSB0YXJnZXQ9XCJfYmxhbmtcIj57ZmlsZU5hbWV9PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzaG93X3JlbW92ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVtb3ZlXCIgb25DbGljaz17dGhpcy5vblJlbW92ZS5iaW5kKHRoaXMpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdGltZXNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FNQUFBRERwaVRJQUFBQUEzTkNTVlFJQ0FqYjRVL2dBQUFBQ1hCSVdYTUFBQXplQUFBTTNnRVRVQkI2QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUIzZDNjdWFXNXJjMk5oY0dVdWIzSm5tKzQ4R2dBQUF2cFFURlJGLy8vL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFXc0FjOXdBQUFQMTBVazVUQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEhoOGdJU0lqSkNVbUp5Z3BLaXNzTFM0dk1ERXlNelExTmpjNE9UbzdQRDArUDBCQlFrTkVSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2x0Y1hWNWZZR0ZpWTJSbFptZG9hV3ByYkcxdWIzQnhjbk4wZFhaM2VIbDZlM3g5Zm4rQWdZS0RoSVdHaDRpSmlvdU1qWTZQa0pHU2s1U1ZscGVZbVpxYm5KMmVuNkNob3FPa3BhYW9xYXFycksydXNMR3lzN1MxdHJlNHVicTd2TDIrdjhEQndzUEV4Y2JIeU1uS3k4ek56cy9RMGRMVDFOWFcxOWpaMnR2YzNkN2Y0T0hpNCtUbDV1Zm82ZXJyN08zdTcvRHg4dlAwOWZiMytQbjYrL3o5L285YUhKY0FBQlU3U1VSQlZIamE3ZDE1ZkUxbkdnZndjN09Ka0lSSUNiRkVhNkpDaGRxbXhyNjIyZ2x0VUVRc2c2RjBVWVRXdEpoWXlwU21SYXZEbEl5bG9ZYmFJdlpsV2xwYjBnaXBwVkt0NkpDSVdFSzIrM3crUTlkbzdyM252ZmNzZWQrOHY5L2YzblBlOHp4Zk4vZStaMU1VQStMYmYrbTI1Q3RXa2k0NUorSTdLckxIUFhyclhaSTRxWjNrN245RUdrbWVvckVTdHova0lDRTBYOXIrZDd5Szd0L1BaRW43UDdvQXZmOHgxdWVsN1A4Z2RQNlgzRzB2WWY5YjVLSHh2K2JhbzlMMXYvcEZ0TDFFTHRTUURVQThtdjVBamxTU3EvL2h4ZWo1Zzluc0xoV0FKSFQ4OTFraVUvOWJvOStsTTBVaUFIUFJiaHZMQVFQa0FYQWE3YmExSE5CQmx2NkhvdG0ybHdNYVNRSWdDcjIyc3h3UUpBZUFHTFRhVG83S3NSd1FoMDdieXhZcGxnTVMwR2k3K1ZBR0FJazJEbngwa0J4NVRFM0FheElBMkc3anVHWDVFUnlrdWh3d0VBQ2tCa0Q1SFFGQWFnQ1Uwd2dBcEFaQUdVRUFJRFVBT2xZSkFLUUdRRnZkQVVCcUFQUlBBSkFiQUwwT0FISURzQTRDQUtrQlVING5BSkFhQU9XRUFZRFVBQ2lqSmdCSURZQ09WUVlBcVFIUU5nOEFrQm9BTFFVQXVRSFFWQUNRRzRBMUNnQ2tCa0Q1blFGQWFnQ1UweGdBcEFaQTM5WUVBS2tCMFBIS0FDQTFBRXIwQUFDcEFkQXlBSkFiQVAwTkFPUUdRSU1CUUc0QStWMEFRR29BZEwweEFFZ05nQzdXQWdDcEFkQUpYd0NRR2dCdDl3QUFxUUhRdndCQWJnRDBCZ0RJRFlDaUFVQnVBQVZkQVVCcUFIUzlDUUJJRGFCOExBY0FnSVlrK3dLQTFBQW95UU1BcEFaQUh3R0EzQUJvR2dESURZQ0dBSURjQUVSZkRnQUFyY2w5REFDa0JrRGZCUU9BMUFERVhnNEFBQjJ5d3dNQXBBWkF5d0ZBYmdBMEhRRGtCa0JEQVVCdUFBWGRBRUJxQUpUYkZBQ2tCaURxY2dBQTZKWVVQd0NRR2dEdDhBUUFxUUhRQ2dDUUd3RE5BQUM1QWRCd0FKQWJRRUYzQUpBYWdIakxBUUNnYzc2dkRRQlNBNkN2L0FCQWFnQzAweE1BcEFaQThRQWdOd0Q2T3dESURZRCtBZ0J5QXlqc0FRQlNBNkFiNFFBZ05RQzZWQWNBcEFaQXFmNEFJRFVBMnVVSkFGSURvSDhEZ053QUtCWUE1QVpBSXdCQWJnQ0ZQUUZBYWdCMG94a0FTQTFBZ09VQUFEQTIzQzhIQUlEQjJlMEpBRklEb0pVQUlEY0FtZ2tBY2dPZ2tRQWdONERDSndGQWFnQjBzemtBU0EyQU11c0NnTlFBNktRL0FFZ05nUFo0QVlEVUFHZ1ZBTWdOZ0dZQmdOd0FhQlFBeUEyZzhDa0FrQm9BbjhzQkFHQmllRndPQUFBemsxWUZBS1FHUUh1OUFFQnFBTFRhQWdCU0E2Q1hBRUJ1QURtQkFDQTFBUG9RQU9RR1VCd0FBRklEb0k0QUlEZUFjUURBU1dxVURZQVBBSUNUV0hMTEJNQkdBT0FsZThvRXdIWUE0Q1Z6QVVCdUFCRUFJRGNBeTE0QWtCcUFFbklUQUtRR29Jd0NBTGtCS0gydkFvRFVBSlRxR3dCQWFnQ0tFanB3L3Q1MGczTEpSbmtUQVVDZURNQW5BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnTlFBQW51UG5iVWlLVFdqUk83WW1PR2xkTVRBVjhiY0tWbi8xS1FWczhiMkRqU2orMytZZEtDWUVDNVR0Rzk4aUxIZHJ6RHhGTXJNZDA2TTh6U3MvVzdSMzZMQS9PZjhRSXN4L2U5eEFzVVZJOGU2RzlCK3IyVW9yRGhaNXFWMy94ODZnS3FLbEFNUDZkdi9waG1vcVZqSmFLcnJuLzlicUtob3VkVkR2LzZINWFLZTRpVTNUSy8rQjV4RE5VWE11UUI5K3UreEc3VVVNN3M5ZEFHd0VKVVVOWXYwNkg4ckt3b3BhcXl0ZEFDd0YzVVVOM3UxOS85cFZGSGtQSzM1QkZBcWlpaHlVdDAwQWhpQ0dvcWRJUm9CN0VBSnhjNE9iZjMzSzBBSnhVNkJueVlBejZPQ291ZDVUUURXb0lDaVo0Mm1WZUFjRkZEMDVHaFpEMjZNK3BtVk96bVozK1VVR3JIbHhob0FkQmV4bE1XNTM1MDZ2T00vS3hiT2Yydm10S21UWDMxcHpNaWhVZjJmNi9lWDhXLytZOG5xVFh1UGZwMTVrNHZsN1p1bnRpOTdjMWpYeHhvRUIxVDgrVHBPNzhENmp6M1I0N2toNDZiTWl2L3NpajY3MFhLQjREQ0RTekJudkVvbU1YZjkwcUcxYjcvY3AzWERXcFZacm9sMXEvTEh2NzUvOEhwWnRmN0dnWGVITkt1aU9rdi9sZ09uclR5VXBYRm53elFBbUdwd0lSNVZtNEMzMmhaeVU3Y3VtVHE0UTRockY4T0hSTHp4eWRmbTN1ZHlhK2U4QWFIT1hiZGQ5WW1ZclJvdXlabXFBY0JpcmdHODNhdUp2dzVudTN4YVRUaFFaRTczVDcvVHJZSnJrM1J2TldtTGl3Z1dhNmpOQnE0QmROTHhkc2ZoRy9NTVB0YmJtMS9RZU4rV2U4dEpoMXpZOFFhZGIvb3Rsd0R1eFhkc21vRmZUSlA2VmRCbGxtRUxuUDVxdUIwQVdOUHBFME4raDFIRzlMcjZUZEl6Y2xzUkFCZ0Q0TjYzd3RXNi8wRE1YOXZEVGVkWjlnVUFvd0FvU3ZPZHVoNWhYbHlRL25PY0RRREdBVkNVbnVmMWEvODdRVWJNOERBQUdBbEE4VjJ1MC9mK0JUVU1tWjgvdmdNWUMwQlJJck8wSDF2UmU5VU5tbDBFZmdVWURVQ3BkVlRyb1IxcllkamszZ01Bd3dFb2xaTzBMZmkrNm03YzNFNENnUEVBRk05VkdvNXJjMTBEWnhhRWhTQXpBQ2lXRDF3OXFxeStoazVzRUFDWUFrQnhXKy9pWC85NnhzN3JJd0F3QjREaTdkSmpjZUs5RFo1V0JnQ1lCRUNwNHZ6cG9ZS3hSay9xRVp3TU1nMkEwc2paYzhTWmJRMmYwMThCd0R3QXlvdk9IVTlLVGVPbnRCWUFUQVNnSkRwek9FY0RqSitRQmRjRG1Bb2dLSnY5YUE3NW16Q2hjQUlBTXdFb3J6QWZ6QUZmTStZekFRRE1CZURGZW5KNGR5VXpwcU5zQVFEWEFMajVCUWU2ZEpQVUFMWkQyZWx0U3Y4OWJnS0FNd0NxdGh1emFNdis0MmN2Ly9TbzA5eU00N3NXUnYzQnVXOWRUQ2NHMC8xTjZiL1NsZ0NBSFVEb0pkc0RzN2UvWEpXOUNKRU1CNUlUcW4zbE9jQ2Y0UlBxVFFCd0FrQXorMlB2ckdyUC9LbWJxWDd4eDVPdVZyam1zMlBmaUZ1NTlkQ1o3UHMzS09Wblh6eDFaTitXdGN2bkRHdHIrd1ZBK3dCQUh3RDNrc3E2YWhlcmVod1RYVnZVSGI3OHJJT05YanU4OG8zK2pSNGM0cE1QQUxvQm9PSUZGWm1xVUVmdEdyeC9PMS9acGkrdXpXUXFVZWFxb2JWL0c5YURBRUEvQUVSZnQ5VGpwOWN4WjIvNjhScVM3RlNaMGhmM3FmelR5SGtBb0NzQXltVVNNTXJoTmdyRG5TdHF3T3VYbksvVXJmaU85MjhwUGdvQStnS2dyQ1lNWlFoMnVJblpUcFcwd2Z1M1hTelcrV24xcWhZRGdNNEE2SElEaGpxa09QcDhkdVlQUUl1TldwNUdZSFhwOWxVQVVGbkNaNmpEV3c2YTBzNkpuL3F2RjVMNUFRQ1Y5Rk92UXhmN285OW5yMmF0c25uekJnQ281SUw2WjNpZzNjRVgyVThCUG5PVkFJQkhBQlNqWGdpN1YyRU1aUzFsaFRKNzhRb0FxQ1ZGdlJENzdRdzl5M29EVUtNVUFnQmVBWkQ2aGZ4TDdJeGtmUmg3eXpKN0loMEFNR1NjcTljRm5XSDhBR2gralFDQVl3Qkpxb1dJc2owd21uSGhQNHNBZ0djQVY5Vy93ZHMrbGNEMkFSRDhQd0lBcmdGWVZhL0VhRzl6M0dDbUlucCtUZ0RBTndCU3ZaK2pxYTFSVjlpZVQxdldMOTRFQVBXb25zK3JaMnRVSEZNTnkveWxLd0NnSHRVM3JUOXNhMVF6bGhJR1pnRUEvd0M2cUczcGp6WUdKVE9WY0RrQkFQOEF3dFMyWk92QlhPTlpLdGpPQ2dBQ0FLaW10cVdScGNjVXNqd0Z6cDJERjY4Q2dHb0tWRi9nWU9QTkdaK3lGSEFnQVlBQUFMNVhMY1M3cFFmMVp5bGdNZ0NJQUdDL2FpRStMcjE0Rk1oUXY2Y0lBRVFBTUVtMUVMdEtqZm1LcFg3N0FFQUlBT3JYaFg1VmFzeENodkx4OGRwRkFGQkxxbm9oTHBjYTlDeEQrV1lDZ0JBQVl0WFA1NVM2T2N4YWphRjhad0JBQkFENWo2aldvWk5MeTRDUEV3Q0lBR0NlZWgxSzN4ZndMa1AxNWdHQUNBQXlHUzdzUGw1cVZLVGl5aWdBNEJBQXc0WGROVW92NkRkU0grVmJCQUFDQUVoa2VJL3Y0RktqaXJ6VVIvSHk2blVBY0pRRFBneGxLUDN1aVBNTW8yWUFBUDhBdm1TNXM4dFMrcUxPYlF6RGRnRUE5d0NTbVI0V1p1UG5ITXVQQU1acmdhL1BjQzJyQVVBckFPdENINllxdkY1NktNTmJBU294MWlERHhkNDhDUUFhQVp4bGZWQ2NqWE82WGRWSE5RRUFyZ0hjbnUvRFdJU3VOa2JYVVIvMlp3RGdHTURKRjlrZjdXcnJsUUVNdHdTOURBQzhBcmkwMG9uSHV0ajhLTTlqR0xjQUFNb2NRTkNIdXk0OCtGQ212TThXOUt2alhBMXNmZHYrSDhPNHBRQlE1Z0R1eHl1MFZmdHV6MFJHRGVyVnRsSE5pczZYb0kydDY3cFoxb0hXQUFBWEFEVEc4b1d0UFRNOFUwVFpDQURsQWNBd20zditqR0hrVGdBb0J3QUNmbkM1cHA4RFFEa0FzTW4ybnRjekREM0NXSU1MQU1BdmdGZnQ3RG1lWVd3U1BnR0VCOUM2d002ZWw3bjQ4eEVBaEFJUS9LMjlQYTlpR1AwdUFBZ09JUENVM1QyemZBZjRHd0NJRGNEUHdjc1p0aktNSHcwQVFnUHczZTlnejNzWU5oQUpBQ0lEcUgvUzBaNFBNV3loQXdBSURLQ0Q0MGU3bjJEWVJCZ0FpQXRnWklIamVhY3piS002QUlnS29OSUhhdk8rekxBVmR5c0FpQW1nWjRicXZLMHNMNHI2SGdCRUJGQnRKY3ZFV1Y1QXZnb0F4QVBnTnVRSzA4UzdNV3hyS0FDSUJzQTlPcDF4NGlOWlZwSUJRQ3dBbmlQT01VOThGc3NHVHpOdDZtSVYyd0VBY3dIVWlzbHdZdUlzWjRNMFBpZmVHd0RNQStBVGxlVGN6ZndIV2JZYUFRQkNBUEI5WnNWTlp5ZCtsV1hEZmtVQW9KS0daUTNBNDA4ei91dlMrM3haZmdjcW53T0FTdXFxZmpZYkI4Q3JhZFRjeEJ1dXpwenBoWUd4QUtBUzFkdnpxMm9DVUtsMXc1b1AzZ0pxOGFzYjNxblA4QWt6UHo1Wm9Hbm1TMWpLRjJZRkFNZFJmVnRYa0NZQVA5NGJXSmg5SWZuQTVqWC9XcmZqeUxrczNaN2JsTUpVdjA4QXdHSHVxRTRnUkRzQVkxTE05TmJ3cGxZQWNKUXJxaE5veUNzQWxrZEVLT3ozaDBrSzRKejZmeUZ1QVV4akttQUxBSEFVOVF0clduRUw0QmhiQmJjQWdJT292Nm1qUGJjQTZHR21DcllCQUFkUnY4R21ENzhBSnJPVk1Ba0E3T2NsMVFtTTVSZkFFYllTdGlrQ0FMdnBvRHFCV2Z3Q29QcHNOWndJQUhhamVzN2I4WXRYeXhoQURHTVJFd0RBVHI3VitCZTBqQUV3L2cxUUtxVUNnTzFzVXA5QUtzY0FxQVZqRlJ2a0FJQ3IzNk96ZVFhd2hyV01UMXNCd0VhS2FxbnV2eHJ4REtDd05tc2Rwd09BalREY1k5Mlphd0FzcjV2NitTeDBBZ0NVVGwvMS9iL0NONENjeXN3Qy9tNEZnTjhsaStHMU94L3hEWUJlWmk5bDMxc0E4R0RtTU96L0NPY0F2dkZrcjJWNEJnQ1VURHJEYzN2ZDhqZ0h3UERlOGQveTBINEErQzNGVHpEc1h1V2xHeHdBdUJIa1JEVTlQd1NBWC9NMnkrNG5jQStBVmpoVno0aGtBUGdwKzcxWmRwL0VQd0JyRzZjS2Fua3VCUUR1NVdPV0J5d29GZS93RDRDK3NEaFhVa3ZmVkFDWXpWYTBuaVFBQUJydWJGRXQvZFBLTzRDN0RsYzlVdm93N2oxT0NBRFhIM2E2ckc0OTQwNldhd0Qvck5aNy9wZDJicms3L0dmV3owekxlU0VBMEZFdlYwb2JQT3hqQnc4anViNXBncHZBQUg0OHpWZTVlK3p1TXcrZUNMMzhuNG10MkhmZW1jUUFRSXRjcks2bCtaUlB2N2p3K3hWQ2EvYldTUzBaWGt2SE00RElFcjk5YTRWM0cvVEtyTGNtaityYnBiNXpPMThsQ29DU3grdENmT3ExNmpVc1p1YmtNUU43L2FsSkhYL1dEMGllQVlRck9zUS9UeGdBTG53TjBCNmVBVlRXNHdESGtEQUE2R2dsQUNpUkgzUTV3Qk1DQWFCZEZRRGd0M3lteC9FOVJ5SUJvRTBlQVBCclZ1cHdlRzVwWWdHZ0JEY0ErQ1hUZERpOGFCSU1BSDFrQVlDZkU2WDk2RHkvRVE0QUxiSUF3RTlwby8zb3BwQjRBR2l0TndEOG1FRE5COWZrcm9nQTZQTkFBTGkvTEtMOUQ4QUpFaElBblFzRkFPWm5aempJTEJJVUFHVjNBQUJhcC9YUXVoUUpDNER5eDFxa0J6Qkg0NUUxeXlWeEFSRHRxQ003Z0JIYURpd2trNFFHUU5lSFNRNmdrNmJqQ3Z5YUJBZEF0Q2xJYWdDMXRSeFd2Wk1rUGdES0d1RXVMNEE3V3I0RnRieE01UUVBVVhwL2k2d0EwalRzci9kdEtpY0FpSTcza2hUQUpwZjM1ajIzbU1vUEFLS0RSaTRLTkYvR0s0QTRWM2ZXTnQzSlBmRU80TjZud0F2K1JqVGZ1OWVTNzlrbllUYUFjYTd0cXZJN3hWVHVBQkRkam0rbmMvZHJqTmpvMUI5SzB3RTg2Y3FPZkdLdUd2Qjdrd01BOTNKNllyQmV6UTk2OXUwdm5IN1VpTmtBR2ppL200cXYvbURJZ2dNZkFPNGxaVzVIVDQyOWQyOCtidlUzTHUzY1pBQkZUaDlwcTBWWnJwVlZIQUQza3J0aGxNc0xKQUZQejk1enkrVTltd3lnY01YQTZ1dzdzRFI4N1pUTFJ5WVVnUHZKMkRpalQ0aFQvKzBmNlRWK3laNUwydlpxL2dVaDFoUC9lS3FtK3NhcjlKeStMVnZMa2UxSlVNbDI0akRYOTc4M29udGp0Y2NrVjJzN2ZPNkd0SHc5ZGxoR3Q0ZG43WDF2Wkp0Z094ZEp1VGNiRTMvYVNqTG45cG05cStlOU1uemdzMDkxZnFKNW8vcTFIbm04VThUZ3NhL05XYnpxMDczSHpsN1RjVTlsKzN5QXZPK1NkNjliTW52QzBHZmE5ZWczS21iVzR0V2JENlpldkVPSWFkRUNZRDNLSjM3V2F3Q3dFT1VUUHdzMUFKaUM4b21mS1JvQVJLTjg0aWRhQTRDdUtKLzQ2YW9Cd0tNb24vaDVWQU1BdHl1b24raTVvdW0yNWVVb29PaFpydWtjVkc4VVVQVDAxZ1RBSnc4VkZEdDVQdHBPUTI5Q0NjWE9KbTM5VnlKUlFyRVRxUkdBY2hnMUZEbUhOVitHMWdGRkZEazZYSm1PYndFU2Z3TzRuN0FpMUZIVUZJWHBjUzN5ZEJSUzFFelg1V0oweXpwVVVzeXMwK2tHVlo5anFLV0lPZWFqNkpUYWwxRk44WEs1dHFKYkhvY0E4ZnIvdUo1M0pOWTVqb3FLbGVNNlA2dktCeGNJQzVYMVBvck9zY1JhVVZaUllvMDE0Z0UxNFltb3JCaEpERmVNU2VjdlVWeis4MlZuQTU5TUU1bVlqd3J6blB6RVNNWFkrRDJma0lzNjg1bmNoQUYraWdueGF0M25oZGhsVy9hVmlLMjdXVS90UTNTS3JXY29YQ3Y1RDdZc2kzMmhUMnN2cGN4aTZ6YmlBUXFpVXdiWUtPOTJybVlJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQXhnRUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS0J4QUlCSURHRDlERVNuckJjU0FHSm9BQUFBQUFBQUFBQUF1RWdpR21KMkVya0NrSUNHbUowRXJnREVvU0ZtSjQ0ckFERm9pTm1KNFFwQUZCcGlkcUs0QWhDS2hwaWRVTDVXcTArakkrYm1OR2VuSythaUplWm1MbWNBV3FNbDVxWTFiMmNzazlBVE01UEUzU25yOEdKMHhid1VoL04zMFVJODJtSmU0am04YXFYNlJmVEZyRnlzenVOMVN5M3kwQmx6a3RlQ3p5dlhCcUUxNW1RUXI5Y3VqaTVBYzR4UHdXaCtyMTd0ZUJYOU1UcFhPL0o4L1hMSVFYVEkyQndNNGZ3UzlvZzBOTW00cEVYd2Z4T0RlL1RXdStpVUVibTdOZHBkakJ0WmZQc3YzWlo4eFlxVzZSWHJsZVJ0Uy92N0d0R3Ivd01Jd2psaVRHQnYxd0FBQUFCSlJVNUVya0pnZ2c9PVwiIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZ0FBQUFJQUNBTUFBQUREcGlUSUFBQUFBM05DU1ZRSUNBamI0VS9nQUFBQUNYQklXWE1BQUF6ZUFBQU0zZ0VUVUJCNkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCM2QzY3VhVzVyYzJOaGNHVXViM0pubSs0OEdnQUFBd0JRVEZSRi8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDeU8zNFFBQUFQOTBVazVUQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEhoOGdJU0lqSkNVbUp5Z3BLaXNzTFM0dk1ERXlNelExTmpjNE9UbzdQRDArUDBCQlFrTkVSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2x0Y1hWNWZZR0ZpWTJSbFptZG9hV3ByYkcxdWIzQnhjbk4wZFhaM2VIbDZlM3g5Zm4rQWdZS0RoSVdHaDRpSmlvdU1qWTZQa0pHU2s1U1ZscGVZbVpxYm5KMmVuNkNob3FPa3BhYW5xS21xcTZ5dHJxK3dzYkt6dExXMnQ3aTV1cnU4dmI2L3dNSEN3OFRGeHNmSXljckx6TTNPejlEUjB0UFUxZGJYMk5uYTI5emQzdC9nNGVMajVPWG01K2pwNnV2czdlN3Y4UEh5OC9UMTl2ZjQrZnI3L1AzKzZ3alpOUUFBSmpCSlJFRlVlTnJ0blhlQTFVVFh4clBjWlplMml5eHQ2VXVWUlJCV0JGNUFXQkFFVklxK0lsTDFVNnFJS0IxVVZFU0tJcUtnMUJkQkFRVVVsRjVVcWdwSVZZb2dTSlc2ZExhM2ZIVDJKdWNrTThuazN0emtQSC91blRrenlmbHRNamx6WmthU0xGQlltNm5MZDUzTGxGMm5TenRueGtwdWw2ZlRzbVRaeGRyZDBOMytiN2xYZHJuU2U3dlkvVkViWlpJOHpyWCtqNDBqNzkvUVFKZjZ2M3NxK2Y2bU1wOXpwZi9iaytmdktMbWVDLzFmUFpFY2YxY1hLN3JPLzRXT2s5dXo2SEJodHdFd2s1enVwYTI1M2VYL3FobmtjMjh0OGJnS2dGWGtjYVVtdXNuL05jbmY3ZzRIakNaM0ErR0F0dTRCNEM5eU54UU9xTzhXLzFjZ1o3czdITkNCZkEzcmlFdkNBUVBJMWU0T0I0d2pUN3M3SERDWEhJMXFraHNBV0FGY2VQZElkNmlLSGdHRFhBREFTdUM2M2ZJUkhFbmhBQUxBOWVFQUFzRGw0UUFDd09YaEFBSkFSOXR5RXdDdUJrQmU2aUVBWEEyQXc4TUJCSUMrQmhFQTdnWWdzeDBCNEdvQUhCME9JQUNZc2dPaUNRQlhBeUFmaVNRQVhBMkFjOE1CQkFDam5Cb09JQUJZTlprQWNEY0E4bUFDd04wQU9ETWNRQUN3S3lXV0FIQTFBSTRNQnhBQVBEb2FTUUM0R2dBSGhnTUlBRDR0OHhBQXJnYkFjZUVBQW9CWGd3a0Fkd09RMlo0QWNEVUFEZ3NIRUFEOHVoUk5BTGdhQUVlRkF3Z0FJOXFlbXdCd05RQU9DZ2NRQU1ZMGhRQndOd0R5RUFMQTNRQTRKUnhBQUJoVlNnTUN3TlVBeUpjcUVRQ3VCc0FaNFFBQ3dJUzI1eUVBWEEyQUU4SUJCSUFwVFNFQTNBMkEvQVlCNEc0QU1qc1FBSzRHSU9EREFRU0FXUVY0T0lBQU1LMWpSUWdBVndNZzc4aERBTGdhQUhsNU1BSGdhZ0RrcVFTQXV3RUk0SEFBQVNCRWdSc09JQURFS0tVaEFlQnFBT1JMRHhBQXJnWWdVTU1CQklBd0JXWTRnQUFRcDRBTUJ4QUFBaldWQUhBM0FQS2JCSUM3QVpBN0VnRHVCaUR3d2dFRWdGaGRmb0FBY0RVQUFSY09JQUJFSzhEQ0FRU0FjSzBJSmdCY0RZQThqUUJ3TndBQkZRNGdBS3hRUndMQTNRQUVVRGlBQUxCRWdSTU9JQUNzMGJHaUJJQ3JBWkIzNWlFQVhBMUFvSVFEQ0FETE5JMEFjRGNBOGxzRWdMc0JrRHNSQU80R0lQVlJBc0RWQU1pWEt4TUFyZ1pBUGw2VUFIQTFBUExPTUFMQTFRRElLNE1KQUZjRElQK1BBSEEzQURZUEJ3UW1BSjY4eGFPamkrZjFCQVFBOWc0SEJCQUF3ZVdlN0RONTZmb2RCODhrM09scHdwbURPOVl2bmR6bnlYTEJOZ2JBMXVHQWdBQWdwRTdYTVl2MnAycmU1UDJMeG5TdEUySkxBR3dkRHJBOUFKNWFnMWNuc043cGhOV0RhM25zQjRDZHd3RzJCaUNvV3A4bFYzaHY5cFVsZmFvRjJRd0FHNGNEYkF4QTdZbHhSdTkzM01UYTlnTEF2dUVBdXdJUU5mUnZjM2Y4NzZGUmRnTEF0dUVBV3dLUXQ4dUdUUE8zUEhORGw3ejJBVUFlU2dBd0t1YnJKRkUzUGVuckdOc0FJRDlQQURDOStaZUp2ZTNMYXRzRmdOUkdCSUN1R3EwUmYrUFhOTElIQVBZTUI5Z0tnT2Fickxuem01cmJBZ0JiaGdOc0JFRFRYZGJkK2wxTjdRQ0F2Q3VNQU1CVS9GdHI3LzIzeFcwQWdMd3FtQUNBSjNyNlg3UDYzbC9ySCt4L0FPVHBCQUNrZXJzNTcyUENsalhMRjg3NWJrOEtUNlhkOWZ3UGdOeU5BRkNwMEpkOC84ckxCdjBuKzUwbngvMVBUYmpJWHZYTFFuNEg0SHdFQWFCUTIwczhOL0JrZitWQUtrZTduNWpqaHBmYStoc0FlU0lCNEtYUVNUeDNiLzlMNEpSL05IdjRZRktvbndISWlDQUFzcWpjVHA3by9rZG94c2Z6NTVoblpzdjVGd0E1bGdDNHArZXVjdHk1MDAwMExFVjh3MnJtNm5QK0JlQVZBdUR1NDM4aXo0Mzd1YUNtc2FCUDJWL0R0MTREaFdVYUJQZ1ZnTEk3ZU83YmhseDY5b1l6MjlwUjlpWXlWL3dDd0E4RXdDM1Y0RXI0MlJhdWIzRWdlOHBRelJ2bDEvZ0ZnSlVFd0UwMTRZcjk3YzNQWW5NV3M3MzRadGVManlZQS9BZEF1MVNlbTVaU2tjbG8yRC9zcy9NZEpha2xBZUEzQUY3ankva2F4bWoyUDJuczM1VDlwYUMxQklDZkFCakpkOC8yaDdJYUhzWmg5YU9ncUdzRWdEOEE4RXkzTEhhU2wyZGtQeXQ3VndMQUR3QUV6ZWE4WmVzNWpIL0lZM2grdHRaeEJJRFBBUmpIZTh0ZTREQmVsR3VHK0RPcDBFSUN3TWNBRE9KTzVjak5ZLzRMTHR0dlNWS0ZkaCt0M1crUlRnSk5ybkE1QUM5YW5FWFRnczk0RjBzdnRpMDlBVlQrU2VNR29BbFhBL2t5dUl5bnR5SUFmQWxBM1VUK2wyWmh2aVk0azRzVEh5RUFmQWZBQXhmNS9YK2VzNDN4blBZdlBrQUErQXFBOEVNR1JzM3JPUnZweU52QW9YQUN3RWNBelBmRi9Ia0w3aGJtRXdDK0FhQ25vZTltM20zV0d2RTMwWk1BOEFVQU1jbUdBSGlmczVrNi9FMGt4eEFBMWdNUWZ0Qlk1T3hqem5hcUdXampZRGdCWURrQWN3MkdUaWZ6UG1pTU5ES1hBTEFhZ0I1R1krZGZjamJVemxBclBRZ0Fhd0dJTnJ6dnkxck9sdDQzMUVwU05BRmdLUURHRXpBVCtmYi9sTDczRFdjRUFKZmFtNWcvcmN2WGxOSDk1VG9RQU5ZQkVIN2FCQUJ2Y0RWVk5NTmdNMmZ5RWdDV0FmQ3BDZi9McTdtYWVzTndPNThSQUZZQlVDM2REQUFaWlRtYUNqcGt2SjNxQklBMUFBU1ozUDFyRWtkYkRVeTA4M3MyQXNBU0FMcVl6S0pMS3NUZTFqZG1HbnFaQUxBQ2dMRHpadk1vMmFjREhqRzF5ZkRGY0FMQUFnQUdtdlcvSEg4L1kxUFo5NWhyYUFnQklCNkFuR2ZNcDFKdlp3d0dEVEhaenJsY0JJQndBRjRWa1V6L0VWdThPZEZzTzY4UkFLSUJ5SDVjQkFDWlRSbWFLblhDZERzblFnZ0F3UUIwRnJPZUpxR1pia3VSQndXMDA1VUFFQXVBNTZBWUFPUlV2VzVGN0JiUnpDRVBBU0FVZ1BheUtHVm9mNlhYK2tkTU0rMEpBS0VBN0piRmFYNGsya3kyTjlNRU5iS2JBQkFKUUYxWnBDNTFSVTRFckxCT1hDTjFDUUNCOXFmSVlyV2hPZkNPcnZsZGhzQW1waEFBNHN6bnVDU0wxcWxSNWIyYXlOOTZyZGdHTHVVZ0FJVHBXZGtLL1RIbnpmOVd6RitzN0FQVm4vdDhkNlp3ODg4U0FNSzBSQTVBTFNFQVJLbFFXaUFDa0ZhSUFCQ2sxK1dBMU9zRWdDRHRDRXdBZGhBQVlsUkpEbEJWSWdDRXFFK2dBdENIQUJDaXhkcXgvVDlXTHB3ejdiT2xSekp0QjhCaUFrRElST0JsZkhwL3k0Zk43N3RUTG5lTjdodnRCY0JsRHdFZ1FEWFFtZDJacW4yWktueHd4azRFMUNBQUJBalpFalJoYkhHb2RIQ2ZhL1lCWUJBQllKSHQ2OTlZYUladmlSOXNBOEJLQXNDOHNzZERMLyt4V2tsM3JTN1pCSUQ0N0FTQWFVR3BBRmQxY2p1cm5iVUpBWFVKQU5NYXFyYWNXRit2MHYwbkxQTnA2dGtqZTdmK2NveXQ4RkFDd0xUVU8zV2tQcTVmcTlSaEs1eC9aZVdic1Rsdk5SQlc2Nlh4K3JzVmZFOEFtTlkrcGQzMDFpelZxcWNLZC8vT2RzR0tMNDdtQzNSYTJVY0FtQTREcVc0eDQ0Wi9Bd1M3LzJkd3UvbUNuMmlta2FWNkNBQ1RLcTgwZXp3UFc4V2duMFM2LzhKVFdEc1BheDVjWHA0QU1Lbm1TclBNSnpNVXVTck8vMnVLYVR5aittdWNMOVNjQURDcGZncXJIR2NtanhYbC9zd2gybnQrTkUxQXEvWWpBRXhxbXZId2VuSDljV0RhYVphTkoxL1JhK2tSOUpqQmFRU0FTVzFRWlBMeTFKMmg2ZFl6VTVzWHVmNmZuYi9laHpyckRobTJlM2dJT3pkd0F3RmdVb3FZWG0rZXVscXBSSm1mM3p0Rkx0c0FyUjNvUjdFMDFSRDVHRGhMQUpoVG1MZk41QWl1MnZpLzl2SEczcWhzUTBzeW5zODNBcWtlUmdDWVVnbHZtMHY1YXY4UDgrb2M1WGFld2U4aUpSTkxzelVWak94aFY0SUFNQ1hGVTN3a1grM25FYTl1RFZhWFJZNEtIY3phVnVsNDZ4SkRYUXhBTFcrYm5Ec3hSOEZPVFlaT2VBc0g5NkRad3o2aEM1OWxYSXNBTUtYRzNqYXJjVmFQNC9pdmJneGxsYlptYjZzRXVINnBNUUZnU2s5N1p3RHpycmc5QXZua2R5UkFQMUZkTkk1bnM2ZXZvTWFlSmdCTXlmc3RIc2RiZlIva2srZllYeGhjSjAxVmhocDduZ0F3cFZlOFU2eDRxME9MeWxMQzJFdnpIUWU3MTBnVWtRRFExR0R2VndCdjlkK0FmcTFEUzQ5V1pRRHd0VGJKekZjRUFjQVNYK0VkQS93TzlHczJXcnFYc3VoMHZ0YWdnOFpHRUFDbTlKRzN6UWpPNnRDTU1MNWRiR3RsMGI1OHJSWGphbzBBWU5Fd2I1dWNaN09Xa00wQjBKU3p0MEFvWVJnQllFcjl2VzF5YnNMY1REYjNDaWpPMlZzZ09hZy9BV0JLM2IxdEx1Q3IzUThDQUQvWmI1UXkvWlMzdDcrcVcrdE9BSmlTWW92WXVDQ3UydURDOGlRMHFWQTFKY2liMHZtanVyWDJCSUFwdFZBWXJjeFR1VEM4dVJTMmYxdEowM081aTlTTnRTQUFURWw1ZWhmWG9Yejk0Ym1nMzVBTVAvV3BoTHo3ZkMxVU45YUFBRENsNnNycCtRSW1JM040cG1hc2VqSW9pck8zd0piVzFRa0FVNnBnNHJQcUVTd2RKQWxhV3A0SFdFeFdtNit6d1VCK2VBVUN3SlNLcUZabzVHYXQ2c0YzbDlzRXZBUW1BK1VHOEhVMkdqQlJoQUF3cFZCVnN1V25wcjRCYjJ1RzhrdkFBeDRVeHBtQjFscHRJU09VQURBbjlRRWVUN0JWTEJXdmxlcDlwS0ZYNFlxYndWS1grQTZCQlZhaS9DTVJBT2EwWEoxcFhaanBCYkJLWjdYUGhDeHA0ZjJ3NVNGY29lZGdZSU9xNVFTQVNRR1pkcXNZNGpOQk0zVFgrNXlaMkNULzlaSmhOVWYralpZWno5UFZWb0NCY1FTQVNmVUFMQzhNTmNJTnBKUlRDWnEvSitRM0Z3YVNleEFBSnRVUThzdVBlcDhDNzRoYUYvb09lMCtMUW5ISGhnU0E2Ty9BVzk5eG1va0JZVjhKV3hjZXgzNEs4R3pacXE5QWQyOFJBNi95UC9rTVhrUFUwWDk4R1QxTm9kcFhKUUxBckxZaW5sbU1MTHJLTlZUbytTSVpzV3pkekFWbW9HOGxBRXhyRnVhYWE4Tktxa3NYR0haZUZxc1QrWXgrclZ6WExBTEF0SHBxL0hldWZOWnI0VWJvSXhNU1pPRmlTa0o1R2E3Ymt3QXdyV2hONzF6OGVYejNSd29YS1Z1bFpyUDMxaVhKbG1paWZoWktXMlI3Z0dnQ3dMeE95ZjdXckdDZExqNk9iRVp6U2lJQXpHdU8zd0dRdjllT1BIVlB4TFloSUFBRXFMUC9BWkMzYVV3S1JDeEVxM1VtQUFTb2pBMEFrTk0vd29LUGpmN0ZhNVVoQUVUb3FCMElrSSswaGQ0RGoyc2RPSDlVSWdCRTZBdlpIcm93UWZFaUNPdjRwMmFGTHdnQUllb28yMFovVHVyVjhFYXFjSEI0eWRhZmJrL1hLZDJSQUJDaUFxbXlyWFQ1TWx1SFVnc1FBR0swU0E1SUxaSUlBREY2SmpBQmVJWUFFS1RRaTRIby80dWhCSUFvVFJidW5Xc25ELzY1ZWNzVkt3R1lKQkVBb2xSSHFHZE9mdDJqMHUzNW5lSk4rMzZmWmhFQWRRZ0FjVG9vTHFRM1QzbmlRT0VCZjFuaC80TVNBU0JPYnd2eVN2eDRjTy9uMkozaUFYaWJBQkJvdjB5bUVLZHN3UGJ1OXZTTkYrei96RElFZ01nR0ZvdDQrcit0c2FLa3hES3hBQ3lXQ0FDUkRkUVNNUGJUUHNnMzIxU2hBTlFpQUlRQ0lKaytCVEJPTnozckk0SCsvMGtpQU1RQzBNQ2tSNjR3Yk5YeHRqZ0FHaEFBZ2dHQXRtRGprUDZCNHpjMFE1VC9mNVVJQU5FQVBHSEtJMnpKV2JrUENBTGdDUUpBT0FEU0RoTU9XY3ZZUmt5S0VQL3ZrQWdBOFFDWW1CTk1ZdDZxcVovTjVnRUpnQ3pmYWJzTU8rUk41a1pDVGdydy82NXNCSUFGQUVoMWpJWURMM0JNelBZWEVBU3NJeEVBVmdBZ1RUZm9FWjZOWHNJdW13Wmd1a1FBV0FOQWdRdkdQTUoxMk53bzA4bkRCUWdBaXdDUXVobnl5SGF1TnFxYUJhQ2JSQUJZQlVEUVppTWU2Y00zMWpUNUR0Z2NSQUJZQm9BVWsyN0FKYkY4YlN3M04rVVlJeEVBMWdFZ1RURGdFODVOMzk4d0JjQUVpUUN3RW9DOC9Bc0Z6M00yMGRDTS80L21KUUFzQlVDcXhiMU1hQ05uQzJaR2dhbTFKQUxBV2dENGc3V3pPUnNvYndLQWZoSUJZRFVBM05saDh6anRGN05KSGhnQmdDamlHSjlYZUpmbzVUUHMvMk1SQklBUEFKQnE4eTNsV01WcFB0eW8vOU5xU3dTQUx3Q1FCbkQ1WlQybjlZZU1BakJBSWdCOEEwRFFFaDYvSE9DMDNzbWcvNWNFRVFBK0FrREtzODNDUU5Cb1kvN2Zsa2NpQUh3RmdGVHdiK3Z5YzVZWTh2L2ZCU1VDd0hjQVNGRWMrNGQreW1VNTIya2ovajhWSlJFQXZnUkFlcEI5MG00bmwrRm1SdngvK1VHSkFQQXRBRko5OXEyaHEvTFluV2NrNmJTK1JBRDRHZ0RwS2VhcFlaNHRleU9TRFV3QlB5VVJBTDRIUU9xY3dScWhLY1Z1dERlLy96TTZTd1NBUHdDUTJyQXU0MkRQQ28wNHkrMy9sRFlTQWVBZkFLUkdWeGxYQmpJZjNNQ2ZlSHkxa1VRQStBc0FLZVlNbTVmK1lGd1pFTXU5OU9CTWpFUUErQThBcWV3aGtTK0JuUHQ1L1grb3JFUUErQk1BcWRCMk5rKzFZTEFWc29JNzQ3eVFSQUQ0RndBcDdFY21WOFUzMXJYaytaYlgveitHU1FTQXZ3R1FQQ09aWHR6SnJYVHNNQnc0cmxnRE9NSWpFUUQrQjBDU21zVXhSUU02YUJySjl4Mm4vODgxOGRrRkVnQTZLcmFSS1dBelh1T0pYZjg0cC8vWEZaVUlBTHNBSUhsR01iMEdUbUN2Z1pEM00vamNuekhjSXhFQTlnRkFraDVuZWczSUM2SFA5dkNCdk50Q25IM01weGRIQURDb09PTlduenQ3NS9ldVdHWTA5M0xRUlVVa0FzQnVBRWpTMDR6NTRpbkxSM1dNeVhtOVFvNThWVi81NWwvdTRPK1JGcjYrTWdLQVRibEhzNjhieXpnZm55RWJVY3FJbkJJQllFOEFKQ2w2cld5eGZxN29oOHNpQU5qVjRiU1Y3ai9kM2k4WFJRQndLTzh3eTQ2WXVqZ3NyMFFBMkIwQVNRb2JkTllLOTU4ZEhPYXZLeUlBT0pXejl3blI3ai9STzZmL3JvY0E0RlpJMTBNaTNYK29hNGcvcjRZQU1CSWRick04WFl6MzA1ZTM4ZmozV2dnQVk0cnNLK0Ewc0oxOUkvMStJUVNBWVZVWlkycjM1NU5qcXRqaEtnZ0FNNitDSnRPUEd2UCswZWxOUFBhNEJnTEFwRXAzbm5PS3ovbW41blF1YlovK0V3QUNWTEhuZCtjWVUzMis2MW5SWG4wbkFBU3BZTDB1WXhZZlFMY1lTanV3ZUV5WGVnWHQxMjhDUUtpeVYyelZhOGpJQ1RNWHJONjA1OWl4UFp0V0w1ZzVZZVNRWHEwcVpyZHJqd2tBbDRzQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUg0RHVrU1JCNmg2UUFKQXNGUUZBQUJBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJRQUFRQUFRQUFlQ3RqTU1ycG4zOGJyOXVIVHEvOXRZSG44L2Rkb1VBY0EwQUtSdmZlN3BTcVBLaUl1dDEvZkk0QVNBTWdDUGFKbnF5WGZkQ1RTUFZETnpKM1NNYTU4SXRsdXMyTDRIRlNqdk13QmlPWjFBQnhNWUVSd0N3VTl0RUtiYWIxRkhUU0JsZTc1OGRGNk43Y2VGZGZ0RTM5QzFXdXlGN1ozNUZUR1E3NVFnQTF1clkyTU55ajFMdjA3UlJnTS85RzVzSHMxMWYrYkdKT3FiaWN5QlZzMTlsN3M0UXhFU3NNMTRCQzNWc2pCYnc1Z3ZoY245amppdU0vQ1JKMjFvcnJPWkM1ZzVWUVN4ODdnd0F2dEN4VVkvbEhuWFRNWkxNZkxkM05PYTh4cUtUTXJUc2ZZblY2OExhbzZPSUFjOFpad0R3c1k0TnowV0dZVkpoSFNQbkdHOTIwcUJnL3F1c3UxL0Q0a1hNWURGV0FEN2pHa1VFSGdCRDlZeDhvMjlqZzU2TlEyejNlbTE1UTVlWjQ4TjAzT1pqV0sxZGpBQTBRK3BQY2dnQXIrb1o2YWh2NDNVOUd6dFk3blI2L3lDakYxcm5OR3AxRWxabkZKdi80ME9SSitNNWh3RFFTYzlJL2d4ZEd5WDFiS3hqNkVqY295YXV0RGlLMk9sc1pnWTNzdnc5VXIyeFV3SkJ6WFd0L0twbllwdXVpY1g2L2RoYTB0U2w1cHFQR2E2TDFBaSt4QVJBWjZUNlZLY0E4SWl1bFRmMFRMeWhhMksyL29ka0RwUFhHdlFwWW5rc1ZtTStpLzh6SXhGOHpqc0ZnTXE2VnFycW1iaGYxOFJFeS8yUGZaZHJ4THIvandXQTM1SEtUUnd6RjFCTTM4d0piUXQ3OVMyTTlvSC9wYUFwc0hFc3FoeVp5WEI3M2tZcS84OHhBT1RXTnpORjI4Snd5ZXhiWkYwT0laY2I5QTFmLzdZejNKNkhrRWp5QmFjQWtNcGdwcVcyQ2YxNUc2bVhwb0Z6UlFSZGI5aGhyaWZVY1AzYjh5OVM5WEhIVEFlZll4bGhKNW1ZVDc2cDV6WEhXYzJFWFhDZGRKNHhTbTM5MnpNRnFUckRNUUQ4eldKbmhaYUZzUXdHbnRJeThLRnU5WkF5RFYvNHY5aVNIdjJHM3VPWnpzdDJYdmYydEVBNmRNa3hBUHpPWWtmekNWNlh3Y0NqR3ZXM1pOZXNtdk9GbjA3ZURrV2wvck9pWTZoMlE4RmJvQkFEVnZwcnZidVRpT1NrUE9tY2pLQlZMSFpLYXhoQUkyMVo5VEJlLzNKcHJZcFZKaWorMTg2UEthZlpVdmw0amtpbGJwUjdLVkx4UytjQU1JL0owRDZaUDlhZVZSWHcrczlxVkN1MERCb3lMQ3FrMVZSWG9NcHJTTm1DZWxIdUhuQzkwTXZPQVFBYTVhZ2ZzMk00WnR1Zzc4cEk3bEhXelJmSEtiak9TYzNvNVEvcUN1dXhzbHQwN2s1eDdzK2lnQU5nTkZCdG9Pb3ZzZXp6N1VXZ01WMHVyUHFKbkdqblBjUFIvOCswQVJyemhzVlMxZmtLMkRQakhXUDVrck1kQk1CZ29OcHk5ZGdLZmViTlZMMVhQNEY2a29aVTc0TVA1NVpwZFh1QlJ1TElMUGFNcFJxR1FsdzVyam9JQU9ndGQwZ2RtSm1IMVcrcEdoOTlEdlVFU1N1Nm1JYzNzcStYcDNOZE1leHVDZEpPVmFyRi8xRWJjQUE4QjFRNzNZbzVrcVBPdWowNURlckpFYmo2ZTJqWFg5WHJlRS84c3RYWkI2bDVrYUpmYVNhbkIvRi9QUVljQUUyQmFsZmZaeDR2ejFjV2pGYS9GRzdvRC9nenV5RFc4MmJwZWgxUGE4d1R1c2JXTGJRMWtDK2I4NXFUQUlDZWNobEFjR0F6WEYxMUJGVnYrV3VvSnh2QjJoT3dqcGRnV0FGNHFReFdPOXZmek1udkVWcWcvUmV1ODEvWlNRQlVBTVk0OGdYMUg5OENheWVIS2NzdGhoZmpnQ082dENqSnlKTlp6Nm5RZXJZRWJKbVpScnBUQ2pKQW1lY29BSUFQcFB5eVhKWmxaQVZGeW9LdnlqOUFQUUVuYW1kai9YNklaYVplbHV1Z3MxY1hXZiticFRlNWc2UzU0aDBGUUlpNlZpbndjTUdUVU8yWFZOTnhzcndjNmdtWVVvQXR1WkYrWnN2WC9CVzk4RkhNc01WdzUwcy9LenNKZ0FTZ1ZpVnd0Y2cwS0pFN1B4QlorUkhxQ1JSS1hJZDErMG5HakgzNWFjeENUZldVUXdqeUlYZ0t0WTVNVW56cktBQk93dEdSald3ZnYydWd3UjdvMTZGQTdUZXhick11MlpBUFlCTlJ3ZXFCT3BaMDhBVm5wbHZ1UkVjQkFGMWxnK3NQQnZYVWV4NWdmVjh2VmFGVVdmNE42c2xySEsvd0IyVm14V0pYdmtwVmRDcFNzalZQa1B5Nm5wTWRCY0F2eUJPNENzczlWU2VVTnNkbTMxOVVWNzZHUlhOSHNnTXdFYnR5ZFJMaVdlUnBrVGVOTDE5K2diTUFnQ2E4MjBDak8wa2FvS3I4cDZyTUo5Zi8rZ2ZVazJmVVRTL0hlbjJZSFlCeldKSlFYWFhaK2tqUjliRHA4N0RwUEVuT0FtQTI4dDhLelBKWFYxVldEeFZ2N0NheEQrckpZK3FtK3lPZHJpVnpxQWxpSkVUOXB2NEVLVG9JdGp3TEx0MWVkaFlBVUN6dVJnTFlkaUMrcHNxRGUwSlpwTWlOdng1azlHcDFwTk9mOEFBd0hidjBOYXFpeDVDU1ZkZ25TU1F3MnlDZ0FSaU8vRXVraHVwZmU2b3FVdFlKdmRIUjZvbkFiT2JmQU5ldFlJa0J3RXovdzBoUmNOMUxHcnpwVFhpeXd3RG9COVI2RDVralVJN2sxZCtLTjFQbFRrRTlVVy9IZ0syNnpTZHpDY3NRYktBdU9oSXBDaTd6UkxaTzBzMGlERFFBZ01HZU5CYjh3bE0vSzkrQm80VnhVRS9DV09Oc0dzbEhvTnBnMFdCMTBmMUlVWEI2dnk5Y2RySFRBSUJDNUpOdi9BRHNyUk1VcDVNUFh1bm1uNitBQVRmVmRES3k1Z3FNR0hDbXROMFVrTFZUQ1M0WmxzSTJTWGJqbXpIRmFRQkFtekxjVEttQ0ZveDRyNmUrcXZxTzczOXJraC9zaW1wK0Yxc09Ob01QQURTdEhVaEJlWXQ5NmdGWkwvT0M3RFFBb0hWOUM3R0UySmU5cWk2QjRzQTNKZ2pZUmxyWWNwQWRmQURFWWRlK1ZWMTJCMUswbjdvb3N0eHBtZU1BS0kyR1VZR3RZeXBxSjl2ZnlSb0NCK1o3bGVrY1dCUS9oUThBZEhuN1N2YnBuY3BzVDhickE5UlV4d0dRRDZoMWF3ZldHY0F2WGpObkQyRGhYbkRlYlJQYk0vWldLSUZIMk1mZGJNWnZucnVEVjY5VVIzanU4RVhaYVFCa1FoL2pPOUc0eVp3c1ZVK2hjWUk4TExNejJGeCtOQzhBalJCRG4zSWtFS2pHSFV2Z2Npc2NCOEJscU5idGpEb2c1YTZ6VnFnMFo0TEdVMFUxaS80RDB1WGF2QUE4Z3hpQ0pxQXprWkZuTzkxcHpwdUtTSE1jQUVjbC9FSGZSZjFMMWwyL1gxRCsyRklqeTB5OXBjbzBwTXZOZUFGNENURUU3blAvTWx5MllDWlRlSWxsZDlrQUEyQ254aGNibE4xN1ZHUHdOZjNPTCtDQ3VvOFp3M0p0ZVFGQUlqWTM1elJWK2hFcHJOZ3M1aCs0MUdybkFRQUdQRzluU3AvV2ZGbitwWm9yT3FzNTFuNVgwVEsySnF3SEx3RERFRU9QZ1JIK2ZIQmhSUTRodUxoSktwRG1QQUNnZ0h6b25SK2oxYjg5ajA4ajNwdUJCM2RrNmF0b0dWdXBNWmdYZ0RFOEFWNzFpK3VXRkJzL3R3UUxkWk9kQndDMDlpWGl6byt2cUg4cmZyZW1hdlhZaDNkL3FzenkvbXdoQ2dCc0h6ZjRoYjBJTGh3U3J6M05lVk0vT1JBQWFLLzRFbmQrL0U1akVKQ3VXbXkzWHpPNnFIb2xkeFQxQ3NBMmY0RHpQSktReFI1TDlXY0NDNlU3RUFEbzMrZHV2Tzg4RU5LN3N5cG1rL0tIKys4WnJjVXl1bjlkMUNBUWVhaGplMW9nRzVMMHpscG1rQWswQXd3QWFFNzJYdXBYTmZXUGZiQkVrb0U2MlpSMUZDMi9qM1Q1Y1Y0QXNETmhrSFR2YitEU1hsSHVhbUNSdFU0RUFOb3J2cjdXU0wwT2xvK2RaWTFkUTVaNCt5UlJnU0FzTXh5WnViK0tiRE9XNVNUQzArQmtSbVNHRXdGb29may9DQVJFYzl5YURrbFF4c29MWjdrOTBJcHpxYVNpNVc5RmhZS3JJWVorUThvL0NSZlBFcWlDanhsNlJYWWlBUFdBU3ZkV1Nsd0JNcU52emJLdTBBb1NneWNRM01lV2NpVVY1UVVBMmNkSk9zQ1hScHBsa05vZUxMRGVrUUJBWDJ4WmtoNXFxbitkQUUrckxkYkpNcEk4aXBaM0kxM096amtkZkJtN2RtdzM1emc0M3ovaTdpTU1QaWkwU0lZakFTaXVIVVFIZHBDNmxSVlpWZkhYWEltNkNkV0tSZFduc1Q1djR3TUFPNjhxRytxd2huQ0Z1enZHd2Z1S3ZpbzdFZ0RvcXpqTENxRFY2bC9MM2ZqN3VTQ3RzQnY4aWE5WWhZdnVVajZGRDREeGlCbjhzRkprVzVMM3RUTGxzUzFPQWgyQU5KMm9mUkt3aTkrTkRaYm5Ldjg0VTM5K1RubTRYempTNSs1OEFHQkgrbFJHYS93TEx5Vm9vdm1FS0picFNBRGk5Q0lvd0lCK0dUQlQ3UEhhZHJzNzJKZmZGVzNYUnZyOE1COEEyUHFpVG5nVmVQTzN2TGZmR1duZ1pqS3Z5NDRFQUZ6Rk5VazdWUHoyOVQ5SEtmNFd5ekRScDR5a1kzdTRoNmJ5K0Q4Tk8ydGtQRjduQTdqRzdsdS9idUg2cUF4d0FNQzk0ck51dExrSGZGUWVVdjV0bkpkVmVPT0hoYXgzYWpzUEFMOWdWalp4WW45MzhBSG1BNWZJZENZQXE2RkszMnZuM042WEtVOVcvczE3T2Q4SXNDOHpGVzJqMndPOHdRTUFOaFdVWFdzVjk0TmdsZHVIaUlIYnp2U1ZuUW5BZktqU2p6b0R1ci9rMW9xL0tMYjBHTWYyVEViMllaV2lNdG45bjRrbGhUK2tWZXRkc0VvRmpZUzJ6UTRGWUlydXczT3UrdmNaR1JIQXNFRFA2cjNQckRzYWlQWDZGM1lBTm1JMkJtclYraE91YzNNa2V3RDZwWlRzVUFBKzBCZ00zZElGZGQ1NEQ5VkpzWXJGUExQWVhMSU02elZIU2tCdll4REJPWjlMMEVqeEFLY0NBSTdFajNnVlVVZURxNDNXbWVkWndPYldLOWoyTHZtWnZ3TXlpaUltZEk0Q0dZZ1BQbDZFZnRucVZBREFFMUc4MXdDckYxUUc1ZFNKa3E0QSs2TGVXd1ZiMDZPOUYydFd6Y0VzNkp3S3V4bXNkSE5MZ2ZMQUQyVmtwd0xRRnFxVXhQYVd2U2ZsNGxyNGdKWW5aZVpCUUZuR0NhR1VLTXpDUWlOang5eHBzbndXK21HUVl3R0FOazhNVmtSYXd2VWF5YWZNbG9aUGs2K24vaDVIenhzYnczYXowUk1MSTNTMjhrSlcvbXhIWGwvYkhRc0E5Q1dXVjFIbUtiMUdWTHVtZ051RVFXZVFvNmJ6bm1PNTE1Y2lzUHI5OWFxdUFhdE5nS09ZNVdUSEFnQmw4QmRqek4yNnErK1VWbytDeFVxelQrVXl6Z2dOd0dwbiswZXZhbm9CWkpoU3cyeGtLckFBS0F6VXFhZ29jMWlualJ5cWJYbmg0NGp6QSszWHdJeDZOdWpmNmpYb2lhTlA2RmNHWnl5ajVIZ29QTG5MdVFDRXNNekdhWi9VQ1F6dTR1SGdMTkQrWE5ScXhGOTZkM3AvUHJUeWNuMC93VWVDbnZvWmp4QTZFWUJFOUdNb3ExN1Jia085alh3R1hCQVltS1dYUXMxR25kYnUrM21jeS84dytFbDkxTWtOTFlBV0dyN2xYQURBSGYyYUswc3QxbXdpMnhtMVhYaUs5aXpRZzQ5eHd3OWQwL3dDckkvWFpFcmZCTCtBK3owRy9QRlA1d0lBN29pdldwcHpUZk4wN3pxQVhYaDBmaEFvZVZYakk3UEJHYnpuWnh2enZKT1k1OEZ5QmV1UGlad0VBTGhqaW5wUlpheFdFeDh5WjJxRFg5TkROVXdYWElTTy95STFIa2xzLzdIeE9SanY0ZHNPQmdDY2psRW5QNDNVYWdKS3Y0YzNXVndMUHNwanRJeDNCYzlueW5oSDY4UjZ4Z1VjeUJKd3RmWTZHQUR3SUNYMW1HZWJSZ3ZnUWg3WXFmRC84NzZjV2hkUWJwSnFpL0xFTHgvV3FsRTJudEZUTTlsdTRRT3lnd0VBejk4ZHJZNmNGOFJiR0FMWnJRc1duUVYzWXFKT21LSGQ2cXd6ZTN0NjU5TWVrMjVnOWRURllLWmJPTXpKQUlBcmREOVRsMnVQdDdBRnN2c1lXQlE3RGJxNTNsVVViZFp0eE93TjJ4WiszTHRsSmIyeWZkaGQxWmpwRnY3bFpBREFmUk5uOGp3dGk0THBXL0NLN1ZIWWlMNnd1QXV1bWNUdXFva3NCcXZJVGdhZ00xTm9INGtYM0JTY3ZOT08vVzJobVJyRXJhaXpISzQ2SGNSZ2NiaWpBWGlHdGM2RGZBMTA1aHllOXhKMHVmZnQ0L0pWWFFhVEJ4d05BTGdqTXBSTmg1M3ZGQTVuYnNCblFlQnJkWktiQ0xuYWtKLzVmRFZXMzJRMTJkRUFnR2MyUUhOZjJQNkt5Q0dLOEI0N3JUUW1KUjRWY0xFNVYzTDY2ckMrelpIT0JxQU1WT2NROUMrS0hMNytEV3dYM3J1eG9VWlBFbUpOWDJ2NEJtNW54ZWdhUGVSc0FNQlA2ak9zdVdPU2xQMHliQmZldTdHNlZsZXVtWDBMNU4vRzdTdGtJWGpXQ1NuWjBRQ0FlOFZMWUNRTlh1elRoT3NEcTd4MmpzNXJwcTQwNWlDL3I3RGpvYldDWW80Q0FEN2RDZnl5aDlQOEpuSkZXUXZyM0xwcEljWXZ0RWV5YkVUMzY1Zzk3R3dBamtKVjhzQmxTMENzL01zejFTcmwwTHQzdjVZemVKbGhjMlZqR3FKdHQ0YnNiQUIyUVZVaTJXTkdOZmp5clNUZEJUK0ovVDFHcnJMZFNZUCtSN1lEdXFzeERnZGdIVGoveHY1UFBZSXY2Vm82cjMvN2ZxL0NmWTJWMThuR1ZWTFQ5RkdIQS9BOVIrZ0RPdWwzRDJaNHMvRTNhdnBYZk8rQk1wUFNUUGhmMWh4NTFwSWREZ0IwTGhpd2dPZVdhckUrSzJSMCtUVmJlblhhRjZXWnI2LzZ2SFRabE5acldSL3JkQURBYnp0c3MrYkpEWlFhaHhvK0JQZUdOVktUdHVnWmxnK0NxSmZYeUdhVlVRaTNIM1RjNlFDQVJ5MDhLNXNYTW51NGxOM0NoYy9yYXVacmhEWWV1MDhXb2E1NEc3Vmxwd1B3MjJSQWF3VGMxZVRKb1A3aE1uSjF5V3VWc1gvOXhmR3lJTzJmakdxejR3R3d2eTV2L1hwWXh6cVZTdHpua1lJaW9tUGI5Qm8rNVlmZmp0cTZ5d1NBTlVwTURaQ09yaUFBM0MxNkFoQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCSUY0cnlDRytscjJ5Z3VlU1EzeXR1YllDWUJ3NXhOY2FaeXNBQnBCRGZLMEJ0Z0tnQXpuRTErcGdLd0Fxa0VOOHJRcTJBb0I3czNPU1NmMWxMLzhiMmVpT1pFYWpiUVpBVFhLSmIxWFRaZ0JJcThnbnZ0UXF1L2xmcXBwQlh2R2RNcXJhRGdEb0JCaVNWWnBwUC85TGhZNlRYM3lsNDRWc0NJQlVQWkU4NHhzbFZwZHNxZmJrR3Qrb3ZXUlRkVThsNTFpdjFPNlNiUlViUi82eFduR3hrbzBWdFpFOFpLMDJSa24yVnN1OTVDVHJ0TGVsWkh0NU9pMUxKazlab2VSbG5UeFNRQ2lzemRUbHU4NWxrc3RFS2ZQY3J1VlQyNFJaNGF2L0J3Uk5kUWl5YWJseEFBQUFBRWxGVGtTdVFtQ0NcIiIsIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWdBQUFBSUFDQU1BQUFERHBpVElBQUFBQTNOQ1NWUUlDQWpiNFUvZ0FBQUFDWEJJV1hNQUFBemVBQUFNM2dFVFVCQjZBQUFBR1hSRldIUlRiMlowZDJGeVpRQjNkM2N1YVc1cmMyTmhjR1V1YjNKbm0rNDhHZ0FBQXdCUVRGUkYvLy8vQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ3lPMzRRQUFBUDkwVWs1VEFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2RIaDhnSVNJakpDVW1KeWdwS2lzc0xTNHZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldsdGNYVjVmWUdGaVkyUmxabWRvYVdwcmJHMXViM0J4Y25OMGRYWjNlSGw2ZTN4OWZuK0FnWUtEaElXR2g0aUppb3VNalk2UGtKR1NrNVNWbHBlWW1acWJuSjJlbjZDaG9xT2twYWFucUttcXE2eXRycSt3c2JLenRMVzJ0N2k1dXJ1OHZiNi93TUhDdzhURnhzZkl5Y3JMek0zT3o5RFIwdFBVMWRiWDJObmEyOXpkM3QvZzRlTGo1T1htNStqcDZ1dnM3ZTd2OFBIeTgvVDE5dmY0K2ZyNy9QMys2d2paTlFBQUZuOUpSRUZVZU5ydG5RZDRWRlVXeCsra2h5UW1LQkJTS0xMVUFDa1FsQllKaEVBQU43RENnblJFSUFGRW1rSUVwT3FDSUVWRU9pdUtMTklGU2FqU1ZZcENrR3BRUWJxaGhFQ29JWm1GQkRFNDU4NjhtY3k4dk16NS83NXZ2NVY3M3J3cDl6Zm4zSGZlbXhjSFlRTzgyczVOU2s3TjFyTWo3ZURDQnFKdzRXRDFQVHAyVHJ5OHRHZXprT0k2d1E2ZjBLN2JEMGZ5RmlEMnA4K2J1d3JHVk52U2g3RUFaWGV0Q1JMTWNmemtRN1lDTk5oZlh3QXhlQWhUQWVJMkY4UHNQMkpDTzVZQ2RKanRqTG5QUWZkWkJFTUJhczdIelArSjY1cks3QVFvc2RvZEUvK0VvdXQ5dVFrd3NSU21QZS94MERvUFhnS0VkTWFrUDBYNGw0NnNCSmpvZ0RsL21wZG5jQkxnaFNhWThiOFRQNVNSQUs5Z3ZnMFoveW9mQVZwaXVvbDJ3TUtYdUFoUXNUS21tMm9IZkZXRmlRQzFNTmwwT3lDcEpBOEIvREhYaGJRZEFBRnNUTTJsamh3RThNTk15Mmp4Q1FjQnZLbkRZRDhlVkRMeDJjUWxNQkNBdXY0di9SSVBVazE5T1A5cHo2QVBBSXkxQXhwQUFOYTRhTGdkQUFIVXdHZDlTUWpBbWpLSkhoQ0FOVFdXT1VJQTFqU2ZDUUY0MCtzZENNQ2I5enRBQU43dGdFOGpJUUR2ZHNEcUlBakF1eDJRNUFjQmVMY0QxbmxDQU9idEFDY0l3SnBtTXlFQWIzb09nd0M4ZWE4akJPRGREdmh2UXdqQXV4MndxaW9FUURzQUFqQ21kS0luQkdCTjJISW5DTUNhbUZrUWdEYzloa01BNXUyQVRoQ0FOd3NhUVFDMEF5QUFZN3pYKzBNQTFwUks5SUlBckFuVlFEc0FBaFFrVFdkREFONjhQZ0lDOEdaY1p3akF2QjBRQlFGWTQ3eXlHZ1RnM1E1SThvY0F2TnNCU1Y0UWdEVWhLNXdnQUd1YXpJRUF2T2srRWdMd1prd1hDTUNiK1ZFUWdIYzdZRlYxQ01DYVo1SUNJQUJyQWd2bTZnQUlvSjEyd0VvbkNNQ2E2TGtRZ0RldmpZSUF2Qm5kRlFMd1psNWpDTUM3SGJBeUdBTHdiZ2NrQmtBQTN1MkFwR2NnQUd1Q1Z6aERBTFFESUFCanVvMkdBTHdaOVJvRTRNMmNhQWpBdXgyd0loZ0M4RzRISkFWQ0FOWUVxTlVPZ0FBYXBmcEtad2pBbXNieklBQnZ1bzZCQUx3WjJSMENNRzhITklFQXJIRmFFUUlCV09PVlZBb0NzTVkveVJzQ3NLYWFyZHNCRUVEalJNMkhBTHpwTWhZQzhPYmQxeUVBYjJZM2hRQzgyd0hMUXlFQTczWkFZaWtJZ0hZQUJPRGNEbGpsREFGWTAyZ0JCT0JONTNFUWdEY2pla0FBM3N5S2dRRE0yd0ZoRUlBMW5vbWxJUUJyL0d6UURvQUFoWW1xcTEwZ0FHc2FMb0FBdk9uMEhnVGd6ZkNlRUlBM001dEJBTjd0Z0dWaEVBRHRBQWpBdVIydzNnY0NzQ2JJaXUwQUNGQVlpZnl2RGdLd3B1TWJFSUEzWTR0QkFOYjR2QWNCZU5QeldRakFHb2ZxRUlBMzFTQ0FSdEFYek5OV2hRQWFJZjFxZ1R5dFB3VFFDajhXeUxPNlFRRGVBdUF3VURQc2dRQzgrWG83QkZDREtkZTFTUWY5YXhrUVFBV0tlR3NURjNGNkVBVGd6YngvWDRFQWFyQ2xtZFk0bC92Q1ZsUmREUUZVNFB3R3JYSHI4U3RMZmFWU2g4bmJmN1lSRjRqUFFzOVJBQzJUc3VTdGhwVnR4R0RpK1hRUUFEQVZJRGlTb0g1dWpBcEZWczRKbFNWanVSM1ZjQ29VRGdHMHljUnRCT3R5WTFSb1cwSk9xQnNaSzVrVG0wK0ZIdCttT2V3MFJVY0l3QVhYTWhSZUVBQkFBQUFCQUFRQUVBQkFBQUFCVkNJam5TSTNSb1p1NTRUdWtySHNuTmhOS25RVEFtaVROajRFWlhKalZNaW5UMDVvQWhrN2t4T0xvRUlSdWJzOFRwNEdUSVFBWEVnblR3T2VoUUFBQWdBSUFDQ0FlclM3cERYS1F3QTFjZk85bmF3aHp2bjZPa0lBZFZrV295RkdvQVNveWZ6MkQ3bndwWWFJZVBTSzJ1K0FBT3J3dzZQUHZFZzdEVkV6UjROVEVBQkFBQUFCQUFRQUVBQkFBQUFCQUFRQUVBQkFBQUFCQUFRQUVBQkFBQUFCQUFRQUVBQkFBRFc1aFdsbUxjQW16K0p6OVpocHZnSk1GMWZpSW4vR1ZMTVZJT3ZoLzNhR3ZKZUp5ZWE4Q0x6M2JvMjltRzNXUndGSDZyNlpnZm5tZkJpWS9YRlFJaWFjZFIvZzdNdXZwbUxLR1FzZ3hOSXFuMkxPT1FzZ3JuV1ArZ1d6emxnQUliWUdmL0FBODg1WUFIRW5vZFlQbUhqR0FnaVJYSHZ3YlV3OVl3RkUxcFNxR3pIM2pBVVE0blJNNXl1WWZjSDVlb0F2cW55QjZXZDlRY2lWemsxUFFRRFdWd1J0cWpZbEN3Snc1dmJnRjVNaEFHdCtySlZ3QndKdzVzRUgxYitCQUt6NXRYSDNheENBTlo5VytSSUNzQ2ExL2N0bklBQnJFcXRPejRZQW5Nbm9YL2N3QkdETjNwb2o3a0VBem1TK0g3d1RBckFtSmJMWGRRakFHZjI4b0pVUWdEVVgyN1E2RHdGWXN5Wm9GZ1JnelkwK215RUFiOUloQUdlY2hyd0NBUmhUWTk4SERoQ0FMVVVtN1F2RFVRQmZvZysvNVNnZ0FGZWUrMnhUT1dadkdRTGtvY1B4THV6ZU13UjRRcG1reGNVRkJPQ0tRLytqelZpK2IweDlEdFcvbitZaElBQlgzTjcvOFFXdW1RK3pMMFNEUThPY0JRVGdpcy9jYlJVWnIzM1l6My9yWXoxMUFnSndKZUNyRlg2OGozNVl2M3RkNzJNdHVSLytjbjd6VlhiTmZFWkFBSzY0akV5dWh5VXdYd0hxSEJ6amd2bG5LNERYak4xQm1IMitBdnp6V0Y4Y0FQTVZ3SGZwMmtCTVBWOEJ1aDl2aTRubkswRDVyUXVLWXQ3WkN1Q1VjTGdoWnAydkFPRS9qSGZEcExNVndHUHluaEJNT1Y4Qm1oNFo1SWdaWnl0QXNVVWJ5bUsrK1FyUTZYZ256RFpmQWNwdVdGUU1rODFVZ1BiQ2NlQ1JwcGhxdGdKMFdYbGlpbTB1K2RaRGdFTEJLK1Z0dEdNZEJBQVFBRUFBQUFFQUJBQVFBRUFBQUFFQUJBQVFBRUFBQUFFQUJBQVFBRUFBQUFFQUJBQVF3R0lDUXg5eTk1Q0dPUFBvRllVK0N3SFVZY1RCaDVRTTFSQ3JIcjJpZzdFUVFFV2lwbW1JT0pRQTFRbnZyeUZhUVFDVldWSlVhNXlFQUdweS83cld5SVlBQUFJQUNLQW1ZUU1vY3YvZVR4c3ExRE8zajBBK0xQZHVnZlhJV0pIYzUvUDJJZkNBQUFWR2c2a1VBVG14TjZqUXVKeFFlZkpodVg4cDVKOWs3UEdOaEg5UEkxZ01BUUFFQUJBQVFBQUFBUUFFQUJBQVFBQTFPTGVESWlNbmxreUZ2c3NKWFNjZmRpa245aHNadXc4Qk5NbUtTSXBmY21JRHFOQXJ1VzZRRDl1UUU1dEx4cTdsUGw5RlA0SnVFSUFOcVpjSXJrTUFBQUVBQkZBVno3SmF3eGtDcUVuclUxcWpIQVFBRUFCQUFCVVk0cWRObGtJQWRiaHhTWnZjZ1FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBVUZzQTc1TEFTbmdYU2dGbVh3UldZalpLQUlBQUFBSUFDQUFnQUlBQUFBSUFDQUFnQUlBQUFBSUFDQUFnQUlBQUFBSUFDQUFnQUlBQUFBSUFDQUFnQU5DQ0FMZlNUWkZoM2QxbEs5dlJqYU83TnE5ZDl0bnNhZU5IRHVuWHMxUHJGbzNxaGxVdUcxZ3B2R0ZzeC9pM3gwNmR2L0o0RmdTd0FzMTlURkhhbkE4NjJPVHVEaHQ5Zk9icG5WK003OTBpMk1lNzJrdE5XcmJyMW52Z3NIR1Rac3hmdkNwcDIvZkpQLzkrUHVYSDdWLy9iODZIb3diMWJCUGtXYlA3dEsxWElVRCt1RzV5aTdUdmxPOHQrVGZUWDIxcDVMTzJkUUxjbm0vUWVkanNwTVBwQ3A3czdvRlBCMFlWQzJnMjlSSUVzS1VBSWxINTNsYUpmQWl3WWZtZUM5bG12NEVMR3dZRnhpeStEUUVzSkUwN0FsaE0xc1pPdmwwMlowTUFTejY3bTZhM09YSkc2ZDVTanByZUp0MG03eU5qVVpOUzgvUlcyRkY3ZCtQc3N6TUJGRTFIb2hVVGdDMHl3T05hMEN2aVdMNTNzdjdMdThiUjI1a0FhZllqZ0JEZmhvNjRtNzg5M09uTHJRUmNWN0xSMWp2S2RuWjJmOEVLSURMZnI3NGxYenNZZXdvQ1VOK0xiZFpMQURZVlFJaGZvdnZuSTBrZm5jeHVFYWlvQkNpdEFSb1FRSWpwZlMwMlFCK1hLWkFCTEJjZ2RiY1dCQkN6TERaZ3diY0NBcEQ4ZmtUSlZtdXlOU0dBeFFaY0hzcXdENkNzQkNoTEFZb3FnQW9DV0dyQTRHc0NHU0FmQXFSdjFZb0FZdFpZQ3g2MGRaR0FBREsrVTVBcDF0M1hqQURpUDhmTmZzaTkzb0tqQUFwTFFOWkdhMVVBY1V1TjAvajM0OHd1QWhOU0JESkFmbXJBN1EwS2QzVlRqZmUxYTRHWkQwZ1pMeUNBRVRhWVhPRnZVSHBHVnBVYUlJYWttcmQ5NzNzOEJWQllBc1NWdlZhcUFCWUw0Rm15UWxoRXN6WXQ2bFVMZEZYeXhnYVp0ZmN2dGdwa2dIelZnUHZyYkNoQXY5bTdydDI4bUhKZ1o5THlkYnNQbjgwNE1PZjFmNWg2ekdKenVqcHBnd1ZQQWU3ZHRaWUFXOU50S01EMHVQcEY4L3pUS2F6WC9KTmIyamdiZjlEblpqekIwRlNtQXFRcDNqTDV2SlVxZ0pYV0FMcW81YiszTmJyRnlnZUtkL2J0Zk1GVWdPdktOeldlQXJMWHFDekFRL3lXcmloaEpIeFY4Wm5oekhnOUJIanEyMVhWYkFGMkcrYlFZa0UyUHdwb2ZiQ2NrZWhTcGJ1WlluaXF3N1VDNXhMZzNwVVkvT2FlbVJYZzVUcTJQd3owMytJdkQzNmxyRFVwVGhPTjQvaStuRE9BeHd2RTRLM3RaZ3JRMkZHRlBzRHptOXpsYjI2anNuMzBOZXhndUEyNXhWcUFtZzVtMW9EOVp3dElBRkgxYlhsc3VhSTlyRWd5SE92aGY1dUhBSFFKOFBDc1lxWUFSQUtvN3F1S0FHSm9vRFNrNkNxR0cvME54MXdUQk84TUlLZ2E4TnNKc3dTSUZrNnFDRkRrWFdub3JKTEhENzlnT1BaNmdMak5XNEJhNWgwSUhpWE9wRFVXNm1RQThTL3BaM1ZGUVp2cmg1bUdZeTRKZ2tzR1NETWpBeGdSZ0VnQUxpK3BKVUR4RjZXaGN5WWZuQlZIbk9YcVhrcHd6d0RCMVBtVzNUZk1FS0NPaDFvQ2lCYjVxQUVmSHpBY2MzNUhDTjVyZ0NMQ09Zd1l6dHdrMmN0dnlkUVNRS1UxZ0JBVkxSZmczRWhpc0Z0cHdTWUR5RW9BdlFpUW5mQmJMYWdsZ0N3RDNMUjIzOVhYY2dIZUpLNU9jUjRtdUdlQWh3S1FpNEQxa3FsYmFUamtFeTRWSU52YW4yMUphY1RFQ1N6eE5hVnVsN0pDc0Y4RDBBS2swci85dTdqSGNLeWhvMVFBcS85QXZLZzBZdUxLa1Z2OWlFR25ZWUpQQnJpWkpST2dnby95NDREVmVuSUpJRnNEV0gwUmNNMkM0cERENk4rSndjNjU1NWQ0WkFESjJlQ0hBdWpDbFF1d2lsNENTRE9BdFFYNFF4b3BZZlJ4UDAwakJoMkhDMFlaUUM0QVhRTU9YS2JtYzRmaFdKa0tLZ3B3eWJJTW9JK2pyaGpwbUh1dFdkWTlGZ0trbVNtQWZqc3h1UFVCblFCVUUrQzhaUUxNMlVNbGdCRkNFeFdnNERNQWVSd29xR3RucVpPdTBVTEZOY0FXaXdUNDR4MXF0SDBGQ0pBcmdIOEFGZG1tVEFCZGxJb1pJT01iaTlZQUE2azM3ekJDYUdNSlVQQWxnSzRCUHh1ZU9qdEozRlVsdEppS0FteVFsbXR2STRlQm01ZFFvNjlXRXNnQWp3V2dhOEEyUlJXZ3NWQlJnTStra1ZyeUI5M3RJNHdsQUM0WjRMcTVHVUNoQU5GQ3ZUWEFKdmt2VXByS0gvWCtMOVJvcHljWHd0emxJWUN4RWhDdVU3UUt2RThzQzF6cnE1Y0JNdnNMQ3dRNE1aRWE5WmtrTkVQQlp3RHZ5bFRvMU4rYlo5OFN5YktCdTNvQ1RKQmZwK1JmWFJxS0p5OFlIbDhDQWp6Q0pUZDNSeXFxQVZRRmlCV3FDVEJ2cER6V1JCcFp1SU1hZmFHWDRDWkFtandCQ05GUVVTZUFFcUJsN3Y4NTIxNkEvOFVMQ3lyQVZmSktZc2ZaRGdJWklJOEFrVG9GR2VEU0ljTk5hankrVHRmTjFnSmtUZWhxNUxZRkR0R3l5TnRYcU5HK1lRSUM1QldnZURVcWVPN3A1Zk1tdlRRQjJGeUFZM1hmTWZiN3o1am5KSUdkQzZsUnYzR0NuUUNTZThVL0ZrQlJEVEJTQVlTN1RRWDQ5YTBheG0vZFBrWXlmcC8rS2VqVVovZ0prSzQzS2tBajA2dEEvV2JERGNxRW1NZ0FEKzdrKzVYZlh4TlRZYkx4RTNZdHd5V0JTZVFkeEtMYkNYNENHRHNLZkhRMDUyQlNBT3I4Y0t3d0lZRDVLZURqOVNmL3ZJdHYxcFhqU3diVWVhYlZSaE5YRnVwa0NlRFg5NmhSMTA4RVF3SFNqQXZnUTY2Sy9qaW1zQUpZVVlBM20xZDA5L1l0VXltNG5JOXo4YUFPSCsweGZiYStUWWdrMElkczhpVlVFTWdBZnhkQXNnallabHdBbndiV0YrRFJOLzlHNnBtVXc2ZlNGVjVTN0RCYUV2aVN2TGE5ZklKQUJsQXFRSjVWNE0zdkRjUE5uNXdDY0xlbUFHYlNUWEozaXZTQjVQQU1ONEVNWUNoQUJIazZaOGRmWDhLdG1VWXFnSFV6Z0htRXo1QUUzaUd2SDJ2YlZFQ0F2eWp5NTM5NGtRdnBxei85MVFVd2pMckVQUGxQUjZlQ0VpQmdqU1Q3N0oxRGpYcE5GVHdGTUZVQ0pEWGdlL3FJSUpmSVBJZlRiZ1VrUUpHMWtodkhQSWdqTzRmai9BVXlBQ2tBM1FsNGNqSGxIOGVOVllBQ0UwRDNlUTFKNUtORDFHam9Hd0lDMEFMVWN6RXF3SFpocEFzZ2JOMEtsREt1dFNSd1poVHB5MnhIcmdLWUxBSHV0YWw0U3BwY2dKcUJCWjBCSENZTWw0WDZrUmQ2OVhwUklBTklCS0FYQWZwOWNnSHlWb0FDRWNCenRmUXYvM3kxbGhvdFBsNUFBUE1FK0xNR1hEcWhQUUhLZmhjckMyWDBJNGNuRmVVcmdNa1NJR3E3R3hHQVNBQmxnd3RVQUYyZlEvTEx3RWFTTjR4NXFhdEFCcEFMNEZxWDJtQ2ZYbllRK1BUWFR5WkF1bzNlVDlEdVQrVG5kQTlPcDBhZFp3bStBc2p1Rlo5SEFMb0dYRHVwYUFtZzhsRkE4WWtINjhxajJYSGtUK0VIQlRFV1FIYXYrTHdDUk1rWEFSY003dzFYOUNWRkdjQVdBdmgrZU9wdEZ5UHhXZVROTFp5YjdLV1IvaUg2STNtM09sKzRCYml1UUlCYTVCSnByeVFCdEhBcUlBRkNwcDhhN0dGc2c0dkR5T0hNcU5vMGZXUTc2cEYzcS9sMktZQkQzbmx6akpKbUFFS0FWa0tSQVBmdVcvZkxQekE1dVorNzhXMEdxUE9ucXV5aUJEejlUU0l2cnYvcERya0dkSXQ1K3Q5RmhNMVRRRURyU2J2T1RRa3h0Vm5LTWdFQmxHWUF6NmYrUlo0b2ZmQ0RFT2NOZjEzWDJFTk5BZHpxRGxwMjV0eUt0K283bWQ3MmpvQUFGZ3BRdXBKa0VXRHlHTUNLQXNSM2FCRVJYTGFvNDhQMEZGZ3RJclpyLzlFZmZiNy94cmVULzExSzJDc0ZXQUtlRm9CT0FYdW9DdUR3OXlhYzFTNEptclY0M2M1RHA2NDl1SFUvNCt6aG5Xc1dUaHYxWnVkd1oySFBhQ1lEMEl1QVBWUUdxRlBDVmhuZ3lRN3RlOUsxS1VBa2RYUjkvdnpaWDAwZEE2aXlDSVFBTmk4Qkh2WElGS0JnQ1FBQjdDSURTQllCaGdJRVZZQUFkaWtBdVFpWXM4UjBCWUFBZGxFQ1JDaDEzNHliZHhRSTRBNEI3Q0VENktJVjdTMGdIQm5BUGdVUXluNDFFYXVEQUlWTEFNbTk0ZzBGaU5ZcDJWMHJBUUVLbHdDeXM4RUdBcFFNVnJBMzc0WVF3RjRGTUhLN3JiOW83Z3dCQ3BrQWFZb0ZVTElJSUNxQWNIYUNBSGFSQWVvWE1ia3psMmJVcURzRXNBc0JYQnVZM0ZrakwycFVKczZ0TEpVL3prckpaaUs5Mk92enZGdkYyMlVKSUs2dE03MElhQ1hNRVVEY1ZGa0F0eEF6S1MvYlU4VzhXL2t5eVFDbUZ3RzZXUE1FUUEwb1hBSlVDVFN4cnhmOElJQzlsQUEzNnNmU3BsSUFYUUVnUUdITUFKN1VZQlBMQk1EWklIc1JvTEh4MTFPcE1qS0EzWlFBVW9Cbnd5MUpBQkRBYmpLQWlVVkFTd2hnN3dJWVhRU1VyRzJ1QU9tWTRRSVhRSEt2ZUlrQXRZM2RURDFXaHd4UStBU1EzWFdYRnNDcGtRVkxBQWlnWlFITTZBT1pXQVI0U2VYQVlhQ0dCVWd6VHdBamk0QVlWMlFBKzg4QTVjcWJYd0VnZ0IwSklFOEJ6aTBnQUlNU0lGOEVSSHBEQUE0Wm9LR3oyUlVBQXRpVEFGNTE2SEZkclB3NXBFY0JHWHBNY1dFckFiSkZRTTFBQ3pKQWRnYW1XS3NaUUhxM3RhWm1Wd0M1QUtnQmhhOEVpQnJQUVFEV0pZRCtZOHpscTBJQUpobUFYZ1MwRkJDQWl3QXhyeEowTXZZYzBwOEdRUURObGdCSCtaOVE5RnRDRUdyMFNYQTJTTE1DNkFja2tBeTM2ck1NU1pCQVhVVFlaclFNOVQvLzBySVg3bTh2QXVqRzA0eXg2ck9Na0R6TGVLcXIxSHFVRFBVRmVGNzJ3a3ZaaXdDQSt4b0FRQUFBQVFBRUFCQUFRQUFBQVFBRUFCQUFRQUJnTndMZzJrdlYwV3RLQVB3TVczWFNOU1hBUlV5STJselVsQUFYTUNGcWN3RUNRQUR0Q0xBZkU2STIrelVsUU1vSnpJaTZuRWpSVmg5Z0RhWkVYYXoxZ1Z0TGdGV1lFblZacFRFQjltM0duS2pKNW4wYUUwQU1SVE5RUmZSRGhkWUVPTGdZMDZJZWl3OXFUZ0F4QkwwQTlYb0FRNFQyQkxqWTZpNW1SaDN1dHJxb1FRSEUvaDZZR25Yb1ljVytteld2QjFnY240bkpzVDJaOGRaY2JsbjFncEE1MFZjd1A3Ym1TdlFjb1ZVQnhJNWF1ekZEdG1WM3JSMUN1d0tJMHhFdGoyR1NiTWV4bGhHbmhaWUZFR0p0Y0pla2U1Z3BXM0F2cVV2d1dtdnYxUG9YaFdZdGFsRzgzYnoxaHk2ak5XZzE5SmNQclovWHJuaUxSZGIvVTdqL0I5MnZGb3hXSnpGbEFBQUFBRWxGVGtTdVFtQ0NcIiIsIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWdBQUFBSUFDQU1BQUFERHBpVElBQUFEQUZCTVZFVUFBQUQvQUFEL0FBRC9BQUQvQUQvL016UC9LaXIrSkNUZkh4L2lIQnpsR1JubkZ5N3BGU3JyRXlmc0pDVHVJaUx2SHgvd0hoN3dIQ3J4R2lqeUdTYnlHQ1RuRnlMb0lTSHBIeC9xSGlqckhTZnNIQ1hzR3lUdEdpUHVHU0x1R0NEdkh5ZnZIaWJ3SGlYd0hTVHBIQ1BxR3lMcUdpSHJHaWZyR1Nic0h5WHNIaVR0SFNQdEhDTHRIQ0h1R3lIdUd5WHZHaVh2R2lUcUdTUHJIaVBySFNMckhDSHNIQ1hzR3lYc0d5VHRHaVB0R2lQdEdTTHVIU0x1SFNYdUhDWHVIQ1RyR3lQckd5UHJHeUxyR2lMc0dpWHNIU1RzSFNUdEhDUHRIQ1B0R3lMdEd5THRHeVh1R2lUdUdpVHJIU1BySFNQckhDUHNIQ0xzR3lYc0d5VHNHeVR0R3lUdEdpUHRIU1B0SENMdEhDWHRIQ1R1SENUdUd5VHJHeVBzR3lQc0dpTHNIU1hzSENUc0hDVHNIQ1R0SENQdEd5UHRHeVB0R3lYdEdpVHRIU1R1SENUckhDUHNIQ1BzSENQc0d5WHNHeVRzR3lUc0d5VHRIU1B0SENQdEhDUHRIQ1h0SENUdEd5VHVHeVRzR3lQc0d5UHNIU1BzSENYc0hDVHNIQ1RzSENUdEd5UHRHeVB0R3lQdEd5UHRHeVR0SENUdEhDVHNIQ1BzSENQc0d5UHNHeVBzR3lUc0d5VHJHeVR0SENMdEhDUHRIQ1B0SENQdEdpVHRHeVR0R3lUc0d5THNHeVBzSENQc0hDUHNIQ1RzSENUckdpVHRHeUx0R3lQdEd5UHRHeVB0SENUdEhDVHRIQ1RzSENMc0dpUHNHaVBzR3lQc0d5VHJHeVRySENUdEhDVHRIQ0x0SENQdEhDUHRHaVR0R3lUdEd5VHRHeVRzSENMc0hDUHNIQ1BzSENUckhDVHJHaVRyR2lUdEd5THRHeVB0SENQdEhDVHRIQ1R0SENUdEhDVHNHaUxzR2lMc0d5UHJHeVRySENUckhDVHJIQ1R0SENMdEhDTHRHaVB0R2lUdEdpVHRHeVR0SENUc0hDTHNIQ0xySENQckhDVHJHaVRyR2lUckdpVHRHeUx0R3lMdEhDUHRIQ1B0SENUdEhDVHRHaVRzR2lMc0dpTHJHeUxyR3lQckhDVHJIQ1RySENUdEhDTHRHaUx0R2lMdEdpUHRHaVR0R3lUdEhDVHNIQ0xySENMckhDTHJHaVByR2lUckdpVHJHaVR0R3lMdEhDTHRIQ0x0SENMdEhDVHRHaVR0R2lUc0dpTHJHaUxyR2lMckhDTHJIQ1RySENUckhDVHRIQ1RDekhHOUFBQUEvM1JTVGxNQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMk56ZzVPanM4UFQ0L1FFRkNRMFJGUmtkSVNVcExURTFPVDFCUlVsTlVWVlpYV0ZsYVcxeGRYbDlnWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWHA3ZkgxK2Y0Q0Jnb09FaFlhSGlJbUtpNHlOam8rUWtaS1RsSldXbDVpWm1wdWNuWjZmb0tHaW82U2xwcWVvcWFxcnJLMnVyN0N4c3JPMHRiYTN1TG02dTd5OXZyL0F3Y0xEeE1YR3g4akp5c3ZNemM3UDBOSFMwOVRWMXRmWTJkcmIzTjNlMytEaDR1UGs1ZWJuNk9ucTYrenQ3dS93OGZMejlQWDI5L2o1K3Z2OC9mN3JDTmsxQUFBVS9VbEVRVlI0MnUzZGQ1d1VaWjdIOFdmeXdCQ0dISWE0WUVRQkErYkVLaWlLaEQwemlMcUxpaUs2b3VpSkI0SUo1Rnc4WFZFRXhNQ0tzSXFnSWloaFJSQllFQlVVRUVISk9RN0REQU9UNm1CMzc3YTZxNTZlNmFwdW5xZnIrWHovN3RkVHYrZjV2V2U2S3d0QkNDR0VFRUlJSVNjdTlYL2I5OVhQRnF4WXYvZW9GYWdVTEJ2U2tPNUdUc29GZytZZHNJS2J3NC9RWTNscTNUc2x5TTMvWjk1SW90R3VTZTQ0K2FobFFzWW4wMnhuNmc3WlpKbVNkeEFRbnRvakNpeUQ4cGNVV201UHplY1BXV1psVWlwZC8vZDMvd01ITGVQeUFRTCtMNmN2c2t6TVIybTAvbmpTaHg2MXpNekg2WFJmaUJZckxHTXpQWVArWDN2QU1qZ3pNdzF2ZjlMZ1Vzdm96S3BrZFA4cmYyeVpucm1WRGU1LzFma1dtWmRsYlA5ckxLSDl4N0tnaXFIOXI3T2M1djhqQzZ1WitmZS9za0tyVTdoN2E2Sm1SMFVGL0wyNmlZZC92aXBuVlRaUGZ1cW1NMnNtOHNHeVJ1RlR5dDBnbWV2U2JQTUEvQ1ZTODR1bTl6czE4YWZvQUxDMXlhK1NDWDliMDdUK0Q0M1EvdFdQMUEzRUhKMEFST04xa2psL1g4dXMvdmVRdDM5Kys2Qk0wZ1dBeVBsWk11MFZkVXpxZjB2cHlmOUZWd1ZubG00QVJJT2ZKRE5mV2RlYy9xZktEZ0RzLzMyUXB1a0tRTlJiSmZ2bXEyOE1nR2RrbDBnRWF3bmNBWWk2UDBxbXY4YVVHd1l1TG5HZC81RS9CR3llRWdDaXR1d0UrTHBHWmh3QmNQOGx2TG1kTUFTQXFQV2RSTUN2VFV3QThKanIzSmNFNzFld0ZJQ29zVXdpWUVPejRQZS9YcDdyemw5VllSQUFrYjFVSW1EamJ3SVA0RTIzZWM4SjRsbnhDQUJFOWNXeUkrQXRBOTcvYzl3dUFmcDdJSytMaVFSQVZGMG9FYkQxNUdBRG1Pa3k1L1hCUEFZU0VZQ29JcnNhWnZ1cFFlNy9tVzZIZndJNjQ4Z0FSTlk4aVlDZHB3Y1l3RHN1RSs0aWpBUWdLcytWQ05oOVptRDduMVBrbk81b1lTZ0FVV21XUk1DZU5rRmRreEV1QjBBckd3dEFaSDR1RWJEdnJHQXVTWWJMWFNBWENYTUJpSXpQWktmRnpnM2trblIzenZROVlUSUFrZjZKUkVEdStVRmNrcjg2NWxuUXlHd0FJbTJxUk1EQkM0TzNJbFVQTzZZNVJCZ09RS1I5S0JHUWQwbmdWcVNuWTVLSGFoZ1BRS1JPbGdqSXZ6eG9LekxkTWNlWEJRQkV5a1NKZ0lMZkJtdEIwaHhQZ1NwcEJvRGpBaVpJQkJ6dUVLZ0Z1Y0F4d2FrQ0FNZVQvTGJzdnFpcmc3UWd6aXRCYmdUQXZ3U01rd2c0Y20yQUZzUngwQ092RWdEK2xhUTNKQUtPWGgrWTlVak9EWi9jQkFHQS94ZndtdXcydVc1QldZOHpISE83R1FDMnZDSVJVSHhEUU5iakJzZlU2Z1BBbnBka0FnTHloL0pFK01UV0NnQ0U1RVdKZ0pMYkFyRWU0OFBuTlJZQVlSa3VFVkRhS3dqcnNTQjhXdmNCSUR6UHlnVGNGWUQxMkJrK3E2c0E0SWpzdVFsbHZSTitPVEljazJvS0FHY0d5d1RjbStqTFVjZHhrQ3NaQUM0WktCUFFOOEdYbzduamJnQUJBTGM4Sm50NHhrT0p2UnlPT3dKK0FJQjcrc3NFOUUvbzVialE4VFFZQUVqeWtFekFZNG04SEIwZEQ4b0dnQ3g5eXlRQ0JpYndjblFObjh3MEFFalRSeVpnY09JdVJ6Y0FWQnlBdUZzbTRHa0FHQUZBM0NWN2s4WnpBREFDZ09nbEUvQUNBSXdBSUhxVVNBVDhDUUJHQUJDM3lBUzhEQUFqQUlnYml5VUNSaVVCd0FRQTRuZEZFZ0dqa3dCZ0FnRFJWZlpTMVhISkFEQUJnT2g4UkNMZ3JXUUFtQUJBZEpJSm1KQUNBTTJURXdzQW9tT2hSTURFRkFEb25YcmhNOTdsYVppckRrc0VURTRGZ05iSkRwL3hBVy9qdEMrUUNKaVNCZ0NkVThseGZiL0hIMjZYeWQ2d015MGRBRHJIc1EvbjllVndsK1JKQkh5YUFRQ05zejE4eW1kNEhlbWlneElCTXpJQm9HOStDSit5OTF1OXo4K1ZDUGdpRXdEYXh2Rms5RWU4ajlYdWdFVEFuRW9BMERXdmgwLzVYUitEbmIxUEl1QnZXUURRTkk0ci9GZjZHYTN0WG9tQXI2b0FRTTkwY2R6ZGsrMW51TmE3SlFLK3Jnb0FMZU80R2NyeTk4Q2ZWcnNrQWhaWEE0Q09TWExzdkwzbWI4RFRka2dFTE1rR2dJNXh2Qkprczg4QlQ5a21FYkNzQmdBMGpQTWx5WDRmQVg3U1ZvbUE3Mm9CUUw5YzQralRxMzZIYkxGWkltQkZiUUJvbHl6SDFSd0hmQisyYWI1Ukl1REh1Z0RRTHJNZGJmTC9pdlNtNnlVQ1Z0VURnRzV4M3VxL3l2LzF2RTErbFFqNHFRRUF0RDhTWUhYelAycWpkUklCUCtjQVFMTTQzeEwrUXd3dTUyMzRzMFRBTDQwQm9QdDNnSFZIRElhdHYxb2lZSDFUQUdpVnVzNTdlN2JINHNoOXZaVVNBUnViQTBDcmZCQ25lenZyL0NBUnNLa0ZBSFRLbFM3UGZiMDRGZ1BYWGk0UnNPVWtBT2dVbHo3OUdwT1Rkelcva3dqWWRnb0FORW92bHhhOUg1T1JheXlUQ05oeEdnRDBTWnJiZ2J1SFl6SjA5aEtKZ0YydEFLQlA3bko3QlVTbm1BeGRiWkZFd083V0FOQW1LV3ZkWGdzYm05ZkRWLzFhSW1Cdld3RG9PL04vZE9qTW1JeGRaYjVFd1A1ekFLQk41cnArVDdlSnlkaFpYMG9FSEdnSEFGMXlodXVqZmc3RTVIQ0FxRHhISWlEM0FnRG9FdmRYQVJYZUVwUEJLODJTQ01pN0dBQ2FKR09OKzB0QVhvakpRejR5WjBvRUhMb1VBSnFrbmVTSmYvTWF4Y1RYZEltQS9Dc0FvRW1lbFAxVTZ4bUwwZE0vbGd4ZmNDVUE5RWl5N0tlYTlVWExHQXlmTmxVeSt1R09BTkFqZFdTWGMxdEgvMVRULy9DcEgwaEdMK3dFQUUxK0JzZ2U5MlpaQjUveGYwMS82aVRKNEVjNkEwQ1AzRkFtRldBZEh1MzdzRkRLZTdML01GMEJvRWNldFNKbDJjTStMK2hNZVZjeWN0SHZBS0JIaGtVVVlKVjlQNnlEbitzRms5K1NERnpjSFFCNjVNOVdlU2xkTlduUTdaZWVXaWZMeTFOQWs4Yks5Z1pQQm9BV1NYclpVcE5QQWFCSm5sY0RvS3c1QURUSmc2VktCRHdBQUYzU3BVQUZnREVBMENhdGYxRUE0Q01BNkpQc1QwODhnR2tBMENuOUNnRmdOQURSNmhzQUdBMUFwUFF2QUlBd09rMG1BY0R3WExJSUFJYm4ybVVBTUR4WHpnU0E0VG5seFQwQU1EdnAzZDdQQjREWnFkUjUxSG9BR0o3R3Q3NjZNQThBWmllcFdZZDduaC8veWFJZmZ0NndaYXVQN0FXQTJla0dBQUFBQUFBQUFBQUFBQUFBQUFBQUFOUUVBR29DQURVQmdKb0FRRTBBb0NZQVVCTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFzTmdBWUxFQndHSURnTVVHQUlzTkFCWWJBQ3cyQUFBQUFBQUFBQUFBQUFBQUFBQUFBTkFuQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ29DUURVQkFCcUFnQTFBWUNhQUVCTkFLQW1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR0N4QWNCaUE0REZCZ0NMRFFBV0d3QXNOZ0JZYkFBQUFBQUFBQUFBQUFBQUFBQUFBQUNnVHdBZ0FDQUFJSUZaN0U1OXBIazl2S2JsZlJJMjkvNit4dzBkejJxVUJvRHdUTGRNU3VuRzJhUHVPVHNOQUtZQytHZU9MQmg2ZVRvQXpBVndQQWNuM2xBWkFBWURPSmE4Y1JjRHdHUUF4N0xxN2t3QW1KM2RnNm9Cd096c0cxZ0ZBR1puKzUxSkFEQTdTODhGZ05rcGViRVNBTXpPdWdzQVlIYUtuMHdHZ05uNVd4MEFtSjFOWndQQTdCVGVCQUN6VTlZZkFJWm5KQUFNeitna0FKaWQ4Y2tBTVB4L0FBQU16ekFBR0o3K0FEQTdwVjBCWUhieXp3S0EyZGxZRXdCbVowWVNBTXpPZndIQTdCU2ZCd0N6czdZeUFNek9xd0F3TzJVWEFjRHNyRXdEZ05sNUFnQm01MUI5QUppZDhRQXcvS3hRR3dBNHM3OTNwTnpUYitESVNVdnp5aDltcUd5RXUrOGZNUHp0ZVRzcVhsRHZLQlBGWEQ4R2dETmJLekJ1VW91ZWIrMktQRXpiY29hbzNXbjQ5eFVyS05wSlJ6UFpjd0hnQ2NEeEpGLzFmckVQQU1mVGJPQTZ4UUNtQThBemdHTnBNcWJFRjRCai8wcXVXNmdVZ05VS0FENEFDTkY2cVQ4QXgzTHRHcFVBM2dLQUx3QWlkYmhmQUNKOVNKRTZBRWNiQXNBWEFDRjZGUGtFSUVTNzljb0FXSU1CNEJPQTZGTGtGNENvTVZzWmdNMHBBUEFKUVBUMERVQ2t2YXNLZ05VWkFINEJpQkcrQVlpa3Nhb0FmQWlBQ0FDNkRBbkxrdzkwUDhWeFFXWHEwc2dBVHJXUE1QalJPNitvN1hKWTRmMktBT2d5cnZ4RU9kL0NhZ0NRQTNCZHpUMXZYUksrTjFnU0VVQTM1d1ZacjF6bzJCbFlVQUVBUStKd1J1QU9BRVFKNEZqbW5oeTZvVEZSQWppV2I3dUVGVnR2aHhvQU13QVFQUUFyLy9xUURUVXRqaHFBWmMzTUNhMjJZNWtTQUVleUFCQTlBS3Y0bXBBdGZlQUJnTFhuc3RCeXh5b0JZSFVIZ0FjQVZtNHord2M3ZXdGZ0hRbmRCNnUxWHdtQThRRHdBc0NhYWY5Z1JyNFhBTmFSUzBQcUhhQUV3R1lBZUFKZ1hXSC81QXhQQUt6ZGpleURWTjZqQW9EVkFnQ2VBSVFjUWhua0RZQTFOK1Nvd3ROS0FQUUdnQ2NBaGZabmNIZjNDTUM2MDc2OVJxVXFBTHdMQUU4QXJQYTJUN2J4Q21CN3lLUGM1NmdBOEJNQXZBSG9aeitNNHhXQTlhQjlnL2VwQUZCYUZRQ2VBTHhnKzJTbVp3QnI3UnRzcGdKQTZNOVpBRlFZd0NqNzZUelBBS3lRRi94dFZBSGdRUUI0QXZDSy9ZeWdkd0QvYmQvaUpCVUFYZ09BSndCUDJUNlo3UjNBY3ZzV0gxY0I0RXNBZUFMUTAvYkpGdDRCbE5wZjdkZFZCWUFkQVBBRXdINU91TDEzQUpiOWpVNnRWUUFveXdDQUJ3Qy8yRC9aeHdlQTIrMG5oRlFBaVBmQjRJQUNlRExTSjZNQjhKLzJ2WWxTRlFDdUFFRDBBUGJYc0g5eXJROEFJK3dESFZRQjREWUFSQS9nSHZzSFcxbytBSVE4c0d1M0NnQVBBQ0JxQUg4TjJkS1RmZ0M4Ymg5cHB3b0Fnd0FRTFlEUFE4N2hwS3ozQTJCMGhRR2MzRGxTL3VnWndFZ0FSQWVnWkhocXlJWnV0VTRNZ01nNTF6T0FzUUNJQmtEUjVETkN0NU8rTHNFQnZBT0FDZ0xJM3poLzFHMk9wKzBQc2hJY3dQc0FjQWRRc2JRclNuUUFVd0RnQTBEOXpWYWlBL2dRQU40QjFGaHVKVHlBaVFEd0RLQythLzhURE1EYkFQQUs0THd0VmdBQXZBRUFid0RTQnNrZThKUllBRVlBd0JPQXpxdWx3OFRuVVBEbEVSOE5NYzB6Z0NjQUVEMkFqTnVXUlJqRzg4bWdQWkVBOUluVHVZQStBSWdTUU5YcngrNlBPRXcwQUliYlI4NVhBZUJHQUxnRFNFNE5TMloyazNPNlBEenV1K0x5aG9rR3dHUDIwMHFXQ2dBWEFjRExOWUd4QW1DL0hLTytFZ0NOQWFBU3dIa1JmOG1mQUFBbEtRQlFDS0RFL2c3SG0xVUEyQ2dBb0JEQXQvWXRQcTBDd0V3QXFBUVFzaFB3bVFvQUx3RkFKWUR6N2JzZCsxVUF1QWNBQ2dIOFZNN1IzQk1BNER3QUtBUnd2MzJEUTFRQUtNb0FnRG9BV3pMdEcxeXRBc0MzQWdEcUFOaHZNUmJ0TEJVQVhnT0FPZ0JmaEJUOGpoSUFOd05BR1lDZERleWJhMXlrQkVBOUFLZ0NjRGowTE13WVN3V0FWUUlBaWdBVVhoMVNidXNTSlFCR0FrQVJnRjBoendjVHllNXZFWTA3Z1BZQVVBUGc0d2FoMVQ1cUtRR1Ftd29BRlFDV2Rnb3I5dndpTlFBbUNnQ2NjQUNyUjdZTHJ6Vm5tNlVHUUJjQXhCdEF5R3ZqQnZYdmRWbE5aNm5aS3l3MUFQYW5BeURlQUNxUTZvc3RSUURHQ2dDb0I5RGdlMHNWZ0FzQW9CN0EyWnN0VlFCV0NBQW9CM0Ivb2FVTXdQMEFVQTNnTjdNaWp4UlhBTGxWQWFBV1FQYXdRa3NoZ0JjRUFGUUN5SGsrdDl5UjRnbmdhRU1BcUFOUXZjZW54UlVZS1o0QXhna0FLQUdRM0x6cmMxOFhWMnlrT0FJb2Fnb0FSd3JzZDl5djhieTJIOGx1NG45end0U3YxaFpHODFkcXk5ZXhCZkM2QUlESktjZ0JnTkVaS2dCZ2NyWmxBY0RvOUJRQU1EbXpCUUJNenVFV0FEQTZBd1FBVE01WHlRQXdPUWViQ2dDWW5Gc0VBRXpPbndVQVRNN2lkQUNZbkMzMUJRQU1UbjViQVFDRFUzeTlBSURCS2J0ZEFNRGs5Qk1BTURsL0ZBQXcrZi8vZlFJQUJxZW9sd0NBd2NucklBQmdjRGExRlFBd09GL1dFUUF3K09mZnlGUUJBSE96OHhvaEFHQnVwdFVUQURBM3UyNFNBZ0RHcHVTMVdnSUE1bWJ1bVVJQXdOZ3N1bElJQUJpYk9kY0lBUUJUVXpDK3RSQUFNUFc0ejhMZVZZVUFnSm5kUHpxM2I0N1FLUUE0Z2YvNEY0NjR1ckxRTEFBNEFUbThhY2w3UTNxMFNoRWFSaG1BNW0ybGVkaHhzcXh0d3FiTmFjMGJWaEVhUnhtQUJLc3BzQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFhZ0lBTlFHQW1nQkFUUUNnSmdBb1NGY0FLQVF3VlgxTjE0WFhOSjAreFMwM2hTLzJaUFUxZFFpdmFSWjlpbHR1RDEvc0NlcHJ1aXk4cHFYMEtXN3BGNzdZNDlUWDFEcThwbC9vVTl6eVZQaGl2NmkrcGh6SEpWWDBLVzRaRTc3WUE5WFhsT200cUs0T2pZcFh2Z2hmNjNzMUtHcHZlRkVYMDZoNFpVUDRXbCtyUVZIZjZxZ3ltTWtxQzEvclZocFVOU1c4cURmb1ZKeHlpZVByVm9kcm1KOE5MMm9GbllwVEhnMWY2aTA2VkhWcmVGV2xOV2xWZk9LNFArZHpIYXBxNWZpL2RDT3Rpa3ZTRG1sNEdFQ0k1THp3c3Q2bFYzRkpCMDMvMU9hR2w3VS9qV2JGSTY4N0FEVFdvcTZuSFhWMXBWbngrQVp3SEhIWnJFZGhqdE5CT3B5bERtQWNGd05ZNDNYOWJWTGNtSGJGUHJNZEFHN1RwTEtwanNxRzBhNFRzTGRWb3N0WmwxNk8wZzVtMDdCWTV6M0hLcy9UcGJUc0lrZHRRMmhZakhOS2lXT1JIOVNtdUU4Y3RSMnFSOHRpbTJuT2I0QUcyaFRYM2Zta25UZHBXVXpUM3JuRU16VGFROTN0Zkw0ZVZ3WEVNdW1yblFCdTFxaSs1NXpscmNta2JiSExzODRGM3E3VDhkYWNZbWVCLzBQYllwYnpuYjhBcmNHYTc2TllWaGNhRjZ2ZHJBMHVqek9zcTlkUmlqSm5pUWRPcG5VeFNmSU1seit2bHpVcjhrT1hHdGR3WlVoTThxTGJZNHh6TkN2eTlCSzN0eXhVb252Kzg1RGJBMjFmMHE3TXNXNWx6bUpYd0hmdWR2bDJ0WEpyYVZkbmd6dzNBYk9yMEVGLzZldldmMnVBaHBVKzdQcnM3YVYxNmFHUEpEM2p1cXFyZEx6bUttVzVhNjJiMnRCR3o2azAyZjJSOXUyMXJQYXNJdmZuNy9lbWtSNXo2by91L2RmMTFwdW5KSzlnbU1MdG9wNysvVDlRNEw2ZUczVDlZWlc2U0NKZ3p4K1M2R2UwT1dPKzdBMm1sMnBiYzVOOXN2ZXdmTk9lamthVitxT0xaV3M1VU9PeXJ5dVZ2b3JueXc1MHRjSnAvUEpoNlVMTzBQcS82ZU1SM3NhMCtpRjJDU3YwVFhyZDFCTDVLdjVVWGUvcTM0bjBRcTdpV2YxYTB1Q0lxZDd0emQyUmxuRGZTWnBQSU8zemN0N0t0dTNEUWYvUnRrNHlyUTVQdFpZZCs0NzlyclNjdHhsZXFQMDhzaFpYNU9WOHBZZjI3aVQvenE3Y294Vlp0cUxPaWZCUGJJbEY0cE9pN29ueE5iYVlWc1huVmNiZEUrVGJMR3NtellwRDhxNU1tTjh6YVcvVHJwaG4yem1KOUpOMlFDa2RpMjIrYVpoWU96Vlg3NkZuc2N5YkNYZDFYYzU4dWhhejVQZEt3QU1ieVFPTzBMbllaSDZMeER5MmRmb0NlaGVESEh3d1lZK2JKdDI1aS83NXpjUUdJb0ZUZFdnK0xmU1RlZWNsK2ptT2VpL2swVWF2K2FwakVFNXoxWGg4QTYzMGN1Ui9jbUNlc1pEYytZTkNHaHBkVmcxc0lJS1U2bmRNT1VSWEs1cnZuMmtid0NzZU1pNGZQT2NBelMwbkpTdkg5TWdSd1UzenJvK01tcjVrL2I3OEVucHRTMWxoN3JZVmN5WU03ZFdPMjJrSklZUVFRZ2doc2M3L0FueFBhK20zMmpMT0FBQUFBRWxGVGtTdVFtQ0NcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IFJhd0hUTUwgPSAoe2NoaWxkcmVuLCBjbGFzc05hbWUgPSBcIlwifSkgPT5cbiAgICA8c3BhbiBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGNoaWxkcmVuPy5yZXBsYWNlKC9cXG4vZywgJzxiciAvPicpfX0gLz5cblxuZXhwb3J0IGRlZmF1bHQgUmF3SFRNTDsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFuZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7Y2hpbGRyZW4sIHNob3csIHRpdGxlLCBoYW5kbGVDbGljaywgY2xhc3NOYW1lLCBpZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgdGhlSWQgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpZCcpID8gaWQgOiBgaWRfJHt0aXRsZX1gO1xuICAgICAgICBsZXQgdGhlQ2xhc3MgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IGNsYXNzTmFtZSA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJwYW5lbC1ncm91cCBcIiArIHRoZUNsYXNzfSBpZD17dGhlSWR9ID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPXtzaG93ID8gJ2NvbGxhcHNlZCcgOiAnJ30gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT1cInBhbmVsLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1jb2xsYXBzZSBjb2xsYXBzZSBpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Nob3cgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiO1xuaW1wb3J0IHtcbiAgICBkb0xvZ2luLFxuICAgIGVtaXRBY2Nlc3NUb2tlbixcbiAgICBnZXRPQXV0aDJGbG93LFxuICAgIFJFU1BPTlNFX1RZUEVfSU1QTElDSVQsXG4gICAgUkVTUE9OU0VfVFlQRV9DT0RFLFxuICAgIHZhbGlkYXRlSWRUb2tlblxufSBmcm9tIFwiLi9tZXRob2RzXCI7XG5pbXBvcnQge2dldEN1cnJlbnRQYXRoTmFtZSwgZ2V0Q3VycmVudEhyZWZ9IGZyb20gJy4uLy4uL3V0aWxzL21ldGhvZHMnO1xuXG5jbGFzcyBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKGlzc3VlciwgYXVkaWVuY2UsIHByb3BzKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpjb25zdHJ1Y3RvciBpbml0Jyk7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICAvLyBpbml0aWFsIHN0YXRlXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBpZF90b2tlbl9pc192YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IG51bGwsXG4gICAgICAgICAgICBpc3N1ZXI6IGlzc3VlcixcbiAgICAgICAgICAgIGF1ZGllbmNlOiBhdWRpZW5jZSxcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBudWxsLFxuICAgICAgICAgICAgZmxvdzogZ2V0T0F1dGgyRmxvdygpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9pbXBsaWNpdEZsb3coKSB7XG4gICAgICAgIC8vIGdldCBkYXRhIGZyb20gdXJsIGhhc2hcbiAgICAgICAgY29uc3Qge2FjY2Vzc190b2tlbiwgaWRfdG9rZW4sIHNlc3Npb25fc3RhdGUsIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbiwgZXhwaXJlc19pbn0gPSB0aGlzLmV4dHJhY3RIYXNoUGFyYW1zKCk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBpZiBlcnJvciBjb25kaXRpb24gc2hvcnQgY3V0Li4uXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBlcnJvcjogZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvcl9kZXNjcmlwdGlvbn0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFjY2Vzc190b2tlbikge1xuICAgICAgICAgICAgLy8gcmUgc3RhcnQgZmxvd1xuICAgICAgICAgICAgZG9Mb2dpbihnZXRDdXJyZW50UGF0aE5hbWUoKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZF90b2tlbl9pc192YWxpZCA9IGlkX3Rva2VuID8gdmFsaWRhdGVJZFRva2VuXG4gICAgICAgIChcbiAgICAgICAgICAgIGlkX3Rva2VuLFxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5pc3N1ZXIsXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmF1ZGllbmNlXG4gICAgICAgICkgOiBmYWxzZTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICBpZF90b2tlbl9pc192YWxpZDogaWRfdG9rZW5faXNfdmFsaWQsXG4gICAgICAgICAgICBlcnJvcjogIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBudWxsLFxuICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogbnVsbCxcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGFjY2Vzc190b2tlbiAmJiBpZF90b2tlbl9pc192YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblVzZXJBdXRoKGFjY2Vzc190b2tlbiwgaWRfdG9rZW4sIHNlc3Npb25fc3RhdGUsIGV4cGlyZXNfaW4pO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uICE9PSB3aW5kb3cucGFyZW50LmxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2ltcGxpY2l0RmxvdyBydW5uaW5nIGluc2lkZSBpZnJhbWUsIHNlbmRpbmcgYXV0aCBzdGF0ZSB0byBwYXJlbnRcIik7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnU0VUX0FVVEhfSU5GT19TSUxFTlRMWScsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuOiBpZF90b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHNlc3Npb25fc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBpcmVzX2luOiBleHBpcmVzX2luLFxuICAgICAgICAgICAgICAgICAgICB9KSwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2NvZGVGbG93KCkge1xuXG4gICAgICAgIGNvbnN0IHtjb2RlLCBzZXNzaW9uX3N0YXRlLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb259ID0gdGhpcy5leHRyYWN0SGFzaFBhcmFtcygpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgLy8gaWYgZXJyb3IgY29uZGl0aW9uIHNob3J0IGN1dC4uLlxuICAgICAgICAgICAgLy8gd2Ugc2V0IGhlcmUgZGlyZWN0bHkgYmMgd2UgYXJlIGF0IGNvbnN0cnVjdGlvbiB0aW1lXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBlcnJvcjogZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvcl9kZXNjcmlwdGlvbn0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvZGUpIHtcbiAgICAgICAgICAgIC8vIHJlIHN0YXJ0IGZsb3dcbiAgICAgICAgICAgIGRvTG9naW4oZ2V0Q3VycmVudFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHVybCA9IFVSSShnZXRDdXJyZW50SHJlZigpKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdXJsLnNlYXJjaCh0cnVlKTtcbiAgICAgICAgbGV0IGJhY2tVcmwgPSBxdWVyeS5oYXNPd25Qcm9wZXJ0eSgnQmFja1VybCcpID8gcXVlcnlbJ0JhY2tVcmwnXSA6IG51bGw7XG4gICAgICAgIC8vIGFzeW5jIGNvZGVcbiAgICAgICAgLy8gY29uc29sZS5sb2coYEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9jb2RlRmxvdyBnZXR0aW5nIGFjY2VzcyB0b2tlbiB3aXRoIGNvZGUgJHtjb2RlfWApXG5cbiAgICAgICAgZW1pdEFjY2Vzc1Rva2VuKGNvZGUsIGJhY2tVcmwpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9jb2RlRmxvdyBbQVNZTkNdIGdvdCByZXNwb25zZSAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlKX1gKTtcbiAgICAgICAgICAgIGxldCB7aWRfdG9rZW4sIGFjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgZXhwaXJlc19pbiwgZXJyb3I6IGVycm9yMiwgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yX2Rlc2NyaXB0aW9uMn0gPSByZXNwb25zZTtcblxuICAgICAgICAgICAgaWYgKGVycm9yMikge1xuICAgICAgICAgICAgICAgIC8vIHNldCB3aXRoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcjIsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvcl9kZXNjcmlwdGlvbjJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlkX3Rva2VuX2lzX3ZhbGlkID0gaWRfdG9rZW4gPyB2YWxpZGF0ZUlkVG9rZW5cbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBpZF90b2tlbixcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmlzc3VlcixcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmF1ZGllbmNlXG4gICAgICAgICAgICApIDogZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHRoaXMuc3RhdGUuaWRfdG9rZW5faXNfdmFsaWQgPSBpZF90b2tlbl9pc192YWxpZDtcbiAgICAgICAgICAgIC8vdGhpcy5zdGF0ZS5lcnJvciA9ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogZXJyb3I7XG4gICAgICAgICAgICAvL3RoaXMuc3RhdGUuZXJyb3JfZGVzY3JpcHRpb24gPSAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IGVycm9yX2Rlc2NyaXB0aW9uO1xuXG4gICAgICAgICAgICAvLyBzZXQgd2l0aFxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9jb2RlRmxvdyBbQVNZTkNdIHNldHRpbmcgc3RhdGVgKTtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgc3RhdGUgYXN5bmNocm9udXNseSBiYyB3ZSBhcmUgbm90ICBvbiBjb25zdHJ1Y3RvciBjb250ZXh0XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgIGlkX3Rva2VuX2lzX3ZhbGlkOiBpZF90b2tlbl9pc192YWxpZCxcbiAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgIGVycm9yOiAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IGVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IGVycm9yX2Rlc2NyaXB0aW9uLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChhY2Nlc3NfdG9rZW4gJiYgaWRfdG9rZW5faXNfdmFsaWQpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2NvZGVGbG93IFtBU1lOQ10gb25Vc2VyQXV0aGApO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25Vc2VyQXV0aChhY2Nlc3NfdG9rZW4sIGlkX3Rva2VuLCBzZXNzaW9uX3N0YXRlLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbiAhPT0gd2luZG93LnBhcmVudC5sb2NhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgcnVubmluZyBpbnNpZGUgaWZyYW1lLCBzZW5kaW5nIGF1dGggc3RhdGUgdG8gcGFyZW50XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnU0VUX0FVVEhfSU5GT19TSUxFTlRMWScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRfdG9rZW46IGlkX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHNlc3Npb25fc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJlc19pbjogZXhwaXJlc19pbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoX3Rva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuXG4gICAgICAgIGxldCB7Zmxvd30gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGlmIChmbG93ID09PSBSRVNQT05TRV9UWVBFX0lNUExJQ0lUKSB7XG4gICAgICAgICAgICB0aGlzLl9pbXBsaWNpdEZsb3coKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmbG93ID09PSBSRVNQT05TRV9UWVBFX0NPREUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvZGVGbG93KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHRyYWN0SGFzaFBhcmFtcygpIHtcbiAgICAgICAgcmV0dXJuIFVSSS5wYXJzZVF1ZXJ5KHRoaXMucHJvcHMubG9jYXRpb24uaGFzaC5zdWJzdHIoMSkpO1xuICAgIH1cblxuICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpIHtcblxuICAgICAgICBpZiAobmV4dFN0YXRlLmFjY2Vzc1Rva2VuICE9PSB0aGlzLnN0YXRlLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV4dFN0YXRlLmVycm9yICE9PSB0aGlzLnN0YXRlLmVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0U3RhdGUuaWRfdG9rZW5faXNfdmFsaWQgIT09IHRoaXMuc3RhdGUuaWRfdG9rZW5faXNfdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhbiBhY2Nlc3MgdG9rZW4gcmVmcmVzaCAuLi5cbiAgICAgICAgaWYgKHByZXZTdGF0ZS5hY2Nlc3NUb2tlbiAhPT0gdGhpcy5zdGF0ZS5hY2Nlc3NUb2tlbikge1xuXG4gICAgICAgICAgICBsZXQgdXJsID0gVVJJKGdldEN1cnJlbnRIcmVmKCkpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdXJsLnNlYXJjaCh0cnVlKTtcbiAgICAgICAgICAgIGxldCBmcmFnbWVudCA9IFVSSS5wYXJzZVF1ZXJ5KHVybC5mcmFnbWVudCgpKTtcblxuICAgICAgICAgICAgLy8gcHVyZ2UgZnJhZ21lbnRcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnY29kZSddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydhY2Nlc3NfdG9rZW4nXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnZXhwaXJlc19pbiddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50Wyd0b2tlbl90eXBlJ107XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ3Njb3BlJ107XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ2lkX3Rva2VuJ107XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ3Nlc3Npb25fc3RhdGUnXTtcblxuICAgICAgICAgICAgbGV0IGJhY2tVcmwgPSBxdWVyeS5oYXNPd25Qcm9wZXJ0eSgnQmFja1VybCcpID8gcXVlcnlbJ0JhY2tVcmwnXSA6ICcvYXBwJztcblxuICAgICAgICAgICAgaWYgKGZyYWdtZW50LmxlbmdodCA+IDApIHtcbiAgICAgICAgICAgICAgICBiYWNrVXJsICs9IGAjJHtVUkkuYnVpbGRRdWVyeShmcmFnbWVudCl9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2soYmFja1VybCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBYnN0cmFjdFxuICAgICAqIEBwYXJhbSBlcnJvclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2NhbGxiYWNrKGJhY2tVcmwpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBYnN0cmFjdFxuICAgICAqIEBwYXJhbSBlcnJvclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlZGlyZWN0MkVycm9yKGVycm9yKSB7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7aWRfdG9rZW5faXNfdmFsaWQsIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbn0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGlmIChlcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3QyRXJyb3IoYCR7ZXJyb3J9IC0gJHtlcnJvcl9kZXNjcmlwdGlvbn0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlkX3Rva2VuX2lzX3ZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3QyRXJyb3IoXCJUb2tlbiBWYWxpZGF0aW9uIEVycm9yIC0gVG9rZW4gaXMgaW52YWxpZC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU7XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFQgZnJvbSBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCI7XG5pbXBvcnQge2F1dGhFcnJvckhhbmRsZXIsIGNyZWF0ZUFjdGlvbiwgZ2V0UmVxdWVzdCwgc2hvd01lc3NhZ2UsIHN0YXJ0TG9hZGluZywgc3RvcExvYWRpbmd9IGZyb20gXCIuLi8uLi91dGlscy9hY3Rpb25zXCI7XG5pbXBvcnQge2J1aWxkQVBJQmFzZVVybCwgZ2V0QWxsb3dlZFVzZXJHcm91cHN9IGZyb20gJy4uLy4uL3V0aWxzL21ldGhvZHMnO1xuaW1wb3J0IHsgZ2V0QWNjZXNzVG9rZW4sIHN0b3JlQXV0aEluZm8sIGluaXRMb2dPdXR9IGZyb20gJy4vbWV0aG9kcyc7XG5cbi8qKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgY29uc3QgU0VUX0xPR0dFRF9VU0VSID0gJ1NFVF9MT0dHRURfVVNFUic7XG5leHBvcnQgY29uc3QgTE9HT1VUX1VTRVIgPSAnTE9HT1VUX1VTRVInO1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfVVNFUl9JTkZPID0gJ1JFUVVFU1RfVVNFUl9JTkZPJztcbmV4cG9ydCBjb25zdCBSRUNFSVZFX1VTRVJfSU5GTyA9ICdSRUNFSVZFX1VTRVJfSU5GTyc7XG5leHBvcnQgY29uc3QgQ0xFQVJfU0VTU0lPTl9TVEFURSA9ICdDTEVBUl9TRVNTSU9OX1NUQVRFJztcbmV4cG9ydCBjb25zdCBVUERBVEVfU0VTU0lPTl9TVEFURV9TVEFUVVMgPSAnVVBEQVRFX1NFU1NJT05fU1RBVEVfU1RBVFVTJztcbmV4cG9ydCBjb25zdCBTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQgPSAndW5jaGFuZ2VkJztcbmV4cG9ydCBjb25zdCBTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VEID0gJ2NoYW5nZWQnO1xuZXhwb3J0IGNvbnN0IFNFU1NJT05fU1RBVEVfU1RBVFVTX0VSUk9SID0gJ2Vycm9yJztcbmV4cG9ydCBjb25zdCBVUERBVEVfVVNFUl9JTkZPID0gJ1VQREFURV9VU0VSX0lORk8nO1xuXG5leHBvcnQgY29uc3Qgb25Vc2VyQXV0aCA9IChhY2Nlc3NUb2tlbiwgaWRUb2tlbiwgc2Vzc2lvblN0YXRlLCBleHBpcmVzSW4gPSAwLCByZWZyZXNoVG9rZW4gPSBudWxsKSA9PiAoZGlzcGF0Y2gpID0+IHtcblxuICAgIHN0b3JlQXV0aEluZm8oYWNjZXNzVG9rZW4sIGV4cGlyZXNJbiwgcmVmcmVzaFRva2VuLCBpZFRva2VuKTtcblxuICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogU0VUX0xPR0dFRF9VU0VSLFxuICAgICAgICBwYXlsb2FkOiB7IHNlc3Npb25TdGF0ZSB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBkb0xvZ291dCA9IChiYWNrVXJsKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBMT0dPVVRfVVNFUixcbiAgICAgICAgcGF5bG9hZDoge2JhY2tVcmw6IGJhY2tVcmx9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VySW5mbyA9IChleHBhbmQgPSAnZ3JvdXBzJywgZmllbGRzPScnLCBiYWNrVXJsID0gbnVsbCwgaGlzdG9yeSA9IG51bGwsIGVycm9ySGFuZGxlciA9IG51bGwgKSA9PlxuICAgIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcblxuICAgIGxldCBBbGxvd2VkVXNlckdyb3VwcyA9IGdldEFsbG93ZWRVc2VyR3JvdXBzKCk7XG4gICAgQWxsb3dlZFVzZXJHcm91cHMgPSBBbGxvd2VkVXNlckdyb3VwcyAhPT0gJycgPyBBbGxvd2VkVXNlckdyb3Vwcy5zcGxpdCgnICcpIDogW107XG4gICAgbGV0IHtsb2dnZWRVc2VyU3RhdGV9ID0gZ2V0U3RhdGUoKTtcbiAgICBsZXQge21lbWJlcn0gPSBsb2dnZWRVc2VyU3RhdGU7XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuXG4gICAgaWYgKG1lbWJlciAhPSBudWxsKSB7XG4gICAgICAgIGlmKGhpc3RvcnkgIT0gbnVsbCAmJiBiYWNrVXJsICE9IG51bGwpXG4gICAgICAgICAgICBoaXN0b3J5LnB1c2goYmFja1VybCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBpZihlcnJvckhhbmRsZXIgPT0gbnVsbClcbiAgICAgICAgZXJyb3JIYW5kbGVyID0gYXV0aEVycm9ySGFuZGxlcjtcblxuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcblxuICAgIGxldCBwYXJhbXMgPSB7XG4gICAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICAgIGV4cGFuZCA6IGV4cGFuZCxcbiAgICB9XG5cbiAgICBpZihmaWVsZHMpe1xuICAgICAgICBwYXJhbXNbJ2ZpZWxkcyddID0gZmllbGRzO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRSZXF1ZXN0KFxuICAgICAgICBjcmVhdGVBY3Rpb24oUkVRVUVTVF9VU0VSX0lORk8pLFxuICAgICAgICBjcmVhdGVBY3Rpb24oUkVDRUlWRV9VU0VSX0lORk8pLFxuICAgICAgICBidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvbWVtYmVycy9tZWApLFxuICAgICAgICBlcnJvckhhbmRsZXJcbiAgICApKHBhcmFtcykoZGlzcGF0Y2gsIGdldFN0YXRlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuXG4gICAgICAgICAgICBsZXQge21lbWJlcn0gPSBnZXRTdGF0ZSgpLmxvZ2dlZFVzZXJTdGF0ZTtcbiAgICAgICAgICAgIGlmIChtZW1iZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGxldCBlcnJvcl9tZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0VSUk9SJyxcbiAgICAgICAgICAgICAgICAgICAgaHRtbDogVC50cmFuc2xhdGUoXCJlcnJvcnMudXNlcl9ub3Rfc2V0XCIpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChzaG93TWVzc2FnZShlcnJvcl9tZXNzYWdlLCBpbml0TG9nT3V0KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIHVzZXIgZ3JvdXBzICggaWYgZGVmaW5lZCApXG4gICAgICAgICAgICBpZiAoQWxsb3dlZFVzZXJHcm91cHMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGFsbG93ZWRHcm91cHMgPSBtZW1iZXIuZ3JvdXBzLmZpbHRlcigoZ3JvdXAsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWxsb3dlZFVzZXJHcm91cHMuaW5jbHVkZXMoZ3JvdXAuY29kZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYWxsb3dlZEdyb3Vwcy5sZW5ndGggPT09IDApIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JfbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnRVJST1InLFxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogVC50cmFuc2xhdGUoXCJlcnJvcnMudXNlcl9ub3RfYXV0aHpcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goc2hvd01lc3NhZ2UoZXJyb3JfbWVzc2FnZSwgaW5pdExvZ091dCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihoaXN0b3J5ICE9IG51bGwgJiYgYmFja1VybCAhPSBudWxsKVxuICAgICAgICAgICAgICAgIGhpc3RvcnkucHVzaChiYWNrVXJsKTtcbiAgICAgICAgfVxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVXNlckluZm8gPSAodXBkYXRlZE1lbWJlcikgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGxldCB7bG9nZ2VkVXNlclN0YXRlfSA9IGdldFN0YXRlKCk7XG4gICAgbGV0IHttZW1iZXJ9ID0gbG9nZ2VkVXNlclN0YXRlO1xuICAgIGlmKG1lbWJlciA9PSBudWxsKXtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJNZW1iZXIgaXMgbm90IHNldC5cIik7XG4gICAgfVxuICAgIGlmKHVwZGF0ZWRNZW1iZXIuaWQgIT0gbWVtYmVyLmlkKXtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJNZW1iZXIgaXMgbm90IHRoZSBzYW1lLlwiKTtcbiAgICB9XG4gICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVUERBVEVfVVNFUl9JTkZPLFxuICAgICAgICBwYXlsb2FkOiB7Li4udXBkYXRlZE1lbWJlcn1cbiAgICB9KTtcblxufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlU2Vzc2lvblN0YXRlU3RhdHVzID0gKG5ld1N0YXR1cykgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVBEQVRFX1NFU1NJT05fU1RBVEVfU1RBVFVTLFxuICAgICAgICBwYXlsb2FkOiB7c2Vzc2lvblN0YXRlU3RhdHVzOiBuZXdTdGF0dXN9XG4gICAgfSk7XG59IiwiaW1wb3J0IHtcbiAgICBiYXNlNjRVUkxFbmNvZGUsXG4gICAgZ2V0QXV0aENhbGxiYWNrLFxuICAgIGdldEN1cnJlbnRMb2NhdGlvbixcbiAgICBnZXRDdXJyZW50UGF0aE5hbWUsXG4gICAgZ2V0RnJvbUxvY2FsU3RvcmFnZSxcbiAgICByZW1vdmVGcm9tTG9jYWxTdG9yYWdlLFxuICAgIGdldE9yaWdpbixcbiAgICBwdXRPbkxvY2FsU3RvcmFnZSxcbiAgICByZXRyeVByb21pc2UsXG4gICAgc2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUsXG4gICAgc2hhMjU2XG59IGZyb20gXCIuLi8uLi91dGlscy9tZXRob2RzXCI7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICdzdXBlcmFnZW50JztcbmltcG9ydCB7cmFuZG9tQnl0ZXN9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBMb2NrIGZyb20gJ2Jyb3dzZXItdGFicy1sb2NrJztcbmxldCBodHRwID0gcmVxdWVzdDtcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmNvbnN0IGxvY2sgPSBuZXcgTG9jaygpO1xuXG5jb25zdCBHRVRfVE9LRU5fU0lMRU5UTFlfTE9DS19LRVkgPSAnb3BlbnN0YWNrdWljb3JlLmxvY2suZ2V0VG9rZW5TaWxlbnRseSc7XG5jb25zdCBOT05DRV9MRU4gPSAxNjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfVE9LRU5fU0tFV19USU1FID0gMjA7XG5leHBvcnQgY29uc3QgUkVTUE9OU0VfVFlQRV9JTVBMSUNJVCA9IFwidG9rZW4gaWRfdG9rZW5cIjtcbmV4cG9ydCBjb25zdCBSRVNQT05TRV9UWVBFX0NPREUgPSAnY29kZSc7XG5jb25zdCBBVVRIX0lORk8gPSAnYXV0aEluZm8nO1xuY29uc3QgTk9OQ0UgPSAnbm9uY2UnO1xuY29uc3QgUEtDRSA9ICdwa2NlJztcblxuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmltcG9ydCBJZFRva2VuVmVyaWZpZXIgZnJvbSBcImlkdG9rZW4tdmVyaWZpZXJcIjtcbmltcG9ydCB7U0VUX0xPR0dFRF9VU0VSfSBmcm9tIFwiLi9hY3Rpb25zXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRBdXRoVXJsID0gKGJhY2tVcmwgPSBudWxsLCBwcm9tcHQgPSBudWxsLCB0b2tlbklkSGludCA9IG51bGwsIHByb3ZpZGVyID0gbnVsbCkgPT4ge1xuXG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgcmVkaXJlY3RVcmkgPSBnZXRBdXRoQ2FsbGJhY2soKTtcbiAgICBsZXQgYmFzZVVybCA9IGdldE9BdXRoMklEUEJhc2VVcmwoKTtcbiAgICBsZXQgc2NvcGVzID0gZ2V0T0F1dGgyU2NvcGVzKCk7XG4gICAgbGV0IGZsb3cgPSBnZXRPQXV0aDJGbG93KCk7XG5cbiAgICBpZiAoYmFja1VybCAhPSBudWxsKVxuICAgICAgICByZWRpcmVjdFVyaSArPSBgP0JhY2tVcmw9JHtlbmNvZGVVUkkoYmFja1VybCl9YDtcblxuICAgIGxldCBub25jZSA9IGNyZWF0ZU5vbmNlKE5PTkNFX0xFTik7XG5cbiAgICAvLyBzdG9yZSBub25jZSB0byBjaGVjayBpdCBsYXRlclxuICAgIHB1dE9uTG9jYWxTdG9yYWdlKE5PTkNFLCBub25jZSk7XG4gICAgbGV0IHVybCA9IFVSSShgJHtiYXNlVXJsfS9vYXV0aDIvYXV0aGApO1xuXG4gICAgbGV0IHF1ZXJ5ID0ge1xuICAgICAgICBcInJlc3BvbnNlX3R5cGVcIjogZW5jb2RlVVJJKGZsb3cpLFxuICAgICAgICBcInNjb3BlXCI6IGVuY29kZVVSSShzY29wZXMpLFxuICAgICAgICBcIm5vbmNlXCI6IG5vbmNlLFxuICAgICAgICBcInJlc3BvbnNlX21vZGVcIiA6ICdmcmFnbWVudCcsXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwicmVkaXJlY3RfdXJpXCI6IGVuY29kZVVSSShyZWRpcmVjdFVyaSlcbiAgICB9O1xuXG4gICAgaWYoZmxvdyA9PT0gUkVTUE9OU0VfVFlQRV9DT0RFKXtcbiAgICAgICAgY29uc3QgcGtjZSA9IGNyZWF0ZVBLQ0VDb2RlcygpXG4gICAgICAgIHB1dE9uTG9jYWxTdG9yYWdlKFBLQ0UsIEpTT04uc3RyaW5naWZ5KHBrY2UpKTtcbiAgICAgICAgcXVlcnlbJ2NvZGVfY2hhbGxlbmdlJ10gPSBwa2NlLmNvZGVDaGFsbGVuZ2U7XG4gICAgICAgIHF1ZXJ5Wydjb2RlX2NoYWxsZW5nZV9tZXRob2QnXSA9ICdTMjU2JztcbiAgICAgICAgcXVlcnlbJ2FwcHJvdmFsX3Byb21wdCddID0gJ2ZvcmNlJztcbiAgICB9XG5cbiAgICBpZiAocHJvbXB0KSB7XG4gICAgICAgIHF1ZXJ5Wydwcm9tcHQnXSA9IHByb21wdDtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5JZEhpbnQpIHtcbiAgICAgICAgcXVlcnlbJ2lkX3Rva2VuX2hpbnQnXSA9IHRva2VuSWRIaW50O1xuICAgIH1cblxuICAgIGlmIChwcm92aWRlcikge1xuICAgICAgICBxdWVyeVsncHJvdmlkZXInXSA9IHByb3ZpZGVyO1xuICAgIH1cblxuICAgIHVybCA9IHVybC5xdWVyeShxdWVyeSk7XG4gICAgLy9jb25zb2xlLmxvZyhgZ2V0QXV0aFVybCAke3VybC50b1N0cmluZygpfWApO1xuICAgIHJldHVybiB1cmw7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2dvdXRVcmwgPSAoaWRUb2tlbikgPT4ge1xuICAgIGxldCBiYXNlVXJsID0gZ2V0T0F1dGgySURQQmFzZVVybCgpO1xuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG4gICAgbGV0IHVybCA9IFVSSShgJHtiYXNlVXJsfS9vYXV0aDIvZW5kLXNlc3Npb25gKTtcbiAgICBsZXQgc3RhdGUgPSBjcmVhdGVOb25jZShOT05DRV9MRU4pO1xuICAgIGxldCBwb3N0TG9nT3V0VXJpID0gZ2V0T3JpZ2luKCkgKyAnL2F1dGgvbG9nb3V0JztcbiAgICAvLyBzdG9yZSBub25jZSB0byBjaGVjayBpdCBsYXRlclxuICAgIHB1dE9uTG9jYWxTdG9yYWdlKCdwb3N0X2xvZ291dF9zdGF0ZScsIHN0YXRlKTtcbiAgICAvKipcbiAgICAgKiBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgc2hvdWxkIGJlIGxpc3RlZCBvbiBvYXV0aDIgY2xpZW50IHNldHRpbmdzXG4gICAgICogb24gSURQXG4gICAgICogXCJTZWN1cml0eSBTZXR0aW5nc1wiIFRhYiAtPiBMb2dvdXQgT3B0aW9ucyAtPiBQb3N0IExvZ291dCBVcmlzXG4gICAgICovXG4gICAgcmV0dXJuIHVybC5xdWVyeSh7XG4gICAgICAgIFwiaWRfdG9rZW5faGludFwiOiBpZFRva2VuLFxuICAgICAgICBcInBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaVwiOiBlbmNvZGVVUkkocG9zdExvZ091dFVyaSksXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwic3RhdGVcIjogc3RhdGUsXG4gICAgfSk7XG59XG5cbmNvbnN0IGNyZWF0ZU5vbmNlID0gKGxlbikgPT4ge1xuICAgIGxldCBwb3NzaWJsZSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlcIjtcbiAgICBsZXQgbm9uY2UgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIG5vbmNlICs9IHBvc3NpYmxlLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBwb3NzaWJsZS5sZW5ndGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vbmNlO1xufVxuXG5leHBvcnQgY29uc3QgZG9Mb2dpbiA9IChiYWNrVXJsID0gbnVsbCwgcHJvdmlkZXIgPSBudWxsLCBwcm9tcHQgPSAnY29uc2VudCcpID0+IHtcbiAgICBsZXQgdXJsID0gZ2V0QXV0aFVybChiYWNrVXJsLCBwcm9tcHQgLG51bGwsIHByb3ZpZGVyKTtcbiAgICBsZXQgbG9jYXRpb24gPSBnZXRDdXJyZW50TG9jYXRpb24oKVxuICAgIGxvY2F0aW9uLnJlcGxhY2UodXJsLnRvU3RyaW5nKCkpO1xufVxuXG5leHBvcnQgY29uc3QgZG9Mb2dpbkJhc2ljTG9naW4gPSAoYmFja1VybCA9IG51bGwpID0+IHtcbiAgICBkb0xvZ2luKGJhY2tVcmwsIG51bGwsIG51bGwpO1xufVxuXG5jb25zdCBjcmVhdGVQS0NFQ29kZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgY29kZVZlcmlmaWVyID0gYmFzZTY0VVJMRW5jb2RlKHJhbmRvbUJ5dGVzKDY0KSlcbiAgICBjb25zdCBjb2RlQ2hhbGxlbmdlID0gYmFzZTY0VVJMRW5jb2RlKHNoYTI1NihCdWZmZXIuZnJvbShjb2RlVmVyaWZpZXIpKSlcbiAgICBjb25zdCBjcmVhdGVkQXQgPSBuZXcgRGF0ZSgpXG4gICAgY29uc3QgY29kZVBhaXIgPSB7XG4gICAgICAgIGNvZGVWZXJpZmllcixcbiAgICAgICAgY29kZUNoYWxsZW5nZSxcbiAgICAgICAgY3JlYXRlZEF0XG4gICAgfVxuICAgIHJldHVybiBjb2RlUGFpclxufVxuXG5leHBvcnQgY29uc3QgZW1pdEFjY2Vzc1Rva2VuID0gYXN5bmMgKGNvZGUsIGJhY2tVcmwgPSBudWxsKSA9PiB7XG5cbiAgICBsZXQgYmFzZVVybCA9IGdldE9BdXRoMklEUEJhc2VVcmwoKTtcbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuICAgIGxldCByZWRpcmVjdFVyaSA9IGdldEF1dGhDYWxsYmFjaygpO1xuICAgIGxldCBwa2NlID0gSlNPTi5wYXJzZShnZXRGcm9tTG9jYWxTdG9yYWdlKFBLQ0UsIHRydWUpKTtcblxuICAgIGlmIChiYWNrVXJsICE9IG51bGwpXG4gICAgICAgIHJlZGlyZWN0VXJpICs9IGA/QmFja1VybD0ke2VuY29kZVVSSShiYWNrVXJsKX1gO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgJ2NvZGUnIDogIGNvZGUsXG4gICAgICAgICdncmFudF90eXBlJyA6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgICAnY29kZV92ZXJpZmllcicgOiBwa2NlLmNvZGVWZXJpZmllcixcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJyZWRpcmVjdF91cmlcIjogZW5jb2RlVVJJKHJlZGlyZWN0VXJpKVxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgICAvL2NvbnN0IHJlc3BvbnNlID0gYXdhaXQgaHR0cC5wb3N0KGAke2Jhc2VVcmx9L29hdXRoMi90b2tlbmAsIHBheWxvYWQpO1xuICAgICAgICAvL2NvbnN0IHtib2R5OiB7YWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCBpZF90b2tlbiwgZXhwaXJlc19pbn19ID0gcmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFzZVVybH0vb2F1dGgyL3Rva2VuYCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZXF1ZXN0IGZhaWxlZDonLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGxldCB7YWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCBpZF90b2tlbiwgZXhwaXJlc19pbiwgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9ufSA9IGpzb247XG4gICAgICAgIHJldHVybiB7YWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCBpZF90b2tlbiwgZXhwaXJlc19pbiwgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9ufVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhckFjY2Vzc1Rva2VuID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChcbiAgICAgICAgYXdhaXQgcmV0cnlQcm9taXNlKFxuICAgICAgICAgICAgKCkgPT4gbG9jay5hY3F1aXJlTG9jayhHRVRfVE9LRU5fU0lMRU5UTFlfTE9DS19LRVksIDUwMDApLFxuICAgICAgICAgICAgMTBcbiAgICAgICAgKVxuICAgICkge1xuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICBsZXQgYXV0aEluZm8gPSAgZ2V0QXV0aEluZm8oKTtcblxuICAgICAgICAgICAgaWYoICFhdXRoSW5mbyApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk1pc3NpbmcgQXV0aCBpbmZvLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHsgYWNjZXNzVG9rZW4sIGV4cGlyZXNJbiwgYWNjZXNzVG9rZW5VcGRhdGVkQXQsIHJlZnJlc2hUb2tlbiB9ID0gYXV0aEluZm87XG5cbiAgICAgICAgICAgIHN0b3JlQXV0aEluZm8obnVsbCwgMCAsIHJlZnJlc2hUb2tlbiApXG5cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGxvY2sucmVsZWFzZUxvY2soR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldEFjY2Vzc1Rva2VuID0gYXN5bmMgKCkgPT4ge1xuXG4gICAgaWYgKFxuICAgICAgICBhd2FpdCByZXRyeVByb21pc2UoXG4gICAgICAgICAgICAoKSA9PiBsb2NrLmFjcXVpcmVMb2NrKEdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSwgNTAwMCksXG4gICAgICAgICAgICAxMFxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgIGxldCBhdXRoSW5mbyA9ICBnZXRBdXRoSW5mbygpO1xuXG4gICAgICAgICAgICBpZiggIWF1dGhJbmZvICkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiTWlzc2luZyBBdXRoIGluZm8uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgeyBhY2Nlc3NUb2tlbiwgZXhwaXJlc0luLCBhY2Nlc3NUb2tlblVwZGF0ZWRBdCwgcmVmcmVzaFRva2VuIH0gPSBhdXRoSW5mbztcbiAgICAgICAgICAgIGxldCBmbG93ID0gZ2V0T0F1dGgyRmxvdygpO1xuICAgICAgICAgICAgLy8gY2hlY2sgbGlmZSB0aW1lXG4gICAgICAgICAgICBsZXQgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICAgICAgICBsZXQgdGltZUVsYXBzZWRTZWNzID0gKG5vdyAtIGFjY2Vzc1Rva2VuVXBkYXRlZEF0KTtcbiAgICAgICAgICAgIGV4cGlyZXNJbiA9IChleHBpcmVzSW4gLSBBQ0NFU1NfVE9LRU5fU0tFV19USU1FKTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYGdldEFjY2Vzc1Rva2VuIG5vdyAke25vd30gYWNjZXNzVG9rZW5VcGRhdGVkQXQgJHthY2Nlc3NUb2tlblVwZGF0ZWRBdH0gdGltZUVsYXBzZWRTZWNzICR7dGltZUVsYXBzZWRTZWNzfSBleHBpcmVzSW4gJHtleHBpcmVzSW59LmApO1xuXG4gICAgICAgICAgICBpZiAodGltZUVsYXBzZWRTZWNzID4gZXhwaXJlc0luIHx8IGFjY2Vzc1Rva2VuID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gYWNjZXNzIHRva2VuIGV4cGlyZWRgKVxuICAgICAgICAgICAgICAgIGlmKGZsb3cgPT09IFJFU1BPTlNFX1RZUEVfQ09ERSAmJiB1c2VPQXV0aDJSZWZyZXNoVG9rZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdnZXRBY2Nlc3NUb2tlbiBnZXR0aW5nIG5ldyBhY2Nlc3MgdG9rZW4sIGFjY2VzcyB0b2tlbiBnb3Qgdm9pZCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJBdXRoSW5mbygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJtaXNzaW5nIFJlZnJlc2ggVG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgcmVmcmVzaEFjY2Vzc1Rva2VuKHJlZnJlc2hUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGxldCB7YWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VufSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBnZXRBY2Nlc3NUb2tlbiBhY2Nlc3NfdG9rZW4gJHthY2Nlc3NfdG9rZW59IGV4cGlyZXNfaW4gJHtleHBpcmVzX2lufSByZWZyZXNoX3Rva2VuICR7cmVmcmVzaF90b2tlbn1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZyZXNoX3Rva2VuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbiA9IG51bGw7IC8vIG5vdCB1c2luZyByb3RhdGUgcG9saWN5XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RvcmVBdXRoSW5mbyhhY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBnZXRBY2Nlc3NUb2tlbiBhY2Nlc3NfdG9rZW4gJHthY2Nlc3NfdG9rZW59IFtORVddYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2Nlc3NfdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsZWFyQXV0aEluZm8oKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkFjY2VzcyBUb2tlbiBFeHBpcmVkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYGdldEFjY2Vzc1Rva2VuIGFjY2Vzc190b2tlbiAke2FjY2Vzc1Rva2VufSBbQ0FDSEVEXWApO1xuICAgICAgICAgICAgcmV0dXJuIGFjY2Vzc1Rva2VuO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgYXdhaXQgbG9jay5yZWxlYXNlTG9jayhHRVRfVE9LRU5fU0lMRU5UTFlfTE9DS19LRVkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IEVycm9yKFwiTG9jayBhY3F1aXJlIGVycm9yLlwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlZnJlc2hBY2Nlc3NUb2tlbiA9IGFzeW5jIChyZWZyZXNoX3Rva2VuKSA9PiB7XG5cbiAgICBsZXQgYmFzZVVybCA9IGdldE9BdXRoMklEUEJhc2VVcmwoKTtcbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgJ2dyYW50X3R5cGUnIDogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcInJlZnJlc2hfdG9rZW5cIjogcmVmcmVzaF90b2tlblxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L29hdXRoMi90b2tlbmAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApe1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TG9jYXRpb24gPSBnZXRDdXJyZW50UGF0aE5hbWUoKTtcbiAgICAgICAgICAgICAgICBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgJHtyZXNwb25zZS5zdGF0dXN9IC0gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgUmVxdWVzdCBmYWlsZWQ6ICAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGxldCB7YWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCBleHBpcmVzX2lufSA9IGpzb247XG4gICAgICAgIHJldHVybiB7YWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCBleHBpcmVzX2lufVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3Qgc3RvcmVBdXRoSW5mbyA9IChhY2Nlc3NUb2tlbiwgZXhwaXJlc0luLCByZWZyZXNoVG9rZW4gPSBudWxsLCBpZFRva2VuID0gbnVsbCkgPT4ge1xuXG4gICAgbGV0IGZvcm1lckF1dGhJbmZvID0gZ2V0QXV0aEluZm8oKTtcblxuICAgIGxldCBhdXRoSW5mbyA9IHtcbiAgICAgICAgYWNjZXNzVG9rZW4gOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgZXhwaXJlc0luOiBleHBpcmVzSW4sXG4gICAgICAgIGFjY2Vzc1Rva2VuVXBkYXRlZEF0IDogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXG4gICAgfTtcblxuICAgIGlmKHJlZnJlc2hUb2tlbiA9PT0gbnVsbCAmJiBmb3JtZXJBdXRoSW5mbyl7XG4gICAgICAgIHJlZnJlc2hUb2tlbiA9IGZvcm1lckF1dGhJbmZvLnJlZnJlc2hUb2tlbjtcbiAgICB9XG5cbiAgICBpZihpZFRva2VuID09PSBudWxsICYmIGZvcm1lckF1dGhJbmZvKXtcbiAgICAgICAgaWRUb2tlbiA9IGZvcm1lckF1dGhJbmZvLmlkVG9rZW47XG4gICAgfVxuXG4gICAgaWYocmVmcmVzaFRva2VuKXtcbiAgICAgICAgYXV0aEluZm9bJ3JlZnJlc2hUb2tlbiddID0gcmVmcmVzaFRva2VuO1xuICAgIH1cblxuICAgIGlmKGlkVG9rZW4pe1xuICAgICAgICBhdXRoSW5mb1snaWRUb2tlbiddID0gaWRUb2tlbjtcbiAgICB9XG5cbiAgICBwdXRPbkxvY2FsU3RvcmFnZShBVVRIX0lORk8sIEpTT04uc3RyaW5naWZ5KGF1dGhJbmZvKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRBdXRoSW5mbyA9ICgpID0+IHtcbiAgICBsZXQgcmVzID0gZ2V0RnJvbUxvY2FsU3RvcmFnZShBVVRIX0lORk8sIGZhbHNlKVxuICAgIGlmKHJlcyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFyQXV0aEluZm8gPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICByZW1vdmVGcm9tTG9jYWxTdG9yYWdlKEFVVEhfSU5GTyk7XG4gICAgICAgIHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UoTk9OQ0UpO1xuICAgICAgICByZW1vdmVGcm9tTG9jYWxTdG9yYWdlKFBLQ0UpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldElkVG9rZW4gPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc3QgYXV0aEluZm8gPSBnZXRBdXRoSW5mbygpO1xuICAgICAgICBpZihhdXRoSW5mbyl7XG4gICAgICAgICAgICByZXR1cm4gYXV0aEluZm8uaWRUb2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T0F1dGgyQ2xpZW50SWQgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5PQVVUSDJfQ0xJRU5UX0lEO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aDJGbG93ID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuT0FVVEgyX0ZMT1cgfHwgXCJ0b2tlbiBpZF90b2tlblwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJ0b2tlbiBpZF90b2tlblwiO1xufVxuXG5leHBvcnQgY29uc3QgdXNlT0F1dGgyUmVmcmVzaFRva2VuID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgQm9vbGVhbih3aW5kb3cuT0FVVEgyX1VTRV9SRUZSRVNIX1RPS0VOIHx8IHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldE9BdXRoMklEUEJhc2VVcmwgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5JRFBfQkFTRV9VUkw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9BdXRoMlNjb3BlcyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LlNDT1BFUztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgaW5pdExvZ091dCA9ICgpID0+IHtcbiAgICBsZXQgbG9jYXRpb24gPSBnZXRDdXJyZW50TG9jYXRpb24oKTtcbiAgICBsb2NhdGlvbi5yZXBsYWNlKGdldExvZ291dFVybChnZXRJZFRva2VuKCkpLnRvU3RyaW5nKCkpO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVJZFRva2VuID0gKGlkVG9rZW4sIGlzc3VlciwgYXVkaWVuY2UpID0+IHtcblxuICAgIGxldCB2ZXJpZmllciA9IG5ldyBJZFRva2VuVmVyaWZpZXIoe1xuICAgICAgICBpc3N1ZXI6IGlzc3VlcixcbiAgICAgICAgYXVkaWVuY2U6IGF1ZGllbmNlXG4gICAgfSk7XG5cbiAgICBsZXQgc3RvcmVkTm9uY2UgPSBnZXRGcm9tTG9jYWxTdG9yYWdlKE5PTkNFLCB0cnVlKTtcbiAgICBsZXQgand0ID0gdmVyaWZpZXIuZGVjb2RlKGlkVG9rZW4pO1xuICAgIGxldCBhbGcgPSBqd3QuaGVhZGVyLmFsZztcbiAgICBsZXQga2lkID0gand0LmhlYWRlci5raWQ7XG4gICAgbGV0IGF1ZCA9IGp3dC5wYXlsb2FkLmF1ZDtcbiAgICBsZXQgaXNzID0gand0LnBheWxvYWQuaXNzO1xuICAgIGxldCBleHAgPSBqd3QucGF5bG9hZC5leHA7XG4gICAgbGV0IG5iZiA9IGp3dC5wYXlsb2FkLm5iZjtcbiAgICBsZXQgdG5vbmNlID0gand0LnBheWxvYWQubm9uY2UgfHwgbnVsbDtcblxuICAgIHJldHVybiB0bm9uY2UgPT0gc3RvcmVkTm9uY2UgJiYgYXVkID09IGF1ZGllbmNlICYmIGlzcyA9PSBpc3N1ZXI7XG59XG5cbmV4cG9ydCBjb25zdCBwYXNzd29yZGxlc3NTdGFydCA9IChwYXJhbXMpID0+IHtcblxuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG4gICAgbGV0IHNjb3BlcyA9IGdldE9BdXRoMlNjb3BlcygpO1xuICAgIGxldCBub25jZSA9IGNyZWF0ZU5vbmNlKE5PTkNFX0xFTik7XG4gICAgLy8gc3RvcmUgbm9uY2UgdG8gY2hlY2sgaXQgbGF0ZXJcbiAgICBwdXRPbkxvY2FsU3RvcmFnZShOT05DRSwgbm9uY2UpO1xuICAgIGxldCBiYXNlVXJsID0gZ2V0T0F1dGgySURQQmFzZVVybCgpO1xuICAgIGxldCB1cmwgPSBVUkkoYCR7YmFzZVVybH0vb2F1dGgyL2F1dGhgKTtcblxuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICBcInJlc3BvbnNlX3R5cGVcIjogXCJvdHBcIixcbiAgICAgICAgXCJzY29wZVwiOiBlbmNvZGVVUkkoc2NvcGVzKSxcbiAgICAgICAgXCJub25jZVwiOiBub25jZSxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJjb25uZWN0aW9uXCI6IHBhcmFtcy5jb25uZWN0aW9uIHx8IFwiZW1haWxcIixcbiAgICAgICAgXCJzZW5kXCI6IHBhcmFtcy5zZW5kIHx8IFwiY29kZVwiLFxuICAgIH07XG5cbiAgICBpZihwYXJhbXMuaGFzT3duUHJvcGVydHkoJ2VtYWlsJykpe1xuICAgICAgICBwYXlsb2FkW1wiZW1haWxcIl0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zLmVtYWlsKTtcbiAgICB9XG5cbiAgICBpZihwYXJhbXMuaGFzT3duUHJvcGVydHkoJ3Bob25lX251bWJlcicpKXtcbiAgICAgICAgcGF5bG9hZFtcInBob25lX251bWJlclwiXSA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXMucGhvbmVfbnVtYmVyKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxID0gaHR0cC5wb3N0KHVybC50b1N0cmluZygpKTtcblxuICAgIHJldHVybiByZXEuc2VuZChwYXlsb2FkKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgbGV0IGpzb24gPSByZXMuYm9keTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7cmVzcG9uc2U6anNvbn0pO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfSk7XG5cbn1cblxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkbGVzc0xvZ2luID0gKHBhcmFtcykgPT4gKGRpc3BhdGNoKSA9PiB7XG5cbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuICAgIGxldCBzY29wZXMgPSBnZXRPQXV0aDJTY29wZXMoKTtcbiAgICBsZXQgYmFzZVVybCA9IGdldE9BdXRoMklEUEJhc2VVcmwoKTtcbiAgICBsZXQgdXJsID0gVVJJKGAke2Jhc2VVcmx9L29hdXRoMi90b2tlbmApO1xuXG4gICAgaWYoIXBhcmFtcy5oYXNPd25Qcm9wZXJ0eShcIm90cFwiKSl7XG4gICAgICAgIHRocm93IEVycm9yKFwib3RwIHBhcmFtIGlzIG1hbmRhdG9yeS5cIik7XG4gICAgfVxuXG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICAgIFwiZ3JhbnRfdHlwZVwiOiBcInBhc3N3b3JkbGVzc1wiLFxuICAgICAgICBcImNvbm5lY3Rpb25cIjogcGFyYW1zLmNvbm5lY3Rpb24gfHwgXCJlbWFpbFwiLFxuICAgICAgICBcInNjb3BlXCI6IGVuY29kZVVSSShzY29wZXMpLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcIm90cFwiOiBwYXJhbXMub3RwXG4gICAgfTtcblxuICAgIGlmKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnZW1haWwnKSl7XG4gICAgICAgIHBheWxvYWRbXCJlbWFpbFwiXSA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXMuZW1haWwpO1xuICAgIH1cblxuICAgIGlmKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgncGhvbmVfbnVtYmVyJykpe1xuICAgICAgICBwYXlsb2FkW1wicGhvbmVfbnVtYmVyXCJdID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5waG9uZV9udW1iZXIpO1xuICAgIH1cblxuICAgIGxldCByZXEgPSBodHRwLnBvc3QodXJsLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHJlcS5zZW5kKHBheWxvYWQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gbm93IHdlIGdvdCB0b2tlblxuICAgICAgICAgICAgbGV0IGpzb24gPSByZXMuYm9keTtcbiAgICAgICAgICAgIGxldCB7YWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuLCBpZF90b2tlbn0gPSBqc29uO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlZnJlc2hfdG9rZW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbiA9IG51bGw7IC8vIG5vdCB1c2luZyByb3RhdGUgcG9saWN5XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaWRfdG9rZW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWRfdG9rZW4gPSBudWxsOyAvLyBub3QgdXNpbmcgcm90YXRlIHBvbGljeVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB2ZXJpZnkgaWQgdG9rZW5cblxuICAgICAgICAgICAgaWYgKGlkX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUlkVG9rZW4oaWRfdG9rZW4sIGJhc2VVcmwsIG9hdXRoMkNsaWVudElkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImlkIHRva2VuIGlzIG5vdCB2YWxpZC5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdG9yZUF1dGhJbmZvKGFjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW4pO1xuXG4gICAgICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNFVF9MT0dHRURfVVNFUixcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDoge3Nlc3Npb25TdGF0ZTogbnVsbH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7cmVzcG9uc2U6IGpzb259KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9KTtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIwIE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xuXG5pbXBvcnQge1xuICAgIGRvTG9nb3V0LFxuICAgIFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQsXG4gICAgU0VTU0lPTl9TVEFURV9TVEFUVVNfRVJST1IsXG4gICAgU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VELFxuICAgIHVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cyxcbiAgICBvblVzZXJBdXRoXG59IGZyb20gXCIuLi9hY3Rpb25zXCI7XG5cbmltcG9ydCB7XG4gICAgZ2V0QXV0aFVybCxcbiAgICBpbml0TG9nT3V0XG59IGZyb20gXCIuLi9tZXRob2RzXCI7XG5cbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCJcbi8vIGluIG1pbnV0ZXNcbmNvbnN0IENIRUNLX1NFU1NJT05fSU5URVJWQUwgPSAoMTAwMCAqIDYwKSAqIDMwO1xuXG5jbGFzcyBPUFNlc3Npb25DaGVja2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb25zdHJ1Y3RvclwiKTtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnN0YXRlID17XG4gICAgICAgICAgICBvcEZyYW1lX3NyYzogXCJcIixcbiAgICAgICAgICAgIHJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgOiBcIlwiXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWNlaXZlTWVzc2FnZSA9IHRoaXMucmVjZWl2ZU1lc3NhZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZCA9IHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXRUaW1lciA9IHRoaXMuc2V0VGltZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5jaGVja1Nlc3Npb24gPSB0aGlzLmNoZWNrU2Vzc2lvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uU2V0dXBDaGVja1Nlc3Npb25SUCA9IHRoaXMub25TZXR1cENoZWNrU2Vzc2lvblJQLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkID0gdGhpcy5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLm9wRnJhbWUgPSBudWxsO1xuICAgICAgICB0aGlzLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZSA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5zZXRPUEZyYW1lUmVmID0gZWxlbWVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wRnJhbWUgPSBlbGVtZW50O1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2V0Q2hlY2tTZXNzaW9uU3RhdGVGcmFtZVJlZiA9IGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWUgPSBlbGVtZW50O1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnRXaWxsVW5tb3VudGApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZCwgZmFsc2UpO1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMucmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBpZighdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIpIHJldHVybjtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudERpZE1vdW50XCIpO1xuICAgICAgICAvLyBhZGQgZXZlbnQgbGlzdGVuZXIgdG8gcmVjZWl2ZSBtZXNzYWdlcyBmcm9tIGlkcCB0aHJvdWdoIE9QIGZyYW1lXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoIHdpbmRvdy5sb2NhdGlvbiAhPT0gd2luZG93LnBhcmVudC5sb2NhdGlvbiApIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50RGlkTW91bnQgcnVubmluZyBpbnNpZGUgaWZyYW1lLCBza2lwcGluZ1wiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzZXQgdXAgb3AgZnJhbWVcbiAgICAgICAgICAgIHRoaXMub25TZXR1cENoZWNrU2Vzc2lvblJQKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQoZXZlbnQpe1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkXCIpO1xuICAgICAgICBsZXQgZnJhbWUgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmKHRoaXMuc3RhdGUucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyYyA9PSBcIlwiKSByZXR1cm47XG5cbiAgICAgICAgLy9jb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIGZyYW1lLnNyYyAke2ZyYW1lLnNyY31gKTtcbiAgICAgICAgLy8gdGhpcyBpcyBjYWxsZWQgYmMgd2Ugc2V0IHRoZSBSUCBmcmFtZSB0byBjaGVjayB0aGUgc2Vzc2lvbiBzdGF0ZSB3aXRoIHByb21wPW5vbmVcbiAgICAgICAgaWYoIWZyYW1lLmNvbnRlbnREb2N1bWVudCl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkICFmcmFtZS5jb250ZW50RG9jdW1lbnQpIGlzIG51bGxcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQsIGZhbHNlKTtcbiAgICAgICAgbGV0IHJlc3VsdFVybCA9IG5ldyBVUkkoZnJhbWUuY29udGVudERvY3VtZW50LlVSTCk7XG4gICAgICAgIC8vIHRlc3QgdGhlIHJlc3VsdCBVcmwxcWFcbiAgICAgICAgY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgLSByZXN1bHRVcmwgXCIgKyByZXN1bHRVcmwpO1xuICAgICAgICBsZXQgcXVlcnkgPSByZXN1bHRVcmwuc2VhcmNoKHRydWUpO1xuICAgICAgICBsZXQgZnJhZ21lbnQgPSBVUkkucGFyc2VRdWVyeShyZXN1bHRVcmwuZnJhZ21lbnQoKSk7XG4gICAgICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgc29tZSBlcnJvciBvbiBxdWVyeSBzdHJpbmcgb3IgZnJhZ21lbnRcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICAgICAgaWYocXVlcnkuaGFzT3duUHJvcGVydHkoXCJlcnJvclwiKSkgZXJyb3IgPSBxdWVyeVsnZXJyb3InXTtcbiAgICAgICAgaWYoZnJhZ21lbnQuaGFzT3duUHJvcGVydHkoXCJlcnJvclwiKSkgZXJyb3IgPSBmcmFnbWVudFsnZXJyb3InXTtcbiAgICAgICAgaWYoZXJyb3Ipe1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgLSBlcnJvciBcIiArIGVycm9yKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIHNlc3Npb24gc3RhdGUgd2l0aCBwcm9tcHQgbm9uZSBmYWlsZWQgZG8gbG9nb3V0O1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIC0gaW5pdGlhdGluZyBsb2dvdXQnKTtcbiAgICAgICAgICAgIGluaXRMb2dPdXQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBubyBlcnJvciB3ZSBzdGlsbCBsb2dnZWQgc28gcmUgaW5pdCB0aGUgY2hlY2tpbmdcbiAgICAgICAgLy8gc2V0IHVwIG9wIGZyYW1lXG4gICAgICAgIC8vY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCB0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyAke3RoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzfWApO1xuICAgICAgICB0aGlzLnByb3BzLnVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cyhTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudERpZFVwZGF0ZVwiKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzICE9PSBwcmV2UHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzKSB7XG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyA9PT0gU0VTU0lPTl9TVEFURV9TVEFUVVNfQ0hBTkdFRCl7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudERpZFVwZGF0ZSBzZXNzaW9uU3RhdGVTdGF0dXMgPT09IGNoYW5nZWRcIik7XG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGdldEF1dGhVcmwobnVsbCwgJ25vbmUnKTtcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3Qtc2Vzc2lvbi0xXzAuaHRtbCNSUGlmcmFtZVxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgZnJhbWUgdG8gaWRwXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjID09IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIG9wRnJhbWVfc3JjIDogXCJcIiwgcnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyYyA6IHVybC50b1N0cmluZygpfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgPT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCl7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudERpZFVwZGF0ZSBzZXNzaW9uU3RhdGVTdGF0dXMgPT09IHVuY2hhbmdlZFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2V0dXBDaGVja1Nlc3Npb25SUCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnByb3BzLnNlc3Npb25TdGF0ZSAhPT0gcHJldlByb3BzLnNlc3Npb25TdGF0ZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50RGlkVXBkYXRlIHVwZGF0ZWQgc2Vzc2lvbiBzdGF0ZSAke3RoaXMucHJvcHMuc2Vzc2lvblN0YXRlfWApO1xuICAgICAgICAgICAgdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrU2Vzc2lvbigpXG4gICAge1xuXG4gICAgICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6Y2hlY2tTZXNzaW9uIG5vdyAke25vdy50b0xvY2FsZVN0cmluZygpfWApO1xuXG4gICAgICAgIGlmKHRoaXMub3BGcmFtZSA9PSBudWxsICl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y2hlY2tTZXNzaW9uIC0gdGhpcy5vcEZyYW1lID09IG51bGwgXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGUgPT0gbnVsbCl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y2hlY2tTZXNzaW9uIC0gdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGUgPT0gbnVsbCBcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLnByb3BzLmNsaWVudElkID09IG51bGwpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiAtIHRoaXMucHJvcHMuY2xpZW50SWQgPT0gbnVsbCBcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGFyZ2V0T3JpZ2luID0gdGhpcy5wcm9wcy5pZHBCYXNlVXJsO1xuICAgICAgICBsZXQgZnJhbWUgPSB0aGlzLm9wRnJhbWUuY29udGVudFdpbmRvdztcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0aGlzLnByb3BzLmNsaWVudElkICsgXCIgXCIgKyB0aGlzLnByb3BzLnNlc3Npb25TdGF0ZTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiAtIG1lc3NhZ2VcIiArIG1lc3NhZ2UpO1xuICAgICAgICAvLyBwb3N0TWVzc2FnZSB0byB0aGUgT1AgaWZyYW1lXG4gICAgICAgIGZyYW1lLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7XG4gICAgfVxuXG4gICAgc2V0VGltZXIoZXZlbnQpXG4gICAge1xuICAgICAgICBsZXQgZnJhbWUgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmKHRoaXMuc3RhdGUub3BGcmFtZV9zcmMgPT0gXCJcIikgcmV0dXJuO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6c2V0VGltZXJcIik7XG5cbiAgICAgICAgaWYoIXRoaXMucHJvcHMuaXNMb2dnZWRVc2VyKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpzZXRUaW1lciAtICF0aGlzLnByb3BzLmlzTG9nZ2VkVXNlclwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzICE9PSBTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQgKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpzZXRUaW1lciAtIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpzZXRUaW1lciBzZXR0aW5nIGludGVydmFsICR7Q0hFQ0tfU0VTU0lPTl9JTlRFUlZBTH1gKTtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5jaGVja1Nlc3Npb24sIENIRUNLX1NFU1NJT05fSU5URVJWQUwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TZXR1cENoZWNrU2Vzc2lvblJQKCl7XG4gICAgICAgIC8vIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1zZXNzaW9uLTFfMC5odG1sI09QaWZyYW1lXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6b25TZXR1cENoZWNrU2Vzc2lvblJQXCIpO1xuICAgICAgICBpZih0aGlzLm9wRnJhbWUgPT0gbnVsbCl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6b25TZXR1cENoZWNrU2Vzc2lvblJQIC0gb3BGcmFtZSBpcyBudWxsXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLnJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHNlc3Npb25DaGVja0VuZHBvaW50ID0gYCR7dGhpcy5wcm9wcy5pZHBCYXNlVXJsfS9vYXV0aDIvY2hlY2stc2Vzc2lvbmA7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpvblNldHVwQ2hlY2tTZXNzaW9uUlAgLSBzZXNzaW9uQ2hlY2tFbmRwb2ludCBcIisgc2Vzc2lvbkNoZWNrRW5kcG9pbnQpO1xuICAgICAgICBpZih0aGlzLnN0YXRlLm9wRnJhbWVfc3JjID09IFwiXCIpXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBvcEZyYW1lX3NyYyA6IHNlc3Npb25DaGVja0VuZHBvaW50LCBycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjIDogXCJcIn0pO1xuICAgIH1cblxuICAgIHJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkKGUpe1xuICAgICAgICBpZiAodHlwZW9mIGUuZGF0YSA9PT0gJ3N0cmluZycgfHwgZS5kYXRhIGluc3RhbmNlb2YgU3RyaW5nKXtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IGF1dGhJbmZvID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmIChhdXRoSW5mby5oYXNPd25Qcm9wZXJ0eSgnYWN0aW9uJykgJiYgYXV0aEluZm8uYWN0aW9uID09ICdTRVRfQVVUSF9JTkZPX1NJTEVOVExZJykge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblVzZXJBdXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aEluZm8uYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aEluZm8uaWRfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoSW5mby5zZXNzaW9uX3N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aEluZm8uZXhwaXJlc19pbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLmhhc093blByb3BlcnR5KFwicmVmcmVzaF90b2tlblwiKSA/IGF1dGhJbmZvLnJlZnJlc2hfdG9rZW4gOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVjZWl2ZU1lc3NhZ2UoZSlcbiAgICB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIGUub3JpZ2luIFwiICsgZS5vcmlnaW4pO1xuICAgICAgICBpZiAoZS5vcmlnaW4gIT09IHRoaXMucHJvcHMuaWRwQmFzZVVybCApIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIGUub3JpZ2luICE9PSB0aGlzLnByb3BzLmlkcEJhc2VVcmxcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXR1cyA9IGUuZGF0YTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gc3RhdHVzIFwiKyBzdGF0dXMpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSB0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyBcIisgdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSB0aGlzLnByb3BzLmlzTG9nZ2VkVXNlciBcIisgdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIpO1xuICAgICAgICBpZih0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyA9PT0gU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEICYmIHRoaXMucHJvcHMuaXNMb2dnZWRVc2VyKXtcbiAgICAgICAgICAgIGlmKHN0YXR1cyA9PT0gU0VTU0lPTl9TVEFURV9TVEFUVVNfQ0hBTkdFRCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSBzZXNzaW9uIHN0YXRlIGhhcyBjaGFuZ2VkIG9uIE9QXCIpO1xuICAgICAgICAgICAgICAgIC8vIHNpZ25hbCBzZXNzaW9uIHN0YXJ0IGNoZWNrXG4gICAgICAgICAgICAgICAgLy8ga2lsbCB0aW1lclxuXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFdoZW4gdGhlIFJQIGRldGVjdHMgYSBzZXNzaW9uIHN0YXRlIGNoYW5nZSwgaXQgU0hPVUxEIGZpcnN0IHRyeSBhIHByb21wdD1ub25lIHJlcXVlc3Qgd2l0aGluIGFuXG4gICAgICAgICAgICAgICAgICogaWZyYW1lIHRvIG9idGFpbiBhIG5ldyBJRCBUb2tlbiBhbmQgc2Vzc2lvbiBzdGF0ZSwgc2VuZGluZyB0aGUgb2xkIElEIFRva2VuIGFzIHRoZSBpZF90b2tlbl9oaW50LlxuICAgICAgICAgICAgICAgICAqIElmIHRoZSBSUCByZWNlaXZlcyBhbiBJRCB0b2tlbiBmb3IgdGhlIHNhbWUgRW5kLVVzZXIsIGl0IFNIT1VMRCBzaW1wbHkgdXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGVcbiAgICAgICAgICAgICAgICAgKiBzZXNzaW9uIHN0YXRlLiBJZiBpdCBkb2VzIG5vdCByZWNlaXZlIGFuIElEIHRva2VuIG9yIHJlY2VpdmVzIGFuIElEIHRva2VuIGZvciBhbm90aGVyIEVuZC1Vc2VyLFxuICAgICAgICAgICAgICAgICAqIHRoZW4gaXQgbmVlZHMgdG8gaGFuZGxlIHRoaXMgY2FzZSBhcyBhIGxvZ291dCBmb3IgdGhlIG9yaWdpbmFsIEVuZC1Vc2VyLiBJZiB0aGUgb3JpZ2luYWwgRW5kLVVzZXJcbiAgICAgICAgICAgICAgICAgKiBpcyBhbHJlYWR5IGxvZ2dlZCBvdXQgYXQgdGhlIFJQIHdoZW4gdGhlIHN0YXRlIGNoYW5nZXMgaW5kaWNhdGUgdGhhdCBFbmQtVXNlciBzaG91bGQgYmUgbG9nZ2VkIG91dCxcbiAgICAgICAgICAgICAgICAgKiB0aGUgbG9nb3V0IGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBzdWNjZWVkZWQuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMucmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cyhTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VEKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgaWYoIXRoaXMucHJvcHMuaXNMb2dnZWRVc2VyKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYoIXRoaXMucHJvcHMuc2Vzc2lvblN0YXRlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKCB3aW5kb3cubG9jYXRpb24gIT09IHdpbmRvdy5wYXJlbnQubG9jYXRpb24gKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlbmRlciBydW5uaW5nIGluc2lkZSBpZnJhbWUsIHNraXBwaW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlbmRlclwiKTtcbiAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17e2hlaWdodDogJzBweCd9fT5cbiAgICAgICAgICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5zZXRPUEZyYW1lUmVmfVxuICAgICAgICAgICAgICAgICAgICBpZD1cIk9QRnJhbWVcIiBvbkxvYWQ9e3RoaXMuc2V0VGltZXJ9XG4gICAgICAgICAgICAgICAgICAgIHNyYz17dGhpcy5zdGF0ZS5vcEZyYW1lX3NyY31cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3t2aXNpYmlsaXR5OidoaWRkZW4nLCBwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogMCwgdG9wOiAwLCBib3JkZXI6ICdub25lJywgd2lkdGg6MCAsIGhlaWdodDowfX0+PjwvaWZyYW1lPlxuICAgICAgICAgICAgICAgIDxpZnJhbWUgcmVmPXt0aGlzLnNldENoZWNrU2Vzc2lvblN0YXRlRnJhbWVSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cIlJQQ0hlY2tTZXNzaW9uU3RhdGVGcmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9e3RoaXMuc3RhdGUucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyY31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTG9hZD17dGhpcy5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e3Zpc2liaWxpdHk6J2hpZGRlbicsIHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAwLCB0b3A6IDAsIGJvcmRlcjogJ25vbmUnLCB3aWR0aDowICwgaGVpZ2h0OjB9fT4+PC9pZnJhbWU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7IGxvZ2dlZFVzZXJTdGF0ZSB9KSA9PiAoe1xuICAgIHNlc3Npb25TdGF0ZTogbG9nZ2VkVXNlclN0YXRlLnNlc3Npb25TdGF0ZSxcbiAgICBpc0xvZ2dlZFVzZXI6IGxvZ2dlZFVzZXJTdGF0ZS5pc0xvZ2dlZFVzZXIsXG4gICAgc2Vzc2lvblN0YXRlU3RhdHVzOiBsb2dnZWRVc2VyU3RhdGUuc2Vzc2lvblN0YXRlU3RhdHVzLFxufSlcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIHtcbiAgICBkb0xvZ291dCwgdXBkYXRlU2Vzc2lvblN0YXRlU3RhdHVzLCBvblVzZXJBdXRoXG59KShPUFNlc3Npb25DaGVja2VyKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgJy4vc2ltcGxlLWxpbmstbGlzdC5sZXNzJztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi4vdGFibGUvVGFibGVcIjtcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcbmltcG9ydCBBc3luY0NyZWF0YWJsZVNlbGVjdCBmcm9tIFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY0NyZWF0YWJsZVwiO1xuXG5cbmNsYXNzIFNpbXBsZUxpbmtMaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVMaW5rID0gdGhpcy5oYW5kbGVMaW5rLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9uID0gdGhpcy5maWx0ZXJPcHRpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVOZXcgPSB0aGlzLmhhbmRsZU5ldy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE5ld09wdGlvbkRhdGEgPSB0aGlzLmdldE5ld09wdGlvbkRhdGEuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc1ZhbGlkTmV3T3B0aW9uID0gdGhpcy5pc1ZhbGlkTmV3T3B0aW9uLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9ucyhpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBkZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRPcHRpb25zJykgPyBvcHRpb25zLmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghaW5wdXQgJiYgIWRlZmF1bHRPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWN0aW9ucy5zZWFyY2goaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWV9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVMaW5rKGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hY3Rpb25zLmFkZC5vbkNsaWNrKHRoaXMuc3RhdGUudmFsdWUpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogJyd9KTtcbiAgICB9XG5cbiAgICBnZXROZXdPcHRpb25EYXRhKGlucHV0VmFsdWUsIG9wdGlvbkxhYmVsKSB7XG4gICAgICAgIHJldHVybiB7dGFnOiBvcHRpb25MYWJlbCwgaWQ6aW5wdXRWYWx1ZX07XG4gICAgfVxuXG4gICAgaXNWYWxpZE5ld09wdGlvbihpbnB1dFZhbHVlLCBzZWxlY3RWYWx1ZSwgc2VsZWN0T3B0aW9ucykge1xuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGxhYmVsS2V5ID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGFiZWxLZXknKSA/IG9wdGlvbnMubGFiZWxLZXkgOiAnbGFiZWwnO1xuICAgICAgICBsZXQgb3B0aW9uRm91bmQgPSBzZWxlY3RPcHRpb25zLmZpbmQob3AgPT4gb3BbbGFiZWxLZXldID09IGlucHV0VmFsdWUpO1xuICAgICAgICByZXR1cm4gKCFpbnB1dFZhbHVlIHx8IG9wdGlvbkZvdW5kKSA/IGZhbHNlIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVOZXcodmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLm9uQ3JlYXRlVGFnKHZhbHVlLCB0aGlzLmhhbmRsZUNoYW5nZSk7XG4gICAgfVxuXG4gICAgZmlsdGVyT3B0aW9uKGNhbmRpZGF0ZSwgaW5wdXRWYWx1ZSkge1xuICAgICAgICBsZXQge29wdGlvbnMsIHZhbHVlc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgYWxsb3dEdXBsaWNhdGVzID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYWxsb3dEdXBsaWNhdGVzJyk7XG4gICAgICAgIGxldCBsYWJlbEtleSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhYmVsS2V5JykgPyBvcHRpb25zLmxhYmVsS2V5IDogJ2xhYmVsJztcblxuICAgICAgICBpZiAoYWxsb3dEdXBsaWNhdGVzKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBsZXQgb3B0aW9uRm91bmQgPSB2YWx1ZXMuZmluZCh2YWwgPT4gdmFsW2xhYmVsS2V5XSA9PT0gY2FuZGlkYXRlLmxhYmVsKTtcblxuICAgICAgICByZXR1cm4gIW9wdGlvbkZvdW5kO1xuICAgIH1cblxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b3B0aW9ucywgdmFsdWVzLCBjb2x1bW5zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBkaXNhYmxlZEFkZCA9ICghdGhpcy5zdGF0ZS52YWx1ZSk7XG5cbiAgICAgICAgbGV0IHRpdGxlID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgndGl0bGUnKSA/IG9wdGlvbnMudGl0bGUgOiAnVGFibGUnO1xuICAgICAgICBsZXQgdmFsdWVLZXkgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCd2YWx1ZUtleScpID8gb3B0aW9ucy52YWx1ZUtleSA6ICd2YWx1ZSc7XG4gICAgICAgIGxldCBsYWJlbEtleSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhYmVsS2V5JykgPyBvcHRpb25zLmxhYmVsS2V5IDogJ2xhYmVsJztcbiAgICAgICAgbGV0IGFsbG93Q3JlYXRlID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnb25DcmVhdGVUYWcnKTtcbiAgICAgICAgbGV0IGRlZmF1bHRPcHRpb25zID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdE9wdGlvbnMnKSA/IG9wdGlvbnMuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IHRhYmxlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RhdGFUYWJsZScsXG4gICAgICAgICAgICBhY3Rpb25zOiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlOiBvcHRpb25zLmFjdGlvbnMuZGVsZXRlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpKSB7XG4gICAgICAgICAgICB0YWJsZU9wdGlvbnMuY2xhc3NOYW1lID0gb3B0aW9ucy5jbGFzc05hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5hY3Rpb25zLmhhc093blByb3BlcnR5KCdlZGl0JykpIHtcbiAgICAgICAgICAgIHRhYmxlT3B0aW9ucy5hY3Rpb25zLmVkaXQgPSBvcHRpb25zLmFjdGlvbnMuZWRpdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2N1c3RvbScpKSB7XG4gICAgICAgICAgICB0YWJsZU9wdGlvbnMuYWN0aW9ucy5jdXN0b20gPSBvcHRpb25zLmFjdGlvbnMuY3VzdG9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3NvcnRDb2wnKSkge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLnNvcnQoXG4gICAgICAgICAgICAgICAgKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbUEgPSBpc05hTihhW29wdGlvbnMuc29ydENvbF0pID8gYVtvcHRpb25zLnNvcnRDb2xdLnRvTG93ZXJDYXNlKCkgOiBhW29wdGlvbnMuc29ydENvbF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1CID0gaXNOYU4oYltvcHRpb25zLnNvcnRDb2xdKSA/IGJbb3B0aW9ucy5zb3J0Q29sXS50b0xvd2VyQ2FzZSgpIDogYltvcHRpb25zLnNvcnRDb2xdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGl0ZW1BID4gaXRlbUIgPyAxIDogKGl0ZW1BIDwgaXRlbUIgPyAtMSA6IDApKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCBBc3luY0NvbXBvbmVudCA9IG51bGw7XG5cbiAgICAgICAgaWYgKGFsbG93Q3JlYXRlKSB7XG4gICAgICAgICAgICBBc3luY0NvbXBvbmVudCA9XG4gICAgICAgICAgICAgICAgPEFzeW5jQ3JlYXRhYmxlU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxpbmstc2VsZWN0IGJ0bi1ncm91cCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb25bdmFsdWVLZXldfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IG9wdGlvbltsYWJlbEtleV19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyT3B0aW9uPXt0aGlzLmZpbHRlck9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgb25DcmVhdGVPcHRpb249e3RoaXMuaGFuZGxlTmV3fVxuICAgICAgICAgICAgICAgICAgICBnZXROZXdPcHRpb25EYXRhPXt0aGlzLmdldE5ld09wdGlvbkRhdGF9XG4gICAgICAgICAgICAgICAgICAgIGlzVmFsaWROZXdPcHRpb249e3RoaXMuaXNWYWxpZE5ld09wdGlvbn1cbiAgICAgICAgICAgICAgICAvPjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEFzeW5jQ29tcG9uZW50ID1cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibGluay1zZWxlY3QgYnRuLWdyb3VwIHRleHQtbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvblt2YWx1ZUtleV19XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gb3B0aW9uW2xhYmVsS2V5XX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJPcHRpb249e3RoaXMuZmlsdGVyT3B0aW9ufVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0T3B0aW9ucz17ZGVmYXVsdE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgLz47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3cgc2ltcGxlLWxpbmstbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTQgc2ltcGxlLWxpbmstbGlzdC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aDQ+e3RpdGxlfTwvaDQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQgcHVsbC1yaWdodCBidG4tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAge0FzeW5jQ29tcG9uZW50fVxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHQgYWRkLWJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlTGlua30gZGlzYWJsZWQ9e2Rpc2FibGVkQWRkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtULnRyYW5zbGF0ZShcImdlbmVyYWwuYWRkXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRhdGFUYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXt0YWJsZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXt2YWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cblNpbXBsZUxpbmtMaXN0LnByb3BUeXBlcyA9IHtcbiAgICB2YWx1ZXM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBzb3J0Q29sOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICB2YWx1ZUtleTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICBsYWJlbEtleTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGFjdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICBzZWFyY2g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICBkZWxldGU6IFByb3BUeXBlcy5zaGFwZSh7b25DbGljazpQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkfSksXG4gICAgICAgICAgICBhZGQ6IFByb3BUeXBlcy5zaGFwZSh7b25DbGljazpQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkfSksXG4gICAgICAgICAgICBlZGl0OiBQcm9wVHlwZXMuc2hhcGUoe29uQ2xpY2s6UHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZH0pLFxuICAgICAgICAgICAgY3VzdG9tOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgICAgIH0pLmlzUmVxdWlyZWRcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpbXBsZUxpbmtMaXN0O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICcuL3N1bW1pdC1kcm9wZG93bi5sZXNzJztcbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VtbWl0RHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBzdW1taXRWYWx1ZTogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHN1bW1pdCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtzdW1taXRWYWx1ZTogc3VtbWl0fSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2xpY2soZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKHRoaXMuc3RhdGUuc3VtbWl0VmFsdWUudmFsdWUpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge3N1bW1pdHMsIGFjdGlvbkxhYmVsLCBhY3Rpb25DbGFzc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgc3VtbWl0T3B0aW9ucyA9IHN1bW1pdHNcbiAgICAgICAgICAgIC5zb3J0KFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiAoYS5zdGFydF9kYXRlIDwgYi5zdGFydF9kYXRlID8gMSA6IChhLnN0YXJ0X2RhdGUgPiBiLnN0YXJ0X2RhdGUgPyAtMSA6IDApKVxuICAgICAgICAgICAgKS5tYXAocyA9PiAoe2xhYmVsOiBzLm5hbWUsIHZhbHVlOiBzLmlkfSkpO1xuXG4gICAgICAgIGxldCBiaWdDbGFzcyA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2JpZycpID8gJ2JpZycgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3VtbWl0LWRyb3Bkb3duIGJ0bi1ncm91cCBcIiArIGJpZ0NsYXNzfT5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwic3VtbWl0LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnN1bW1pdFZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3N1bW1pdE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtULnRyYW5zbGF0ZShcImdlbmVyYWwuc2VsZWN0X3N1bW1pdFwiKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuLWdyb3VwIHN1bW1pdC1zZWxlY3QgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPXtgYnRuIGJ0bi1kZWZhdWx0ICR7YWN0aW9uQ2xhc3N9YH0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30+XG4gICAgICAgICAgICAgICAgICAgIHthY3Rpb25MYWJlbH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdGFibGVBY3Rpb25zVGFibGVDZWxsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaXNfZWRpdGluZzogZmFsc2VcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgb25EZWxldGUoaWQsIGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5kZWxldGUoaWQpO1xuICAgIH1cblxuICAgIG9uU2F2ZShpZCwgZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc19lZGl0aW5nOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuc2F2ZShpZCk7XG4gICAgfVxuXG4gICAgb25FZGl0KGlkLCBldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzX2VkaXRpbmc6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmVkaXQoaWQpO1xuICAgIH1cblxuICAgIG9uQ2FuY2VsKGlkLCBldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzX2VkaXRpbmc6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5jYW5jZWwoaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHthY3Rpb25zLCBpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmlzX2VkaXRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIG9uQ2xpY2s9e3RoaXMub25TYXZlLmJpbmQodGhpcyxpZCl9IGRhdGEtdGlwPVwic2F2ZVwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLWZsb3BweS1vXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBvbkNsaWNrPXt0aGlzLm9uQ2FuY2VsLmJpbmQodGhpcyxpZCl9IGRhdGEtdGlwPVwiY2FuY2VsXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdGltZXNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgeydlZGl0JyBpbiBhY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgb25DbGljaz17dGhpcy5vbkVkaXQuYmluZCh0aGlzLGlkKX0gZGF0YS10aXA9XCJlZGl0XCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7J2RlbGV0ZScgaW4gYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIG9uQ2xpY2s9e3RoaXMub25EZWxldGUuYmluZCh0aGlzLGlkKX0gZGF0YS10aXA9XCJkZWxldGVcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdHJhc2gtbyBkZWxldGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRWRpdGFibGVUYWJsZUhlYWRpbmcgZnJvbSAnLi9FZGl0YWJsZVRhYmxlSGVhZGluZyc7XG5pbXBvcnQgRWRpdGFibGVUYWJsZUNlbGwgZnJvbSAnLi9FZGl0YWJsZVRhYmxlQ2VsbCc7XG5pbXBvcnQgRWRpdGFibGVBY3Rpb25zVGFibGVDZWxsIGZyb20gJy4vRWRpdGFibGVBY3Rpb25zVGFibGVDZWxsJztcbmltcG9ydCBFZGl0YWJsZVRhYmxlUm93IGZyb20gJy4vRWRpdGFibGVUYWJsZVJvdyc7XG5pbXBvcnQgU3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcbmltcG9ydCBUIGZyb20gXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiO1xuaW1wb3J0ICcuL2VkaXRhYmxlLXRhYmxlLmNzcyc7XG5pbXBvcnQgUmVhY3RUb29sdGlwIGZyb20gXCJyZWFjdC10b29sdGlwXCI7XG5pbXBvcnQgeyBzaGFsbG93RXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy9tZXRob2RzJ1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgICBjb2xXaWR0aDogJydcbn07XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMsIHNob3VsZFVzZVRleHRBcmVhKSA9PiB7XG5cbiAgICB2YXIgYWN0aW9uX2J1dHRvbnMgPSAnJztcbiAgICB2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlQ2VsbCBzaG91bGRVc2VUZXh0QXJlYT17c2hvdWxkVXNlVGV4dEFyZWF9IGtleT17cm93WydpZCddICsgJ19maWVsZCcgKyBpfSBuYW1lPXtjb2wuY29sdW1uS2V5fSBpZD17cm93LmlkfSBpc19lZGl0PXtyb3cuaXNfZWRpdH0gaGFuZGxlQ2hhbmdlPXthY3Rpb25zLmhhbmRsZUNoYW5nZX0+XG4gICAgICAgICAgICAgICAge3Jvd1tjb2wuY29sdW1uS2V5XX1cbiAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZUNlbGw+XG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICBjZWxscy5wdXNoKDxFZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwga2V5PXsnYWN0aW9uc18nICsgcm93WydpZCddfSBpZD17cm93WydpZCddfSBhY3Rpb25zPXthY3Rpb25zfS8+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbHM7XG59O1xuXG5jb25zdCBjcmVhdGVOZXdSb3cgPSAoY29sdW1ucywgbmV3X3JvdywgYWRkTmV3LCBoYW5kbGVDaGFuZ2UsIHNob3VsZFVzZVRleHRBcmVhKSA9PiB7XG5cbiAgICB2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgbGV0IGNlbGxfdmFsdWUgPSAodHlwZW9mIG5ld19yb3dbY29sLmNvbHVtbktleV0gIT09ICd1bmRlZmluZWQnKSA/IG5ld19yb3dbY29sLmNvbHVtbktleV0gOiAnJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ZCBrZXk9eyduZXdfcm93XycgKyBpfT5cbiAgICAgICAgICAgICAgICB7c2hvdWxkVXNlVGV4dEFyZWEgJiZcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIGlkPXsnbmV3XycgKyBjb2wuY29sdW1uS2V5fSBuYW1lPXtjb2wuY29sdW1uS2V5fSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NlbGxfdmFsdWV9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeyFzaG91bGRVc2VUZXh0QXJlYSAmJlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgaWQ9eyduZXdfJyArIGNvbC5jb2x1bW5LZXl9IG5hbWU9e2NvbC5jb2x1bW5LZXl9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2VsbF92YWx1ZX0vPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjZWxscy5wdXNoKFxuICAgICAgICA8dGQga2V5PSdhZGRfbmV3Jz5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0XCIgb25DbGljaz17YWRkTmV3fT4gQWRkIDwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICk7XG5cbiAgICByZXR1cm4gY2VsbHM7XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICByb3dzOiBwcm9wcy5kYXRhLFxuICAgICAgICAgICAgbmV3X3Jvdzoge31cbiAgICAgICAgfTtcblxuICAgICAgICAvLyB3ZSBzdG9yZSB0aGUgZGVsZXRlIGFuZCBzYXZlIGZ1bmN0aW9ucyBpbiBwcm9wcyBjYXVzZSB3ZSBuZWVkIHRvIGV4dGVuZCB0aGVtXG4gICAgICAgIHRoaXMub25TYXZlID0gcHJvcHMub3B0aW9ucy5hY3Rpb25zLnNhdmUub25DbGljaztcblxuICAgICAgICB0aGlzLmFjdGlvbnMgPSB7Li4ucHJvcHMub3B0aW9ucy5hY3Rpb25zfTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmVkaXQgPSB0aGlzLmVkaXRSb3cuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLnNhdmUgPSB0aGlzLnNhdmVSb3cuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmRlbGV0ZSA9IHRoaXMuZGVsZXRlQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmhhbmRsZUNoYW5nZSA9IHRoaXMub25DaGFuZ2VDZWxsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5jYW5jZWwgPSB0aGlzLmVkaXRSb3dDYW5jZWwuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnNhdmVOZXdSb3cgPSB0aGlzLnNhdmVOZXdSb3cuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVOZXdDaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlTmV3Q2VsbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYoIXNoYWxsb3dFcXVhbCh0aGlzLnByb3BzLmRhdGEsIHByZXZQcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cm93czogdGhpcy5wcm9wcy5kYXRhfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVSb3coaWQsIGV2KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHJvdyA9IHJvd3MuZmluZChyID0+IHIuaWQgPT0gaWQpO1xuICAgICAgICByb3cuaXNfZWRpdCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZWRpdGluZ19yb3cgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgcm93czogcm93c1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uU2F2ZShyb3cpO1xuICAgIH1cblxuICAgIGRlbGV0ZUNsaWNrKGlkKSB7XG4gICAgICAgIGxldCBvbkRlbGV0ZSA9IHRoaXMucHJvcHMub3B0aW9ucy5hY3Rpb25zLmRlbGV0ZS5vbkNsaWNrO1xuICAgICAgICBsZXQgbm9BbGVydCA9IHRoaXMucHJvcHMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbm9BbGVydCcpO1xuXG4gICAgICAgIGlmIChub0FsZXJ0KSB7XG4gICAgICAgICAgICBvbkRlbGV0ZShpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBULnRyYW5zbGF0ZShcImdlbmVyYWwuYXJlX3lvdV9zdXJlXCIpLFxuICAgICAgICAgICAgICAgIHRleHQ6IFQudHJhbnNsYXRlKFwiZ2VuZXJhbC5yZW1vdmVfd2FybmluZ1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcIndhcm5pbmdcIixcbiAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjREQ2QjU1XCIsXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFQudHJhbnNsYXRlKFwiZ2VuZXJhbC55ZXNfZGVsZXRlXCIpXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlZGl0Um93KGlkLCBldikge1xuICAgICAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCByb3cgPSByb3dzLmZpbmQociA9PiByLmlkID09IGlkKTtcblxuICAgICAgICAvL3NhdmUgZWRpdGluZyByb3cgZm9yIGNhbmNlbFxuICAgICAgICB0aGlzLmVkaXRpbmdfcm93ID0gey4uLnJvd307XG5cbiAgICAgICAgcm93LmlzX2VkaXQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgcm93czogcm93c1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlZGl0Um93Q2FuY2VsKGlkLCBldikge1xuICAgICAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIHJvd3MuZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgIHIuaXNfZWRpdCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgcm93SWR4ID0gcm93cy5maW5kSW5kZXgociA9PiByLmlkID09IGlkKTtcblxuICAgICAgICByb3dzW3Jvd0lkeF0gPSB0aGlzLmVkaXRpbmdfcm93O1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgcm93czogcm93c1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZUNlbGwoZXYpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgZmllbGQgPSBldi50YXJnZXQ7XG4gICAgICAgIGxldCByb3cgPSByb3dzLmZpbmQociA9PiByLmlkID09IGZpZWxkLmlkKTtcblxuICAgICAgICByb3dbZmllbGQubmFtZV0gPSBmaWVsZC52YWx1ZTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VOZXdDZWxsKGV2KSB7XG4gICAgICAgIGNvbnN0IHtuZXdfcm93fSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCBmaWVsZCA9IGV2LnRhcmdldDtcblxuICAgICAgICBuZXdfcm93W2ZpZWxkLm5hbWVdID0gZmllbGQudmFsdWU7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBuZXdfcm93OiBuZXdfcm93XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhdmVOZXdSb3coZXYpIHtcbiAgICAgICAgY29uc3Qge25ld19yb3d9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLm9uU2F2ZShuZXdfcm93KTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIG5ld19yb3c6IHt9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zLCBjb2x1bW5zIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgdGFibGVDbGFzcyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gb3B0aW9ucy5jbGFzc05hbWUgOiAnJztcbiAgICAgICAgbGV0IHRleHRBcmVhID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcInRleHRBcmVhXCIpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXtcInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtYm9yZGVyZWQgZWRpdGFibGVUYWJsZSBcIiArIHRhYmxlQ2xhc3N9PlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sV2lkdGggPSAoY29sLndpZHRoKSA/IGNvbC53aWR0aCA6IGRlZmF1bHRzLmNvbFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVkaXRhYmxlVGFibGVIZWFkaW5nIHdpZHRoPXtjb2xXaWR0aH0ga2V5PXsnaGVhZGluZ18nICsgaX0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVkaXRhYmxlVGFibGVIZWFkaW5nIGtleT0nYWN0aW9uc19oZWFkaW5nJyA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubGVuZ3RoID4gMCAmJiB0aGlzLnN0YXRlLnJvd3MubWFwKChyb3csaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocm93KSAmJiByb3cubGVuZ3RoICE9PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERhdGEgYXQgcm93ICR7aX0gaXMgJHtyb3cubGVuZ3RofS4gSXQgc2hvdWxkIGJlICR7Y29sdW1ucy5sZW5ndGh9LmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlUm93IGV2ZW49e2klMiA9PT0gMH0ga2V5PXsncm93XycgKyByb3cuaWR9IGlkPXtyb3cuaWR9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVSb3cocm93LCBjb2x1bW5zLCB0aGlzLmFjdGlvbnMsIHRleHRBcmVhKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlUm93PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPEVkaXRhYmxlVGFibGVSb3cgZXZlbj17MH0gaWQ9J25ld19yb3cnIGtleT0nbmV3X3Jvdyc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZU5ld1Jvdyhjb2x1bW5zLCB0aGlzLnN0YXRlLm5ld19yb3csIHRoaXMuc2F2ZU5ld1JvdywgdGhpcy5oYW5kbGVOZXdDaGFuZ2UsIHRleHRBcmVhKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDxSZWFjdFRvb2x0aXAgZGVsYXlTaG93PXsxMH0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBFZGl0YWJsZVRhYmxlQ2VsbCA9IChwcm9wcykgPT4ge1xuXG4gICAgaWYgKHByb3BzLmlzX2VkaXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICB7IXByb3BzLnNob3VsZFVzZVRleHRBcmVhICYmXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIGRlZmF1bHRWYWx1ZT17cHJvcHMuY2hpbGRyZW59IG5hbWU9e3Byb3BzLm5hbWV9IGlkPXtwcm9wcy5pZH0gb25DaGFuZ2U9e3Byb3BzLmhhbmRsZUNoYW5nZX0vPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7cHJvcHMuc2hvdWxkVXNlVGV4dEFyZWEgJiZcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIGRlZmF1bHRWYWx1ZT17cHJvcHMuY2hpbGRyZW59IG5hbWU9e3Byb3BzLm5hbWV9IGlkPXtwcm9wcy5pZH0gb25DaGFuZ2U9e3Byb3BzLmhhbmRsZUNoYW5nZX0vPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ZD57cHJvcHMuY2hpbGRyZW59PC90ZD5cbiAgICAgICAgKTtcbiAgICB9XG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRhYmxlVGFibGVDZWxsOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNsYXNzIEVkaXRhYmxlVGFibGVIZWFkaW5nIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgcmVuZGVyICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0aCB3aWR0aD17dGhpcy5wcm9wcy53aWR0aH0+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRpdGFibGVUYWJsZUhlYWRpbmc7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdGFibGVUYWJsZVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIGV2ZW4sIGlkIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dHIgaWQ9e2lkfSByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtldmVuID8gJ2V2ZW4nIDogJ29kZCd9PlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uID0gdGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uID0gdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uLmJpbmQodGhpcyk7XG5cbiAgICB9XG5cbiAgICBzaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbikge1xuICAgICAgICBsZXQge2lkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFhY3Rpb24uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc3BsYXkoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQWN0aW9uKGFjdGlvbiwgaWQsIGV2KSB7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGFjdGlvbihpZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2FjdGlvbnMsIGlkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiIGtleT1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICB7YWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZGVsZXRlJykgJiYgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbnMuZGVsZXRlKSAgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPVwiZGVsZXRlXCIgb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhY3Rpb25zLmRlbGV0ZS5vbkNsaWNrLCBpZCl9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRyYXNoLW8gZGVsZXRlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2N1c3RvbScpICYmIGFjdGlvbnMuY3VzdG9tLm1hcChhID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhKSAmJlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9e2EudG9vbHRpcH0ga2V5PXsnY3VzdG9tXycgKyBhLm5hbWV9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYS5vbkNsaWNrLCBpZCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2EuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH1cbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNlbGVjdGFibGVUYWJsZUhlYWRpbmcgZnJvbSAnLi9TZWxlY3RhYmxlVGFibGVIZWFkaW5nJztcbmltcG9ydCBTZWxlY3RhYmxlVGFibGVDZWxsIGZyb20gJy4vU2VsZWN0YWJsZVRhYmxlQ2VsbCc7XG5pbXBvcnQgU2VsZWN0YWJsZVRhYmxlUm93IGZyb20gJy4vU2VsZWN0YWJsZVRhYmxlUm93JztcbmltcG9ydCBTZWxlY3RhYmxlQWN0aW9uc1RhYmxlQ2VsbCBmcm9tICcuL1NlbGVjdGFibGVBY3Rpb25zVGFibGVDZWxsJztcbmltcG9ydCBSZWFjdFRvb2x0aXAgZnJvbSAncmVhY3QtdG9vbHRpcCdcbmltcG9ydCAnLi9zZWxlY3RhYmxlLXRhYmxlLmNzcyc7XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICAgIHNvcnRGdW5jOiAoYSxiKSA9PiAoYSA8IGIgPyAtMSA6IChhID4gYiA/IDEgOiAwKSksXG4gICAgc29ydGFibGU6IGZhbHNlLFxuICAgIHNvcnRDb2w6IDAsXG4gICAgc29ydERpcjogMSxcbiAgICBjb2xXaWR0aDogJydcbn1cblxuY29uc3QgY3JlYXRlUm93ID0gKHJvdywgY29sdW1ucywgYWN0aW9ucykgPT4ge1xuXG4gICAgdmFyIGFjdGlvbl9idXR0b25zID0gJyc7XG4gICAgdmFyIGNlbGxzID0gY29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U2VsZWN0YWJsZVRhYmxlQ2VsbCBrZXk9e3Jvd1snaWQnXSArICdfZmllbGQnICsgaX0gbmFtZT17Y29sLmNvbHVtbktleX0gaWQ9e3Jvdy5pZH0+XG4gICAgICAgICAgICAgICAge3Jvd1tjb2wuY29sdW1uS2V5XX1cbiAgICAgICAgICAgIDwvU2VsZWN0YWJsZVRhYmxlQ2VsbD5cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICAgIGNlbGxzLnB1c2goPFNlbGVjdGFibGVBY3Rpb25zVGFibGVDZWxsIGtleT0nYWN0aW9uc19jZWxsJyBpZD17cm93WydpZCddfSBhY3Rpb25zPXthY3Rpb25zfSAvPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuY29uc3QgZ2V0U29ydERpciA9IChjb2x1bW5LZXksIGNvbHVtbkluZGV4LCBzb3J0Q29sLCBzb3J0RGlyKSA9PiB7XG4gICAgaWYoY29sdW1uS2V5ICYmIChjb2x1bW5LZXkgPT09IHNvcnRDb2wpKSB7XG4gICAgICAgIHJldHVybiBzb3J0RGlyO1xuICAgIH1cbiAgICBpZihzb3J0Q29sID09PSBjb2x1bW5JbmRleCkge1xuICAgICAgICByZXR1cm4gc29ydERpcjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbn07XG5cblxuY2xhc3MgU2VsZWN0YWJsZVRhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7b3B0aW9ucywgY29sdW1uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgc2VsZWN0ZWRJZHMgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdzZWxlY3RlZElkcycpID8gb3B0aW9ucy5zZWxlY3RlZElkcyA6IFtdO1xuICAgICAgICBsZXQgdGFibGVDbGFzcyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gb3B0aW9ucy5jbGFzc05hbWUgOiAnJztcbiAgICAgICAgdGFibGVDbGFzcyArPSAob3B0aW9ucy5hY3Rpb25zLmhhc093blByb3BlcnR5KCdlZGl0JykpID8gJyB0YWJsZS1ob3ZlcicgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXtcInRhYmxlIHRhYmxlLXN0cmlwZWQgZGF0YVRhYmxlIFwiICsgdGFibGVDbGFzc30+XG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInNlbGVjdF9hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0X2FsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvcHRpb25zLmFjdGlvbnMuZWRpdC5vblNlbGVjdGVkQWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtvcHRpb25zLnNlbGVjdGVkQWxsfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRDb2wgPSAodHlwZW9mIG9wdGlvbnMuc29ydENvbCAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnRDb2wgOiBkZWZhdWx0cy5zb3J0Q29sO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0RGlyID0gKHR5cGVvZiBvcHRpb25zLnNvcnREaXIgIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5zb3J0RGlyIDogZGVmYXVsdHMuc29ydERpcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydEZ1bmMgPSAodHlwZW9mIG9wdGlvbnMuc29ydEZ1bmMgIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5zb3J0RnVuYyA6IGRlZmF1bHRzLnNvcnRGdW5jO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0YWJsZSA9ICh0eXBlb2YgY29sLnNvcnRhYmxlICE9ICd1bmRlZmluZWQnKSA/IGNvbC5zb3J0YWJsZSA6IGRlZmF1bHRzLnNvcnRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xXaWR0aCA9ICh0eXBlb2YgY29sLndpZHRoICE9ICd1bmRlZmluZWQnKSA/IGNvbC53aWR0aCA6IGRlZmF1bHRzLmNvbFdpZHRoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdGFibGVUYWJsZUhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU29ydD17dGhpcy5wcm9wcy5vblNvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RGlyPXtnZXRTb3J0RGlyKGNvbC5jb2x1bW5LZXksIGksIHNvcnRDb2wsIHNvcnREaXIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGU9e3NvcnRhYmxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydEZ1bmM9e3NvcnRGdW5jfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5LZXk9e2NvbC5jb2x1bW5LZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Y29sV2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9eydoZWFkaW5nXycraX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RhYmxlVGFibGVIZWFkaW5nIGtleT0nYWN0aW9uc19oZWFkaW5nJyA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMuYWN0aW9uc0hlYWRlciB8fCAnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubGVuZ3RoID4gMCAmJiB0aGlzLnByb3BzLmRhdGEubWFwKChyb3csaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyb3cpICYmIHJvdy5sZW5ndGggIT09IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEYXRhIGF0IHJvdyAke2l9IGlzICR7cm93Lmxlbmd0aH0uIEl0IHNob3VsZCBiZSAke2NvbHVtbnMubGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRyIGtleT17J3Jvd18nK2l9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdGFibGVUYWJsZVJvdyBjaGVja2VkPXtvcHRpb25zLnNlbGVjdGVkQWxsIHx8IHNlbGVjdGVkSWRzLmluY2x1ZGVzKHJvd1snaWQnXSl9IGV2ZW49e2klMiA9PT0gMH0ga2V5PXsncm93Xycrcm93WydpZCddfSBpZD17cm93WydpZCddfSBhY3Rpb25zPXtvcHRpb25zLmFjdGlvbnN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlUm93KHJvdywgY29sdW1ucywgb3B0aW9ucy5hY3Rpb25zKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdGFibGVUYWJsZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPFJlYWN0VG9vbHRpcCBkZWxheVNob3c9ezEwfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdGFibGVUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCc7XG5cbmNvbnN0IFNlbGVjdGFibGVUYWJsZUNlbGwgPSAocHJvcHMpID0+IHtcbiAgICBsZXQge2NoaWxkcmVufSA9IHByb3BzO1xuXHRsZXQgdmFsdWUgPSAnJztcblx0aWYoY2hpbGRyZW4pIHtcblx0ICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcblx0ICAgICAgICB2YWx1ZSA9IGNoaWxkcmVuO1xuICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHZhbHVlID0gPFJhd0hUTUw+e2NoaWxkcmVuLnRvU3RyaW5nKCl9PC9SYXdIVE1MPlxuICAgICAgICB9XG4gICAgfVxuXG5cdHJldHVybiAoXG5cdFx0PHRkIHsuLi5wcm9wc30+XG4gICAgICAgICAgICB7dmFsdWV9XG5cdFx0PC90ZD5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdGFibGVUYWJsZUNlbGw7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuY2xhc3MgU2VsZWN0YWJsZVRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cblx0Y29uc3RydWN0b3IgKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHRcdHRoaXMuaGFuZGxlU29ydCA9IHRoaXMuaGFuZGxlU29ydC5iaW5kKHRoaXMpO1xuXHR9XG5cblx0Z2V0U29ydENsYXNzKCkge1xuXG5cdFx0aWYgKCF0aGlzLnByb3BzLnNvcnRhYmxlKSByZXR1cm4gbnVsbDtcblxuXHRcdHN3aXRjaCh0aGlzLnByb3BzLnNvcnREaXIpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0cmV0dXJuICdzb3J0aW5nX2FzYyc7XG5cdFx0XHRjYXNlIC0xOlxuXHRcdFx0XHRyZXR1cm4gJ3NvcnRpbmdfZGVzYyc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5zb3J0YWJsZSA/ICdzb3J0aW5nJyA6IG51bGxcblx0XHR9XG5cdH1cblxuXHRoYW5kbGVTb3J0KGUpIHtcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0aWYoIXRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ29uU29ydCcpIHx8ICF0aGlzLnByb3BzLnNvcnRhYmxlKSByZXR1cm47XG5cblx0XHR0aGlzLnByb3BzLm9uU29ydChcblx0XHRcdHRoaXMucHJvcHMuY29sdW1uSW5kZXgsXG5cdFx0XHR0aGlzLnByb3BzLmNvbHVtbktleSxcblx0XHRcdHRoaXMucHJvcHMuc29ydERpciA/IHRoaXMucHJvcHMuc29ydERpciotMSA6IDEsXG5cdFx0XHR0aGlzLnByb3BzLnNvcnRGdW5jXG5cdFx0KTtcblx0fVxuXG5cdHJlbmRlciAoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDx0aCBvbkNsaWNrPXt0aGlzLmhhbmRsZVNvcnR9XG5cdFx0XHRcdGNsYXNzTmFtZT17dGhpcy5nZXRTb3J0Q2xhc3MoKX1cblx0XHRcdFx0d2lkdGg9e3RoaXMucHJvcHMud2lkdGh9XG5cdFx0XHRcdD5cblx0XHRcdFx0e3RoaXMucHJvcHMuY2hpbGRyZW59XG5cdFx0XHQ8L3RoPlxuXHRcdCk7XHRcblx0fVxuXHRcbn1cblxuU2VsZWN0YWJsZVRhYmxlSGVhZGluZy5wcm9wVHlwZXMgPSB7XG5cdG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG5cdHNvcnREaXI6IFByb3BUeXBlcy5udW1iZXIsXG5cdGNvbHVtbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRjb2x1bW5LZXk6IFByb3BUeXBlcy5hbnksXG5cdHNvcnRhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblx0c29ydEZ1bmM6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RhYmxlVGFibGVIZWFkaW5nOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGFibGVUYWJsZVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlRWRpdCA9IHRoaXMuaGFuZGxlRWRpdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZVNlbGVjdCA9IHRoaXMuaGFuZGxlU2VsZWN0LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoIWFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzcGxheShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVFZGl0KGlkLCBldikge1xuICAgICAgICAvLyBieSBwYXNzXG4gICAgICAgIGlmKGV2LnRhcmdldC50eXBlID09PSBcImNoZWNrYm94XCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZWRpdC5vbkNsaWNrKGlkKTtcbiAgICB9XG5cbiAgICBoYW5kbGVTZWxlY3QoaWQsIGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5lZGl0Lm9uU2VsZWN0ZWQoaWQsIGV2LnRhcmdldC5jaGVja2VkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtldmVuLCBhY3Rpb25zLCBpZCwgY2hpbGRyZW4sIGNoZWNrZWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGNhbkVkaXQgPSAoYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmVkaXQpKTtcbiAgICAgICAgbGV0IHJvd0NsYXNzID0gZXZlbiA/ICdldmVuJyA6ICdvZGQnO1xuXG4gICAgICAgIGlmIChjYW5FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ciByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtyb3dDbGFzcyArIFwiIGNhbi1lZGl0XCJ9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlRWRpdC5iaW5kKHRoaXMsIGlkKX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBrZXk9e2lkICsgJ19zZWxlY3QnfT48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e2lkICsgJ19zZWxlY3QnfSBuYW1lPXtpZCArICdfc2VsZWN0J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZVNlbGVjdC5iaW5kKHRoaXMsIGlkKX0vPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHRyIHJvbGU9XCJyb3dcIiBjbGFzc05hbWU9e3Jvd0NsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGtleT17aWQgKyAnX3NlbGVjdCd9ID48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e2lkICsgJ19zZWxlY3QnfSBuYW1lPXtpZCArICdfc2VsZWN0J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZVNlbGVjdC5iaW5kKHRoaXMsIGlkKX0vPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICApO1xuXG4gICAgfVxufTtcblxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU29ydGFibGVBY3Rpb25zVGFibGVDZWxsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbiA9IHRoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcyk7XG5cbiAgICB9XG5cbiAgICBzaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbikge1xuICAgICAgICBsZXQge2lkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFhY3Rpb24uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc3BsYXkoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQWN0aW9uKGFjdGlvbiwgaWQsIGV2KSB7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGFjdGlvbihpZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2FjdGlvbnMsIGlkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiIGtleT1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICB7YWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmVkaXQpICYmXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPVwiZWRpdFwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYWN0aW9ucy5lZGl0Lm9uQ2xpY2ssIGlkKX0gPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48L2k+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7YWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZGVsZXRlJykgJiYgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbnMuZGVsZXRlKSAgJiZcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9XCJkZWxldGVcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGFjdGlvbnMuZGVsZXRlLm9uQ2xpY2ssIGlkKX0gPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10cmFzaC1vIGRlbGV0ZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeydjdXN0b20nIGluIGFjdGlvbnMgJiYgYWN0aW9ucy5jdXN0b20ubWFwKGEgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGEsIGlkKSAmJlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9e2EudG9vbHRpcH0ga2V5PXsnY3VzdG9tXycgKyBhLm5hbWV9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYS5vbkNsaWNrLCBpZCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2EuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH1cbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB1cGRhdGUgZnJvbSAnaW1tdXRhYmlsaXR5LWhlbHBlcic7XG5pbXBvcnQgeyBEcmFnRHJvcENvbnRleHQgfSBmcm9tICdyZWFjdC1kbmQnO1xuaW1wb3J0IEhUTUw1QmFja2VuZCBmcm9tICdyZWFjdC1kbmQtaHRtbDUtYmFja2VuZCc7XG5pbXBvcnQgU29ydGFibGVUYWJsZUhlYWRpbmcgZnJvbSAnLi9Tb3J0YWJsZVRhYmxlSGVhZGluZyc7XG5pbXBvcnQgU29ydGFibGVUYWJsZUNlbGwgZnJvbSAnLi9Tb3J0YWJsZVRhYmxlQ2VsbCc7XG5pbXBvcnQgU29ydGFibGVBY3Rpb25zVGFibGVDZWxsIGZyb20gJy4vU29ydGFibGVBY3Rpb25zVGFibGVDZWxsJztcbmltcG9ydCBTb3J0YWJsZVRhYmxlUm93IGZyb20gJy4vU29ydGFibGVUYWJsZVJvdyc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5pbXBvcnQgJy4vdGFibGUtc29ydGFibGUuY3NzJztcbmltcG9ydCB7c2hhbGxvd0VxdWFsfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWV0aG9kc1wiO1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgICBjb2xXaWR0aDogJydcbn1cblxuY29uc3QgY3JlYXRlUm93ID0gKHJvdywgY29sdW1ucywgYWN0aW9ucykgPT4ge1xuXG4gICAgdmFyIGFjdGlvbl9idXR0b25zID0gJyc7XG5cdHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuXHRcdHJldHVybiAoXG5cdFx0PFNvcnRhYmxlVGFibGVDZWxsIGtleT17aX0+XG4gICAgICAgICAgICB7cm93W2NvbC5jb2x1bW5LZXldfVxuXHRcdDwvU29ydGFibGVUYWJsZUNlbGw+XG5cdFx0KTtcblx0fSk7XG5cbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICBjZWxscy5wdXNoKDxTb3J0YWJsZUFjdGlvbnNUYWJsZUNlbGwga2V5PSdhY3Rpb25zJyBpZD17cm93WydpZCddfSBhY3Rpb25zPXthY3Rpb25zfS8+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbHM7XG59O1xuXG5cbmNsYXNzIFNvcnRhYmxlVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLm1vdmVSb3cgPSB0aGlzLm1vdmVSb3cuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kcm9wUm93ID0gdGhpcy5kcm9wUm93LmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHJvd3M6IHByb3BzLmRhdGFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmKCFzaGFsbG93RXF1YWwodGhpcy5wcm9wcy5kYXRhLCBwcmV2UHJvcHMuZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3Jvd3M6IHRoaXMucHJvcHMuZGF0YX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlUm93KGRyYWdJbmRleCwgaG92ZXJJbmRleCkge1xuICAgICAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGNvbnN0IGRyYWdSb3cgPSByb3dzW2RyYWdJbmRleF07XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh1cGRhdGUodGhpcy5zdGF0ZSwge1xuICAgICAgICAgICAgcm93czoge1xuICAgICAgICAgICAgICAgICRzcGxpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdJbmRleCwgMV0sXG4gICAgICAgICAgICAgICAgICAgIFtob3ZlckluZGV4LCAwLCBkcmFnUm93XSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGRyb3BSb3coaWQsIGluZGV4KSB7XG4gICAgICAgIGxldCB7b3JkZXJGaWVsZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgbmV3T3JkZXIgPSBpbmRleCArIDE7XG4gICAgICAgIGxldCByb3dzID0gWy4uLnRoaXMuc3RhdGUucm93c107XG5cbiAgICAgICAgZm9yKHZhciBpIGluIHJvd3MpIHtcbiAgICAgICAgICAgIHJvd3NbaV1bb3JkZXJGaWVsZF0gPSBwYXJzZUludChpKSArIDE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKHVwZGF0ZSh0aGlzLnN0YXRlLCB7cm93czogeyRzZXQ6IHJvd3N9fSkpO1xuXG4gICAgICAgIHRoaXMucHJvcHMuZHJvcENhbGxiYWNrKHJvd3MsIGlkLCBuZXdPcmRlcik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge29wdGlvbnMsIGNvbHVtbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHRhYmxlQ2xhc3MgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic29ydGFibGUtdGFibGUtYm94XCI+XG4gICAgICAgICAgICAgICAgPGk+e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5kcmFnX2FuZF9kcm9wXCIpfTwvaT5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXtcInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtaG92ZXIgc29ydGFibGVUYWJsZSBcIiArIHRhYmxlQ2xhc3N9PlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sV2lkdGggPSAoY29sLndpZHRoKSA/IGNvbC53aWR0aCA6IGRlZmF1bHRzLmNvbFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTb3J0YWJsZVRhYmxlSGVhZGluZyB3aWR0aD17Y29sV2lkdGh9IGtleT17aX0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Tb3J0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8U29ydGFibGVUYWJsZUhlYWRpbmcga2V5PSdhY3Rpb25zJyA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9Tb3J0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5sZW5ndGggPiAwICYmIHRoaXMuc3RhdGUucm93cy5tYXAoKHJvdyxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJvdykgJiYgcm93Lmxlbmd0aCAhPT0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERhdGEgYXQgcm93ICR7aX0gaXMgJHtyb3cubGVuZ3RofS4gSXQgc2hvdWxkIGJlICR7Y29sdW1ucy5sZW5ndGh9LmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dHIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNvcnRhYmxlVGFibGVSb3cgZXZlbj17aSUyID09PSAwfSBrZXk9e3Jvdy5pZH0gaW5kZXg9e2l9IGlkPXtyb3cuaWR9IG1vdmVDYXJkPXt0aGlzLm1vdmVSb3d9IGRyb3BDYXJkPXt0aGlzLmRyb3BSb3d9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlUm93KHJvdywgY29sdW1ucywgb3B0aW9ucy5hY3Rpb25zKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NvcnRhYmxlVGFibGVSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuU29ydGFibGVUYWJsZS5wcm9wVHlwZXMgPSB7XG4gICAgZGF0YTogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBhY3Rpb25zOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBjb2x1bW5LZXk6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxuICAgIH0pKS5pc1JlcXVpcmVkLFxuICAgIG9yZGVyRmllbGQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBkcm9wQ2FsbGJhY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJhZ0Ryb3BDb250ZXh0KEhUTUw1QmFja2VuZCkoU29ydGFibGVUYWJsZSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBTb3J0YWJsZVRhYmxlQ2VsbCA9IChwcm9wcykgPT4gKFxuXHQ8dGQgey4uLnByb3BzfT57cHJvcHMuY2hpbGRyZW59PC90ZD5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFNvcnRhYmxlVGFibGVDZWxsOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNsYXNzIFNvcnRhYmxlVGFibGVIZWFkaW5nIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuXHRjb25zdHJ1Y3RvciAocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdH1cblxuXHRyZW5kZXIgKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8dGggd2lkdGg9e3RoaXMucHJvcHMud2lkdGh9PlxuXHRcdFx0XHR7dGhpcy5wcm9wcy5jaGlsZHJlbn1cblx0XHRcdDwvdGg+XG5cdFx0KTtcdFxuXHR9XG5cdFxufVxuXG5leHBvcnQgZGVmYXVsdCBTb3J0YWJsZVRhYmxlSGVhZGluZzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGZpbmRET01Ob2RlIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IERyYWdTb3VyY2UsIERyb3BUYXJnZXQgfSBmcm9tICdyZWFjdC1kbmQnO1xuXG5jb25zdCBzdHlsZSA9IHtcbiAgICBib3JkZXI6ICcxcHggZGFzaGVkIGdyYXknLFxuICAgIHBhZGRpbmc6ICcwLjVyZW0gMXJlbScsXG4gICAgbWFyZ2luQm90dG9tOiAnLjVyZW0nLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICBjdXJzb3I6ICdtb3ZlJyxcbn07XG5cbmNvbnN0IHJvd1NvdXJjZSA9IHtcbiAgICBiZWdpbkRyYWcocHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBwcm9wcy5pZCxcbiAgICAgICAgICAgIGluZGV4OiBwcm9wcy5pbmRleCxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGVuZERyYWcocHJvcHMsIG1vbml0b3IpIHtcbiAgICAgICAgaWYgKG1vbml0b3IuZGlkRHJvcCgpKSB7XG4gICAgICAgICAgICBwcm9wcy5kcm9wQ2FyZChwcm9wcy5pZCwgcHJvcHMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuY29uc3Qgcm93VGFyZ2V0ID0ge1xuICAgIGhvdmVyKHByb3BzLCBtb25pdG9yLCBjb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgZHJhZ0luZGV4ID0gbW9uaXRvci5nZXRJdGVtKCkuaW5kZXg7XG4gICAgICAgIGNvbnN0IGhvdmVySW5kZXggPSBwcm9wcy5pbmRleDtcblxuICAgICAgICAvLyBEb24ndCByZXBsYWNlIGl0ZW1zIHdpdGggdGhlbXNlbHZlc1xuICAgICAgICBpZiAoZHJhZ0luZGV4ID09PSBob3ZlckluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZXRlcm1pbmUgcmVjdGFuZ2xlIG9uIHNjcmVlblxuICAgICAgICBjb25zdCBob3ZlckJvdW5kaW5nUmVjdCA9IGZpbmRET01Ob2RlKGNvbXBvbmVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgLy8gR2V0IHZlcnRpY2FsIG1pZGRsZVxuICAgICAgICBjb25zdCBob3Zlck1pZGRsZVkgPSAoaG92ZXJCb3VuZGluZ1JlY3QuYm90dG9tIC0gaG92ZXJCb3VuZGluZ1JlY3QudG9wKSAvIDI7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIG1vdXNlIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IGNsaWVudE9mZnNldCA9IG1vbml0b3IuZ2V0Q2xpZW50T2Zmc2V0KCk7XG5cbiAgICAgICAgLy8gR2V0IHBpeGVscyB0byB0aGUgdG9wXG4gICAgICAgIGNvbnN0IGhvdmVyQ2xpZW50WSA9IGNsaWVudE9mZnNldC55IC0gaG92ZXJCb3VuZGluZ1JlY3QudG9wO1xuXG4gICAgICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUgbW92ZSB3aGVuIHRoZSBtb3VzZSBoYXMgY3Jvc3NlZCBoYWxmIG9mIHRoZSBpdGVtcyBoZWlnaHRcbiAgICAgICAgLy8gV2hlbiBkcmFnZ2luZyBkb3dud2FyZHMsIG9ubHkgbW92ZSB3aGVuIHRoZSBjdXJzb3IgaXMgYmVsb3cgNTAlXG4gICAgICAgIC8vIFdoZW4gZHJhZ2dpbmcgdXB3YXJkcywgb25seSBtb3ZlIHdoZW4gdGhlIGN1cnNvciBpcyBhYm92ZSA1MCVcblxuICAgICAgICAvLyBEcmFnZ2luZyBkb3dud2FyZHNcbiAgICAgICAgaWYgKGRyYWdJbmRleCA8IGhvdmVySW5kZXggJiYgaG92ZXJDbGllbnRZIDwgaG92ZXJNaWRkbGVZKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEcmFnZ2luZyB1cHdhcmRzXG4gICAgICAgIGlmIChkcmFnSW5kZXggPiBob3ZlckluZGV4ICYmIGhvdmVyQ2xpZW50WSA+IGhvdmVyTWlkZGxlWSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGltZSB0byBhY3R1YWxseSBwZXJmb3JtIHRoZSBhY3Rpb25cbiAgICAgICAgcHJvcHMubW92ZUNhcmQoZHJhZ0luZGV4LCBob3ZlckluZGV4KTtcblxuICAgICAgICAvLyBOb3RlOiB3ZSdyZSBtdXRhdGluZyB0aGUgbW9uaXRvciBpdGVtIGhlcmUhXG4gICAgICAgIC8vIEdlbmVyYWxseSBpdCdzIGJldHRlciB0byBhdm9pZCBtdXRhdGlvbnMsXG4gICAgICAgIC8vIGJ1dCBpdCdzIGdvb2QgaGVyZSBmb3IgdGhlIHNha2Ugb2YgcGVyZm9ybWFuY2VcbiAgICAgICAgLy8gdG8gYXZvaWQgZXhwZW5zaXZlIGluZGV4IHNlYXJjaGVzLlxuICAgICAgICBtb25pdG9yLmdldEl0ZW0oKS5pbmRleCA9IGhvdmVySW5kZXg7XG4gICAgfSxcbn07XG5cbmNsYXNzIFNvcnRhYmxlVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IHRleHQsIGlzRHJhZ2dpbmcsIGNvbm5lY3REcmFnU291cmNlLCBjb25uZWN0RHJvcFRhcmdldCwgY2hpbGRyZW4sIGV2ZW4sIGlkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBvcGFjaXR5ID0gaXNEcmFnZ2luZyA/IDAgOiAxO1xuXG4gICAgICAgIHJldHVybiBjb25uZWN0RHJhZ1NvdXJjZShjb25uZWN0RHJvcFRhcmdldChcbiAgICAgICAgICAgIDx0ciBpZD17aWR9IHJvbGU9XCJyb3dcIiBjbGFzc05hbWU9e2V2ZW4gPyAnZXZlbicgOiAnb2RkJ30gc3R5bGU9e3sgLi4uc3R5bGUsIG9wYWNpdHkgfX0+XG5cdFx0ICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L3RyPixcbiAgICAgICAgKSk7XG4gICAgfVxufVxuXG5Tb3J0YWJsZVRhYmxlUm93LnByb3BUeXBlcyA9IHtcbiAgICBjb25uZWN0RHJhZ1NvdXJjZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjb25uZWN0RHJvcFRhcmdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBpbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGlzRHJhZ2dpbmc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgaWQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBtb3ZlQ2FyZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0XG4gICAgRHJhZ1NvdXJjZSgnY2FyZCcsIHJvd1NvdXJjZSwgKGNvbm5lY3QsIG1vbml0b3IpID0+ICh7XG4gICAgICAgIGNvbm5lY3REcmFnU291cmNlOiBjb25uZWN0LmRyYWdTb3VyY2UoKSxcbiAgICAgICAgaXNEcmFnZ2luZzogbW9uaXRvci5pc0RyYWdnaW5nKCksXG4gICAgICAgIH0pKShcbiAgICBEcm9wVGFyZ2V0KCdjYXJkJywgcm93VGFyZ2V0LCBjb25uZWN0ID0+ICh7XG4gICAgICAgIGNvbm5lY3REcm9wVGFyZ2V0OiBjb25uZWN0LmRyb3BUYXJnZXQoKSxcbiAgICAgICAgfSkpXG4gICAgKFNvcnRhYmxlVGFibGVSb3cpKTtcblxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWN0aW9uc1RhYmxlQ2VsbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24gPSB0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24gPSB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24uYmluZCh0aGlzKTtcblxuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGxldCB7aWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzcGxheShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVBY3Rpb24oYWN0aW9uLCBpZCwgZXYpIHtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgYWN0aW9uKGlkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7YWN0aW9ucywgaWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCIga2V5PVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdkZWxldGUnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5kZWxldGUpICAmJlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9XCJkZWxldGVcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGFjdGlvbnMuZGVsZXRlLm9uQ2xpY2ssIGlkKX0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdHJhc2gtbyBkZWxldGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7YWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY3VzdG9tJykgJiYgYWN0aW9ucy5jdXN0b20ubWFwKGEgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGEpICYmXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD17YS50b29sdGlwfSBrZXk9eydjdXN0b21fJyArIGEubmFtZX0gb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhLm9uQ2xpY2ssIGlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YS5pY29ufVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgfVxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVGFibGVIZWFkaW5nIGZyb20gJy4vVGFibGVIZWFkaW5nJztcbmltcG9ydCBUYWJsZUNlbGwgZnJvbSAnLi9UYWJsZUNlbGwnO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gJy4vVGFibGVSb3cnO1xuaW1wb3J0IEFjdGlvbnNUYWJsZUNlbGwgZnJvbSAnLi9BY3Rpb25zVGFibGVDZWxsJztcbmltcG9ydCBSZWFjdFRvb2x0aXAgZnJvbSAncmVhY3QtdG9vbHRpcCdcblxuaW1wb3J0ICcuL3RhYmxlLmNzcyc7XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICAgIHNvcnRGdW5jOiAoYSxiKSA9PiAoYSA8IGIgPyAtMSA6IChhID4gYiA/IDEgOiAwKSksXG4gICAgc29ydGFibGU6IGZhbHNlLFxuICAgIHNvcnRDb2w6IDAsXG4gICAgc29ydERpcjogMSxcbiAgICBjb2xXaWR0aDogJydcbn1cblxuY29uc3QgY3JlYXRlUm93ID0gKHJvdywgY29sdW1ucywgYWN0aW9ucykgPT4ge1xuXG4gICAgdmFyIGFjdGlvbl9idXR0b25zID0gJyc7XG4gICAgdmFyIGNlbGxzID0gY29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgIGlmKGNvbC5oYXNPd25Qcm9wZXJ0eShcInJlbmRlclwiKSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBrZXk9eydjZWxsXycraX0gPlxuICAgICAgICAgICAgICAgICAgICB7Y29sLnJlbmRlcihyb3csIHJvd1tjb2wuY29sdW1uS2V5XSl9XG4gICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8VGFibGVDZWxsIGtleT17J2NlbGxfJytpfSA+XG4gICAgICAgICAgICAgICAge3Jvd1tjb2wuY29sdW1uS2V5XX1cbiAgICAgICAgICAgIDwvVGFibGVDZWxsPlxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgY2VsbHMucHVzaCg8QWN0aW9uc1RhYmxlQ2VsbCBrZXk9J2FjdGlvbnNfY2VsbCcgaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17YWN0aW9uc30gLz4pO1xuICAgIH1cblxuICAgIHJldHVybiBjZWxscztcbn07XG5cbmNvbnN0IGdldFNvcnREaXIgPSAoY29sdW1uS2V5LCBjb2x1bW5JbmRleCwgc29ydENvbCwgc29ydERpcikgPT4ge1xuICAgIGlmKGNvbHVtbktleSAmJiAoY29sdW1uS2V5ID09PSBzb3J0Q29sKSkge1xuICAgICAgICByZXR1cm4gc29ydERpcjtcbiAgICB9XG4gICAgaWYoc29ydENvbCA9PT0gY29sdW1uSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHNvcnREaXI7XG4gICAgfVxuICAgIHJldHVybiBudWxsXG59O1xuXG5jb25zdCBUYWJsZSA9IChwcm9wcykgPT4ge1xuICAgIGxldCB7b3B0aW9ucywgY29sdW1uc30gPSBwcm9wcztcbiAgICBsZXQgdGFibGVDbGFzcyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gb3B0aW9ucy5jbGFzc05hbWUgOiAnJztcbiAgICB0YWJsZUNsYXNzICs9IChvcHRpb25zLmFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSkgPyAnIHRhYmxlLWhvdmVyJyA6ICcnO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e1widGFibGUgdGFibGUtc3RyaXBlZCBkYXRhVGFibGUgXCIgKyB0YWJsZUNsYXNzfT5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydENvbCA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0Q29sICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydENvbCA6IGRlZmF1bHRzLnNvcnRDb2w7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydERpciA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0RGlyICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydERpciA6IGRlZmF1bHRzLnNvcnREaXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydEZ1bmMgPSAodHlwZW9mIG9wdGlvbnMuc29ydEZ1bmMgIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5zb3J0RnVuYyA6IGRlZmF1bHRzLnNvcnRGdW5jO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRhYmxlID0gKHR5cGVvZiBjb2wuc29ydGFibGUgIT0gJ3VuZGVmaW5lZCcpID8gY29sLnNvcnRhYmxlIDogZGVmYXVsdHMuc29ydGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sV2lkdGggPSAodHlwZW9mIGNvbC53aWR0aCAhPSAndW5kZWZpbmVkJykgPyBjb2wud2lkdGggOiBkZWZhdWx0cy5jb2xXaWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVIZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU29ydD17cHJvcHMub25Tb3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RGlyPXtnZXRTb3J0RGlyKGNvbC5jb2x1bW5LZXksIGksIHNvcnRDb2wsIHNvcnREaXIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZT17c29ydGFibGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRGdW5jPXtzb3J0RnVuY31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbktleT17Y29sLmNvbHVtbktleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9e2NvbFdpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9eydoZWFkaW5nXycraX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAge29wdGlvbnMuYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlSGVhZGluZyBrZXk9J2FjdGlvbnNfaGVhZGluZycgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmFjdGlvbnNIZWFkZXIgfHwgJyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubGVuZ3RoID4gMCAmJiBwcm9wcy5kYXRhLm1hcCgocm93LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocm93KSAmJiByb3cubGVuZ3RoICE9PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBhdCByb3cgJHtpfSBpcyAke3Jvdy5sZW5ndGh9LiBJdCBzaG91bGQgYmUgJHtjb2x1bW5zLmxlbmd0aH0uYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ciBrZXk9eydyb3dfJytpfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBldmVuPXtpJTIgPT09IDB9IGtleT17J3Jvd18nK2l9IGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e29wdGlvbnMuYWN0aW9uc30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVSb3cocm93LCBjb2x1bW5zLCBvcHRpb25zLmFjdGlvbnMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDxSZWFjdFRvb2x0aXAgZGVsYXlTaG93PXsxMH0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJztcblxuY29uc3QgVGFibGVDZWxsID0gKHByb3BzKSA9PiB7XG4gICAgbGV0IHtjaGlsZHJlbn0gPSBwcm9wcztcblx0bGV0IHZhbHVlID0gJyc7XG5cdGlmKGNoaWxkcmVuKSB7XG5cdCAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG5cdCAgICAgICAgdmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YWx1ZSA9IDxSYXdIVE1MPntjaGlsZHJlbi50b1N0cmluZygpfTwvUmF3SFRNTD5cbiAgICAgICAgfVxuICAgIH1cblxuXHRyZXR1cm4gKFxuXHRcdDx0ZCB7Li4ucHJvcHN9PlxuICAgICAgICAgICAge3ZhbHVlfVxuXHRcdDwvdGQ+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUNlbGw7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuY2xhc3MgVGFibGVIZWFkaW5nIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuXHRjb25zdHJ1Y3RvciAocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy5oYW5kbGVTb3J0ID0gdGhpcy5oYW5kbGVTb3J0LmJpbmQodGhpcyk7XG5cdH1cblxuXHRnZXRTb3J0Q2xhc3MoKSB7XG5cblx0XHRpZiAoIXRoaXMucHJvcHMuc29ydGFibGUpIHJldHVybiBudWxsO1xuXG5cdFx0c3dpdGNoKHRoaXMucHJvcHMuc29ydERpcikge1xuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRyZXR1cm4gJ3NvcnRpbmdfYXNjJztcblx0XHRcdGNhc2UgLTE6XG5cdFx0XHRcdHJldHVybiAnc29ydGluZ19kZXNjJztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb3BzLnNvcnRhYmxlID8gJ3NvcnRpbmcnIDogbnVsbFxuXHRcdH1cblx0fVxuXG5cdGhhbmRsZVNvcnQoZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRpZighdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnb25Tb3J0JykgfHwgIXRoaXMucHJvcHMuc29ydGFibGUpIHJldHVybjtcblxuXHRcdHRoaXMucHJvcHMub25Tb3J0KFxuXHRcdFx0dGhpcy5wcm9wcy5jb2x1bW5JbmRleCxcblx0XHRcdHRoaXMucHJvcHMuY29sdW1uS2V5LFxuXHRcdFx0dGhpcy5wcm9wcy5zb3J0RGlyID8gdGhpcy5wcm9wcy5zb3J0RGlyKi0xIDogMSxcblx0XHRcdHRoaXMucHJvcHMuc29ydEZ1bmNcblx0XHQpO1xuXHR9XG5cblx0cmVuZGVyICgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PHRoIG9uQ2xpY2s9e3RoaXMuaGFuZGxlU29ydH1cblx0XHRcdFx0Y2xhc3NOYW1lPXt0aGlzLmdldFNvcnRDbGFzcygpfVxuXHRcdFx0XHR3aWR0aD17dGhpcy5wcm9wcy53aWR0aH1cblx0XHRcdFx0PlxuXHRcdFx0XHR7dGhpcy5wcm9wcy5jaGlsZHJlbn1cblx0XHRcdDwvdGg+XG5cdFx0KTtcdFxuXHR9XG5cdFxufVxuXG5UYWJsZUhlYWRpbmcucHJvcFR5cGVzID0ge1xuXHRvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHRzb3J0RGlyOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRjb2x1bW5JbmRleDogUHJvcFR5cGVzLm51bWJlcixcblx0Y29sdW1uS2V5OiBQcm9wVHlwZXMuYW55LFxuXHRzb3J0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cdHNvcnRGdW5jOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkaW5nOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUVkaXQgPSB0aGlzLmhhbmRsZUVkaXQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbikge1xuICAgICAgICBsZXQge2lkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFhY3Rpb24uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc3BsYXkoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRWRpdChpZCwgZXYpIHtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmVkaXQub25DbGljayhpZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2V2ZW4sIGFjdGlvbnMsIGlkLCBjaGlsZHJlbn0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgY2FuRWRpdCA9IChhY3Rpb25zLmhhc093blByb3BlcnR5KCdlZGl0JykgJiYgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbnMuZWRpdCkpO1xuICAgICAgICBsZXQgcm93Q2xhc3MgPSBldmVuID8gJ2V2ZW4nIDogJ29kZCc7XG5cbiAgICAgICAgaWYgKGNhbkVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHRyIHJvbGU9XCJyb3dcIiBjbGFzc05hbWU9e3Jvd0NsYXNzICsgXCIgY2FuLWVkaXRcIn0gb25DbGljaz17dGhpcy5oYW5kbGVFZGl0LmJpbmQodGhpcywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dHIgcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17cm93Q2xhc3N9PlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IHVzZUZpdFRleHQgPSAobWF4U2l6ZSA9IDUwLCBtaW5TaXplID0gMTMwKSA9PiB7XG4gICAgY29uc3QgTUlOX0ZPTlRfU0laRSA9IG1pblNpemU7XG4gICAgY29uc3QgTUFYX0ZPTlRfU0laRSA9IG1heFNpemU7XG4gICAgY29uc3QgUkVTT0xVVElPTiA9IDU7XG5cbiAgICBjb25zdCByZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKHtcbiAgICAgICAgZm9udFNpemU6IE1BWF9GT05UX1NJWkUsXG4gICAgICAgIGZvbnRTaXplUHJldjogTUlOX0ZPTlRfU0laRSxcbiAgICAgICAgZm9udFNpemVNYXg6IE1BWF9GT05UX1NJWkUsXG4gICAgICAgIGZvbnRTaXplTWluOiBNSU5fRk9OVF9TSVpFLFxuICAgIH0pO1xuICAgIGNvbnN0IHsgZm9udFNpemUsIGZvbnRTaXplTWF4LCBmb250U2l6ZU1pbiwgZm9udFNpemVQcmV2IH0gPSBzdGF0ZTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzRG9uZSA9IE1hdGguYWJzKGZvbnRTaXplIC0gZm9udFNpemVQcmV2KSA8PSBSRVNPTFVUSU9OO1xuICAgICAgICBjb25zdCBpc092ZXJmbG93ID1cbiAgICAgICAgICAgICEhcmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIChyZWYuY3VycmVudC5zY3JvbGxIZWlnaHQgPiByZWYuY3VycmVudC5vZmZzZXRIZWlnaHQgfHxcbiAgICAgICAgICAgICAgICByZWYuY3VycmVudC5zY3JvbGxXaWR0aCA+IHJlZi5jdXJyZW50Lm9mZnNldFdpZHRoKTtcbiAgICAgICAgY29uc3QgaXNBc2MgPSBmb250U2l6ZSA+IGZvbnRTaXplUHJldjtcblxuICAgICAgICAvLyByZXR1cm4gaWYgdGhlIGZvbnQgc2l6ZSBoYXMgYmVlbiBhZGp1c3RlZCBcImVub3VnaFwiIChjaGFuZ2Ugd2l0aGluIFJFU09MVVRJT04pXG4gICAgICAgIC8vIHJlZHVjZSBmb250IHNpemUgYnkgb25lIGluY3JlbWVudCBpZiBpdCdzIG92ZXJmbG93aW5nXG4gICAgICAgIGlmIChpc0RvbmUpIHtcbiAgICAgICAgICAgIGlmIChpc092ZXJmbG93KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9udFNpemVOZXcgPVxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZVByZXYgPCBmb250U2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBmb250U2l6ZVByZXZcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZm9udFNpemUgLSAoZm9udFNpemVQcmV2IC0gZm9udFNpemUpO1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplTmV3LFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZU1heCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemVNaW4sXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplUHJldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJpbmFyeSBzZWFyY2ggdG8gYWRqdXN0IGZvbnQgc2l6ZVxuICAgICAgICBsZXQgZGVsdGE7XG4gICAgICAgIGxldCBuZXdNYXggPSBmb250U2l6ZU1heDtcbiAgICAgICAgbGV0IG5ld01pbiA9IGZvbnRTaXplTWluO1xuICAgICAgICBpZiAoaXNPdmVyZmxvdykge1xuICAgICAgICAgICAgZGVsdGEgPSBpc0FzYyA/IGZvbnRTaXplUHJldiAtIGZvbnRTaXplIDogZm9udFNpemVNaW4gLSBmb250U2l6ZTtcbiAgICAgICAgICAgIG5ld01heCA9IE1hdGgubWluKGZvbnRTaXplTWF4LCBmb250U2l6ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWx0YSA9IGlzQXNjID8gZm9udFNpemVNYXggLSBmb250U2l6ZSA6IGZvbnRTaXplUHJldiAtIGZvbnRTaXplO1xuICAgICAgICAgICAgbmV3TWluID0gTWF0aC5tYXgoZm9udFNpemVNaW4sIGZvbnRTaXplKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBmb250U2l6ZTogZm9udFNpemUgKyBkZWx0YSAvIDIsXG4gICAgICAgICAgICBmb250U2l6ZU1heDogbmV3TWF4LFxuICAgICAgICAgICAgZm9udFNpemVNaW46IG5ld01pbixcbiAgICAgICAgICAgIGZvbnRTaXplUHJldjogZm9udFNpemUsXG4gICAgICAgIH0pO1xuICAgIH0sIFtmb250U2l6ZSwgZm9udFNpemVNYXgsIGZvbnRTaXplTWluLCBmb250U2l6ZVByZXYsIHJlZl0pO1xuXG4gICAgcmV0dXJuIHsgZm9udFNpemU6IGAke2ZvbnRTaXplfSVgLCBsaW5lSGVpZ2h0OiBgJHtmb250U2l6ZSAtIDEwfSVgLCByZWYgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUZpdFRleHQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIwIE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdmlkZW9qcyBmcm9tICd2aWRlby5qcydcblxuaW1wb3J0ICd2aWRlby5qcy9kaXN0L3ZpZGVvLWpzLmNzcydcblxuY29uc3QgWW91dHViZVZpZGVvQ29tcG9uZW50ID0gKHsgdmlkZW9TcmNVUkwsIHZpZGVvVGl0bGUgfSkgPT4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwidmlkZW9cIj5cbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjcyMFwiXG4gICAgICAgICAgICB0aXRsZT17dmlkZW9UaXRsZX1cbiAgICAgICAgICAgIHNyYz17dmlkZW9TcmNVUkx9XG4gICAgICAgICAgICBmcmFtZUJvcmRlcj1cIjBcIlxuICAgICAgICAgICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgICAgICAgICBhbGxvd0Z1bGxTY3JlZW5cbiAgICAgICAgLz5cbiAgICA8L2Rpdj5cbik7XG5cblxuY2xhc3MgTGl2ZVZpZGVvUGxheWVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLnBsYXllciA9IHZpZGVvanModGhpcy52aWRlb05vZGUsIHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICBpZiAodGhpcy5wbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgZGF0YS12anMtcGxheWVyPVwiXCI+XG4gICAgICAgICAgICAgICAgPHZpZGVvIHJlZj17bm9kZSA9PiB0aGlzLnZpZGVvTm9kZSA9IG5vZGV9IGNsYXNzTmFtZT1cInZpZGVvLWpzIHZqcy1iaWctcGxheS1jZW50ZXJlZFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmNvbnN0IFZpZGVvU3RyZWFtID0gKHsgdXJsIH0pID0+IHtcbiAgICBsZXQgbGF5b3V0ID0gbnVsbDtcbiAgICBjb25zdCBjaGVja0xpdmVWaWRlbyA9ICgpID0+IHtcbiAgICAgICAgbGV0IGlzTGl2ZVZpZGVvID0gbnVsbDtcbiAgICAgICAgdXJsLm1hdGNoKC8ubTN1OC8pID8gaXNMaXZlVmlkZW8gPSB0cnVlIDogaXNMaXZlVmlkZW8gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGlzTGl2ZVZpZGVvO1xuICAgIH07XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICAgIGlmIChjaGVja0xpdmVWaWRlbygpKSB7XG4gICAgICAgICAgICBjb25zdCB2aWRlb0pzT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBhdXRvcGxheTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250cm9sczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmbHVpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzb3VyY2VzOiBbe1xuICAgICAgICAgICAgICAgICAgICBzcmM6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL3gtbXBlZ1VSTCdcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGF5b3V0ID0gPExpdmVWaWRlb1BsYXllciB7Li4udmlkZW9Kc09wdGlvbnN9IC8+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGF5b3V0ID0gPFlvdXR1YmVWaWRlb0NvbXBvbmVudCB2aWRlb1NyY1VSTD17dXJsfSAvPjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxheW91dCA9IDxzcGFuIGNsYXNzTmFtZT1cIm5vLXZpZGVvXCI+Tm8gdmlkZW8gVVJMIFByb3ZpZGVkPC9zcGFuPjtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF5b3V0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVmlkZW9TdHJlYW07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZW4uanNvblwiOiBcIi4vc3JjL2kxOG4vZW4uanNvblwiLFxuXHRcIi4vZXMuanNvblwiOiBcIi4vc3JjL2kxOG4vZXMuanNvblwiLFxuXHRcIi4vemguanNvblwiOiBcIi4vc3JjL2kxOG4vemguanNvblwiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuL3NyYy9pMThuIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzb24kXCI7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgcmVxdWVzdCBmcm9tICdzdXBlcmFnZW50JztcbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCI7XG5sZXQgaHR0cCA9IHJlcXVlc3Q7XG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5pbXBvcnQgVCBmcm9tIFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIjtcbmltcG9ydCB7b2JqZWN0VG9RdWVyeVN0cmluZywgaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSwgc2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUsIGdldEN1cnJlbnRQYXRoTmFtZX0gZnJvbSAnLi9tZXRob2RzJztcbmltcG9ydCB7ZG9Mb2dpbiwgaW5pdExvZ091dCwgQ0xFQVJfU0VTU0lPTl9TVEFURSwgTE9HT1VUX1VTRVJ9IGZyb20gJy4uL2NvbXBvbmVudHMvc2VjdXJpdHkvYWN0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBHRU5FUklDX0VSUk9SICA9IFwiWWlrZXMuIFNvbWV0aGluZyBzZWVtcyB0byBiZSBicm9rZW4uIE91ciB3ZWIgdGVhbSBoYXMgYmVlbiBub3RpZmllZCwgYW5kIHdlIGFwb2xvZ2l6ZSBmb3IgdGhlIGluY29udmVuaWVuY2UuXCI7XG5leHBvcnQgY29uc3QgUkVTRVRfTE9BRElORyAgPSAnUkVTRVRfTE9BRElORyc7XG5leHBvcnQgY29uc3QgU1RBUlRfTE9BRElORyAgPSAnU1RBUlRfTE9BRElORyc7XG5leHBvcnQgY29uc3QgU1RPUF9MT0FESU5HICAgPSAnU1RPUF9MT0FESU5HJztcbmV4cG9ydCBjb25zdCBWQUxJREFURSAgICAgICA9ICdWQUxJREFURSc7XG5leHBvcnQgY29uc3QgQ0xFQVJfTUVTU0FHRSAgPSAnQ0xFQVJfTUVTU0FHRSc7XG5leHBvcnQgY29uc3QgU0hPV19NRVNTQUdFICAgPSAnU0hPV19NRVNTQUdFJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGlvbiA9IHR5cGUgPT4gcGF5bG9hZCA9PiAoe1xuICAgIHR5cGUsXG4gICAgcGF5bG9hZFxufSk7XG5cbmV4cG9ydCBjb25zdCByZXNldExvYWRpbmcgPSBjcmVhdGVBY3Rpb24oUkVTRVRfTE9BRElORyk7XG5leHBvcnQgY29uc3Qgc3RhcnRMb2FkaW5nID0gY3JlYXRlQWN0aW9uKFNUQVJUX0xPQURJTkcpO1xuZXhwb3J0IGNvbnN0IHN0b3BMb2FkaW5nICA9IGNyZWF0ZUFjdGlvbihTVE9QX0xPQURJTkcpO1xuXG5jb25zdCB4aHJzID0ge307XG5cbmNvbnN0IGNhbmNlbCA9IChrZXkpID0+IHtcbiAgICBpZih4aHJzW2tleV0pIHtcbiAgICAgICAgeGhyc1trZXldLmFib3J0KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBhYm9ydGVkIHJlcXVlc3QgJHtrZXl9YCk7XG4gICAgICAgIGRlbGV0ZSB4aHJzW2tleV07XG4gICAgfVxufVxuXG5jb25zdCBzY2hlZHVsZSA9IChrZXksIHJlcSkgPT4ge1xuICAgIC8vIGNvbnNvbGUubG9nKGBzY2hlZHVsaW5nICR7a2V5fWApO1xuICAgIHhocnNba2V5XSA9IHJlcTtcbn07XG5cbmNvbnN0IGlzT2JqZWN0RW1wdHkgPSAob2JqKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0IDtcbn1cblxuZXhwb3J0IGNvbnN0IGF1dGhFcnJvckhhbmRsZXIgPSAoZXJyLCByZXMpID0+IChkaXNwYXRjaCwgc3RhdGUpID0+IHtcbiAgICBsZXQgY29kZSA9IGVyci5zdGF0dXM7XG4gICAgbGV0IG1zZyA9ICcnO1xuXG4gICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICBsZXQgZXJyb3JfbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0VSUk9SJyxcbiAgICAgICAgICAgICAgICBodG1sOiBULnRyYW5zbGF0ZShcImVycm9ycy51c2VyX25vdF9hdXRoelwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBkaXNwYXRjaChzaG93TWVzc2FnZSggZXJyb3JfbWVzc2FnZSwgaW5pdExvZ091dCApKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICAgIGxldCBjdXJyZW50TG9jYXRpb24gPSBnZXRDdXJyZW50UGF0aE5hbWUoKTtcbiAgICAgICAgICAgIGxldCBjbGVhcmluZ19zZXNzaW9uX3N0YXRlID0gaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSgpO1xuXG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogQ0xFQVJfU0VTU0lPTl9TVEFURSxcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiB7fVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmKCFjbGVhcmluZ19zZXNzaW9uX3N0YXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2F1dGhFcnJvckhhbmRsZXIgNDAxIC0gcmUgbG9naW4nKTtcbiAgICAgICAgICAgICAgICBkb0xvZ2luKGN1cnJlbnRMb2NhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDQ6XG4gICAgICAgICAgICBtc2cgPSBcIlwiO1xuXG4gICAgICAgICAgICBpZiAoZXJyLnJlc3BvbnNlLmJvZHkgJiYgZXJyLnJlc3BvbnNlLmJvZHkubWVzc2FnZSkgbXNnID0gZXJyLnJlc3BvbnNlLmJvZHkubWVzc2FnZTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGVyci5yZXNwb25zZS5lcnJvciAmJiBlcnIucmVzcG9uc2UuZXJyb3IubWVzc2FnZSkgbXNnID0gZXJyLnJlc3BvbnNlLmVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICBlbHNlIG1zZyA9IGVyci5tZXNzYWdlO1xuXG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJOb3QgRm91bmRcIiwgbXNnLCBcIndhcm5pbmdcIik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQxMjpcbiAgICAgICAgICAgIGZvciAodmFyIFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlcnIucmVzcG9uc2UuYm9keS5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnICs9IGtleSArICc6ICc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbXNnICs9IHZhbHVlICsgJzxicj4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgU3dhbC5maXJlKFwiVmFsaWRhdGlvbiBlcnJvclwiLCBtc2csIFwid2FybmluZ1wiKTtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBWQUxJREFURSxcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiB7ZXJyb3JzOiBlcnIucmVzcG9uc2UuYm9keS5lcnJvcnN9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgVC50cmFuc2xhdGUoXCJlcnJvcnMuc2VydmVyX2Vycm9yXCIpLCBcImVycm9yXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFJlcXVlc3QgPShcbiAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICBlbmRwb2ludCxcbiAgICBlcnJvckhhbmRsZXIgPSBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcyA9IHt9KSA9PiAoZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgbGV0IGtleSA9IHVybC50b1N0cmluZygpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgY2FuY2VsKGtleSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmVxID0gaHR0cC5nZXQodXJsLnRvU3RyaW5nKCkpXG4gICAgICAgIC50aW1lb3V0KHtcbiAgICAgICAgICAgIHJlc3BvbnNlOiA2MDAwMCxcbiAgICAgICAgICAgIGRlYWRsaW5lOiA2MDAwMCxcbiAgICAgICAgfSlcbiAgICAgICAgLmVuZChyZXNwb25zZUhhbmRsZXIoZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QpKVxuXG4gICAgICAgIHNjaGVkdWxlKGtleSwgcmVxKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwdXRSZXF1ZXN0ID0gKFxuICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgIHJlY2VpdmVBY3Rpb25DcmVhdG9yLFxuICAgIGVuZHBvaW50LFxuICAgIHBheWxvYWQsXG4gICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKCBkaXNwYXRjaCwgc3RhdGUpID0+IHtcblxuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZihwYXlsb2FkID09IG51bGwpXG4gICAgICAgICAgICBwYXlsb2FkID0ge307XG4gICAgICAgIGh0dHAucHV0KHVybC50b1N0cmluZygpKVxuICAgICAgICAgICAgLnNlbmQocGF5bG9hZClcbiAgICAgICAgICAgIC5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSlcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZXF1ZXN0ID0gKFxuICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgIHJlY2VpdmVBY3Rpb25DcmVhdG9yLFxuICAgIGVuZHBvaW50LFxuICAgIHBheWxvYWQsXG4gICAgZXJyb3JIYW5kbGVyICA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zKSA9PiAoZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmKHBheWxvYWQgPT0gbnVsbClcbiAgICAgICAgICAgIHBheWxvYWQgPSB7fTtcblxuICAgICAgICBodHRwLmRlbGV0ZSh1cmwpXG4gICAgICAgICAgICAuc2VuZChwYXlsb2FkKVxuICAgICAgICAgICAgLmVuZChyZXNwb25zZUhhbmRsZXIoZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwb3N0UmVxdWVzdCA9IChcbiAgICAgICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgICAgIHJlY2VpdmVBY3Rpb25DcmVhdG9yLFxuICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICAgICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zID0ge30pID0+IChkaXNwYXRjaCwgc3RhdGUpID0+IHtcblxuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgIGxldCByZXF1ZXN0ID0gaHR0cC5wb3N0KHVybCk7XG5cbiAgICAgICAgaWYocGF5bG9hZCAhPSBudWxsKVxuICAgICAgICAgICAgcmVxdWVzdC5zZW5kKHBheWxvYWQpO1xuICAgICAgICBlbHNlIC8vIHRvIGJlIGEgc2ltcGxlIENPUlMgcmVxdWVzdFxuICAgICAgICAgICAgcmVxdWVzdC5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG5cbiAgICAgICAgcmVxdWVzdC5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcG9zdEZpbGUgPSAoXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgZmlsZSxcbiAgICBmaWxlTWV0YWRhdGEgPSB7fSxcbiAgICBlcnJvckhhbmRsZXIgPSBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcyA9IHt9KSA9PiAoZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICBjb25zdCByZXEgPSBodHRwLnBvc3QodXJsKVxuICAgICAgICAgICAgICAgICAgICAuYXR0YWNoKCdmaWxlJywgZmlsZSk7XG5cbiAgICAgICAgaWYoIWlzT2JqZWN0RW1wdHkoZmlsZU1ldGFkYXRhKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU1ldGFkYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmaWxlTWV0YWRhdGFba2V5XTtcbiAgICAgICAgICAgICAgICByZXEuZmllbGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcS5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHV0RmlsZSA9IChcbiAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICBlbmRwb2ludCxcbiAgICBmaWxlID0gbnVsbCxcbiAgICBmaWxlTWV0YWRhdGEgPSB7fSxcbiAgICBlcnJvckhhbmRsZXIgPSBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcyA9IHt9KSA9PiAoZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICBjb25zdCByZXEgPSBodHRwLnB1dCh1cmwpO1xuXG4gICAgICAgIGlmKGZpbGUgIT0gbnVsbCl7XG4gICAgICAgICAgICByZXEuYXR0YWNoKCdmaWxlJywgZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNPYmplY3RFbXB0eShmaWxlTWV0YWRhdGEpKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlTWV0YWRhdGEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGZpbGVNZXRhZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgIHJlcS5maWVsZChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxLmVuZChyZXNwb25zZUhhbmRsZXIoZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0RXJyb3JIYW5kbGVyID0gKGVyciwgcmVzKSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgICBsZXQgYm9keSA9IHJlcy5ib2R5O1xuICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgaWYoYm9keSBpbnN0YW5jZW9mIE9iamVjdCl7XG4gICAgICAgIGlmKGJvZHkuaGFzT3duUHJvcGVydHkoJ21lc3NhZ2UnKSlcbiAgICAgICAgICAgIHRleHQgPSBib2R5Lm1lc3NhZ2U7XG4gICAgfVxuICAgIFN3YWwuZmlyZShyZXMuc3RhdHVzVGV4dCwgdGV4dCwgXCJlcnJvclwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlc3BvbnNlSGFuZGxlciA9XG4gICAgKCBkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCApID0+XG4gICAgKGVyciwgcmVzKSA9PiB7XG4gICAgaWYgKGVyciB8fCAhcmVzLm9rKSB7XG4gICAgICAgIGlmKGVycm9ySGFuZGxlcikge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyKGVyciwgcmVzKShkaXNwYXRjaCwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWplY3QoeyBlcnIsIHJlcywgZGlzcGF0Y2gsIHN0YXRlIH0pXG4gICAgfVxuICAgIGxldCBqc29uID0gcmVzLmJvZHk7XG4gICAgaWYodHlwZW9mIHJlY2VpdmVBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRpc3BhdGNoKHJlY2VpdmVBY3Rpb25DcmVhdG9yKHtyZXNwb25zZToganNvbn0pKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoe3Jlc3BvbnNlOiBqc29ufSk7XG4gICAgfVxuICAgIGRpc3BhdGNoKHJlY2VpdmVBY3Rpb25DcmVhdG9yKTtcbiAgICByZXR1cm4gcmVzb2x2ZSh7cmVzcG9uc2U6IGpzb259KTtcbn1cblxuXG5leHBvcnQgY29uc3QgZmV0Y2hFcnJvckhhbmRsZXIgPSAocmVzcG9uc2UpID0+IHtcbiAgICBsZXQgY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICBsZXQgbXNnID0gcmVzcG9uc2Uuc3RhdHVzVGV4dDtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgIFN3YWwuZmlyZShcIkVSUk9SXCIsIFQudHJhbnNsYXRlKFwiZXJyb3JzLnVzZXJfbm90X2F1dGh6XCIpLCBcIndhcm5pbmdcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJFUlJPUlwiLCBULnRyYW5zbGF0ZShcImVycm9ycy5zZXNzaW9uX2V4cGlyZWRcIiksIFwiZXJyb3JcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTI6XG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJFUlJPUlwiLCBtc2csIFwid2FybmluZ1wiKTtcbiAgICAgICAgY2FzZSA1MDA6XG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJFUlJPUlwiLCBULnRyYW5zbGF0ZShcImVycm9ycy5zZXJ2ZXJfZXJyb3JcIiksIFwiZXJyb3JcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZmV0Y2hSZXNwb25zZUhhbmRsZXIgPSAocmVzcG9uc2UpID0+IHtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2hvd01lc3NhZ2UgPSAoc2V0dGluZ3MsIGNhbGxiYWNrID0ge30pID0+IChkaXNwYXRjaCkgPT4ge1xuICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuXG4gICAgU3dhbC5maXJlKHNldHRpbmdzKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSAmJiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNob3dTdWNjZXNzTWVzc2FnZSA9IChodG1sKSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICBTd2FsLmZpcmUoe1xuICAgICAgICB0aXRsZTogVC50cmFuc2xhdGUoXCJnZW5lcmFsLmRvbmVcIiksXG4gICAgICAgIGh0bWw6IGh0bWwsXG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJ1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZG93bmxvYWRGaWxlQnlDb250ZW50ID0gKGZpbGVuYW1lLCBjb250ZW50LCBtaW1lKSA9PiB7XG4gICAgbGV0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGluay50ZXh0Q29udGVudCA9ICdkb3dubG9hZCc7XG4gICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgIGxpbmsuaHJlZiA9IGBkYXRhOiR7bWltZX0sJHtlbmNvZGVVUklDb21wb25lbnQoY29udGVudCl9YFxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxuICAgIGxpbmsuY2xpY2soKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0Q1NWID0gKGVuZHBvaW50LCBwYXJhbXMsIGZpbGVuYW1lLCBoZWFkZXIgPSBudWxsKSA9PiAoZGlzcGF0Y2gpID0+IHtcblxuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBkaXNwYXRjaChzdGFydExvYWRpbmcoKSk7XG5cbiAgICByZXR1cm4gZmV0Y2godXJsLnRvU3RyaW5nKCkpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoY3N2KSA9PiB7XG4gICAgICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcblxuICAgICAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgICAgIGNzdiA9IGhlYWRlciArICdcXHJcXHInICsgY3N2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG93bmxvYWRGaWxlQnlDb250ZW50KGZpbGVuYW1lLCBjc3YsICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmF3Q1NWID0gKGVuZHBvaW50LCBwYXJhbXMsIGhlYWRlciA9IG51bGwpID0+IHtcblxuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICByZXR1cm4gZmV0Y2godXJsLnRvU3RyaW5nKCkpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoY3N2KSA9PiB7XG4gICAgICAgICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgY3N2ID0gaGVhZGVyICsgJ1xcclxccicgKyBjc3Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY3N2O1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGVzY2FwZUZpbHRlclZhbHVlID0gKHZhbHVlKSA9PiB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8sL2csIFwiXFxcXCxcIik7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC87L2csIFwiXFxcXDtcIik7XG4gICAgcmV0dXJuIHZhbHVlO1xufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCI7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJ1xuXG5leHBvcnQgY29uc3QgZmluZEVsZW1lbnRQb3MgPSAob2JqKSA9PiB7XG4gICAgdmFyIGN1cnRvcCA9IC03MDtcbiAgICBpZiAob2JqLm9mZnNldFBhcmVudCkge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjdXJ0b3AgKz0gb2JqLm9mZnNldFRvcDtcbiAgICAgICAgfSB3aGlsZSAob2JqID0gb2JqLm9mZnNldFBhcmVudCk7XG4gICAgICAgIHJldHVybiBbY3VydG9wXTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZXBvY2hUb01vbWVudCA9IChhdGltZSkgPT4ge1xuICAgIGlmKCFhdGltZSkgcmV0dXJuIGF0aW1lO1xuICAgIGF0aW1lID0gYXRpbWUgKiAxMDAwO1xuICAgIHJldHVybiBtb21lbnQoYXRpbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGVwb2NoVG9Nb21lbnRUaW1lWm9uZSA9IChhdGltZSwgdGltZV96b25lKSA9PiB7XG4gICAgaWYoIWF0aW1lKSByZXR1cm4gYXRpbWU7XG4gICAgYXRpbWUgPSBhdGltZSAqIDEwMDA7XG4gICAgcmV0dXJuIG1vbWVudChhdGltZSkudHoodGltZV96b25lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRFcG9jaCA9IChhdGltZSwgZm9ybWF0ID0gJ00vRC9ZWVlZIGg6bW0gYScpID0+IHtcbiAgICBpZighYXRpbWUpIHJldHVybiBhdGltZTtcbiAgICByZXR1cm4gZXBvY2hUb01vbWVudChhdGltZSkuZm9ybWF0KGZvcm1hdCk7XG59O1xuXG5leHBvcnQgY29uc3Qgb2JqZWN0VG9RdWVyeVN0cmluZyA9IChvYmopID0+IHtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChzdHIgIT0gXCJcIikge1xuICAgICAgICAgICAgc3RyICs9IFwiJlwiO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBrZXkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChvYmpba2V5XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCYWNrVVJMID0gKCkgPT4ge1xuICAgIGxldCB1cmwgICAgICA9IFVSSSh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgbGV0IHF1ZXJ5ICAgID0gdXJsLnNlYXJjaCh0cnVlKTtcbiAgICBsZXQgZnJhZ21lbnQgPSB1cmwuZnJhZ21lbnQoKTtcbiAgICBsZXQgYmFja1VybCAgPSBxdWVyeS5oYXNPd25Qcm9wZXJ0eSgnQmFja1VybCcpID8gcXVlcnlbJ0JhY2tVcmwnXSA6IG51bGw7XG4gICAgaWYoZnJhZ21lbnQgIT0gbnVsbCAmJiBmcmFnbWVudCAhPSAnJyl7XG4gICAgICAgIGJhY2tVcmwgKz0gYCMke2ZyYWdtZW50fWA7XG4gICAgfVxuICAgIHJldHVybiBiYWNrVXJsO1xufTtcblxuXG5leHBvcnQgY29uc3QgZ2V0QXV0aENhbGxiYWNrID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9hdXRoL2NhbGxiYWNrYDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudExvY2F0aW9uID0gKCkgPT4ge1xuICAgIGxldCBsb2NhdGlvbiA9ICcnO1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuICAgICAgICAvLyBjaGVjayBpZiB3ZSBhcmUgb24gaWZyYW1lXG4gICAgICAgIGlmICh3aW5kb3cudG9wKVxuICAgICAgICAgICAgbG9jYXRpb24gPSB3aW5kb3cudG9wLmxvY2F0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYXRpb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T3JpZ2luID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGF0aE5hbWUgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50SHJlZiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFsbG93ZWRVc2VyR3JvdXBzID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuQUxMT1dFRF9VU0VSX0dST1VQUyB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRBUElCYXNlVXJsID0gKHJlbGF0aXZlVXJsKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICByZXR1cm4gYCR7d2luZG93LkFQSV9CQVNFX1VSTH0ke3JlbGF0aXZlVXJsfWA7XG4gICAgfVxuICAgIHJldHVybiBudWxsYGA7XG59O1xuXG5leHBvcnQgY29uc3QgcHV0T25Mb2NhbFN0b3JhZ2UgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RnJvbUxvY2FsU3RvcmFnZSA9IChrZXksIHJlbW92ZUl0KSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbGV0IHZhbCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgICBpZihyZW1vdmVJdCl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgZ2V0RnJvbUxvY2FsU3RvcmFnZSByZW1vdmluZyBrZXkgJHtrZXl9YCk7XG4gICAgICAgICAgICByZW1vdmVGcm9tTG9jYWxTdG9yYWdlKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZSA9IChrZXkpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBpc0NsZWFyaW5nU2Vzc2lvblN0YXRlID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb25DbGVhcmluZ1N0YXRlID0gKHZhbCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhcmluZ19zZXNzaW9uX3N0YXRlID0gdmFsO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50VXNlckxhbmd1YWdlID0gKCkgPT4ge1xuICAgIGxldCBsYW5ndWFnZSA9ICdlbic7XG4gICAgaWYodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbGFuZ3VhZ2UgPSAobmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdKSB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTtcbiAgICB9XG4gICAgcmV0dXJuIGxhbmd1YWdlO1xufTtcblxuZXhwb3J0IGNvbnN0IHNjcm9sbFRvRXJyb3IgPSAoZXJyb3JzKSA9PiB7XG4gICAgaWYoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0RXJyb3IgPSBPYmplY3Qua2V5cyhlcnJvcnMpWzBdO1xuICAgICAgICBjb25zdCBmaXJzdE5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaXJzdEVycm9yKTtcbiAgICAgICAgaWYgKGZpcnN0Tm9kZSkgd2luZG93LnNjcm9sbFRvKDAsIGZpbmRFbGVtZW50UG9zKGZpcnN0Tm9kZSkpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBoYXNFcnJvcnMgPSAoZmllbGQsIGVycm9ycykgPT4ge1xuICAgIGlmKGZpZWxkIGluIGVycm9ycykge1xuICAgICAgICByZXR1cm4gZXJyb3JzW2ZpZWxkXTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IHNoYWxsb3dFcXVhbCA9IChvYmplY3QxLCBvYmplY3QyKSA9PiB7XG4gICAgY29uc3Qga2V5czEgPSBPYmplY3Qua2V5cyhvYmplY3QxKTtcbiAgICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKG9iamVjdDIpO1xuXG4gICAgaWYgKGtleXMxLmxlbmd0aCAhPT0ga2V5czIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5czEpIHtcbiAgICAgICAgaWYgKG9iamVjdDFba2V5XSAhPT0gb2JqZWN0MltrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBhcnJheXNFcXVhbCA9IChhMSwgYTIpID0+XG4gICAgYTEubGVuZ3RoID09PSBhMi5sZW5ndGggJiYgYTEuZXZlcnkoKG8sIGlkeCkgPT4gc2hhbGxvd0VxdWFsKG8sIGEyW2lkeF0pKTtcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHkgPSAob2JqKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGJhc2U2NFVSTEVuY29kZSA9IChzdHIpID0+IHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgICAgICAucmVwbGFjZSgvPS9nLCAnJylcbn1cblxuZXhwb3J0IGNvbnN0IHNoYTI1NiA9IChidWZmZXIpID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGJ1ZmZlcikuZGlnZXN0KClcbn1cblxuZXhwb3J0IGNvbnN0IHJldHJ5UHJvbWlzZSA9IGFzeW5jIChcbiAgICBjYixcbiAgICBtYXhOdW1iZXJPZlJldHJpZXMgPSAzXG4pID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heE51bWJlck9mUmV0cmllczsgaSsrKSB7XG4gICAgICAgIGlmIChhd2FpdCBjYigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IHtmZXRjaEVycm9ySGFuZGxlciwgZmV0Y2hSZXNwb25zZUhhbmRsZXIsIGVzY2FwZUZpbHRlclZhbHVlIH0gZnJvbSBcIi4vYWN0aW9uc1wiO1xuaW1wb3J0IHtnZXRBY2Nlc3NUb2tlbn0gZnJvbSAnLi4vY29tcG9uZW50cy9zZWN1cml0eS9tZXRob2RzJztcbmltcG9ydCB7YnVpbGRBUElCYXNlVXJsfSBmcm9tIFwiLi9tZXRob2RzXCI7XG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmV4cG9ydCBjb25zdCBSRUNFSVZFX0NPVU5UUklFUyAgPSAnUkVDRUlWRV9DT1VOVFJJRVMnO1xuY29uc3QgY2FsbERlbGF5ID0gNTAwOyAvL21pbGlzZWNvbmRzXG5cbmV4cG9ydCBjb25zdCBxdWVyeU1lbWJlcnMgPSBfLmRlYm91bmNlKGFzeW5jIChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgZnVsbF9uYW1lPUAke2lucHV0fSxmaXJzdF9uYW1lPUAke2lucHV0fSxsYXN0X25hbWU9QCR7aW5wdXR9LGVtYWlsPUAke2lucHV0fWApO1xuICAgIGxldCBleHBhbmQgPSBgdGlja2V0cyxyc3ZwLHNjaGVkdWxlX3N1bW1pdF9ldmVudHMsYWxsX2FmZmlsaWF0aW9uc2BcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9tZW1iZXJzP2ZpbHRlcj0ke2ZpbHRlcnN9JmV4cGFuZD0ke2V4cGFuZH0mYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlTdW1taXRzID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy9hbGw/ZmlsdGVyPSR7ZmlsdGVyc30mYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlTcGVha2VycyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgZnVsbF9uYW1lPUAke2lucHV0fSxmaXJzdF9uYW1lPUAke2lucHV0fSxsYXN0X25hbWU9QCR7aW5wdXR9LGVtYWlsPUAke2lucHV0fWApO1xuICAgIGxldCBhcGlVcmwgPSBgL2FwaS92MWA7XG5cbiAgICBpZiAoc3VtbWl0SWQpIHtcbiAgICAgICAgYXBpVXJsICs9IGAvc3VtbWl0cy8ke3N1bW1pdElkfWA7XG4gICAgfVxuXG4gICAgYXBpVXJsICs9IGAvc3BlYWtlcnM/ZmlsdGVyPSR7ZmlsdGVyc30mYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59JmV4cGFuZD1tZW1iZXIscmVnaXN0cmF0aW9uX3JlcXVlc3RgO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGFwaVVybCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlUYWdzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBhcGlVcmwgPSBgL2FwaS92MWA7XG4gICAgbGV0IGZpbHRlciA9IGVuY29kZVVSSUNvbXBvbmVudChgdGFnPUAke2lucHV0fWApO1xuXG4gICAgaWYgKHN1bW1pdElkKSB7XG4gICAgICAgIGFwaVVybCArPSBgL3N1bW1pdHMvJHtzdW1taXRJZH0vdHJhY2stdGFnLWdyb3Vwcy9hbGwvYWxsb3dlZC10YWdzP2ZpbHRlcj0ke2ZpbHRlcn0mZXhwYW5kPXRhZyx0cmFja190YWdfZ3JvdXBgO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFwaVVybCArPSBgL3RhZ3M/ZmlsdGVyPSR7ZmlsdGVyfWA7XG4gICAgfVxuXG4gICAgYXBpVXJsICs9IGAmb3JkZXI9dGFnJnBhZ2U9MSZwZXJfcGFnZT01MCZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGFwaVVybCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgaWYgKHN1bW1pdElkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMubWFwKHQgPT4gdC50YWcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVRyYWNrcyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVyID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vdHJhY2tzP2ZpbHRlcj0ke2ZpbHRlcn0mb3JkZXI9bmFtZSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVRyYWNrR3JvdXBzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXIgPSBpbnB1dCA/IGVuY29kZVVSSUNvbXBvbmVudChgZmlsdGVyPW5hbWU9QCR7aW5wdXR9YCkgOiAnJztcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L3RyYWNrLWdyb3Vwcz9vcmRlcj1uYW1lJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufSYke2ZpbHRlcn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeUV2ZW50cyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgb25seVB1Ymxpc2hlZCA9IGZhbHNlLCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBiYXNlVXJsID0gYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS9ldmVudHNgICsgKG9ubHlQdWJsaXNoZWQgPyAnL3B1Ymxpc2hlZCcgOiAnJyk7XG4gICAgbGV0IGZpbHRlciA9IGVuY29kZVVSSUNvbXBvbmVudChgdGl0bGU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYCR7YmFzZVVybH0/ZmlsdGVyPSR7ZmlsdGVyfSZvcmRlcj10aXRsZSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeUdyb3VwcyA9IF8uZGVib3VuY2UoYXN5bmMgKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGB0aXRsZT1AJHtpbnB1dH0sY29kZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9ncm91cHM/ZmlsdGVyPSR7ZmlsdGVyc30mYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlDb21wYW5pZXMgPSBfLmRlYm91bmNlKGFzeW5jIChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9jb21wYW5pZXM/ZmlsdGVyPSR7ZmlsdGVyc30mYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG4gICAgXG4gICAgbGV0IGFjY2Vzc1Rva2VuO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgYXBpVXJsID0gVVJJKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vcmVnaXN0cmF0aW9uLWNvbXBhbmllc2ApO1xuICAgIGFwaVVybC5hZGRRdWVyeSgnYWNjZXNzX3Rva2VuJywgYWNjZXNzVG9rZW4pO1xuICAgIGFwaVVybC5hZGRRdWVyeSgnb3JkZXInLCduYW1lJylcblxuICAgIGlmKGlucHV0KSB7XG4gICAgICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgICAgICBhcGlVcmwuYWRkUXVlcnkoJ2ZpbHRlcltdJywgYG5hbWU9QCR7aW5wdXR9YCk7XG4gICAgfVxuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGFwaVVybC50b1N0cmluZygpKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVNwb25zb3JzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBjb21wYW55X25hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS9zcG9uc29ycz9maWx0ZXI9JHtmaWx0ZXJzfSZleHBhbmQ9Y29tcGFueSxzcG9uc29yc2hpcCZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeUFjY2Vzc0xldmVscyA9IF8uZGVib3VuY2UoKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGxldCBhY2Nlc3NUb2tlbiA9IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS9hY2Nlc3MtbGV2ZWwtdHlwZXM/ZmlsdGVyPSR7ZmlsdGVyc30mJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5T3JnYW5pemF0aW9ucyA9IF8uZGVib3VuY2UoYXN5bmMgKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL29yZ2FuaXphdGlvbnM/ZmlsdGVyPSR7ZmlsdGVyc30mYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgZ2V0TGFuZ3VhZ2VMaXN0ID0gKGNhbGxiYWNrLCBzaWduYWwpID0+IHtcbiAgICByZXR1cm4gZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3B1YmxpYy92MS9sYW5ndWFnZXNgKSwge3NpZ25hbH0pXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvdW50cnlMaXN0ID0gKGNhbGxiYWNrLCBzaWduYWwpID0+IHtcblxuICAgIHJldHVybiBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvcHVibGljL3YxL2NvdW50cmllc2ApLCB7c2lnbmFsfSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2socmVzcG9uc2UuZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59O1xuXG52YXIgZ2VvY29kZXI7XG5cbmV4cG9ydCBjb25zdCBnZW9Db2RlQWRkcmVzcyA9IChhZGRyZXNzKSA9PiB7XG5cbiAgICBpZiAoIWdlb2NvZGVyKSBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xuXG4gICAgLy8gcmV0dXJuIGEgUHJvbWlzZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCkge1xuICAgICAgICBnZW9jb2Rlci5nZW9jb2RlKCB7ICdhZGRyZXNzJzogYWRkcmVzc30sIGZ1bmN0aW9uKHJlc3VsdHMsIHN0YXR1cykge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBnb29nbGUubWFwcy5HZW9jb2RlclN0YXR1cy5PSykge1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgcmVzdWx0cyB1cG9uIGEgc3VjY2Vzc2Z1bCBzdGF0dXNcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZWplY3Qgc3RhdHVzIHVwb24gdW4tc3VjY2Vzc2Z1bCBzdGF0dXNcbiAgICAgICAgICAgICAgICByZWplY3Qoc3RhdHVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VvQ29kZUxhdExuZyA9IChsYXQsIGxuZykgPT4ge1xuXG4gICAgaWYgKCFnZW9jb2RlcikgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcblxuICAgIHZhciBsYXRsbmcgPSB7bGF0OiBwYXJzZUZsb2F0KGxhdCksIGxuZzogcGFyc2VGbG9hdChsbmcpfTtcbiAgICAvLyByZXR1cm4gYSBQcm9taXNlXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUscmVqZWN0KSB7XG4gICAgICAgIGdlb2NvZGVyLmdlb2NvZGUoIHsgJ2xvY2F0aW9uJzogbGF0bG5nfSwgZnVuY3Rpb24ocmVzdWx0cywgc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09IGdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSByZXN1bHRzIHVwb24gYSBzdWNjZXNzZnVsIHN0YXR1c1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHJlamVjdCBzdGF0dXMgdXBvbiB1bi1zdWNjZXNzZnVsIHN0YXR1c1xuICAgICAgICAgICAgICAgIHJlamVjdChzdGF0dXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBxdWVyeVRpY2tldFR5cGVzID0gXy5kZWJvdW5jZSgoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgbGV0IGFjY2Vzc1Rva2VuID0gZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L3RpY2tldC10eXBlcz9maWx0ZXI9JHtmaWx0ZXJzfSYmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5cbiIsImV4cG9ydCBjb25zdCBDaGVja0JveFF1ZXN0aW9uVHlwZSA9ICdDaGVja0JveCc7XG5leHBvcnQgY29uc3QgQ29tYm9Cb3hRdWVzdGlvblR5cGUgPSAnQ29tYm9Cb3gnXG5leHBvcnQgY29uc3QgQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlID0gJ0NoZWNrQm94TGlzdCc7XG5leHBvcnQgY29uc3QgUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlID0gJ1JhZGlvQnV0dG9uTGlzdCc7XG5leHBvcnQgY29uc3QgQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUgPSBbQ29tYm9Cb3hRdWVzdGlvblR5cGUsIENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSwgUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlXTtcbmV4cG9ydCBjb25zdCBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQgPSAnQW5kJztcbmV4cG9ydCBjb25zdCBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9PciA9ICdPcic7XG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbCA9ICdFcXVhbCc7XG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbCA9ICdOb3RFcXVhbCc7XG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eV9WaXNpYmxlID0gJ1Zpc2libGUnO1xuZXhwb3J0IGNvbnN0IE1haW5RdWVzdGlvbkNsYXNzVHlwZSA9ICdNYWluUXVlc3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVzdGlvbnNTZXQge1xuXG4gICAgY29uc3RydWN0b3IocXVlc3Rpb25zLCBhbnN3ZXJzID0gW10pIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSBxdWVzdGlvbnM7XG4gICAgICAgIHRoaXMub3JpZ2luYWxBbnN3ZXJzID0gYW5zd2Vyc1xuICAgICAgICB0aGlzLmFuc3dlcnMgPSBbXTtcbiAgICAgICAgLy8gbWFwIGFuc3dlcnMgdG8gYXNzb2NpYXRlIGFycmF5XG4gICAgICAgIGZvciAobGV0IGEgb2YgdGhpcy5vcmlnaW5hbEFuc3dlcnMpXG4gICAgICAgICAgICB0aGlzLmFuc3dlcnNbYS5xdWVzdGlvbl9pZF0gPSBhO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlOYW1lID0ge31cbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5SWQgPSB7fVxuICAgICAgICAvLyBhc3NvY2lhdGl2ZSBhcnJheSAoIHJ1bGUgaWQgLCBydWxlKTtcbiAgICAgICAgdGhpcy5ydWxlcyA9IHt9O1xuICAgICAgICB0aGlzLl9wYXJzZVF1ZXN0aW9ucygpO1xuICAgIH1cblxuICAgIF9wYXJzZVF1ZXN0aW9uID0gKHEpID0+IHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5TmFtZVtxLm5hbWVdID0gcTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5SWRbcGFyc2VJbnQocS5pZCldID0gcTtcbiAgICAgICAgaWYocS5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCByIG9mIHEuc3ViX3F1ZXN0aW9uX3J1bGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ydWxlc1twYXJzZUludChyLmlkKV0gPSByO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgIH1cblxuICAgIF9wYXJzZVF1ZXN0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgcSBvZiB0aGlzLnF1ZXN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbihxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hbGxvd3NWYWx1ZXMgPSAocSkgPT4ge1xuICAgICAgICByZXR1cm4gQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUuaW5jbHVkZXMocS50eXBlKTtcbiAgICB9XG5cbiAgICBfYWxsb3dzVmFsdWUgPSAocSwgYW5zd2VyKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGFuc3dlci52YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHBhcnNlSW50KHYpKTtcbiAgICAgICAgZm9yIChsZXQgYXYgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghcS52YWx1ZXMubWFwKGUgPT4gZS5pZCkuaW5jbHVkZXMoYXYpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfZ2V0QW5zd2VyRm9yID0gKHEpID0+IHtcbiAgICAgICAgbGV0IGlkID0gTnVtYmVyLmlzSW50ZWdlcihxKSA/IHEgOiBxLmlkO1xuICAgICAgICBsZXQgYSA9IHRoaXMuYW5zd2Vyc1tpZF0gfHwgbnVsbDtcbiAgICAgICAgcmV0dXJuIGEgPyBhIDogbnVsbDtcbiAgICB9XG5cbiAgICBfaGFzVmFsdWUgPSAoYW5zd2VyKSA9PiB7XG4gICAgICAgIHJldHVybiBhbnN3ZXIudmFsdWUgIT09ICcnO1xuICAgIH1cblxuICAgIF9hbnN3ZXJDb250YWlucyA9IChhbnN3ZXIsIHZhbCkgPT4ge1xuICAgICAgICByZXR1cm4gYW5zd2VyLnZhbHVlLnNwbGl0KCcsJykuaW5jbHVkZXModmFsKTtcbiAgICB9XG5cbiAgICBfaXNTdWJRdWVzdGlvblZpc2libGUgPSAocnVsZSkgPT4ge1xuICAgICAgICBsZXQgaW5pdGlhbENvbmRpdGlvbiA9IHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBwYXJlbnRRdWVzdGlvbkFuc3dlciA9IHRoaXMuX2dldEFuc3dlckZvcihydWxlLnBhcmVudF9xdWVzdGlvbl9pZCk7XG4gICAgICAgIGlmICghcGFyZW50UXVlc3Rpb25BbnN3ZXIpIHtcbiAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsOiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFuc3dlclZhbHVlIG9mIHJ1bGUuYW5zd2VyX3ZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uICYmIHRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gfHwgdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsOiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFuc3dlclZhbHVlIG9mIHJ1bGUuYW5zd2VyX3ZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uICYmICF0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uIHx8ICF0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5hbCB2aXNpYmlsaXR5IGNoZWNrXG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHkgPT09IFZpc2liaWxpdHlfVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxDb25kaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90IHZpc2libGVcbiAgICAgICAgcmV0dXJuICFpbml0aWFsQ29uZGl0aW9uO1xuICAgIH1cblxuICAgIF9pc0Fuc3dlcmVkID0gKHEpID0+IHtcbiAgICAgICAgY29uc3QgYW5zd2VyID0gdGhpcy5fZ2V0QW5zd2VyRm9yKHEpO1xuXG4gICAgICAgIGlmIChxLmNsYXNzID09PSBNYWluUXVlc3Rpb25DbGFzc1R5cGUpIHtcbiAgICAgICAgICAgIGlmICghcS5tYW5kYXRvcnkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhbnN3ZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faGFzVmFsdWUoYW5zd2VyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FsbG93c1ZhbHVlcyhxKSAmJiAhdGhpcy5fYWxsb3dzVmFsdWUocSwgYW5zd2VyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIHBhcmVudCBydWxlcyAuLi5cbiAgICAgICAgZm9yIChsZXQgcnVsZUlkIG9mIHEucGFyZW50X3J1bGVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzU3ViUXVlc3Rpb25WaXNpYmxlKHRoaXMucnVsZXNbcnVsZUlkXSkpIC8vIGlmIHF1ZXN0aW9uIGlzIG5vdCB2aXNpYmxlIHNraXAgaXRcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghcS5tYW5kYXRvcnkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhbnN3ZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faGFzVmFsdWUoYW5zd2VyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FsbG93c1ZhbHVlcyhxKSAmJiAhdGhpcy5fYWxsb3dzVmFsdWUocSwgYW5zd2VyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9jaGVja1F1ZXN0aW9uID0gKHEpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHRoaXMuX2lzQW5zd2VyZWQocSk7XG4gICAgICAgIGlmKHEuaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgcnVsZSBvZiBxLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlY3Vyc2l2ZSBhbGwgdGhlIHRyZWUgdGlsbCBsZWF2ZXMgLi4uXG4gICAgICAgICAgICAgICAgcmVzID0gcmVzICYmIHRoaXMuX2NoZWNrUXVlc3Rpb24ocnVsZS5zdWJfcXVlc3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIF9mb3JtYXRRdWVzdGlvbkFuc3dlciA9IChxdWVzdGlvbikgPT4ge1xuICAgICAgICBsZXQgcmVzID0ge307XG4gICAgICAgIGxldCB1c2VyQW5zd2VyID0gdGhpcy5vcmlnaW5hbEFuc3dlcnMuZmluZChhID0+IGEucXVlc3Rpb25faWQgPT09IHF1ZXN0aW9uLmlkKT8udmFsdWU7XG5cbiAgICAgICAgaWYodXNlckFuc3dlcikge1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IENoZWNrQm94UXVlc3Rpb25UeXBlKSB1c2VyQW5zd2VyID0gdXNlckFuc3dlciA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogISF1c2VyQW5zd2VyO1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSB8fCBxdWVzdGlvbi50eXBlID09PSBDb21ib0JveFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHBhcnNlSW50KHVzZXJBbnN3ZXIpO1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHVzZXJBbnN3ZXIuc3BsaXQoJywnKS5tYXAoYW5zVmFsID0+IHBhcnNlSW50KGFuc1ZhbCkpIHx8IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzW3F1ZXN0aW9uLm5hbWVdID0gIHVzZXJBbnN3ZXIgfHwgJyc7XG4gICAgICAgIGlmKHF1ZXN0aW9uLmhhc093blByb3BlcnR5KCdzdWJfcXVlc3Rpb25fcnVsZXMnKSlcbiAgICAgICAgICAgIGZvciAobGV0IHJ1bGUgb2YgcXVlc3Rpb24uc3ViX3F1ZXN0aW9uX3J1bGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgcmVjdXJzaXZlIGFsbCB0aGUgdHJlZSB0aWxsIGxlYXZlcyAuLi5cbiAgICAgICAgICAgICAgICBsZXQgcmVzMSA9IHRoaXMuX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyKHJ1bGUuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICByZXMgPSB7Li4ucmVzLCAuLi5yZXMxfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmb3JtYXRBbnN3ZXJzID0gKCkgPT4ge1xuICAgICAgICBsZXQgcmVzID0ge31cbiAgICAgICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaChxID0+IHtcbiAgICAgICAgICAgIGxldCByZXMxID0gdGhpcy5fZm9ybWF0UXVlc3Rpb25BbnN3ZXIocSk7XG4gICAgICAgICAgICByZXMgPSB7Li4ucmVzLC4uLnJlczF9O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBjb21wbGV0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBxIG9mIHRoaXMucXVlc3Rpb25zKSB7XG4gICAgICAgICAgICByZXMgPSByZXMgJiYgdGhpcy5fY2hlY2tRdWVzdGlvbihxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGdldFF1ZXN0aW9uQnlOYW1lID0gKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CeU5hbWVbbmFtZV0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICBnZXRRdWVzdGlvbkJ5SWQgPSAoaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CeUlkW3BhcnNlSW50KGlkKV0gfHwgbnVsbDtcbiAgICB9XG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXdlc29tZS1ib290c3RyYXAtY2hlY2tib3gvYXdlc29tZS1ib290c3RyYXAtY2hlY2tib3guY3NzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJyb3dzZXItdGFicy1sb2NrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJkcm9wem9uZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJkcm9wem9uZS9kaXN0L2Ryb3B6b25lLmNzc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJleHRlbmRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaTE4bi1yZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJpZHRva2VuLXZlcmlmaWVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImltbXV0YWJpbGl0eS1oZWxwZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vbWVudC10aW1lem9uZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRhdGV0aW1lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRuZFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kbmQtaHRtbDUtYmFja2VuZFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZHJvcHpvbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZmluYWwtZm9ybVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1nb29nbGUtbWFwc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1nb29nbGUtbWFwcy9saWIvY29tcG9uZW50cy9hZGRvbnMvTWFya2VyQ2x1c3RlcmVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXJlZHV4XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXJ0ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3QvbGliL0FzeW5jQ3JlYXRhYmxlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdC9saWIvQ3JlYXRhYmxlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdC9saWIvY29tcG9uZW50c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC10b29sdGlwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN1cGVyYWdlbnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3dlZXRhbGVydDJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXJpanNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidmlkZW8uanNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidmlkZW8uanMvZGlzdC92aWRlby1qcy5jc3NcIik7Il0sInNvdXJjZVJvb3QiOiIifQ==