breeze-client 2.1.4-mjs → 2.1.5-mjs

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.
@@ -70,7 +70,7 @@ export const breeze = {
70
70
  ValidationError: ValidationError,
71
71
  ValidationOptions: ValidationOptions,
72
72
  Validator: Validator,
73
- version: "2.1.4"
73
+ version: "2.1.5"
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JyZWV6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFxQixrQkFBa0IsRUFBbUQsTUFBTSxnQkFBZ0IsQ0FBQztBQUNySSxPQUFPLEVBQUUsUUFBUSxFQUFHLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBcUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQW1OLE1BQU0sa0JBQWtCLENBQUM7QUFDbFEsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBa0ssTUFBTSxzQkFBc0IsQ0FBQztBQUN6TixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxF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RSxZQUFZO0lBQzFCLDJCQUEyQixFQUFFLDJCQUEyQjtJQUN4RCxnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDbEMsa0JBQWtCLEVBQUUsa0JBQWtCO0lBQ3RDLGlCQUFpQixFQUFFLGlCQUFpQjtJQUNwQyxhQUFhLEVBQUUsYUFBYTtJQUM1QixhQUFhLEVBQUUsYUFBYTtJQUM1QixnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDbEMsa0JBQWtCLEVBQUUsa0JBQWtCO0lBQ3RDLGFBQWEsRUFBRSxhQUFhO0lBQzVCLEtBQUs7SUFDTCxTQUFTLEVBQUUsU0FBUztJQUNwQixZQUFZLEVBQUUsWUFBWTtJQUMxQixXQUFXLEVBQUUsV0FBVztJQUN4QixlQUFlLEVBQUUsZUFBZTtJQUNoQyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsU0FBUyxFQUFFLFNBQVM7SUFDcEIsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQWdCRix3QkFBd0I7QUFDeEIsSUFBSSxHQUFRLENBQUM7QUFDYixJQUFJO0lBQ0YsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDOUQ7QUFBQyxPQUFPLENBQUMsRUFBRTtDQUVYO0FBQ0QsSUFBSSxHQUFHLEVBQUU7SUFDUCxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztDQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlcn0gZnJvbSAnLi9hYnN0cmFjdC1kYXRhLXNlcnZpY2UtYWRhcHRlcic7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtLCBhc3NlcnRDb25maWcsIFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBCcmVlemVDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IEJyZWV6ZUVudW19IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IENvbXBsZXhBcnJheSB9IGZyb20gJy4vY29tcGxleC1hcnJheSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlLCBEYXRhU2VydmljZUNvbmZpZywgSnNvblJlc3VsdHNBZGFwdGVyLCBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsIE5vZGVDb250ZXh0LCBOb2RlTWV0YSB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlBY3Rpb24gfSBmcm9tICcuL2VudGl0eS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHlBc3BlY3QsIENvbXBsZXhBc3BlY3QsIEVudGl0eSwgQ29tcGxleE9iamVjdCwgU3RydWN0dXJhbE9iamVjdCwgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TWFuYWdlckNvbmZpZywgRW50aXR5RXJyb3IsIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsIFNhdmVDb250ZXh0LCBTYXZlQnVuZGxlLCBIdHRwUmVzcG9uc2UsIEtleU1hcHBpbmcsIFNlcnZlckVycm9yLCBTYXZlUmVzdWx0LCBRdWVyeVJlc3VsdCwgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsIEhhc0NoYW5nZXNDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5LCBGaWx0ZXJRdWVyeU9wLCBCb29sZWFuUXVlcnlPcCwgT3JkZXJCeUNsYXVzZSwgRXhwYW5kQ2xhdXNlLCBTZWxlY3RDbGF1c2UgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9lbnRpdHktc3RhdGUnO1xyXG5pbXBvcnQgeyBJbnRlcmZhY2VSZWdpc3RyeSwgQWpheEFkYXB0ZXIsIEFqYXhDb25maWcsIERhdGFTZXJ2aWNlQWRhcHRlciwgTW9kZWxMaWJyYXJ5QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLCBVcmlCdWlsZGVyQWRhcHRlciwgSW50ZXJmYWNlUmVnaXN0cnlDb25maWcsIEFqYXhSZXF1ZXN0SW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyZmFjZS1yZWdpc3RyeSc7XHJcbmltcG9ydCB7IEtleUdlbmVyYXRvciB9IGZyb20gJy4va2V5LWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyB9IGZyb20gJy4vbG9jYWwtcXVlcnktY29tcGFyaXNvbi1vcHRpb25zJztcclxuaW1wb3J0IHsgTWFwcGluZ0NvbnRleHQgfSBmcm9tICcuL21hcHBpbmctY29udGV4dCc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBTdHJ1Y3R1cmFsVHlwZSwgRGF0YVByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBBdXRvR2VuZXJhdGVkS2V5VHlwZSAgIH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBOYW1pbmdDb252ZW50aW9uIH0gZnJvbSAnLi9uYW1pbmctY29udmVudGlvbic7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgVmlzaXRDb250ZXh0LCBWaXNpdG9yLCBFeHByZXNzaW9uQ29udGV4dCwgVW5hcnlQcmVkaWNhdGUsIEJpbmFyeVByZWRpY2F0ZSwgQW55QWxsUHJlZGljYXRlLCBBbmRPclByZWRpY2F0ZSwgTGl0RXhwciwgRm5FeHByLCBQcm9wRXhwciB9IGZyb20gJy4vcHJlZGljYXRlJztcclxuaW1wb3J0IHsgUXVlcnlPcHRpb25zLCAgRmV0Y2hTdHJhdGVneSwgTWVyZ2VTdHJhdGVneSB9IGZyb20gJy4vcXVlcnktb3B0aW9ucyc7XHJcbmltcG9ydCB7IFNhdmVPcHRpb25zIH0gZnJvbSAnLi9zYXZlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uT3B0aW9ucyB9IGZyb20gJy4vdmFsaWRhdGlvbi1vcHRpb25zJztcclxuXHJcbmltcG9ydCB7IGNvbmZpZywgQmFzZUFkYXB0ZXIgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IGNvcmUsIENhbGxiYWNrLCBFcnJvckNhbGxiYWNrIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgbWFrZVJlbGF0aW9uQXJyYXksIG1ha2VQcmltaXRpdmVBcnJheSwgbWFrZUNvbXBsZXhBcnJheSB9IGZyb20gJy4vYXJyYXknO1xyXG5cclxuaW1wb3J0IHsgUmVsYXRpb25BcnJheSB9IGZyb20gJy4vcmVsYXRpb24tYXJyYXknO1xyXG5pbXBvcnQgeyBBcnJheUNoYW5nZWRBcmdzIH0gZnJvbSAnLi9vYnNlcnZhYmxlLWFycmF5JztcclxuZXhwb3J0IHsgQnJlZXplQ29uZmlnLCBDb21wbGV4QXJyYXksIFJlbGF0aW9uQXJyYXkgfTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIsXHJcbiAgQWpheEFkYXB0ZXIsXHJcbiAgQWpheENvbmZpZyxcclxuICBBamF4UmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIEFuZE9yUHJlZGljYXRlLFxyXG4gIEFueUFsbFByZWRpY2F0ZSxcclxuICBBcnJheUNoYW5nZWRBcmdzLFxyXG4gIGFzc2VydENvbmZpZyxcclxuICBhc3NlcnRQYXJhbSxcclxuICBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCYXNlQWRhcHRlcixcclxuICBCaW5hcnlQcmVkaWNhdGUsXHJcbiAgQnJlZXplRW51bSxcclxuICBCcmVlemVFdmVudCwgXHJcbiAgQ2FsbGJhY2ssXHJcbiAgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIENvbXBsZXhBc3BlY3QsXHJcbiAgQ29tcGxleE9iamVjdCxcclxuICBDb21wbGV4VHlwZSxcclxuICBjb25maWcsXHJcbiAgY29yZSxcclxuICBEYXRhUHJvcGVydHksXHJcbiAgRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIERhdGFTZXJ2aWNlQ29uZmlnLFxyXG4gIERhdGFUeXBlLFxyXG4gIEVudGl0eSxcclxuICBFbnRpdHlBY3Rpb24sXHJcbiAgRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsXHJcbiAgRW50aXR5RXJyb3IsXHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5TWFuYWdlckNvbmZpZyxcclxuICBFbnRpdHlQcm9wZXJ0eSxcclxuICBFbnRpdHlRdWVyeSxcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlLFxyXG4gIEVycm9yQ2FsbGJhY2ssXHJcbiAgRXhwYW5kQ2xhdXNlLFxyXG4gIEV4cHJlc3Npb25Db250ZXh0LFxyXG4gIEZldGNoU3RyYXRlZ3ksXHJcbiAgRmlsdGVyUXVlcnlPcCxcclxuICBGbkV4cHIsXHJcbiAgSGFzQ2hhbmdlc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgSHR0cFJlc3BvbnNlLFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnLFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcixcclxuICBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsXHJcbiAgS2V5R2VuZXJhdG9yLFxyXG4gIEtleU1hcHBpbmcsXHJcbiAgTGl0RXhwcixcclxuICBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsXHJcbiAgbWFrZUNvbXBsZXhBcnJheSxcclxuICBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXksXHJcbiAgTWFwcGluZ0NvbnRleHQsXHJcbiAgTWVyZ2VTdHJhdGVneSxcclxuICBNZXRhZGF0YVN0b3JlLFxyXG4gIE1vZGVsTGlicmFyeUFkYXB0ZXIsXHJcbiAgTmFtaW5nQ29udmVudGlvbixcclxuICBOYXZpZ2F0aW9uUHJvcGVydHksXHJcbiAgTm9kZUNvbnRleHQsXHJcbiAgTm9kZU1ldGEsXHJcbiAgT3JkZXJCeUNsYXVzZSxcclxuICBQcmVkaWNhdGUsXHJcbiAgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIFByb3BFeHByLFxyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeVJlc3VsdCxcclxuICBTYXZlQnVuZGxlLFxyXG4gIFNhdmVDb250ZXh0LFxyXG4gIFNhdmVPcHRpb25zLFxyXG4gIFNhdmVSZXN1bHQsXHJcbiAgU2VsZWN0Q2xhdXNlLFxyXG4gIFNlcnZlckVycm9yLFxyXG4gIFN0cnVjdHVyYWxPYmplY3QsXHJcbiAgU3RydWN0dXJhbFR5cGUsXHJcbiAgVW5hcnlQcmVkaWNhdGUsXHJcbiAgVXJpQnVpbGRlckFkYXB0ZXIsXHJcbiAgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcixcclxuICBWaXNpdENvbnRleHQsXHJcbiAgVmlzaXRvcixcclxufTtcclxuXHJcbi8vIGNyZWF0ZSBhIGJyZWV6ZSB2YXJpYWJsZSBoZXJlXHJcbmV4cG9ydCBjb25zdCBicmVlemUgPSB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXI6IEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIGFzc2VydENvbmZpZzogbnVsbCBhcyBhbnksXHJcbiAgYXNzZXJ0UGFyYW06IG51bGwgYXMgYW55LFxyXG4gIEF1dG9HZW5lcmF0ZWRLZXlUeXBlOiBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCb29sZWFuUXVlcnlPcDogQm9vbGVhblF1ZXJ5T3AsXHJcbiAgQ29tcGxleEFzcGVjdDogQ29tcGxleEFzcGVjdCxcclxuICBDb21wbGV4VHlwZTogQ29tcGxleFR5cGUsXHJcbiAgY29uZmlnOiBjb25maWcsXHJcbiAgY29yZTogY29yZSxcclxuICBEYXRhUHJvcGVydHk6IERhdGFQcm9wZXJ0eSxcclxuICBEYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVR5cGU6IERhdGFUeXBlLFxyXG4gIEVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUtleTogRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5UXVlcnk6IEVudGl0eVF1ZXJ5LFxyXG4gIEVudGl0eVN0YXRlOiBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxyXG4gIEV2ZW50OiBCcmVlemVFdmVudCxcclxuICBGZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LFxyXG4gIEZpbHRlclF1ZXJ5T3A6IEZpbHRlclF1ZXJ5T3AsXHJcbiAgSW50ZXJmYWNlUmVnaXN0cnk6IEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcjogSnNvblJlc3VsdHNBZGFwdGVyLFxyXG4gIEtleUdlbmVyYXRvcjogS2V5R2VuZXJhdG9yLFxyXG4gIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9uczogTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLFxyXG4gIG1ha2VDb21wbGV4QXJyYXk6IG1ha2VDb21wbGV4QXJyYXksXHJcbiAgbWFrZVByaW1pdGl2ZUFycmF5OiBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXk6IG1ha2VSZWxhdGlvbkFycmF5LFxyXG4gIE1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3ksXHJcbiAgTWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSxcclxuICBOYW1pbmdDb252ZW50aW9uOiBOYW1pbmdDb252ZW50aW9uLFxyXG4gIE5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LFxyXG4gIE9yZGVyQnlDbGF1c2U6IE9yZGVyQnlDbGF1c2UsIC8vIGZvciB0ZXN0aW5nIG9ubHlcclxuICBQYXJhbSxcclxuICBQcmVkaWNhdGU6IFByZWRpY2F0ZSxcclxuICBRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICBTYXZlT3B0aW9uczogU2F2ZU9wdGlvbnMsXHJcbiAgVmFsaWRhdGlvbkVycm9yOiBWYWxpZGF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbk9wdGlvbnM6IFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcjogVmFsaWRhdG9yLFxyXG4gIHZlcnNpb246IFwiMi4xLjRcIlxyXG59O1xyXG5cclxuLy8gYnJlZXplLmFzc2VydENvbmZpZyA9IGFzc2VydENvbmZpZyBhcyBhbnk7XHJcbi8vIGJyZWV6ZS5hc3NlcnRQYXJhbSA9IGFzc2VydFBhcmFtIGFzIGFueTtcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgcHJvbWlzZXMge1xyXG4gIC8qKiBuby1vcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGJyZWV6ZS1icmlkZ2UyLWFuZ3VsYXIgKi9cclxuICBleHBvcnQgaW50ZXJmYWNlIElQcm9taXNlU2VydmljZSB7fVxyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxubGV0IHdpbjogYW55O1xyXG50cnkge1xyXG4gIHdpbiA9IHdpbmRvdyA/IHdpbmRvdyA6IChnbG9iYWwgPyBnbG9iYWwud2luZG93IDogdW5kZWZpbmVkKTtcclxufSBjYXRjaCAoZSkge1xyXG5cclxufVxyXG5pZiAod2luKSB7XHJcbiAgd2luLmJyZWV6ZSA9IGJyZWV6ZTtcclxufVxyXG4iXX0=
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JyZWV6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFxQixrQkFBa0IsRUFBbUQsTUFBTSxnQkFBZ0IsQ0FBQztBQUNySSxPQUFPLEVBQUUsUUFBUSxFQUFHLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBcUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQW1OLE1BQU0sa0JBQWtCLENBQUM7QUFDbFEsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBa0ssTUFBTSxzQkFBc0IsQ0FBQztBQUN6TixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxF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RSxZQUFZO0lBQzFCLDJCQUEyQixFQUFFLDJCQUEyQjtJQUN4RCxnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDbEMsa0JBQWtCLEVBQUUsa0JBQWtCO0lBQ3RDLGlCQUFpQixFQUFFLGlCQUFpQjtJQUNwQyxhQUFhLEVBQUUsYUFBYTtJQUM1QixhQUFhLEVBQUUsYUFBYTtJQUM1QixnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDbEMsa0JBQWtCLEVBQUUsa0JBQWtCO0lBQ3RDLGFBQWEsRUFBRSxhQUFhO0lBQzVCLEtBQUs7SUFDTCxTQUFTLEVBQUUsU0FBUztJQUNwQixZQUFZLEVBQUUsWUFBWTtJQUMxQixXQUFXLEVBQUUsV0FBVztJQUN4QixlQUFlLEVBQUUsZUFBZTtJQUNoQyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsU0FBUyxFQUFFLFNBQVM7SUFDcEIsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQWdCRix3QkFBd0I7QUFDeEIsSUFBSSxHQUFRLENBQUM7QUFDYixJQUFJO0lBQ0YsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDOUQ7QUFBQyxPQUFPLENBQUMsRUFBRTtDQUVYO0FBQ0QsSUFBSSxHQUFHLEVBQUU7SUFDUCxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztDQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlcn0gZnJvbSAnLi9hYnN0cmFjdC1kYXRhLXNlcnZpY2UtYWRhcHRlcic7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtLCBhc3NlcnRDb25maWcsIFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBCcmVlemVDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IEJyZWV6ZUVudW19IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IENvbXBsZXhBcnJheSB9IGZyb20gJy4vY29tcGxleC1hcnJheSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlLCBEYXRhU2VydmljZUNvbmZpZywgSnNvblJlc3VsdHNBZGFwdGVyLCBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsIE5vZGVDb250ZXh0LCBOb2RlTWV0YSB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlBY3Rpb24gfSBmcm9tICcuL2VudGl0eS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHlBc3BlY3QsIENvbXBsZXhBc3BlY3QsIEVudGl0eSwgQ29tcGxleE9iamVjdCwgU3RydWN0dXJhbE9iamVjdCwgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TWFuYWdlckNvbmZpZywgRW50aXR5RXJyb3IsIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsIFNhdmVDb250ZXh0LCBTYXZlQnVuZGxlLCBIdHRwUmVzcG9uc2UsIEtleU1hcHBpbmcsIFNlcnZlckVycm9yLCBTYXZlUmVzdWx0LCBRdWVyeVJlc3VsdCwgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsIEhhc0NoYW5nZXNDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5LCBGaWx0ZXJRdWVyeU9wLCBCb29sZWFuUXVlcnlPcCwgT3JkZXJCeUNsYXVzZSwgRXhwYW5kQ2xhdXNlLCBTZWxlY3RDbGF1c2UgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9lbnRpdHktc3RhdGUnO1xyXG5pbXBvcnQgeyBJbnRlcmZhY2VSZWdpc3RyeSwgQWpheEFkYXB0ZXIsIEFqYXhDb25maWcsIERhdGFTZXJ2aWNlQWRhcHRlciwgTW9kZWxMaWJyYXJ5QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLCBVcmlCdWlsZGVyQWRhcHRlciwgSW50ZXJmYWNlUmVnaXN0cnlDb25maWcsIEFqYXhSZXF1ZXN0SW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyZmFjZS1yZWdpc3RyeSc7XHJcbmltcG9ydCB7IEtleUdlbmVyYXRvciB9IGZyb20gJy4va2V5LWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyB9IGZyb20gJy4vbG9jYWwtcXVlcnktY29tcGFyaXNvbi1vcHRpb25zJztcclxuaW1wb3J0IHsgTWFwcGluZ0NvbnRleHQgfSBmcm9tICcuL21hcHBpbmctY29udGV4dCc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBTdHJ1Y3R1cmFsVHlwZSwgRGF0YVByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBBdXRvR2VuZXJhdGVkS2V5VHlwZSAgIH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBOYW1pbmdDb252ZW50aW9uIH0gZnJvbSAnLi9uYW1pbmctY29udmVudGlvbic7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgVmlzaXRDb250ZXh0LCBWaXNpdG9yLCBFeHByZXNzaW9uQ29udGV4dCwgVW5hcnlQcmVkaWNhdGUsIEJpbmFyeVByZWRpY2F0ZSwgQW55QWxsUHJlZGljYXRlLCBBbmRPclByZWRpY2F0ZSwgTGl0RXhwciwgRm5FeHByLCBQcm9wRXhwciB9IGZyb20gJy4vcHJlZGljYXRlJztcclxuaW1wb3J0IHsgUXVlcnlPcHRpb25zLCAgRmV0Y2hTdHJhdGVneSwgTWVyZ2VTdHJhdGVneSB9IGZyb20gJy4vcXVlcnktb3B0aW9ucyc7XHJcbmltcG9ydCB7IFNhdmVPcHRpb25zIH0gZnJvbSAnLi9zYXZlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uT3B0aW9ucyB9IGZyb20gJy4vdmFsaWRhdGlvbi1vcHRpb25zJztcclxuXHJcbmltcG9ydCB7IGNvbmZpZywgQmFzZUFkYXB0ZXIgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IGNvcmUsIENhbGxiYWNrLCBFcnJvckNhbGxiYWNrIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgbWFrZVJlbGF0aW9uQXJyYXksIG1ha2VQcmltaXRpdmVBcnJheSwgbWFrZUNvbXBsZXhBcnJheSB9IGZyb20gJy4vYXJyYXknO1xyXG5cclxuaW1wb3J0IHsgUmVsYXRpb25BcnJheSB9IGZyb20gJy4vcmVsYXRpb24tYXJyYXknO1xyXG5pbXBvcnQgeyBBcnJheUNoYW5nZWRBcmdzIH0gZnJvbSAnLi9vYnNlcnZhYmxlLWFycmF5JztcclxuZXhwb3J0IHsgQnJlZXplQ29uZmlnLCBDb21wbGV4QXJyYXksIFJlbGF0aW9uQXJyYXkgfTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIsXHJcbiAgQWpheEFkYXB0ZXIsXHJcbiAgQWpheENvbmZpZyxcclxuICBBamF4UmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIEFuZE9yUHJlZGljYXRlLFxyXG4gIEFueUFsbFByZWRpY2F0ZSxcclxuICBBcnJheUNoYW5nZWRBcmdzLFxyXG4gIGFzc2VydENvbmZpZyxcclxuICBhc3NlcnRQYXJhbSxcclxuICBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCYXNlQWRhcHRlcixcclxuICBCaW5hcnlQcmVkaWNhdGUsXHJcbiAgQnJlZXplRW51bSxcclxuICBCcmVlemVFdmVudCwgXHJcbiAgQ2FsbGJhY2ssXHJcbiAgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIENvbXBsZXhBc3BlY3QsXHJcbiAgQ29tcGxleE9iamVjdCxcclxuICBDb21wbGV4VHlwZSxcclxuICBjb25maWcsXHJcbiAgY29yZSxcclxuICBEYXRhUHJvcGVydHksXHJcbiAgRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIERhdGFTZXJ2aWNlQ29uZmlnLFxyXG4gIERhdGFUeXBlLFxyXG4gIEVudGl0eSxcclxuICBFbnRpdHlBY3Rpb24sXHJcbiAgRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsXHJcbiAgRW50aXR5RXJyb3IsXHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5TWFuYWdlckNvbmZpZyxcclxuICBFbnRpdHlQcm9wZXJ0eSxcclxuICBFbnRpdHlRdWVyeSxcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlLFxyXG4gIEVycm9yQ2FsbGJhY2ssXHJcbiAgRXhwYW5kQ2xhdXNlLFxyXG4gIEV4cHJlc3Npb25Db250ZXh0LFxyXG4gIEZldGNoU3RyYXRlZ3ksXHJcbiAgRmlsdGVyUXVlcnlPcCxcclxuICBGbkV4cHIsXHJcbiAgSGFzQ2hhbmdlc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgSHR0cFJlc3BvbnNlLFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnLFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcixcclxuICBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsXHJcbiAgS2V5R2VuZXJhdG9yLFxyXG4gIEtleU1hcHBpbmcsXHJcbiAgTGl0RXhwcixcclxuICBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsXHJcbiAgbWFrZUNvbXBsZXhBcnJheSxcclxuICBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXksXHJcbiAgTWFwcGluZ0NvbnRleHQsXHJcbiAgTWVyZ2VTdHJhdGVneSxcclxuICBNZXRhZGF0YVN0b3JlLFxyXG4gIE1vZGVsTGlicmFyeUFkYXB0ZXIsXHJcbiAgTmFtaW5nQ29udmVudGlvbixcclxuICBOYXZpZ2F0aW9uUHJvcGVydHksXHJcbiAgTm9kZUNvbnRleHQsXHJcbiAgTm9kZU1ldGEsXHJcbiAgT3JkZXJCeUNsYXVzZSxcclxuICBQcmVkaWNhdGUsXHJcbiAgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIFByb3BFeHByLFxyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeVJlc3VsdCxcclxuICBTYXZlQnVuZGxlLFxyXG4gIFNhdmVDb250ZXh0LFxyXG4gIFNhdmVPcHRpb25zLFxyXG4gIFNhdmVSZXN1bHQsXHJcbiAgU2VsZWN0Q2xhdXNlLFxyXG4gIFNlcnZlckVycm9yLFxyXG4gIFN0cnVjdHVyYWxPYmplY3QsXHJcbiAgU3RydWN0dXJhbFR5cGUsXHJcbiAgVW5hcnlQcmVkaWNhdGUsXHJcbiAgVXJpQnVpbGRlckFkYXB0ZXIsXHJcbiAgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcixcclxuICBWaXNpdENvbnRleHQsXHJcbiAgVmlzaXRvcixcclxufTtcclxuXHJcbi8vIGNyZWF0ZSBhIGJyZWV6ZSB2YXJpYWJsZSBoZXJlXHJcbmV4cG9ydCBjb25zdCBicmVlemUgPSB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXI6IEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIGFzc2VydENvbmZpZzogbnVsbCBhcyBhbnksXHJcbiAgYXNzZXJ0UGFyYW06IG51bGwgYXMgYW55LFxyXG4gIEF1dG9HZW5lcmF0ZWRLZXlUeXBlOiBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCb29sZWFuUXVlcnlPcDogQm9vbGVhblF1ZXJ5T3AsXHJcbiAgQ29tcGxleEFzcGVjdDogQ29tcGxleEFzcGVjdCxcclxuICBDb21wbGV4VHlwZTogQ29tcGxleFR5cGUsXHJcbiAgY29uZmlnOiBjb25maWcsXHJcbiAgY29yZTogY29yZSxcclxuICBEYXRhUHJvcGVydHk6IERhdGFQcm9wZXJ0eSxcclxuICBEYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVR5cGU6IERhdGFUeXBlLFxyXG4gIEVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUtleTogRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5UXVlcnk6IEVudGl0eVF1ZXJ5LFxyXG4gIEVudGl0eVN0YXRlOiBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxyXG4gIEV2ZW50OiBCcmVlemVFdmVudCxcclxuICBGZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LFxyXG4gIEZpbHRlclF1ZXJ5T3A6IEZpbHRlclF1ZXJ5T3AsXHJcbiAgSW50ZXJmYWNlUmVnaXN0cnk6IEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcjogSnNvblJlc3VsdHNBZGFwdGVyLFxyXG4gIEtleUdlbmVyYXRvcjogS2V5R2VuZXJhdG9yLFxyXG4gIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9uczogTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLFxyXG4gIG1ha2VDb21wbGV4QXJyYXk6IG1ha2VDb21wbGV4QXJyYXksXHJcbiAgbWFrZVByaW1pdGl2ZUFycmF5OiBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXk6IG1ha2VSZWxhdGlvbkFycmF5LFxyXG4gIE1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3ksXHJcbiAgTWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSxcclxuICBOYW1pbmdDb252ZW50aW9uOiBOYW1pbmdDb252ZW50aW9uLFxyXG4gIE5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LFxyXG4gIE9yZGVyQnlDbGF1c2U6IE9yZGVyQnlDbGF1c2UsIC8vIGZvciB0ZXN0aW5nIG9ubHlcclxuICBQYXJhbSxcclxuICBQcmVkaWNhdGU6IFByZWRpY2F0ZSxcclxuICBRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICBTYXZlT3B0aW9uczogU2F2ZU9wdGlvbnMsXHJcbiAgVmFsaWRhdGlvbkVycm9yOiBWYWxpZGF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbk9wdGlvbnM6IFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcjogVmFsaWRhdG9yLFxyXG4gIHZlcnNpb246IFwiMi4xLjVcIlxyXG59O1xyXG5cclxuLy8gYnJlZXplLmFzc2VydENvbmZpZyA9IGFzc2VydENvbmZpZyBhcyBhbnk7XHJcbi8vIGJyZWV6ZS5hc3NlcnRQYXJhbSA9IGFzc2VydFBhcmFtIGFzIGFueTtcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgcHJvbWlzZXMge1xyXG4gIC8qKiBuby1vcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGJyZWV6ZS1icmlkZ2UyLWFuZ3VsYXIgKi9cclxuICBleHBvcnQgaW50ZXJmYWNlIElQcm9taXNlU2VydmljZSB7fVxyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxubGV0IHdpbjogYW55O1xyXG50cnkge1xyXG4gIHdpbiA9IHdpbmRvdyA/IHdpbmRvdyA6IChnbG9iYWwgPyBnbG9iYWwud2luZG93IDogdW5kZWZpbmVkKTtcclxufSBjYXRjaCAoZSkge1xyXG5cclxufVxyXG5pZiAod2luKSB7XHJcbiAgd2luLmJyZWV6ZSA9IGJyZWV6ZTtcclxufVxyXG4iXX0=
@@ -272,7 +272,7 @@ function setDpValueComplex(context, rawAccessorFn) {
272
272
  let dataType = property.dataType;
273
273
  if (property.isScalar) {
274
274
  if (!newValue) {
275
- throw new Error(core.formatString("You cannot set the '%1' property to null because it's datatype is the ComplexType: '%2'", property.name, property.dataType.name));
275
+ throw new Error(core.formatString("You cannot set the '%1' property to null because its datatype is the ComplexType: '%2'", property.name, property.dataType.name));
276
276
  }
277
277
  if (!oldValue) {
278
278
  let ctor = dataType.getCtor();
@@ -457,4 +457,4 @@ function updateStateAndValidate(context) {
457
457
  entityAspect._validateProperty(context.newValue, { entity: entityAspect.entity, property: property, propertyName: context.propertyName, oldValue: context.oldValue });
458
458
  }
459
459
  }
460
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1wcm9wZXJ0eS1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWZhdWx0LXByb3BlcnR5LWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUEyQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLHdCQUF3QjtBQUN4QixNQUFNLFVBQVUsMEJBQTBCLENBQXlCLFFBQXdCLEVBQUUsUUFBYSxFQUFFLGFBQXVCO0lBQ2pJLCtDQUErQztJQUUvQyxJQUFJLFFBQVEsS0FBSyxTQUFTO1FBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLGtFQUFrRTtJQUMvRyxJQUFJLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUUvQixJQUFJLFFBQVEsR0FBSSxRQUFnQixDQUFDLFFBQVEsQ0FBQztJQUMxQyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQzlCLDRGQUE0RjtRQUM1RixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ2pELFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtnQkFDbEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLFFB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LEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7S0FDMUg7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IENvbXBsZXhUeXBlLCBEYXRhUHJvcGVydHksIE5hdmlnYXRpb25Qcm9wZXJ0eSwgRW50aXR5UHJvcGVydHkgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcbmltcG9ydCB7IEVudGl0eUtleSB9IGZyb20gJy4vZW50aXR5LWtleSc7XHJcbmltcG9ydCB7IEVudGl0eUFzcGVjdCwgQ29tcGxleEFzcGVjdCwgRW50aXR5LCBTdHJ1Y3R1cmFsT2JqZWN0IH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5U3RhdGUgfSBmcm9tICcuL2VudGl0eS1zdGF0ZSc7XHJcbmltcG9ydCB7IEVudGl0eUFjdGlvbiB9IGZyb20gJy4vZW50aXR5LWFjdGlvbic7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5IH0gZnJvbSAnLi9lbnRpdHktcXVlcnknO1xyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0UHJvcGVydHlJbnRlcmNlcHRvcih0aGlzOiBTdHJ1Y3R1cmFsT2JqZWN0LCBwcm9wZXJ0eTogRW50aXR5UHJvcGVydHksIG5ld1ZhbHVlOiBhbnksIHJhd0FjY2Vzc29yRm46IEZ1bmN0aW9uKSB7XHJcbiAgLy8gJ3RoaXMnIGlzIHRoZSBlbnRpdHkgaXRzZWxmIGluIHRoaXMgY29udGV4dC5cclxuXHJcbiAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIG5ld1ZhbHVlID0gbnVsbDsgLy8gcmVtb3ZlPyB0byBhbGxvdyBhc3NpZ25tZW50IHRvIHVuZGVmaW5lZCBpbiBCYWJlbCBjb25zdHJ1Y3RvcnM/XHJcbiAgbGV0IG9sZFZhbHVlID0gcmF3QWNjZXNzb3JGbigpO1xyXG5cclxuICBsZXQgZGF0YVR5cGUgPSAocHJvcGVydHkgYXMgYW55KS5kYXRhVHlwZTtcclxuICBpZiAoZGF0YVR5cGUgJiYgZGF0YVR5cGUucGFyc2UpIHtcclxuICAgIC8vIGF0dGVtcHRzIHRvIGNvZXJjZSBhIHZhbHVlIHRvIHRoZSBjb3JyZWN0IHR5cGUgLSBpZiB0aGlzIGZhaWxzIHJldHVybiB0aGUgdmFsdWUgdW5jaGFuZ2VkXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiYgIXByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUubWFwKGZ1bmN0aW9uIChudikge1xyXG4gICAgICAgIHJldHVybiBkYXRhVHlwZS5wYXJzZShudiwgdHlwZW9mIG52KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdWYWx1ZSA9IGRhdGFUeXBlLnBhcnNlKG5ld1ZhbHVlLCB0eXBlb2YgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZXhpdCBpZiBubyBjaGFuZ2UgLSBleHRyYSBjcnVmdCBpcyBiZWNhdXNlIGRhdGVUaW1lcyBkb24ndCBjb21wYXJlIGNsZWFubHkuXHJcbiAgaWYgKG5ld1ZhbHVlID09PSBvbGRWYWx1ZSB8fCAobmV3VmFsdWUgPT09IG51bGwgJiYgb2xkVmFsdWUgPT09IHVuZGVmaW5lZCkgfHwgXHJcbiAgICAoZGF0YVR5cGUgJiYgZGF0YVR5cGUubm9ybWFsaXplICYmIG5ld1ZhbHVlICYmIG9sZFZhbHVlICYmIGRhdGFUeXBlLm5vcm1hbGl6ZShuZXdWYWx1ZSkgPT09IGRhdGFUeXBlLm5vcm1hbGl6ZShvbGRWYWx1ZSkpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyBDQU5OT1QgRE8gTkVYVCBMSU5FIGJlY2F1c2UgaXQgaGFzIHRoZSBwb3NzaWJpbGl0eSBvZiBjcmVhdGluZyBhIG5ldyBwcm9wZXJ0eVxyXG4gIC8vICdlbnRpdHlBc3BlY3QnIG9uICd0aGlzJy4gIC0gTm90IHBlcm1pdHRlZCBieSBJRSBpbnNpZGUgb2YgYSBkZWZpbmVkIHByb3BlcnR5IG9uIGEgcHJvdG90eXBlLlxyXG4gIC8vIGxldCBlbnRpdHlBc3BlY3QgPSBuZXcgRW50aXR5QXNwZWN0KHRoaXMpO1xyXG5cclxuICBsZXQgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgbGV0IGVudGl0eUFzcGVjdCA9ICh0aGlzIGFzIGFueSkuZW50aXR5QXNwZWN0IGFzIEVudGl0eUFzcGVjdDtcclxuICBpZiAoZW50aXR5QXNwZWN0KSB7XHJcbiAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS5uYW1lO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgbG9jYWxBc3BlY3QgPSAodGhpcyBhcyBhbnkpLmNvbXBsZXhBc3BlY3QgYXMgQ29tcGxleEFzcGVjdDtcclxuICAgIGlmIChsb2NhbEFzcGVjdCkge1xyXG4gICAgICBlbnRpdHlBc3BlY3QgPSBsb2NhbEFzcGVjdC5nZXRFbnRpdHlBc3BlY3QoKTtcclxuICAgICAgcHJvcGVydHlOYW1lID0gbG9jYWxBc3BlY3QuZ2V0UHJvcGVydHlQYXRoKHByb3BlcnR5Lm5hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZG9lcyBub3QgeWV0IGhhdmUgYW4gRW50aXR5QXNwZWN0IHNvIGp1c3Qgc2V0IHRoZSBwcm9wXHJcbiAgICAgIHJhd0FjY2Vzc29yRm4obmV3VmFsdWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBoYW5kbGUgbXVsdGlwbGUgcHJvcGVydGllcyBpbiBwcm9jZXNzLCBub3QganVzdCBvbmUgaW4gb3JkZXIgdG8gYXZvaWQgcmVjdXJzaW9uLlxyXG4gIC8vICggZXhjZXB0IGluIHRoZSBjYXNlIG9mIG51bGwgcHJvcGFnYXRpb24gd2l0aCBma3Mgd2hlcmUgbnVsbCAtPiAwIGluIHNvbWUgY2FzZXMuKVxyXG4gIC8vICh0aGlzIG1heSBub3QgYmUgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIG5ld1ZhbHVlID09PSBvbGRWYWx1ZSB0ZXN0IGFib3ZlKVxyXG4gIGxldCBpblByb2Nlc3MgPSBlbnRpdHlBc3BlY3QuX2luUHJvY2VzcyA9IGVudGl0eUFzcGVjdC5faW5Qcm9jZXNzIHx8IFtdO1xyXG4gIC8vIGNoZWNrIGZvciByZWN1cnNpb25cclxuICBpZiAoaW5Qcm9jZXNzLmluZGV4T2YocHJvcGVydHkpID49IDApIHJldHVybjtcclxuICBpblByb2Nlc3MucHVzaChwcm9wZXJ0eSk7XHJcblxyXG4gIHRyeSB7XHJcblxyXG4gICAgbGV0IGNvbnRleHQ6IElDb250ZXh0ID0ge1xyXG4gICAgICBwYXJlbnQ6IHRoaXMsXHJcbiAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eSxcclxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxyXG4gICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLFxyXG4gICAgICBlbnRpdHlBc3BlY3Q6IGVudGl0eUFzcGVjdFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoKHByb3BlcnR5IGFzIGFueSkuaXNDb21wbGV4UHJvcGVydHkpIHtcclxuICAgICAgc2V0RHBWYWx1ZUNvbXBsZXgoY29udGV4dCwgcmF3QWNjZXNzb3JGbik7XHJcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5LmlzRGF0YVByb3BlcnR5KSB7XHJcbiAgICAgIHNldERwVmFsdWVTaW1wbGUoY29udGV4dCwgcmF3QWNjZXNzb3JGbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXROcFZhbHVlKGNvbnRleHQsIHJhd0FjY2Vzc29yRm4pO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RDaGFuZ2VFdmVudHMoY29udGV4dCk7XHJcblxyXG4gIH0gZmluYWxseSB7XHJcbiAgICBpblByb2Nlc3MucG9wKCk7XHJcbiAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgSUNvbnRleHQge1xyXG4gIHBhcmVudDogU3RydWN0dXJhbE9iamVjdDtcclxuICBwcm9wZXJ0eTogRW50aXR5UHJvcGVydHk7XHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgZW50aXR5QXNwZWN0OiBFbnRpdHlBc3BlY3Q7XHJcbiAgb2xkVmFsdWU6IGFueTtcclxuICBuZXdWYWx1ZTogYW55O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXREcFZhbHVlU2ltcGxlKGNvbnRleHQ6IElDb250ZXh0LCByYXdBY2Nlc3NvckZuOiBhbnkpIHtcclxuICBsZXQgcGFyZW50ID0gY29udGV4dC5wYXJlbnQ7XHJcbiAgbGV0IHByb3BlcnR5ID0gY29udGV4dC5wcm9wZXJ0eSBhcyBEYXRhUHJvcGVydHk7XHJcbiAgbGV0IGVudGl0eUFzcGVjdCA9IGNvbnRleHQuZW50aXR5QXNwZWN0O1xyXG4gIGxldCBvbGRWYWx1ZSA9IGNvbnRleHQub2xkVmFsdWU7XHJcbiAgbGV0IG5ld1ZhbHVlID0gY29udGV4dC5uZXdWYWx1ZTtcclxuXHJcbiAgbGV0IGVudGl0eU1hbmFnZXIgPSBlbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlcjtcclxuXHJcbiAgaWYgKCFwcm9wZXJ0eS5pc1NjYWxhcikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm9uc2NhbGFyIGRhdGEgcHJvcGVydGllcyBhcmUgcmVhZG9ubHkgLSBpdGVtcyBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBidXQgdGhlIGNvbGxlY3Rpb24gbWF5IG5vdCBiZSBjaGFuZ2VkLlwiKTtcclxuICB9XHJcblxyXG4gIC8vIHN0b3JlIGFuIG9yaWdpbmFsIHZhbHVlIGZvciB0aGlzIHByb3BlcnR5IGlmIG5vdCBhbHJlYWR5IHNldFxyXG4gIGlmIChlbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNVbmNoYW5nZWRPck1vZGlmaWVkKCkpIHtcclxuICAgIGxldCBwcm9wTmFtZSA9IHByb3BlcnR5Lm5hbWU7XHJcbiAgICAvLyBsb2NhbEFzcGVjdCBpcyBub3QgdGhlIHNhbWUgYXMgZW50aXR5QXNwZWN0IGZvciBjb21wbGV4IHByb3BzXHJcbiAgICBsZXQgbG9jYWxBc3BlY3QgPSBFbnRpdHlBc3BlY3QuaXNFbnRpdHkocGFyZW50KSA/IHBhcmVudC5lbnRpdHlBc3BlY3QgOiBwYXJlbnQuY29tcGxleEFzcGVjdDtcclxuICAgIGlmIChsb2NhbEFzcGVjdC5vcmlnaW5hbFZhbHVlc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyBvdGhlcndpc2UgdGhpcyBlbnRyeSB3aWxsIGJlIHNraXBwZWQgZHVyaW5nIHNlcmlhbGl6YXRpb25cclxuICAgICAgbG9jYWxBc3BlY3Qub3JpZ2luYWxWYWx1ZXNbcHJvcE5hbWVdID0gb2xkVmFsdWUgIT09IHVuZGVmaW5lZCA/IG9sZFZhbHVlIDogcHJvcGVydHkuZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaWYgd2UgYXJlIGNoYW5naW5nIHRoZSBrZXkgdXBkYXRlIG91ciBpbnRlcm5hbCBlbnRpdHlHcm91cCBpbmRleGVzLlxyXG4gIGlmIChwcm9wZXJ0eS5pc1BhcnRPZktleSAmJiBlbnRpdHlNYW5hZ2VyICYmICFlbnRpdHlNYW5hZ2VyLmlzTG9hZGluZykge1xyXG4gICAgLy8gJ2VudGl0eVR5cGUnIG9uIHRoZSBuZXh0IGxpbmUgYmUgbnVsbCBmb3IgY29tcGxleCBwcm9wZXJ0aWVzIGJ1dCBpdCB3aWxsIG9ubHkgYmUgcmVmJ2Qgd2l0aGluIHRoaXNcclxuICAgIC8vIGZuIHdoZW4gdGhlIHByb3BlcnR5IGlzIHBhcnQgb2YgdGhlIGtleVxyXG4gICAgbGV0IGVudGl0eVR5cGUgPSAocGFyZW50IGFzIEVudGl0eSkuZW50aXR5VHlwZTtcclxuICAgIGxldCBrZXlQcm9wcyA9IGVudGl0eVR5cGUua2V5UHJvcGVydGllcztcclxuICAgIGxldCB2YWx1ZXMgPSBrZXlQcm9wcy5tYXAoZnVuY3Rpb24gKHApIHtcclxuICAgICAgaWYgKHAgPT09IHByb3BlcnR5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwYXJlbnQuZ2V0UHJvcGVydHkocC5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgbmV3S2V5ID0gbmV3IEVudGl0eUtleShlbnRpdHlUeXBlLCB2YWx1ZXMpO1xyXG4gICAgaWYgKGVudGl0eU1hbmFnZXIuZ2V0RW50aXR5QnlLZXkobmV3S2V5KSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBlbnRpdHkgd2l0aCB0aGlzIGtleSBpcyBhbHJlYWR5IGluIHRoZSBjYWNoZTogXCIgKyBuZXdLZXkudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgb2xkS2V5ID0gKHBhcmVudCBhcyBFbnRpdHkpLmVudGl0eUFzcGVjdC5nZXRLZXkoKTtcclxuICAgIGxldCBlZyA9IGVudGl0eU1hbmFnZXIuX2ZpbmRFbnRpdHlHcm91cChlbnRpdHlUeXBlKTtcclxuICAgIGVnLl9yZXBsYWNlS2V5KG9sZEtleSwgbmV3S2V5KTtcclxuICB9XHJcblxyXG4gIC8vIHByb2Nlc3MgcmVsYXRlZCB1cGRhdGVzICggdGhlIGludmVyc2UgcmVsYXRpb25zaGlwKSBmaXJzdCBzbyB0aGF0IGNvbGxlY3Rpb24gZHVwcyBjaGVjayB3b3JrcyBwcm9wZXJseS5cclxuICAvLyB1cGRhdGUgaW52ZXJzZSByZWxhdGlvbnNoaXBcclxuXHJcbiAgbGV0IHJlbGF0ZWROYXZQcm9wID0gcHJvcGVydHkucmVsYXRlZE5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuICBpZiAocmVsYXRlZE5hdlByb3AgJiYgZW50aXR5TWFuYWdlcikge1xyXG4gICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBma0RhdGFQcm9wZXJ0eTogMS0+bjogb3JkZXIgLT4gb3JkZXJEZXRhaWxzXHJcbiAgICAvLyBvcmRlckRldGFpbC5vcmRlcklkIDwtIG5ld09yZGVySWQgfHwgbnVsbFxyXG4gICAgLy8gICAgPT0+IG9yZGVyRGV0YWlsLm9yZGVyID0gbG9va3VwT3JkZXIobmV3T3JkZXJJZClcclxuICAgIC8vICAgID09PiAoc2VlIHNldCBuYXZQcm9wIGFib3ZlKVxyXG4gICAgLy8gICAgICAgYW5kXHJcbiAgICAvLyBFeGFtcGxlOiBiaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT4xOiBvcmRlciAtPiBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgIC8vIGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkIDwtIG5ld09yZGVySWQgfHwgbnVsbFxyXG4gICAgLy8gICAgPT0+IGludGVybmF0aW9uYWxPcmRlci5vcmRlciA9IGxvb2t1cE9yZGVyKG5ld09yZGVySWQpXHJcbiAgICAvLyAgICA9PT4gKHNlZSBzZXQgbmF2UHJvcCBhYm92ZSlcclxuXHJcbiAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBsZXQgcmVsYXRlZEVudGl0eTogRW50aXR5O1xyXG4gICAgICBsZXQga2V5OiBFbnRpdHlLZXk7XHJcbiAgICAgIGlmIChyZWxhdGVkTmF2UHJvcC5pbnZGb3JlaWduS2V5TmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gcHJvcGVydHkgaXMgcmVsYXRlZCBieSBmaWVsZCB3aGljaCBpcyBub3QgdGhlIFBLXHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgRW50aXR5UXVlcnkocmVsYXRlZE5hdlByb3AuZW50aXR5VHlwZS5kZWZhdWx0UmVzb3VyY2VOYW1lKS53aGVyZShyZWxhdGVkTmF2UHJvcC5pbnZGb3JlaWduS2V5TmFtZXNbMF0sICdlcScsIG5ld1ZhbHVlKTtcclxuICAgICAgICBjb25zdCBxcmVzdWx0ID0gZW50aXR5TWFuYWdlci5leGVjdXRlUXVlcnlMb2NhbGx5KHF1ZXJ5KTtcclxuICAgICAgICBpZiAocXJlc3VsdC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHJlbGF0ZWRFbnRpdHkgPSBxcmVzdWx0WzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBwcm9wZXJ0eSBpcyByZWxhdGVkIGJ5IHRoZSBQS1xyXG4gICAgICAgIGtleSA9IG5ldyBFbnRpdHlLZXkocmVsYXRlZE5hdlByb3AuZW50aXR5VHlwZSwgW25ld1ZhbHVlXSk7XHJcbiAgICAgICAgcmVsYXRlZEVudGl0eSA9IGVudGl0eU1hbmFnZXIuZ2V0RW50aXR5QnlLZXkoa2V5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlbGF0ZWRFbnRpdHkpIHtcclxuICAgICAgICBwYXJlbnQuc2V0UHJvcGVydHkocmVsYXRlZE5hdlByb3AubmFtZSwgcmVsYXRlZEVudGl0eSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gaXQgbWF5IG5vdCBoYXZlIGJlZW4gZmV0Y2hlZCB5ZXQgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGFkZCBpdCBhcyBhbiB1bmF0dGFjaGVkQ2hpbGQuXHJcbiAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgLy8gVE9ETyBjdXJyZW50bHkgX2xpbmtSZWxhdGVkZW50aXRpZXMgb25seSB3b3JrcyB3aXRoIFBLIHJlbGF0aW9ucywgc28gd2Ugb25seSBhZGQgdGhvc2UuXHJcbiAgICAgICAgICBlbnRpdHlNYW5hZ2VyLl91bmF0dGFjaGVkQ2hpbGRyZW5NYXAuYWRkQ2hpbGQoa2V5LCByZWxhdGVkTmF2UHJvcCwgcGFyZW50IGFzIEVudGl0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhcmVudC5zZXRQcm9wZXJ0eShyZWxhdGVkTmF2UHJvcC5uYW1lLCBudWxsKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyZW50LnNldFByb3BlcnR5KHJlbGF0ZWROYXZQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocHJvcGVydHkuaW52ZXJzZU5hdmlnYXRpb25Qcm9wZXJ0eSAmJiBlbnRpdHlNYW5hZ2VyICYmICFlbnRpdHlNYW5hZ2VyLl9pbktleUZpeHVwKSB7XHJcbiAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBma0RhdGFQcm9wZXJ0eTogMS0+bjogcmVnaW9uIC0+IHRlcnJpdG9yaWVzXHJcbiAgICAvLyB0ZXJyaXRvcnkucmVnaW9uSWQgPC0gbmV3UmVnaW9uSWRcclxuICAgIC8vICAgID09PiBsb29rdXBSZWdpb24obmV3UmVnaW9uSWQpLnRlcnJpdG9yaWVzLnB1c2godGVycml0b3J5KVxyXG4gICAgLy8gICAgICAgICAgICAgICAgYW5kXHJcbiAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBma0RhdGFQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAvLyBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXJJZCA8LSBuZXdPcmRlcklkXHJcbiAgICAvLyAgICA9PT4gbG9va3VwT3JkZXIobmV3T3JkZXJJZCkuaW50ZXJuYXRpb25hbE9yZGVyID0gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAvLyAgICAgICAgICAgICAgICBhbmRcclxuICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT5uOiByZWdpb24gLT4gdGVycml0b3JpZXNcclxuICAgIC8vIHRlcnJpdG9yeS5yZWdpb25JZCA8LSBudWxsXHJcbiAgICAvLyAgICA9PT4gbG9va3VwUmVnaW9uKHRlcnJpdG9yeS5vbGRSZWdpb25JZCkudGVycml0b3JpZXMucmVtb3ZlKG9sZFRlcnJpdG9yeSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICBhbmRcclxuICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT4xOiBvcmRlciAtPiBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgIC8vIGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkIDwtIG51bGxcclxuICAgIC8vICAgID09PiBsb29rdXBPcmRlcihpbnRlcm5hdGlvbmFsT3JkZXIub2xkT3JkZXJJZCkuaW50ZXJuYXRpb25hbE9yZGVyID0gbnVsbDtcclxuXHJcbiAgICBsZXQgaW52TmF2UHJvcCA9IHByb3BlcnR5LmludmVyc2VOYXZpZ2F0aW9uUHJvcGVydHk7XHJcblxyXG4gICAgaWYgKG9sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgbGV0IGtleSA9IG5ldyBFbnRpdHlLZXkoaW52TmF2UHJvcC5wYXJlbnRUeXBlLCBbb2xkVmFsdWVdKTtcclxuICAgICAgbGV0IHJlbGF0ZWRFbnRpdHkgPSBlbnRpdHlNYW5hZ2VyLmdldEVudGl0eUJ5S2V5KGtleSk7XHJcbiAgICAgIGlmIChyZWxhdGVkRW50aXR5KSB7XHJcbiAgICAgICAgaWYgKGludk5hdlByb3AuaXNTY2FsYXIpIHtcclxuICAgICAgICAgIHJlbGF0ZWRFbnRpdHkuc2V0UHJvcGVydHkoaW52TmF2UHJvcC5uYW1lLCBudWxsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gcmVtb3ZlICd0aGlzJyBmcm9tIG9sZCByZWxhdGVkIG5hdiBwcm9wXHJcbiAgICAgICAgICBsZXQgcmVsYXRlZEFycmF5ID0gcmVsYXRlZEVudGl0eS5nZXRQcm9wZXJ0eShpbnZOYXZQcm9wLm5hbWUpO1xyXG4gICAgICAgICAgLy8gYXJyLnNwbGljZShhcnIuaW5kZXhPZih2YWx1ZV90b19yZW1vdmUpLCAxKTtcclxuICAgICAgICAgIHJlbGF0ZWRBcnJheS5zcGxpY2UocmVsYXRlZEFycmF5LmluZGV4T2YocGFyZW50KSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgbGV0IGtleSA9IG5ldyBFbnRpdHlLZXkoaW52TmF2UHJvcC5wYXJlbnRUeXBlLCBbbmV3VmFsdWVdKTtcclxuICAgICAgbGV0IHJlbGF0ZWRFbnRpdHkgPSBlbnRpdHlNYW5hZ2VyLmdldEVudGl0eUJ5S2V5KGtleSk7XHJcblxyXG4gICAgICBpZiAocmVsYXRlZEVudGl0eSkge1xyXG4gICAgICAgIGlmIChpbnZOYXZQcm9wLmlzU2NhbGFyKSB7XHJcbiAgICAgICAgICByZWxhdGVkRW50aXR5LnNldFByb3BlcnR5KGludk5hdlByb3AubmFtZSwgcGFyZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVsYXRlZEVudGl0eS5nZXRQcm9wZXJ0eShpbnZOYXZQcm9wLm5hbWUpLnB1c2gocGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gaXQgbWF5IG5vdCBoYXZlIGJlZW4gZmV0Y2hlZCB5ZXQgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGFkZCBpdCBhcyBhbiB1bmF0dGFjaGVkQ2hpbGQuXHJcbiAgICAgICAgZW50aXR5TWFuYWdlci5fdW5hdHRhY2hlZENoaWxkcmVuTWFwLmFkZENoaWxkKGtleSwgaW52TmF2UHJvcCwgcGFyZW50IGFzIEVudGl0eSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICByYXdBY2Nlc3NvckZuKG5ld1ZhbHVlKTtcclxuXHJcbiAgdXBkYXRlU3RhdGVBbmRWYWxpZGF0ZShjb250ZXh0KTtcclxuXHJcbiAgLy8gaWYgKHByb3BlcnR5LmlzUGFydE9mS2V5ICYmICghdGhpcy5jb21wbGV4QXNwZWN0KSkge1xyXG4gIGlmIChwcm9wZXJ0eS5pc1BhcnRPZktleSkge1xyXG4gICAgLy8gcHJvcG9nYXRlIHBrIGNoYW5nZSB0byBhbGwgcmVsYXRlZCBlbnRpdGllcztcclxuICAgIGxldCBlbnRpdHlUeXBlID0gKHBhcmVudCBhcyBFbnRpdHkpLmVudGl0eVR5cGU7XHJcbiAgICBsZXQgcHJvcGVydHlJeCA9IGVudGl0eVR5cGUua2V5UHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KTtcclxuICAgIC8vIHRoaXMgcGFydCBoYW5kbGVzIG9yZGVyLm9yZGVySWQgPT4gb3JkZXJEZXRhaWwub3JkZXJJZFxyXG4gICAgLy8gYnV0IHdvbid0IGhhbmRsZSBwcm9kdWN0LnByb2R1Y3RJZCA9PiBvcmRlckRldGFpbC5wcm9kdWN0SWQgYmVjYXVzZSBwcm9kdWN0XHJcbiAgICAvLyBkb2Vzbid0IGhhdmUgYW4gb3JkZXJEZXRhaWxzIHByb3BlcnR5LlxyXG4gICAgZW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChucCkge1xyXG4gICAgICBsZXQgaW52ZXJzZU5wID0gbnAuaW52ZXJzZTtcclxuICAgICAgbGV0IGZrTmFtZXMgPSBpbnZlcnNlTnAgPyBpbnZlcnNlTnAuZm9yZWlnbktleU5hbWVzIDogbnAuaW52Rm9yZWlnbktleU5hbWVzO1xyXG5cclxuICAgICAgaWYgKGZrTmFtZXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgIGxldCBucFZhbHVlID0gcGFyZW50LmdldFByb3BlcnR5KG5wLm5hbWUpO1xyXG4gICAgICBpZiAoIW5wVmFsdWUpIHJldHVybjtcclxuICAgICAgbGV0IGZrTmFtZSA9IGZrTmFtZXNbcHJvcGVydHlJeF07XHJcbiAgICAgIGlmIChucC5pc1NjYWxhcikge1xyXG4gICAgICAgIG5wVmFsdWUuc2V0UHJvcGVydHkoZmtOYW1lLCBuZXdWYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbnBWYWx1ZS5zbGljZSgwKS5mb3JFYWNoKGZ1bmN0aW9uIChpdjogYW55KSB7XHJcbiAgICAgICAgICBpdi5zZXRQcm9wZXJ0eShma05hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzIGhhbmRsZXMgdW5pZGlyZWN0aW9uYWwgcHJvYmxlbXMgbm90IGNvdmVyZWQgYWJvdmUuXHJcbiAgICBpZiAoZW50aXR5TWFuYWdlcikge1xyXG4gICAgICBsZXQgaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzID0gZW50aXR5VHlwZS5pbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXM7XHJcbiAgICAgIGxldCBiYXNlRW50aXR5VHlwZSA9IGVudGl0eVR5cGUuYmFzZUVudGl0eVR5cGU7XHJcbiAgICAgIHdoaWxlIChiYXNlRW50aXR5VHlwZSkge1xyXG4gICAgICAgIGludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcyA9IGludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcy5jb25jYXQoYmFzZUVudGl0eVR5cGUuaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzKTtcclxuICAgICAgICBiYXNlRW50aXR5VHlwZSA9IGJhc2VFbnRpdHlUeXBlLmJhc2VFbnRpdHlUeXBlO1xyXG4gICAgICB9XHJcbiAgICAgIGludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcy5mb3JFYWNoKChpbnZGa1Byb3ApID0+IHtcclxuICAgICAgICBpZiAoaW52RmtQcm9wLnJlbGF0ZWROYXZpZ2F0aW9uUHJvcGVydHkhLmludmVyc2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gdGhpcyBuZXh0IHN0ZXAgbWF5IGJlIHNsb3cgLSBpdCBpdGVyYXRlcyBvdmVyIGFsbCBvZiB0aGUgZW50aXRpZXMgaW4gYSBncm91cDtcclxuICAgICAgICAgIC8vIGhvcGVmdWxseSBpdCBkb2Vzbid0IGhhcHBlbiBvZnRlbi5cclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIhLl91cGRhdGVGa1ZhbChpbnZGa1Byb3AsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbnN1cmUgdGhhdCBjYWNoZWQga2V5IGlzIHVwZGF0ZWQuXHJcbiAgICBlbnRpdHlBc3BlY3QuZ2V0S2V5KHRydWUpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2V0RHBWYWx1ZUNvbXBsZXgoY29udGV4dDogSUNvbnRleHQsIHJhd0FjY2Vzc29yRm46IEZ1bmN0aW9uKSB7XHJcbiAgbGV0IHByb3BlcnR5ID0gY29udGV4dC5wcm9wZXJ0eSBhcyBEYXRhUHJvcGVydHk7XHJcbiAgbGV0IG9sZFZhbHVlID0gY29udGV4dC5vbGRWYWx1ZTtcclxuICBsZXQgbmV3VmFsdWUgPSBjb250ZXh0Lm5ld1ZhbHVlO1xyXG5cclxuICAvLyBUbyBnZXQgaGVyZSBpdCBtdXN0IGJlIGEgQ29tcGxleFByb3BlcnR5XHJcbiAgLy8gJ2RhdGFUeXBlJyB3aWxsIGJlIGEgY29tcGxleFR5cGVcclxuICBsZXQgZGF0YVR5cGUgPSBwcm9wZXJ0eS5kYXRhVHlwZSBhcyBDb21wbGV4VHlwZTtcclxuICBpZiAocHJvcGVydHkuaXNTY2FsYXIpIHtcclxuICAgIGlmICghbmV3VmFsdWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGNvcmUuZm9ybWF0U3RyaW5nKFwiWW91IGNhbm5vdCBzZXQgdGhlICclMScgcHJvcGVydHkgdG8gbnVsbCBiZWNhdXNlIGl0J3MgZGF0YXR5cGUgaXMgdGhlIENvbXBsZXhUeXBlOiAnJTInXCIsIHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5LmRhdGFUeXBlLm5hbWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW9sZFZhbHVlKSB7XHJcbiAgICAgIGxldCBjdG9yID0gZGF0YVR5cGUuZ2V0Q3RvcigpO1xyXG4gICAgICBvbGRWYWx1ZSA9IG5ldyBjdG9yKCk7XHJcbiAgICAgIHJhd0FjY2Vzc29yRm4ob2xkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZGF0YVR5cGUuZGF0YVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoZHApIHtcclxuICAgICAgbGV0IHBuID0gZHAubmFtZTtcclxuICAgICAgbGV0IG52ID0gbmV3VmFsdWUuZ2V0UHJvcGVydHkocG4pO1xyXG4gICAgICBvbGRWYWx1ZS5zZXRQcm9wZXJ0eShwbiwgbnYpO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihjb3JlLmZvcm1hdFN0cmluZyhcIllvdSBjYW5ub3Qgc2V0IHRoZSBub24tc2NhbGFyIGNvbXBsZXggcHJvcGVydHk6ICclMScgb24gdGhlIHR5cGU6ICclMicuXCIgK1xyXG4gICAgICAgICAgICBcIkluc3RlYWQgZ2V0IHRoZSBwcm9wZXJ0eSBhbmQgdXNlIGFycmF5IGZ1bmN0aW9ucyBsaWtlICdwdXNoJyBvciAnc3BsaWNlJyB0byBjaGFuZ2UgaXRzIGNvbnRlbnRzLlwiLFxyXG4gICAgICAgIHByb3BlcnR5Lm5hbWUsIHByb3BlcnR5LnBhcmVudFR5cGUubmFtZSkpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIHNldE5wVmFsdWUoY29udGV4dDogSUNvbnRleHQsIHJhd0FjY2Vzc29yRm46IEZ1bmN0aW9uKSB7XHJcblxyXG4gIGxldCBwYXJlbnQgPSBjb250ZXh0LnBhcmVudCBhcyBFbnRpdHk7XHJcbiAgbGV0IHByb3BlcnR5ID0gY29udGV4dC5wcm9wZXJ0eSBhcyBOYXZpZ2F0aW9uUHJvcGVydHk7XHJcbiAgbGV0IGVudGl0eUFzcGVjdCA9IGNvbnRleHQuZW50aXR5QXNwZWN0O1xyXG4gIGxldCBvbGRWYWx1ZSA9IGNvbnRleHQub2xkVmFsdWU7XHJcbiAgbGV0IG5ld1ZhbHVlID0gY29udGV4dC5uZXdWYWx1ZTtcclxuXHJcbiAgaWYgKCFwcm9wZXJ0eS5pc1NjYWxhcikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm9uc2NhbGFyIG5hdmlnYXRpb24gcHJvcGVydGllcyBhcmUgcmVhZG9ubHkgLSBlbnRpdGllcyBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBidXQgdGhlIGNvbGxlY3Rpb24gbWF5IG5vdCBiZSBjaGFuZ2VkLlwiKTtcclxuICB9XHJcblxyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gZW50aXR5QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgbGV0IGludmVyc2VQcm9wID0gcHJvcGVydHkuaW52ZXJzZTtcclxuXHJcbiAgLy8gbWFuYWdlIGF0dGFjaG1lbnQgLVxyXG4gIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICBpZiAoIW5ld1ZhbHVlLmVudGl0eUFzcGVjdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3QXNwZWN0ID0gbmV3VmFsdWUuZW50aXR5QXNwZWN0O1xyXG4gICAgaWYgKGVudGl0eU1hbmFnZXIpIHtcclxuICAgICAgaWYgKG5ld0FzcGVjdC5lbnRpdHlTdGF0ZS5pc0RldGFjaGVkKCkpIHtcclxuICAgICAgICBpZiAoIWVudGl0eU1hbmFnZXIuaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICBlbnRpdHlNYW5hZ2VyLmF0dGFjaEVudGl0eShuZXdWYWx1ZSwgRW50aXR5U3RhdGUuQWRkZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAobmV3QXNwZWN0LmVudGl0eU1hbmFnZXIgIT09IGVudGl0eU1hbmFnZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIEVudGl0eSBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gYW4gZW50aXR5IGluIGFub3RoZXIgRW50aXR5TWFuYWdlci4gT25lIG9mIHRoZSB0d28gZW50aXRpZXMgbXVzdCBiZSBkZXRhY2hlZCBmaXJzdC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobmV3QXNwZWN0ICYmIG5ld0FzcGVjdC5lbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAgICAgZW50aXR5TWFuYWdlciA9IG5ld0FzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG4gICAgICAgIGlmICghZW50aXR5TWFuYWdlciEuaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICBlbnRpdHlNYW5hZ2VyIS5hdHRhY2hFbnRpdHkoZW50aXR5QXNwZWN0LmVudGl0eSEsIEVudGl0eVN0YXRlLkFkZGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHByb2Nlc3MgcmVsYXRlZCB1cGRhdGVzICggdGhlIGludmVyc2UgcmVsYXRpb25zaGlwKSBmaXJzdCBzbyB0aGF0IGNvbGxlY3Rpb24gZHVwcyBjaGVjayB3b3JrcyBwcm9wZXJseS5cclxuICAvLyB1cGRhdGUgaW52ZXJzZSByZWxhdGlvbnNoaXBcclxuICBpZiAoaW52ZXJzZVByb3ApIHtcclxuICAgIC8vL1xyXG4gICAgaWYgKGludmVyc2VQcm9wLmlzU2NhbGFyKSB7XHJcbiAgICAgIC8vIEV4YW1wbGU6IGJpZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgICAvLyBvcmRlci5pbnRlcm5hdGlvbmFsT3JkZXIgPC0gaW50ZXJuYXRpb25hbE9yZGVyIHx8IG51bGxcclxuICAgICAgLy8gICAgPT0+IChvbGRJbnRlcm5hdGlvbmFsT3JkZXIub3JkZXIgPSBudWxsKVxyXG4gICAgICAvLyAgICA9PT4gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVyID0gb3JkZXJcclxuICAgICAgaWYgKG9sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAvLyBUT0RPOiBudWxsIC0+IE51bGxFbnRpdHkgbGF0ZXJcclxuICAgICAgICBvbGRWYWx1ZS5zZXRQcm9wZXJ0eShpbnZlcnNlUHJvcC5uYW1lLCBudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIG5ld1ZhbHVlLnNldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUsIHBhcmVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEV4YW1wbGU6IGJpZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPm46IG9yZGVyIC0+IG9yZGVyRGV0YWlsc1xyXG4gICAgICAvLyBvcmRlckRldGFpbC5vcmRlciA8LSBuZXdPcmRlciB8fCBudWxsXHJcbiAgICAgIC8vICAgID09PiAob2xkT3JkZXIpLm9yZGVyRGV0YWlscy5yZW1vdmUob3JkZXJEZXRhaWwpXHJcbiAgICAgIC8vICAgID09PiBvcmRlci5vcmRlckRldGFpbHMucHVzaChuZXdPcmRlcilcclxuICAgICAgaWYgKG9sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBsZXQgb2xkU2libGluZ3MgPSBvbGRWYWx1ZS5nZXRQcm9wZXJ0eShpbnZlcnNlUHJvcC5uYW1lKTtcclxuICAgICAgICBsZXQgaXggPSBvbGRTaWJsaW5ncy5pbmRleE9mKHBhcmVudCk7XHJcbiAgICAgICAgaWYgKGl4ICE9PSAtMSkge1xyXG4gICAgICAgICAgb2xkU2libGluZ3Muc3BsaWNlKGl4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBsZXQgc2libGluZ3MgPSBuZXdWYWx1ZS5nZXRQcm9wZXJ0eShpbnZlcnNlUHJvcC5uYW1lKTtcclxuICAgICAgICAvLyByZWN1cnNpb24gY2hlY2sgaWYgYWxyZWFkeSBpbiB0aGUgY29sbGVjdGlvbiBpcyBwZXJmb3JtZWQgYnkgdGhlIHJlbGF0aW9uQXJyYXlcclxuICAgICAgICBzaWJsaW5ncy5wdXNoKHBhcmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHByb3BlcnR5LmludkZvcmVpZ25LZXlOYW1lcyAmJiBlbnRpdHlNYW5hZ2VyICYmICFlbnRpdHlNYW5hZ2VyLl9pbktleUZpeHVwKSB7XHJcbiAgICBsZXQgaW52Rm9yZWlnbktleU5hbWVzID0gcHJvcGVydHkuaW52Rm9yZWlnbktleU5hbWVzO1xyXG4gICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgICAvLyBvcmRlci5JbnRlcm5hdGlvbmFsT3JkZXIgPC0gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAgIC8vICAgID09PiBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXJJZCA9IG9yZGVySWRcclxuICAgICAgLy8gICAgICBhbmRcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPm46IG9yZGVyIC0+IG9yZGVyRGV0YWlsc1xyXG4gICAgICAvLyBvcmRlckRldGFpbC5vcmRlciA8LXh4eCBuZXdPcmRlclxyXG4gICAgICAvLyAgICA9PT4gQ0FOJ1QgSEFQUEVOIGJlY2F1c2UgaWYgdW5pZGlyZWN0aW9uYWwgYmVjYXVzZSBvcmRlckRldGFpbCB3aWxsIG5vdCBoYXZlIGFuIG9yZGVyIHByb3BcclxuICAgICAgbGV0IHBrVmFsdWVzID0gcGFyZW50LmVudGl0eUFzcGVjdC5nZXRLZXkoKS52YWx1ZXM7XHJcbiAgICAgIGludkZvcmVpZ25LZXlOYW1lcy5mb3JFYWNoKCAoZmtOYW1lLCBpKSA9PiB7XHJcbiAgICAgICAgbmV3VmFsdWUhLnNldFByb3BlcnR5KGZrTmFtZSwgcGtWYWx1ZXNbaV0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIG5hdlByb3BlcnR5OiAxLT4xOiBvcmRlciAtPiBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgICAgLy8gb3JkZXIuaW50ZXJuYXRpb25hbE9yZGVyIDwtIG51bGxcclxuICAgICAgLy8gICAgPT0+IChvbGQgaW50ZXJuYXRpb25hbE9yZGVyKS5vcmRlcklkID0gbnVsbFxyXG4gICAgICAvLyAgICAgICAgYW5kXHJcbiAgICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIG5hdlByb3BlcnR5OiAxLT5uOiBvcmRlciAtPiBvcmRlckRldGFpbHNcclxuICAgICAgLy8gb3JkZXJEZXRhaWwub3JkZXIgPC14eHggbmV3T3JkZXJcclxuICAgICAgLy8gICAgPT0+IENBTidUIEhBUFBFTiBiZWNhdXNlIGlmIHVuaWRpcmVjdGlvbmFsIGJlY2F1c2Ugb3JkZXJEZXRhaWwgd2lsbCBub3QgaGF2ZSBhbiBvcmRlciBwcm9wXHJcbiAgICAgIGlmIChvbGRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaW52Rm9yZWlnbktleU5hbWVzLmZvckVhY2goIChma05hbWUpID0+IHtcclxuICAgICAgICAgIGxldCBma1Byb3AgPSBvbGRWYWx1ZS5lbnRpdHlUeXBlLmdldFByb3BlcnR5KGZrTmFtZSk7XHJcbiAgICAgICAgICBpZiAoIWZrUHJvcC5pc1BhcnRPZktleSkge1xyXG4gICAgICAgICAgICAvLyBkb24ndCB1cGRhdGUgd2l0aCBudWxsIGlmIGZrIGlzIHBhcnQgb2YgdGhlIGtleVxyXG4gICAgICAgICAgICBvbGRWYWx1ZS5zZXRQcm9wZXJ0eShma05hbWUsIG51bGwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYXdBY2Nlc3NvckZuKG5ld1ZhbHVlKTtcclxuXHJcbiAgdXBkYXRlU3RhdGVBbmRWYWxpZGF0ZShjb250ZXh0KTtcclxuXHJcbiAgLy8gdXBkYXRlIGZrIGRhdGEgcHJvcGVydHkgLSB0aGlzIGNhbiBvbmx5IG9jY3VyIGlmIHRoaXMgbmF2UHJvcGVydHkgaGFzXHJcbiAgLy8gYSBjb3JyZXNwb25kaW5nIGZrIG9uIHRoaXMgZW50aXR5LlxyXG4gIGlmIChwcm9wZXJ0eS5yZWxhdGVkRGF0YVByb3BlcnRpZXMpIHtcclxuICAgIGxldCBlbnRpdHlTdGF0ZSA9IGVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICAgIC8vIGlmIGVpdGhlciBzaWRlIG9mIG5hdiBwcm9wIGlzIGRldGFjaGVkIGRvbid0IGNsZWFyIGZrcy4gTm90ZTogb2xkVmFsdWUgaW4gbmV4dCBsaW5lIGNhbm5vdCBiZSBudWxsIHNvIG5vIGNoZWNrIGlzIG5lZWRlZC5cclxuICAgIGlmIChuZXdWYWx1ZSA9PSBudWxsICYmIChlbnRpdHlTdGF0ZS5pc0RldGFjaGVkKCkgfHwgb2xkVmFsdWUuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSkpIHJldHVybjtcclxuICAgIGlmIChlbnRpdHlTdGF0ZS5pc0RlbGV0ZWQoKSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIHdlIG1heSBoYXZlIGludmVyc2UgcHJvcHMgaW5kaWNhdGluZyB0aGUgcmVsYXRlZCBwcm9wIG9uIHRoZSBvdGhlciBlbnRpdHksIGlmIGl0IGlzIG5vdCB0aGUgb3RoZXIgZW50aXR5J3MgUEtcclxuICAgIGxldCBpbnZlcnNlS2V5UHJvcHMgPSBwcm9wZXJ0eS5pbnZGb3JlaWduS2V5TmFtZXM7XHJcbiAgICBpZiAoIShpbnZlcnNlS2V5UHJvcHMgJiYgaW52ZXJzZUtleVByb3BzLmxlbmd0aCkpIHtcclxuICAgICAgLy8gb3RoZXJ3aXNlLCB0aGlzIHByb3AgaXMgcmVsYXRlZCB0byB0aGUgb3RoZXIgZW50aXR5J3MgUEtcclxuICAgICAgaW52ZXJzZUtleVByb3BzID0gcHJvcGVydHkuZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzLm1hcChrID0+IGsubmFtZSk7XHJcbiAgICB9XHJcbiAgICBpbnZlcnNlS2V5UHJvcHMuZm9yRWFjaChmdW5jdGlvbiAoa2V5UHJvcCwgaSkge1xyXG4gICAgICBsZXQgcmVsYXRlZERhdGFQcm9wID0gcHJvcGVydHkucmVsYXRlZERhdGFQcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAvLyBEbyBub3QgdHJhc2ggcmVsYXRlZCBwcm9wZXJ0eSBpZiBpdCBpcyBwYXJ0IG9mIHRoYXQgZW50aXR5J3Mga2V5XHJcbiAgICAgIGlmIChuZXdWYWx1ZSB8fCAhcmVsYXRlZERhdGFQcm9wLmlzUGFydE9mS2V5KSB7XHJcbiAgICAgICAgbGV0IHJlbGF0ZWRWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuZ2V0UHJvcGVydHkoa2V5UHJvcCkgOiByZWxhdGVkRGF0YVByb3AuZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIHBhcmVudC5zZXRQcm9wZXJ0eShyZWxhdGVkRGF0YVByb3AubmFtZSwgcmVsYXRlZFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwb3N0Q2hhbmdlRXZlbnRzKGNvbnRleHQ6IElDb250ZXh0KSB7XHJcbiAgbGV0IGVudGl0eUFzcGVjdCA9IGNvbnRleHQuZW50aXR5QXNwZWN0O1xyXG5cclxuICBsZXQgZW50aXR5TWFuYWdlciA9IGVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG4gIGxldCBlbnRpdHkgPSBlbnRpdHlBc3BlY3QuZW50aXR5O1xyXG5cclxuICBsZXQgcHJvcENoYW5nZWRBcmdzID0geyBlbnRpdHk6IGVudGl0eSEsIHBhcmVudDogY29udGV4dC5wYXJlbnQsIHByb3BlcnR5OiBjb250ZXh0LnByb3BlcnR5LCBwcm9wZXJ0eU5hbWU6IGNvbnRleHQucHJvcGVydHlOYW1lLCBvbGRWYWx1ZTogY29udGV4dC5vbGRWYWx1ZSwgbmV3VmFsdWU6IGNvbnRleHQubmV3VmFsdWUgfTtcclxuICBpZiAoZW50aXR5TWFuYWdlcikge1xyXG4gICAgLy8gcHJvcGVydHlDaGFuZ2VkIHdpbGwgYmUgZmlyZWQgZHVyaW5nIGxvYWRpbmcgYnV0IHdlIG9ubHkgd2FudCB0byBmaXJlIGl0IG9uY2UgcGVyIGVudGl0eSwgbm90IG9uY2UgcGVyIHByb3BlcnR5LlxyXG4gICAgLy8gc28gcHJvcGVydHlDaGFuZ2VkIGlzIGZpcmVkIGluIHRoZSBlbnRpdHlNYW5hZ2VyIG1lcmdlRW50aXR5IG1ldGhvZCBpZiBub3QgZmlyZWQgaGVyZS5cclxuICAgIGlmICgoIWVudGl0eU1hbmFnZXIuaXNMb2FkaW5nKSAmJiAoIWVudGl0eU1hbmFnZXIuaXNSZWplY3RpbmdDaGFuZ2VzKSkge1xyXG4gICAgICBlbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkLnB1Ymxpc2gocHJvcENoYW5nZWRBcmdzKTtcclxuICAgICAgLy8gZG9uJ3QgZmlyZSBlbnRpdHlDaGFuZ2VkIGV2ZW50IGlmIHByb3BlcnR5Q2hhbmdlZCBpcyBzdXBwcmVzc2VkLlxyXG4gICAgICBlbnRpdHlNYW5hZ2VyLmVudGl0eUNoYW5nZWQucHVibGlzaCh7IGVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLlByb3BlcnR5Q2hhbmdlLCBlbnRpdHk6IGVudGl0eSwgYXJnczogcHJvcENoYW5nZWRBcmdzIH0pO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBlbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkLnB1Ymxpc2gocHJvcENoYW5nZWRBcmdzKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlQW5kVmFsaWRhdGUoY29udGV4dDogSUNvbnRleHQpIHtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcbiAgbGV0IGVudGl0eU1hbmFnZXIgPSBlbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlcjtcclxuICBpZiAoZW50aXR5TWFuYWdlciA9PSBudWxsIHx8IGVudGl0eU1hbmFnZXIuaXNMb2FkaW5nKSByZXR1cm47XHJcbiAgbGV0IHByb3BlcnR5ID0gY29udGV4dC5wcm9wZXJ0eTtcclxuXHJcbiAgaWYgKGVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZS5pc1VuY2hhbmdlZCgpICYmICFwcm9wZXJ0eS5pc1VubWFwcGVkKSB7XHJcbiAgICBlbnRpdHlBc3BlY3Quc2V0TW9kaWZpZWQoKTtcclxuICB9XHJcblxyXG4gIGlmIChlbnRpdHlNYW5hZ2VyLnZhbGlkYXRpb25PcHRpb25zLnZhbGlkYXRlT25Qcm9wZXJ0eUNoYW5nZSkge1xyXG4gICAgLy8gZW50aXR5QXNwZWN0LmVudGl0eSBpcyBOT1QgdGhlIHNhbWUgYXMgcGFyZW50IGluIHRoZSBjb2RlIGJlbG93LiBJdCdzIHVzZSBpcyBkZWxpYmVyYXRlLlxyXG4gICAgZW50aXR5QXNwZWN0Ll92YWxpZGF0ZVByb3BlcnR5KGNvbnRleHQubmV3VmFsdWUsXHJcbiAgICAgICAgeyBlbnRpdHk6IGVudGl0eUFzcGVjdC5lbnRpdHksIHByb3BlcnR5OiBwcm9wZXJ0eSwgcHJvcGVydHlOYW1lOiBjb250ZXh0LnByb3BlcnR5TmFtZSwgb2xkVmFsdWU6IGNvbnRleHQub2xkVmFsdWUgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1wcm9wZXJ0eS1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWZhdWx0LXByb3BlcnR5LWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUEyQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLHdCQUF3QjtBQUN4QixNQUFNLFVBQVUsMEJBQTBCLENBQXlCLFFBQXdCLEVBQUUsUUFBYSxFQUFFLGFBQXVCO0lBQ2pJLCtDQUErQztJQUUvQyxJQUFJLFFBQVEsS0FBSyxTQUFTO1FBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLGtFQUFrRTtJQUMvRyxJQUFJLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUUvQixJQUFJLFFBQVEsR0FBSSxRQUFnQixDQUFDLFFBQVEsQ0FBQztJQUMxQyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQzlCLDRGQUE0RjtRQUM1RixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ2pELFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtnQkFDbEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLFFB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LEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7S0FDMUg7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IENvbXBsZXhUeXBlLCBEYXRhUHJvcGVydHksIE5hdmlnYXRpb25Qcm9wZXJ0eSwgRW50aXR5UHJvcGVydHkgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcbmltcG9ydCB7IEVudGl0eUtleSB9IGZyb20gJy4vZW50aXR5LWtleSc7XHJcbmltcG9ydCB7IEVudGl0eUFzcGVjdCwgQ29tcGxleEFzcGVjdCwgRW50aXR5LCBTdHJ1Y3R1cmFsT2JqZWN0IH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5U3RhdGUgfSBmcm9tICcuL2VudGl0eS1zdGF0ZSc7XHJcbmltcG9ydCB7IEVudGl0eUFjdGlvbiB9IGZyb20gJy4vZW50aXR5LWFjdGlvbic7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5IH0gZnJvbSAnLi9lbnRpdHktcXVlcnknO1xyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0UHJvcGVydHlJbnRlcmNlcHRvcih0aGlzOiBTdHJ1Y3R1cmFsT2JqZWN0LCBwcm9wZXJ0eTogRW50aXR5UHJvcGVydHksIG5ld1ZhbHVlOiBhbnksIHJhd0FjY2Vzc29yRm46IEZ1bmN0aW9uKSB7XHJcbiAgLy8gJ3RoaXMnIGlzIHRoZSBlbnRpdHkgaXRzZWxmIGluIHRoaXMgY29udGV4dC5cclxuXHJcbiAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIG5ld1ZhbHVlID0gbnVsbDsgLy8gcmVtb3ZlPyB0byBhbGxvdyBhc3NpZ25tZW50IHRvIHVuZGVmaW5lZCBpbiBCYWJlbCBjb25zdHJ1Y3RvcnM/XHJcbiAgbGV0IG9sZFZhbHVlID0gcmF3QWNjZXNzb3JGbigpO1xyXG5cclxuICBsZXQgZGF0YVR5cGUgPSAocHJvcGVydHkgYXMgYW55KS5kYXRhVHlwZTtcclxuICBpZiAoZGF0YVR5cGUgJiYgZGF0YVR5cGUucGFyc2UpIHtcclxuICAgIC8vIGF0dGVtcHRzIHRvIGNvZXJjZSBhIHZhbHVlIHRvIHRoZSBjb3JyZWN0IHR5cGUgLSBpZiB0aGlzIGZhaWxzIHJldHVybiB0aGUgdmFsdWUgdW5jaGFuZ2VkXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiYgIXByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUubWFwKGZ1bmN0aW9uIChudikge1xyXG4gICAgICAgIHJldHVybiBkYXRhVHlwZS5wYXJzZShudiwgdHlwZW9mIG52KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdWYWx1ZSA9IGRhdGFUeXBlLnBhcnNlKG5ld1ZhbHVlLCB0eXBlb2YgbmV3VmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZXhpdCBpZiBubyBjaGFuZ2UgLSBleHRyYSBjcnVmdCBpcyBiZWNhdXNlIGRhdGVUaW1lcyBkb24ndCBjb21wYXJlIGNsZWFubHkuXHJcbiAgaWYgKG5ld1ZhbHVlID09PSBvbGRWYWx1ZSB8fCAobmV3VmFsdWUgPT09IG51bGwgJiYgb2xkVmFsdWUgPT09IHVuZGVmaW5lZCkgfHwgXHJcbiAgICAoZGF0YVR5cGUgJiYgZGF0YVR5cGUubm9ybWFsaXplICYmIG5ld1ZhbHVlICYmIG9sZFZhbHVlICYmIGRhdGFUeXBlLm5vcm1hbGl6ZShuZXdWYWx1ZSkgPT09IGRhdGFUeXBlLm5vcm1hbGl6ZShvbGRWYWx1ZSkpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyBDQU5OT1QgRE8gTkVYVCBMSU5FIGJlY2F1c2UgaXQgaGFzIHRoZSBwb3NzaWJpbGl0eSBvZiBjcmVhdGluZyBhIG5ldyBwcm9wZXJ0eVxyXG4gIC8vICdlbnRpdHlBc3BlY3QnIG9uICd0aGlzJy4gIC0gTm90IHBlcm1pdHRlZCBieSBJRSBpbnNpZGUgb2YgYSBkZWZpbmVkIHByb3BlcnR5IG9uIGEgcHJvdG90eXBlLlxyXG4gIC8vIGxldCBlbnRpdHlBc3BlY3QgPSBuZXcgRW50aXR5QXNwZWN0KHRoaXMpO1xyXG5cclxuICBsZXQgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgbGV0IGVudGl0eUFzcGVjdCA9ICh0aGlzIGFzIGFueSkuZW50aXR5QXNwZWN0IGFzIEVudGl0eUFzcGVjdDtcclxuICBpZiAoZW50aXR5QXNwZWN0KSB7XHJcbiAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS5uYW1lO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgbG9jYWxBc3BlY3QgPSAodGhpcyBhcyBhbnkpLmNvbXBsZXhBc3BlY3QgYXMgQ29tcGxleEFzcGVjdDtcclxuICAgIGlmIChsb2NhbEFzcGVjdCkge1xyXG4gICAgICBlbnRpdHlBc3BlY3QgPSBsb2NhbEFzcGVjdC5nZXRFbnRpdHlBc3BlY3QoKTtcclxuICAgICAgcHJvcGVydHlOYW1lID0gbG9jYWxBc3BlY3QuZ2V0UHJvcGVydHlQYXRoKHByb3BlcnR5Lm5hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZG9lcyBub3QgeWV0IGhhdmUgYW4gRW50aXR5QXNwZWN0IHNvIGp1c3Qgc2V0IHRoZSBwcm9wXHJcbiAgICAgIHJhd0FjY2Vzc29yRm4obmV3VmFsdWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBoYW5kbGUgbXVsdGlwbGUgcHJvcGVydGllcyBpbiBwcm9jZXNzLCBub3QganVzdCBvbmUgaW4gb3JkZXIgdG8gYXZvaWQgcmVjdXJzaW9uLlxyXG4gIC8vICggZXhjZXB0IGluIHRoZSBjYXNlIG9mIG51bGwgcHJvcGFnYXRpb24gd2l0aCBma3Mgd2hlcmUgbnVsbCAtPiAwIGluIHNvbWUgY2FzZXMuKVxyXG4gIC8vICh0aGlzIG1heSBub3QgYmUgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIG5ld1ZhbHVlID09PSBvbGRWYWx1ZSB0ZXN0IGFib3ZlKVxyXG4gIGxldCBpblByb2Nlc3MgPSBlbnRpdHlBc3BlY3QuX2luUHJvY2VzcyA9IGVudGl0eUFzcGVjdC5faW5Qcm9jZXNzIHx8IFtdO1xyXG4gIC8vIGNoZWNrIGZvciByZWN1cnNpb25cclxuICBpZiAoaW5Qcm9jZXNzLmluZGV4T2YocHJvcGVydHkpID49IDApIHJldHVybjtcclxuICBpblByb2Nlc3MucHVzaChwcm9wZXJ0eSk7XHJcblxyXG4gIHRyeSB7XHJcblxyXG4gICAgbGV0IGNvbnRleHQ6IElDb250ZXh0ID0ge1xyXG4gICAgICBwYXJlbnQ6IHRoaXMsXHJcbiAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eSxcclxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxyXG4gICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXHJcbiAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLFxyXG4gICAgICBlbnRpdHlBc3BlY3Q6IGVudGl0eUFzcGVjdFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoKHByb3BlcnR5IGFzIGFueSkuaXNDb21wbGV4UHJvcGVydHkpIHtcclxuICAgICAgc2V0RHBWYWx1ZUNvbXBsZXgoY29udGV4dCwgcmF3QWNjZXNzb3JGbik7XHJcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5LmlzRGF0YVByb3BlcnR5KSB7XHJcbiAgICAgIHNldERwVmFsdWVTaW1wbGUoY29udGV4dCwgcmF3QWNjZXNzb3JGbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXROcFZhbHVlKGNvbnRleHQsIHJhd0FjY2Vzc29yRm4pO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RDaGFuZ2VFdmVudHMoY29udGV4dCk7XHJcblxyXG4gIH0gZmluYWxseSB7XHJcbiAgICBpblByb2Nlc3MucG9wKCk7XHJcbiAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgSUNvbnRleHQge1xyXG4gIHBhcmVudDogU3RydWN0dXJhbE9iamVjdDtcclxuICBwcm9wZXJ0eTogRW50aXR5UHJvcGVydHk7XHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgZW50aXR5QXNwZWN0OiBFbnRpdHlBc3BlY3Q7XHJcbiAgb2xkVmFsdWU6IGFueTtcclxuICBuZXdWYWx1ZTogYW55O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXREcFZhbHVlU2ltcGxlKGNvbnRleHQ6IElDb250ZXh0LCByYXdBY2Nlc3NvckZuOiBhbnkpIHtcclxuICBsZXQgcGFyZW50ID0gY29udGV4dC5wYXJlbnQ7XHJcbiAgbGV0IHByb3BlcnR5ID0gY29udGV4dC5wcm9wZXJ0eSBhcyBEYXRhUHJvcGVydHk7XHJcbiAgbGV0IGVudGl0eUFzcGVjdCA9IGNvbnRleHQuZW50aXR5QXNwZWN0O1xyXG4gIGxldCBvbGRWYWx1ZSA9IGNvbnRleHQub2xkVmFsdWU7XHJcbiAgbGV0IG5ld1ZhbHVlID0gY29udGV4dC5uZXdWYWx1ZTtcclxuXHJcbiAgbGV0IGVudGl0eU1hbmFnZXIgPSBlbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlcjtcclxuXHJcbiAgaWYgKCFwcm9wZXJ0eS5pc1NjYWxhcikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm9uc2NhbGFyIGRhdGEgcHJvcGVydGllcyBhcmUgcmVhZG9ubHkgLSBpdGVtcyBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBidXQgdGhlIGNvbGxlY3Rpb24gbWF5IG5vdCBiZSBjaGFuZ2VkLlwiKTtcclxuICB9XHJcblxyXG4gIC8vIHN0b3JlIGFuIG9yaWdpbmFsIHZhbHVlIGZvciB0aGlzIHByb3BlcnR5IGlmIG5vdCBhbHJlYWR5IHNldFxyXG4gIGlmIChlbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNVbmNoYW5nZWRPck1vZGlmaWVkKCkpIHtcclxuICAgIGxldCBwcm9wTmFtZSA9IHByb3BlcnR5Lm5hbWU7XHJcbiAgICAvLyBsb2NhbEFzcGVjdCBpcyBub3QgdGhlIHNhbWUgYXMgZW50aXR5QXNwZWN0IGZvciBjb21wbGV4IHByb3BzXHJcbiAgICBsZXQgbG9jYWxBc3BlY3QgPSBFbnRpdHlBc3BlY3QuaXNFbnRpdHkocGFyZW50KSA/IHBhcmVudC5lbnRpdHlBc3BlY3QgOiBwYXJlbnQuY29tcGxleEFzcGVjdDtcclxuICAgIGlmIChsb2NhbEFzcGVjdC5vcmlnaW5hbFZhbHVlc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyBvdGhlcndpc2UgdGhpcyBlbnRyeSB3aWxsIGJlIHNraXBwZWQgZHVyaW5nIHNlcmlhbGl6YXRpb25cclxuICAgICAgbG9jYWxBc3BlY3Qub3JpZ2luYWxWYWx1ZXNbcHJvcE5hbWVdID0gb2xkVmFsdWUgIT09IHVuZGVmaW5lZCA/IG9sZFZhbHVlIDogcHJvcGVydHkuZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaWYgd2UgYXJlIGNoYW5naW5nIHRoZSBrZXkgdXBkYXRlIG91ciBpbnRlcm5hbCBlbnRpdHlHcm91cCBpbmRleGVzLlxyXG4gIGlmIChwcm9wZXJ0eS5pc1BhcnRPZktleSAmJiBlbnRpdHlNYW5hZ2VyICYmICFlbnRpdHlNYW5hZ2VyLmlzTG9hZGluZykge1xyXG4gICAgLy8gJ2VudGl0eVR5cGUnIG9uIHRoZSBuZXh0IGxpbmUgYmUgbnVsbCBmb3IgY29tcGxleCBwcm9wZXJ0aWVzIGJ1dCBpdCB3aWxsIG9ubHkgYmUgcmVmJ2Qgd2l0aGluIHRoaXNcclxuICAgIC8vIGZuIHdoZW4gdGhlIHByb3BlcnR5IGlzIHBhcnQgb2YgdGhlIGtleVxyXG4gICAgbGV0IGVudGl0eVR5cGUgPSAocGFyZW50IGFzIEVudGl0eSkuZW50aXR5VHlwZTtcclxuICAgIGxldCBrZXlQcm9wcyA9IGVudGl0eVR5cGUua2V5UHJvcGVydGllcztcclxuICAgIGxldCB2YWx1ZXMgPSBrZXlQcm9wcy5tYXAoZnVuY3Rpb24gKHApIHtcclxuICAgICAgaWYgKHAgPT09IHByb3BlcnR5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwYXJlbnQuZ2V0UHJvcGVydHkocC5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgbmV3S2V5ID0gbmV3IEVudGl0eUtleShlbnRpdHlUeXBlLCB2YWx1ZXMpO1xyXG4gICAgaWYgKGVudGl0eU1hbmFnZXIuZ2V0RW50aXR5QnlLZXkobmV3S2V5KSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbiBlbnRpdHkgd2l0aCB0aGlzIGtleSBpcyBhbHJlYWR5IGluIHRoZSBjYWNoZTogXCIgKyBuZXdLZXkudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgb2xkS2V5ID0gKHBhcmVudCBhcyBFbnRpdHkpLmVudGl0eUFzcGVjdC5nZXRLZXkoKTtcclxuICAgIGxldCBlZyA9IGVudGl0eU1hbmFnZXIuX2ZpbmRFbnRpdHlHcm91cChlbnRpdHlUeXBlKTtcclxuICAgIGVnLl9yZXBsYWNlS2V5KG9sZEtleSwgbmV3S2V5KTtcclxuICB9XHJcblxyXG4gIC8vIHByb2Nlc3MgcmVsYXRlZCB1cGRhdGVzICggdGhlIGludmVyc2UgcmVsYXRpb25zaGlwKSBmaXJzdCBzbyB0aGF0IGNvbGxlY3Rpb24gZHVwcyBjaGVjayB3b3JrcyBwcm9wZXJseS5cclxuICAvLyB1cGRhdGUgaW52ZXJzZSByZWxhdGlvbnNoaXBcclxuXHJcbiAgbGV0IHJlbGF0ZWROYXZQcm9wID0gcHJvcGVydHkucmVsYXRlZE5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuICBpZiAocmVsYXRlZE5hdlByb3AgJiYgZW50aXR5TWFuYWdlcikge1xyXG4gICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBma0RhdGFQcm9wZXJ0eTogMS0+bjogb3JkZXIgLT4gb3JkZXJEZXRhaWxzXHJcbiAgICAvLyBvcmRlckRldGFpbC5vcmRlcklkIDwtIG5ld09yZGVySWQgfHwgbnVsbFxyXG4gICAgLy8gICAgPT0+IG9yZGVyRGV0YWlsLm9yZGVyID0gbG9va3VwT3JkZXIobmV3T3JkZXJJZClcclxuICAgIC8vICAgID09PiAoc2VlIHNldCBuYXZQcm9wIGFib3ZlKVxyXG4gICAgLy8gICAgICAgYW5kXHJcbiAgICAvLyBFeGFtcGxlOiBiaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT4xOiBvcmRlciAtPiBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgIC8vIGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkIDwtIG5ld09yZGVySWQgfHwgbnVsbFxyXG4gICAgLy8gICAgPT0+IGludGVybmF0aW9uYWxPcmRlci5vcmRlciA9IGxvb2t1cE9yZGVyKG5ld09yZGVySWQpXHJcbiAgICAvLyAgICA9PT4gKHNlZSBzZXQgbmF2UHJvcCBhYm92ZSlcclxuXHJcbiAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBsZXQgcmVsYXRlZEVudGl0eTogRW50aXR5O1xyXG4gICAgICBsZXQga2V5OiBFbnRpdHlLZXk7XHJcbiAgICAgIGlmIChyZWxhdGVkTmF2UHJvcC5pbnZGb3JlaWduS2V5TmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gcHJvcGVydHkgaXMgcmVsYXRlZCBieSBmaWVsZCB3aGljaCBpcyBub3QgdGhlIFBLXHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgRW50aXR5UXVlcnkocmVsYXRlZE5hdlByb3AuZW50aXR5VHlwZS5kZWZhdWx0UmVzb3VyY2VOYW1lKS53aGVyZShyZWxhdGVkTmF2UHJvcC5pbnZGb3JlaWduS2V5TmFtZXNbMF0sICdlcScsIG5ld1ZhbHVlKTtcclxuICAgICAgICBjb25zdCBxcmVzdWx0ID0gZW50aXR5TWFuYWdlci5leGVjdXRlUXVlcnlMb2NhbGx5KHF1ZXJ5KTtcclxuICAgICAgICBpZiAocXJlc3VsdC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHJlbGF0ZWRFbnRpdHkgPSBxcmVzdWx0WzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBwcm9wZXJ0eSBpcyByZWxhdGVkIGJ5IHRoZSBQS1xyXG4gICAgICAgIGtleSA9IG5ldyBFbnRpdHlLZXkocmVsYXRlZE5hdlByb3AuZW50aXR5VHlwZSwgW25ld1ZhbHVlXSk7XHJcbiAgICAgICAgcmVsYXRlZEVudGl0eSA9IGVudGl0eU1hbmFnZXIuZ2V0RW50aXR5QnlLZXkoa2V5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlbGF0ZWRFbnRpdHkpIHtcclxuICAgICAgICBwYXJlbnQuc2V0UHJvcGVydHkocmVsYXRlZE5hdlByb3AubmFtZSwgcmVsYXRlZEVudGl0eSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gaXQgbWF5IG5vdCBoYXZlIGJlZW4gZmV0Y2hlZCB5ZXQgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGFkZCBpdCBhcyBhbiB1bmF0dGFjaGVkQ2hpbGQuXHJcbiAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgLy8gVE9ETyBjdXJyZW50bHkgX2xpbmtSZWxhdGVkZW50aXRpZXMgb25seSB3b3JrcyB3aXRoIFBLIHJlbGF0aW9ucywgc28gd2Ugb25seSBhZGQgdGhvc2UuXHJcbiAgICAgICAgICBlbnRpdHlNYW5hZ2VyLl91bmF0dGFjaGVkQ2hpbGRyZW5NYXAuYWRkQ2hpbGQoa2V5LCByZWxhdGVkTmF2UHJvcCwgcGFyZW50IGFzIEVudGl0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhcmVudC5zZXRQcm9wZXJ0eShyZWxhdGVkTmF2UHJvcC5uYW1lLCBudWxsKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyZW50LnNldFByb3BlcnR5KHJlbGF0ZWROYXZQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocHJvcGVydHkuaW52ZXJzZU5hdmlnYXRpb25Qcm9wZXJ0eSAmJiBlbnRpdHlNYW5hZ2VyICYmICFlbnRpdHlNYW5hZ2VyLl9pbktleUZpeHVwKSB7XHJcbiAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBma0RhdGFQcm9wZXJ0eTogMS0+bjogcmVnaW9uIC0+IHRlcnJpdG9yaWVzXHJcbiAgICAvLyB0ZXJyaXRvcnkucmVnaW9uSWQgPC0gbmV3UmVnaW9uSWRcclxuICAgIC8vICAgID09PiBsb29rdXBSZWdpb24obmV3UmVnaW9uSWQpLnRlcnJpdG9yaWVzLnB1c2godGVycml0b3J5KVxyXG4gICAgLy8gICAgICAgICAgICAgICAgYW5kXHJcbiAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBma0RhdGFQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAvLyBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXJJZCA8LSBuZXdPcmRlcklkXHJcbiAgICAvLyAgICA9PT4gbG9va3VwT3JkZXIobmV3T3JkZXJJZCkuaW50ZXJuYXRpb25hbE9yZGVyID0gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAvLyAgICAgICAgICAgICAgICBhbmRcclxuICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT5uOiByZWdpb24gLT4gdGVycml0b3JpZXNcclxuICAgIC8vIHRlcnJpdG9yeS5yZWdpb25JZCA8LSBudWxsXHJcbiAgICAvLyAgICA9PT4gbG9va3VwUmVnaW9uKHRlcnJpdG9yeS5vbGRSZWdpb25JZCkudGVycml0b3JpZXMucmVtb3ZlKG9sZFRlcnJpdG9yeSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICBhbmRcclxuICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT4xOiBvcmRlciAtPiBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgIC8vIGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkIDwtIG51bGxcclxuICAgIC8vICAgID09PiBsb29rdXBPcmRlcihpbnRlcm5hdGlvbmFsT3JkZXIub2xkT3JkZXJJZCkuaW50ZXJuYXRpb25hbE9yZGVyID0gbnVsbDtcclxuXHJcbiAgICBsZXQgaW52TmF2UHJvcCA9IHByb3BlcnR5LmludmVyc2VOYXZpZ2F0aW9uUHJvcGVydHk7XHJcblxyXG4gICAgaWYgKG9sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgbGV0IGtleSA9IG5ldyBFbnRpdHlLZXkoaW52TmF2UHJvcC5wYXJlbnRUeXBlLCBbb2xkVmFsdWVdKTtcclxuICAgICAgbGV0IHJlbGF0ZWRFbnRpdHkgPSBlbnRpdHlNYW5hZ2VyLmdldEVudGl0eUJ5S2V5KGtleSk7XHJcbiAgICAgIGlmIChyZWxhdGVkRW50aXR5KSB7XHJcbiAgICAgICAgaWYgKGludk5hdlByb3AuaXNTY2FsYXIpIHtcclxuICAgICAgICAgIHJlbGF0ZWRFbnRpdHkuc2V0UHJvcGVydHkoaW52TmF2UHJvcC5uYW1lLCBudWxsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gcmVtb3ZlICd0aGlzJyBmcm9tIG9sZCByZWxhdGVkIG5hdiBwcm9wXHJcbiAgICAgICAgICBsZXQgcmVsYXRlZEFycmF5ID0gcmVsYXRlZEVudGl0eS5nZXRQcm9wZXJ0eShpbnZOYXZQcm9wLm5hbWUpO1xyXG4gICAgICAgICAgLy8gYXJyLnNwbGljZShhcnIuaW5kZXhPZih2YWx1ZV90b19yZW1vdmUpLCAxKTtcclxuICAgICAgICAgIHJlbGF0ZWRBcnJheS5zcGxpY2UocmVsYXRlZEFycmF5LmluZGV4T2YocGFyZW50KSwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgbGV0IGtleSA9IG5ldyBFbnRpdHlLZXkoaW52TmF2UHJvcC5wYXJlbnRUeXBlLCBbbmV3VmFsdWVdKTtcclxuICAgICAgbGV0IHJlbGF0ZWRFbnRpdHkgPSBlbnRpdHlNYW5hZ2VyLmdldEVudGl0eUJ5S2V5KGtleSk7XHJcblxyXG4gICAgICBpZiAocmVsYXRlZEVudGl0eSkge1xyXG4gICAgICAgIGlmIChpbnZOYXZQcm9wLmlzU2NhbGFyKSB7XHJcbiAgICAgICAgICByZWxhdGVkRW50aXR5LnNldFByb3BlcnR5KGludk5hdlByb3AubmFtZSwgcGFyZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVsYXRlZEVudGl0eS5nZXRQcm9wZXJ0eShpbnZOYXZQcm9wLm5hbWUpLnB1c2gocGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gaXQgbWF5IG5vdCBoYXZlIGJlZW4gZmV0Y2hlZCB5ZXQgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGFkZCBpdCBhcyBhbiB1bmF0dGFjaGVkQ2hpbGQuXHJcbiAgICAgICAgZW50aXR5TWFuYWdlci5fdW5hdHRhY2hlZENoaWxkcmVuTWFwLmFkZENoaWxkKGtleSwgaW52TmF2UHJvcCwgcGFyZW50IGFzIEVudGl0eSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICByYXdBY2Nlc3NvckZuKG5ld1ZhbHVlKTtcclxuXHJcbiAgdXBkYXRlU3RhdGVBbmRWYWxpZGF0ZShjb250ZXh0KTtcclxuXHJcbiAgLy8gaWYgKHByb3BlcnR5LmlzUGFydE9mS2V5ICYmICghdGhpcy5jb21wbGV4QXNwZWN0KSkge1xyXG4gIGlmIChwcm9wZXJ0eS5pc1BhcnRPZktleSkge1xyXG4gICAgLy8gcHJvcG9nYXRlIHBrIGNoYW5nZSB0byBhbGwgcmVsYXRlZCBlbnRpdGllcztcclxuICAgIGxldCBlbnRpdHlUeXBlID0gKHBhcmVudCBhcyBFbnRpdHkpLmVudGl0eVR5cGU7XHJcbiAgICBsZXQgcHJvcGVydHlJeCA9IGVudGl0eVR5cGUua2V5UHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KTtcclxuICAgIC8vIHRoaXMgcGFydCBoYW5kbGVzIG9yZGVyLm9yZGVySWQgPT4gb3JkZXJEZXRhaWwub3JkZXJJZFxyXG4gICAgLy8gYnV0IHdvbid0IGhhbmRsZSBwcm9kdWN0LnByb2R1Y3RJZCA9PiBvcmRlckRldGFpbC5wcm9kdWN0SWQgYmVjYXVzZSBwcm9kdWN0XHJcbiAgICAvLyBkb2Vzbid0IGhhdmUgYW4gb3JkZXJEZXRhaWxzIHByb3BlcnR5LlxyXG4gICAgZW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChucCkge1xyXG4gICAgICBsZXQgaW52ZXJzZU5wID0gbnAuaW52ZXJzZTtcclxuICAgICAgbGV0IGZrTmFtZXMgPSBpbnZlcnNlTnAgPyBpbnZlcnNlTnAuZm9yZWlnbktleU5hbWVzIDogbnAuaW52Rm9yZWlnbktleU5hbWVzO1xyXG5cclxuICAgICAgaWYgKGZrTmFtZXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgIGxldCBucFZhbHVlID0gcGFyZW50LmdldFByb3BlcnR5KG5wLm5hbWUpO1xyXG4gICAgICBpZiAoIW5wVmFsdWUpIHJldHVybjtcclxuICAgICAgbGV0IGZrTmFtZSA9IGZrTmFtZXNbcHJvcGVydHlJeF07XHJcbiAgICAgIGlmIChucC5pc1NjYWxhcikge1xyXG4gICAgICAgIG5wVmFsdWUuc2V0UHJvcGVydHkoZmtOYW1lLCBuZXdWYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbnBWYWx1ZS5zbGljZSgwKS5mb3JFYWNoKGZ1bmN0aW9uIChpdjogYW55KSB7XHJcbiAgICAgICAgICBpdi5zZXRQcm9wZXJ0eShma05hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzIGhhbmRsZXMgdW5pZGlyZWN0aW9uYWwgcHJvYmxlbXMgbm90IGNvdmVyZWQgYWJvdmUuXHJcbiAgICBpZiAoZW50aXR5TWFuYWdlcikge1xyXG4gICAgICBsZXQgaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzID0gZW50aXR5VHlwZS5pbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXM7XHJcbiAgICAgIGxldCBiYXNlRW50aXR5VHlwZSA9IGVudGl0eVR5cGUuYmFzZUVudGl0eVR5cGU7XHJcbiAgICAgIHdoaWxlIChiYXNlRW50aXR5VHlwZSkge1xyXG4gICAgICAgIGludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcyA9IGludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcy5jb25jYXQoYmFzZUVudGl0eVR5cGUuaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzKTtcclxuICAgICAgICBiYXNlRW50aXR5VHlwZSA9IGJhc2VFbnRpdHlUeXBlLmJhc2VFbnRpdHlUeXBlO1xyXG4gICAgICB9XHJcbiAgICAgIGludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcy5mb3JFYWNoKChpbnZGa1Byb3ApID0+IHtcclxuICAgICAgICBpZiAoaW52RmtQcm9wLnJlbGF0ZWROYXZpZ2F0aW9uUHJvcGVydHkhLmludmVyc2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gdGhpcyBuZXh0IHN0ZXAgbWF5IGJlIHNsb3cgLSBpdCBpdGVyYXRlcyBvdmVyIGFsbCBvZiB0aGUgZW50aXRpZXMgaW4gYSBncm91cDtcclxuICAgICAgICAgIC8vIGhvcGVmdWxseSBpdCBkb2Vzbid0IGhhcHBlbiBvZnRlbi5cclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIhLl91cGRhdGVGa1ZhbChpbnZGa1Byb3AsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbnN1cmUgdGhhdCBjYWNoZWQga2V5IGlzIHVwZGF0ZWQuXHJcbiAgICBlbnRpdHlBc3BlY3QuZ2V0S2V5KHRydWUpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2V0RHBWYWx1ZUNvbXBsZXgoY29udGV4dDogSUNvbnRleHQsIHJhd0FjY2Vzc29yRm46IEZ1bmN0aW9uKSB7XHJcbiAgbGV0IHByb3BlcnR5ID0gY29udGV4dC5wcm9wZXJ0eSBhcyBEYXRhUHJvcGVydHk7XHJcbiAgbGV0IG9sZFZhbHVlID0gY29udGV4dC5vbGRWYWx1ZTtcclxuICBsZXQgbmV3VmFsdWUgPSBjb250ZXh0Lm5ld1ZhbHVlO1xyXG5cclxuICAvLyBUbyBnZXQgaGVyZSBpdCBtdXN0IGJlIGEgQ29tcGxleFByb3BlcnR5XHJcbiAgLy8gJ2RhdGFUeXBlJyB3aWxsIGJlIGEgY29tcGxleFR5cGVcclxuICBsZXQgZGF0YVR5cGUgPSBwcm9wZXJ0eS5kYXRhVHlwZSBhcyBDb21wbGV4VHlwZTtcclxuICBpZiAocHJvcGVydHkuaXNTY2FsYXIpIHtcclxuICAgIGlmICghbmV3VmFsdWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGNvcmUuZm9ybWF0U3RyaW5nKFwiWW91IGNhbm5vdCBzZXQgdGhlICclMScgcHJvcGVydHkgdG8gbnVsbCBiZWNhdXNlIGl0cyBkYXRhdHlwZSBpcyB0aGUgQ29tcGxleFR5cGU6ICclMidcIiwgcHJvcGVydHkubmFtZSwgcHJvcGVydHkuZGF0YVR5cGUubmFtZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb2xkVmFsdWUpIHtcclxuICAgICAgbGV0IGN0b3IgPSBkYXRhVHlwZS5nZXRDdG9yKCk7XHJcbiAgICAgIG9sZFZhbHVlID0gbmV3IGN0b3IoKTtcclxuICAgICAgcmF3QWNjZXNzb3JGbihvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBkYXRhVHlwZS5kYXRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICBsZXQgcG4gPSBkcC5uYW1lO1xyXG4gICAgICBsZXQgbnYgPSBuZXdWYWx1ZS5nZXRQcm9wZXJ0eShwbik7XHJcbiAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KHBuLCBudik7XHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGNvcmUuZm9ybWF0U3RyaW5nKFwiWW91IGNhbm5vdCBzZXQgdGhlIG5vbi1zY2FsYXIgY29tcGxleCBwcm9wZXJ0eTogJyUxJyBvbiB0aGUgdHlwZTogJyUyJy5cIiArXHJcbiAgICAgICAgICAgIFwiSW5zdGVhZCBnZXQgdGhlIHByb3BlcnR5IGFuZCB1c2UgYXJyYXkgZnVuY3Rpb25zIGxpa2UgJ3B1c2gnIG9yICdzcGxpY2UnIHRvIGNoYW5nZSBpdHMgY29udGVudHMuXCIsXHJcbiAgICAgICAgcHJvcGVydHkubmFtZSwgcHJvcGVydHkucGFyZW50VHlwZS5uYW1lKSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gc2V0TnBWYWx1ZShjb250ZXh0OiBJQ29udGV4dCwgcmF3QWNjZXNzb3JGbjogRnVuY3Rpb24pIHtcclxuXHJcbiAgbGV0IHBhcmVudCA9IGNvbnRleHQucGFyZW50IGFzIEVudGl0eTtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcbiAgbGV0IG9sZFZhbHVlID0gY29udGV4dC5vbGRWYWx1ZTtcclxuICBsZXQgbmV3VmFsdWUgPSBjb250ZXh0Lm5ld1ZhbHVlO1xyXG5cclxuICBpZiAoIXByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb25zY2FsYXIgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSAtIGVudGl0aWVzIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGJ1dCB0aGUgY29sbGVjdGlvbiBtYXkgbm90IGJlIGNoYW5nZWQuXCIpO1xyXG4gIH1cclxuXHJcbiAgbGV0IGVudGl0eU1hbmFnZXIgPSBlbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlcjtcclxuICBsZXQgaW52ZXJzZVByb3AgPSBwcm9wZXJ0eS5pbnZlcnNlO1xyXG5cclxuICAvLyBtYW5hZ2UgYXR0YWNobWVudCAtXHJcbiAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgIGlmICghbmV3VmFsdWUuZW50aXR5QXNwZWN0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBuZXdBc3BlY3QgPSBuZXdWYWx1ZS5lbnRpdHlBc3BlY3Q7XHJcbiAgICBpZiAoZW50aXR5TWFuYWdlcikge1xyXG4gICAgICBpZiAobmV3QXNwZWN0LmVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSkge1xyXG4gICAgICAgIGlmICghZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpIHtcclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIuYXR0YWNoRW50aXR5KG5ld1ZhbHVlLCBFbnRpdHlTdGF0ZS5BZGRlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChuZXdBc3BlY3QuZW50aXR5TWFuYWdlciAhPT0gZW50aXR5TWFuYWdlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gRW50aXR5IGNhbm5vdCBiZSBhdHRhY2hlZCB0byBhbiBlbnRpdHkgaW4gYW5vdGhlciBFbnRpdHlNYW5hZ2VyLiBPbmUgb2YgdGhlIHR3byBlbnRpdGllcyBtdXN0IGJlIGRldGFjaGVkIGZpcnN0LlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChuZXdBc3BlY3QgJiYgbmV3QXNwZWN0LmVudGl0eU1hbmFnZXIpIHtcclxuICAgICAgICBlbnRpdHlNYW5hZ2VyID0gbmV3QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgICAgICAgaWYgKCFlbnRpdHlNYW5hZ2VyIS5pc0xvYWRpbmcpIHtcclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIhLmF0dGFjaEVudGl0eShlbnRpdHlBc3BlY3QuZW50aXR5ISwgRW50aXR5U3RhdGUuQWRkZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJvY2VzcyByZWxhdGVkIHVwZGF0ZXMgKCB0aGUgaW52ZXJzZSByZWxhdGlvbnNoaXApIGZpcnN0IHNvIHRoYXQgY29sbGVjdGlvbiBkdXBzIGNoZWNrIHdvcmtzIHByb3Blcmx5LlxyXG4gIC8vIHVwZGF0ZSBpbnZlcnNlIHJlbGF0aW9uc2hpcFxyXG4gIGlmIChpbnZlcnNlUHJvcCkge1xyXG4gICAgLy8vXHJcbiAgICBpZiAoaW52ZXJzZVByb3AuaXNTY2FsYXIpIHtcclxuICAgICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAgIC8vIG9yZGVyLmludGVybmF0aW9uYWxPcmRlciA8LSBpbnRlcm5hdGlvbmFsT3JkZXIgfHwgbnVsbFxyXG4gICAgICAvLyAgICA9PT4gKG9sZEludGVybmF0aW9uYWxPcmRlci5vcmRlciA9IG51bGwpXHJcbiAgICAgIC8vICAgID09PiBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXIgPSBvcmRlclxyXG4gICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vIFRPRE86IG51bGwgLT4gTnVsbEVudGl0eSBsYXRlclxyXG4gICAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgbmV3VmFsdWUuc2V0UHJvcGVydHkoaW52ZXJzZVByb3AubmFtZSwgcGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+bjogb3JkZXIgLT4gb3JkZXJEZXRhaWxzXHJcbiAgICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVyIDwtIG5ld09yZGVyIHx8IG51bGxcclxuICAgICAgLy8gICAgPT0+IChvbGRPcmRlcikub3JkZXJEZXRhaWxzLnJlbW92ZShvcmRlckRldGFpbClcclxuICAgICAgLy8gICAgPT0+IG9yZGVyLm9yZGVyRGV0YWlscy5wdXNoKG5ld09yZGVyKVxyXG4gICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBvbGRTaWJsaW5ncyA9IG9sZFZhbHVlLmdldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUpO1xyXG4gICAgICAgIGxldCBpeCA9IG9sZFNpYmxpbmdzLmluZGV4T2YocGFyZW50KTtcclxuICAgICAgICBpZiAoaXggIT09IC0xKSB7XHJcbiAgICAgICAgICBvbGRTaWJsaW5ncy5zcGxpY2UoaXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzaWJsaW5ncyA9IG5ld1ZhbHVlLmdldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUpO1xyXG4gICAgICAgIC8vIHJlY3Vyc2lvbiBjaGVjayBpZiBhbHJlYWR5IGluIHRoZSBjb2xsZWN0aW9uIGlzIHBlcmZvcm1lZCBieSB0aGUgcmVsYXRpb25BcnJheVxyXG4gICAgICAgIHNpYmxpbmdzLnB1c2gocGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocHJvcGVydHkuaW52Rm9yZWlnbktleU5hbWVzICYmIGVudGl0eU1hbmFnZXIgJiYgIWVudGl0eU1hbmFnZXIuX2luS2V5Rml4dXApIHtcclxuICAgIGxldCBpbnZGb3JlaWduS2V5TmFtZXMgPSBwcm9wZXJ0eS5pbnZGb3JlaWduS2V5TmFtZXM7XHJcbiAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAgIC8vIG9yZGVyLkludGVybmF0aW9uYWxPcmRlciA8LSBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgICAgLy8gICAgPT0+IGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkID0gb3JkZXJJZFxyXG4gICAgICAvLyAgICAgIGFuZFxyXG4gICAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+bjogb3JkZXIgLT4gb3JkZXJEZXRhaWxzXHJcbiAgICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVyIDwteHh4IG5ld09yZGVyXHJcbiAgICAgIC8vICAgID09PiBDQU4nVCBIQVBQRU4gYmVjYXVzZSBpZiB1bmlkaXJlY3Rpb25hbCBiZWNhdXNlIG9yZGVyRGV0YWlsIHdpbGwgbm90IGhhdmUgYW4gb3JkZXIgcHJvcFxyXG4gICAgICBsZXQgcGtWYWx1ZXMgPSBwYXJlbnQuZW50aXR5QXNwZWN0LmdldEtleSgpLnZhbHVlcztcclxuICAgICAgaW52Rm9yZWlnbktleU5hbWVzLmZvckVhY2goIChma05hbWUsIGkpID0+IHtcclxuICAgICAgICBuZXdWYWx1ZSEuc2V0UHJvcGVydHkoZmtOYW1lLCBwa1ZhbHVlc1tpXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgICAvLyBvcmRlci5pbnRlcm5hdGlvbmFsT3JkZXIgPC0gbnVsbFxyXG4gICAgICAvLyAgICA9PT4gKG9sZCBpbnRlcm5hdGlvbmFsT3JkZXIpLm9yZGVySWQgPSBudWxsXHJcbiAgICAgIC8vICAgICAgICBhbmRcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPm46IG9yZGVyIC0+IG9yZGVyRGV0YWlsc1xyXG4gICAgICAvLyBvcmRlckRldGFpbC5vcmRlciA8LXh4eCBuZXdPcmRlclxyXG4gICAgICAvLyAgICA9PT4gQ0FOJ1QgSEFQUEVOIGJlY2F1c2UgaWYgdW5pZGlyZWN0aW9uYWwgYmVjYXVzZSBvcmRlckRldGFpbCB3aWxsIG5vdCBoYXZlIGFuIG9yZGVyIHByb3BcclxuICAgICAgaWYgKG9sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBpbnZGb3JlaWduS2V5TmFtZXMuZm9yRWFjaCggKGZrTmFtZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGZrUHJvcCA9IG9sZFZhbHVlLmVudGl0eVR5cGUuZ2V0UHJvcGVydHkoZmtOYW1lKTtcclxuICAgICAgICAgIGlmICghZmtQcm9wLmlzUGFydE9mS2V5KSB7XHJcbiAgICAgICAgICAgIC8vIGRvbid0IHVwZGF0ZSB3aXRoIG51bGwgaWYgZmsgaXMgcGFydCBvZiB0aGUga2V5XHJcbiAgICAgICAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KGZrTmFtZSwgbnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhd0FjY2Vzc29yRm4obmV3VmFsdWUpO1xyXG5cclxuICB1cGRhdGVTdGF0ZUFuZFZhbGlkYXRlKGNvbnRleHQpO1xyXG5cclxuICAvLyB1cGRhdGUgZmsgZGF0YSBwcm9wZXJ0eSAtIHRoaXMgY2FuIG9ubHkgb2NjdXIgaWYgdGhpcyBuYXZQcm9wZXJ0eSBoYXNcclxuICAvLyBhIGNvcnJlc3BvbmRpbmcgZmsgb24gdGhpcyBlbnRpdHkuXHJcbiAgaWYgKHByb3BlcnR5LnJlbGF0ZWREYXRhUHJvcGVydGllcykge1xyXG4gICAgbGV0IGVudGl0eVN0YXRlID0gZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gICAgLy8gaWYgZWl0aGVyIHNpZGUgb2YgbmF2IHByb3AgaXMgZGV0YWNoZWQgZG9uJ3QgY2xlYXIgZmtzLiBOb3RlOiBvbGRWYWx1ZSBpbiBuZXh0IGxpbmUgY2Fubm90IGJlIG51bGwgc28gbm8gY2hlY2sgaXMgbmVlZGVkLlxyXG4gICAgaWYgKG5ld1ZhbHVlID09IG51bGwgJiYgKGVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSB8fCBvbGRWYWx1ZS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNEZXRhY2hlZCgpKSkgcmV0dXJuO1xyXG4gICAgaWYgKGVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSByZXR1cm47XHJcblxyXG4gICAgLy8gd2UgbWF5IGhhdmUgaW52ZXJzZSBwcm9wcyBpbmRpY2F0aW5nIHRoZSByZWxhdGVkIHByb3Agb24gdGhlIG90aGVyIGVudGl0eSwgaWYgaXQgaXMgbm90IHRoZSBvdGhlciBlbnRpdHkncyBQS1xyXG4gICAgbGV0IGludmVyc2VLZXlQcm9wcyA9IHByb3BlcnR5LmludkZvcmVpZ25LZXlOYW1lcztcclxuICAgIGlmICghKGludmVyc2VLZXlQcm9wcyAmJiBpbnZlcnNlS2V5UHJvcHMubGVuZ3RoKSkge1xyXG4gICAgICAvLyBvdGhlcndpc2UsIHRoaXMgcHJvcCBpcyByZWxhdGVkIHRvIHRoZSBvdGhlciBlbnRpdHkncyBQS1xyXG4gICAgICBpbnZlcnNlS2V5UHJvcHMgPSBwcm9wZXJ0eS5lbnRpdHlUeXBlLmtleVByb3BlcnRpZXMubWFwKGsgPT4gay5uYW1lKTtcclxuICAgIH1cclxuICAgIGludmVyc2VLZXlQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChrZXlQcm9wLCBpKSB7XHJcbiAgICAgIGxldCByZWxhdGVkRGF0YVByb3AgPSBwcm9wZXJ0eS5yZWxhdGVkRGF0YVByb3BlcnRpZXNbaV07XHJcbiAgICAgIC8vIERvIG5vdCB0cmFzaCByZWxhdGVkIHByb3BlcnR5IGlmIGl0IGlzIHBhcnQgb2YgdGhhdCBlbnRpdHkncyBrZXlcclxuICAgICAgaWYgKG5ld1ZhbHVlIHx8ICFyZWxhdGVkRGF0YVByb3AuaXNQYXJ0T2ZLZXkpIHtcclxuICAgICAgICBsZXQgcmVsYXRlZFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5nZXRQcm9wZXJ0eShrZXlQcm9wKSA6IHJlbGF0ZWREYXRhUHJvcC5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgcGFyZW50LnNldFByb3BlcnR5KHJlbGF0ZWREYXRhUHJvcC5uYW1lLCByZWxhdGVkVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBvc3RDaGFuZ2VFdmVudHMoY29udGV4dDogSUNvbnRleHQpIHtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcblxyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gZW50aXR5QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgbGV0IGVudGl0eSA9IGVudGl0eUFzcGVjdC5lbnRpdHk7XHJcblxyXG4gIGxldCBwcm9wQ2hhbmdlZEFyZ3MgPSB7IGVudGl0eTogZW50aXR5ISwgcGFyZW50OiBjb250ZXh0LnBhcmVudCwgcHJvcGVydHk6IGNvbnRleHQucHJvcGVydHksIHByb3BlcnR5TmFtZTogY29udGV4dC5wcm9wZXJ0eU5hbWUsIG9sZFZhbHVlOiBjb250ZXh0Lm9sZFZhbHVlLCBuZXdWYWx1ZTogY29udGV4dC5uZXdWYWx1ZSB9O1xyXG4gIGlmIChlbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAvLyBwcm9wZXJ0eUNoYW5nZWQgd2lsbCBiZSBmaXJlZCBkdXJpbmcgbG9hZGluZyBidXQgd2Ugb25seSB3YW50IHRvIGZpcmUgaXQgb25jZSBwZXIgZW50aXR5LCBub3Qgb25jZSBwZXIgcHJvcGVydHkuXHJcbiAgICAvLyBzbyBwcm9wZXJ0eUNoYW5nZWQgaXMgZmlyZWQgaW4gdGhlIGVudGl0eU1hbmFnZXIgbWVyZ2VFbnRpdHkgbWV0aG9kIGlmIG5vdCBmaXJlZCBoZXJlLlxyXG4gICAgaWYgKCghZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpICYmICghZW50aXR5TWFuYWdlci5pc1JlamVjdGluZ0NoYW5nZXMpKSB7XHJcbiAgICAgIGVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQucHVibGlzaChwcm9wQ2hhbmdlZEFyZ3MpO1xyXG4gICAgICAvLyBkb24ndCBmaXJlIGVudGl0eUNoYW5nZWQgZXZlbnQgaWYgcHJvcGVydHlDaGFuZ2VkIGlzIHN1cHByZXNzZWQuXHJcbiAgICAgIGVudGl0eU1hbmFnZXIuZW50aXR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5QWN0aW9uOiBFbnRpdHlBY3Rpb24uUHJvcGVydHlDaGFuZ2UsIGVudGl0eTogZW50aXR5LCBhcmdzOiBwcm9wQ2hhbmdlZEFyZ3MgfSk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQucHVibGlzaChwcm9wQ2hhbmdlZEFyZ3MpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlU3RhdGVBbmRWYWxpZGF0ZShjb250ZXh0OiBJQ29udGV4dCkge1xyXG4gIGxldCBlbnRpdHlBc3BlY3QgPSBjb250ZXh0LmVudGl0eUFzcGVjdDtcclxuICBsZXQgZW50aXR5TWFuYWdlciA9IGVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG4gIGlmIChlbnRpdHlNYW5hZ2VyID09IG51bGwgfHwgZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpIHJldHVybjtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5O1xyXG5cclxuICBpZiAoZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzVW5jaGFuZ2VkKCkgJiYgIXByb3BlcnR5LmlzVW5tYXBwZWQpIHtcclxuICAgIGVudGl0eUFzcGVjdC5zZXRNb2RpZmllZCgpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGVudGl0eU1hbmFnZXIudmFsaWRhdGlvbk9wdGlvbnMudmFsaWRhdGVPblByb3BlcnR5Q2hhbmdlKSB7XHJcbiAgICAvLyBlbnRpdHlBc3BlY3QuZW50aXR5IGlzIE5PVCB0aGUgc2FtZSBhcyBwYXJlbnQgaW4gdGhlIGNvZGUgYmVsb3cuIEl0J3MgdXNlIGlzIGRlbGliZXJhdGUuXHJcbiAgICBlbnRpdHlBc3BlY3QuX3ZhbGlkYXRlUHJvcGVydHkoY29udGV4dC5uZXdWYWx1ZSxcclxuICAgICAgICB7IGVudGl0eTogZW50aXR5QXNwZWN0LmVudGl0eSwgcHJvcGVydHk6IHByb3BlcnR5LCBwcm9wZXJ0eU5hbWU6IGNvbnRleHQucHJvcGVydHlOYW1lLCBvbGRWYWx1ZTogY29udGV4dC5vbGRWYWx1ZSB9KTtcclxuICB9XHJcbn1cclxuIl19