breeze-client 2.1.2 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/LICENSE +1 -1
  2. package/adapter-ajax-angularjs/package.json +2 -2
  3. package/adapter-ajax-fetch/package.json +2 -2
  4. package/adapter-ajax-httpclient/package.json +2 -6
  5. package/adapter-ajax-jquery/package.json +2 -2
  6. package/adapter-ajax-post/package.json +2 -2
  7. package/adapter-data-service-odata/package.json +2 -2
  8. package/adapter-data-service-webapi/package.json +2 -2
  9. package/adapter-model-library-backing-store/package.json +2 -2
  10. package/adapter-model-library-ko/package.json +2 -2
  11. package/adapter-uri-builder-json/package.json +2 -2
  12. package/adapter-uri-builder-odata/package.json +2 -2
  13. package/breeze-client.d.ts +1 -1
  14. package/breeze-client.metadata.json +1 -1
  15. package/bundles/breeze-client.umd.js +9 -5
  16. package/bundles/breeze-client.umd.js.map +1 -1
  17. package/bundles/breeze-client.umd.min.js +1 -1
  18. package/bundles/breeze-client.umd.min.js.map +1 -1
  19. package/esm2015/breeze-client.js +2 -2
  20. package/esm2015/src/array.js +1 -1
  21. package/esm2015/src/breeze.js +2 -2
  22. package/esm2015/src/core.js +4 -1
  23. package/esm2015/src/csdl-metadata-parser.js +3 -3
  24. package/esm2015/src/default-property-interceptor.js +3 -2
  25. package/esm2015/src/enum.js +2 -2
  26. package/esm2015/src/local-query-comparison-options.js +1 -1
  27. package/esm5/breeze-client.js +2 -2
  28. package/esm5/src/array.js +1 -1
  29. package/esm5/src/breeze.js +2 -2
  30. package/esm5/src/core.js +4 -1
  31. package/esm5/src/csdl-metadata-parser.js +3 -3
  32. package/esm5/src/default-property-interceptor.js +3 -2
  33. package/esm5/src/enum.js +2 -2
  34. package/esm5/src/local-query-comparison-options.js +1 -1
  35. package/fesm2015/breeze-client.js +9 -5
  36. package/fesm2015/breeze-client.js.map +1 -1
  37. package/fesm5/breeze-client.js +9 -5
  38. package/fesm5/breeze-client.js.map +1 -1
  39. package/mixin-get-entity-graph/package.json +2 -2
  40. package/mixin-save-queuing/package.json +2 -2
  41. package/package.json +1 -1
  42. package/esm2015/public_api.js +0 -2
  43. package/esm5/public_api.js +0 -2
  44. package/public_api.d.ts +0 -1
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
- export * from './public_api';
4
+ export * from './index';
5
5
  export { Param as ɵb } from './src/assert-param';
6
6
  export { qualifyTypeName as ɵc } from './src/entity-metadata';
7
7
  export { BooleanQueryOp as ɵd } from './src/entity-query';
8
8
  export { PredicateExpression as ɵa } from './src/predicate';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJicmVlemUtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUM7QUFFN0IsT0FBTyxFQUFDLEtBQUssSUFBSSxFQUFFLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZUFBZSxJQUFJLEVBQUUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxjQUFjLElBQUksRUFBRSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFDLG1CQUFtQixJQUFJLEVBQUUsRUFBQyxNQUFNLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuXG5leHBvcnQge1BhcmFtIGFzIMm1Yn0gZnJvbSAnLi9zcmMvYXNzZXJ0LXBhcmFtJztcbmV4cG9ydCB7cXVhbGlmeVR5cGVOYW1lIGFzIMm1Y30gZnJvbSAnLi9zcmMvZW50aXR5LW1ldGFkYXRhJztcbmV4cG9ydCB7Qm9vbGVhblF1ZXJ5T3AgYXMgybVkfSBmcm9tICcuL3NyYy9lbnRpdHktcXVlcnknO1xuZXhwb3J0IHtQcmVkaWNhdGVFeHByZXNzaW9uIGFzIMm1YX0gZnJvbSAnLi9zcmMvcHJlZGljYXRlJzsiXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJicmVlemUtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUM7QUFFeEIsT0FBTyxFQUFDLEtBQUssSUFBSSxFQUFFLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZUFBZSxJQUFJLEVBQUUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxjQUFjLElBQUksRUFBRSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFDLG1CQUFtQixJQUFJLEVBQUUsRUFBQyxNQUFNLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcblxuZXhwb3J0IHtQYXJhbSBhcyDJtWJ9IGZyb20gJy4vc3JjL2Fzc2VydC1wYXJhbSc7XG5leHBvcnQge3F1YWxpZnlUeXBlTmFtZSBhcyDJtWN9IGZyb20gJy4vc3JjL2VudGl0eS1tZXRhZGF0YSc7XG5leHBvcnQge0Jvb2xlYW5RdWVyeU9wIGFzIMm1ZH0gZnJvbSAnLi9zcmMvZW50aXR5LXF1ZXJ5JztcbmV4cG9ydCB7UHJlZGljYXRlRXhwcmVzc2lvbiBhcyDJtWF9IGZyb20gJy4vc3JjL3ByZWRpY2F0ZSc7Il19
@@ -1,4 +1,4 @@
1
1
  export { makeRelationArray } from './relation-array';
2
2
  export { makeComplexArray } from './complex-array';
3
3
  export { makePrimitiveArray } from './primitive-array';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2FycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgbWFrZVJlbGF0aW9uQXJyYXkgfSBmcm9tICcuL3JlbGF0aW9uLWFycmF5JztcbmV4cG9ydCB7IG1ha2VDb21wbGV4QXJyYXkgfSBmcm9tICcuL2NvbXBsZXgtYXJyYXknO1xuZXhwb3J0IHsgbWFrZVByaW1pdGl2ZUFycmF5IH0gZnJvbSAnLi9wcmltaXRpdmUtYXJyYXknO1xuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2FycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgbWFrZVJlbGF0aW9uQXJyYXkgfSBmcm9tICcuL3JlbGF0aW9uLWFycmF5JztcclxuZXhwb3J0IHsgbWFrZUNvbXBsZXhBcnJheSB9IGZyb20gJy4vY29tcGxleC1hcnJheSc7XHJcbmV4cG9ydCB7IG1ha2VQcmltaXRpdmVBcnJheSB9IGZyb20gJy4vcHJpbWl0aXZlLWFycmF5JztcclxuIl19
@@ -70,7 +70,7 @@ export const breeze = {
70
70
  ValidationError: ValidationError,
71
71
  ValidationOptions: ValidationOptions,
72
72
  Validator: Validator,
73
- version: "2.1.2"
73
+ version: "2.1.3"
74
74
  };
75
75
  /** @hidden @internal */
76
76
  let win;
@@ -82,4 +82,4 @@ catch (e) {
82
82
  if (win) {
83
83
  win.breeze = breeze;
84
84
  }
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9icmVlemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDBCQUEwQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQW1ELE1BQU0sZ0JBQWdCLENBQUM7QUFDckksT0FBTyxFQUFFLFFBQVEsRUFBRyxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQXFFLE1BQU0saUJBQWlCLENBQUM7QUFDakksT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFtTixNQUFNLGtCQUFrQixDQUFDO0FBQ2xRLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQWtLLE1BQU0sc0JBQXNCLENBQUM7QUFDek4sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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QyxZQUFZLEVBQUUsWUFBWTtJQUMxQiwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsYUFBYSxFQUFFLGFBQWE7SUFDNUIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxhQUFhLEVBQUUsYUFBYTtJQUM1QixLQUFLO0lBQ0wsU0FBUyxFQUFFLFNBQVM7SUFDcEIsWUFBWSxFQUFFLFlBQVk7SUFDMUIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsZUFBZSxFQUFFLGVBQWU7SUFDaEMsaUJBQWlCLEVBQUUsaUJBQWlCO0lBQ3BDLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFnQkYsd0JBQXdCO0FBQ3hCLElBQUksR0FBUSxDQUFDO0FBQ2IsSUFBSTtJQUNGLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQzlEO0FBQUMsT0FBTyxDQUFDLEVBQUU7Q0FFWDtBQUNELElBQUksR0FBRyxFQUFFO0lBQ1AsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDckIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXJ9IGZyb20gJy4vYWJzdHJhY3QtZGF0YS1zZXJ2aWNlLWFkYXB0ZXInO1xyXG5pbXBvcnQgeyBhc3NlcnRQYXJhbSwgYXNzZXJ0Q29uZmlnLCBQYXJhbSB9IGZyb20gJy4vYXNzZXJ0LXBhcmFtJztcclxuaW1wb3J0IHsgQnJlZXplQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBCcmVlemVFbnVtfSBmcm9tICcuL2VudW0nO1xyXG5pbXBvcnQgeyBCcmVlemVFdmVudCB9IGZyb20gJy4vZXZlbnQnO1xyXG5pbXBvcnQgeyBDb21wbGV4QXJyYXkgfSBmcm9tICcuL2NvbXBsZXgtYXJyYXknO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZSwgRGF0YVNlcnZpY2VDb25maWcsIEpzb25SZXN1bHRzQWRhcHRlciwgSnNvblJlc3VsdHNBZGFwdGVyQ29uZmlnLCBOb2RlQ29udGV4dCwgTm9kZU1ldGEgfSBmcm9tICcuL2RhdGEtc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFUeXBlICB9IGZyb20gJy4vZGF0YS10eXBlJztcclxuaW1wb3J0IHsgRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9lbnRpdHktYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5QXNwZWN0LCBDb21wbGV4QXNwZWN0LCBFbnRpdHksIENvbXBsZXhPYmplY3QsIFN0cnVjdHVyYWxPYmplY3QsIFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncyB9IGZyb20gJy4vZW50aXR5LWFzcGVjdCc7XHJcbmltcG9ydCB7IEVudGl0eUtleSB9IGZyb20gJy4vZW50aXR5LWtleSc7XHJcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIEVudGl0eU1hbmFnZXJDb25maWcsIEVudGl0eUVycm9yLCBFbnRpdHlDaGFuZ2VkRXZlbnRBcmdzLCBTYXZlQ29udGV4dCwgU2F2ZUJ1bmRsZSwgSHR0cFJlc3BvbnNlLCBLZXlNYXBwaW5nLCBTZXJ2ZXJFcnJvciwgU2F2ZVJlc3VsdCwgUXVlcnlSZXN1bHQsIFZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkRXZlbnRBcmdzLCBIYXNDaGFuZ2VzQ2hhbmdlZEV2ZW50QXJncyB9IGZyb20gJy4vZW50aXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSwgRmlsdGVyUXVlcnlPcCwgQm9vbGVhblF1ZXJ5T3AsIE9yZGVyQnlDbGF1c2UsIEV4cGFuZENsYXVzZSwgU2VsZWN0Q2xhdXNlIH0gZnJvbSAnLi9lbnRpdHktcXVlcnknO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgSW50ZXJmYWNlUmVnaXN0cnksIEFqYXhBZGFwdGVyLCBBamF4Q29uZmlnLCBEYXRhU2VydmljZUFkYXB0ZXIsIE1vZGVsTGlicmFyeUFkYXB0ZXIsIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciwgVXJpQnVpbGRlckFkYXB0ZXIsIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnLCBBamF4UmVxdWVzdEludGVyY2VwdG9yIH0gZnJvbSAnLi9pbnRlcmZhY2UtcmVnaXN0cnknO1xyXG5pbXBvcnQgeyBLZXlHZW5lcmF0b3IgfSBmcm9tICcuL2tleS1nZW5lcmF0b3InO1xyXG5pbXBvcnQgeyBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMgfSBmcm9tICcuL2xvY2FsLXF1ZXJ5LWNvbXBhcmlzb24tb3B0aW9ucyc7XHJcbmltcG9ydCB7IE1hcHBpbmdDb250ZXh0IH0gZnJvbSAnLi9tYXBwaW5nLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVN0b3JlLCBFbnRpdHlUeXBlLCBDb21wbGV4VHlwZSwgU3RydWN0dXJhbFR5cGUsIERhdGFQcm9wZXJ0eSwgRW50aXR5UHJvcGVydHksIE5hdmlnYXRpb25Qcm9wZXJ0eSwgQXV0b0dlbmVyYXRlZEtleVR5cGUgICB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgTmFtaW5nQ29udmVudGlvbiB9IGZyb20gJy4vbmFtaW5nLWNvbnZlbnRpb24nO1xyXG5pbXBvcnQgeyBQcmVkaWNhdGUsIFZpc2l0Q29udGV4dCwgVmlzaXRvciwgRXhwcmVzc2lvbkNvbnRleHQsIFVuYXJ5UHJlZGljYXRlLCBCaW5hcnlQcmVkaWNhdGUsIEFueUFsbFByZWRpY2F0ZSwgQW5kT3JQcmVkaWNhdGUsIExpdEV4cHIsIEZuRXhwciwgUHJvcEV4cHIgfSBmcm9tICcuL3ByZWRpY2F0ZSc7XHJcbmltcG9ydCB7IFF1ZXJ5T3B0aW9ucywgIEZldGNoU3RyYXRlZ3ksIE1lcmdlU3RyYXRlZ3kgfSBmcm9tICcuL3F1ZXJ5LW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBTYXZlT3B0aW9ucyB9IGZyb20gJy4vc2F2ZS1vcHRpb25zJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk9wdGlvbnMgfSBmcm9tICcuL3ZhbGlkYXRpb24tb3B0aW9ucyc7XHJcblxyXG5pbXBvcnQgeyBjb25maWcsIEJhc2VBZGFwdGVyIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBjb3JlLCBDYWxsYmFjaywgRXJyb3JDYWxsYmFjayB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IG1ha2VSZWxhdGlvbkFycmF5LCBtYWtlUHJpbWl0aXZlQXJyYXksIG1ha2VDb21wbGV4QXJyYXkgfSBmcm9tICcuL2FycmF5JztcclxuXHJcbmltcG9ydCB7IFJlbGF0aW9uQXJyYXkgfSBmcm9tICcuL3JlbGF0aW9uLWFycmF5JztcclxuaW1wb3J0IHsgQXJyYXlDaGFuZ2VkQXJncyB9IGZyb20gJy4vb2JzZXJ2YWJsZS1hcnJheSc7XHJcbmV4cG9ydCB7IEJyZWV6ZUNvbmZpZywgQ29tcGxleEFycmF5LCBSZWxhdGlvbkFycmF5IH07XHJcblxyXG5leHBvcnQge1xyXG4gIEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIEFqYXhBZGFwdGVyLFxyXG4gIEFqYXhDb25maWcsXHJcbiAgQWpheFJlcXVlc3RJbnRlcmNlcHRvcixcclxuICBBbmRPclByZWRpY2F0ZSxcclxuICBBbnlBbGxQcmVkaWNhdGUsXHJcbiAgQXJyYXlDaGFuZ2VkQXJncyxcclxuICBhc3NlcnRDb25maWcsXHJcbiAgYXNzZXJ0UGFyYW0sXHJcbiAgQXV0b0dlbmVyYXRlZEtleVR5cGUsXHJcbiAgQmFzZUFkYXB0ZXIsXHJcbiAgQmluYXJ5UHJlZGljYXRlLFxyXG4gIEJyZWV6ZUVudW0sXHJcbiAgQnJlZXplRXZlbnQsIFxyXG4gIENhbGxiYWNrLFxyXG4gIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcixcclxuICBDb21wbGV4QXNwZWN0LFxyXG4gIENvbXBsZXhPYmplY3QsXHJcbiAgQ29tcGxleFR5cGUsXHJcbiAgY29uZmlnLFxyXG4gIGNvcmUsXHJcbiAgRGF0YVByb3BlcnR5LFxyXG4gIERhdGFTZXJ2aWNlLFxyXG4gIERhdGFTZXJ2aWNlQWRhcHRlcixcclxuICBEYXRhU2VydmljZUNvbmZpZyxcclxuICBEYXRhVHlwZSxcclxuICBFbnRpdHksXHJcbiAgRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFzcGVjdCxcclxuICBFbnRpdHlDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIEVudGl0eUVycm9yLFxyXG4gIEVudGl0eUtleSxcclxuICBFbnRpdHlNYW5hZ2VyLFxyXG4gIEVudGl0eU1hbmFnZXJDb25maWcsXHJcbiAgRW50aXR5UHJvcGVydHksXHJcbiAgRW50aXR5UXVlcnksXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5VHlwZSxcclxuICBFcnJvckNhbGxiYWNrLFxyXG4gIEV4cGFuZENsYXVzZSxcclxuICBFeHByZXNzaW9uQ29udGV4dCxcclxuICBGZXRjaFN0cmF0ZWd5LFxyXG4gIEZpbHRlclF1ZXJ5T3AsXHJcbiAgRm5FeHByLFxyXG4gIEhhc0NoYW5nZXNDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIEh0dHBSZXNwb25zZSxcclxuICBJbnRlcmZhY2VSZWdpc3RyeSxcclxuICBJbnRlcmZhY2VSZWdpc3RyeUNvbmZpZyxcclxuICBKc29uUmVzdWx0c0FkYXB0ZXIsXHJcbiAgSnNvblJlc3VsdHNBZGFwdGVyQ29uZmlnLFxyXG4gIEtleUdlbmVyYXRvcixcclxuICBLZXlNYXBwaW5nLFxyXG4gIExpdEV4cHIsXHJcbiAgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLFxyXG4gIG1ha2VDb21wbGV4QXJyYXksXHJcbiAgbWFrZVByaW1pdGl2ZUFycmF5LFxyXG4gIG1ha2VSZWxhdGlvbkFycmF5LFxyXG4gIE1hcHBpbmdDb250ZXh0LFxyXG4gIE1lcmdlU3RyYXRlZ3ksXHJcbiAgTWV0YWRhdGFTdG9yZSxcclxuICBNb2RlbExpYnJhcnlBZGFwdGVyLFxyXG4gIE5hbWluZ0NvbnZlbnRpb24sXHJcbiAgTmF2aWdhdGlvblByb3BlcnR5LFxyXG4gIE5vZGVDb250ZXh0LFxyXG4gIE5vZGVNZXRhLFxyXG4gIE9yZGVyQnlDbGF1c2UsXHJcbiAgUHJlZGljYXRlLFxyXG4gIFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncyxcclxuICBQcm9wRXhwcixcclxuICBRdWVyeU9wdGlvbnMsXHJcbiAgUXVlcnlSZXN1bHQsXHJcbiAgU2F2ZUJ1bmRsZSxcclxuICBTYXZlQ29udGV4dCxcclxuICBTYXZlT3B0aW9ucyxcclxuICBTYXZlUmVzdWx0LFxyXG4gIFNlbGVjdENsYXVzZSxcclxuICBTZXJ2ZXJFcnJvcixcclxuICBTdHJ1Y3R1cmFsT2JqZWN0LFxyXG4gIFN0cnVjdHVyYWxUeXBlLFxyXG4gIFVuYXJ5UHJlZGljYXRlLFxyXG4gIFVyaUJ1aWxkZXJBZGFwdGVyLFxyXG4gIFZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIFZhbGlkYXRpb25FcnJvcixcclxuICBWYWxpZGF0aW9uT3B0aW9ucyxcclxuICBWYWxpZGF0b3IsXHJcbiAgVmlzaXRDb250ZXh0LFxyXG4gIFZpc2l0b3IsXHJcbn07XHJcblxyXG4vLyBjcmVhdGUgYSBicmVlemUgdmFyaWFibGUgaGVyZVxyXG5leHBvcnQgY29uc3QgYnJlZXplID0ge1xyXG4gIEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyOiBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlcixcclxuICBhc3NlcnRDb25maWc6IG51bGwgYXMgYW55LFxyXG4gIGFzc2VydFBhcmFtOiBudWxsIGFzIGFueSxcclxuICBBdXRvR2VuZXJhdGVkS2V5VHlwZTogQXV0b0dlbmVyYXRlZEtleVR5cGUsXHJcbiAgQm9vbGVhblF1ZXJ5T3A6IEJvb2xlYW5RdWVyeU9wLFxyXG4gIENvbXBsZXhBc3BlY3Q6IENvbXBsZXhBc3BlY3QsXHJcbiAgQ29tcGxleFR5cGU6IENvbXBsZXhUeXBlLFxyXG4gIGNvbmZpZzogY29uZmlnLFxyXG4gIGNvcmU6IGNvcmUsXHJcbiAgRGF0YVByb3BlcnR5OiBEYXRhUHJvcGVydHksXHJcbiAgRGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gIERhdGFUeXBlOiBEYXRhVHlwZSxcclxuICBFbnRpdHlBY3Rpb246IEVudGl0eUFjdGlvbixcclxuICBFbnRpdHlBc3BlY3Q6IEVudGl0eUFzcGVjdCxcclxuICBFbnRpdHlLZXk6IEVudGl0eUtleSxcclxuICBFbnRpdHlNYW5hZ2VyOiBFbnRpdHlNYW5hZ2VyLFxyXG4gIEVudGl0eVF1ZXJ5OiBFbnRpdHlRdWVyeSxcclxuICBFbnRpdHlTdGF0ZTogRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5VHlwZTogRW50aXR5VHlwZSxcclxuICBFdmVudDogQnJlZXplRXZlbnQsXHJcbiAgRmV0Y2hTdHJhdGVneTogRmV0Y2hTdHJhdGVneSxcclxuICBGaWx0ZXJRdWVyeU9wOiBGaWx0ZXJRdWVyeU9wLFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5OiBJbnRlcmZhY2VSZWdpc3RyeSxcclxuICBKc29uUmVzdWx0c0FkYXB0ZXI6IEpzb25SZXN1bHRzQWRhcHRlcixcclxuICBLZXlHZW5lcmF0b3I6IEtleUdlbmVyYXRvcixcclxuICBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnM6IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyxcclxuICBtYWtlQ29tcGxleEFycmF5OiBtYWtlQ29tcGxleEFycmF5LFxyXG4gIG1ha2VQcmltaXRpdmVBcnJheTogbWFrZVByaW1pdGl2ZUFycmF5LFxyXG4gIG1ha2VSZWxhdGlvbkFycmF5OiBtYWtlUmVsYXRpb25BcnJheSxcclxuICBNZXJnZVN0cmF0ZWd5OiBNZXJnZVN0cmF0ZWd5LFxyXG4gIE1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUsXHJcbiAgTmFtaW5nQ29udmVudGlvbjogTmFtaW5nQ29udmVudGlvbixcclxuICBOYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSxcclxuICBPcmRlckJ5Q2xhdXNlOiBPcmRlckJ5Q2xhdXNlLCAvLyBmb3IgdGVzdGluZyBvbmx5XHJcbiAgUGFyYW0sXHJcbiAgUHJlZGljYXRlOiBQcmVkaWNhdGUsXHJcbiAgUXVlcnlPcHRpb25zOiBRdWVyeU9wdGlvbnMsXHJcbiAgU2F2ZU9wdGlvbnM6IFNhdmVPcHRpb25zLFxyXG4gIFZhbGlkYXRpb25FcnJvcjogVmFsaWRhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25PcHRpb25zOiBWYWxpZGF0aW9uT3B0aW9ucyxcclxuICBWYWxpZGF0b3I6IFZhbGlkYXRvcixcclxuICB2ZXJzaW9uOiBcIjIuMS4yXCJcclxufTtcclxuXHJcbi8vIGJyZWV6ZS5hc3NlcnRDb25maWcgPSBhc3NlcnRDb25maWcgYXMgYW55O1xyXG4vLyBicmVlemUuYXNzZXJ0UGFyYW0gPSBhc3NlcnRQYXJhbSBhcyBhbnk7XHJcblxyXG5leHBvcnQgbmFtZXNwYWNlIHByb21pc2VzIHtcclxuICAvKiogbm8tb3AgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBicmVlemUtYnJpZGdlMi1hbmd1bGFyICovXHJcbiAgZXhwb3J0IGludGVyZmFjZSBJUHJvbWlzZVNlcnZpY2Uge31cclxufVxyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmRlY2xhcmUgdmFyIGdsb2JhbDogYW55O1xyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmxldCB3aW46IGFueTtcclxudHJ5IHtcclxuICB3aW4gPSB3aW5kb3cgPyB3aW5kb3cgOiAoZ2xvYmFsID8gZ2xvYmFsLndpbmRvdyA6IHVuZGVmaW5lZCk7XHJcbn0gY2F0Y2ggKGUpIHtcclxuXHJcbn1cclxuaWYgKHdpbikge1xyXG4gIHdpbi5icmVlemUgPSBicmVlemU7XHJcbn1cclxuIl19
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9icmVlemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDBCQUEwQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQW1ELE1BQU0sZ0JBQWdCLENBQUM7QUFDckksT0FBTyxFQUFFLFFBQVEsRUFBRyxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQXFFLE1BQU0saUJBQWlCLENBQUM7QUFDakksT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFtTixNQUFNLGtCQUFrQixDQUFDO0FBQ2xRLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQWtLLE1BQU0sc0JBQXNCLENBQUM7QUFDek4sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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QyxZQUFZLEVBQUUsWUFBWTtJQUMxQiwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsYUFBYSxFQUFFLGFBQWE7SUFDNUIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxhQUFhLEVBQUUsYUFBYTtJQUM1QixLQUFLO0lBQ0wsU0FBUyxFQUFFLFNBQVM7SUFDcEIsWUFBWSxFQUFFLFlBQVk7SUFDMUIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsZUFBZSxFQUFFLGVBQWU7SUFDaEMsaUJBQWlCLEVBQUUsaUJBQWlCO0lBQ3BDLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFnQkYsd0JBQXdCO0FBQ3hCLElBQUksR0FBUSxDQUFDO0FBQ2IsSUFBSTtJQUNGLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQzlEO0FBQUMsT0FBTyxDQUFDLEVBQUU7Q0FFWDtBQUNELElBQUksR0FBRyxFQUFFO0lBQ1AsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDckIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXJ9IGZyb20gJy4vYWJzdHJhY3QtZGF0YS1zZXJ2aWNlLWFkYXB0ZXInO1xyXG5pbXBvcnQgeyBhc3NlcnRQYXJhbSwgYXNzZXJ0Q29uZmlnLCBQYXJhbSB9IGZyb20gJy4vYXNzZXJ0LXBhcmFtJztcclxuaW1wb3J0IHsgQnJlZXplQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBCcmVlemVFbnVtfSBmcm9tICcuL2VudW0nO1xyXG5pbXBvcnQgeyBCcmVlemVFdmVudCB9IGZyb20gJy4vZXZlbnQnO1xyXG5pbXBvcnQgeyBDb21wbGV4QXJyYXkgfSBmcm9tICcuL2NvbXBsZXgtYXJyYXknO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZSwgRGF0YVNlcnZpY2VDb25maWcsIEpzb25SZXN1bHRzQWRhcHRlciwgSnNvblJlc3VsdHNBZGFwdGVyQ29uZmlnLCBOb2RlQ29udGV4dCwgTm9kZU1ldGEgfSBmcm9tICcuL2RhdGEtc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFUeXBlICB9IGZyb20gJy4vZGF0YS10eXBlJztcclxuaW1wb3J0IHsgRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9lbnRpdHktYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5QXNwZWN0LCBDb21wbGV4QXNwZWN0LCBFbnRpdHksIENvbXBsZXhPYmplY3QsIFN0cnVjdHVyYWxPYmplY3QsIFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncyB9IGZyb20gJy4vZW50aXR5LWFzcGVjdCc7XHJcbmltcG9ydCB7IEVudGl0eUtleSB9IGZyb20gJy4vZW50aXR5LWtleSc7XHJcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIEVudGl0eU1hbmFnZXJDb25maWcsIEVudGl0eUVycm9yLCBFbnRpdHlDaGFuZ2VkRXZlbnRBcmdzLCBTYXZlQ29udGV4dCwgU2F2ZUJ1bmRsZSwgSHR0cFJlc3BvbnNlLCBLZXlNYXBwaW5nLCBTZXJ2ZXJFcnJvciwgU2F2ZVJlc3VsdCwgUXVlcnlSZXN1bHQsIFZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkRXZlbnRBcmdzLCBIYXNDaGFuZ2VzQ2hhbmdlZEV2ZW50QXJncyB9IGZyb20gJy4vZW50aXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSwgRmlsdGVyUXVlcnlPcCwgQm9vbGVhblF1ZXJ5T3AsIE9yZGVyQnlDbGF1c2UsIEV4cGFuZENsYXVzZSwgU2VsZWN0Q2xhdXNlIH0gZnJvbSAnLi9lbnRpdHktcXVlcnknO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgSW50ZXJmYWNlUmVnaXN0cnksIEFqYXhBZGFwdGVyLCBBamF4Q29uZmlnLCBEYXRhU2VydmljZUFkYXB0ZXIsIE1vZGVsTGlicmFyeUFkYXB0ZXIsIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciwgVXJpQnVpbGRlckFkYXB0ZXIsIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnLCBBamF4UmVxdWVzdEludGVyY2VwdG9yIH0gZnJvbSAnLi9pbnRlcmZhY2UtcmVnaXN0cnknO1xyXG5pbXBvcnQgeyBLZXlHZW5lcmF0b3IgfSBmcm9tICcuL2tleS1nZW5lcmF0b3InO1xyXG5pbXBvcnQgeyBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMgfSBmcm9tICcuL2xvY2FsLXF1ZXJ5LWNvbXBhcmlzb24tb3B0aW9ucyc7XHJcbmltcG9ydCB7IE1hcHBpbmdDb250ZXh0IH0gZnJvbSAnLi9tYXBwaW5nLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVN0b3JlLCBFbnRpdHlUeXBlLCBDb21wbGV4VHlwZSwgU3RydWN0dXJhbFR5cGUsIERhdGFQcm9wZXJ0eSwgRW50aXR5UHJvcGVydHksIE5hdmlnYXRpb25Qcm9wZXJ0eSwgQXV0b0dlbmVyYXRlZEtleVR5cGUgICB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgTmFtaW5nQ29udmVudGlvbiB9IGZyb20gJy4vbmFtaW5nLWNvbnZlbnRpb24nO1xyXG5pbXBvcnQgeyBQcmVkaWNhdGUsIFZpc2l0Q29udGV4dCwgVmlzaXRvciwgRXhwcmVzc2lvbkNvbnRleHQsIFVuYXJ5UHJlZGljYXRlLCBCaW5hcnlQcmVkaWNhdGUsIEFueUFsbFByZWRpY2F0ZSwgQW5kT3JQcmVkaWNhdGUsIExpdEV4cHIsIEZuRXhwciwgUHJvcEV4cHIgfSBmcm9tICcuL3ByZWRpY2F0ZSc7XHJcbmltcG9ydCB7IFF1ZXJ5T3B0aW9ucywgIEZldGNoU3RyYXRlZ3ksIE1lcmdlU3RyYXRlZ3kgfSBmcm9tICcuL3F1ZXJ5LW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBTYXZlT3B0aW9ucyB9IGZyb20gJy4vc2F2ZS1vcHRpb25zJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk9wdGlvbnMgfSBmcm9tICcuL3ZhbGlkYXRpb24tb3B0aW9ucyc7XHJcblxyXG5pbXBvcnQgeyBjb25maWcsIEJhc2VBZGFwdGVyIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBjb3JlLCBDYWxsYmFjaywgRXJyb3JDYWxsYmFjayB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IG1ha2VSZWxhdGlvbkFycmF5LCBtYWtlUHJpbWl0aXZlQXJyYXksIG1ha2VDb21wbGV4QXJyYXkgfSBmcm9tICcuL2FycmF5JztcclxuXHJcbmltcG9ydCB7IFJlbGF0aW9uQXJyYXkgfSBmcm9tICcuL3JlbGF0aW9uLWFycmF5JztcclxuaW1wb3J0IHsgQXJyYXlDaGFuZ2VkQXJncyB9IGZyb20gJy4vb2JzZXJ2YWJsZS1hcnJheSc7XHJcbmV4cG9ydCB7IEJyZWV6ZUNvbmZpZywgQ29tcGxleEFycmF5LCBSZWxhdGlvbkFycmF5IH07XHJcblxyXG5leHBvcnQge1xyXG4gIEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIEFqYXhBZGFwdGVyLFxyXG4gIEFqYXhDb25maWcsXHJcbiAgQWpheFJlcXVlc3RJbnRlcmNlcHRvcixcclxuICBBbmRPclByZWRpY2F0ZSxcclxuICBBbnlBbGxQcmVkaWNhdGUsXHJcbiAgQXJyYXlDaGFuZ2VkQXJncyxcclxuICBhc3NlcnRDb25maWcsXHJcbiAgYXNzZXJ0UGFyYW0sXHJcbiAgQXV0b0dlbmVyYXRlZEtleVR5cGUsXHJcbiAgQmFzZUFkYXB0ZXIsXHJcbiAgQmluYXJ5UHJlZGljYXRlLFxyXG4gIEJyZWV6ZUVudW0sXHJcbiAgQnJlZXplRXZlbnQsIFxyXG4gIENhbGxiYWNrLFxyXG4gIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcixcclxuICBDb21wbGV4QXNwZWN0LFxyXG4gIENvbXBsZXhPYmplY3QsXHJcbiAgQ29tcGxleFR5cGUsXHJcbiAgY29uZmlnLFxyXG4gIGNvcmUsXHJcbiAgRGF0YVByb3BlcnR5LFxyXG4gIERhdGFTZXJ2aWNlLFxyXG4gIERhdGFTZXJ2aWNlQWRhcHRlcixcclxuICBEYXRhU2VydmljZUNvbmZpZyxcclxuICBEYXRhVHlwZSxcclxuICBFbnRpdHksXHJcbiAgRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFzcGVjdCxcclxuICBFbnRpdHlDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIEVudGl0eUVycm9yLFxyXG4gIEVudGl0eUtleSxcclxuICBFbnRpdHlNYW5hZ2VyLFxyXG4gIEVudGl0eU1hbmFnZXJDb25maWcsXHJcbiAgRW50aXR5UHJvcGVydHksXHJcbiAgRW50aXR5UXVlcnksXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5VHlwZSxcclxuICBFcnJvckNhbGxiYWNrLFxyXG4gIEV4cGFuZENsYXVzZSxcclxuICBFeHByZXNzaW9uQ29udGV4dCxcclxuICBGZXRjaFN0cmF0ZWd5LFxyXG4gIEZpbHRlclF1ZXJ5T3AsXHJcbiAgRm5FeHByLFxyXG4gIEhhc0NoYW5nZXNDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIEh0dHBSZXNwb25zZSxcclxuICBJbnRlcmZhY2VSZWdpc3RyeSxcclxuICBJbnRlcmZhY2VSZWdpc3RyeUNvbmZpZyxcclxuICBKc29uUmVzdWx0c0FkYXB0ZXIsXHJcbiAgSnNvblJlc3VsdHNBZGFwdGVyQ29uZmlnLFxyXG4gIEtleUdlbmVyYXRvcixcclxuICBLZXlNYXBwaW5nLFxyXG4gIExpdEV4cHIsXHJcbiAgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLFxyXG4gIG1ha2VDb21wbGV4QXJyYXksXHJcbiAgbWFrZVByaW1pdGl2ZUFycmF5LFxyXG4gIG1ha2VSZWxhdGlvbkFycmF5LFxyXG4gIE1hcHBpbmdDb250ZXh0LFxyXG4gIE1lcmdlU3RyYXRlZ3ksXHJcbiAgTWV0YWRhdGFTdG9yZSxcclxuICBNb2RlbExpYnJhcnlBZGFwdGVyLFxyXG4gIE5hbWluZ0NvbnZlbnRpb24sXHJcbiAgTmF2aWdhdGlvblByb3BlcnR5LFxyXG4gIE5vZGVDb250ZXh0LFxyXG4gIE5vZGVNZXRhLFxyXG4gIE9yZGVyQnlDbGF1c2UsXHJcbiAgUHJlZGljYXRlLFxyXG4gIFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncyxcclxuICBQcm9wRXhwcixcclxuICBRdWVyeU9wdGlvbnMsXHJcbiAgUXVlcnlSZXN1bHQsXHJcbiAgU2F2ZUJ1bmRsZSxcclxuICBTYXZlQ29udGV4dCxcclxuICBTYXZlT3B0aW9ucyxcclxuICBTYXZlUmVzdWx0LFxyXG4gIFNlbGVjdENsYXVzZSxcclxuICBTZXJ2ZXJFcnJvcixcclxuICBTdHJ1Y3R1cmFsT2JqZWN0LFxyXG4gIFN0cnVjdHVyYWxUeXBlLFxyXG4gIFVuYXJ5UHJlZGljYXRlLFxyXG4gIFVyaUJ1aWxkZXJBZGFwdGVyLFxyXG4gIFZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIFZhbGlkYXRpb25FcnJvcixcclxuICBWYWxpZGF0aW9uT3B0aW9ucyxcclxuICBWYWxpZGF0b3IsXHJcbiAgVmlzaXRDb250ZXh0LFxyXG4gIFZpc2l0b3IsXHJcbn07XHJcblxyXG4vLyBjcmVhdGUgYSBicmVlemUgdmFyaWFibGUgaGVyZVxyXG5leHBvcnQgY29uc3QgYnJlZXplID0ge1xyXG4gIEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyOiBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlcixcclxuICBhc3NlcnRDb25maWc6IG51bGwgYXMgYW55LFxyXG4gIGFzc2VydFBhcmFtOiBudWxsIGFzIGFueSxcclxuICBBdXRvR2VuZXJhdGVkS2V5VHlwZTogQXV0b0dlbmVyYXRlZEtleVR5cGUsXHJcbiAgQm9vbGVhblF1ZXJ5T3A6IEJvb2xlYW5RdWVyeU9wLFxyXG4gIENvbXBsZXhBc3BlY3Q6IENvbXBsZXhBc3BlY3QsXHJcbiAgQ29tcGxleFR5cGU6IENvbXBsZXhUeXBlLFxyXG4gIGNvbmZpZzogY29uZmlnLFxyXG4gIGNvcmU6IGNvcmUsXHJcbiAgRGF0YVByb3BlcnR5OiBEYXRhUHJvcGVydHksXHJcbiAgRGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gIERhdGFUeXBlOiBEYXRhVHlwZSxcclxuICBFbnRpdHlBY3Rpb246IEVudGl0eUFjdGlvbixcclxuICBFbnRpdHlBc3BlY3Q6IEVudGl0eUFzcGVjdCxcclxuICBFbnRpdHlLZXk6IEVudGl0eUtleSxcclxuICBFbnRpdHlNYW5hZ2VyOiBFbnRpdHlNYW5hZ2VyLFxyXG4gIEVudGl0eVF1ZXJ5OiBFbnRpdHlRdWVyeSxcclxuICBFbnRpdHlTdGF0ZTogRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5VHlwZTogRW50aXR5VHlwZSxcclxuICBFdmVudDogQnJlZXplRXZlbnQsXHJcbiAgRmV0Y2hTdHJhdGVneTogRmV0Y2hTdHJhdGVneSxcclxuICBGaWx0ZXJRdWVyeU9wOiBGaWx0ZXJRdWVyeU9wLFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5OiBJbnRlcmZhY2VSZWdpc3RyeSxcclxuICBKc29uUmVzdWx0c0FkYXB0ZXI6IEpzb25SZXN1bHRzQWRhcHRlcixcclxuICBLZXlHZW5lcmF0b3I6IEtleUdlbmVyYXRvcixcclxuICBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnM6IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyxcclxuICBtYWtlQ29tcGxleEFycmF5OiBtYWtlQ29tcGxleEFycmF5LFxyXG4gIG1ha2VQcmltaXRpdmVBcnJheTogbWFrZVByaW1pdGl2ZUFycmF5LFxyXG4gIG1ha2VSZWxhdGlvbkFycmF5OiBtYWtlUmVsYXRpb25BcnJheSxcclxuICBNZXJnZVN0cmF0ZWd5OiBNZXJnZVN0cmF0ZWd5LFxyXG4gIE1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUsXHJcbiAgTmFtaW5nQ29udmVudGlvbjogTmFtaW5nQ29udmVudGlvbixcclxuICBOYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSxcclxuICBPcmRlckJ5Q2xhdXNlOiBPcmRlckJ5Q2xhdXNlLCAvLyBmb3IgdGVzdGluZyBvbmx5XHJcbiAgUGFyYW0sXHJcbiAgUHJlZGljYXRlOiBQcmVkaWNhdGUsXHJcbiAgUXVlcnlPcHRpb25zOiBRdWVyeU9wdGlvbnMsXHJcbiAgU2F2ZU9wdGlvbnM6IFNhdmVPcHRpb25zLFxyXG4gIFZhbGlkYXRpb25FcnJvcjogVmFsaWRhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25PcHRpb25zOiBWYWxpZGF0aW9uT3B0aW9ucyxcclxuICBWYWxpZGF0b3I6IFZhbGlkYXRvcixcclxuICB2ZXJzaW9uOiBcIjIuMS4zXCJcclxufTtcclxuXHJcbi8vIGJyZWV6ZS5hc3NlcnRDb25maWcgPSBhc3NlcnRDb25maWcgYXMgYW55O1xyXG4vLyBicmVlemUuYXNzZXJ0UGFyYW0gPSBhc3NlcnRQYXJhbSBhcyBhbnk7XHJcblxyXG5leHBvcnQgbmFtZXNwYWNlIHByb21pc2VzIHtcclxuICAvKiogbm8tb3AgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBicmVlemUtYnJpZGdlMi1hbmd1bGFyICovXHJcbiAgZXhwb3J0IGludGVyZmFjZSBJUHJvbWlzZVNlcnZpY2Uge31cclxufVxyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmRlY2xhcmUgdmFyIGdsb2JhbDogYW55O1xyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmxldCB3aW46IGFueTtcclxudHJ5IHtcclxuICB3aW4gPSB3aW5kb3cgPyB3aW5kb3cgOiAoZ2xvYmFsID8gZ2xvYmFsLndpbmRvdyA6IHVuZGVmaW5lZCk7XHJcbn0gY2F0Y2ggKGUpIHtcclxuXHJcbn1cclxuaWYgKHdpbikge1xyXG4gIHdpbi5icmVlemUgPSBicmVlemU7XHJcbn1cclxuIl19
@@ -448,6 +448,9 @@ function requireLibCore(libName) {
448
448
  }
449
449
  /** Execute fn while obj has tempValue for property */
450
450
  function using(obj, property, tempValue, fn) {
451
+ if (!obj) {
452
+ return fn();
453
+ }
451
454
  let originalValue = obj[property];
452
455
  if (tempValue === originalValue) {
453
456
  return fn();
@@ -703,4 +706,4 @@ function isPrimitive(obj: any) {
703
706
  }
704
707
 
705
708
  */
706
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWVwQyxJQUFJLGNBQWMsR0FBMEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckcsSUFBSSxVQUFVLEdBQXVELE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQ3RFO0lBQzFCLElBQUk7UUFDQSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDMUU7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNSLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0wsQ0FBQztBQU5ELElBQUksY0FBYyxHQUFZLElBTTFCLENBQUM7QUFFTCxzQkFBc0I7QUFDdEIsU0FBUyxhQUFhLENBQUMsR0FBVyxFQUFFLElBQW9DO0lBQ3BFLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ2pCLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO0tBQ0o7QUFDTCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBVyxFQUFFLElBQXFDO0lBQ2pFLElBQUksT0FBTyxHQUFVLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNqQixJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3hCO1NBQ0o7S0FDSjtJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUFXLEVBQUUsV0FBK0M7SUFDN0UsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7UUFDakIsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUNyQztTQUNKO0tBQ0o7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQU8sR0FBUSxFQUFFLEtBQXNCO0lBQ3hELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFRLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxZQUFvQjtJQUNqRCxJQUFJLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUMsSUFBSSxFQUFFLElBQUksSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzVCLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsR0FBVyxFQUFFLFlBQW9CO0lBQ3hELElBQUksQ0FBQyxjQUFjO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFdEMsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ2xDLE9BQU8sTUFBTSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztLQUM3RDtTQUFNO1FBQ0gsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLE9BQU8sSUFBSSxJQUFJO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDdEMsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDbkQ7QUFDTCxDQUFDO0FBRUQsd0JBQXdCO0FBRXhCLG9FQUFvRTtBQUNwRSxTQUFTLE1BQU0sQ0FBQyxZQUFvQixFQUFFLEtBQVU7SUFDNUMsT0FBTyxVQUFVLEdBQVE7UUFDckIsT0FBTyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxpRkFBaUY7QUFDakYsU0FBUyxPQUFPLENBQUMsYUFBcUIsRUFBRSxhQUFxQixFQUFFLEtBQVU7SUFDckUsT0FBTyxVQUFVLEdBQVE7UUFDckIsT0FBTyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLENBQUM7SUFDeEUsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELHVEQUF1RDtBQUN2RCxTQUFTLEtBQUssQ0FBQyxZQUFpQjtJQUM1QixPQUFPLFVBQVUsR0FBUTtRQUNyQixPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsNEJBQTRCO0FBRTVCLHFEQUFxRDtBQUNyRCxTQUFTLG9CQUFvQixDQUFDLE1BQWM7SUFDeEMsSUFBSSxNQUFNLEdBQVUsRUFBRSxDQUFDO0lBQ3ZCLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFO1FBQ3JCLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzdCO0tBQ0o7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsNkRBQTZEO0FBQzdELFNBQVMsTUFBTSxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsU0FBb0I7SUFDaEUsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUMzQixJQUFJLFNBQVMsRUFBRTtRQUNYLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxRQUFRO1lBQ2hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7S0FDTjtTQUFNO1FBQ0gsS0FBSyxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUU7WUFDekIsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNsQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0o7S0FDSjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsU0FBUyxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsUUFBZ0I7SUFDeEQsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7UUFDdkIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7S0FDSjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7K0JBSytCO0FBQy9CLFNBQVMsWUFBWSxDQUFDLE1BQWMsRUFBRSxJQUEwRDtJQUM1RixJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsRixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBQ0YsU0FBUyxNQUFNLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQUUsU0FBaUIsRUFBRTtJQUVqRSxLQUFLLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRTtRQUN0QixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyx5Q0FBeUM7UUFDekMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLFFBQVE7WUFDM0IsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUN4QyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IseUZBQXlGO1lBQ3pGLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5Qyw0RkFBNEY7WUFDNUYsbUNBQW1DO1lBQ25DLDJCQUEyQjtZQUMzQixJQUFJLEtBQUssSUFBSSxZQUFZO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3ZDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDNUQsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssVUFBVSxFQUFFO2dCQUN0QyxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQy9CO2lCQUFNLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDcEMsSUFBSSxLQUFLLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtvQkFDdEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ3RCO2FBQ0o7WUFDRCxJQUFJLEtBQUssS0FBSyxTQUFTO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCx5SEFBeUg7QUFDekgsU0FBUyxrQkFBa0IsQ0FBQyxJQUFZLEVBQUUsR0FBUTtJQUM5QyxJQUFJLElBQUksS0FBSyxjQUFjLElBQUksSUFBSSxLQUFLLGVBQWUsSUFBSSxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxhQUFhO1dBQ25HLElBQUksS0FBSyxhQUFhLElBQUksSUFBSSxLQUFLLGFBQWE7V0FDaEQsSUFBSSxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7UUFBRSxPQUFPO0lBQzFGLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVELDBEQUEwRDtBQUMxRCxTQUFTLFVBQVUsQ0FBQyxHQUFRLEVBQUUsUUFBNEM7SUFDdEUsSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsa0JBQWtCO0lBQ3ZELElBQUksR0FBRyxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNwQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDWixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsa0JBQWtCO1FBQ2hFLElBQUksTUFBTSxLQUFLLEdBQUc7WUFBRSxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEQsd0NBQXdDO1FBQ3hDLEdBQUcsR0FBRyxNQUFNLENBQUM7S0FDaEI7SUFDRCxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNyQixJQUFJLE1BQVcsQ0FBQztJQUNoQixJQUFJLEdBQUcsWUFBWSxLQUFLLEVBQUU7UUFDdEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFNO1lBQzdCLE9BQU8sVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztLQUNOO1NBQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxFQUFFO1FBQ3BDLE1BQU0sR0FBRyxTQUFTLENBQUM7S0FDdEI7U0FBTTtRQUNILE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDWixLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtZQUNsQixJQUFJLElBQUksS0FBSyxXQUFXO2dCQUFFLFNBQVM7WUFDbkMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksUUFBUSxFQUFFO2dCQUNWLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLEdBQUcsS0FBSyxTQUFTO29CQUFFLFNBQVM7YUFDbkM7WUFDRCxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoQyxJQUFJLEdBQUcsS0FBSyxTQUFTO2dCQUFFLFNBQVM7WUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN0QjtLQUNKO0lBQ0QsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ3JCLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCx3SEFBd0g7QUFDeEgsU0FBUyxpQkFBaUIsQ0FBQyxPQUFpQixFQUFFLGFBQXVCO0lBQ2pFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNYLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDNUIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7UUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7b0JBQ25CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQ1osTUFBTTtpQkFDVDthQUNKO1NBQ0o7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUdELGtCQUFrQjtBQUVsQixTQUFTLE9BQU8sQ0FBQyxJQUFTO0lBQ3RCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtRQUNkLE9BQU8sRUFBRSxDQUFDO0tBQ2I7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDNUIsT0FBTyxJQUFJLENBQUM7S0FDZjtTQUFNO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pCO0FBQ0wsQ0FBQztBQUVELDhGQUE4RjtBQUM5RixxR0FBcUc7QUFDcEcsU0FBUyxHQUFHLENBQUksS0FBYyxFQUFFLEVBQThCLEVBQUUsV0FBcUI7SUFDbEYsK0RBQStEO0lBQy9ELFdBQVcsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUN2RCxJQUFJLEtBQUssSUFBSSxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDaEMsbUJBQW1CO0lBQ25CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN0QixJQUFJLE1BQU0sR0FBVSxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQU0sRUFBRSxFQUFVO1lBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLFdBQVcsRUFBRTtnQkFDMUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNsQjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7S0FDakI7U0FBTTtRQUNILElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixPQUFPLE1BQU0sQ0FBQztLQUNqQjtBQUVMLENBQUM7QUFJRCxTQUFTLFVBQVUsQ0FBSSxLQUFVLEVBQUUsU0FBdUI7SUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQjtLQUNKO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUlELFNBQVMsWUFBWSxDQUFJLEtBQVUsRUFBRSxTQUF1QjtJQUN4RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3JDO0lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNkLENBQUM7QUFFRCx1Q0FBdUM7QUFDdkMsU0FBUyxrQkFBa0IsQ0FBSSxLQUFVLEVBQUUsSUFBTztJQUM5QyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBSSxLQUFVLEVBQUUsZUFBaUMsRUFBRyxvQkFBOEI7SUFDdEcsSUFBSSxTQUFTLEdBQUcsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFpQixDQUFDO0lBQzVGLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzlCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLGVBQWUsQ0FBQyxFQUFFO1lBQ2xFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtLQUNKO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQztBQUVELHlHQUF5RztBQUN6RyxTQUFTLFFBQVEsQ0FBQyxFQUFTLEVBQUUsRUFBUyxFQUFFLFFBQW1DO0lBQ3ZFLElBQUksTUFBTSxHQUFVLEVBQUUsQ0FBQztJQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdkM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLDBCQUEwQjtBQUMxQixzQkFBc0I7QUFDdEIscURBQXFEO0FBQ3JELDJDQUEyQztBQUMzQyxvQ0FBb0M7QUFDcEMsT0FBTztBQUNQLG9CQUFvQjtBQUNwQixHQUFHO0FBRUgsaUJBQWlCO0FBQ2pCLDBFQUEwRTtBQUMxRSw2RkFBNkY7QUFDN0Ysd0ZBQXdGO0FBQ3hGLHVDQUF1QztBQUN2Qyw4Q0FBOEM7QUFDOUMsa0NBQWtDO0FBQ2xDLDJCQUEyQjtBQUMzQixtQkFBbUI7QUFDbkIsT0FBTztBQUNQLGdDQUFnQztBQUNoQyxlQUFlO0FBQ2YsR0FBRztBQUVILFNBQVMsV0FBVyxDQUFDLEVBQVMsRUFBRSxFQUFTLEVBQUUsUUFBd0M7SUFDL0Usd0NBQXdDO0lBQ3hDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFN0IsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFMUMsc0JBQXNCO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hDLDJEQUEyRDtRQUMzRCx5Q0FBeUM7UUFDekMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztTQUNoRDthQUFNO1lBQ0gsSUFBSSxRQUFRLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUFFLE9BQU8sS0FBSyxDQUFDO2FBQzdDO2lCQUFNO2dCQUNILElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQUUsT0FBTyxLQUFLLENBQUM7YUFDckM7U0FDSjtLQUNKO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELHlCQUF5QjtBQUV6QixnRkFBZ0Y7QUFDaEYsU0FBUyxRQUFRLENBQUMsTUFBYyxFQUFFLFFBQWdCO0lBQzlDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNULE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDMUI7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsU0FBUyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxVQUFtQjtJQUNyRCxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsSUFBSSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksR0FBRztZQUFFLE9BQU8sR0FBRyxDQUFDO0tBQ3ZCO0lBQ0QsSUFBSSxVQUFVLEVBQUU7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLFFBQVEsR0FBRyxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUM7S0FDNUU7QUFDTCxDQUFDO0FBSUQsdUVBQXVFO0FBQ3ZFLFNBQVMsY0FBYyxDQUFDLE9BQWU7SUFDbkMsSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6RCxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sQ0FBQyxvREFBb0Q7SUFFdEUsNkNBQTZDO0lBQzdDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixJQUFJLEdBQUc7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUVwQiwrQ0FBK0M7SUFDL0MsZ0VBQWdFO0lBQ2hFLHlFQUF5RTtJQUN6RSx5REFBeUQ7SUFDekQsMkVBQTJFO0lBQzNFLG9CQUFvQjtJQUNwQixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxFQUFFLEVBQUUsb0JBQW9CO1FBQ3pCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLG9EQUFvRDtZQUNqRSx5REFBeUQ7WUFDekQsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUN0RDthQUFNO1lBQ0gsaUZBQWlGO1lBQ2pGLDRFQUE0RTtZQUM1RSw2REFBNkQ7WUFDN0QsSUFBSTtnQkFDQSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNyQjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLHFEQUFxRDtnQkFDckQsT0FBTzthQUNWO1NBQ0o7S0FDSjtBQUNMLENBQUM7QUFFRCxzREFBc0Q7QUFDdEQsU0FBUyxLQUFLLENBQUMsR0FBVyxFQUFFLFFBQWdCLEVBQUUsU0FBYyxFQUFFLEVBQWE7SUFDdkUsSUFBSSxhQUFhLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLElBQUksU0FBUyxLQUFLLGFBQWEsRUFBRTtRQUM3QixPQUFPLEVBQUUsRUFBRSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQzFCLElBQUk7UUFDQSxPQUFPLEVBQUUsRUFBRSxDQUFDO0tBQ2Y7WUFBUztRQUNOLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUM3QixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4QjthQUFNO1lBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGFBQWEsQ0FBQztTQUNqQztLQUNKO0FBQ0wsQ0FBQztBQUVELDJEQUEyRDtBQUMzRCxTQUFTLGFBQWEsQ0FBQyxPQUFrQixFQUFFLEtBQTBCLEVBQUUsRUFBYTtJQUNoRixJQUFJLEtBQVUsQ0FBQztJQUNmLElBQUk7UUFDQSxLQUFLLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDbEIsT0FBTyxFQUFFLEVBQUUsQ0FBQztLQUNmO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDUixJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDN0IsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDbkI7UUFDRCxNQUFNLENBQUMsQ0FBQztLQUNYO1lBQVM7UUFDTixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDaEI7QUFDTCxDQUFDO0FBRUQsbUZBQW1GO0FBQ25GLFNBQVMsT0FBTyxDQUFDLEVBQU87SUFDcEIsT0FBTztRQUNILElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBTSxTQUFTLENBQUMsRUFDakMsSUFBSSxHQUFHLEVBQUUsRUFDVCxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFDZixVQUFVLEdBQVEsSUFBSSxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDUixVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ3RGLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN6QixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbEIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsU0FBUyxPQUFPO0lBQ1osT0FBTyxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQztRQUN0RSwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLFFBQWdCO0lBQ3ZDLG1FQUFtRTtJQUNuRSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixHQUFHLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUVqRywrREFBK0Q7SUFDL0QsK0RBQStEO0lBQy9ELElBQUksTUFBTSxHQUFHLHNEQUFzRCxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRixJQUFJLENBQUMsTUFBTTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBRTVFLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtJQUNuRSxJQUFJLE9BQU8sR0FBRyxDQUFDLFFBQVE7UUFDbkIsT0FBTztRQUNQLEtBQUs7UUFDTCxJQUFJO1FBQ0osRUFBRTtRQUNGLENBQUMsQ0FBQyxDQUFDLENBQWtCLGFBQWE7SUFFdEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLDhDQUE4QztRQUM5QyxLQUFLLEdBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE9BQU8sSUFBUyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3RDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFFbkIsQ0FBQztBQUVELGVBQWU7QUFFZixTQUFTLElBQUk7SUFDVCxlQUFlO0FBQ25CLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFNO0lBQ3BCLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLENBQU07SUFDbkIsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ1osT0FBTyxNQUFNLENBQUM7S0FDakI7SUFDRCxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7UUFDakIsT0FBTyxXQUFXLENBQUM7S0FDdEI7SUFDRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLENBQU07SUFDbEIsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxDQUFTO0lBQzNCLGlKQUFpSjtJQUNqSixJQUFJLEVBQUUsR0FBRyxvTkFBb04sQ0FBQztJQUM5TixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsQ0FBTTtJQUN0QixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUM7QUFDckMsQ0FBQztBQUVELDhCQUE4QjtBQUM5QixzQ0FBc0M7QUFDdEMsSUFBSTtBQUVKLDhCQUE4QjtBQUM5QixzQ0FBc0M7QUFDdEMsSUFBSTtBQUVKLFNBQVMsTUFBTSxDQUFDLEtBQVU7SUFDdEIsT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLG1EQUFtRCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBVTtJQUMxQixPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksK0JBQStCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxHQUFRO0lBQ3JCLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNqQixJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDMUIsT0FBTyxLQUFLLENBQUM7U0FDaEI7S0FDSjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxDQUFNO0lBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFJRCxzQkFBc0I7QUFFdEIsbUJBQW1CO0FBRW5CLFNBQVMsZ0JBQWdCLENBQUMsR0FBVyxFQUFFLE1BQWM7SUFDakQsK0NBQStDO0lBQy9DLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxNQUFNLElBQUksSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ2pELE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxHQUFXLEVBQUUsTUFBYztJQUMvQywrQ0FBK0M7SUFDL0MsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDekIsSUFBSSxNQUFNLEtBQUssRUFBRSxJQUFJLE1BQU0sSUFBSSxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDakQsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsc0RBQXNEO0FBQ3RELGlFQUFpRTtBQUNqRSxTQUFTLFlBQVksQ0FBQyxHQUFXLEVBQUUsR0FBRyxNQUFhO0lBQy9DLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUNyQixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkUsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEtBQUssRUFBRSxLQUFLO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELDBGQUEwRjtBQUMxRiw4RkFBOEY7QUFDOUYsSUFBSSxVQUFVLEdBQUcsOERBQThELENBQUM7QUFDaEYsU0FBUyxjQUFjLENBQUMsSUFBWTtJQUNoQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsMEJBQTBCO0FBRTFCLG1EQUFtRDtBQUNuRCwyRUFBMkU7QUFDM0UsU0FBUyxPQUFPLENBQUMsQ0FBTTtJQUNuQixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3pCLE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxRQUFRO0FBRVIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7SUFDaEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxVQUFVLE1BQVc7UUFDakMsSUFBSSxDQUFDLEdBQVE7UUFDYixDQUFDLENBQUM7UUFDRixDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0NBQ0w7QUFFRCw2QkFBNkI7QUFFN0IsTUFBTSxPQUFPLEdBQUc7SUFDWixTQUFTLEVBQUUsbUpBQW1KO0NBQ2pLLENBQUE7QUFFRCx3Q0FBd0M7QUFDeEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHO0lBQ2hCLGNBQWMsRUFBRSxjQUFjO0lBQzlCLGNBQWMsRUFBRSxjQUFjO0lBQzlCLG9CQUFvQixFQUFFLG9CQUFvQjtJQUMxQyxxQkFBcUIsRUFBRSxpQkFBaUI7SUFDeEMsYUFBYSxFQUFFLGFBQWE7SUFDNUIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsTUFBTSxFQUFFLE1BQU07SUFDZCxNQUFNLEVBQUUsTUFBTTtJQUNkLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLEtBQUssRUFBRSxLQUFLO0lBQ1osR0FBRyxFQUFFLEdBQUc7SUFDUixpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsWUFBWSxFQUFFLFlBQVk7SUFDMUIsa0JBQWtCLEVBQUUsa0JBQWtCO0lBQ3RDLFFBQVEsRUFBRSxRQUFRO0lBQ2xCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxXQUFXO0lBQ3hCLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFlBQVksRUFBRSxZQUFZO0lBQzFCLGVBQWUsRUFBRSxlQUFlO0lBQ2hDLFFBQVEsRUFBRSxRQUFRO0lBQ2xCLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxZQUFZLEVBQUUsWUFBWTtJQUUxQixVQUFVLEVBQUUsVUFBVTtJQUN0QixLQUFLLEVBQUUsS0FBSztJQUNaLGFBQWEsRUFBRSxhQUFhO0lBRTVCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLGlCQUFpQixFQUFFLGlCQUFpQjtJQUVwQyxVQUFVLEVBQUUsVUFBVTtJQUV0QixNQUFNLEVBQUUsTUFBTTtJQUNkLFlBQVksRUFBRSxZQUFZO0lBQzFCLE1BQU0sRUFBRSxNQUFNO0lBQ2QsVUFBVSxFQUFFLFVBQVU7SUFDdEIsVUFBVSxFQUFFLFVBQVU7SUFDdEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsU0FBUyxFQUFFLFNBQVM7SUFFcEIsUUFBUSxFQUFFLFFBQVE7SUFDbEIsSUFBSSxFQUFFLElBQUk7SUFFVixnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDbEMsY0FBYyxFQUFFLGNBQWM7SUFDOUIsWUFBWSxFQUFFLFlBQVk7SUFDMUIsU0FBUyxFQUFFLGNBQWM7SUFFekIsTUFBTSxFQUFFLE1BQU07SUFDZCxVQUFVLEVBQUUsVUFBVTtJQUN0QixrQkFBa0IsRUFBRSxrQkFBa0I7SUFFdEMsT0FBTyxFQUFFLE9BQU87Q0FDbkIsQ0FBQzs7QUFPRixTQUFTO0FBQ1Q7Ozs7Ozs7Ozs7RUFVRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBTZWUgaWYgdGhpcyBjb21tZW50IHdpbGwgbWFrZSBpdCBpbnRvIC5kLnRzICovXHJcbmltcG9ydCB7IEJyZWV6ZUVudW0gfSBmcm9tICcuL2VudW0nO1xyXG5kZWNsYXJlIHZhciBnbG9iYWw6IGFueTtcclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQ2FsbGJhY2sge1xyXG4gICAgKGVycm9yOiBFcnJvcik6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbGJhY2sge1xyXG4gICAgKGRhdGE6IGFueSk6IHZvaWQ7XHJcbn1cclxuXHJcbi8vIHR5cGUgUHJlZGljYXRlID0gKGk6IGFueSkgPT4gYm9vbGVhbjtcclxudHlwZSBQcmVkaWNhdGU8VD4gPSAoaTogVCkgPT4gYm9vbGVhbjtcclxuXHJcbmxldCBoYXNPd25Qcm9wZXJ0eTogKG9iajogT2JqZWN0LCBrZXk6IHN0cmluZykgPT4gYm9vbGVhbiA9IHVuY3VycnkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XHJcbmxldCBhcnJheVNsaWNlOiAoYXI6IGFueVtdLCBzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyKSA9PiBhbnlbXSA9IHVuY3VycnkoQXJyYXkucHJvdG90eXBlLnNsaWNlKTtcclxubGV0IGlzRVM1U3VwcG9ydGVkOiBib29sZWFuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gISEoT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3gnLCB7fSkpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufSAoKTtcclxuXHJcbi8vIGl0ZXJhdGUgb3ZlciBvYmplY3RcclxuZnVuY3Rpb24gb2JqZWN0Rm9yRWFjaChvYmo6IE9iamVjdCwga3ZGbjogKGtleTogc3RyaW5nLCB2YWw6IGFueSkgPT4gYW55KSB7XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwga2V5KSkge1xyXG4gICAgICAgICAgICBrdkZuKGtleSwgb2JqW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gb2JqZWN0TWFwKG9iajogT2JqZWN0LCBrdkZuPzogKGtleTogc3RyaW5nLCB2YWw6IGFueSkgPT4gYW55KTogYW55W10ge1xyXG4gICAgbGV0IHJlc3VsdHM6IGFueVtdID0gW107XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwga2V5KSkge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0ga3ZGbiA/IGt2Rm4oa2V5LCBvYmpba2V5XSkgOiBvYmpba2V5XTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBvYmplY3RGaXJzdChvYmo6IE9iamVjdCwga3ZQcmVkaWNhdGU6IChrZXk6IHN0cmluZywgdmFsOiBhbnkpID0+IGJvb2xlYW4pOiB7IGtleTogc3RyaW5nLCB2YWx1ZTogYW55IH0gfCBudWxsIHtcclxuICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcclxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqLCBrZXkpKSB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICBpZiAoa3ZQcmVkaWNhdGUoa2V5LCB2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGtleToga2V5LCB2YWx1ZTogdmFsdWUgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcnJheUZsYXRNYXA8VCwgVT4oYXJyOiBUW10sIG1hcEZuOiAoYXJnOiBUKSA9PiBVW10pIHtcclxuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcnIubWFwKG1hcEZuKSkgYXMgVVtdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NldHRhYmxlKG9iajogT2JqZWN0LCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHBkID0gZ2V0UHJvcERlc2NyaXB0b3Iob2JqLCBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgaWYgKHBkID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuICEhKHBkLndyaXRhYmxlIHx8IHBkLnNldCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFByb3BEZXNjcmlwdG9yKG9iajogT2JqZWN0LCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIWlzRVM1U3VwcG9ydGVkKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcGVydHlOYW1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IG5leHRPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcclxuICAgICAgICBpZiAobmV4dE9iaiA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiBnZXRQcm9wRGVzY3JpcHRvcihuZXh0T2JqLCBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBGdW5jdGlvbmFsIGV4dGVuc2lvbnNcclxuXHJcbi8qKiBjYW4gYmUgdXNlZCBsaWtlOiBwZXJzb25zLmZpbHRlcihwcm9wRXEoXCJmaXJzdE5hbWVcIiwgXCJKb2huXCIpKSAqL1xyXG5mdW5jdGlvbiBwcm9wRXEocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiAob2JqOiBPYmplY3QpID0+IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvYmo6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBvYmpbcHJvcGVydHlOYW1lXSA9PT0gdmFsdWU7XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiogY2FuIGJlIHVzZWQgbGlrZTogcGVyc29ucy5maWx0ZXIocHJvcEVxKFwiZmlyc3ROYW1lXCIsIFwiRmlyc3ROYW1lXCIsIFwiSm9oblwiKSkgKi9cclxuZnVuY3Rpb24gcHJvcHNFcShwcm9wZXJ0eTFOYW1lOiBzdHJpbmcsIHByb3BlcnR5Mk5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IChvYmo6IE9iamVjdCkgPT4gYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG9iajogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIG9ialtwcm9wZXJ0eTFOYW1lXSA9PT0gdmFsdWUgfHwgb2JqW3Byb3BlcnR5Mk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKiBjYW4gYmUgdXNlZCBsaWtlIHBlcnNvbnMubWFwKHBsdWNrKFwiZmlyc3ROYW1lXCIpKSAqL1xyXG5mdW5jdGlvbiBwbHVjayhwcm9wZXJ0eU5hbWU6IGFueSk6IChvYmo6IE9iamVjdCkgPT4gYW55IHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gb2JqW3Byb3BlcnR5TmFtZV07XHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBlbmQgZnVuY3Rpb25hbCBleHRlbnNpb25zXHJcblxyXG4vKiogUmV0dXJuIGFuIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcyBmcm9tIHNvdXJjZSAqL1xyXG5mdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVZhbHVlcyhzb3VyY2U6IE9iamVjdCk6IGFueVtdIHtcclxuICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XHJcbiAgICBmb3IgKGxldCBuYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShzb3VyY2UsIG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNvdXJjZVtuYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLyoqIENvcHkgcHJvcGVydGllcyBmcm9tIHNvdXJjZSB0byB0YXJnZXQuIFJldHVybnMgdGFyZ2V0LiAqL1xyXG5mdW5jdGlvbiBleHRlbmQodGFyZ2V0OiBPYmplY3QsIHNvdXJjZTogT2JqZWN0LCBwcm9wTmFtZXM/OiBzdHJpbmdbXSk6IE9iamVjdCB7XHJcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHRhcmdldDtcclxuICAgIGlmIChwcm9wTmFtZXMpIHtcclxuICAgICAgICBwcm9wTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IHByb3BOYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkoc291cmNlLCBwcm9wTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5cclxuLyoqIENvcHkgcHJvcGVydGllcyBmcm9tIGRlZmF1bHRzIGlmZiB1bmRlZmluZWQgb24gdGFyZ2V0LiAgUmV0dXJucyB0YXJnZXQuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVdpdGhEZWZhdWx0cyh0YXJnZXQ6IE9iamVjdCwgZGVmYXVsdHM6IE9iamVjdCk6IGFueSB7XHJcbiAgICBmb3IgKGxldCBuYW1lIGluIGRlZmF1bHRzKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldFtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRhcmdldFtuYW1lXSA9IGRlZmF1bHRzW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuXHJcbi8qKiBTZXQgY3Rvci5kZWZhdWx0SW5zdGFuY2UgdG8gYW4gaW5zdGFuY2Ugb2YgY3RvciB3aXRoIHByb3BlcnRpZXMgZnJvbSB0YXJnZXQuXHJcbiAgICBXZSB3YW50IHRvIGluc3VyZSB0aGF0IHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgY3Rvci5kZWZhdWx0SW5zdGFuY2UgaXMgYWx3YXlzIGltbXV0YWJsZVxyXG4gICAgVXNlICd0YXJnZXQnIGFzIHRoZSBwcmltYXJ5IHRlbXBsYXRlIGZvciB0aGUgY3Rvci5kZWZhdWx0SW5zdGFuY2U7XHJcbiAgICBVc2UgY3VycmVudCAnY3Rvci5kZWZhdWx0SW5zdGFuY2UnIGFzIHRoZSB0ZW1wbGF0ZSBmb3IgYW55IG1pc3NpbmcgcHJvcGVydGllc1xyXG4gICAgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBmb3IgY3Rvci5kZWZhdWx0SW5zdGFuY2VcclxuICAgIHJldHVybnMgdGFyZ2V0IHVuY2hhbmdlZCAqL1xyXG5mdW5jdGlvbiBzZXRBc0RlZmF1bHQodGFyZ2V0OiBPYmplY3QsIGN0b3I6IHsgbmV3ICguLi5hcmdzOiBhbnlbXSk6IGFueSwgZGVmYXVsdEluc3RhbmNlPzogYW55IH0pOiBhbnkge1xyXG4gICAgY3Rvci5kZWZhdWx0SW5zdGFuY2UgPSB1cGRhdGVXaXRoRGVmYXVsdHMobmV3IGN0b3IodGFyZ2V0KSwgY3Rvci5kZWZhdWx0SW5zdGFuY2UpO1xyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5cclxuLyoqXHJcbiAgICAnc291cmNlJyBpcyBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIHRyYW5zZm9ybWVkIGludG8gYW5vdGhlclxyXG4gICAgJ3RlbXBsYXRlJyBpcyBhIG1hcCB3aGVyZSB0aGVcclxuICAgICAgIGtleXM6IGFyZSB0aGUga2V5cyB0byByZXR1cm5cclxuICAgICAgICAgaWYgYSBrZXkgY29udGFpbnMgJywncyB0aGVuIHRoZSBrZXkgaXMgdHJlYXRlZCBhcyBhIGRlbGltaXRlZCBzdHJpbmcgd2l0aCBmaXJzdCBvZiB0aGVcclxuICAgICAgICAga2V5cyBiZWluZyB0aGUga2V5IHRvIHJldHVybiBhbmQgdGhlIG90aGVycyBhbGwgdmFsaWQgYWxpYXNlcyBmb3IgdGhpcyBrZXlcclxuICAgICAgICd2YWx1ZXMnIGFyZSBlaXRoZXJcclxuICAgICAgICAgICAxKSB0aGUgJ2RlZmF1bHQnIHZhbHVlIG9mIHRoZSBrZXlcclxuICAgICAgICAgICAyKSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaW4gdGhlIHNvdXJjZSB2YWx1ZSBhbmQgc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgdG8gc2V0XHJcbiAgICAgICAgIFRoZSB2YWx1ZSBmcm9tIHRoZSBzb3VyY2UgaXMgdGhlbiBzZXQgb24gdGhlIHRhcmdldCxcclxuICAgICAgICAgYWZ0ZXIgZmlyc3QgcGFzc2luZyB0aHJ1IHRoZSBmbiwgaWYgcHJvdmlkZWQsIFVOTEVTUzpcclxuICAgICAgICAgICAxKSBpdCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAgICAgIDIpIGl0IGlzIHVuZGVmaW5lZCAoIG51bGxzIFdJTEwgYmUgc2V0KVxyXG4gICAgJ3RhcmdldCcgaXMgb3B0aW9uYWxcclxuICAgICAgIC0gaWYgaXQgZXhpc3RzIHRoZW4gcHJvcGVydGllcyBvZiB0aGUgdGFyZ2V0IHdpbGwgYmUgc2V0ICggb3ZlcndyaXR0ZW4gaWYgdGhlIGV4aXN0KVxyXG4gICAgICAgLSBpZiBpdCBkb2VzIG5vdCBleGlzdCB0aGVuIGEgbmV3IG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgYXMgZmlsbGVkLlxyXG4gICAgJ3RhcmdldCBpcyByZXR1cm5lZC5cclxuKi9cclxuZnVuY3Rpb24gdG9Kc29uKHNvdXJjZTogT2JqZWN0LCB0ZW1wbGF0ZTogT2JqZWN0LCB0YXJnZXQ6IE9iamVjdCA9IHt9KTogT2JqZWN0IHtcclxuXHJcbiAgICBmb3IgKGxldCBrZXkgaW4gdGVtcGxhdGUpIHtcclxuICAgICAgICBsZXQgYWxpYXNlcyA9IGtleS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZSA9IHRlbXBsYXRlW2tleV07XHJcbiAgICAgICAgLy8gdXNpbmcgc29tZSBhcyBhIGZvckVhY2ggd2l0aCBhICdicmVhaydcclxuICAgICAgICBhbGlhc2VzLnNvbWUoZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICghKHByb3BOYW1lIGluIHNvdXJjZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgLy8gdGhlcmUgaXMgYSBmdW5jdGlvbmFsIHByb3BlcnR5IGRlZmluZWQgd2l0aCB0aGlzIGFsaWFzICggbm90IHdoYXQgd2Ugd2FudCB0byByZXBsYWNlKS5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAvLyAnPT0nIGlzIGRlbGliZXJhdGUgaGVyZSAtIGlkZWEgaXMgdGhhdCBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgd2lsbCBuZXZlciBnZXQgc2VyaWFsaXplZFxyXG4gICAgICAgICAgICAvLyBpZiBkZWZhdWx0IHZhbHVlIGlzIHNldCB0byBudWxsLlxyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09IGRlZmF1bHRWYWx1ZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIChkZWZhdWx0VmFsdWUpID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgQnJlZXplRW51bSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldFthbGlhc2VzWzBdXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuXHJcbi8qKiBSZXBsYWNlciBmdW5jdGlvbiBmb3IgdG9KU09OU2FmZSwgd2hlbiBzZXJpYWxpemluZyBlbnRpdGllcy4gIEV4Y2x1ZGVzIGVudGl0eUFzcGVjdCBhbmQgb3RoZXIgaW50ZXJuYWwgcHJvcGVydGllcy4gKi9cclxuZnVuY3Rpb24gdG9KU09OU2FmZVJlcGxhY2VyKHByb3A6IHN0cmluZywgdmFsOiBhbnkpIHtcclxuICAgIGlmIChwcm9wID09PSBcImVudGl0eUFzcGVjdFwiIHx8IHByb3AgPT09IFwiY29tcGxleEFzcGVjdFwiIHx8IHByb3AgPT09IFwiZW50aXR5VHlwZVwiIHx8IHByb3AgPT09IFwiY29tcGxleFR5cGVcIlxyXG4gICAgICAgIHx8IHByb3AgPT09IFwiZ2V0UHJvcGVydHlcIiB8fCBwcm9wID09PSBcInNldFByb3BlcnR5XCJcclxuICAgICAgICB8fCBwcm9wID09PSBcImNvbnN0cnVjdG9yXCIgfHwgcHJvcC5jaGFyQXQoMCkgPT09ICdfJyB8fCBwcm9wLmNoYXJBdCgwKSA9PT0gJyQnKSByZXR1cm47XHJcbiAgICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG4vKiogU2FmZWx5IHBlcmZvcm0gdG9KU09OIGxvZ2ljIG9uIG9iamVjdHMgd2l0aCBjeWNsZXMuICovXHJcbmZ1bmN0aW9uIHRvSlNPTlNhZmUob2JqOiBhbnksIHJlcGxhY2VyPzogKHByb3A6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KTogYW55IHtcclxuICAgIGlmIChvYmogIT09IE9iamVjdChvYmopKSByZXR1cm4gb2JqOyAvLyBwcmltaXRpdmUgdmFsdWVcclxuICAgIGlmIChvYmouXyR2aXNpdGVkKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKG9iai50b0pTT04pIHtcclxuICAgICAgICBsZXQgbmV3T2JqID0gb2JqLnRvSlNPTigpO1xyXG4gICAgICAgIGlmIChuZXdPYmogIT09IE9iamVjdChuZXdPYmopKSByZXR1cm4gbmV3T2JqOyAvLyBwcmltaXRpdmUgdmFsdWVcclxuICAgICAgICBpZiAobmV3T2JqICE9PSBvYmopIHJldHVybiB0b0pTT05TYWZlKG5ld09iaiwgcmVwbGFjZXIpO1xyXG4gICAgICAgIC8vIHRvSlNPTiByZXR1cm5lZCB0aGUgb2JqZWN0IHVuY2hhbmdlZC5cclxuICAgICAgICBvYmogPSBuZXdPYmo7XHJcbiAgICB9XHJcbiAgICBvYmouXyR2aXNpdGVkID0gdHJ1ZTtcclxuICAgIGxldCByZXN1bHQ6IGFueTtcclxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIHJlc3VsdCA9IG9iai5tYXAoZnVuY3Rpb24gKG86IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdG9KU09OU2FmZShvLCByZXBsYWNlcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiAob2JqKSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBwcm9wIGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJfJHZpc2l0ZWRcIikgY29udGludWU7XHJcbiAgICAgICAgICAgIGxldCB2YWwgPSBvYmpbcHJvcF07XHJcbiAgICAgICAgICAgIGlmIChyZXBsYWNlcikge1xyXG4gICAgICAgICAgICAgICAgdmFsID0gcmVwbGFjZXIocHJvcCwgdmFsKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFsID0gdG9KU09OU2FmZSh2YWwsIHJlcGxhY2VyKTtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgcmVzdWx0W3Byb3BdID0gdmFsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRlbGV0ZSBvYmouXyR2aXNpdGVkO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLyoqIFJlc29sdmVzIHRoZSB2YWx1ZXMgb2YgYSBsaXN0IG9mIHByb3BlcnRpZXMgYnkgY2hlY2tpbmcgZWFjaCBwcm9wZXJ0eSBpbiBtdWx0aXBsZSBzb3VyY2VzIHVudGlsIGEgdmFsdWUgaXMgZm91bmQuICovXHJcbmZ1bmN0aW9uIHJlc29sdmVQcm9wZXJ0aWVzKHNvdXJjZXM6IE9iamVjdFtdLCBwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSk6IGFueSB7XHJcbiAgICBsZXQgciA9IHt9O1xyXG4gICAgbGV0IGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoO1xyXG4gICAgcHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChwbikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHNyYyA9IHNvdXJjZXNbaV07XHJcbiAgICAgICAgICAgIGlmIChzcmMpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSBzcmNbcG5dO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcltwbl0gPSB2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5cclxuLy8gYXJyYXkgZnVuY3Rpb25zXHJcblxyXG5mdW5jdGlvbiB0b0FycmF5KGl0ZW06IGFueSk6IGFueVtdIHtcclxuICAgIGlmIChpdGVtID09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIFtpdGVtXTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqIGEgdmVyc2lvbiBvZiBBcnJheS5tYXAgdGhhdCBkb2Vzbid0IHJlcXVpcmUgYW4gYXJyYXksIGkuZS4gd29ya3Mgb24gYXJyYXlzIGFuZCBzY2FsYXJzLiAqL1xyXG4vLyBmdW5jdGlvbiBtYXA8VCwgVT4oaXRlbXM6IFQgfCBUW10sIGZuOiAodjogVCwgaXg/OiBudW1iZXIpID0+IFUsIGluY2x1ZGVOdWxsPzogYm9vbGVhbik6IFUgfCBVW10ge1xyXG4gZnVuY3Rpb24gbWFwPFQ+KGl0ZW1zOiBUIHwgVFtdLCBmbjogKHY6IFQsIGl4PzogbnVtYmVyKSA9PiBhbnksIGluY2x1ZGVOdWxsPzogYm9vbGVhbik6IGFueSB8IGFueVtdIHtcclxuICAgIC8vIHdoZXRoZXIgdG8gcmV0dXJuIG51bGxzIGluIGFycmF5IG9mIHJlc3VsdHM7IGRlZmF1bHQgPSB0cnVlO1xyXG4gICAgaW5jbHVkZU51bGwgPSBpbmNsdWRlTnVsbCA9PSBudWxsID8gdHJ1ZSA6IGluY2x1ZGVOdWxsO1xyXG4gICAgaWYgKGl0ZW1zID09IG51bGwpIHJldHVybiBpdGVtcztcclxuICAgIC8vIGxldCByZXN1bHQ6IFVbXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAodjogYW55LCBpeDogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGxldCByID0gZm4odiwgaXgpO1xyXG4gICAgICAgICAgICBpZiAociAhPSBudWxsIHx8IGluY2x1ZGVOdWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbaXhdID0gcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmbihpdGVtcyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbi8qKiBSZXR1cm4gZmlyc3QgZWxlbWVudCBtYXRjaGluZyBwcmVkaWNhdGUgKi9cclxuZnVuY3Rpb24gYXJyYXlGaXJzdDxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6IFByZWRpY2F0ZTxhbnk+KTogVDtcclxuZnVuY3Rpb24gYXJyYXlGaXJzdDxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6IFByZWRpY2F0ZTxUPikge1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSBhcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2ldKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlbaV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbi8qKiBSZXR1cm4gaW5kZXggb2YgZmlyc3QgZWxlbWVudCBtYXRjaGluZyBwcmVkaWNhdGUgKi9cclxuZnVuY3Rpb24gYXJyYXlJbmRleE9mPFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZTogUHJlZGljYXRlPGFueT4pOiBudW1iZXI7XHJcbmZ1bmN0aW9uIGFycmF5SW5kZXhPZjxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6IFByZWRpY2F0ZTxUPik6IG51bWJlciB7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IGFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaV0pKSByZXR1cm4gaTtcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG5cclxuLyoqIEFkZCBpdGVtIGlmIG5vdCBhbHJlYWR5IGluIGFycmF5ICovXHJcbmZ1bmN0aW9uIGFycmF5QWRkSXRlbVVuaXF1ZTxUPihhcnJheTogVFtdLCBpdGVtOiBUKSB7XHJcbiAgICBsZXQgaXggPSBhcnJheS5pbmRleE9mKGl0ZW0pO1xyXG4gICAgaWYgKGl4ID09PSAtMSkgYXJyYXkucHVzaChpdGVtKTtcclxufVxyXG5cclxuLyoqIFJlbW92ZSBpdGVtcyBmcm9tIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0gYXJyYXlcclxuICogQHBhcmFtIHByZWRpY2F0ZU9ySXRlbSAtIGl0ZW0gdG8gcmVtb3ZlLCBvciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgbWF0Y2hpbmcgaXRlbVxyXG4gKiBAcGFyYW0gc2hvdWxkUmVtb3ZlTXVsdGlwbGUgLSB0cnVlIHRvIGtlZXAgcmVtb3ZpbmcgYWZ0ZXIgZmlyc3QgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZVxyXG4gKi9cclxuZnVuY3Rpb24gYXJyYXlSZW1vdmVJdGVtPFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZU9ySXRlbTogVCB8IFByZWRpY2F0ZTxUPiAsIHNob3VsZFJlbW92ZU11bHRpcGxlPzogYm9vbGVhbikge1xyXG4gICAgbGV0IHByZWRpY2F0ZSA9IChpc0Z1bmN0aW9uKHByZWRpY2F0ZU9ySXRlbSkgPyBwcmVkaWNhdGVPckl0ZW0gOiB1bmRlZmluZWQpIGFzIFByZWRpY2F0ZTxUPjtcclxuICAgIGxldCBsYXN0SXggPSBhcnJheS5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHJlbW92ZWQgPSBmYWxzZTtcclxuICAgIGZvciAobGV0IGkgPSBsYXN0SXg7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHByZWRpY2F0ZSA/IHByZWRpY2F0ZShhcnJheVtpXSkgOiAoYXJyYXlbaV0gPT09IHByZWRpY2F0ZU9ySXRlbSkpIHtcclxuICAgICAgICAgICAgYXJyYXkuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICByZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKCFzaG91bGRSZW1vdmVNdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVtb3ZlZDtcclxufVxyXG5cclxuLyoqIENvbWJpbmUgYXJyYXkgZWxlbWVudHMgdXNpbmcgdGhlIGNhbGxiYWNrLiAgUmV0dXJucyBhcnJheSB3aXRoIGxlbmd0aCA9PSBtaW4oYTEubGVuZ3RoLCBhMi5sZW5ndGgpICovXHJcbmZ1bmN0aW9uIGFycmF5WmlwKGExOiBhbnlbXSwgYTI6IGFueVtdLCBjYWxsYmFjazogKHgxOiBhbnksIHgyOiBhbnkpID0+IGFueSk6IGFueVtdIHtcclxuICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XHJcbiAgICBsZXQgbiA9IE1hdGgubWluKGExLmxlbmd0aCwgYTIubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goY2FsbGJhY2soYTFbaV0sIGEyW2ldKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG4vL2Z1bmN0aW9uIGFycmF5RGlzdGluY3QoYXJyYXkpIHtcclxuLy8gICAgYXJyYXkgPSBhcnJheSB8fCBbXTtcclxuLy8gICAgbGV0IHJlc3VsdCA9IFtdO1xyXG4vLyAgICBmb3IgKGxldCBpID0gMCwgaiA9IGFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG4vLyAgICAgICAgaWYgKHJlc3VsdC5pbmRleE9mKGFycmF5W2ldKSA8IDApXHJcbi8vICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyYXlbaV0pO1xyXG4vLyAgICB9XHJcbi8vICAgIHJldHVybiByZXN1bHQ7XHJcbi8vfVxyXG5cclxuLy8gTm90IHlldCBuZWVkZWRcclxuLy8vLyBtdWNoIGZhc3RlciBidXQgb25seSB3b3JrcyBvbiBhcnJheSBpdGVtcyB3aXRoIGEgdG9TdHJpbmcgbWV0aG9kIHRoYXRcclxuLy8vLyByZXR1cm5zIGRpc3RpbmN0IHN0cmluZyBmb3IgZGlzdGluY3Qgb2JqZWN0cy4gIFNvIHRoaXMgaXMgc2FmZSBmb3IgYXJyYXlzIHdpdGggcHJpbWl0aXZlXHJcbi8vLy8gdHlwZXMgYnV0IG5vdCBmb3IgYXJyYXlzIHdpdGggb2JqZWN0IHR5cGVzLCB1bmxlc3MgdG9TdHJpbmcoKSBoYXMgYmVlbiBpbXBsZW1lbnRlZC5cclxuLy9mdW5jdGlvbiBhcnJheURpc3RpbmN0VW5zYWZlKGFycmF5KSB7XHJcbi8vICAgIGxldCBvID0ge30sIGksIGwgPSBhcnJheS5sZW5ndGgsIHIgPSBbXTtcclxuLy8gICAgZm9yIChpID0gMDsgaSA8IGw7IGkgKz0gMSkge1xyXG4vLyAgICAgICAgbGV0IHYgPSBhcnJheVtpXTtcclxuLy8gICAgICAgIG9bdl0gPSB2O1xyXG4vLyAgICB9XHJcbi8vICAgIGZvciAoaSBpbiBvKSByLnB1c2gob1tpXSk7XHJcbi8vICAgIHJldHVybiByO1xyXG4vL31cclxuXHJcbmZ1bmN0aW9uIGFycmF5RXF1YWxzKGExOiBhbnlbXSwgYTI6IGFueVtdLCBlcXVhbHNGbj86ICh4MTogYW55LCB4MjogYW55KSA9PiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICAvL0NoZWNrIGlmIHRoZSBhcnJheXMgYXJlIHVuZGVmaW5lZC9udWxsXHJcbiAgICBpZiAoIWExIHx8ICFhMikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChhMS5sZW5ndGggIT09IGEyLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIC8vZ28gdGhydSBhbGwgdGhlIHZhcnNcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYTEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAvL2lmIHRoZSBsZXQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gbWFrZSBhIHJlY3Vyc2l2ZSBjaGVja1xyXG4gICAgICAgIC8vb3RoZXJ3aXNlIHdlJ2xsIGp1c3QgY29tcGFyZSB0aGUgdmFsdWVzXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYTFbaV0pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXJyYXlFcXVhbHMoYTFbaV0sIGEyW2ldKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChlcXVhbHNGbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlcXVhbHNGbihhMVtpXSwgYTJbaV0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYTFbaV0gIT09IGEyW2ldKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuLy8gZW5kIG9mIGFycmF5IGZ1bmN0aW9uc1xyXG5cclxuLyoqIFJldHVybnMgYW4gYXJyYXkgZm9yIGEgc291cmNlIGFuZCBhIHByb3AsIGFuZCBjcmVhdGVzIHRoZSBwcm9wIGlmIG5lZWRlZC4gKi9cclxuZnVuY3Rpb24gZ2V0QXJyYXkoc291cmNlOiBPYmplY3QsIHByb3BOYW1lOiBzdHJpbmcpOiBhbnlbXSB7XHJcbiAgICBsZXQgYXJyID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgIGlmICghYXJyKSB7XHJcbiAgICAgICAgYXJyID0gW107XHJcbiAgICAgICAgc291cmNlW3Byb3BOYW1lXSA9IGFycjtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnI7XHJcbn1cclxuXHJcbi8qKiBDYWxscyByZXF1aXJlTGliQ29yZSBvbiBzZW1pY29sb24tc2VwYXJhdGVkIGxpYk5hbWVzICovXHJcbmZ1bmN0aW9uIHJlcXVpcmVMaWIobGliTmFtZXM6IHN0cmluZywgZXJyTWVzc2FnZT86IHN0cmluZykge1xyXG4gICAgbGV0IGFyck5hbWVzID0gbGliTmFtZXMuc3BsaXQoXCI7XCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSBhcnJOYW1lcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuICAgICAgICBsZXQgbGliID0gcmVxdWlyZUxpYkNvcmUoYXJyTmFtZXNbaV0pO1xyXG4gICAgICAgIGlmIChsaWIpIHJldHVybiBsaWI7XHJcbiAgICB9XHJcbiAgICBpZiAoZXJyTWVzc2FnZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBpbml0aWFsaXplIFwiICsgbGliTmFtZXMgKyBcIi4gIFwiICsgZXJyTWVzc2FnZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5cclxuLyoqIFJldHVybnMgdGhlICdsaWJOYW1lJyBtb2R1bGUgaWYgbG9hZGVkIG9yIGVsc2UgcmV0dXJucyB1bmRlZmluZWQgKi9cclxuZnVuY3Rpb24gcmVxdWlyZUxpYkNvcmUobGliTmFtZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgd2luID0gd2luZG93IHx8IChnbG9iYWwgPyBnbG9iYWwud2luZG93IDogdW5kZWZpbmVkKTtcclxuICAgIGlmICghd2luKSByZXR1cm47IC8vIE11c3QgcnVuIGluIGEgYnJvd3Nlci4gVG9kbzogYWRkIGNvbW1vbmpzIHN1cHBvcnRcclxuXHJcbiAgICAvLyBnZXQgbGlicmFyeSBmcm9tIGJyb3dzZXIgZ2xvYmFscyBpZiB3ZSBjYW5cclxuICAgIGxldCBsaWIgPSB3aW5bbGliTmFtZV07XHJcbiAgICBpZiAobGliKSByZXR1cm4gbGliO1xyXG5cclxuICAgIC8vIGlmIHJlcXVpcmUgZXhpc3RzLCBtYXliZSByZXF1aXJlIGNhbiBnZXQgaXQuXHJcbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBzeW5jaHJvbm91cyBzbyBpdCBjYW4ndCBsb2FkIG1vZHVsZXMgd2l0aCBBTUQuXHJcbiAgICAvLyBJdCBjYW4gb25seSBvYnRhaW4gbW9kdWxlcyBmcm9tIHJlcXVpcmUgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQuXHJcbiAgICAvLyBEZXZlbG9wZXIgc2hvdWxkIGJvb3RzdHJhcCBzdWNoIHRoYXQgdGhlIGJyZWV6ZSBtb2R1bGVcclxuICAgIC8vIGxvYWRzIGFmdGVyIGFsbCBvdGhlciBsaWJyYXJpZXMgdGhhdCBicmVlemUgc2hvdWxkIGZpbmQgd2l0aCB0aGlzIG1ldGhvZFxyXG4gICAgLy8gU2VlIGRvY3VtZW50YXRpb25cclxuICAgIGxldCByID0gd2luLnJlcXVpcmU7XHJcbiAgICBpZiAocikgeyAvLyBpZiByZXF1aXJlIGV4aXN0c1xyXG4gICAgICAgIGlmIChyLmRlZmluZWQpIHsgLy8gcmVxdWlyZS5kZWZpbmVkIGlzIG5vdCBzdGFuZGFyZCBhbmQgbWF5IG5vdCBleGlzdFxyXG4gICAgICAgICAgICAvLyByZXF1aXJlLmRlZmluZWQgcmV0dXJucyB0cnVlIGlmIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWRcclxuICAgICAgICAgICAgcmV0dXJuIHIuZGVmaW5lZChsaWJOYW1lKSA/IHIobGliTmFtZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gcmVxdWlyZS5kZWZpbmVkIGRvZXMgbm90IGV4aXN0IHNvIHdlIGhhdmUgdG8gY2FsbCByZXF1aXJlKCdsaWJOYW1lJykgZGlyZWN0bHkuXHJcbiAgICAgICAgICAgIC8vIFRoZSByZXF1aXJlKCdsaWJOYW1lJykgb3ZlcmxvYWQgaXMgc3luY2hyb25vdXMgYW5kIGRvZXMgbm90IGxvYWQgbW9kdWxlcy5cclxuICAgICAgICAgICAgLy8gSXQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgbW9kdWxlIGlzbid0IGFscmVhZHkgbG9hZGVkLlxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHIobGliTmFtZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUoJ2xpYk5hbWUnKSB0aHJldyBiZWNhdXNlIG1vZHVsZSBub3QgbG9hZGVkXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiBFeGVjdXRlIGZuIHdoaWxlIG9iaiBoYXMgdGVtcFZhbHVlIGZvciBwcm9wZXJ0eSAqL1xyXG5mdW5jdGlvbiB1c2luZyhvYmo6IE9iamVjdCwgcHJvcGVydHk6IHN0cmluZywgdGVtcFZhbHVlOiBhbnksIGZuOiAoKSA9PiBhbnkpIHtcclxuICAgIGxldCBvcmlnaW5hbFZhbHVlID0gb2JqW3Byb3BlcnR5XTtcclxuICAgIGlmICh0ZW1wVmFsdWUgPT09IG9yaWdpbmFsVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gZm4oKTtcclxuICAgIH1cclxuICAgIG9ialtwcm9wZXJ0eV0gPSB0ZW1wVmFsdWU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBmbigpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgICBpZiAob3JpZ2luYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBvYmpbcHJvcGVydHldO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9ialtwcm9wZXJ0eV0gPSBvcmlnaW5hbFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqIENhbGwgc3RhdGUgPSBzdGFydEZuKCksIGNhbGwgZm4oKSwgY2FsbCBlbmRGbihzdGF0ZSkgKi9cclxuZnVuY3Rpb24gd3JhcEV4ZWN1dGlvbihzdGFydEZuOiAoKSA9PiBhbnksIGVuZEZuOiAoc3RhdGU6IGFueSkgPT4gYW55LCBmbjogKCkgPT4gYW55KSB7XHJcbiAgICBsZXQgc3RhdGU6IGFueTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgc3RhdGUgPSBzdGFydEZuKCk7XHJcbiAgICAgICAgcmV0dXJuIGZuKCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBzdGF0ZS5lcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IGU7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGVuZEZuKHN0YXRlKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqIFJlbWVtYmVyICYgcmV0dXJuIHRoZSB2YWx1ZSBvZiBmbigpIHdoZW4gaXQgd2FzIGNhbGxlZCB3aXRoIGl0cyBjdXJyZW50IGFyZ3MgKi9cclxuZnVuY3Rpb24gbWVtb2l6ZShmbjogYW55KTogYW55IHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGFyZ3MgPSBhcnJheVNsaWNlKDxhbnk+YXJndW1lbnRzKSxcclxuICAgICAgICAgICAgaGFzaCA9IFwiXCIsXHJcbiAgICAgICAgICAgIGkgPSBhcmdzLmxlbmd0aCxcclxuICAgICAgICAgICAgY3VycmVudEFyZzogYW55ID0gbnVsbDtcclxuICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRBcmcgPSBhcmdzW2ldO1xyXG4gICAgICAgICAgICBoYXNoICs9IChjdXJyZW50QXJnID09PSBPYmplY3QoY3VycmVudEFyZykpID8gSlNPTi5zdHJpbmdpZnkoY3VycmVudEFyZykgOiBjdXJyZW50QXJnO1xyXG4gICAgICAgICAgICBmbi5tZW1vaXplIHx8IChmbi5tZW1vaXplID0ge30pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGhhc2ggaW4gZm4ubWVtb2l6ZSkgP1xyXG4gICAgICAgICAgICBmbi5tZW1vaXplW2hhc2hdIDpcclxuICAgICAgICAgICAgZm4ubWVtb2l6ZVtoYXNoXSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VXVpZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICBsZXQgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGR1cmF0aW9uVG9TZWNvbmRzKGR1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIC8vIGJhc2ljIGFsZ29yaXRobSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXphc2EvaXNvODYwMS1qcy1wZXJpb2RcclxuICAgIGlmICh0eXBlb2YgZHVyYXRpb24gIT09IFwic3RyaW5nXCIpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgSVNPODYwMSBkdXJhdGlvbiAnXCIgKyBkdXJhdGlvbiArIFwiJ1wiKTtcclxuXHJcbiAgICAvLyByZWdleCBzcGxpdHMgYXMgZm9sbG93cyAtIGdycDAsIGdycDEsIHksIG0sIGQsIGdycDIsIGgsIG0sIHNcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgMSAgICAgMiAgMyAgNCAgNSAgICAgNiAgNyAgOFxyXG4gICAgbGV0IHN0cnVjdCA9IC9eUCgoXFxkK1kpPyhcXGQrTSk/KFxcZCtEKT8pPyhUKFxcZCtIKT8oXFxkK00pPyhcXGQrUyk/KT8kLy5leGVjKGR1cmF0aW9uKTtcclxuICAgIGlmICghc3RydWN0KSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIElTTzg2MDEgZHVyYXRpb24gJ1wiICsgZHVyYXRpb24gKyBcIidcIik7XHJcblxyXG4gICAgbGV0IHltZGhtc0luZGV4ZXMgPSBbMiwgMywgNCwgNiwgNywgOF07IC8vIC0+IGdycDEseSxtLGQsZ3JwMixoLG0sc1xyXG4gICAgbGV0IGZhY3RvcnMgPSBbMzExMDQwMDAsIC8vIHllYXIgKDM2MCoyNCo2MCo2MClcclxuICAgICAgICAyNTkyMDAwLCAgICAgICAgICAgICAvLyBtb250aCAoMzAqMjQqNjAqNjApXHJcbiAgICAgICAgODY0MDAsICAgICAgICAgICAgICAgLy8gZGF5ICgyNCo2MCo2MClcclxuICAgICAgICAzNjAwLCAgICAgICAgICAgICAgICAvLyBob3VyICg2MCo2MClcclxuICAgICAgICA2MCwgICAgICAgICAgICAgICAgICAvLyBtaW51dGUgKDYwKVxyXG4gICAgICAgIDFdOyAgICAgICAgICAgICAgICAgIC8vIHNlY29uZCAoMSlcclxuXHJcbiAgICBsZXQgc2Vjb25kcyA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgIGxldCBkaWdpdCA9IHN0cnVjdFt5bWRobXNJbmRleGVzW2ldXTtcclxuICAgICAgICAvLyByZW1vdmUgbGV0dGVycywgcmVwbGFjZSBieSAwIGlmIG5vdCBkZWZpbmVkXHJcbiAgICAgICAgZGlnaXQgPSA8YW55PihkaWdpdCA/ICtkaWdpdC5yZXBsYWNlKC9bQS1aYS16XSsvZywgJycpIDogMCk7XHJcbiAgICAgICAgc2Vjb25kcyArPSA8YW55PmRpZ2l0ICogZmFjdG9yc1tpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZWNvbmRzO1xyXG5cclxufVxyXG5cclxuLy8gaXMgZnVuY3Rpb25zXHJcblxyXG5mdW5jdGlvbiBub29wKCkge1xyXG4gICAgLy8gZG9lcyBub3RoaW5nXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlkZW50aXR5KHg6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4geDtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhc3NvZihvOiBhbnkpIHtcclxuICAgIGlmIChvID09PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKG8gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEYXRlKG86IGFueSkge1xyXG4gICAgcmV0dXJuIGNsYXNzb2YobykgPT09IFwiZGF0ZVwiICYmICFpc05hTihvLmdldFRpbWUoKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRGF0ZVN0cmluZyhzOiBzdHJpbmcpIHtcclxuICAgIC8vIGxldCByeCA9IC9eKFxcZHs0fXxbK1xcLV1cXGR7Nn0pKD86LShcXGR7Mn0pKD86LShcXGR7Mn0pKT8pPyg/OlQoXFxkezJ9KTooXFxkezJ9KSg/OjooXFxkezJ9KSg/OlxcLihcXGR7M30pKT8pPyg/OihaKXwoWytcXC1dKShcXGR7Mn0pKD86OihcXGR7Mn0pKT8pPyk/JC87XHJcbiAgICBsZXQgcnggPSAvXigoXFxkezR9LVswMV1cXGQtWzAtM11cXGRUWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGRcXC5cXGQrKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKSl8KFxcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKSl8KFxcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKSkpJC87XHJcbiAgICByZXR1cm4gKHR5cGVvZiBzID09PSBcInN0cmluZ1wiKSAmJiByeC50ZXN0KHMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKG86IGFueSkge1xyXG4gICAgcmV0dXJuIGNsYXNzb2YobykgPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG5cclxuLy8gZnVuY3Rpb24gaXNTdHJpbmcobzogYW55KSB7XHJcbi8vICAgICByZXR1cm4gKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKTtcclxuLy8gfVxyXG5cclxuLy8gZnVuY3Rpb24gaXNPYmplY3QobzogYW55KSB7XHJcbi8vICAgICByZXR1cm4gKHR5cGVvZiBvID09PSBcIm9iamVjdFwiKTtcclxuLy8gfVxyXG5cclxuZnVuY3Rpb24gaXNHdWlkKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSAmJiAvW2EtZkEtRlxcZF17OH0tKD86W2EtZkEtRlxcZF17NH0tKXszfVthLWZBLUZcXGRdezEyfS8udGVzdCh2YWx1ZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRHVyYXRpb24odmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpICYmIC9eKC18KT9QW1RdP1tcXGRcXC4sXFwtXStbWU1EVEhTXS8udGVzdCh2YWx1ZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRW1wdHkob2JqOiBhbnkpIHtcclxuICAgIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcclxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqLCBrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOdW1lcmljKG46IGFueSkge1xyXG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcclxufVxyXG5cclxuXHJcblxyXG4vLyBlbmQgb2YgaXMgRnVuY3Rpb25zXHJcblxyXG4vLyBzdHJpbmcgZnVuY3Rpb25zXHJcblxyXG5mdW5jdGlvbiBzdHJpbmdTdGFydHNXaXRoKHN0cjogc3RyaW5nLCBwcmVmaXg6IHN0cmluZykge1xyXG4gICAgLy8gcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmcgb3IgbnVsbCBwcmVmaXhcclxuICAgIGlmICgoIXN0cikpIHJldHVybiBmYWxzZTtcclxuICAgIGlmIChwcmVmaXggPT09IFwiXCIgfHwgcHJlZml4ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHByZWZpeCwgMCkgPT09IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN0cmluZ0VuZHNXaXRoKHN0cjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZykge1xyXG4gICAgLy8gcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmcgb3IgbnVsbCBzdWZmaXhcclxuICAgIGlmICgoIXN0cikpIHJldHVybiBmYWxzZTtcclxuICAgIGlmIChzdWZmaXggPT09IFwiXCIgfHwgc3VmZml4ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHN1ZmZpeCwgc3RyLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpICE9PSAtMTtcclxufVxyXG5cclxuLy8gQmFzZWQgb24gZnJhZ21lbnQgZnJvbSBEZWFuIEVkd2FyZHMnIEJhc2UgMiBsaWJyYXJ5XHJcbi8qKiBmb3JtYXQoXCJhICUxIGFuZCBhICUyXCIsIFwiY2F0XCIsIFwiZG9nXCIpIC0+IFwiYSBjYXQgYW5kIGEgZG9nXCIgKi9cclxuZnVuY3Rpb24gZm9ybWF0U3RyaW5nKHN0cjogc3RyaW5nLCAuLi5wYXJhbXM6IGFueVtdKSB7XHJcbiAgICBsZXQgYXJncyA9IGFyZ3VtZW50cztcclxuICAgIGxldCBwYXR0ZXJuID0gUmVnRXhwKFwiJShbMS1cIiArIChhcmd1bWVudHMubGVuZ3RoIC0gMSkgKyBcIl0pXCIsIFwiZ1wiKTtcclxuICAgIHJldHVybiBzdHIucmVwbGFjZShwYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2gsIGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzcyMjU0MDcvY29udmVydC1jYW1lbGNhc2V0ZXh0LXRvLWNhbWVsLWNhc2UtdGV4dFxyXG4vKiogQ2hhbmdlIHRleHQgdG8gdGl0bGUgY2FzZSB3aXRoIHNwYWNlcywgZS5nLiAnbXlQcm9wZXJ0eU5hbWUxMicgdG8gJ015IFByb3BlcnR5IE5hbWUgMTInICovXHJcbmxldCBjYW1lbEVkZ2VzID0gLyhbQS1aXSg/PVtBLVpdW2Etel0pfFteQS1aXSg/PVtBLVpdKXxbYS16QS1aXSg/PVteYS16QS1aXSkpL2c7XHJcbmZ1bmN0aW9uIHRpdGxlQ2FzZVNwYWNlKHRleHQ6IHN0cmluZykge1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZShjYW1lbEVkZ2VzLCAnJDEgJyk7XHJcbiAgICB0ZXh0ID0gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSk7XHJcbiAgICByZXR1cm4gdGV4dDtcclxufVxyXG5cclxuLy8gZW5kIG9mIHN0cmluZyBmdW5jdGlvbnNcclxuXHJcbi8vIFNlZSBNYXJrIE1pbGxlcuKAmXMgZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGlzIGRvZXMuXHJcbi8vIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWNvbnZlbnRpb25zOnNhZmVfbWV0YV9wcm9ncmFtbWluZ1xyXG5mdW5jdGlvbiB1bmN1cnJ5KGY6IGFueSkge1xyXG4gICAgbGV0IGNhbGwgPSBGdW5jdGlvbi5jYWxsO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gY2FsbC5hcHBseShmLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gc2hpbXNcclxuXHJcbmlmICghT2JqZWN0LmNyZWF0ZSkge1xyXG4gICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChwYXJlbnQ6IGFueSkge1xyXG4gICAgICAgIGxldCBGID0gPGFueT5mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBGLnByb3RvdHlwZSA9IHBhcmVudDtcclxuICAgICAgICByZXR1cm4gbmV3IEYoKTtcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIHN0cmluZ3MgZm9yIGVycm9yIG1lc3NhZ2VzXHJcblxyXG5jb25zdCBzdHJpbmdzID0ge1xyXG4gICAgXCJUT19UWVBFXCI6IFwiQWRkICdFbnRpdHlRdWVyeS50b1R5cGUoKScgdG8geW91ciBxdWVyeSwgb3IgY2FsbCAnTWV0YWRhdGFTdG9yZS5zZXRFbnRpdHlUeXBlRm9yUmVzb3VyY2VOYW1lKCknIHRvIHJlZ2lzdGVyIGFuIEVudGl0eVR5cGUgZm9yIHRoaXMgcmVzb3VyY2VOYW1lLlwiXHJcbn1cclxuXHJcbi8vIC8vIG5vdCBhbGwgbWV0aG9kcyBhYm92ZSBhcmUgZXhwb3J0ZWRcclxuZXhwb3J0IGNvbnN0IGNvcmUgPSB7XHJcbiAgICBpc0VTNVN1cHBvcnRlZDogaXNFUzVTdXBwb3J0ZWQsXHJcbiAgICBoYXNPd25Qcm9wZXJ0eTogaGFzT3duUHJvcGVydHksXHJcbiAgICBnZXRPd25Qcm9wZXJ0eVZhbHVlczogZ2V0T3duUHJvcGVydHlWYWx1ZXMsXHJcbiAgICBnZXRQcm9wZXJ0eURlc2NyaXB0b3I6IGdldFByb3BEZXNjcmlwdG9yLFxyXG4gICAgb2JqZWN0Rm9yRWFjaDogb2JqZWN0Rm9yRWFjaCxcclxuICAgIG9iamVjdEZpcnN0OiBvYmplY3RGaXJzdCxcclxuICAgIG9iamVjdE1hcDogb2JqZWN0TWFwLCAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzb21ldGhpbmcgc3Ryb25nbHkgdHlwZWQuXHJcbiAgICBleHRlbmQ6IGV4dGVuZCxcclxuICAgIHByb3BFcTogcHJvcEVxLFxyXG4gICAgcHJvcHNFcTogcHJvcHNFcSxcclxuICAgIHBsdWNrOiBwbHVjayxcclxuICAgIG1hcDogbWFwLFxyXG4gICAgcmVzb2x2ZVByb3BlcnRpZXM6IHJlc29sdmVQcm9wZXJ0aWVzLFxyXG4gICAgc2V0QXNEZWZhdWx0OiBzZXRBc0RlZmF1bHQsXHJcbiAgICB1cGRhdGVXaXRoRGVmYXVsdHM6IHVwZGF0ZVdpdGhEZWZhdWx0cyxcclxuICAgIGdldEFycmF5OiBnZXRBcnJheSxcclxuICAgIHRvQXJyYXk6IHRvQXJyYXksXHJcbiAgICBhcnJheUVxdWFsczogYXJyYXlFcXVhbHMsXHJcbiAgICBhcnJheVNsaWNlOiBhcnJheVNsaWNlLFxyXG4gICAgYXJyYXlGaXJzdDogYXJyYXlGaXJzdCxcclxuICAgIGFycmF5SW5kZXhPZjogYXJyYXlJbmRleE9mLFxyXG4gICAgYXJyYXlSZW1vdmVJdGVtOiBhcnJheVJlbW92ZUl0ZW0sXHJcbiAgICBhcnJheVppcDogYXJyYXlaaXAsXHJcbiAgICBhcnJheUFkZEl0ZW1VbmlxdWU6IGFycmF5QWRkSXRlbVVuaXF1ZSxcclxuICAgIGFycmF5RmxhdE1hcDogYXJyYXlGbGF0TWFwLFxyXG5cclxuICAgIHJlcXVpcmVMaWI6IHJlcXVpcmVMaWIsXHJcbiAgICB1c2luZzogdXNpbmcsXHJcbiAgICB3cmFwRXhlY3V0aW9uOiB3cmFwRXhlY3V0aW9uLFxyXG5cclxuICAgIG1lbW9pemU6IG1lbW9pemUsXHJcbiAgICBnZXRVdWlkOiBnZXRVdWlkLFxyXG4gICAgZHVyYXRpb25Ub1NlY29uZHM6IGR1cmF0aW9uVG9TZWNvbmRzLFxyXG5cclxuICAgIGlzU2V0dGFibGU6IGlzU2V0dGFibGUsXHJcblxyXG4gICAgaXNEYXRlOiBpc0RhdGUsXHJcbiAgICBpc0RhdGVTdHJpbmc6IGlzRGF0ZVN0cmluZyxcclxuICAgIGlzR3VpZDogaXNHdWlkLFxyXG4gICAgaXNEdXJhdGlvbjogaXNEdXJhdGlvbixcclxuICAgIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXHJcbiAgICBpc0VtcHR5OiBpc0VtcHR5LFxyXG4gICAgaXNOdW1lcmljOiBpc051bWVyaWMsXHJcblxyXG4gICAgaWRlbnRpdHk6IGlkZW50aXR5LFxyXG4gICAgbm9vcDogbm9vcCxcclxuXHJcbiAgICBzdHJpbmdTdGFydHNXaXRoOiBzdHJpbmdTdGFydHNXaXRoLFxyXG4gICAgc3RyaW5nRW5kc1dpdGg6IHN0cmluZ0VuZHNXaXRoLFxyXG4gICAgZm9ybWF0U3RyaW5nOiBmb3JtYXRTdHJpbmcsXHJcbiAgICB0aXRsZUNhc2U6IHRpdGxlQ2FzZVNwYWNlLFxyXG5cclxuICAgIHRvSnNvbjogdG9Kc29uLFxyXG4gICAgdG9KU09OU2FmZTogdG9KU09OU2FmZSxcclxuICAgIHRvSlNPTlNhZmVSZXBsYWNlcjogdG9KU09OU2FmZVJlcGxhY2VyLFxyXG5cclxuICAgIHN0cmluZ3M6IHN0cmluZ3NcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JDYWxsYmFjayB7XHJcbiAgICAoZXJyb3I6IGFueSk6IHZvaWQ7XHJcbn1cclxuXHJcblxyXG4vLyBVbnVzZWRcclxuLypcclxuLy8gcmV0dXJucyB0cnVlIGZvciBib29sZWFucywgbnVtYmVycywgc3RyaW5ncyBhbmQgZGF0ZXNcclxuLy8gZmFsc2UgZm9yIG51bGwsIGFuZCBub24tZGF0ZSBvYmplY3RzLCBmdW5jdGlvbnMsIGFuZCBhcnJheXNcclxuZnVuY3Rpb24gaXNQcmltaXRpdmUob2JqOiBhbnkpIHtcclxuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gdHJ1ZSBmb3IgbnVtYmVycywgc3RyaW5ncywgYm9vbGVhbnMgYW5kIG51bGwsIGZhbHNlIGZvciBvYmplY3RzXHJcbiAgICBpZiAob2JqICE9IE9iamVjdChvYmopKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBpc0RhdGUob2JqKTtcclxufVxyXG5cclxuKi8iXX0=
709
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWVwQyxJQUFJLGNBQWMsR0FBMEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckcsSUFBSSxVQUFVLEdBQXVELE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQ3RFO0lBQzFCLElBQUk7UUFDQSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDMUU7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNSLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0wsQ0FBQztBQU5ELElBQUksY0FBYyxHQUFZLElBTTFCLENBQUM7QUFFTCxzQkFBc0I7QUFDdEIsU0FBUyxhQUFhLENBQUMsR0FBVyxFQUFFLElBQW9DO0lBQ3BFLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ2pCLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO0tBQ0o7QUFDTCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBVyxFQUFFLElBQXFDO0lBQ2pFLElBQUksT0FBTyxHQUFVLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNqQixJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3hCO1NBQ0o7S0FDSjtJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUFXLEVBQUUsV0FBK0M7SUFDN0UsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7UUFDakIsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUNyQztTQUNKO0tBQ0o7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQU8sR0FBUSxFQUFFLEtBQXNCO0lBQ3hELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFRLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxZQUFvQjtJQUNqRCxJQUFJLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUMsSUFBSSxFQUFFLElBQUksSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzVCLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsR0FBVyxFQUFFLFlBQW9CO0lBQ3hELElBQUksQ0FBQyxjQUFjO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFdEMsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ2xDLE9BQU8sTUFBTSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztLQUM3RDtTQUFNO1FBQ0gsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLE9BQU8sSUFBSSxJQUFJO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDdEMsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDbkQ7QUFDTCxDQUFDO0FBRUQsd0JBQXdCO0FBRXhCLG9FQUFvRTtBQUNwRSxTQUFTLE1BQU0sQ0FBQyxZQUFvQixFQUFFLEtBQVU7SUFDNUMsT0FBTyxVQUFVLEdBQVE7UUFDckIsT0FBTyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxpRkFBaUY7QUFDakYsU0FBUyxPQUFPLENBQUMsYUFBcUIsRUFBRSxhQUFxQixFQUFFLEtBQVU7SUFDckUsT0FBTyxVQUFVLEdBQVE7UUFDckIsT0FBTyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLENBQUM7SUFDeEUsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELHVEQUF1RDtBQUN2RCxTQUFTLEtBQUssQ0FBQyxZQUFpQjtJQUM1QixPQUFPLFVBQVUsR0FBUTtRQUNyQixPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsNEJBQTRCO0FBRTVCLHFEQUFxRDtBQUNyRCxTQUFTLG9CQUFvQixDQUFDLE1BQWM7SUFDeEMsSUFBSSxNQUFNLEdBQVUsRUFBRSxDQUFDO0lBQ3ZCLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFO1FBQ3JCLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzdCO0tBQ0o7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsNkRBQTZEO0FBQzdELFNBQVMsTUFBTSxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsU0FBb0I7SUFDaEUsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUMzQixJQUFJLFNBQVMsRUFBRTtRQUNYLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxRQUFRO1lBQ2hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7S0FDTjtTQUFNO1FBQ0gsS0FBSyxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUU7WUFDekIsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNsQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0o7S0FDSjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsU0FBUyxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsUUFBZ0I7SUFDeEQsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7UUFDdkIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7S0FDSjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7K0JBSytCO0FBQy9CLFNBQVMsWUFBWSxDQUFDLE1BQWMsRUFBRSxJQUEwRDtJQUM1RixJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsRixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBQ0YsU0FBUyxNQUFNLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQUUsU0FBaUIsRUFBRTtJQUVqRSxLQUFLLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRTtRQUN0QixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyx5Q0FBeUM7UUFDekMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLFFBQVE7WUFDM0IsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUN4QyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IseUZBQXlGO1lBQ3pGLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5Qyw0RkFBNEY7WUFDNUYsbUNBQW1DO1lBQ25DLDJCQUEyQjtZQUMzQixJQUFJLEtBQUssSUFBSSxZQUFZO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3ZDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDNUQsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssVUFBVSxFQUFFO2dCQUN0QyxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQy9CO2lCQUFNLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDcEMsSUFBSSxLQUFLLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtvQkFDdEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ3RCO2FBQ0o7WUFDRCxJQUFJLEtBQUssS0FBSyxTQUFTO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCx5SEFBeUg7QUFDekgsU0FBUyxrQkFBa0IsQ0FBQyxJQUFZLEVBQUUsR0FBUTtJQUM5QyxJQUFJLElBQUksS0FBSyxjQUFjLElBQUksSUFBSSxLQUFLLGVBQWUsSUFBSSxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxhQUFhO1dBQ25HLElBQUksS0FBSyxhQUFhLElBQUksSUFBSSxLQUFLLGFBQWE7V0FDaEQsSUFBSSxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7UUFBRSxPQUFPO0lBQzFGLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVELDBEQUEwRDtBQUMxRCxTQUFTLFVBQVUsQ0FBQyxHQUFRLEVBQUUsUUFBNEM7SUFDdEUsSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsa0JBQWtCO0lBQ3ZELElBQUksR0FBRyxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNwQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDWixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsa0JBQWtCO1FBQ2hFLElBQUksTUFBTSxLQUFLLEdBQUc7WUFBRSxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEQsd0NBQXdDO1FBQ3hDLEdBQUcsR0FBRyxNQUFNLENBQUM7S0FDaEI7SUFDRCxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNyQixJQUFJLE1BQVcsQ0FBQztJQUNoQixJQUFJLEdBQUcsWUFBWSxLQUFLLEVBQUU7UUFDdEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFNO1lBQzdCLE9BQU8sVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztLQUNOO1NBQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxFQUFFO1FBQ3BDLE1BQU0sR0FBRyxTQUFTLENBQUM7S0FDdEI7U0FBTTtRQUNILE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDWixLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtZQUNsQixJQUFJLElBQUksS0FBSyxXQUFXO2dCQUFFLFNBQVM7WUFDbkMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksUUFBUSxFQUFFO2dCQUNWLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLEdBQUcsS0FBSyxTQUFTO29CQUFFLFNBQVM7YUFDbkM7WUFDRCxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoQyxJQUFJLEdBQUcsS0FBSyxTQUFTO2dCQUFFLFNBQVM7WUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN0QjtLQUNKO0lBQ0QsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ3JCLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCx3SEFBd0g7QUFDeEgsU0FBUyxpQkFBaUIsQ0FBQyxPQUFpQixFQUFFLGFBQXVCO0lBQ2pFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNYLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDNUIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7UUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7b0JBQ25CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQ1osTUFBTTtpQkFDVDthQUNKO1NBQ0o7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUdELGtCQUFrQjtBQUVsQixTQUFTLE9BQU8sQ0FBQyxJQUFTO0lBQ3RCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtRQUNkLE9BQU8sRUFBRSxDQUFDO0tBQ2I7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDNUIsT0FBTyxJQUFJLENBQUM7S0FDZjtTQUFNO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pCO0FBQ0wsQ0FBQztBQUVELDhGQUE4RjtBQUM5RixxR0FBcUc7QUFDcEcsU0FBUyxHQUFHLENBQUksS0FBYyxFQUFFLEVBQThCLEVBQUUsV0FBcUI7SUFDbEYsK0RBQStEO0lBQy9ELFdBQVcsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUN2RCxJQUFJLEtBQUssSUFBSSxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDaEMsbUJBQW1CO0lBQ25CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN0QixJQUFJLE1BQU0sR0FBVSxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQU0sRUFBRSxFQUFVO1lBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLFdBQVcsRUFBRTtnQkFDMUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNsQjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7S0FDakI7U0FBTTtRQUNILElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixPQUFPLE1BQU0sQ0FBQztLQUNqQjtBQUVMLENBQUM7QUFJRCxTQUFTLFVBQVUsQ0FBSSxLQUFVLEVBQUUsU0FBdUI7SUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQjtLQUNKO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUlELFNBQVMsWUFBWSxDQUFJLEtBQVUsRUFBRSxTQUF1QjtJQUN4RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3JDO0lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNkLENBQUM7QUFFRCx1Q0FBdUM7QUFDdkMsU0FBUyxrQkFBa0IsQ0FBSSxLQUFVLEVBQUUsSUFBTztJQUM5QyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBSSxLQUFVLEVBQUUsZUFBaUMsRUFBRyxvQkFBOEI7SUFDdEcsSUFBSSxTQUFTLEdBQUcsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFpQixDQUFDO0lBQzVGLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzlCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLGVBQWUsQ0FBQyxFQUFFO1lBQ2xFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtLQUNKO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQztBQUVELHlHQUF5RztBQUN6RyxTQUFTLFFBQVEsQ0FBQyxFQUFTLEVBQUUsRUFBUyxFQUFFLFFBQW1DO0lBQ3ZFLElBQUksTUFBTSxHQUFVLEVBQUUsQ0FBQztJQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdkM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLDBCQUEwQjtBQUMxQixzQkFBc0I7QUFDdEIscURBQXFEO0FBQ3JELDJDQUEyQztBQUMzQyxvQ0FBb0M7QUFDcEMsT0FBTztBQUNQLG9CQUFvQjtBQUNwQixHQUFHO0FBRUgsaUJBQWlCO0FBQ2pCLDBFQUEwRTtBQUMxRSw2RkFBNkY7QUFDN0Ysd0ZBQXdGO0FBQ3hGLHVDQUF1QztBQUN2Qyw4Q0FBOEM7QUFDOUMsa0NBQWtDO0FBQ2xDLDJCQUEyQjtBQUMzQixtQkFBbUI7QUFDbkIsT0FBTztBQUNQLGdDQUFnQztBQUNoQyxlQUFlO0FBQ2YsR0FBRztBQUVILFNBQVMsV0FBVyxDQUFDLEVBQVMsRUFBRSxFQUFTLEVBQUUsUUFBd0M7SUFDL0Usd0NBQXdDO0lBQ3hDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFN0IsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFMUMsc0JBQXNCO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hDLDJEQUEyRDtRQUMzRCx5Q0FBeUM7UUFDekMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztTQUNoRDthQUFNO1lBQ0gsSUFBSSxRQUFRLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUFFLE9BQU8sS0FBSyxDQUFDO2FBQzdDO2lCQUFNO2dCQUNILElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQUUsT0FBTyxLQUFLLENBQUM7YUFDckM7U0FDSjtLQUNKO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELHlCQUF5QjtBQUV6QixnRkFBZ0Y7QUFDaEYsU0FBUyxRQUFRLENBQUMsTUFBYyxFQUFFLFFBQWdCO0lBQzlDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNULE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDMUI7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsU0FBUyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxVQUFtQjtJQUNyRCxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsSUFBSSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksR0FBRztZQUFFLE9BQU8sR0FBRyxDQUFDO0tBQ3ZCO0lBQ0QsSUFBSSxVQUFVLEVBQUU7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLFFBQVEsR0FBRyxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUM7S0FDNUU7QUFDTCxDQUFDO0FBSUQsdUVBQXVFO0FBQ3ZFLFNBQVMsY0FBYyxDQUFDLE9BQWU7SUFDbkMsSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6RCxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sQ0FBQyxvREFBb0Q7SUFFdEUsNkNBQTZDO0lBQzdDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixJQUFJLEdBQUc7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUVwQiwrQ0FBK0M7SUFDL0MsZ0VBQWdFO0lBQ2hFLHlFQUF5RTtJQUN6RSx5REFBeUQ7SUFDekQsMkVBQTJFO0lBQzNFLG9CQUFvQjtJQUNwQixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxFQUFFLEVBQUUsb0JBQW9CO1FBQ3pCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLG9EQUFvRDtZQUNqRSx5REFBeUQ7WUFDekQsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUN0RDthQUFNO1lBQ0gsaUZBQWlGO1lBQ2pGLDRFQUE0RTtZQUM1RSw2REFBNkQ7WUFDN0QsSUFBSTtnQkFDQSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNyQjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLHFEQUFxRDtnQkFDckQsT0FBTzthQUNWO1NBQ0o7S0FDSjtBQUNMLENBQUM7QUFFRCxzREFBc0Q7QUFDdEQsU0FBUyxLQUFLLENBQUMsR0FBVyxFQUFFLFFBQWdCLEVBQUUsU0FBYyxFQUFFLEVBQWE7SUFDdkUsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNOLE9BQU8sRUFBRSxFQUFFLENBQUM7S0FDZjtJQUNELElBQUksYUFBYSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxJQUFJLFNBQVMsS0FBSyxhQUFhLEVBQUU7UUFDN0IsT0FBTyxFQUFFLEVBQUUsQ0FBQztLQUNmO0lBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUMxQixJQUFJO1FBQ0EsT0FBTyxFQUFFLEVBQUUsQ0FBQztLQUNmO1lBQVM7UUFDTixJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDN0IsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEI7YUFBTTtZQUNILEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUM7U0FDakM7S0FDSjtBQUNMLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsU0FBUyxhQUFhLENBQUMsT0FBa0IsRUFBRSxLQUEwQixFQUFFLEVBQWE7SUFDaEYsSUFBSSxLQUFVLENBQUM7SUFDZixJQUFJO1FBQ0EsS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxFQUFFLENBQUM7S0FDZjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1IsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQzdCLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsTUFBTSxDQUFDLENBQUM7S0FDWDtZQUFTO1FBQ04sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2hCO0FBQ0wsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixTQUFTLE9BQU8sQ0FBQyxFQUFPO0lBQ3BCLE9BQU87UUFDSCxJQUFJLElBQUksR0FBRyxVQUFVLENBQU0sU0FBUyxDQUFDLEVBQ2pDLElBQUksR0FBRyxFQUFFLEVBQ1QsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQ2YsVUFBVSxHQUFRLElBQUksQ0FBQztRQUMzQixPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ1IsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUN0RixFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDekIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELFNBQVMsT0FBTztJQUNaLE9BQU8sc0NBQXNDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7UUFDdEUsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNuRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxRQUFnQjtJQUN2QyxtRUFBbUU7SUFDbkUsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFFakcsK0RBQStEO0lBQy9ELCtEQUErRDtJQUMvRCxJQUFJLE1BQU0sR0FBRyxzREFBc0QsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkYsSUFBSSxDQUFDLE1BQU07UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixHQUFHLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUU1RSxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7SUFDbkUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxRQUFRO1FBQ25CLE9BQU87UUFDUCxLQUFLO1FBQ0wsSUFBSTtRQUNKLEVBQUU7UUFDRixDQUFDLENBQUMsQ0FBQyxDQUFrQixhQUFhO0lBRXRDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyw4Q0FBOEM7UUFDOUMsS0FBSyxHQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQVMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0QztJQUNELE9BQU8sT0FBTyxDQUFDO0FBRW5CLENBQUM7QUFFRCxlQUFlO0FBRWYsU0FBUyxJQUFJO0lBQ1QsZUFBZTtBQUNuQixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBTTtJQUNwQixPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxDQUFNO0lBQ25CLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNaLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0lBQ0QsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO1FBQ2pCLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0lBQ0QsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hFLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxDQUFNO0lBQ2xCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsQ0FBUztJQUMzQixpSkFBaUo7SUFDakosSUFBSSxFQUFFLEdBQUcsb05BQW9OLENBQUM7SUFDOU4sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLENBQU07SUFDdEIsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDO0FBQ3JDLENBQUM7QUFFRCw4QkFBOEI7QUFDOUIsc0NBQXNDO0FBQ3RDLElBQUk7QUFFSiw4QkFBOEI7QUFDOUIsc0NBQXNDO0FBQ3RDLElBQUk7QUFFSixTQUFTLE1BQU0sQ0FBQyxLQUFVO0lBQ3RCLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsSUFBSSxtREFBbUQsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQVU7SUFDMUIsT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLCtCQUErQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsR0FBUTtJQUNyQixJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtRQUNuQyxPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7UUFDakIsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0tBQ0o7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsQ0FBTTtJQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBSUQsc0JBQXNCO0FBRXRCLG1CQUFtQjtBQUVuQixTQUFTLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxNQUFjO0lBQ2pELCtDQUErQztJQUMvQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QixJQUFJLE1BQU0sS0FBSyxFQUFFLElBQUksTUFBTSxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNqRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsR0FBVyxFQUFFLE1BQWM7SUFDL0MsK0NBQStDO0lBQy9DLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxNQUFNLElBQUksSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ2pELE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELHNEQUFzRDtBQUN0RCxpRUFBaUU7QUFDakUsU0FBUyxZQUFZLENBQUMsR0FBVyxFQUFFLEdBQUcsTUFBYTtJQUMvQyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUM7SUFDckIsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxLQUFLLEVBQUUsS0FBSztRQUM5QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCwwRkFBMEY7QUFDMUYsOEZBQThGO0FBQzlGLElBQUksVUFBVSxHQUFHLDhEQUE4RCxDQUFDO0FBQ2hGLFNBQVMsY0FBYyxDQUFDLElBQVk7SUFDaEMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELDBCQUEwQjtBQUUxQixtREFBbUQ7QUFDbkQsMkVBQTJFO0FBQzNFLFNBQVMsT0FBTyxDQUFDLENBQU07SUFDbkIsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztJQUN6QixPQUFPO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsUUFBUTtBQUVSLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO0lBQ2hCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUFXO1FBQ2pDLElBQUksQ0FBQyxHQUFRO1FBQ2IsQ0FBQyxDQUFDO1FBQ0YsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUMsQ0FBQztDQUNMO0FBRUQsNkJBQTZCO0FBRTdCLE1BQU0sT0FBTyxHQUFHO0lBQ1osU0FBUyxFQUFFLG1KQUFtSjtDQUNqSyxDQUFBO0FBRUQsd0NBQXdDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRztJQUNoQixjQUFjLEVBQUUsY0FBYztJQUM5QixjQUFjLEVBQUUsY0FBYztJQUM5QixvQkFBb0IsRUFBRSxvQkFBb0I7SUFDMUMscUJBQXFCLEVBQUUsaUJBQWlCO0lBQ3hDLGFBQWEsRUFBRSxhQUFhO0lBQzVCLFdBQVcsRUFBRSxXQUFXO0lBQ3hCLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLE1BQU0sRUFBRSxNQUFNO0lBQ2QsTUFBTSxFQUFFLE1BQU07SUFDZCxPQUFPLEVBQUUsT0FBTztJQUNoQixLQUFLLEVBQUUsS0FBSztJQUNaLEdBQUcsRUFBRSxHQUFHO0lBQ1IsaUJBQWlCLEVBQUUsaUJBQWlCO0lBQ3BDLFlBQVksRUFBRSxZQUFZO0lBQzFCLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxRQUFRLEVBQUUsUUFBUTtJQUNsQixPQUFPLEVBQUUsT0FBTztJQUNoQixXQUFXLEVBQUUsV0FBVztJQUN4QixVQUFVLEVBQUUsVUFBVTtJQUN0QixVQUFVLEVBQUUsVUFBVTtJQUN0QixZQUFZLEVBQUUsWUFBWTtJQUMxQixlQUFlLEVBQUUsZUFBZTtJQUNoQyxRQUFRLEVBQUUsUUFBUTtJQUNsQixrQkFBa0IsRUFBRSxrQkFBa0I7SUFDdEMsWUFBWSxFQUFFLFlBQVk7SUFFMUIsVUFBVSxFQUFFLFVBQVU7SUFDdEIsS0FBSyxFQUFFLEtBQUs7SUFDWixhQUFhLEVBQUUsYUFBYTtJQUU1QixPQUFPLEVBQUUsT0FBTztJQUNoQixPQUFPLEVBQUUsT0FBTztJQUNoQixpQkFBaUIsRUFBRSxpQkFBaUI7SUFFcEMsVUFBVSxFQUFFLFVBQVU7SUFFdEIsTUFBTSxFQUFFLE1BQU07SUFDZCxZQUFZLEVBQUUsWUFBWTtJQUMxQixNQUFNLEVBQUUsTUFBTTtJQUNkLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFNBQVMsRUFBRSxTQUFTO0lBRXBCLFFBQVEsRUFBRSxRQUFRO0lBQ2xCLElBQUksRUFBRSxJQUFJO0lBRVYsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGNBQWMsRUFBRSxjQUFjO0lBQzlCLFlBQVksRUFBRSxZQUFZO0lBQzFCLFNBQVMsRUFBRSxjQUFjO0lBRXpCLE1BQU0sRUFBRSxNQUFNO0lBQ2QsVUFBVSxFQUFFLFVBQVU7SUFDdEIsa0JBQWtCLEVBQUUsa0JBQWtCO0lBRXRDLE9BQU8sRUFBRSxPQUFPO0NBQ25CLENBQUM7O0FBT0YsU0FBUztBQUNUOzs7Ozs7Ozs7O0VBVUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU2VlIGlmIHRoaXMgY29tbWVudCB3aWxsIG1ha2UgaXQgaW50byAuZC50cyAqL1xyXG5pbXBvcnQgeyBCcmVlemVFbnVtIH0gZnJvbSAnLi9lbnVtJztcclxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnk7XHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFcnJvckNhbGxiYWNrIHtcclxuICAgIChlcnJvcjogRXJyb3IpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhbGxiYWNrIHtcclxuICAgIChkYXRhOiBhbnkpOiB2b2lkO1xyXG59XHJcblxyXG4vLyB0eXBlIFByZWRpY2F0ZSA9IChpOiBhbnkpID0+IGJvb2xlYW47XHJcbnR5cGUgUHJlZGljYXRlPFQ+ID0gKGk6IFQpID0+IGJvb2xlYW47XHJcblxyXG5sZXQgaGFzT3duUHJvcGVydHk6IChvYmo6IE9iamVjdCwga2V5OiBzdHJpbmcpID0+IGJvb2xlYW4gPSB1bmN1cnJ5KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xyXG5sZXQgYXJyYXlTbGljZTogKGFyOiBhbnlbXSwgc3RhcnQ/OiBudW1iZXIsIGVuZD86IG51bWJlcikgPT4gYW55W10gPSB1bmN1cnJ5KEFycmF5LnByb3RvdHlwZS5zbGljZSk7XHJcbmxldCBpc0VTNVN1cHBvcnRlZDogYm9vbGVhbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuICEhKE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICd4Jywge30pKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn0gKCk7XHJcblxyXG4vLyBpdGVyYXRlIG92ZXIgb2JqZWN0XHJcbmZ1bmN0aW9uIG9iamVjdEZvckVhY2gob2JqOiBPYmplY3QsIGt2Rm46IChrZXk6IHN0cmluZywgdmFsOiBhbnkpID0+IGFueSkge1xyXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIGtleSkpIHtcclxuICAgICAgICAgICAga3ZGbihrZXksIG9ialtrZXldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9iamVjdE1hcChvYmo6IE9iamVjdCwga3ZGbj86IChrZXk6IHN0cmluZywgdmFsOiBhbnkpID0+IGFueSk6IGFueVtdIHtcclxuICAgIGxldCByZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIGtleSkpIHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGt2Rm4gPyBrdkZuKGtleSwgb2JqW2tleV0pIDogb2JqW2tleV07XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxufVxyXG5cclxuZnVuY3Rpb24gb2JqZWN0Rmlyc3Qob2JqOiBPYmplY3QsIGt2UHJlZGljYXRlOiAoa2V5OiBzdHJpbmcsIHZhbDogYW55KSA9PiBib29sZWFuKTogeyBrZXk6IHN0cmluZywgdmFsdWU6IGFueSB9IHwgbnVsbCB7XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwga2V5KSkge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBvYmpba2V5XTtcclxuICAgICAgICAgICAgaWYgKGt2UHJlZGljYXRlKGtleSwgdmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBrZXk6IGtleSwgdmFsdWU6IHZhbHVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBtYXBGbjogKGFyZzogVCkgPT4gVVtdKSB7XHJcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXJyLm1hcChtYXBGbikpIGFzIFVbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTZXR0YWJsZShvYmo6IE9iamVjdCwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBwZCA9IGdldFByb3BEZXNjcmlwdG9yKG9iaiwgcHJvcGVydHlOYW1lKTtcclxuICAgIGlmIChwZCA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiAhIShwZC53cml0YWJsZSB8fCBwZC5zZXQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9wRGVzY3JpcHRvcihvYmo6IE9iamVjdCwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlc2NyaXB0b3IgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFpc0VTNVN1cHBvcnRlZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3BlcnR5TmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBuZXh0T2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XHJcbiAgICAgICAgaWYgKG5leHRPYmogPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gZ2V0UHJvcERlc2NyaXB0b3IobmV4dE9iaiwgcHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gRnVuY3Rpb25hbCBleHRlbnNpb25zXHJcblxyXG4vKiogY2FuIGJlIHVzZWQgbGlrZTogcGVyc29ucy5maWx0ZXIocHJvcEVxKFwiZmlyc3ROYW1lXCIsIFwiSm9oblwiKSkgKi9cclxuZnVuY3Rpb24gcHJvcEVxKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogKG9iajogT2JqZWN0KSA9PiBib29sZWFuIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gb2JqW3Byb3BlcnR5TmFtZV0gPT09IHZhbHVlO1xyXG4gICAgfTtcclxufVxyXG5cclxuLyoqIGNhbiBiZSB1c2VkIGxpa2U6IHBlcnNvbnMuZmlsdGVyKHByb3BFcShcImZpcnN0TmFtZVwiLCBcIkZpcnN0TmFtZVwiLCBcIkpvaG5cIikpICovXHJcbmZ1bmN0aW9uIHByb3BzRXEocHJvcGVydHkxTmFtZTogc3RyaW5nLCBwcm9wZXJ0eTJOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiAob2JqOiBPYmplY3QpID0+IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvYmo6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBvYmpbcHJvcGVydHkxTmFtZV0gPT09IHZhbHVlIHx8IG9ialtwcm9wZXJ0eTJOYW1lXSA9PT0gdmFsdWU7XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiogY2FuIGJlIHVzZWQgbGlrZSBwZXJzb25zLm1hcChwbHVjayhcImZpcnN0TmFtZVwiKSkgKi9cclxuZnVuY3Rpb24gcGx1Y2socHJvcGVydHlOYW1lOiBhbnkpOiAob2JqOiBPYmplY3QpID0+IGFueSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG9iajogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIG9ialtwcm9wZXJ0eU5hbWVdO1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gZW5kIGZ1bmN0aW9uYWwgZXh0ZW5zaW9uc1xyXG5cclxuLyoqIFJldHVybiBhbiBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMgZnJvbSBzb3VyY2UgKi9cclxuZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlWYWx1ZXMoc291cmNlOiBPYmplY3QpOiBhbnlbXSB7XHJcbiAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbmFtZSBpbiBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkoc291cmNlLCBuYW1lKSkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChzb3VyY2VbbmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8qKiBDb3B5IHByb3BlcnRpZXMgZnJvbSBzb3VyY2UgdG8gdGFyZ2V0LiBSZXR1cm5zIHRhcmdldC4gKi9cclxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldDogT2JqZWN0LCBzb3VyY2U6IE9iamVjdCwgcHJvcE5hbWVzPzogc3RyaW5nW10pOiBPYmplY3Qge1xyXG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiB0YXJnZXQ7XHJcbiAgICBpZiAocHJvcE5hbWVzKSB7XHJcbiAgICAgICAgcHJvcE5hbWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGxldCBwcm9wTmFtZSBpbiBzb3VyY2UpIHtcclxuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5KHNvdXJjZSwgcHJvcE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuXHJcbi8qKiBDb3B5IHByb3BlcnRpZXMgZnJvbSBkZWZhdWx0cyBpZmYgdW5kZWZpbmVkIG9uIHRhcmdldC4gIFJldHVybnMgdGFyZ2V0LiAqL1xyXG5mdW5jdGlvbiB1cGRhdGVXaXRoRGVmYXVsdHModGFyZ2V0OiBPYmplY3QsIGRlZmF1bHRzOiBPYmplY3QpOiBhbnkge1xyXG4gICAgZm9yIChsZXQgbmFtZSBpbiBkZWZhdWx0cykge1xyXG4gICAgICAgIGlmICh0YXJnZXRbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBkZWZhdWx0c1tuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG4vKiogU2V0IGN0b3IuZGVmYXVsdEluc3RhbmNlIHRvIGFuIGluc3RhbmNlIG9mIGN0b3Igd2l0aCBwcm9wZXJ0aWVzIGZyb20gdGFyZ2V0LlxyXG4gICAgV2Ugd2FudCB0byBpbnN1cmUgdGhhdCB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IGN0b3IuZGVmYXVsdEluc3RhbmNlIGlzIGFsd2F5cyBpbW11dGFibGVcclxuICAgIFVzZSAndGFyZ2V0JyBhcyB0aGUgcHJpbWFyeSB0ZW1wbGF0ZSBmb3IgdGhlIGN0b3IuZGVmYXVsdEluc3RhbmNlO1xyXG4gICAgVXNlIGN1cnJlbnQgJ2N0b3IuZGVmYXVsdEluc3RhbmNlJyBhcyB0aGUgdGVtcGxhdGUgZm9yIGFueSBtaXNzaW5nIHByb3BlcnRpZXNcclxuICAgIGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgZm9yIGN0b3IuZGVmYXVsdEluc3RhbmNlXHJcbiAgICByZXR1cm5zIHRhcmdldCB1bmNoYW5nZWQgKi9cclxuZnVuY3Rpb24gc2V0QXNEZWZhdWx0KHRhcmdldDogT2JqZWN0LCBjdG9yOiB7IG5ldyAoLi4uYXJnczogYW55W10pOiBhbnksIGRlZmF1bHRJbnN0YW5jZT86IGFueSB9KTogYW55IHtcclxuICAgIGN0b3IuZGVmYXVsdEluc3RhbmNlID0gdXBkYXRlV2l0aERlZmF1bHRzKG5ldyBjdG9yKHRhcmdldCksIGN0b3IuZGVmYXVsdEluc3RhbmNlKTtcclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gICAgJ3NvdXJjZScgaXMgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSB0cmFuc2Zvcm1lZCBpbnRvIGFub3RoZXJcclxuICAgICd0ZW1wbGF0ZScgaXMgYSBtYXAgd2hlcmUgdGhlXHJcbiAgICAgICBrZXlzOiBhcmUgdGhlIGtleXMgdG8gcmV0dXJuXHJcbiAgICAgICAgIGlmIGEga2V5IGNvbnRhaW5zICcsJ3MgdGhlbiB0aGUga2V5IGlzIHRyZWF0ZWQgYXMgYSBkZWxpbWl0ZWQgc3RyaW5nIHdpdGggZmlyc3Qgb2YgdGhlXHJcbiAgICAgICAgIGtleXMgYmVpbmcgdGhlIGtleSB0byByZXR1cm4gYW5kIHRoZSBvdGhlcnMgYWxsIHZhbGlkIGFsaWFzZXMgZm9yIHRoaXMga2V5XHJcbiAgICAgICAndmFsdWVzJyBhcmUgZWl0aGVyXHJcbiAgICAgICAgICAgMSkgdGhlICdkZWZhdWx0JyB2YWx1ZSBvZiB0aGUga2V5XHJcbiAgICAgICAgICAgMikgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGluIHRoZSBzb3VyY2UgdmFsdWUgYW5kIHNob3VsZCByZXR1cm4gdGhlIHZhbHVlIHRvIHNldFxyXG4gICAgICAgICBUaGUgdmFsdWUgZnJvbSB0aGUgc291cmNlIGlzIHRoZW4gc2V0IG9uIHRoZSB0YXJnZXQsXHJcbiAgICAgICAgIGFmdGVyIGZpcnN0IHBhc3NpbmcgdGhydSB0aGUgZm4sIGlmIHByb3ZpZGVkLCBVTkxFU1M6XHJcbiAgICAgICAgICAgMSkgaXQgaXMgdGhlIGRlZmF1bHQgdmFsdWVcclxuICAgICAgICAgICAyKSBpdCBpcyB1bmRlZmluZWQgKCBudWxscyBXSUxMIGJlIHNldClcclxuICAgICd0YXJnZXQnIGlzIG9wdGlvbmFsXHJcbiAgICAgICAtIGlmIGl0IGV4aXN0cyB0aGVuIHByb3BlcnRpZXMgb2YgdGhlIHRhcmdldCB3aWxsIGJlIHNldCAoIG92ZXJ3cml0dGVuIGlmIHRoZSBleGlzdClcclxuICAgICAgIC0gaWYgaXQgZG9lcyBub3QgZXhpc3QgdGhlbiBhIG5ldyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIGFzIGZpbGxlZC5cclxuICAgICd0YXJnZXQgaXMgcmV0dXJuZWQuXHJcbiovXHJcbmZ1bmN0aW9uIHRvSnNvbihzb3VyY2U6IE9iamVjdCwgdGVtcGxhdGU6IE9iamVjdCwgdGFyZ2V0OiBPYmplY3QgPSB7fSk6IE9iamVjdCB7XHJcblxyXG4gICAgZm9yIChsZXQga2V5IGluIHRlbXBsYXRlKSB7XHJcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBrZXkuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSB0ZW1wbGF0ZVtrZXldO1xyXG4gICAgICAgIC8vIHVzaW5nIHNvbWUgYXMgYSBmb3JFYWNoIHdpdGggYSAnYnJlYWsnXHJcbiAgICAgICAgYWxpYXNlcy5zb21lKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoIShwcm9wTmFtZSBpbiBzb3VyY2UpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgZnVuY3Rpb25hbCBwcm9wZXJ0eSBkZWZpbmVkIHdpdGggdGhpcyBhbGlhcyAoIG5vdCB3aGF0IHdlIHdhbnQgdG8gcmVwbGFjZSkuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgLy8gJz09JyBpcyBkZWxpYmVyYXRlIGhlcmUgLSBpZGVhIGlzIHRoYXQgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIHdpbGwgbmV2ZXIgZ2V0IHNlcmlhbGl6ZWRcclxuICAgICAgICAgICAgLy8gaWYgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gbnVsbC5cclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBkZWZhdWx0VmFsdWUpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAoZGVmYXVsdFZhbHVlKSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mICh2YWx1ZSkgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIEJyZWV6ZUVudW0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB0YXJnZXRbYWxpYXNlc1swXV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG4vKiogUmVwbGFjZXIgZnVuY3Rpb24gZm9yIHRvSlNPTlNhZmUsIHdoZW4gc2VyaWFsaXppbmcgZW50aXRpZXMuICBFeGNsdWRlcyBlbnRpdHlBc3BlY3QgYW5kIG90aGVyIGludGVybmFsIHByb3BlcnRpZXMuICovXHJcbmZ1bmN0aW9uIHRvSlNPTlNhZmVSZXBsYWNlcihwcm9wOiBzdHJpbmcsIHZhbDogYW55KSB7XHJcbiAgICBpZiAocHJvcCA9PT0gXCJlbnRpdHlBc3BlY3RcIiB8fCBwcm9wID09PSBcImNvbXBsZXhBc3BlY3RcIiB8fCBwcm9wID09PSBcImVudGl0eVR5cGVcIiB8fCBwcm9wID09PSBcImNvbXBsZXhUeXBlXCJcclxuICAgICAgICB8fCBwcm9wID09PSBcImdldFByb3BlcnR5XCIgfHwgcHJvcCA9PT0gXCJzZXRQcm9wZXJ0eVwiXHJcbiAgICAgICAgfHwgcHJvcCA9PT0gXCJjb25zdHJ1Y3RvclwiIHx8IHByb3AuY2hhckF0KDApID09PSAnXycgfHwgcHJvcC5jaGFyQXQoMCkgPT09ICckJykgcmV0dXJuO1xyXG4gICAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuLyoqIFNhZmVseSBwZXJmb3JtIHRvSlNPTiBsb2dpYyBvbiBvYmplY3RzIHdpdGggY3ljbGVzLiAqL1xyXG5mdW5jdGlvbiB0b0pTT05TYWZlKG9iajogYW55LCByZXBsYWNlcj86IChwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSk6IGFueSB7XHJcbiAgICBpZiAob2JqICE9PSBPYmplY3Qob2JqKSkgcmV0dXJuIG9iajsgLy8gcHJpbWl0aXZlIHZhbHVlXHJcbiAgICBpZiAob2JqLl8kdmlzaXRlZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChvYmoudG9KU09OKSB7XHJcbiAgICAgICAgbGV0IG5ld09iaiA9IG9iai50b0pTT04oKTtcclxuICAgICAgICBpZiAobmV3T2JqICE9PSBPYmplY3QobmV3T2JqKSkgcmV0dXJuIG5ld09iajsgLy8gcHJpbWl0aXZlIHZhbHVlXHJcbiAgICAgICAgaWYgKG5ld09iaiAhPT0gb2JqKSByZXR1cm4gdG9KU09OU2FmZShuZXdPYmosIHJlcGxhY2VyKTtcclxuICAgICAgICAvLyB0b0pTT04gcmV0dXJuZWQgdGhlIG9iamVjdCB1bmNoYW5nZWQuXHJcbiAgICAgICAgb2JqID0gbmV3T2JqO1xyXG4gICAgfVxyXG4gICAgb2JqLl8kdmlzaXRlZCA9IHRydWU7XHJcbiAgICBsZXQgcmVzdWx0OiBhbnk7XHJcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICByZXN1bHQgPSBvYmoubWFwKGZ1bmN0aW9uIChvOiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRvSlNPTlNhZmUobywgcmVwbGFjZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgKG9iaikgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBvYmopIHtcclxuICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiXyR2aXNpdGVkXCIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBsZXQgdmFsID0gb2JqW3Byb3BdO1xyXG4gICAgICAgICAgICBpZiAocmVwbGFjZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhbCA9IHJlcGxhY2VyKHByb3AsIHZhbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhbCA9IHRvSlNPTlNhZmUodmFsLCByZXBsYWNlcik7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkgY29udGludWU7XHJcbiAgICAgICAgICAgIHJlc3VsdFtwcm9wXSA9IHZhbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZWxldGUgb2JqLl8kdmlzaXRlZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8qKiBSZXNvbHZlcyB0aGUgdmFsdWVzIG9mIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGJ5IGNoZWNraW5nIGVhY2ggcHJvcGVydHkgaW4gbXVsdGlwbGUgc291cmNlcyB1bnRpbCBhIHZhbHVlIGlzIGZvdW5kLiAqL1xyXG5mdW5jdGlvbiByZXNvbHZlUHJvcGVydGllcyhzb3VyY2VzOiBPYmplY3RbXSwgcHJvcGVydHlOYW1lczogc3RyaW5nW10pOiBhbnkge1xyXG4gICAgbGV0IHIgPSB7fTtcclxuICAgIGxldCBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcclxuICAgIHByb3BlcnR5TmFtZXMuZm9yRWFjaChmdW5jdGlvbiAocG4pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBzcmMgPSBzb3VyY2VzW2ldO1xyXG4gICAgICAgICAgICBpZiAoc3JjKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gc3JjW3BuXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJbcG5dID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuXHJcbi8vIGFycmF5IGZ1bmN0aW9uc1xyXG5cclxuZnVuY3Rpb24gdG9BcnJheShpdGVtOiBhbnkpOiBhbnlbXSB7XHJcbiAgICBpZiAoaXRlbSA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBbaXRlbV07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiBhIHZlcnNpb24gb2YgQXJyYXkubWFwIHRoYXQgZG9lc24ndCByZXF1aXJlIGFuIGFycmF5LCBpLmUuIHdvcmtzIG9uIGFycmF5cyBhbmQgc2NhbGFycy4gKi9cclxuLy8gZnVuY3Rpb24gbWFwPFQsIFU+KGl0ZW1zOiBUIHwgVFtdLCBmbjogKHY6IFQsIGl4PzogbnVtYmVyKSA9PiBVLCBpbmNsdWRlTnVsbD86IGJvb2xlYW4pOiBVIHwgVVtdIHtcclxuIGZ1bmN0aW9uIG1hcDxUPihpdGVtczogVCB8IFRbXSwgZm46ICh2OiBULCBpeD86IG51bWJlcikgPT4gYW55LCBpbmNsdWRlTnVsbD86IGJvb2xlYW4pOiBhbnkgfCBhbnlbXSB7XHJcbiAgICAvLyB3aGV0aGVyIHRvIHJldHVybiBudWxscyBpbiBhcnJheSBvZiByZXN1bHRzOyBkZWZhdWx0ID0gdHJ1ZTtcclxuICAgIGluY2x1ZGVOdWxsID0gaW5jbHVkZU51bGwgPT0gbnVsbCA/IHRydWUgOiBpbmNsdWRlTnVsbDtcclxuICAgIGlmIChpdGVtcyA9PSBudWxsKSByZXR1cm4gaXRlbXM7XHJcbiAgICAvLyBsZXQgcmVzdWx0OiBVW107XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHY6IGFueSwgaXg6IG51bWJlcikge1xyXG4gICAgICAgICAgICBsZXQgciA9IGZuKHYsIGl4KTtcclxuICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCB8fCBpbmNsdWRlTnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2l4XSA9IHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZm4oaXRlbXMpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG4vKiogUmV0dXJuIGZpcnN0IGVsZW1lbnQgbWF0Y2hpbmcgcHJlZGljYXRlICovXHJcbmZ1bmN0aW9uIGFycmF5Rmlyc3Q8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiBQcmVkaWNhdGU8YW55Pik6IFQ7XHJcbmZ1bmN0aW9uIGFycmF5Rmlyc3Q8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiBQcmVkaWNhdGU8VD4pIHtcclxuICAgIGZvciAobGV0IGkgPSAwLCBqID0gYXJyYXkubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5W2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcblxyXG4vKiogUmV0dXJuIGluZGV4IG9mIGZpcnN0IGVsZW1lbnQgbWF0Y2hpbmcgcHJlZGljYXRlICovXHJcbmZ1bmN0aW9uIGFycmF5SW5kZXhPZjxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6IFByZWRpY2F0ZTxhbnk+KTogbnVtYmVyO1xyXG5mdW5jdGlvbiBhcnJheUluZGV4T2Y8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiBQcmVkaWNhdGU8VD4pOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSBhcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2ldKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbn1cclxuXHJcbi8qKiBBZGQgaXRlbSBpZiBub3QgYWxyZWFkeSBpbiBhcnJheSAqL1xyXG5mdW5jdGlvbiBhcnJheUFkZEl0ZW1VbmlxdWU8VD4oYXJyYXk6IFRbXSwgaXRlbTogVCkge1xyXG4gICAgbGV0IGl4ID0gYXJyYXkuaW5kZXhPZihpdGVtKTtcclxuICAgIGlmIChpeCA9PT0gLTEpIGFycmF5LnB1c2goaXRlbSk7XHJcbn1cclxuXHJcbi8qKiBSZW1vdmUgaXRlbXMgZnJvbSB0aGUgYXJyYXlcclxuICogQHBhcmFtIGFycmF5XHJcbiAqIEBwYXJhbSBwcmVkaWNhdGVPckl0ZW0gLSBpdGVtIHRvIHJlbW92ZSwgb3IgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIG1hdGNoaW5nIGl0ZW1cclxuICogQHBhcmFtIHNob3VsZFJlbW92ZU11bHRpcGxlIC0gdHJ1ZSB0byBrZWVwIHJlbW92aW5nIGFmdGVyIGZpcnN0IG1hdGNoLCBmYWxzZSBvdGhlcndpc2VcclxuICovXHJcbmZ1bmN0aW9uIGFycmF5UmVtb3ZlSXRlbTxUPihhcnJheTogVFtdLCBwcmVkaWNhdGVPckl0ZW06IFQgfCBQcmVkaWNhdGU8VD4gLCBzaG91bGRSZW1vdmVNdWx0aXBsZT86IGJvb2xlYW4pIHtcclxuICAgIGxldCBwcmVkaWNhdGUgPSAoaXNGdW5jdGlvbihwcmVkaWNhdGVPckl0ZW0pID8gcHJlZGljYXRlT3JJdGVtIDogdW5kZWZpbmVkKSBhcyBQcmVkaWNhdGU8VD47XHJcbiAgICBsZXQgbGFzdEl4ID0gYXJyYXkubGVuZ3RoIC0gMTtcclxuICAgIGxldCByZW1vdmVkID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBpID0gbGFzdEl4OyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmIChwcmVkaWNhdGUgPyBwcmVkaWNhdGUoYXJyYXlbaV0pIDogKGFycmF5W2ldID09PSBwcmVkaWNhdGVPckl0ZW0pKSB7XHJcbiAgICAgICAgICAgIGFycmF5LnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkUmVtb3ZlTXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbW92ZWQ7XHJcbn1cclxuXHJcbi8qKiBDb21iaW5lIGFycmF5IGVsZW1lbnRzIHVzaW5nIHRoZSBjYWxsYmFjay4gIFJldHVybnMgYXJyYXkgd2l0aCBsZW5ndGggPT0gbWluKGExLmxlbmd0aCwgYTIubGVuZ3RoKSAqL1xyXG5mdW5jdGlvbiBhcnJheVppcChhMTogYW55W10sIGEyOiBhbnlbXSwgY2FsbGJhY2s6ICh4MTogYW55LCB4MjogYW55KSA9PiBhbnkpOiBhbnlbXSB7XHJcbiAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IG4gPSBNYXRoLm1pbihhMS5sZW5ndGgsIGEyLmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKGNhbGxiYWNrKGExW2ldLCBhMltpXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLy9mdW5jdGlvbiBhcnJheURpc3RpbmN0KGFycmF5KSB7XHJcbi8vICAgIGFycmF5ID0gYXJyYXkgfHwgW107XHJcbi8vICAgIGxldCByZXN1bHQgPSBbXTtcclxuLy8gICAgZm9yIChsZXQgaSA9IDAsIGogPSBhcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuLy8gICAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihhcnJheVtpXSkgPCAwKVxyXG4vLyAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFycmF5W2ldKTtcclxuLy8gICAgfVxyXG4vLyAgICByZXR1cm4gcmVzdWx0O1xyXG4vL31cclxuXHJcbi8vIE5vdCB5ZXQgbmVlZGVkXHJcbi8vLy8gbXVjaCBmYXN0ZXIgYnV0IG9ubHkgd29ya3Mgb24gYXJyYXkgaXRlbXMgd2l0aCBhIHRvU3RyaW5nIG1ldGhvZCB0aGF0XHJcbi8vLy8gcmV0dXJucyBkaXN0aW5jdCBzdHJpbmcgZm9yIGRpc3RpbmN0IG9iamVjdHMuICBTbyB0aGlzIGlzIHNhZmUgZm9yIGFycmF5cyB3aXRoIHByaW1pdGl2ZVxyXG4vLy8vIHR5cGVzIGJ1dCBub3QgZm9yIGFycmF5cyB3aXRoIG9iamVjdCB0eXBlcywgdW5sZXNzIHRvU3RyaW5nKCkgaGFzIGJlZW4gaW1wbGVtZW50ZWQuXHJcbi8vZnVuY3Rpb24gYXJyYXlEaXN0aW5jdFVuc2FmZShhcnJheSkge1xyXG4vLyAgICBsZXQgbyA9IHt9LCBpLCBsID0gYXJyYXkubGVuZ3RoLCByID0gW107XHJcbi8vICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpICs9IDEpIHtcclxuLy8gICAgICAgIGxldCB2ID0gYXJyYXlbaV07XHJcbi8vICAgICAgICBvW3ZdID0gdjtcclxuLy8gICAgfVxyXG4vLyAgICBmb3IgKGkgaW4gbykgci5wdXNoKG9baV0pO1xyXG4vLyAgICByZXR1cm4gcjtcclxuLy99XHJcblxyXG5mdW5jdGlvbiBhcnJheUVxdWFscyhhMTogYW55W10sIGEyOiBhbnlbXSwgZXF1YWxzRm4/OiAoeDE6IGFueSwgeDI6IGFueSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgLy9DaGVjayBpZiB0aGUgYXJyYXlzIGFyZSB1bmRlZmluZWQvbnVsbFxyXG4gICAgaWYgKCFhMSB8fCAhYTIpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoYTEubGVuZ3RoICE9PSBhMi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvL2dvIHRocnUgYWxsIHRoZSB2YXJzXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGExLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgLy9pZiB0aGUgbGV0IGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIG1ha2UgYSByZWN1cnNpdmUgY2hlY2tcclxuICAgICAgICAvL290aGVyd2lzZSB3ZSdsbCBqdXN0IGNvbXBhcmUgdGhlIHZhbHVlc1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGExW2ldKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFycmF5RXF1YWxzKGExW2ldLCBhMltpXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZXF1YWxzRm4pIHtcclxuICAgICAgICAgICAgICAgIGlmICghZXF1YWxzRm4oYTFbaV0sIGEyW2ldKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGExW2ldICE9PSBhMltpXSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbi8vIGVuZCBvZiBhcnJheSBmdW5jdGlvbnNcclxuXHJcbi8qKiBSZXR1cm5zIGFuIGFycmF5IGZvciBhIHNvdXJjZSBhbmQgYSBwcm9wLCBhbmQgY3JlYXRlcyB0aGUgcHJvcCBpZiBuZWVkZWQuICovXHJcbmZ1bmN0aW9uIGdldEFycmF5KHNvdXJjZTogT2JqZWN0LCBwcm9wTmFtZTogc3RyaW5nKTogYW55W10ge1xyXG4gICAgbGV0IGFyciA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICBpZiAoIWFycikge1xyXG4gICAgICAgIGFyciA9IFtdO1xyXG4gICAgICAgIHNvdXJjZVtwcm9wTmFtZV0gPSBhcnI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG4vKiogQ2FsbHMgcmVxdWlyZUxpYkNvcmUgb24gc2VtaWNvbG9uLXNlcGFyYXRlZCBsaWJOYW1lcyAqL1xyXG5mdW5jdGlvbiByZXF1aXJlTGliKGxpYk5hbWVzOiBzdHJpbmcsIGVyck1lc3NhZ2U/OiBzdHJpbmcpIHtcclxuICAgIGxldCBhcnJOYW1lcyA9IGxpYk5hbWVzLnNwbGl0KFwiO1wiKTtcclxuICAgIGZvciAobGV0IGkgPSAwLCBqID0gYXJyTmFtZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGxpYiA9IHJlcXVpcmVMaWJDb3JlKGFyck5hbWVzW2ldKTtcclxuICAgICAgICBpZiAobGliKSByZXR1cm4gbGliO1xyXG4gICAgfVxyXG4gICAgaWYgKGVyck1lc3NhZ2UpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBcIiArIGxpYk5hbWVzICsgXCIuICBcIiArIGVyck1lc3NhZ2UpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcbi8qKiBSZXR1cm5zIHRoZSAnbGliTmFtZScgbW9kdWxlIGlmIGxvYWRlZCBvciBlbHNlIHJldHVybnMgdW5kZWZpbmVkICovXHJcbmZ1bmN0aW9uIHJlcXVpcmVMaWJDb3JlKGxpYk5hbWU6IHN0cmluZykge1xyXG4gICAgbGV0IHdpbiA9IHdpbmRvdyB8fCAoZ2xvYmFsID8gZ2xvYmFsLndpbmRvdyA6IHVuZGVmaW5lZCk7XHJcbiAgICBpZiAoIXdpbikgcmV0dXJuOyAvLyBNdXN0IHJ1biBpbiBhIGJyb3dzZXIuIFRvZG86IGFkZCBjb21tb25qcyBzdXBwb3J0XHJcblxyXG4gICAgLy8gZ2V0IGxpYnJhcnkgZnJvbSBicm93c2VyIGdsb2JhbHMgaWYgd2UgY2FuXHJcbiAgICBsZXQgbGliID0gd2luW2xpYk5hbWVdO1xyXG4gICAgaWYgKGxpYikgcmV0dXJuIGxpYjtcclxuXHJcbiAgICAvLyBpZiByZXF1aXJlIGV4aXN0cywgbWF5YmUgcmVxdWlyZSBjYW4gZ2V0IGl0LlxyXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgc3luY2hyb25vdXMgc28gaXQgY2FuJ3QgbG9hZCBtb2R1bGVzIHdpdGggQU1ELlxyXG4gICAgLy8gSXQgY2FuIG9ubHkgb2J0YWluIG1vZHVsZXMgZnJvbSByZXF1aXJlIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkLlxyXG4gICAgLy8gRGV2ZWxvcGVyIHNob3VsZCBib290c3RyYXAgc3VjaCB0aGF0IHRoZSBicmVlemUgbW9kdWxlXHJcbiAgICAvLyBsb2FkcyBhZnRlciBhbGwgb3RoZXIgbGlicmFyaWVzIHRoYXQgYnJlZXplIHNob3VsZCBmaW5kIHdpdGggdGhpcyBtZXRob2RcclxuICAgIC8vIFNlZSBkb2N1bWVudGF0aW9uXHJcbiAgICBsZXQgciA9IHdpbi5yZXF1aXJlO1xyXG4gICAgaWYgKHIpIHsgLy8gaWYgcmVxdWlyZSBleGlzdHNcclxuICAgICAgICBpZiAoci5kZWZpbmVkKSB7IC8vIHJlcXVpcmUuZGVmaW5lZCBpcyBub3Qgc3RhbmRhcmQgYW5kIG1heSBub3QgZXhpc3RcclxuICAgICAgICAgICAgLy8gcmVxdWlyZS5kZWZpbmVkIHJldHVybnMgdHJ1ZSBpZiBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkXHJcbiAgICAgICAgICAgIHJldHVybiByLmRlZmluZWQobGliTmFtZSkgPyByKGxpYk5hbWUpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHJlcXVpcmUuZGVmaW5lZCBkb2VzIG5vdCBleGlzdCBzbyB3ZSBoYXZlIHRvIGNhbGwgcmVxdWlyZSgnbGliTmFtZScpIGRpcmVjdGx5LlxyXG4gICAgICAgICAgICAvLyBUaGUgcmVxdWlyZSgnbGliTmFtZScpIG92ZXJsb2FkIGlzIHN5bmNocm9ub3VzIGFuZCBkb2VzIG5vdCBsb2FkIG1vZHVsZXMuXHJcbiAgICAgICAgICAgIC8vIEl0IHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIG1vZHVsZSBpc24ndCBhbHJlYWR5IGxvYWRlZC5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByKGxpYk5hbWUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZXF1aXJlKCdsaWJOYW1lJykgdGhyZXcgYmVjYXVzZSBtb2R1bGUgbm90IGxvYWRlZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKiogRXhlY3V0ZSBmbiB3aGlsZSBvYmogaGFzIHRlbXBWYWx1ZSBmb3IgcHJvcGVydHkgKi9cclxuZnVuY3Rpb24gdXNpbmcob2JqOiBPYmplY3QsIHByb3BlcnR5OiBzdHJpbmcsIHRlbXBWYWx1ZTogYW55LCBmbjogKCkgPT4gYW55KSB7XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICAgIHJldHVybiBmbigpO1xyXG4gICAgfVxyXG4gICAgbGV0IG9yaWdpbmFsVmFsdWUgPSBvYmpbcHJvcGVydHldO1xyXG4gICAgaWYgKHRlbXBWYWx1ZSA9PT0gb3JpZ2luYWxWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBmbigpO1xyXG4gICAgfVxyXG4gICAgb2JqW3Byb3BlcnR5XSA9IHRlbXBWYWx1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIGZuKCk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGlmIChvcmlnaW5hbFZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZGVsZXRlIG9ialtwcm9wZXJ0eV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb2JqW3Byb3BlcnR5XSA9IG9yaWdpbmFsVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKiogQ2FsbCBzdGF0ZSA9IHN0YXJ0Rm4oKSwgY2FsbCBmbigpLCBjYWxsIGVuZEZuKHN0YXRlKSAqL1xyXG5mdW5jdGlvbiB3cmFwRXhlY3V0aW9uKHN0YXJ0Rm46ICgpID0+IGFueSwgZW5kRm46IChzdGF0ZTogYW55KSA9PiBhbnksIGZuOiAoKSA9PiBhbnkpIHtcclxuICAgIGxldCBzdGF0ZTogYW55O1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBzdGF0ZSA9IHN0YXJ0Rm4oKTtcclxuICAgICAgICByZXR1cm4gZm4oKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIChzdGF0ZSkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmVycm9yID0gZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgZTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgZW5kRm4oc3RhdGUpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiogUmVtZW1iZXIgJiByZXR1cm4gdGhlIHZhbHVlIG9mIGZuKCkgd2hlbiBpdCB3YXMgY2FsbGVkIHdpdGggaXRzIGN1cnJlbnQgYXJncyAqL1xyXG5mdW5jdGlvbiBtZW1vaXplKGZuOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgYXJncyA9IGFycmF5U2xpY2UoPGFueT5hcmd1bWVudHMpLFxyXG4gICAgICAgICAgICBoYXNoID0gXCJcIixcclxuICAgICAgICAgICAgaSA9IGFyZ3MubGVuZ3RoLFxyXG4gICAgICAgICAgICBjdXJyZW50QXJnOiBhbnkgPSBudWxsO1xyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgY3VycmVudEFyZyA9IGFyZ3NbaV07XHJcbiAgICAgICAgICAgIGhhc2ggKz0gKGN1cnJlbnRBcmcgPT09IE9iamVjdChjdXJyZW50QXJnKSkgPyBKU09OLnN0cmluZ2lmeShjdXJyZW50QXJnKSA6IGN1cnJlbnRBcmc7XHJcbiAgICAgICAgICAgIGZuLm1lbW9pemUgfHwgKGZuLm1lbW9pemUgPSB7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaGFzaCBpbiBmbi5tZW1vaXplKSA/XHJcbiAgICAgICAgICAgIGZuLm1lbW9pemVbaGFzaF0gOlxyXG4gICAgICAgICAgICBmbi5tZW1vaXplW2hhc2hdID0gZm4uYXBwbHkodGhpcywgYXJncyk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRVdWlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgIGxldCByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZHVyYXRpb25Ub1NlY29uZHMoZHVyYXRpb246IHN0cmluZykge1xyXG4gICAgLy8gYmFzaWMgYWxnb3JpdGhtIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25lemFzYS9pc284NjAxLWpzLXBlcmlvZFxyXG4gICAgaWYgKHR5cGVvZiBkdXJhdGlvbiAhPT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBJU084NjAxIGR1cmF0aW9uICdcIiArIGR1cmF0aW9uICsgXCInXCIpO1xyXG5cclxuICAgIC8vIHJlZ2V4IHNwbGl0cyBhcyBmb2xsb3dzIC0gZ3JwMCwgZ3JwMSwgeSwgbSwgZCwgZ3JwMiwgaCwgbSwgc1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAxICAgICAyICAzICA0ICA1ICAgICA2ICA3ICA4XHJcbiAgICBsZXQgc3RydWN0ID0gL15QKChcXGQrWSk/KFxcZCtNKT8oXFxkK0QpPyk/KFQoXFxkK0gpPyhcXGQrTSk/KFxcZCtTKT8pPyQvLmV4ZWMoZHVyYXRpb24pO1xyXG4gICAgaWYgKCFzdHJ1Y3QpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgSVNPODYwMSBkdXJhdGlvbiAnXCIgKyBkdXJhdGlvbiArIFwiJ1wiKTtcclxuXHJcbiAgICBsZXQgeW1kaG1zSW5kZXhlcyA9IFsyLCAzLCA0LCA2LCA3LCA4XTsgLy8gLT4gZ3JwMSx5LG0sZCxncnAyLGgsbSxzXHJcbiAgICBsZXQgZmFjdG9ycyA9IFszMTEwNDAwMCwgLy8geWVhciAoMzYwKjI0KjYwKjYwKVxyXG4gICAgICAgIDI1OTIwMDAsICAgICAgICAgICAgIC8vIG1vbnRoICgzMCoyNCo2MCo2MClcclxuICAgICAgICA4NjQwMCwgICAgICAgICAgICAgICAvLyBkYXkgKDI0KjYwKjYwKVxyXG4gICAgICAgIDM2MDAsICAgICAgICAgICAgICAgIC8vIGhvdXIgKDYwKjYwKVxyXG4gICAgICAgIDYwLCAgICAgICAgICAgICAgICAgIC8vIG1pbnV0ZSAoNjApXHJcbiAgICAgICAgMV07ICAgICAgICAgICAgICAgICAgLy8gc2Vjb25kICgxKVxyXG5cclxuICAgIGxldCBzZWNvbmRzID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGRpZ2l0ID0gc3RydWN0W3ltZGhtc0luZGV4ZXNbaV1dO1xyXG4gICAgICAgIC8vIHJlbW92ZSBsZXR0ZXJzLCByZXBsYWNlIGJ5IDAgaWYgbm90IGRlZmluZWRcclxuICAgICAgICBkaWdpdCA9IDxhbnk+KGRpZ2l0ID8gK2RpZ2l0LnJlcGxhY2UoL1tBLVphLXpdKy9nLCAnJykgOiAwKTtcclxuICAgICAgICBzZWNvbmRzICs9IDxhbnk+ZGlnaXQgKiBmYWN0b3JzW2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlY29uZHM7XHJcblxyXG59XHJcblxyXG4vLyBpcyBmdW5jdGlvbnNcclxuXHJcbmZ1bmN0aW9uIG5vb3AoKSB7XHJcbiAgICAvLyBkb2VzIG5vdGhpbmdcclxufVxyXG5cclxuZnVuY3Rpb24gaWRlbnRpdHkoeDogYW55KTogYW55IHtcclxuICAgIHJldHVybiB4O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGFzc29mKG86IGFueSkge1xyXG4gICAgaWYgKG8gPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICB9XHJcbiAgICBpZiAobyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RhdGUobzogYW55KSB7XHJcbiAgICByZXR1cm4gY2xhc3NvZihvKSA9PT0gXCJkYXRlXCIgJiYgIWlzTmFOKG8uZ2V0VGltZSgpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEYXRlU3RyaW5nKHM6IHN0cmluZykge1xyXG4gICAgLy8gbGV0IHJ4ID0gL14oXFxkezR9fFsrXFwtXVxcZHs2fSkoPzotKFxcZHsyfSkoPzotKFxcZHsyfSkpPyk/KD86VChcXGR7Mn0pOihcXGR7Mn0pKD86OihcXGR7Mn0pKD86XFwuKFxcZHszfSkpPyk/KD86KFopfChbK1xcLV0pKFxcZHsyfSkoPzo6KFxcZHsyfSkpPyk/KT8kLztcclxuICAgIGxldCByeCA9IC9eKChcXGR7NH0tWzAxXVxcZC1bMC0zXVxcZFRbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZFxcLlxcZCsoWystXVswLTJdXFxkOlswLTVdXFxkfFopKXwoXFxkezR9LVswMV1cXGQtWzAtM11cXGRUWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGQoWystXVswLTJdXFxkOlswLTVdXFxkfFopKXwoXFxkezR9LVswMV1cXGQtWzAtM11cXGRUWzAtMl1cXGQ6WzAtNV1cXGQoWystXVswLTJdXFxkOlswLTVdXFxkfFopKSkkLztcclxuICAgIHJldHVybiAodHlwZW9mIHMgPT09IFwic3RyaW5nXCIpICYmIHJ4LnRlc3Qocyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRnVuY3Rpb24obzogYW55KSB7XHJcbiAgICByZXR1cm4gY2xhc3NvZihvKSA9PT0gXCJmdW5jdGlvblwiO1xyXG59XHJcblxyXG4vLyBmdW5jdGlvbiBpc1N0cmluZyhvOiBhbnkpIHtcclxuLy8gICAgIHJldHVybiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpO1xyXG4vLyB9XHJcblxyXG4vLyBmdW5jdGlvbiBpc09iamVjdChvOiBhbnkpIHtcclxuLy8gICAgIHJldHVybiAodHlwZW9mIG8gPT09IFwib2JqZWN0XCIpO1xyXG4vLyB9XHJcblxyXG5mdW5jdGlvbiBpc0d1aWQodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpICYmIC9bYS1mQS1GXFxkXXs4fS0oPzpbYS1mQS1GXFxkXXs0fS0pezN9W2EtZkEtRlxcZF17MTJ9Ly50ZXN0KHZhbHVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEdXJhdGlvbih2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgJiYgL14oLXwpP1BbVF0/W1xcZFxcLixcXC1dK1tZTURUSFNdLy50ZXN0KHZhbHVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFbXB0eShvYmo6IGFueSkge1xyXG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIGtleSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc051bWVyaWMobjogYW55KSB7XHJcbiAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xyXG59XHJcblxyXG5cclxuXHJcbi8vIGVuZCBvZiBpcyBGdW5jdGlvbnNcclxuXHJcbi8vIHN0cmluZyBmdW5jdGlvbnNcclxuXHJcbmZ1bmN0aW9uIHN0cmluZ1N0YXJ0c1dpdGgoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XHJcbiAgICAvLyByZXR1cm5zIHRydWUgZm9yIGVtcHR5IHN0cmluZyBvciBudWxsIHByZWZpeFxyXG4gICAgaWYgKCghc3RyKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHByZWZpeCA9PT0gXCJcIiB8fCBwcmVmaXggPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gc3RyLmluZGV4T2YocHJlZml4LCAwKSA9PT0gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gc3RyaW5nRW5kc1dpdGgoc3RyOiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKSB7XHJcbiAgICAvLyByZXR1cm5zIHRydWUgZm9yIGVtcHR5IHN0cmluZyBvciBudWxsIHN1ZmZpeFxyXG4gICAgaWYgKCghc3RyKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHN1ZmZpeCA9PT0gXCJcIiB8fCBzdWZmaXggPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gc3RyLmluZGV4T2Yoc3VmZml4LCBzdHIubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCkgIT09IC0xO1xyXG59XHJcblxyXG4vLyBCYXNlZCBvbiBmcmFnbWVudCBmcm9tIERlYW4gRWR3YXJkcycgQmFzZSAyIGxpYnJhcnlcclxuLyoqIGZvcm1hdChcImEgJTEgYW5kIGEgJTJcIiwgXCJjYXRcIiwgXCJkb2dcIikgLT4gXCJhIGNhdCBhbmQgYSBkb2dcIiAqL1xyXG5mdW5jdGlvbiBmb3JtYXRTdHJpbmcoc3RyOiBzdHJpbmcsIC4uLnBhcmFtczogYW55W10pIHtcclxuICAgIGxldCBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgbGV0IHBhdHRlcm4gPSBSZWdFeHAoXCIlKFsxLVwiICsgKGFyZ3VtZW50cy5sZW5ndGggLSAxKSArIFwiXSlcIiwgXCJnXCIpO1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKHBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCwgaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gYXJnc1tpbmRleF07XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzIyNTQwNy9jb252ZXJ0LWNhbWVsY2FzZXRleHQtdG8tY2FtZWwtY2FzZS10ZXh0XHJcbi8qKiBDaGFuZ2UgdGV4dCB0byB0aXRsZSBjYXNlIHdpdGggc3BhY2VzLCBlLmcuICdteVByb3BlcnR5TmFtZTEyJyB0byAnTXkgUHJvcGVydHkgTmFtZSAxMicgKi9cclxubGV0IGNhbWVsRWRnZXMgPSAvKFtBLVpdKD89W0EtWl1bYS16XSl8W15BLVpdKD89W0EtWl0pfFthLXpBLVpdKD89W15hLXpBLVpdKSkvZztcclxuZnVuY3Rpb24gdGl0bGVDYXNlU3BhY2UodGV4dDogc3RyaW5nKSB7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGNhbWVsRWRnZXMsICckMSAnKTtcclxuICAgIHRleHQgPSB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKTtcclxuICAgIHJldHVybiB0ZXh0O1xyXG59XHJcblxyXG4vLyBlbmQgb2Ygc3RyaW5nIGZ1bmN0aW9uc1xyXG5cclxuLy8gU2VlIE1hcmsgTWlsbGVy4oCZcyBleHBsYW5hdGlvbiBvZiB3aGF0IHRoaXMgZG9lcy5cclxuLy8gaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9Y29udmVudGlvbnM6c2FmZV9tZXRhX3Byb2dyYW1taW5nXHJcbmZ1bmN0aW9uIHVuY3VycnkoZjogYW55KSB7XHJcbiAgICBsZXQgY2FsbCA9IEZ1bmN0aW9uLmNhbGw7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBjYWxsLmFwcGx5KGYsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBzaGltc1xyXG5cclxuaWYgKCFPYmplY3QuY3JlYXRlKSB7XHJcbiAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKHBhcmVudDogYW55KSB7XHJcbiAgICAgICAgbGV0IEYgPSA8YW55PmZ1bmN0aW9uICgpIHtcclxuICAgICAgICB9O1xyXG4gICAgICAgIEYucHJvdG90eXBlID0gcGFyZW50O1xyXG4gICAgICAgIHJldHVybiBuZXcgRigpO1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gc3RyaW5ncyBmb3IgZXJyb3IgbWVzc2FnZXNcclxuXHJcbmNvbnN0IHN0cmluZ3MgPSB7XHJcbiAgICBcIlRPX1RZUEVcIjogXCJBZGQgJ0VudGl0eVF1ZXJ5LnRvVHlwZSgpJyB0byB5b3VyIHF1ZXJ5LCBvciBjYWxsICdNZXRhZGF0YVN0b3JlLnNldEVudGl0eVR5cGVGb3JSZXNvdXJjZU5hbWUoKScgdG8gcmVnaXN0ZXIgYW4gRW50aXR5VHlwZSBmb3IgdGhpcyByZXNvdXJjZU5hbWUuXCJcclxufVxyXG5cclxuLy8gLy8gbm90IGFsbCBtZXRob2RzIGFib3ZlIGFyZSBleHBvcnRlZFxyXG5leHBvcnQgY29uc3QgY29yZSA9IHtcclxuICAgIGlzRVM1U3VwcG9ydGVkOiBpc0VTNVN1cHBvcnRlZCxcclxuICAgIGhhc093blByb3BlcnR5OiBoYXNPd25Qcm9wZXJ0eSxcclxuICAgIGdldE93blByb3BlcnR5VmFsdWVzOiBnZXRPd25Qcm9wZXJ0eVZhbHVlcyxcclxuICAgIGdldFByb3BlcnR5RGVzY3JpcHRvcjogZ2V0UHJvcERlc2NyaXB0b3IsXHJcbiAgICBvYmplY3RGb3JFYWNoOiBvYmplY3RGb3JFYWNoLFxyXG4gICAgb2JqZWN0Rmlyc3Q6IG9iamVjdEZpcnN0LFxyXG4gICAgb2JqZWN0TWFwOiBvYmplY3RNYXAsIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHNvbWV0aGluZyBzdHJvbmdseSB0eXBlZC5cclxuICAgIGV4dGVuZDogZXh0ZW5kLFxyXG4gICAgcHJvcEVxOiBwcm9wRXEsXHJcbiAgICBwcm9wc0VxOiBwcm9wc0VxLFxyXG4gICAgcGx1Y2s6IHBsdWNrLFxyXG4gICAgbWFwOiBtYXAsXHJcbiAgICByZXNvbHZlUHJvcGVydGllczogcmVzb2x2ZVByb3BlcnRpZXMsXHJcbiAgICBzZXRBc0RlZmF1bHQ6IHNldEFzRGVmYXVsdCxcclxuICAgIHVwZGF0ZVdpdGhEZWZhdWx0czogdXBkYXRlV2l0aERlZmF1bHRzLFxyXG4gICAgZ2V0QXJyYXk6IGdldEFycmF5LFxyXG4gICAgdG9BcnJheTogdG9BcnJheSxcclxuICAgIGFycmF5RXF1YWxzOiBhcnJheUVxdWFscyxcclxuICAgIGFycmF5U2xpY2U6IGFycmF5U2xpY2UsXHJcbiAgICBhcnJheUZpcnN0OiBhcnJheUZpcnN0LFxyXG4gICAgYXJyYXlJbmRleE9mOiBhcnJheUluZGV4T2YsXHJcbiAgICBhcnJheVJlbW92ZUl0ZW06IGFycmF5UmVtb3ZlSXRlbSxcclxuICAgIGFycmF5WmlwOiBhcnJheVppcCxcclxuICAgIGFycmF5QWRkSXRlbVVuaXF1ZTogYXJyYXlBZGRJdGVtVW5pcXVlLFxyXG4gICAgYXJyYXlGbGF0TWFwOiBhcnJheUZsYXRNYXAsXHJcblxyXG4gICAgcmVxdWlyZUxpYjogcmVxdWlyZUxpYixcclxuICAgIHVzaW5nOiB1c2luZyxcclxuICAgIHdyYXBFeGVjdXRpb246IHdyYXBFeGVjdXRpb24sXHJcblxyXG4gICAgbWVtb2l6ZTogbWVtb2l6ZSxcclxuICAgIGdldFV1aWQ6IGdldFV1aWQsXHJcbiAgICBkdXJhdGlvblRvU2Vjb25kczogZHVyYXRpb25Ub1NlY29uZHMsXHJcblxyXG4gICAgaXNTZXR0YWJsZTogaXNTZXR0YWJsZSxcclxuXHJcbiAgICBpc0RhdGU6IGlzRGF0ZSxcclxuICAgIGlzRGF0ZVN0cmluZzogaXNEYXRlU3RyaW5nLFxyXG4gICAgaXNHdWlkOiBpc0d1aWQsXHJcbiAgICBpc0R1cmF0aW9uOiBpc0R1cmF0aW9uLFxyXG4gICAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcclxuICAgIGlzRW1wdHk6IGlzRW1wdHksXHJcbiAgICBpc051bWVyaWM6IGlzTnVtZXJpYyxcclxuXHJcbiAgICBpZGVudGl0eTogaWRlbnRpdHksXHJcbiAgICBub29wOiBub29wLFxyXG5cclxuICAgIHN0cmluZ1N0YXJ0c1dpdGg6IHN0cmluZ1N0YXJ0c1dpdGgsXHJcbiAgICBzdHJpbmdFbmRzV2l0aDogc3RyaW5nRW5kc1dpdGgsXHJcbiAgICBmb3JtYXRTdHJpbmc6IGZvcm1hdFN0cmluZyxcclxuICAgIHRpdGxlQ2FzZTogdGl0bGVDYXNlU3BhY2UsXHJcblxyXG4gICAgdG9Kc29uOiB0b0pzb24sXHJcbiAgICB0b0pTT05TYWZlOiB0b0pTT05TYWZlLFxyXG4gICAgdG9KU09OU2FmZVJlcGxhY2VyOiB0b0pTT05TYWZlUmVwbGFjZXIsXHJcblxyXG4gICAgc3RyaW5nczogc3RyaW5nc1xyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFcnJvckNhbGxiYWNrIHtcclxuICAgIChlcnJvcjogYW55KTogdm9pZDtcclxufVxyXG5cclxuXHJcbi8vIFVudXNlZFxyXG4vKlxyXG4vLyByZXR1cm5zIHRydWUgZm9yIGJvb2xlYW5zLCBudW1iZXJzLCBzdHJpbmdzIGFuZCBkYXRlc1xyXG4vLyBmYWxzZSBmb3IgbnVsbCwgYW5kIG5vbi1kYXRlIG9iamVjdHMsIGZ1bmN0aW9ucywgYW5kIGFycmF5c1xyXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShvYmo6IGFueSkge1xyXG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyB0cnVlIGZvciBudW1iZXJzLCBzdHJpbmdzLCBib29sZWFucyBhbmQgbnVsbCwgZmFsc2UgZm9yIG9iamVjdHNcclxuICAgIGlmIChvYmogIT0gT2JqZWN0KG9iaikpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGlzRGF0ZShvYmopO1xyXG59XHJcblxyXG4qLyJdfQ==