@libs-ui/interfaces-types 0.2.348-7 → 0.2.350-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -184,4 +184,4 @@ export {};
184
184
  // type pathIAssignmentItem = PathOf<IAssignmentItem>;
185
185
  // type pathIAssignmentItem = PathOf<unknown>; // string
186
186
  // type V_assignees_F = GetValueAtPath<IAssignmentItem, 'assignees[0]', false>; // IAssignee
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy11dGlsaXRpZXMtZm9yLXBhdGgtdmFsdWUudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvaW50ZXJmYWNlcy10eXBlcy9zcmMvZ2VuZXJpYy11dGlsaXRpZXMtZm9yLXBhdGgtdmFsdWUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBMktBLDRFQUE0RTtBQUU1RSw4QkFBOEI7QUFDOUIsNENBQTRDO0FBQzVDLElBQUk7QUFFSixpQ0FBaUM7QUFDakMsNkRBQTZEO0FBQzdELDREQUE0RDtBQUM1RCwwRUFBMEU7QUFDMUUsOEJBQThCO0FBQzlCLGlDQUFpQztBQUNqQyx3Q0FBd0M7QUFDeEMseUNBQXlDO0FBQ3pDLFVBQVU7QUFDVix1Q0FBdUM7QUFDdkMsc0NBQXNDO0FBQ3RDLHFDQUFxQztBQUNyQyx5Q0FBeUM7QUFDekMsUUFBUTtBQUNSLCtCQUErQjtBQUMvQiw2Q0FBNkM7QUFDN0MsaURBQWlEO0FBQ2pELDRDQUE0QztBQUM1QyxRQUFRO0FBQ1IsSUFBSTtBQUVKLGtGQUFrRjtBQUNsRixpR0FBaUc7QUFFakcsaUhBQWlIO0FBQ2pILGdJQUFnSTtBQUVoSSwwQkFBMEI7QUFDMUIsMkRBQTJEO0FBRTNELGtFQUFrRTtBQUVsRSxtQkFBbUI7QUFDbkIsWUFBWTtBQUNaLG9CQUFvQjtBQUNwQixtQkFBbUI7QUFDbkIsT0FBTztBQUNQLDJCQUEyQjtBQUMzQixvQkFBb0I7QUFDcEIsdUJBQXVCO0FBQ3ZCLFFBQVE7QUFDUiw4QkFBOEI7QUFDOUIsa0NBQWtDO0FBQ2xDLG9DQUFvQztBQUNwQyxRQUFRO0FBQ1IsMEJBQTBCO0FBQzFCLDRDQUE0QztBQUM1QyxrQkFBa0I7QUFDbEIsa0NBQWtDO0FBQ2xDLG9CQUFvQjtBQUNwQixRQUFRO0FBRVIsNkJBQTZCO0FBQzdCLGFBQWE7QUFDYix5QkFBeUI7QUFDekIsaUNBQWlDO0FBQ2pDLHdCQUF3QjtBQUN4Qix3QkFBd0I7QUFDeEIsY0FBYztBQUNkLGlDQUFpQztBQUNqQyx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLGNBQWM7QUFDZCx3Q0FBd0M7QUFDeEMsOEJBQThCO0FBQzlCLHNCQUFzQjtBQUN0QiwwQkFBMEI7QUFDMUIsMENBQTBDO0FBQzFDLHFDQUFxQztBQUNyQywwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLGlEQUFpRDtBQUNqRCxrQ0FBa0M7QUFDbEMsdUJBQXVCO0FBQ3ZCLG1DQUFtQztBQUNuQyxnQ0FBZ0M7QUFDaEMsZ0NBQWdDO0FBQ2hDLHFCQUFxQjtBQUNyQixrQkFBa0I7QUFDbEIsaUJBQWlCO0FBQ2pCLGdCQUFnQjtBQUNoQixhQUFhO0FBQ2IsV0FBVztBQUNYLFFBQVE7QUFDUixPQUFPO0FBQ1AsSUFBSTtBQUVKLDhCQUE4QjtBQUM5QixnQ0FBZ0M7QUFDaEMsa0NBQWtDO0FBQ2xDLHlDQUF5QztBQUN6Qyx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLGtFQUFrRTtBQUNsRSxJQUFJO0FBRUosK0JBQStCO0FBQy9CLDBDQUEwQztBQUMxQyw4Q0FBOEM7QUFDOUMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLHFDQUFxQztBQUNyQyx5REFBeUQ7QUFDekQseUNBQXlDO0FBQ3pDLHdDQUF3QztBQUN4QyxJQUFJO0FBRUosMENBQTBDO0FBQzFDLHNDQUFzQztBQUN0QywwQ0FBMEM7QUFDMUMsMkNBQTJDO0FBQzNDLHFDQUFxQztBQUNyQywyQ0FBMkM7QUFDM0MsSUFBSTtBQUVKLG1FQUFtRTtBQUNuRSxrRUFBa0U7QUFFbEUsd0ZBQXdGO0FBQ3hGLHVGQUF1RjtBQUN2RiwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLHlFQUF5RTtBQUN6RSx3RUFBd0U7QUFFeEUsb0RBQW9EO0FBQ3BELDRGQUE0RjtBQUM1RiwyR0FBMkc7QUFDM0csMkVBQTJFO0FBQzNFLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsZ0ZBQWdGO0FBRWhGLHdEQUF3RDtBQUN4RCw2RkFBNkY7QUFDN0YsNElBQTRJO0FBQzVJLDZFQUE2RTtBQUM3RSw0RkFBNEY7QUFDNUYsaUZBQWlGO0FBQ2pGLGdHQUFnRztBQUVoRyxpQ0FBaUM7QUFDakMscUVBQXFFO0FBQ3JFLG9FQUFvRTtBQUNwRSwwRUFBMEU7QUFDMUUseUVBQXlFO0FBRXpFLGdDQUFnQztBQUNoQyx5RUFBeUU7QUFDekUsd0ZBQXdGO0FBQ3hGLDhFQUE4RTtBQUM5RSw2RkFBNkY7QUFFN0YsK0NBQStDO0FBQy9DLHlGQUF5RjtBQUN6Rix3R0FBd0c7QUFDeEcsOEZBQThGO0FBQzlGLDZHQUE2RztBQUM3RywwRUFBMEU7QUFDMUUseUZBQXlGO0FBQ3pGLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFFN0UsY0FBYztBQUNkLDZIQUE2SDtBQUM3SCw0SkFBNEo7QUFDNUosOEZBQThGO0FBQzlGLDZGQUE2RjtBQUM3Riw4RkFBOEY7QUFDOUYsNkdBQTZHO0FBRTdHLHFCQUFxQjtBQUNyQiw2SkFBNko7QUFDN0osNE1BQTRNO0FBQzVNLCtGQUErRjtBQUMvRiw4RkFBOEY7QUFDOUYsK0ZBQStGO0FBQy9GLDhGQUE4RjtBQUM5RixpR0FBaUc7QUFDakcsZ0hBQWdIO0FBQ2hILHNHQUFzRztBQUN0RyxxR0FBcUc7QUFDckcscUhBQXFIO0FBQ3JILG9JQUFvSTtBQUNwSSwwSEFBMEg7QUFDMUgseUlBQXlJO0FBQ3pJLHdHQUF3RztBQUN4Ryx1R0FBdUc7QUFDdkcsd0dBQXdHO0FBQ3hHLHVHQUF1RztBQUV2RyxrSEFBa0g7QUFDbEgsaUlBQWlJO0FBQ2pJLHVIQUF1SDtBQUN2SCxzSEFBc0g7QUFFdEgsc0RBQXNEO0FBQ3RELHdEQUF3RDtBQUV4RCw0RkFBNEYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgU2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF5anMgfSBmcm9tICdkYXlqcyc7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IEhlbHBlcnM6IHVud3JhcCAmIHNoYXBlID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbnR5cGUgSXNFbXB0eU9iamVjdDxPYmo+ID0gW2tleW9mIE9ial0gZXh0ZW5kcyBbbmV2ZXJdID8gdHJ1ZSA6IGZhbHNlO1xuXG4vLyBVbndyYXAgdG/DoG4gYuG7mSBTaWduYWxcbnR5cGUgVW53cmFwQWxsU2lnbmFsczxUPiA9IFQgZXh0ZW5kcyBTaWduYWw8aW5mZXIgVT4gPyBVbndyYXBBbGxTaWduYWxzPFU+IDogVDtcblxuLy8gTG/huqFpIGLhu48gdW5kZWZpbmVkIHwgbnVsbCBzYXUga2hpIHVud3JhcCAxIGzhu5twIFNpZ25hbCDEkeG7gyBzb2kgc2hhcGVcbnR5cGUgQ2xlYW48VD4gPSBFeGNsdWRlPFVud3JhcEFsbFNpZ25hbHM8VD4sIHVuZGVmaW5lZCB8IG51bGw+O1xuXG4vLyBLZXkgZOG6oW5nIHN0cmluZ1xudHlwZSBTdHJLZXlzPFQ+ID0gRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+O1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBBcnJheSBoZWxwZXJzID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbi8vIEzhuqV5IGVsZW1lbnQgdHlwZSBj4bunYSBt4bqjbmcsIHThu7EgbMOgbSBz4bqhY2ggKGLhu48gdW5kZWZpbmVkL251bGwsIHVud3JhcCBTaWduYWwgdHLGsOG7m2Mga2hpIGtp4buDbSB0cmEpXG50eXBlIEFycmF5RWxlbWVudFJhdzxUPiA9IFVud3JhcEFsbFNpZ25hbHM8Q2xlYW48VD4+IGV4dGVuZHMgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IFUgOiBVbndyYXBBbGxTaWduYWxzPENsZWFuPFQ+PiBleHRlbmRzIChpbmZlciBVKVtdID8gVSA6IG5ldmVyO1xuXG4vLyBLaeG7g20gdHJhIGFycmF5LWxpa2Ugc2F1IGtoaSB1bndyYXAgdG/DoG4gYuG7mSBTaWduYWwgdsOgIGzDoG0gc+G6oWNoIG9wdGlvbmFsXG50eXBlIElzQXJyYXlMaWtlPFQ+ID0gVW53cmFwQWxsU2lnbmFsczxDbGVhbjxUPj4gZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gPyB0cnVlIDogVW53cmFwQWxsU2lnbmFsczxDbGVhbjxUPj4gZXh0ZW5kcyB1bmtub3duW10gPyB0cnVlIDogZmFsc2U7XG5cbi8vIEtp4buDbSB0cmEgb2JqZWN0IGtow7RuZyBwaOG6o2kgYXJyYXkgc2F1IGtoaSB1bndyYXAgdG/DoG4gYuG7mSBTaWduYWwgdsOgIGzDoG0gc+G6oWNoIG9wdGlvbmFsXG50eXBlIElzTm9uQXJyYXlPYmplY3Q8VD4gPSBVbndyYXBBbGxTaWduYWxzPENsZWFuPFQ+PiBleHRlbmRzIG9iamVjdCA/IChVbndyYXBBbGxTaWduYWxzPENsZWFuPFQ+PiBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA/IGZhbHNlIDogVW53cmFwQWxsU2lnbmFsczxDbGVhbjxUPj4gZXh0ZW5kcyB1bmtub3duW10gPyBmYWxzZSA6IHRydWUpIDogZmFsc2U7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IERPTS9FdnQgZ3VhcmQgPT09PT09PT09PT09PT09PT09PT09PSAqKi9cblxudHlwZSBJc0RPTVR5cGU8VD4gPSBVbndyYXBBbGxTaWduYWxzPFQ+IGV4dGVuZHMgRXZlbnQgfCBOb2RlIHwgRG9jdW1lbnQgfCBFbGVtZW50IHwgV2luZG93IHwgQ1NTU3R5bGVEZWNsYXJhdGlvbiB8IENTU1J1bGUgfCBDU1NTdHlsZVNoZWV0ID8gdHJ1ZSA6IGZhbHNlO1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBGaW5hbGl6ZSAoZ2nhu68gU2lnbmFsIG7hur91IGPhuqduKSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG50eXBlIEZpbmFsaXplPFQsIFIgZXh0ZW5kcyBib29sZWFuPiA9IFIgZXh0ZW5kcyB0cnVlID8gVCA6IFVud3JhcEFsbFNpZ25hbHM8VD47XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IERlcHRoIGxpbWl0ZXIgKGh5YnJpZCwgbeG6t2MgxJHhu4tuaCA2KSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG50eXBlIERlYzxOIGV4dGVuZHMgbnVtYmVyPiA9IE4gZXh0ZW5kcyA2ID8gNSA6IE4gZXh0ZW5kcyA1ID8gNCA6IE4gZXh0ZW5kcyA0ID8gMyA6IE4gZXh0ZW5kcyAzID8gMiA6IE4gZXh0ZW5kcyAyID8gMSA6IE4gZXh0ZW5kcyAxID8gMCA6IDA7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IFBhdGggYnVpbGRlcnMgKERlcHRoLWxpbWl0ZWQpID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbi8vIFBhdGggY2hvIGFycmF5IOG7nyByb290L2ZpZWxkXG50eXBlIFBhdGhGb3JBcnJheTxULCBEZXB0aCBleHRlbmRzIG51bWJlcj4gPSBbRGVwdGhdIGV4dGVuZHMgWzBdID8gbmV2ZXIgOiBgWyR7bnVtYmVyfV1gIHwgKFBhdGhPZjxBcnJheUVsZW1lbnRSYXc8VD4sIERlYzxEZXB0aD4+IGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IGBbJHtudW1iZXJ9XS4ke1BhdGhPZjxBcnJheUVsZW1lbnRSYXc8VD4sIERlYzxEZXB0aD4+fWApO1xuXG4vLyBQYXRoIGNobyB04burbmcgcHJvcCBLIHTDuXkga2nhu4N1IGdpw6EgdHLhu4tcbnR5cGUgUGF0aEZvclByb3A8VFByb3AsIEsgZXh0ZW5kcyBzdHJpbmcsIERlcHRoIGV4dGVuZHMgbnVtYmVyPiA9IFtEZXB0aF0gZXh0ZW5kcyBbMF1cbiAgPyBLXG4gIDogSXNBcnJheUxpa2U8VFByb3A+IGV4dGVuZHMgdHJ1ZVxuICAgID8gYCR7S31gIHwgYCR7S31bJHtudW1iZXJ9XWAgfCAoUGF0aE9mPEFycmF5RWxlbWVudFJhdzxUUHJvcD4sIERlYzxEZXB0aD4+IGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IGAke0t9WyR7bnVtYmVyfV0uJHtQYXRoT2Y8QXJyYXlFbGVtZW50UmF3PFRQcm9wPiwgRGVjPERlcHRoPj59YClcbiAgICA6IElzTm9uQXJyYXlPYmplY3Q8VFByb3A+IGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBgJHtLfWAgfCAoUGF0aE9mPENsZWFuPFRQcm9wPiwgRGVjPERlcHRoPj4gZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogYCR7S30uJHtQYXRoT2Y8Q2xlYW48VFByb3A+LCBEZWM8RGVwdGg+Pn1gKVxuICAgICAgOiBgJHtLfWA7XG5cbi8vIFBhdGggY2hvIG9iamVjdCAobWFwIHThu6tuZyBrZXkpXG50eXBlIFBhdGhGb3JPYmplY3Q8VCwgRGVwdGggZXh0ZW5kcyBudW1iZXI+ID0ge1xuICBbSyBpbiBTdHJLZXlzPFQ+XTogUGF0aEZvclByb3A8VFtLXSwgSywgRGVwdGg+O1xufVtTdHJLZXlzPFQ+XTtcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT0gUHVibGljOiBQYXRoT2YgKGh5YnJpZCwgRGVwdGggbeG6t2MgxJHhu4tuaCA2KSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG5leHBvcnQgdHlwZSBQYXRoT2Y8VFJhdywgRGVwdGggZXh0ZW5kcyBudW1iZXIgPSA2PiA9XG4gIElzRW1wdHlPYmplY3Q8Q2xlYW48VFJhdz4+IGV4dGVuZHMgdHJ1ZVxuICAgID8gYW55XG4gICAgOiBJc0RPTVR5cGU8Q2xlYW48VFJhdz4+IGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBhbnlcbiAgICAgIDogW0RlcHRoXSBleHRlbmRzIFswXVxuICAgICAgICA/IG5ldmVyXG4gICAgICAgIDogVW53cmFwQWxsU2lnbmFsczxDbGVhbjxUUmF3Pj4gZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gfCB1bmtub3duW11cbiAgICAgICAgICA/IFBhdGhGb3JBcnJheTxDbGVhbjxUUmF3PiwgRGVwdGg+XG4gICAgICAgICAgOiBVbndyYXBBbGxTaWduYWxzPENsZWFuPFRSYXc+PiBleHRlbmRzIG9iamVjdFxuICAgICAgICAgICAgPyBQYXRoRm9yT2JqZWN0PFVud3JhcEFsbFNpZ25hbHM8Q2xlYW48VFJhdz4+LCBEZXB0aD5cbiAgICAgICAgICAgIDogc3RyaW5nO1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBSZXNvbHZlIGdpw6EgdHLhu4sgdGhlbyBwYXRoID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbi8vIEdldEludGVybmFsOiDEkWkgdGhlbyBzdHJpbmcgcGF0aCDEkeG7gyByZXNvbHZlIHR5cGUgZ2nDoSB0cuG7iyBjdeG7kWkgY8O5bmdcbnR5cGUgR2V0SW50ZXJuYWw8VFJhdywgUCBleHRlbmRzIHN0cmluZywgUiBleHRlbmRzIGJvb2xlYW4+ID1cbiAgLy8gW3hdLlJlc3QgKMSRw6FuaCBpbmRleCB2w6BvIHJvb3QgYXJyYXkpXG4gIFAgZXh0ZW5kcyBgWyR7aW5mZXIgSX1dLiR7aW5mZXIgUmVzdH1gXG4gICAgPyBJIGV4dGVuZHMgYCR7bnVtYmVyfWBcbiAgICAgID8gR2V0SW50ZXJuYWw8QXJyYXlFbGVtZW50UmF3PFRSYXc+LCBSZXN0LCBSPlxuICAgICAgOiBhbnlcbiAgICA6IC8vIFt4XSAoY2jhu4kgaW5kZXgpXG4gICAgICBQIGV4dGVuZHMgYFske2luZmVyIEl9XWBcbiAgICAgID8gSSBleHRlbmRzIGAke251bWJlcn1gXG4gICAgICAgID8gRmluYWxpemU8QXJyYXlFbGVtZW50UmF3PFRSYXc+LCBSPlxuICAgICAgICA6IGFueVxuICAgICAgOiAvLyBLW3hdLlJlc3QgKMSRw6FuaCBpbmRleCB2w6BvIGZpZWxkIG3huqNuZylcbiAgICAgICAgUCBleHRlbmRzIGAke2luZmVyIEt9WyR7aW5mZXIgSX1dLiR7aW5mZXIgUmVzdH1gXG4gICAgICAgID8gSyBleHRlbmRzIFN0cktleXM8Q2xlYW48VW53cmFwQWxsU2lnbmFsczxUUmF3Pj4+XG4gICAgICAgICAgPyBJIGV4dGVuZHMgYCR7bnVtYmVyfWBcbiAgICAgICAgICAgID8gR2V0SW50ZXJuYWw8QXJyYXlFbGVtZW50UmF3PENsZWFuPFVud3JhcEFsbFNpZ25hbHM8VFJhdz4+W0tdPiwgUmVzdCwgUj5cbiAgICAgICAgICAgIDogYW55XG4gICAgICAgICAgOiBhbnlcbiAgICAgICAgOiAvLyBLLlJlc3QgKMSRaSBzw6J1IHbDoG8gb2JqZWN0KVxuICAgICAgICAgIFAgZXh0ZW5kcyBgJHtpbmZlciBLfS4ke2luZmVyIFJlc3R9YFxuICAgICAgICAgID8gSyBleHRlbmRzIFN0cktleXM8Q2xlYW48VW53cmFwQWxsU2lnbmFsczxUUmF3Pj4+XG4gICAgICAgICAgICA/IElzQXJyYXlMaWtlPENsZWFuPFVud3JhcEFsbFNpZ25hbHM8VFJhdz4+W0tdPiBleHRlbmRzIHRydWVcbiAgICAgICAgICAgICAgPyBhbnkgLy8ga2jDtG5nIGjhu5cgdHLhu6MgZG90IHbDoG8gcGjhuqduIHThu60gbeG6o25nIGtoaSB0aGnhur91IGluZGV4XG4gICAgICAgICAgICAgIDogR2V0SW50ZXJuYWw8Q2xlYW48VW53cmFwQWxsU2lnbmFsczxUUmF3Pj5bS10sIFJlc3QsIFI+XG4gICAgICAgICAgICA6IGFueVxuICAgICAgICAgIDogLy8gS1s8bnVtYmVyPl0gKGvhur90IHRow7pjIOG7nyBpbmRleClcbiAgICAgICAgICAgIFAgZXh0ZW5kcyBgJHtpbmZlciBLfVske2luZmVyIEl9XWBcbiAgICAgICAgICAgID8gSyBleHRlbmRzIFN0cktleXM8Q2xlYW48VW53cmFwQWxsU2lnbmFsczxUUmF3Pj4+XG4gICAgICAgICAgICAgID8gSSBleHRlbmRzIGAke251bWJlcn1gXG4gICAgICAgICAgICAgICAgPyBGaW5hbGl6ZTxBcnJheUVsZW1lbnRSYXc8Q2xlYW48VW53cmFwQWxsU2lnbmFsczxUUmF3Pj5bS10+LCBSPlxuICAgICAgICAgICAgICAgIDogYW55XG4gICAgICAgICAgICAgIDogYW55XG4gICAgICAgICAgICA6IC8vIEsgKGvhur90IHRow7pjIOG7nyBrZXkpXG4gICAgICAgICAgICAgIFAgZXh0ZW5kcyBgJHtpbmZlciBLfWBcbiAgICAgICAgICAgICAgPyBLIGV4dGVuZHMgU3RyS2V5czxDbGVhbjxVbndyYXBBbGxTaWduYWxzPFRSYXc+Pj5cbiAgICAgICAgICAgICAgICA/IEZpbmFsaXplPENsZWFuPFVud3JhcEFsbFNpZ25hbHM8VFJhdz4+W0tdLCBSPlxuICAgICAgICAgICAgICAgIDogYW55XG4gICAgICAgICAgICAgIDogYW55O1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBQdWJsaWM6IEdldFZhbHVlQXRQYXRoICYgR2V0UmV0dXJuVHlwZSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG4vLyBSZXNvbHZlIGtp4buDdSBnacOhIHRy4buLIHThuqFpIHBhdGggUC4gTuG6v3UgUj10cnVlLCBnaeG7ryBuZ3V5w6puIFNpZ25hbDsgbeG6t2MgxJHhu4tuaCBSPWZhbHNlIHPhur0gdW53cmFwIHRvw6BuIGLhu5kgU2lnbmFsLlxuZXhwb3J0IHR5cGUgR2V0VmFsdWVBdFBhdGg8VFJhdywgUCBleHRlbmRzIFBhdGhPZjxUUmF3PiwgUiBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gPSBHZXRJbnRlcm5hbDxUUmF3LCBQLCBSPjtcblxuLy8gS2nhu4N1IHRy4bqjIHbhu4EgY+G7p2EgZ2V0KCkgZOG7sWEgdHLDqm4gZGVmYXVsdFZhbHVlIERcbmV4cG9ydCB0eXBlIEdldFJldHVyblR5cGU8TywgUCBleHRlbmRzIFBhdGhPZjxPPiwgS1MgZXh0ZW5kcyBib29sZWFuLCBEPiA9IEQgZXh0ZW5kcyB1bmRlZmluZWQgPyBHZXRWYWx1ZUF0UGF0aDxPLCBQLCBLUz4gOiBEO1xuXG4vLyBLaeG7g20gdHJhIGPDoWMga2nhu4N1IGThu68gbGnhu4d1IMSR4bq3YyBiaeG7h3QgxJHhu4MgY2jhu4kgd3JhcCBzaWduYWwgMSBj4bqlcFxudHlwZSBJc1NwZWNpZmljVHlwZTxUPiA9IFQgZXh0ZW5kc1xuICB8IEV2ZW50XG4gIHwgTm9kZVxuICB8IERvY3VtZW50XG4gIHwgRWxlbWVudFxuICB8IFdpbmRvd1xuICB8IENTU1N0eWxlRGVjbGFyYXRpb25cbiAgfCBDU1NSdWxlXG4gIHwgQ1NTU3R5bGVTaGVldFxuICB8IEh0dHBQYXJhbXNcbiAgfCBEYXlqc1xuICB8IERhdGVcbiAgfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpXG4gIHwgUHJvbWlzZTxhbnk+XG4gIHwgTWFwPGFueSwgYW55PlxuICB8IFNldDxhbnk+XG4gIHwgV2Vha01hcDxhbnksIGFueT5cbiAgfCBXZWFrU2V0PGFueT5cbiAgfCBSZWdFeHBcbiAgPyB0cnVlXG4gIDogZmFsc2U7XG5cbi8vIMSQxrBhIGtp4buDdSBk4buvIGxp4buHdSBi4bqldCBr4buzIHbhu4EgZOG6oW5nIHNpZ25hbCwgTuG6v3UgUCA9IHRydWUgxJHGsGEgY+G6oyBk4buvIGxp4buHdSBwcmVtZXRpdmVfdHlwZSB24buBIGThuqFuZyBzaWduYWxcbmV4cG9ydCB0eXBlIFNpZ25hbE9mPFQsIFAgZXh0ZW5kcyBib29sZWFuID0gdHJ1ZSwgRiBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gPSBUIGV4dGVuZHMgbnVsbCB8IHVuZGVmaW5lZFxuICA/IFRcbiAgOiBJc1NwZWNpZmljVHlwZTxDbGVhbjxUPj4gZXh0ZW5kcyB0cnVlXG4gICAgPyBGIGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBXcml0YWJsZVNpZ25hbDxUPlxuICAgICAgOiBUXG4gICAgOiBDbGVhbjxUPiBleHRlbmRzIEFycmF5PGluZmVyIFU+XG4gICAgICA/IEYgZXh0ZW5kcyB0cnVlXG4gICAgICAgID8gV3JpdGFibGVTaWduYWw8QXJyYXk8U2lnbmFsT2Y8Q2xlYW48VT4sIFAsIHRydWU+Pj5cbiAgICAgICAgOiBBcnJheTxTaWduYWxPZjxDbGVhbjxVPiwgUCwgdHJ1ZT4+XG4gICAgICA6IENsZWFuPFQ+IGV4dGVuZHMgb2JqZWN0XG4gICAgICAgID8gRiBleHRlbmRzIHRydWVcbiAgICAgICAgICA/IFdyaXRhYmxlU2lnbmFsPHsgW0sgaW4ga2V5b2YgQ2xlYW48VD5dOiBTaWduYWxPZjxDbGVhbjxDbGVhbjxUPltLXT4sIFAsIHRydWU+IH0+XG4gICAgICAgICAgOiB7IFtLIGluIGtleW9mIENsZWFuPFQ+XTogU2lnbmFsT2Y8Q2xlYW48Q2xlYW48VD5bS10+LCBQLCB0cnVlPiB9XG4gICAgICAgIDogQ2xlYW48VD4gZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuXG4gICAgICAgICAgPyBQIGV4dGVuZHMgdHJ1ZVxuICAgICAgICAgICAgPyBXcml0YWJsZVNpZ25hbDxDbGVhbjxUPj5cbiAgICAgICAgICAgIDogQ2xlYW48VD5cbiAgICAgICAgICA6IFdyaXRhYmxlU2lnbmFsPENsZWFuPFQ+PjtcblxuZXhwb3J0IHR5cGUgTm9uU2lnbmFsT2Y8VD4gPSBUIGV4dGVuZHMgbnVsbCB8IHVuZGVmaW5lZCA/IFQgOiBDbGVhbjxUPiBleHRlbmRzIEFycmF5PGluZmVyIFU+ID8gQXJyYXk8Tm9uU2lnbmFsT2Y8Q2xlYW48VT4+PiA6IENsZWFuPFQ+IGV4dGVuZHMgb2JqZWN0ID8geyBbSyBpbiBrZXlvZiBDbGVhbjxUPl06IE5vblNpZ25hbE9mPENsZWFuPENsZWFuPFQ+W0tdPj4gfSA6IENsZWFuPFQ+O1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSAoVHXhu7MgY2jhu41uKSBWw60gZOG7pSBuaGFuaCA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG4vLyBleHBvcnQgaW50ZXJmYWNlIElDb21tZW50IHtcbi8vICAgY29tbWVudHM/OiBXcml0YWJsZVNpZ25hbDxJU3ViQ29tbWVudD47XG4vLyB9XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgSVN1YkNvbW1lbnQge1xuLy8gICBzdG9yZT86IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElDb21tZW50Pj4+O1xuLy8gICBkYXRhPzogV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SUNvbW1lbnQ+Pj47XG4vLyAgIHNwZWNpZmljX3RlbXBfZGF0YT86IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElDb21tZW50Pj4+O1xuLy8gICBwYWdpbmc/OiBXcml0YWJsZVNpZ25hbDx7XG4vLyAgICAgY3Vyc29ycz86IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICAgIGFmdGVyPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICAgIGJlZm9yZT86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgfT47XG4vLyAgICAgYmVmb3JlPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICBhZnRlcj86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgbmV4dD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgcHJldmlvdXM/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICB9Pjtcbi8vICAgc3VtbWFyeT86IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICBjYW5fY29tbWVudD86IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+O1xuLy8gICAgIGNhbm9yZGVyX2NvbW1lbnQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgIHRvdGFsX2NvdW50PzogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbi8vICAgfT47XG4vLyB9XG5cbi8vIHR5cGUgVl9jb21tZW50c19GID0gR2V0VmFsdWVBdFBhdGg8SUNvbW1lbnQsICdjb21tZW50cycsIGZhbHNlPjsgLy8gSVN1YkNvbW1lbnRcbi8vIHR5cGUgVl9jb21tZW50c19UID0gR2V0VmFsdWVBdFBhdGg8SUNvbW1lbnQsICdjb21tZW50cycsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxJU3ViQ29tbWVudD5cblxuLy8gdHlwZSBWX2NvbW1lbnRzX3N0b3JlX0YgPSBHZXRWYWx1ZUF0UGF0aDxJQ29tbWVudCwgJ2NvbW1lbnRzLmRhdGEnLCBmYWxzZT47IC8vIEFycmF5PFdyaXRhYmxlU2lnbmFsPElDb21tZW50Pj5cbi8vIHR5cGUgVl9jb21tZW50c19zdG9yZV9UID0gR2V0VmFsdWVBdFBhdGg8SUNvbW1lbnQsICdjb21tZW50cy5kYXRhJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElDb21tZW50Pj4+XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgVGVzdCB7XG4vLyAgIHNwZWNpZmljX3F1ZXJ5PzogV3JpdGFibGVTaWduYWw8SUFzc2lnbm1lbnRJdGVtUXVlcnk+O1xuXG4vLyAgIGRhdGE6IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElBc3NpZ25tZW50SXRlbT4+PjtcblxuLy8gICBpbmRleDogbnVtYmVyO1xuLy8gICBpbmZvOiB7XG4vLyAgICAgbmFtZTogc3RyaW5nO1xuLy8gICAgIGFnZTogbnVtYmVyO1xuLy8gICB9O1xuLy8gICBjaXR5OiBXcml0YWJsZVNpZ25hbDx7XG4vLyAgICAgbmFtZTogc3RyaW5nO1xuLy8gICAgIGNvdW50cnk6IHN0cmluZztcbi8vICAgfT47XG4vLyAgIGFkZHJlc3M6IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICBpcDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICBwb3J0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuLy8gICB9Pjtcbi8vICAgb3duZXI6IEFycmF5PHN0cmluZz47XG4vLyAgIHN1cHBvcnQ6IEFycmF5PFdyaXRhYmxlU2lnbmFsPHN0cmluZz4+O1xuLy8gICBob3N0OiBBcnJheTx7XG4vLyAgICAgaXA6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgcG9ydDogbnVtYmVyO1xuLy8gICB9PjtcblxuLy8gICBjb3VudHJ5OiBXcml0YWJsZVNpZ25hbDxcbi8vICAgICBBcnJheTxcbi8vICAgICAgIFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICAgICAgbmFtZTogV3JpdGFibGVTaWduYWw8e1xuLy8gICAgICAgICAgIHZpOiBzdHJpbmc7XG4vLyAgICAgICAgICAgZW46IHN0cmluZztcbi8vICAgICAgICAgfT47XG4vLyAgICAgICAgIGNvZGU6IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICAgICAgICB2aTogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICAgICAgICBlbjogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICAgICAgfT47XG4vLyAgICAgICAgIGZsYWc6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgICAgIHBob25lX2NvZGU6IHN0cmluZztcbi8vICAgICAgICAgY3VycmVuY3k6IHtcbi8vICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4vLyAgICAgICAgICAgY29kZTogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICAgICAgICBzeW1ib2w6IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICAgICAgICAgIHZpOiBzdHJpbmc7XG4vLyAgICAgICAgICAgICBlbjogc3RyaW5nO1xuLy8gICAgICAgICAgICAgY246IFdyaXRhYmxlU2lnbmFsPEFycmF5PHN0cmluZz4+O1xuLy8gICAgICAgICAgICAganA6IFdyaXRhYmxlU2lnbmFsPFxuLy8gICAgICAgICAgICAgICBBcnJheTxcbi8vICAgICAgICAgICAgICAgICBXcml0YWJsZVNpZ25hbDx7XG4vLyAgICAgICAgICAgICAgICAgICB2aTogc3RyaW5nO1xuLy8gICAgICAgICAgICAgICAgICAgZW46IHN0cmluZztcbi8vICAgICAgICAgICAgICAgICB9PlxuLy8gICAgICAgICAgICAgICA+XG4vLyAgICAgICAgICAgICA+O1xuLy8gICAgICAgICAgIH0+O1xuLy8gICAgICAgICB9O1xuLy8gICAgICAgfT5cbi8vICAgICA+XG4vLyAgID47XG4vLyB9XG5cbi8vIGludGVyZmFjZSBJQXNzaWdubWVudEl0ZW0ge1xuLy8gICBpZDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgbmFtZTogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgZGVzY3JpcHRpb246IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGNyZWF0ZWRfYXQ6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIHVwZGF0ZWRfYXQ6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGFzc2lnbmVlcz86IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElBc3NpZ25lZT4+Pjtcbi8vIH1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBJQXNzaWduZWUge1xuLy8gICBhc3NpZ25lZV9pZD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGNvbnZlcnNhdGlvbl9pZD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGNyZWF0ZWRfdGltZT86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGNyZWF0ZWRfdXNlcj86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGlkPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgbm90ZT86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIHN0YXR1cz86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4vLyAgIGFzc2lnbl90YWdfYWN0aXZpdHlfc3RhdHVzPzogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbi8vICAgY29tbWVudF9pZD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIHJhdGluZ19pZD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyB9XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgSUFzc2lnbm1lbnRJdGVtUXVlcnkge1xuLy8gICBwZXJfcGFnZTogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbi8vICAgYWZ0ZXJfdG9rZW4/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBiZWZvcmVfdG9rZW4/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBzZWFyY2g/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBzZWFyY2hfaW5kZXg/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuLy8gfVxuXG4vLyB0eXBlIFZfaW5kZXhfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmRleCcsIGZhbHNlPjsgLy8gbnVtYmVyXG4vLyB0eXBlIFZfaW5kZXhfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmRleCcsIHRydWU+OyAvLyBudW1iZXJcblxuLy8gdHlwZSBWX2luZm9fRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvJywgZmFsc2U+OyAvLyB7IG5hbWU6IHN0cmluZzsgYWdlOiBudW1iZXIgfVxuLy8gdHlwZSBWX2luZm9fVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvJywgdHJ1ZT47IC8vIHsgbmFtZTogc3RyaW5nOyBhZ2U6IG51bWJlciB9XG4vLyB0eXBlIFZfaW5mb19uYW1lX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaW5mby5uYW1lJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9pbmZvX25hbWVfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvLm5hbWUnLCB0cnVlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfaW5mb19hZ2VfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvLmFnZScsIGZhbHNlPjsgLy8gbnVtYmVyXG4vLyB0eXBlIFZfaW5mb19hZ2VfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvLmFnZScsIHRydWU+OyAvLyBudW1iZXJcblxuLy8gLy8gQ2l0eSAoc2lnbmFsLXdyYXBwZWQgb2JqZWN0IHdpdGggcGxhaW4gZmllbGRzKVxuLy8gdHlwZSBWX2NpdHlfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjaXR5JywgZmFsc2U+OyAvLyB7IG5hbWU6IHN0cmluZzsgY291bnRyeTogc3RyaW5nIH1cbi8vIHR5cGUgVl9jaXR5X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY2l0eScsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDx7IG5hbWU6IHN0cmluZzsgY291bnRyeTogc3RyaW5nIH0+XG4vLyB0eXBlIFZfY2l0eV9uYW1lX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY2l0eS5uYW1lJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9jaXR5X25hbWVfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjaXR5Lm5hbWUnLCB0cnVlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfY2l0eV9jb3VudHJ5X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY2l0eS5jb3VudHJ5JywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9jaXR5X2NvdW50cnlfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjaXR5LmNvdW50cnknLCB0cnVlPjsgLy8gc3RyaW5nXG5cbi8vIC8vIEFkZHJlc3MgKHNpZ25hbC13cmFwcGVkIG9iamVjdCB3aXRoIHNpZ25hbCBsZWF2ZXMpXG4vLyB0eXBlIFZfYWRkcmVzc19GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2FkZHJlc3MnLCBmYWxzZT47IC8vIHsgaXA6IHN0cmluZzsgcG9ydDogbnVtYmVyIH1cbi8vIHR5cGUgVl9hZGRyZXNzX1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnYWRkcmVzcycsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDx7IGlwOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+OyBwb3J0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+IH0+XG4vLyB0eXBlIFZfYWRkcmVzc19pcF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2FkZHJlc3MuaXAnLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX2FkZHJlc3NfaXBfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdhZGRyZXNzLmlwJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHN0cmluZz5cbi8vIHR5cGUgVl9hZGRyZXNzX3BvcnRfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdhZGRyZXNzLnBvcnQnLCBmYWxzZT47IC8vIG51bWJlclxuLy8gdHlwZSBWX2FkZHJlc3NfcG9ydF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2FkZHJlc3MucG9ydCcsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxudW1iZXI+XG5cbi8vIC8vIE93bmVyIChhcnJheSBvZiBwcmltaXRpdmVzKVxuLy8gdHlwZSBWX293bmVyX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnb3duZXInLCBmYWxzZT47IC8vIHN0cmluZ1tdXG4vLyB0eXBlIFZfb3duZXJfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdvd25lcicsIHRydWU+OyAvLyBzdHJpbmdbXVxuLy8gdHlwZSBWX293bmVyX2lkeF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ293bmVyWzBdJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9vd25lcl9pZHhfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdvd25lclswXScsIHRydWU+OyAvLyBzdHJpbmdcblxuLy8gLy8gU3VwcG9ydCAoYXJyYXkgb2Ygc2lnbmFscylcbi8vIHR5cGUgVl9zdXBwb3J0X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnc3VwcG9ydCcsIGZhbHNlPjsgLy8gc3RyaW5nW11cbi8vIHR5cGUgVl9zdXBwb3J0X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnc3VwcG9ydCcsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxzdHJpbmc+W11cbi8vIHR5cGUgVl9zdXBwb3J0X2lkeF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ3N1cHBvcnRbMF0nLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N1cHBvcnRfaWR4X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnc3VwcG9ydFswXScsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxzdHJpbmc+XG5cbi8vIC8vIEhvc3QgKGFycmF5IG9mIG9iamVjdHMgd2l0aCBtaXhlZCBsZWF2ZXMpXG4vLyB0eXBlIFZfaG9zdF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3QnLCBmYWxzZT47IC8vIHsgaXA6IHN0cmluZzsgcG9ydDogbnVtYmVyIH1bXVxuLy8gdHlwZSBWX2hvc3RfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdob3N0JywgdHJ1ZT47IC8vIHsgaXA6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47IHBvcnQ6IG51bWJlciB9W11cbi8vIHR5cGUgVl9ob3N0X2lkeF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3RbMF0nLCBmYWxzZT47IC8vIHsgaXA6IHN0cmluZzsgcG9ydDogbnVtYmVyIH1cbi8vIHR5cGUgVl9ob3N0X2lkeF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3RbMF0nLCB0cnVlPjsgLy8geyBpcDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjsgcG9ydDogbnVtYmVyIH1cbi8vIHR5cGUgVl9ob3N0X2lwX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaG9zdFswXS5pcCcsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfaG9zdF9pcF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3RbMF0uaXAnLCB0cnVlPjsgLy8gV3JpdGFibGVTaWduYWw8c3RyaW5nPlxuLy8gdHlwZSBWX2hvc3RfcG9ydF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3RbMF0ucG9ydCcsIGZhbHNlPjsgLy8gbnVtYmVyXG4vLyB0eXBlIFZfaG9zdF9wb3J0X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaG9zdFswXS5wb3J0JywgdHJ1ZT47IC8vIG51bWJlclxuXG4vLyAvLyBjdXJyZW5jeVxuLy8gdHlwZSBWX2N1cnJlbmN5X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeScsIGZhbHNlPjsgLy8geyBuYW1lOiBzdHJpbmc7IGNvZGU6IHN0cmluZzsgc3ltYm9sOiB7IC4uLiB9IH1cbi8vIHR5cGUgVl9jdXJyZW5jeV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3knLCB0cnVlPjsgLy8geyBuYW1lOiBzdHJpbmc7IGNvZGU6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47IHN5bWJvbDogV3JpdGFibGVTaWduYWw8eyAuLi4gfT4gfVxuLy8gdHlwZSBWX2N1cnJlbmN5X25hbWVfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5Lm5hbWUnLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX2N1cnJlbmN5X25hbWVfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5Lm5hbWUnLCB0cnVlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfY3VycmVuY3lfY29kZV9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuY29kZScsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfY3VycmVuY3lfY29kZV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuY29kZScsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxzdHJpbmc+XG5cbi8vIC8vIGN1cnJlbmN5LnN5bWJvbFxuLy8gdHlwZSBWX3N5bWJvbF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sJywgZmFsc2U+OyAvLyB7IHZpOiBzdHJpbmc7IGVuOiBzdHJpbmc7IGNuOiBzdHJpbmdbXTsganA6IHsgdmk6IHN0cmluZzsgZW46IHN0cmluZyB9W10gfVxuLy8gdHlwZSBWX3N5bWJvbF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHsgdmk6IHN0cmluZzsgZW46IHN0cmluZzsgY246IFdyaXRhYmxlU2lnbmFsPHN0cmluZ1tdPjsganA6IFdyaXRhYmxlU2lnbmFsPHsgdmk6IHN0cmluZzsgZW46IHN0cmluZyB9W10+IH0+XG4vLyB0eXBlIFZfc3ltYm9sX3ZpX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wudmknLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF92aV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLnZpJywgdHJ1ZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF9lbl9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmVuJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9zeW1ib2xfZW5fVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5lbicsIHRydWU+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9zeW1ib2xfY25fRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jbicsIGZhbHNlPjsgLy8gc3RyaW5nW11cbi8vIHR5cGUgVl9zeW1ib2xfY25fVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jbicsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxzdHJpbmdbXT5cbi8vIHR5cGUgVl9zeW1ib2xfY25faWR4X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuY25bMF0nLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF9jbl9pZHhfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jblswXScsIHRydWU+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9zeW1ib2xfanBfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5qcCcsIGZhbHNlPjsgLy8geyB2aTogc3RyaW5nOyBlbjogc3RyaW5nIH1bXVxuLy8gdHlwZSBWX3N5bWJvbF9qcF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmpwJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHsgdmk6IHN0cmluZzsgZW46IHN0cmluZyB9W10+XG4vLyB0eXBlIFZfc3ltYm9sX2pwX2lkeF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmpwWzBdJywgZmFsc2U+OyAvLyB7IHZpOiBzdHJpbmc7IGVuOiBzdHJpbmcgfVxuLy8gdHlwZSBWX3N5bWJvbF9qcF9pZHhfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5qcFswXScsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDx7IHZpOiBzdHJpbmc7IGVuOiBzdHJpbmcgfT5cbi8vIHR5cGUgVl9zeW1ib2xfanBfdmlfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5qcFswXS52aScsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfc3ltYm9sX2pwX3ZpX1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuanBbMF0udmknLCB0cnVlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfc3ltYm9sX2pwX2VuX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuanBbMF0uZW4nLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF9qcF9lbl9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmpwWzBdLmVuJywgdHJ1ZT47IC8vIHN0cmluZ1xuXG4vLyB0eXBlIFZfQXJyYXlfc3ltYm9sX2NuX0YgPSBHZXRWYWx1ZUF0UGF0aDxBcnJheTxUZXN0PiwgJ1swXS5jb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jbicsIGZhbHNlPjsgLy8gc3RyaW5nW11cbi8vIHR5cGUgVl9BcnJheV9zeW1ib2xfY25fVCA9IEdldFZhbHVlQXRQYXRoPEFycmF5PFRlc3Q+LCAnWzBdLmNvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmNuJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHN0cmluZ1tdPlxuLy8gdHlwZSBWX0FycmF5X3N5bWJvbF9jbl9pZHhfRiA9IEdldFZhbHVlQXRQYXRoPEFycmF5PFRlc3Q+LCAnWzBdLmNvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmNuWzBdJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9BcnJheV9zeW1ib2xfY25faWR4X1QgPSBHZXRWYWx1ZUF0UGF0aDxBcnJheTxUZXN0PiwgJ1swXS5jb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jblswXScsIHRydWU+OyAvLyBzdHJpbmdcblxuLy8gdHlwZSBwYXRoSUFzc2lnbm1lbnRJdGVtID0gUGF0aE9mPElBc3NpZ25tZW50SXRlbT47XG4vLyB0eXBlIHBhdGhJQXNzaWdubWVudEl0ZW0gPSBQYXRoT2Y8dW5rbm93bj47IC8vIHN0cmluZ1xuXG4vLyB0eXBlIFZfYXNzaWduZWVzX0YgPSBHZXRWYWx1ZUF0UGF0aDxJQXNzaWdubWVudEl0ZW0sICdhc3NpZ25lZXNbMF0nLCBmYWxzZT47IC8vIElBc3NpZ25lZVxuIl19
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy11dGlsaXRpZXMtZm9yLXBhdGgtdmFsdWUudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvaW50ZXJmYWNlcy10eXBlcy9zcmMvZ2VuZXJpYy11dGlsaXRpZXMtZm9yLXBhdGgtdmFsdWUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBK0tBLDRFQUE0RTtBQUU1RSw4QkFBOEI7QUFDOUIsNENBQTRDO0FBQzVDLElBQUk7QUFFSixpQ0FBaUM7QUFDakMsNkRBQTZEO0FBQzdELDREQUE0RDtBQUM1RCwwRUFBMEU7QUFDMUUsOEJBQThCO0FBQzlCLGlDQUFpQztBQUNqQyx3Q0FBd0M7QUFDeEMseUNBQXlDO0FBQ3pDLFVBQVU7QUFDVix1Q0FBdUM7QUFDdkMsc0NBQXNDO0FBQ3RDLHFDQUFxQztBQUNyQyx5Q0FBeUM7QUFDekMsUUFBUTtBQUNSLCtCQUErQjtBQUMvQiw2Q0FBNkM7QUFDN0MsaURBQWlEO0FBQ2pELDRDQUE0QztBQUM1QyxRQUFRO0FBQ1IsSUFBSTtBQUVKLGtGQUFrRjtBQUNsRixpR0FBaUc7QUFFakcsaUhBQWlIO0FBQ2pILGdJQUFnSTtBQUVoSSwwQkFBMEI7QUFDMUIsMkRBQTJEO0FBRTNELGtFQUFrRTtBQUVsRSxtQkFBbUI7QUFDbkIsWUFBWTtBQUNaLG9CQUFvQjtBQUNwQixtQkFBbUI7QUFDbkIsT0FBTztBQUNQLDJCQUEyQjtBQUMzQixvQkFBb0I7QUFDcEIsdUJBQXVCO0FBQ3ZCLFFBQVE7QUFDUiw4QkFBOEI7QUFDOUIsa0NBQWtDO0FBQ2xDLG9DQUFvQztBQUNwQyxRQUFRO0FBQ1IsMEJBQTBCO0FBQzFCLDRDQUE0QztBQUM1QyxrQkFBa0I7QUFDbEIsa0NBQWtDO0FBQ2xDLG9CQUFvQjtBQUNwQixRQUFRO0FBRVIsNkJBQTZCO0FBQzdCLGFBQWE7QUFDYix5QkFBeUI7QUFDekIsaUNBQWlDO0FBQ2pDLHdCQUF3QjtBQUN4Qix3QkFBd0I7QUFDeEIsY0FBYztBQUNkLGlDQUFpQztBQUNqQyx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLGNBQWM7QUFDZCx3Q0FBd0M7QUFDeEMsOEJBQThCO0FBQzlCLHNCQUFzQjtBQUN0QiwwQkFBMEI7QUFDMUIsMENBQTBDO0FBQzFDLHFDQUFxQztBQUNyQywwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLGlEQUFpRDtBQUNqRCxrQ0FBa0M7QUFDbEMsdUJBQXVCO0FBQ3ZCLG1DQUFtQztBQUNuQyxnQ0FBZ0M7QUFDaEMsZ0NBQWdDO0FBQ2hDLHFCQUFxQjtBQUNyQixrQkFBa0I7QUFDbEIsaUJBQWlCO0FBQ2pCLGdCQUFnQjtBQUNoQixhQUFhO0FBQ2IsV0FBVztBQUNYLFFBQVE7QUFDUixPQUFPO0FBQ1AsSUFBSTtBQUVKLDhCQUE4QjtBQUM5QixnQ0FBZ0M7QUFDaEMsa0NBQWtDO0FBQ2xDLHlDQUF5QztBQUN6Qyx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLGtFQUFrRTtBQUNsRSxJQUFJO0FBRUosK0JBQStCO0FBQy9CLDBDQUEwQztBQUMxQyw4Q0FBOEM7QUFDOUMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLHFDQUFxQztBQUNyQyx5REFBeUQ7QUFDekQseUNBQXlDO0FBQ3pDLHdDQUF3QztBQUN4QyxJQUFJO0FBRUosMENBQTBDO0FBQzFDLHNDQUFzQztBQUN0QywwQ0FBMEM7QUFDMUMsMkNBQTJDO0FBQzNDLHFDQUFxQztBQUNyQywyQ0FBMkM7QUFDM0MsSUFBSTtBQUVKLG1FQUFtRTtBQUNuRSxrRUFBa0U7QUFFbEUsd0ZBQXdGO0FBQ3hGLHVGQUF1RjtBQUN2RiwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLHlFQUF5RTtBQUN6RSx3RUFBd0U7QUFFeEUsb0RBQW9EO0FBQ3BELDRGQUE0RjtBQUM1RiwyR0FBMkc7QUFDM0csMkVBQTJFO0FBQzNFLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsZ0ZBQWdGO0FBRWhGLHdEQUF3RDtBQUN4RCw2RkFBNkY7QUFDN0YsNElBQTRJO0FBQzVJLDZFQUE2RTtBQUM3RSw0RkFBNEY7QUFDNUYsaUZBQWlGO0FBQ2pGLGdHQUFnRztBQUVoRyxpQ0FBaUM7QUFDakMscUVBQXFFO0FBQ3JFLG9FQUFvRTtBQUNwRSwwRUFBMEU7QUFDMUUseUVBQXlFO0FBRXpFLGdDQUFnQztBQUNoQyx5RUFBeUU7QUFDekUsd0ZBQXdGO0FBQ3hGLDhFQUE4RTtBQUM5RSw2RkFBNkY7QUFFN0YsK0NBQStDO0FBQy9DLHlGQUF5RjtBQUN6Rix3R0FBd0c7QUFDeEcsOEZBQThGO0FBQzlGLDZHQUE2RztBQUM3RywwRUFBMEU7QUFDMUUseUZBQXlGO0FBQ3pGLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFFN0UsY0FBYztBQUNkLDZIQUE2SDtBQUM3SCw0SkFBNEo7QUFDNUosOEZBQThGO0FBQzlGLDZGQUE2RjtBQUM3Riw4RkFBOEY7QUFDOUYsNkdBQTZHO0FBRTdHLHFCQUFxQjtBQUNyQiw2SkFBNko7QUFDN0osNE1BQTRNO0FBQzVNLCtGQUErRjtBQUMvRiw4RkFBOEY7QUFDOUYsK0ZBQStGO0FBQy9GLDhGQUE4RjtBQUM5RixpR0FBaUc7QUFDakcsZ0hBQWdIO0FBQ2hILHNHQUFzRztBQUN0RyxxR0FBcUc7QUFDckcscUhBQXFIO0FBQ3JILG9JQUFvSTtBQUNwSSwwSEFBMEg7QUFDMUgseUlBQXlJO0FBQ3pJLHdHQUF3RztBQUN4Ryx1R0FBdUc7QUFDdkcsd0dBQXdHO0FBQ3hHLHVHQUF1RztBQUV2RyxrSEFBa0g7QUFDbEgsaUlBQWlJO0FBQ2pJLHVIQUF1SDtBQUN2SCxzSEFBc0g7QUFFdEgsc0RBQXNEO0FBQ3RELHdEQUF3RDtBQUV4RCw0RkFBNEYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgU2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF5anMgfSBmcm9tICdkYXlqcyc7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IEhlbHBlcnM6IHVud3JhcCAmIHNoYXBlID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbnR5cGUgSXNFbXB0eU9iamVjdDxPYmo+ID0gW2tleW9mIE9ial0gZXh0ZW5kcyBbbmV2ZXJdID8gdHJ1ZSA6IGZhbHNlO1xuXG4vLyBVbndyYXAgdG/DoG4gYuG7mSBTaWduYWxcbnR5cGUgVW53cmFwQWxsU2lnbmFsczxUPiA9IFQgZXh0ZW5kcyBTaWduYWw8aW5mZXIgVT4gPyBVbndyYXBBbGxTaWduYWxzPFU+IDogVDtcblxuLy8gTG/huqFpIGLhu48gdW5kZWZpbmVkIHwgbnVsbCBzYXUga2hpIHVud3JhcCAxIGzhu5twIFNpZ25hbCDEkeG7gyBzb2kgc2hhcGVcbnR5cGUgQ2xlYW48VD4gPSBFeGNsdWRlPFVud3JhcEFsbFNpZ25hbHM8VD4sIHVuZGVmaW5lZCB8IG51bGw+O1xuXG4vLyBLZXkgZOG6oW5nIHN0cmluZ1xudHlwZSBTdHJLZXlzPFQ+ID0gRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+O1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBBcnJheSBoZWxwZXJzID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbi8vIEzhuqV5IGVsZW1lbnQgdHlwZSBj4bunYSBt4bqjbmcsIHThu7EgbMOgbSBz4bqhY2ggKGLhu48gdW5kZWZpbmVkL251bGwsIHVud3JhcCBTaWduYWwgdHLGsOG7m2Mga2hpIGtp4buDbSB0cmEpXG50eXBlIEFycmF5RWxlbWVudFJhdzxUPiA9IFVud3JhcEFsbFNpZ25hbHM8Q2xlYW48VD4+IGV4dGVuZHMgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IFUgOiBVbndyYXBBbGxTaWduYWxzPENsZWFuPFQ+PiBleHRlbmRzIChpbmZlciBVKVtdID8gVSA6IG5ldmVyO1xuXG4vLyBLaeG7g20gdHJhIGFycmF5LWxpa2Ugc2F1IGtoaSB1bndyYXAgdG/DoG4gYuG7mSBTaWduYWwgdsOgIGzDoG0gc+G6oWNoIG9wdGlvbmFsXG50eXBlIElzQXJyYXlMaWtlPFQ+ID0gVW53cmFwQWxsU2lnbmFsczxDbGVhbjxUPj4gZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gPyB0cnVlIDogVW53cmFwQWxsU2lnbmFsczxDbGVhbjxUPj4gZXh0ZW5kcyB1bmtub3duW10gPyB0cnVlIDogZmFsc2U7XG5cbi8vIEtp4buDbSB0cmEgb2JqZWN0IGtow7RuZyBwaOG6o2kgYXJyYXkgc2F1IGtoaSB1bndyYXAgdG/DoG4gYuG7mSBTaWduYWwgdsOgIGzDoG0gc+G6oWNoIG9wdGlvbmFsXG50eXBlIElzTm9uQXJyYXlPYmplY3Q8VD4gPSBVbndyYXBBbGxTaWduYWxzPENsZWFuPFQ+PiBleHRlbmRzIG9iamVjdCA/IChVbndyYXBBbGxTaWduYWxzPENsZWFuPFQ+PiBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA/IGZhbHNlIDogVW53cmFwQWxsU2lnbmFsczxDbGVhbjxUPj4gZXh0ZW5kcyB1bmtub3duW10gPyBmYWxzZSA6IHRydWUpIDogZmFsc2U7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IERPTS9FdnQgZ3VhcmQgPT09PT09PT09PT09PT09PT09PT09PSAqKi9cblxudHlwZSBJc0RPTVR5cGU8VD4gPSBVbndyYXBBbGxTaWduYWxzPFQ+IGV4dGVuZHMgRXZlbnQgfCBOb2RlIHwgRG9jdW1lbnQgfCBFbGVtZW50IHwgV2luZG93IHwgQ1NTU3R5bGVEZWNsYXJhdGlvbiB8IENTU1J1bGUgfCBDU1NTdHlsZVNoZWV0ID8gdHJ1ZSA6IGZhbHNlO1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBGaW5hbGl6ZSAoZ2nhu68gU2lnbmFsIG7hur91IGPhuqduKSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG50eXBlIEZpbmFsaXplPFQsIFIgZXh0ZW5kcyBib29sZWFuPiA9IFIgZXh0ZW5kcyB0cnVlID8gVCA6IFVud3JhcEFsbFNpZ25hbHM8VD47XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IERlcHRoIGxpbWl0ZXIgKGh5YnJpZCwgbeG6t2MgxJHhu4tuaCA2KSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG50eXBlIERlYzxOIGV4dGVuZHMgbnVtYmVyPiA9IE4gZXh0ZW5kcyA2ID8gNSA6IE4gZXh0ZW5kcyA1ID8gNCA6IE4gZXh0ZW5kcyA0ID8gMyA6IE4gZXh0ZW5kcyAzID8gMiA6IE4gZXh0ZW5kcyAyID8gMSA6IE4gZXh0ZW5kcyAxID8gMCA6IDA7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IFBhdGggYnVpbGRlcnMgKERlcHRoLWxpbWl0ZWQpID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbi8vIFBhdGggY2hvIGFycmF5IOG7nyByb290L2ZpZWxkXG50eXBlIFBhdGhGb3JBcnJheTxULCBEZXB0aCBleHRlbmRzIG51bWJlcj4gPSBbRGVwdGhdIGV4dGVuZHMgWzBdID8gbmV2ZXIgOiBgWyR7bnVtYmVyfV1gIHwgKFBhdGhPZjxBcnJheUVsZW1lbnRSYXc8VD4sIERlYzxEZXB0aD4+IGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IGBbJHtudW1iZXJ9XS4ke1BhdGhPZjxBcnJheUVsZW1lbnRSYXc8VD4sIERlYzxEZXB0aD4+fWApO1xuXG4vLyBQYXRoIGNobyB04burbmcgcHJvcCBLIHTDuXkga2nhu4N1IGdpw6EgdHLhu4tcbnR5cGUgUGF0aEZvclByb3A8VFByb3AsIEsgZXh0ZW5kcyBzdHJpbmcsIERlcHRoIGV4dGVuZHMgbnVtYmVyPiA9IFtEZXB0aF0gZXh0ZW5kcyBbMF1cbiAgPyBLXG4gIDogSXNBcnJheUxpa2U8VFByb3A+IGV4dGVuZHMgdHJ1ZVxuICAgID8gYCR7S31gIHwgYCR7S31bJHtudW1iZXJ9XWAgfCAoUGF0aE9mPEFycmF5RWxlbWVudFJhdzxUUHJvcD4sIERlYzxEZXB0aD4+IGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IGAke0t9WyR7bnVtYmVyfV0uJHtQYXRoT2Y8QXJyYXlFbGVtZW50UmF3PFRQcm9wPiwgRGVjPERlcHRoPj59YClcbiAgICA6IElzTm9uQXJyYXlPYmplY3Q8VFByb3A+IGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBgJHtLfWAgfCAoUGF0aE9mPENsZWFuPFRQcm9wPiwgRGVjPERlcHRoPj4gZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogYCR7S30uJHtQYXRoT2Y8Q2xlYW48VFByb3A+LCBEZWM8RGVwdGg+Pn1gKVxuICAgICAgOiBgJHtLfWA7XG5cbi8vIFBhdGggY2hvIG9iamVjdCAobWFwIHThu6tuZyBrZXkpXG50eXBlIFBhdGhGb3JPYmplY3Q8VCwgRGVwdGggZXh0ZW5kcyBudW1iZXI+ID0ge1xuICBbSyBpbiBTdHJLZXlzPFQ+XTogUGF0aEZvclByb3A8VFtLXSwgSywgRGVwdGg+O1xufVtTdHJLZXlzPFQ+XTtcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT0gUHVibGljOiBQYXRoT2YgKGh5YnJpZCwgRGVwdGggbeG6t2MgxJHhu4tuaCA2KSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG5leHBvcnQgdHlwZSBQYXRoT2Y8VFJhdywgRGVwdGggZXh0ZW5kcyBudW1iZXIgPSA2PiA9XG4gIElzRW1wdHlPYmplY3Q8Q2xlYW48VFJhdz4+IGV4dGVuZHMgdHJ1ZVxuICAgID8gYW55XG4gICAgOiBJc0RPTVR5cGU8Q2xlYW48VFJhdz4+IGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBhbnlcbiAgICAgIDogW0RlcHRoXSBleHRlbmRzIFswXVxuICAgICAgICA/IG5ldmVyXG4gICAgICAgIDogVW53cmFwQWxsU2lnbmFsczxDbGVhbjxUUmF3Pj4gZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gfCB1bmtub3duW11cbiAgICAgICAgICA/IFBhdGhGb3JBcnJheTxDbGVhbjxUUmF3PiwgRGVwdGg+XG4gICAgICAgICAgOiBVbndyYXBBbGxTaWduYWxzPENsZWFuPFRSYXc+PiBleHRlbmRzIG9iamVjdFxuICAgICAgICAgICAgPyBQYXRoRm9yT2JqZWN0PFVud3JhcEFsbFNpZ25hbHM8Q2xlYW48VFJhdz4+LCBEZXB0aD5cbiAgICAgICAgICAgIDogc3RyaW5nO1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBSZXNvbHZlIGdpw6EgdHLhu4sgdGhlbyBwYXRoID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbi8vIEdldEludGVybmFsOiDEkWkgdGhlbyBzdHJpbmcgcGF0aCDEkeG7gyByZXNvbHZlIHR5cGUgZ2nDoSB0cuG7iyBjdeG7kWkgY8O5bmdcbnR5cGUgR2V0SW50ZXJuYWw8VFJhdywgUCBleHRlbmRzIHN0cmluZywgUiBleHRlbmRzIGJvb2xlYW4+ID1cbiAgLy8gW3hdLlJlc3QgKMSRw6FuaCBpbmRleCB2w6BvIHJvb3QgYXJyYXkpXG4gIFAgZXh0ZW5kcyBgWyR7aW5mZXIgSX1dLiR7aW5mZXIgUmVzdH1gXG4gICAgPyBJIGV4dGVuZHMgYCR7bnVtYmVyfWBcbiAgICAgID8gR2V0SW50ZXJuYWw8QXJyYXlFbGVtZW50UmF3PFRSYXc+LCBSZXN0LCBSPlxuICAgICAgOiBhbnlcbiAgICA6IC8vIFt4XSAoY2jhu4kgaW5kZXgpXG4gICAgICBQIGV4dGVuZHMgYFske2luZmVyIEl9XWBcbiAgICAgID8gSSBleHRlbmRzIGAke251bWJlcn1gXG4gICAgICAgID8gRmluYWxpemU8QXJyYXlFbGVtZW50UmF3PFRSYXc+LCBSPlxuICAgICAgICA6IGFueVxuICAgICAgOiAvLyBLW3hdLlJlc3QgKMSRw6FuaCBpbmRleCB2w6BvIGZpZWxkIG3huqNuZylcbiAgICAgICAgUCBleHRlbmRzIGAke2luZmVyIEt9WyR7aW5mZXIgSX1dLiR7aW5mZXIgUmVzdH1gXG4gICAgICAgID8gSyBleHRlbmRzIFN0cktleXM8Q2xlYW48VW53cmFwQWxsU2lnbmFsczxUUmF3Pj4+XG4gICAgICAgICAgPyBJIGV4dGVuZHMgYCR7bnVtYmVyfWBcbiAgICAgICAgICAgID8gR2V0SW50ZXJuYWw8QXJyYXlFbGVtZW50UmF3PENsZWFuPFVud3JhcEFsbFNpZ25hbHM8VFJhdz4+W0tdPiwgUmVzdCwgUj5cbiAgICAgICAgICAgIDogYW55XG4gICAgICAgICAgOiBhbnlcbiAgICAgICAgOiAvLyBLLlJlc3QgKMSRaSBzw6J1IHbDoG8gb2JqZWN0KVxuICAgICAgICAgIFAgZXh0ZW5kcyBgJHtpbmZlciBLfS4ke2luZmVyIFJlc3R9YFxuICAgICAgICAgID8gSyBleHRlbmRzIFN0cktleXM8Q2xlYW48VW53cmFwQWxsU2lnbmFsczxUUmF3Pj4+XG4gICAgICAgICAgICA/IElzQXJyYXlMaWtlPENsZWFuPFVud3JhcEFsbFNpZ25hbHM8VFJhdz4+W0tdPiBleHRlbmRzIHRydWVcbiAgICAgICAgICAgICAgPyBhbnkgLy8ga2jDtG5nIGjhu5cgdHLhu6MgZG90IHbDoG8gcGjhuqduIHThu60gbeG6o25nIGtoaSB0aGnhur91IGluZGV4XG4gICAgICAgICAgICAgIDogR2V0SW50ZXJuYWw8Q2xlYW48VW53cmFwQWxsU2lnbmFsczxUUmF3Pj5bS10sIFJlc3QsIFI+XG4gICAgICAgICAgICA6IGFueVxuICAgICAgICAgIDogLy8gS1s8bnVtYmVyPl0gKGvhur90IHRow7pjIOG7nyBpbmRleClcbiAgICAgICAgICAgIFAgZXh0ZW5kcyBgJHtpbmZlciBLfVske2luZmVyIEl9XWBcbiAgICAgICAgICAgID8gSyBleHRlbmRzIFN0cktleXM8Q2xlYW48VW53cmFwQWxsU2lnbmFsczxUUmF3Pj4+XG4gICAgICAgICAgICAgID8gSSBleHRlbmRzIGAke251bWJlcn1gXG4gICAgICAgICAgICAgICAgPyBGaW5hbGl6ZTxBcnJheUVsZW1lbnRSYXc8Q2xlYW48VW53cmFwQWxsU2lnbmFsczxUUmF3Pj5bS10+LCBSPlxuICAgICAgICAgICAgICAgIDogYW55XG4gICAgICAgICAgICAgIDogYW55XG4gICAgICAgICAgICA6IC8vIEsgKGvhur90IHRow7pjIOG7nyBrZXkpXG4gICAgICAgICAgICAgIFAgZXh0ZW5kcyBgJHtpbmZlciBLfWBcbiAgICAgICAgICAgICAgPyBLIGV4dGVuZHMgU3RyS2V5czxDbGVhbjxVbndyYXBBbGxTaWduYWxzPFRSYXc+Pj5cbiAgICAgICAgICAgICAgICA/IEZpbmFsaXplPENsZWFuPFVud3JhcEFsbFNpZ25hbHM8VFJhdz4+W0tdLCBSPlxuICAgICAgICAgICAgICAgIDogYW55XG4gICAgICAgICAgICAgIDogYW55O1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBQdWJsaWM6IEdldFZhbHVlQXRQYXRoICYgR2V0UmV0dXJuVHlwZSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG4vLyBSZXNvbHZlIGtp4buDdSBnacOhIHRy4buLIHThuqFpIHBhdGggUC4gTuG6v3UgUj10cnVlLCBnaeG7ryBuZ3V5w6puIFNpZ25hbDsgbeG6t2MgxJHhu4tuaCBSPWZhbHNlIHPhur0gdW53cmFwIHRvw6BuIGLhu5kgU2lnbmFsLlxuZXhwb3J0IHR5cGUgR2V0VmFsdWVBdFBhdGg8VFJhdywgUCBleHRlbmRzIFBhdGhPZjxUUmF3PiwgUiBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gPSBHZXRJbnRlcm5hbDxUUmF3LCBQLCBSPjtcblxuLy8gS2nhu4N1IHRy4bqjIHbhu4EgY+G7p2EgZ2V0KCkgZOG7sWEgdHLDqm4gZGVmYXVsdFZhbHVlIERcbmV4cG9ydCB0eXBlIEdldFJldHVyblR5cGU8TywgUCBleHRlbmRzIFBhdGhPZjxPPiwgS1MgZXh0ZW5kcyBib29sZWFuLCBEPiA9IEQgZXh0ZW5kcyB1bmRlZmluZWQgPyBHZXRWYWx1ZUF0UGF0aDxPLCBQLCBLUz4gOiBEO1xuXG4vLyBLaeG7g20gdHJhIGPDoWMga2nhu4N1IGThu68gbGnhu4d1IMSR4bq3YyBiaeG7h3QgxJHhu4MgY2jhu4kgd3JhcCBzaWduYWwgMSBj4bqlcFxudHlwZSBJc1NwZWNpZmljVHlwZTxUPiA9IFQgZXh0ZW5kc1xuICB8IEV2ZW50XG4gIHwgTm9kZVxuICB8IERvY3VtZW50XG4gIHwgRWxlbWVudFxuICB8IFdpbmRvd1xuICB8IENTU1N0eWxlRGVjbGFyYXRpb25cbiAgfCBDU1NSdWxlXG4gIHwgQ1NTU3R5bGVTaGVldFxuICB8IEh0dHBQYXJhbXNcbiAgfCBEYXlqc1xuICB8IERhdGVcbiAgfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpXG4gIHwgUHJvbWlzZTxhbnk+XG4gIHwgTWFwPGFueSwgYW55PlxuICB8IFNldDxhbnk+XG4gIHwgV2Vha01hcDxhbnksIGFueT5cbiAgfCBXZWFrU2V0PGFueT5cbiAgfCBSZWdFeHBcbiAgfCBGaWxlXG4gIHwgQmxvYlxuICB8IEZpbGVMaXN0XG4gIHwgRm9ybURhdGFcbiAgPyB0cnVlXG4gIDogZmFsc2U7XG5cbi8vIMSQxrBhIGtp4buDdSBk4buvIGxp4buHdSBi4bqldCBr4buzIHbhu4EgZOG6oW5nIHNpZ25hbCwgTuG6v3UgUCA9IHRydWUgxJHGsGEgY+G6oyBk4buvIGxp4buHdSBwcmVtZXRpdmVfdHlwZSB24buBIGThuqFuZyBzaWduYWxcbmV4cG9ydCB0eXBlIFNpZ25hbE9mPFQsIFAgZXh0ZW5kcyBib29sZWFuID0gdHJ1ZSwgRiBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gPSBUIGV4dGVuZHMgbnVsbCB8IHVuZGVmaW5lZFxuICA/IFRcbiAgOiBJc1NwZWNpZmljVHlwZTxDbGVhbjxUPj4gZXh0ZW5kcyB0cnVlXG4gICAgPyBGIGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBXcml0YWJsZVNpZ25hbDxUPlxuICAgICAgOiBUXG4gICAgOiBDbGVhbjxUPiBleHRlbmRzIEFycmF5PGluZmVyIFU+XG4gICAgICA/IEYgZXh0ZW5kcyB0cnVlXG4gICAgICAgID8gV3JpdGFibGVTaWduYWw8QXJyYXk8U2lnbmFsT2Y8Q2xlYW48VT4sIFAsIHRydWU+Pj5cbiAgICAgICAgOiBBcnJheTxTaWduYWxPZjxDbGVhbjxVPiwgUCwgdHJ1ZT4+XG4gICAgICA6IENsZWFuPFQ+IGV4dGVuZHMgb2JqZWN0XG4gICAgICAgID8gRiBleHRlbmRzIHRydWVcbiAgICAgICAgICA/IFdyaXRhYmxlU2lnbmFsPHsgW0sgaW4ga2V5b2YgQ2xlYW48VD5dOiBTaWduYWxPZjxDbGVhbjxDbGVhbjxUPltLXT4sIFAsIHRydWU+IH0+XG4gICAgICAgICAgOiB7IFtLIGluIGtleW9mIENsZWFuPFQ+XTogU2lnbmFsT2Y8Q2xlYW48Q2xlYW48VD5bS10+LCBQLCB0cnVlPiB9XG4gICAgICAgIDogQ2xlYW48VD4gZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuXG4gICAgICAgICAgPyBQIGV4dGVuZHMgdHJ1ZVxuICAgICAgICAgICAgPyBXcml0YWJsZVNpZ25hbDxDbGVhbjxUPj5cbiAgICAgICAgICAgIDogQ2xlYW48VD5cbiAgICAgICAgICA6IFdyaXRhYmxlU2lnbmFsPENsZWFuPFQ+PjtcblxuZXhwb3J0IHR5cGUgTm9uU2lnbmFsT2Y8VD4gPSBUIGV4dGVuZHMgbnVsbCB8IHVuZGVmaW5lZCA/IFQgOiBDbGVhbjxUPiBleHRlbmRzIEFycmF5PGluZmVyIFU+ID8gQXJyYXk8Tm9uU2lnbmFsT2Y8Q2xlYW48VT4+PiA6IENsZWFuPFQ+IGV4dGVuZHMgb2JqZWN0ID8geyBbSyBpbiBrZXlvZiBDbGVhbjxUPl06IE5vblNpZ25hbE9mPENsZWFuPENsZWFuPFQ+W0tdPj4gfSA6IENsZWFuPFQ+O1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSAoVHXhu7MgY2jhu41uKSBWw60gZOG7pSBuaGFuaCA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG4vLyBleHBvcnQgaW50ZXJmYWNlIElDb21tZW50IHtcbi8vICAgY29tbWVudHM/OiBXcml0YWJsZVNpZ25hbDxJU3ViQ29tbWVudD47XG4vLyB9XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgSVN1YkNvbW1lbnQge1xuLy8gICBzdG9yZT86IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElDb21tZW50Pj4+O1xuLy8gICBkYXRhPzogV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SUNvbW1lbnQ+Pj47XG4vLyAgIHNwZWNpZmljX3RlbXBfZGF0YT86IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElDb21tZW50Pj4+O1xuLy8gICBwYWdpbmc/OiBXcml0YWJsZVNpZ25hbDx7XG4vLyAgICAgY3Vyc29ycz86IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICAgIGFmdGVyPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICAgIGJlZm9yZT86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgfT47XG4vLyAgICAgYmVmb3JlPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICBhZnRlcj86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgbmV4dD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgcHJldmlvdXM/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICB9Pjtcbi8vICAgc3VtbWFyeT86IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICBjYW5fY29tbWVudD86IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+O1xuLy8gICAgIGNhbm9yZGVyX2NvbW1lbnQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgIHRvdGFsX2NvdW50PzogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbi8vICAgfT47XG4vLyB9XG5cbi8vIHR5cGUgVl9jb21tZW50c19GID0gR2V0VmFsdWVBdFBhdGg8SUNvbW1lbnQsICdjb21tZW50cycsIGZhbHNlPjsgLy8gSVN1YkNvbW1lbnRcbi8vIHR5cGUgVl9jb21tZW50c19UID0gR2V0VmFsdWVBdFBhdGg8SUNvbW1lbnQsICdjb21tZW50cycsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxJU3ViQ29tbWVudD5cblxuLy8gdHlwZSBWX2NvbW1lbnRzX3N0b3JlX0YgPSBHZXRWYWx1ZUF0UGF0aDxJQ29tbWVudCwgJ2NvbW1lbnRzLmRhdGEnLCBmYWxzZT47IC8vIEFycmF5PFdyaXRhYmxlU2lnbmFsPElDb21tZW50Pj5cbi8vIHR5cGUgVl9jb21tZW50c19zdG9yZV9UID0gR2V0VmFsdWVBdFBhdGg8SUNvbW1lbnQsICdjb21tZW50cy5kYXRhJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElDb21tZW50Pj4+XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgVGVzdCB7XG4vLyAgIHNwZWNpZmljX3F1ZXJ5PzogV3JpdGFibGVTaWduYWw8SUFzc2lnbm1lbnRJdGVtUXVlcnk+O1xuXG4vLyAgIGRhdGE6IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElBc3NpZ25tZW50SXRlbT4+PjtcblxuLy8gICBpbmRleDogbnVtYmVyO1xuLy8gICBpbmZvOiB7XG4vLyAgICAgbmFtZTogc3RyaW5nO1xuLy8gICAgIGFnZTogbnVtYmVyO1xuLy8gICB9O1xuLy8gICBjaXR5OiBXcml0YWJsZVNpZ25hbDx7XG4vLyAgICAgbmFtZTogc3RyaW5nO1xuLy8gICAgIGNvdW50cnk6IHN0cmluZztcbi8vICAgfT47XG4vLyAgIGFkZHJlc3M6IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICBpcDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICBwb3J0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuLy8gICB9Pjtcbi8vICAgb3duZXI6IEFycmF5PHN0cmluZz47XG4vLyAgIHN1cHBvcnQ6IEFycmF5PFdyaXRhYmxlU2lnbmFsPHN0cmluZz4+O1xuLy8gICBob3N0OiBBcnJheTx7XG4vLyAgICAgaXA6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgcG9ydDogbnVtYmVyO1xuLy8gICB9PjtcblxuLy8gICBjb3VudHJ5OiBXcml0YWJsZVNpZ25hbDxcbi8vICAgICBBcnJheTxcbi8vICAgICAgIFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICAgICAgbmFtZTogV3JpdGFibGVTaWduYWw8e1xuLy8gICAgICAgICAgIHZpOiBzdHJpbmc7XG4vLyAgICAgICAgICAgZW46IHN0cmluZztcbi8vICAgICAgICAgfT47XG4vLyAgICAgICAgIGNvZGU6IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICAgICAgICB2aTogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICAgICAgICBlbjogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICAgICAgfT47XG4vLyAgICAgICAgIGZsYWc6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgICAgIHBob25lX2NvZGU6IHN0cmluZztcbi8vICAgICAgICAgY3VycmVuY3k6IHtcbi8vICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4vLyAgICAgICAgICAgY29kZTogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICAgICAgICBzeW1ib2w6IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICAgICAgICAgIHZpOiBzdHJpbmc7XG4vLyAgICAgICAgICAgICBlbjogc3RyaW5nO1xuLy8gICAgICAgICAgICAgY246IFdyaXRhYmxlU2lnbmFsPEFycmF5PHN0cmluZz4+O1xuLy8gICAgICAgICAgICAganA6IFdyaXRhYmxlU2lnbmFsPFxuLy8gICAgICAgICAgICAgICBBcnJheTxcbi8vICAgICAgICAgICAgICAgICBXcml0YWJsZVNpZ25hbDx7XG4vLyAgICAgICAgICAgICAgICAgICB2aTogc3RyaW5nO1xuLy8gICAgICAgICAgICAgICAgICAgZW46IHN0cmluZztcbi8vICAgICAgICAgICAgICAgICB9PlxuLy8gICAgICAgICAgICAgICA+XG4vLyAgICAgICAgICAgICA+O1xuLy8gICAgICAgICAgIH0+O1xuLy8gICAgICAgICB9O1xuLy8gICAgICAgfT5cbi8vICAgICA+XG4vLyAgID47XG4vLyB9XG5cbi8vIGludGVyZmFjZSBJQXNzaWdubWVudEl0ZW0ge1xuLy8gICBpZDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgbmFtZTogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgZGVzY3JpcHRpb246IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGNyZWF0ZWRfYXQ6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIHVwZGF0ZWRfYXQ6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGFzc2lnbmVlcz86IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElBc3NpZ25lZT4+Pjtcbi8vIH1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBJQXNzaWduZWUge1xuLy8gICBhc3NpZ25lZV9pZD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGNvbnZlcnNhdGlvbl9pZD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGNyZWF0ZWRfdGltZT86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGNyZWF0ZWRfdXNlcj86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGlkPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgbm90ZT86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIHN0YXR1cz86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4vLyAgIGFzc2lnbl90YWdfYWN0aXZpdHlfc3RhdHVzPzogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbi8vICAgY29tbWVudF9pZD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIHJhdGluZ19pZD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyB9XG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgSUFzc2lnbm1lbnRJdGVtUXVlcnkge1xuLy8gICBwZXJfcGFnZTogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbi8vICAgYWZ0ZXJfdG9rZW4/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBiZWZvcmVfdG9rZW4/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBzZWFyY2g/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBzZWFyY2hfaW5kZXg/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuLy8gfVxuXG4vLyB0eXBlIFZfaW5kZXhfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmRleCcsIGZhbHNlPjsgLy8gbnVtYmVyXG4vLyB0eXBlIFZfaW5kZXhfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmRleCcsIHRydWU+OyAvLyBudW1iZXJcblxuLy8gdHlwZSBWX2luZm9fRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvJywgZmFsc2U+OyAvLyB7IG5hbWU6IHN0cmluZzsgYWdlOiBudW1iZXIgfVxuLy8gdHlwZSBWX2luZm9fVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvJywgdHJ1ZT47IC8vIHsgbmFtZTogc3RyaW5nOyBhZ2U6IG51bWJlciB9XG4vLyB0eXBlIFZfaW5mb19uYW1lX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaW5mby5uYW1lJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9pbmZvX25hbWVfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvLm5hbWUnLCB0cnVlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfaW5mb19hZ2VfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvLmFnZScsIGZhbHNlPjsgLy8gbnVtYmVyXG4vLyB0eXBlIFZfaW5mb19hZ2VfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvLmFnZScsIHRydWU+OyAvLyBudW1iZXJcblxuLy8gLy8gQ2l0eSAoc2lnbmFsLXdyYXBwZWQgb2JqZWN0IHdpdGggcGxhaW4gZmllbGRzKVxuLy8gdHlwZSBWX2NpdHlfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjaXR5JywgZmFsc2U+OyAvLyB7IG5hbWU6IHN0cmluZzsgY291bnRyeTogc3RyaW5nIH1cbi8vIHR5cGUgVl9jaXR5X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY2l0eScsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDx7IG5hbWU6IHN0cmluZzsgY291bnRyeTogc3RyaW5nIH0+XG4vLyB0eXBlIFZfY2l0eV9uYW1lX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY2l0eS5uYW1lJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9jaXR5X25hbWVfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjaXR5Lm5hbWUnLCB0cnVlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfY2l0eV9jb3VudHJ5X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY2l0eS5jb3VudHJ5JywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9jaXR5X2NvdW50cnlfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjaXR5LmNvdW50cnknLCB0cnVlPjsgLy8gc3RyaW5nXG5cbi8vIC8vIEFkZHJlc3MgKHNpZ25hbC13cmFwcGVkIG9iamVjdCB3aXRoIHNpZ25hbCBsZWF2ZXMpXG4vLyB0eXBlIFZfYWRkcmVzc19GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2FkZHJlc3MnLCBmYWxzZT47IC8vIHsgaXA6IHN0cmluZzsgcG9ydDogbnVtYmVyIH1cbi8vIHR5cGUgVl9hZGRyZXNzX1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnYWRkcmVzcycsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDx7IGlwOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+OyBwb3J0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+IH0+XG4vLyB0eXBlIFZfYWRkcmVzc19pcF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2FkZHJlc3MuaXAnLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX2FkZHJlc3NfaXBfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdhZGRyZXNzLmlwJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHN0cmluZz5cbi8vIHR5cGUgVl9hZGRyZXNzX3BvcnRfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdhZGRyZXNzLnBvcnQnLCBmYWxzZT47IC8vIG51bWJlclxuLy8gdHlwZSBWX2FkZHJlc3NfcG9ydF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2FkZHJlc3MucG9ydCcsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxudW1iZXI+XG5cbi8vIC8vIE93bmVyIChhcnJheSBvZiBwcmltaXRpdmVzKVxuLy8gdHlwZSBWX293bmVyX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnb3duZXInLCBmYWxzZT47IC8vIHN0cmluZ1tdXG4vLyB0eXBlIFZfb3duZXJfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdvd25lcicsIHRydWU+OyAvLyBzdHJpbmdbXVxuLy8gdHlwZSBWX293bmVyX2lkeF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ293bmVyWzBdJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9vd25lcl9pZHhfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdvd25lclswXScsIHRydWU+OyAvLyBzdHJpbmdcblxuLy8gLy8gU3VwcG9ydCAoYXJyYXkgb2Ygc2lnbmFscylcbi8vIHR5cGUgVl9zdXBwb3J0X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnc3VwcG9ydCcsIGZhbHNlPjsgLy8gc3RyaW5nW11cbi8vIHR5cGUgVl9zdXBwb3J0X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnc3VwcG9ydCcsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxzdHJpbmc+W11cbi8vIHR5cGUgVl9zdXBwb3J0X2lkeF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ3N1cHBvcnRbMF0nLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N1cHBvcnRfaWR4X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnc3VwcG9ydFswXScsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxzdHJpbmc+XG5cbi8vIC8vIEhvc3QgKGFycmF5IG9mIG9iamVjdHMgd2l0aCBtaXhlZCBsZWF2ZXMpXG4vLyB0eXBlIFZfaG9zdF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3QnLCBmYWxzZT47IC8vIHsgaXA6IHN0cmluZzsgcG9ydDogbnVtYmVyIH1bXVxuLy8gdHlwZSBWX2hvc3RfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdob3N0JywgdHJ1ZT47IC8vIHsgaXA6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47IHBvcnQ6IG51bWJlciB9W11cbi8vIHR5cGUgVl9ob3N0X2lkeF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3RbMF0nLCBmYWxzZT47IC8vIHsgaXA6IHN0cmluZzsgcG9ydDogbnVtYmVyIH1cbi8vIHR5cGUgVl9ob3N0X2lkeF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3RbMF0nLCB0cnVlPjsgLy8geyBpcDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjsgcG9ydDogbnVtYmVyIH1cbi8vIHR5cGUgVl9ob3N0X2lwX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaG9zdFswXS5pcCcsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfaG9zdF9pcF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3RbMF0uaXAnLCB0cnVlPjsgLy8gV3JpdGFibGVTaWduYWw8c3RyaW5nPlxuLy8gdHlwZSBWX2hvc3RfcG9ydF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3RbMF0ucG9ydCcsIGZhbHNlPjsgLy8gbnVtYmVyXG4vLyB0eXBlIFZfaG9zdF9wb3J0X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaG9zdFswXS5wb3J0JywgdHJ1ZT47IC8vIG51bWJlclxuXG4vLyAvLyBjdXJyZW5jeVxuLy8gdHlwZSBWX2N1cnJlbmN5X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeScsIGZhbHNlPjsgLy8geyBuYW1lOiBzdHJpbmc7IGNvZGU6IHN0cmluZzsgc3ltYm9sOiB7IC4uLiB9IH1cbi8vIHR5cGUgVl9jdXJyZW5jeV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3knLCB0cnVlPjsgLy8geyBuYW1lOiBzdHJpbmc7IGNvZGU6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47IHN5bWJvbDogV3JpdGFibGVTaWduYWw8eyAuLi4gfT4gfVxuLy8gdHlwZSBWX2N1cnJlbmN5X25hbWVfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5Lm5hbWUnLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX2N1cnJlbmN5X25hbWVfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5Lm5hbWUnLCB0cnVlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfY3VycmVuY3lfY29kZV9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuY29kZScsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfY3VycmVuY3lfY29kZV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuY29kZScsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxzdHJpbmc+XG5cbi8vIC8vIGN1cnJlbmN5LnN5bWJvbFxuLy8gdHlwZSBWX3N5bWJvbF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sJywgZmFsc2U+OyAvLyB7IHZpOiBzdHJpbmc7IGVuOiBzdHJpbmc7IGNuOiBzdHJpbmdbXTsganA6IHsgdmk6IHN0cmluZzsgZW46IHN0cmluZyB9W10gfVxuLy8gdHlwZSBWX3N5bWJvbF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHsgdmk6IHN0cmluZzsgZW46IHN0cmluZzsgY246IFdyaXRhYmxlU2lnbmFsPHN0cmluZ1tdPjsganA6IFdyaXRhYmxlU2lnbmFsPHsgdmk6IHN0cmluZzsgZW46IHN0cmluZyB9W10+IH0+XG4vLyB0eXBlIFZfc3ltYm9sX3ZpX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wudmknLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF92aV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLnZpJywgdHJ1ZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF9lbl9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmVuJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9zeW1ib2xfZW5fVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5lbicsIHRydWU+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9zeW1ib2xfY25fRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jbicsIGZhbHNlPjsgLy8gc3RyaW5nW11cbi8vIHR5cGUgVl9zeW1ib2xfY25fVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jbicsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxzdHJpbmdbXT5cbi8vIHR5cGUgVl9zeW1ib2xfY25faWR4X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuY25bMF0nLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF9jbl9pZHhfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jblswXScsIHRydWU+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9zeW1ib2xfanBfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5qcCcsIGZhbHNlPjsgLy8geyB2aTogc3RyaW5nOyBlbjogc3RyaW5nIH1bXVxuLy8gdHlwZSBWX3N5bWJvbF9qcF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmpwJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHsgdmk6IHN0cmluZzsgZW46IHN0cmluZyB9W10+XG4vLyB0eXBlIFZfc3ltYm9sX2pwX2lkeF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmpwWzBdJywgZmFsc2U+OyAvLyB7IHZpOiBzdHJpbmc7IGVuOiBzdHJpbmcgfVxuLy8gdHlwZSBWX3N5bWJvbF9qcF9pZHhfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5qcFswXScsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDx7IHZpOiBzdHJpbmc7IGVuOiBzdHJpbmcgfT5cbi8vIHR5cGUgVl9zeW1ib2xfanBfdmlfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5qcFswXS52aScsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfc3ltYm9sX2pwX3ZpX1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuanBbMF0udmknLCB0cnVlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfc3ltYm9sX2pwX2VuX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuanBbMF0uZW4nLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF9qcF9lbl9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmpwWzBdLmVuJywgdHJ1ZT47IC8vIHN0cmluZ1xuXG4vLyB0eXBlIFZfQXJyYXlfc3ltYm9sX2NuX0YgPSBHZXRWYWx1ZUF0UGF0aDxBcnJheTxUZXN0PiwgJ1swXS5jb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jbicsIGZhbHNlPjsgLy8gc3RyaW5nW11cbi8vIHR5cGUgVl9BcnJheV9zeW1ib2xfY25fVCA9IEdldFZhbHVlQXRQYXRoPEFycmF5PFRlc3Q+LCAnWzBdLmNvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmNuJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHN0cmluZ1tdPlxuLy8gdHlwZSBWX0FycmF5X3N5bWJvbF9jbl9pZHhfRiA9IEdldFZhbHVlQXRQYXRoPEFycmF5PFRlc3Q+LCAnWzBdLmNvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmNuWzBdJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9BcnJheV9zeW1ib2xfY25faWR4X1QgPSBHZXRWYWx1ZUF0UGF0aDxBcnJheTxUZXN0PiwgJ1swXS5jb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jblswXScsIHRydWU+OyAvLyBzdHJpbmdcblxuLy8gdHlwZSBwYXRoSUFzc2lnbm1lbnRJdGVtID0gUGF0aE9mPElBc3NpZ25tZW50SXRlbT47XG4vLyB0eXBlIHBhdGhJQXNzaWdubWVudEl0ZW0gPSBQYXRoT2Y8dW5rbm93bj47IC8vIHN0cmluZ1xuXG4vLyB0eXBlIFZfYXNzaWduZWVzX0YgPSBHZXRWYWx1ZUF0UGF0aDxJQXNzaWdubWVudEl0ZW0sICdhc3NpZ25lZXNbMF0nLCBmYWxzZT47IC8vIElBc3NpZ25lZVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-interfaces-types.mjs","sources":["../../../../libs-ui/interfaces-types/src/event-browser.interface.ts","../../../../libs-ui/interfaces-types/src/generic-utilities-for-path-value.type.ts","../../../../libs-ui/interfaces-types/src/language-support.type.ts","../../../../libs-ui/interfaces-types/src/libs-ui-interfaces-types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport interface IEvent extends Event, MouseEvent, IEventCustom, KeyboardEvent, ErrorEvent {\n target: IEventTarget;\n keyCode: number;\n dataTransfer?: DataTransfer;\n clipboardData?: DataTransfer;\n which: number;\n}\n\nexport interface IEventTarget extends EventTarget {\n value: any;\n selectionStart: number;\n scrollHeight: number;\n scrollTop: number;\n offsetHeight: number;\n style: any;\n files?: any;\n src?: string;\n innerHTML: any;\n textContent: string;\n parentElement: any;\n getAttribute: (key: string) => any;\n setAttribute: (key: string, value: any) => void;\n className: string;\n}\nexport interface IEventCustom {\n target: IEventTarget;\n data: any;\n keyCode?: number;\n fakeEvent?: boolean;\n which?: number;\n inputType?: 'deleteContentBackward' | 'insertText' | 'insertFromPaste' | 'insertCompositionText';\n preventDefault: () => void;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { Signal, WritableSignal } from '@angular/core';\nimport { Dayjs } from 'dayjs';\n\n/** ====================== Helpers: unwrap & shape ====================== **/\n\ntype IsEmptyObject<Obj> = [keyof Obj] extends [never] ? true : false;\n\n// Unwrap toàn bộ Signal\ntype UnwrapAllSignals<T> = T extends Signal<infer U> ? UnwrapAllSignals<U> : T;\n\n// Loại bỏ undefined | null sau khi unwrap 1 lớp Signal để soi shape\ntype Clean<T> = Exclude<UnwrapAllSignals<T>, undefined | null>;\n\n// Key dạng string\ntype StrKeys<T> = Extract<keyof T, string>;\n\n/** ====================== Array helpers ====================== **/\n\n// Lấy element type của mảng, tự làm sạch (bỏ undefined/null, unwrap Signal trước khi kiểm tra)\ntype ArrayElementRaw<T> = UnwrapAllSignals<Clean<T>> extends ReadonlyArray<infer U> ? U : UnwrapAllSignals<Clean<T>> extends (infer U)[] ? U : never;\n\n// Kiểm tra array-like sau khi unwrap toàn bộ Signal và làm sạch optional\ntype IsArrayLike<T> = UnwrapAllSignals<Clean<T>> extends readonly unknown[] ? true : UnwrapAllSignals<Clean<T>> extends unknown[] ? true : false;\n\n// Kiểm tra object không phải array sau khi unwrap toàn bộ Signal và làm sạch optional\ntype IsNonArrayObject<T> = UnwrapAllSignals<Clean<T>> extends object ? (UnwrapAllSignals<Clean<T>> extends readonly unknown[] ? false : UnwrapAllSignals<Clean<T>> extends unknown[] ? false : true) : false;\n\n/** ====================== DOM/Evt guard ====================== **/\n\ntype IsDOMType<T> = UnwrapAllSignals<T> extends Event | Node | Document | Element | Window | CSSStyleDeclaration | CSSRule | CSSStyleSheet ? true : false;\n\n/** ====================== Finalize (giữ Signal nếu cần) ====================== **/\n\ntype Finalize<T, R extends boolean> = R extends true ? T : UnwrapAllSignals<T>;\n\n/** ====================== Depth limiter (hybrid, mặc định 6) ====================== **/\n\ntype Dec<N extends number> = N extends 6 ? 5 : N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : N extends 2 ? 1 : N extends 1 ? 0 : 0;\n\n/** ====================== Path builders (Depth-limited) ====================== **/\n\n// Path cho array ở root/field\ntype PathForArray<T, Depth extends number> = [Depth] extends [0] ? never : `[${number}]` | (PathOf<ArrayElementRaw<T>, Dec<Depth>> extends never ? never : `[${number}].${PathOf<ArrayElementRaw<T>, Dec<Depth>>}`);\n\n// Path cho từng prop K tùy kiểu giá trị\ntype PathForProp<TProp, K extends string, Depth extends number> = [Depth] extends [0]\n ? K\n : IsArrayLike<TProp> extends true\n ? `${K}` | `${K}[${number}]` | (PathOf<ArrayElementRaw<TProp>, Dec<Depth>> extends never ? never : `${K}[${number}].${PathOf<ArrayElementRaw<TProp>, Dec<Depth>>}`)\n : IsNonArrayObject<TProp> extends true\n ? `${K}` | (PathOf<Clean<TProp>, Dec<Depth>> extends never ? never : `${K}.${PathOf<Clean<TProp>, Dec<Depth>>}`)\n : `${K}`;\n\n// Path cho object (map từng key)\ntype PathForObject<T, Depth extends number> = {\n [K in StrKeys<T>]: PathForProp<T[K], K, Depth>;\n}[StrKeys<T>];\n\n/** ====================== Public: PathOf (hybrid, Depth mặc định 6) ====================== **/\n\nexport type PathOf<TRaw, Depth extends number = 6> =\n IsEmptyObject<Clean<TRaw>> extends true\n ? any\n : IsDOMType<Clean<TRaw>> extends true\n ? any\n : [Depth] extends [0]\n ? never\n : UnwrapAllSignals<Clean<TRaw>> extends readonly unknown[] | unknown[]\n ? PathForArray<Clean<TRaw>, Depth>\n : UnwrapAllSignals<Clean<TRaw>> extends object\n ? PathForObject<UnwrapAllSignals<Clean<TRaw>>, Depth>\n : string;\n\n/** ====================== Resolve giá trị theo path ====================== **/\n\n// GetInternal: đi theo string path để resolve type giá trị cuối cùng\ntype GetInternal<TRaw, P extends string, R extends boolean> =\n // [x].Rest (đánh index vào root array)\n P extends `[${infer I}].${infer Rest}`\n ? I extends `${number}`\n ? GetInternal<ArrayElementRaw<TRaw>, Rest, R>\n : any\n : // [x] (chỉ index)\n P extends `[${infer I}]`\n ? I extends `${number}`\n ? Finalize<ArrayElementRaw<TRaw>, R>\n : any\n : // K[x].Rest (đánh index vào field mảng)\n P extends `${infer K}[${infer I}].${infer Rest}`\n ? K extends StrKeys<Clean<UnwrapAllSignals<TRaw>>>\n ? I extends `${number}`\n ? GetInternal<ArrayElementRaw<Clean<UnwrapAllSignals<TRaw>>[K]>, Rest, R>\n : any\n : any\n : // K.Rest (đi sâu vào object)\n P extends `${infer K}.${infer Rest}`\n ? K extends StrKeys<Clean<UnwrapAllSignals<TRaw>>>\n ? IsArrayLike<Clean<UnwrapAllSignals<TRaw>>[K]> extends true\n ? any // không hỗ trợ dot vào phần tử mảng khi thiếu index\n : GetInternal<Clean<UnwrapAllSignals<TRaw>>[K], Rest, R>\n : any\n : // K[<number>] (kết thúc ở index)\n P extends `${infer K}[${infer I}]`\n ? K extends StrKeys<Clean<UnwrapAllSignals<TRaw>>>\n ? I extends `${number}`\n ? Finalize<ArrayElementRaw<Clean<UnwrapAllSignals<TRaw>>[K]>, R>\n : any\n : any\n : // K (kết thúc ở key)\n P extends `${infer K}`\n ? K extends StrKeys<Clean<UnwrapAllSignals<TRaw>>>\n ? Finalize<Clean<UnwrapAllSignals<TRaw>>[K], R>\n : any\n : any;\n\n/** ====================== Public: GetValueAtPath & GetReturnType ====================== **/\n\n// Resolve kiểu giá trị tại path P. Nếu R=true, giữ nguyên Signal; mặc định R=false sẽ unwrap toàn bộ Signal.\nexport type GetValueAtPath<TRaw, P extends PathOf<TRaw>, R extends boolean = false> = GetInternal<TRaw, P, R>;\n\n// Kiểu trả về của get() dựa trên defaultValue D\nexport type GetReturnType<O, P extends PathOf<O>, KS extends boolean, D> = D extends undefined ? GetValueAtPath<O, P, KS> : D;\n\n// Kiểm tra các kiểu dữ liệu đặc biệt để chỉ wrap signal 1 cấp\ntype IsSpecificType<T> = T extends\n | Event\n | Node\n | Document\n | Element\n | Window\n | CSSStyleDeclaration\n | CSSRule\n | CSSStyleSheet\n | HttpParams\n | Dayjs\n | Date\n | ((...args: any[]) => any)\n | Promise<any>\n | Map<any, any>\n | Set<any>\n | WeakMap<any, any>\n | WeakSet<any>\n | RegExp\n ? true\n : false;\n\n// Đưa kiểu dữ liệu bất kỳ về dạng signal, Nếu P = true đưa cả dữ liệu premetive_type về dạng signal\nexport type SignalOf<T, P extends boolean = true, F extends boolean = false> = T extends null | undefined\n ? T\n : IsSpecificType<Clean<T>> extends true\n ? F extends true\n ? WritableSignal<T>\n : T\n : Clean<T> extends Array<infer U>\n ? F extends true\n ? WritableSignal<Array<SignalOf<Clean<U>, P, true>>>\n : Array<SignalOf<Clean<U>, P, true>>\n : Clean<T> extends object\n ? F extends true\n ? WritableSignal<{ [K in keyof Clean<T>]: SignalOf<Clean<Clean<T>[K]>, P, true> }>\n : { [K in keyof Clean<T>]: SignalOf<Clean<Clean<T>[K]>, P, true> }\n : Clean<T> extends string | number | boolean\n ? P extends true\n ? WritableSignal<Clean<T>>\n : Clean<T>\n : WritableSignal<Clean<T>>;\n\nexport type NonSignalOf<T> = T extends null | undefined ? T : Clean<T> extends Array<infer U> ? Array<NonSignalOf<Clean<U>>> : Clean<T> extends object ? { [K in keyof Clean<T>]: NonSignalOf<Clean<Clean<T>[K]>> } : Clean<T>;\n\n/** ====================== (Tuỳ chọn) Ví dụ nhanh ====================== **/\n\n// export interface IComment {\n// comments?: WritableSignal<ISubComment>;\n// }\n\n// export interface ISubComment {\n// store?: WritableSignal<Array<WritableSignal<IComment>>>;\n// data?: WritableSignal<Array<WritableSignal<IComment>>>;\n// specific_temp_data?: WritableSignal<Array<WritableSignal<IComment>>>;\n// paging?: WritableSignal<{\n// cursors?: WritableSignal<{\n// after?: WritableSignal<string>;\n// before?: WritableSignal<string>;\n// }>;\n// before?: WritableSignal<string>;\n// after?: WritableSignal<string>;\n// next?: WritableSignal<string>;\n// previous?: WritableSignal<string>;\n// }>;\n// summary?: WritableSignal<{\n// can_comment?: WritableSignal<boolean>;\n// canorder_comment?: WritableSignal<string>;\n// total_count?: WritableSignal<number>;\n// }>;\n// }\n\n// type V_comments_F = GetValueAtPath<IComment, 'comments', false>; // ISubComment\n// type V_comments_T = GetValueAtPath<IComment, 'comments', true>; // WritableSignal<ISubComment>\n\n// type V_comments_store_F = GetValueAtPath<IComment, 'comments.data', false>; // Array<WritableSignal<IComment>>\n// type V_comments_store_T = GetValueAtPath<IComment, 'comments.data', true>; // WritableSignal<Array<WritableSignal<IComment>>>\n\n// export interface Test {\n// specific_query?: WritableSignal<IAssignmentItemQuery>;\n\n// data: WritableSignal<Array<WritableSignal<IAssignmentItem>>>;\n\n// index: number;\n// info: {\n// name: string;\n// age: number;\n// };\n// city: WritableSignal<{\n// name: string;\n// country: string;\n// }>;\n// address: WritableSignal<{\n// ip: WritableSignal<string>;\n// port: WritableSignal<number>;\n// }>;\n// owner: Array<string>;\n// support: Array<WritableSignal<string>>;\n// host: Array<{\n// ip: WritableSignal<string>;\n// port: number;\n// }>;\n\n// country: WritableSignal<\n// Array<\n// WritableSignal<{\n// name: WritableSignal<{\n// vi: string;\n// en: string;\n// }>;\n// code: WritableSignal<{\n// vi: WritableSignal<string>;\n// en: WritableSignal<string>;\n// }>;\n// flag: WritableSignal<string>;\n// phone_code: string;\n// currency: {\n// name: string;\n// code: WritableSignal<string>;\n// symbol: WritableSignal<{\n// vi: string;\n// en: string;\n// cn: WritableSignal<Array<string>>;\n// jp: WritableSignal<\n// Array<\n// WritableSignal<{\n// vi: string;\n// en: string;\n// }>\n// >\n// >;\n// }>;\n// };\n// }>\n// >\n// >;\n// }\n\n// interface IAssignmentItem {\n// id: WritableSignal<string>;\n// name: WritableSignal<string>;\n// description: WritableSignal<string>;\n// created_at: WritableSignal<string>;\n// updated_at: WritableSignal<string>;\n// assignees?: WritableSignal<Array<WritableSignal<IAssignee>>>;\n// }\n\n// export interface IAssignee {\n// assignee_id?: WritableSignal<string>;\n// conversation_id?: WritableSignal<string>;\n// created_time?: WritableSignal<string>;\n// created_user?: WritableSignal<string>;\n// id?: WritableSignal<string>;\n// note?: WritableSignal<string>;\n// status?: WritableSignal<number>;\n// assign_tag_activity_status?: WritableSignal<number>;\n// comment_id?: WritableSignal<string>;\n// rating_id?: WritableSignal<string>;\n// }\n\n// export interface IAssignmentItemQuery {\n// per_page: WritableSignal<number>;\n// after_token?: WritableSignal<string>;\n// before_token?: WritableSignal<string>;\n// search?: WritableSignal<string>;\n// search_index?: WritableSignal<number>;\n// }\n\n// type V_index_F = GetValueAtPath<Test, 'index', false>; // number\n// type V_index_T = GetValueAtPath<Test, 'index', true>; // number\n\n// type V_info_F = GetValueAtPath<Test, 'info', false>; // { name: string; age: number }\n// type V_info_T = GetValueAtPath<Test, 'info', true>; // { name: string; age: number }\n// type V_info_name_F = GetValueAtPath<Test, 'info.name', false>; // string\n// type V_info_name_T = GetValueAtPath<Test, 'info.name', true>; // string\n// type V_info_age_F = GetValueAtPath<Test, 'info.age', false>; // number\n// type V_info_age_T = GetValueAtPath<Test, 'info.age', true>; // number\n\n// // City (signal-wrapped object with plain fields)\n// type V_city_F = GetValueAtPath<Test, 'city', false>; // { name: string; country: string }\n// type V_city_T = GetValueAtPath<Test, 'city', true>; // WritableSignal<{ name: string; country: string }>\n// type V_city_name_F = GetValueAtPath<Test, 'city.name', false>; // string\n// type V_city_name_T = GetValueAtPath<Test, 'city.name', true>; // string\n// type V_city_country_F = GetValueAtPath<Test, 'city.country', false>; // string\n// type V_city_country_T = GetValueAtPath<Test, 'city.country', true>; // string\n\n// // Address (signal-wrapped object with signal leaves)\n// type V_address_F = GetValueAtPath<Test, 'address', false>; // { ip: string; port: number }\n// type V_address_T = GetValueAtPath<Test, 'address', true>; // WritableSignal<{ ip: WritableSignal<string>; port: WritableSignal<number> }>\n// type V_address_ip_F = GetValueAtPath<Test, 'address.ip', false>; // string\n// type V_address_ip_T = GetValueAtPath<Test, 'address.ip', true>; // WritableSignal<string>\n// type V_address_port_F = GetValueAtPath<Test, 'address.port', false>; // number\n// type V_address_port_T = GetValueAtPath<Test, 'address.port', true>; // WritableSignal<number>\n\n// // Owner (array of primitives)\n// type V_owner_F = GetValueAtPath<Test, 'owner', false>; // string[]\n// type V_owner_T = GetValueAtPath<Test, 'owner', true>; // string[]\n// type V_owner_idx_F = GetValueAtPath<Test, 'owner[0]', false>; // string\n// type V_owner_idx_T = GetValueAtPath<Test, 'owner[0]', true>; // string\n\n// // Support (array of signals)\n// type V_support_F = GetValueAtPath<Test, 'support', false>; // string[]\n// type V_support_T = GetValueAtPath<Test, 'support', true>; // WritableSignal<string>[]\n// type V_support_idx_F = GetValueAtPath<Test, 'support[0]', false>; // string\n// type V_support_idx_T = GetValueAtPath<Test, 'support[0]', true>; // WritableSignal<string>\n\n// // Host (array of objects with mixed leaves)\n// type V_host_F = GetValueAtPath<Test, 'host', false>; // { ip: string; port: number }[]\n// type V_host_T = GetValueAtPath<Test, 'host', true>; // { ip: WritableSignal<string>; port: number }[]\n// type V_host_idx_F = GetValueAtPath<Test, 'host[0]', false>; // { ip: string; port: number }\n// type V_host_idx_T = GetValueAtPath<Test, 'host[0]', true>; // { ip: WritableSignal<string>; port: number }\n// type V_host_ip_F = GetValueAtPath<Test, 'host[0].ip', false>; // string\n// type V_host_ip_T = GetValueAtPath<Test, 'host[0].ip', true>; // WritableSignal<string>\n// type V_host_port_F = GetValueAtPath<Test, 'host[0].port', false>; // number\n// type V_host_port_T = GetValueAtPath<Test, 'host[0].port', true>; // number\n\n// // currency\n// type V_currency_F = GetValueAtPath<Test, 'country[0].currency', false>; // { name: string; code: string; symbol: { ... } }\n// type V_currency_T = GetValueAtPath<Test, 'country[0].currency', true>; // { name: string; code: WritableSignal<string>; symbol: WritableSignal<{ ... }> }\n// type V_currency_name_F = GetValueAtPath<Test, 'country[0].currency.name', false>; // string\n// type V_currency_name_T = GetValueAtPath<Test, 'country[0].currency.name', true>; // string\n// type V_currency_code_F = GetValueAtPath<Test, 'country[0].currency.code', false>; // string\n// type V_currency_code_T = GetValueAtPath<Test, 'country[0].currency.code', true>; // WritableSignal<string>\n\n// // currency.symbol\n// type V_symbol_F = GetValueAtPath<Test, 'country[0].currency.symbol', false>; // { vi: string; en: string; cn: string[]; jp: { vi: string; en: string }[] }\n// type V_symbol_T = GetValueAtPath<Test, 'country[0].currency.symbol', true>; // WritableSignal<{ vi: string; en: string; cn: WritableSignal<string[]>; jp: WritableSignal<{ vi: string; en: string }[]> }>\n// type V_symbol_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.vi', false>; // string\n// type V_symbol_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.vi', true>; // string\n// type V_symbol_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.en', false>; // string\n// type V_symbol_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.en', true>; // string\n// type V_symbol_cn_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn', false>; // string[]\n// type V_symbol_cn_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn', true>; // WritableSignal<string[]>\n// type V_symbol_cn_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', false>; // string\n// type V_symbol_cn_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', true>; // string\n// type V_symbol_jp_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp', false>; // { vi: string; en: string }[]\n// type V_symbol_jp_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp', true>; // WritableSignal<{ vi: string; en: string }[]>\n// type V_symbol_jp_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', false>; // { vi: string; en: string }\n// type V_symbol_jp_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', true>; // WritableSignal<{ vi: string; en: string }>\n// type V_symbol_jp_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', false>; // string\n// type V_symbol_jp_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', true>; // string\n// type V_symbol_jp_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', false>; // string\n// type V_symbol_jp_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', true>; // string\n\n// type V_Array_symbol_cn_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', false>; // string[]\n// type V_Array_symbol_cn_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', true>; // WritableSignal<string[]>\n// type V_Array_symbol_cn_idx_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', false>; // string\n// type V_Array_symbol_cn_idx_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', true>; // string\n\n// type pathIAssignmentItem = PathOf<IAssignmentItem>;\n// type pathIAssignmentItem = PathOf<unknown>; // string\n\n// type V_assignees_F = GetValueAtPath<IAssignmentItem, 'assignees[0]', false>; // IAssignee\n","export type TYPE_LANGUAGE_SUPPORT =\n | 'vi' // Tiếng Việt\n | 'en'; // Tiếng Anh\n// | \"fr\" // Tiếng Pháp\n// | \"de\" // Tiếng Đức\n// | \"es\" // Tiếng Tây Ban Nha\n// | \"zh\" // Tiếng Trung (Giản thể)\n// | \"zh-TW\" // Tiếng Trung (Phồn thể)\n// | \"ja\" // Tiếng Nhật\n// | \"ko\" // Tiếng Hàn\n// | \"ru\" // Tiếng Nga\n// | \"it\" // Tiếng Ý\n// | \"pt\" // Tiếng Bồ Đào Nha\n// | \"th\" // Tiếng Thái\n// | \"id\" // Tiếng Indonesia\n// | \"ms\" // Tiếng Malaysia\n// | \"ar\" // Tiếng Ả Rập\n// | \"hi\" // Tiếng Hindi\n// | \"bn\" // Tiếng Bengal\n// | \"tr\" // Tiếng Thổ Nhĩ Kỳ\n// | \"nl\" // Tiếng Hà Lan\n// | \"km\" // Tiếng Khmer (Campuchia)\n// | \"lo\" // Tiếng Lào\n// | \"my\" // Tiếng Miến Điện (Myanmar)\n// | \"tl\" // Tiếng Tagalog (Philippines)\n// | \"ceb\" // Tiếng Cebuano (Philippines)\n// | \"jv\" // Tiếng Java (Indonesia)\n// | \"su\"; // Tiếng Sundanese (Indonesia)\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;;AC2KA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;;ACvXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;;AAEG"}
1
+ {"version":3,"file":"libs-ui-interfaces-types.mjs","sources":["../../../../libs-ui/interfaces-types/src/event-browser.interface.ts","../../../../libs-ui/interfaces-types/src/generic-utilities-for-path-value.type.ts","../../../../libs-ui/interfaces-types/src/language-support.type.ts","../../../../libs-ui/interfaces-types/src/libs-ui-interfaces-types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport interface IEvent extends Event, MouseEvent, IEventCustom, KeyboardEvent, ErrorEvent {\n target: IEventTarget;\n keyCode: number;\n dataTransfer?: DataTransfer;\n clipboardData?: DataTransfer;\n which: number;\n}\n\nexport interface IEventTarget extends EventTarget {\n value: any;\n selectionStart: number;\n scrollHeight: number;\n scrollTop: number;\n offsetHeight: number;\n style: any;\n files?: any;\n src?: string;\n innerHTML: any;\n textContent: string;\n parentElement: any;\n getAttribute: (key: string) => any;\n setAttribute: (key: string, value: any) => void;\n className: string;\n}\nexport interface IEventCustom {\n target: IEventTarget;\n data: any;\n keyCode?: number;\n fakeEvent?: boolean;\n which?: number;\n inputType?: 'deleteContentBackward' | 'insertText' | 'insertFromPaste' | 'insertCompositionText';\n preventDefault: () => void;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { Signal, WritableSignal } from '@angular/core';\nimport { Dayjs } from 'dayjs';\n\n/** ====================== Helpers: unwrap & shape ====================== **/\n\ntype IsEmptyObject<Obj> = [keyof Obj] extends [never] ? true : false;\n\n// Unwrap toàn bộ Signal\ntype UnwrapAllSignals<T> = T extends Signal<infer U> ? UnwrapAllSignals<U> : T;\n\n// Loại bỏ undefined | null sau khi unwrap 1 lớp Signal để soi shape\ntype Clean<T> = Exclude<UnwrapAllSignals<T>, undefined | null>;\n\n// Key dạng string\ntype StrKeys<T> = Extract<keyof T, string>;\n\n/** ====================== Array helpers ====================== **/\n\n// Lấy element type của mảng, tự làm sạch (bỏ undefined/null, unwrap Signal trước khi kiểm tra)\ntype ArrayElementRaw<T> = UnwrapAllSignals<Clean<T>> extends ReadonlyArray<infer U> ? U : UnwrapAllSignals<Clean<T>> extends (infer U)[] ? U : never;\n\n// Kiểm tra array-like sau khi unwrap toàn bộ Signal và làm sạch optional\ntype IsArrayLike<T> = UnwrapAllSignals<Clean<T>> extends readonly unknown[] ? true : UnwrapAllSignals<Clean<T>> extends unknown[] ? true : false;\n\n// Kiểm tra object không phải array sau khi unwrap toàn bộ Signal và làm sạch optional\ntype IsNonArrayObject<T> = UnwrapAllSignals<Clean<T>> extends object ? (UnwrapAllSignals<Clean<T>> extends readonly unknown[] ? false : UnwrapAllSignals<Clean<T>> extends unknown[] ? false : true) : false;\n\n/** ====================== DOM/Evt guard ====================== **/\n\ntype IsDOMType<T> = UnwrapAllSignals<T> extends Event | Node | Document | Element | Window | CSSStyleDeclaration | CSSRule | CSSStyleSheet ? true : false;\n\n/** ====================== Finalize (giữ Signal nếu cần) ====================== **/\n\ntype Finalize<T, R extends boolean> = R extends true ? T : UnwrapAllSignals<T>;\n\n/** ====================== Depth limiter (hybrid, mặc định 6) ====================== **/\n\ntype Dec<N extends number> = N extends 6 ? 5 : N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : N extends 2 ? 1 : N extends 1 ? 0 : 0;\n\n/** ====================== Path builders (Depth-limited) ====================== **/\n\n// Path cho array ở root/field\ntype PathForArray<T, Depth extends number> = [Depth] extends [0] ? never : `[${number}]` | (PathOf<ArrayElementRaw<T>, Dec<Depth>> extends never ? never : `[${number}].${PathOf<ArrayElementRaw<T>, Dec<Depth>>}`);\n\n// Path cho từng prop K tùy kiểu giá trị\ntype PathForProp<TProp, K extends string, Depth extends number> = [Depth] extends [0]\n ? K\n : IsArrayLike<TProp> extends true\n ? `${K}` | `${K}[${number}]` | (PathOf<ArrayElementRaw<TProp>, Dec<Depth>> extends never ? never : `${K}[${number}].${PathOf<ArrayElementRaw<TProp>, Dec<Depth>>}`)\n : IsNonArrayObject<TProp> extends true\n ? `${K}` | (PathOf<Clean<TProp>, Dec<Depth>> extends never ? never : `${K}.${PathOf<Clean<TProp>, Dec<Depth>>}`)\n : `${K}`;\n\n// Path cho object (map từng key)\ntype PathForObject<T, Depth extends number> = {\n [K in StrKeys<T>]: PathForProp<T[K], K, Depth>;\n}[StrKeys<T>];\n\n/** ====================== Public: PathOf (hybrid, Depth mặc định 6) ====================== **/\n\nexport type PathOf<TRaw, Depth extends number = 6> =\n IsEmptyObject<Clean<TRaw>> extends true\n ? any\n : IsDOMType<Clean<TRaw>> extends true\n ? any\n : [Depth] extends [0]\n ? never\n : UnwrapAllSignals<Clean<TRaw>> extends readonly unknown[] | unknown[]\n ? PathForArray<Clean<TRaw>, Depth>\n : UnwrapAllSignals<Clean<TRaw>> extends object\n ? PathForObject<UnwrapAllSignals<Clean<TRaw>>, Depth>\n : string;\n\n/** ====================== Resolve giá trị theo path ====================== **/\n\n// GetInternal: đi theo string path để resolve type giá trị cuối cùng\ntype GetInternal<TRaw, P extends string, R extends boolean> =\n // [x].Rest (đánh index vào root array)\n P extends `[${infer I}].${infer Rest}`\n ? I extends `${number}`\n ? GetInternal<ArrayElementRaw<TRaw>, Rest, R>\n : any\n : // [x] (chỉ index)\n P extends `[${infer I}]`\n ? I extends `${number}`\n ? Finalize<ArrayElementRaw<TRaw>, R>\n : any\n : // K[x].Rest (đánh index vào field mảng)\n P extends `${infer K}[${infer I}].${infer Rest}`\n ? K extends StrKeys<Clean<UnwrapAllSignals<TRaw>>>\n ? I extends `${number}`\n ? GetInternal<ArrayElementRaw<Clean<UnwrapAllSignals<TRaw>>[K]>, Rest, R>\n : any\n : any\n : // K.Rest (đi sâu vào object)\n P extends `${infer K}.${infer Rest}`\n ? K extends StrKeys<Clean<UnwrapAllSignals<TRaw>>>\n ? IsArrayLike<Clean<UnwrapAllSignals<TRaw>>[K]> extends true\n ? any // không hỗ trợ dot vào phần tử mảng khi thiếu index\n : GetInternal<Clean<UnwrapAllSignals<TRaw>>[K], Rest, R>\n : any\n : // K[<number>] (kết thúc ở index)\n P extends `${infer K}[${infer I}]`\n ? K extends StrKeys<Clean<UnwrapAllSignals<TRaw>>>\n ? I extends `${number}`\n ? Finalize<ArrayElementRaw<Clean<UnwrapAllSignals<TRaw>>[K]>, R>\n : any\n : any\n : // K (kết thúc ở key)\n P extends `${infer K}`\n ? K extends StrKeys<Clean<UnwrapAllSignals<TRaw>>>\n ? Finalize<Clean<UnwrapAllSignals<TRaw>>[K], R>\n : any\n : any;\n\n/** ====================== Public: GetValueAtPath & GetReturnType ====================== **/\n\n// Resolve kiểu giá trị tại path P. Nếu R=true, giữ nguyên Signal; mặc định R=false sẽ unwrap toàn bộ Signal.\nexport type GetValueAtPath<TRaw, P extends PathOf<TRaw>, R extends boolean = false> = GetInternal<TRaw, P, R>;\n\n// Kiểu trả về của get() dựa trên defaultValue D\nexport type GetReturnType<O, P extends PathOf<O>, KS extends boolean, D> = D extends undefined ? GetValueAtPath<O, P, KS> : D;\n\n// Kiểm tra các kiểu dữ liệu đặc biệt để chỉ wrap signal 1 cấp\ntype IsSpecificType<T> = T extends\n | Event\n | Node\n | Document\n | Element\n | Window\n | CSSStyleDeclaration\n | CSSRule\n | CSSStyleSheet\n | HttpParams\n | Dayjs\n | Date\n | ((...args: any[]) => any)\n | Promise<any>\n | Map<any, any>\n | Set<any>\n | WeakMap<any, any>\n | WeakSet<any>\n | RegExp\n | File\n | Blob\n | FileList\n | FormData\n ? true\n : false;\n\n// Đưa kiểu dữ liệu bất kỳ về dạng signal, Nếu P = true đưa cả dữ liệu premetive_type về dạng signal\nexport type SignalOf<T, P extends boolean = true, F extends boolean = false> = T extends null | undefined\n ? T\n : IsSpecificType<Clean<T>> extends true\n ? F extends true\n ? WritableSignal<T>\n : T\n : Clean<T> extends Array<infer U>\n ? F extends true\n ? WritableSignal<Array<SignalOf<Clean<U>, P, true>>>\n : Array<SignalOf<Clean<U>, P, true>>\n : Clean<T> extends object\n ? F extends true\n ? WritableSignal<{ [K in keyof Clean<T>]: SignalOf<Clean<Clean<T>[K]>, P, true> }>\n : { [K in keyof Clean<T>]: SignalOf<Clean<Clean<T>[K]>, P, true> }\n : Clean<T> extends string | number | boolean\n ? P extends true\n ? WritableSignal<Clean<T>>\n : Clean<T>\n : WritableSignal<Clean<T>>;\n\nexport type NonSignalOf<T> = T extends null | undefined ? T : Clean<T> extends Array<infer U> ? Array<NonSignalOf<Clean<U>>> : Clean<T> extends object ? { [K in keyof Clean<T>]: NonSignalOf<Clean<Clean<T>[K]>> } : Clean<T>;\n\n/** ====================== (Tuỳ chọn) Ví dụ nhanh ====================== **/\n\n// export interface IComment {\n// comments?: WritableSignal<ISubComment>;\n// }\n\n// export interface ISubComment {\n// store?: WritableSignal<Array<WritableSignal<IComment>>>;\n// data?: WritableSignal<Array<WritableSignal<IComment>>>;\n// specific_temp_data?: WritableSignal<Array<WritableSignal<IComment>>>;\n// paging?: WritableSignal<{\n// cursors?: WritableSignal<{\n// after?: WritableSignal<string>;\n// before?: WritableSignal<string>;\n// }>;\n// before?: WritableSignal<string>;\n// after?: WritableSignal<string>;\n// next?: WritableSignal<string>;\n// previous?: WritableSignal<string>;\n// }>;\n// summary?: WritableSignal<{\n// can_comment?: WritableSignal<boolean>;\n// canorder_comment?: WritableSignal<string>;\n// total_count?: WritableSignal<number>;\n// }>;\n// }\n\n// type V_comments_F = GetValueAtPath<IComment, 'comments', false>; // ISubComment\n// type V_comments_T = GetValueAtPath<IComment, 'comments', true>; // WritableSignal<ISubComment>\n\n// type V_comments_store_F = GetValueAtPath<IComment, 'comments.data', false>; // Array<WritableSignal<IComment>>\n// type V_comments_store_T = GetValueAtPath<IComment, 'comments.data', true>; // WritableSignal<Array<WritableSignal<IComment>>>\n\n// export interface Test {\n// specific_query?: WritableSignal<IAssignmentItemQuery>;\n\n// data: WritableSignal<Array<WritableSignal<IAssignmentItem>>>;\n\n// index: number;\n// info: {\n// name: string;\n// age: number;\n// };\n// city: WritableSignal<{\n// name: string;\n// country: string;\n// }>;\n// address: WritableSignal<{\n// ip: WritableSignal<string>;\n// port: WritableSignal<number>;\n// }>;\n// owner: Array<string>;\n// support: Array<WritableSignal<string>>;\n// host: Array<{\n// ip: WritableSignal<string>;\n// port: number;\n// }>;\n\n// country: WritableSignal<\n// Array<\n// WritableSignal<{\n// name: WritableSignal<{\n// vi: string;\n// en: string;\n// }>;\n// code: WritableSignal<{\n// vi: WritableSignal<string>;\n// en: WritableSignal<string>;\n// }>;\n// flag: WritableSignal<string>;\n// phone_code: string;\n// currency: {\n// name: string;\n// code: WritableSignal<string>;\n// symbol: WritableSignal<{\n// vi: string;\n// en: string;\n// cn: WritableSignal<Array<string>>;\n// jp: WritableSignal<\n// Array<\n// WritableSignal<{\n// vi: string;\n// en: string;\n// }>\n// >\n// >;\n// }>;\n// };\n// }>\n// >\n// >;\n// }\n\n// interface IAssignmentItem {\n// id: WritableSignal<string>;\n// name: WritableSignal<string>;\n// description: WritableSignal<string>;\n// created_at: WritableSignal<string>;\n// updated_at: WritableSignal<string>;\n// assignees?: WritableSignal<Array<WritableSignal<IAssignee>>>;\n// }\n\n// export interface IAssignee {\n// assignee_id?: WritableSignal<string>;\n// conversation_id?: WritableSignal<string>;\n// created_time?: WritableSignal<string>;\n// created_user?: WritableSignal<string>;\n// id?: WritableSignal<string>;\n// note?: WritableSignal<string>;\n// status?: WritableSignal<number>;\n// assign_tag_activity_status?: WritableSignal<number>;\n// comment_id?: WritableSignal<string>;\n// rating_id?: WritableSignal<string>;\n// }\n\n// export interface IAssignmentItemQuery {\n// per_page: WritableSignal<number>;\n// after_token?: WritableSignal<string>;\n// before_token?: WritableSignal<string>;\n// search?: WritableSignal<string>;\n// search_index?: WritableSignal<number>;\n// }\n\n// type V_index_F = GetValueAtPath<Test, 'index', false>; // number\n// type V_index_T = GetValueAtPath<Test, 'index', true>; // number\n\n// type V_info_F = GetValueAtPath<Test, 'info', false>; // { name: string; age: number }\n// type V_info_T = GetValueAtPath<Test, 'info', true>; // { name: string; age: number }\n// type V_info_name_F = GetValueAtPath<Test, 'info.name', false>; // string\n// type V_info_name_T = GetValueAtPath<Test, 'info.name', true>; // string\n// type V_info_age_F = GetValueAtPath<Test, 'info.age', false>; // number\n// type V_info_age_T = GetValueAtPath<Test, 'info.age', true>; // number\n\n// // City (signal-wrapped object with plain fields)\n// type V_city_F = GetValueAtPath<Test, 'city', false>; // { name: string; country: string }\n// type V_city_T = GetValueAtPath<Test, 'city', true>; // WritableSignal<{ name: string; country: string }>\n// type V_city_name_F = GetValueAtPath<Test, 'city.name', false>; // string\n// type V_city_name_T = GetValueAtPath<Test, 'city.name', true>; // string\n// type V_city_country_F = GetValueAtPath<Test, 'city.country', false>; // string\n// type V_city_country_T = GetValueAtPath<Test, 'city.country', true>; // string\n\n// // Address (signal-wrapped object with signal leaves)\n// type V_address_F = GetValueAtPath<Test, 'address', false>; // { ip: string; port: number }\n// type V_address_T = GetValueAtPath<Test, 'address', true>; // WritableSignal<{ ip: WritableSignal<string>; port: WritableSignal<number> }>\n// type V_address_ip_F = GetValueAtPath<Test, 'address.ip', false>; // string\n// type V_address_ip_T = GetValueAtPath<Test, 'address.ip', true>; // WritableSignal<string>\n// type V_address_port_F = GetValueAtPath<Test, 'address.port', false>; // number\n// type V_address_port_T = GetValueAtPath<Test, 'address.port', true>; // WritableSignal<number>\n\n// // Owner (array of primitives)\n// type V_owner_F = GetValueAtPath<Test, 'owner', false>; // string[]\n// type V_owner_T = GetValueAtPath<Test, 'owner', true>; // string[]\n// type V_owner_idx_F = GetValueAtPath<Test, 'owner[0]', false>; // string\n// type V_owner_idx_T = GetValueAtPath<Test, 'owner[0]', true>; // string\n\n// // Support (array of signals)\n// type V_support_F = GetValueAtPath<Test, 'support', false>; // string[]\n// type V_support_T = GetValueAtPath<Test, 'support', true>; // WritableSignal<string>[]\n// type V_support_idx_F = GetValueAtPath<Test, 'support[0]', false>; // string\n// type V_support_idx_T = GetValueAtPath<Test, 'support[0]', true>; // WritableSignal<string>\n\n// // Host (array of objects with mixed leaves)\n// type V_host_F = GetValueAtPath<Test, 'host', false>; // { ip: string; port: number }[]\n// type V_host_T = GetValueAtPath<Test, 'host', true>; // { ip: WritableSignal<string>; port: number }[]\n// type V_host_idx_F = GetValueAtPath<Test, 'host[0]', false>; // { ip: string; port: number }\n// type V_host_idx_T = GetValueAtPath<Test, 'host[0]', true>; // { ip: WritableSignal<string>; port: number }\n// type V_host_ip_F = GetValueAtPath<Test, 'host[0].ip', false>; // string\n// type V_host_ip_T = GetValueAtPath<Test, 'host[0].ip', true>; // WritableSignal<string>\n// type V_host_port_F = GetValueAtPath<Test, 'host[0].port', false>; // number\n// type V_host_port_T = GetValueAtPath<Test, 'host[0].port', true>; // number\n\n// // currency\n// type V_currency_F = GetValueAtPath<Test, 'country[0].currency', false>; // { name: string; code: string; symbol: { ... } }\n// type V_currency_T = GetValueAtPath<Test, 'country[0].currency', true>; // { name: string; code: WritableSignal<string>; symbol: WritableSignal<{ ... }> }\n// type V_currency_name_F = GetValueAtPath<Test, 'country[0].currency.name', false>; // string\n// type V_currency_name_T = GetValueAtPath<Test, 'country[0].currency.name', true>; // string\n// type V_currency_code_F = GetValueAtPath<Test, 'country[0].currency.code', false>; // string\n// type V_currency_code_T = GetValueAtPath<Test, 'country[0].currency.code', true>; // WritableSignal<string>\n\n// // currency.symbol\n// type V_symbol_F = GetValueAtPath<Test, 'country[0].currency.symbol', false>; // { vi: string; en: string; cn: string[]; jp: { vi: string; en: string }[] }\n// type V_symbol_T = GetValueAtPath<Test, 'country[0].currency.symbol', true>; // WritableSignal<{ vi: string; en: string; cn: WritableSignal<string[]>; jp: WritableSignal<{ vi: string; en: string }[]> }>\n// type V_symbol_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.vi', false>; // string\n// type V_symbol_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.vi', true>; // string\n// type V_symbol_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.en', false>; // string\n// type V_symbol_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.en', true>; // string\n// type V_symbol_cn_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn', false>; // string[]\n// type V_symbol_cn_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn', true>; // WritableSignal<string[]>\n// type V_symbol_cn_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', false>; // string\n// type V_symbol_cn_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', true>; // string\n// type V_symbol_jp_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp', false>; // { vi: string; en: string }[]\n// type V_symbol_jp_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp', true>; // WritableSignal<{ vi: string; en: string }[]>\n// type V_symbol_jp_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', false>; // { vi: string; en: string }\n// type V_symbol_jp_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', true>; // WritableSignal<{ vi: string; en: string }>\n// type V_symbol_jp_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', false>; // string\n// type V_symbol_jp_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', true>; // string\n// type V_symbol_jp_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', false>; // string\n// type V_symbol_jp_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', true>; // string\n\n// type V_Array_symbol_cn_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', false>; // string[]\n// type V_Array_symbol_cn_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', true>; // WritableSignal<string[]>\n// type V_Array_symbol_cn_idx_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', false>; // string\n// type V_Array_symbol_cn_idx_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', true>; // string\n\n// type pathIAssignmentItem = PathOf<IAssignmentItem>;\n// type pathIAssignmentItem = PathOf<unknown>; // string\n\n// type V_assignees_F = GetValueAtPath<IAssignmentItem, 'assignees[0]', false>; // IAssignee\n","export type TYPE_LANGUAGE_SUPPORT =\n | 'vi' // Tiếng Việt\n | 'en'; // Tiếng Anh\n// | \"fr\" // Tiếng Pháp\n// | \"de\" // Tiếng Đức\n// | \"es\" // Tiếng Tây Ban Nha\n// | \"zh\" // Tiếng Trung (Giản thể)\n// | \"zh-TW\" // Tiếng Trung (Phồn thể)\n// | \"ja\" // Tiếng Nhật\n// | \"ko\" // Tiếng Hàn\n// | \"ru\" // Tiếng Nga\n// | \"it\" // Tiếng Ý\n// | \"pt\" // Tiếng Bồ Đào Nha\n// | \"th\" // Tiếng Thái\n// | \"id\" // Tiếng Indonesia\n// | \"ms\" // Tiếng Malaysia\n// | \"ar\" // Tiếng Ả Rập\n// | \"hi\" // Tiếng Hindi\n// | \"bn\" // Tiếng Bengal\n// | \"tr\" // Tiếng Thổ Nhĩ Kỳ\n// | \"nl\" // Tiếng Hà Lan\n// | \"km\" // Tiếng Khmer (Campuchia)\n// | \"lo\" // Tiếng Lào\n// | \"my\" // Tiếng Miến Điện (Myanmar)\n// | \"tl\" // Tiếng Tagalog (Philippines)\n// | \"ceb\" // Tiếng Cebuano (Philippines)\n// | \"jv\" // Tiếng Java (Indonesia)\n// | \"su\"; // Tiếng Sundanese (Indonesia)\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;;AC+KA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;;AC3XA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;;AAEG"}
@@ -29,7 +29,7 @@ type GetInternal<TRaw, P extends string, R extends boolean> = P extends `[${infe
29
29
  /** ====================== Public: GetValueAtPath & GetReturnType ====================== **/
30
30
  export type GetValueAtPath<TRaw, P extends PathOf<TRaw>, R extends boolean = false> = GetInternal<TRaw, P, R>;
31
31
  export type GetReturnType<O, P extends PathOf<O>, KS extends boolean, D> = D extends undefined ? GetValueAtPath<O, P, KS> : D;
32
- type IsSpecificType<T> = T extends Event | Node | Document | Element | Window | CSSStyleDeclaration | CSSRule | CSSStyleSheet | HttpParams | Dayjs | Date | ((...args: any[]) => any) | Promise<any> | Map<any, any> | Set<any> | WeakMap<any, any> | WeakSet<any> | RegExp ? true : false;
32
+ type IsSpecificType<T> = T extends Event | Node | Document | Element | Window | CSSStyleDeclaration | CSSRule | CSSStyleSheet | HttpParams | Dayjs | Date | ((...args: any[]) => any) | Promise<any> | Map<any, any> | Set<any> | WeakMap<any, any> | WeakSet<any> | RegExp | File | Blob | FileList | FormData ? true : false;
33
33
  export type SignalOf<T, P extends boolean = true, F extends boolean = false> = T extends null | undefined ? T : IsSpecificType<Clean<T>> extends true ? F extends true ? WritableSignal<T> : T : Clean<T> extends Array<infer U> ? F extends true ? WritableSignal<Array<SignalOf<Clean<U>, P, true>>> : Array<SignalOf<Clean<U>, P, true>> : Clean<T> extends object ? F extends true ? WritableSignal<{
34
34
  [K in keyof Clean<T>]: SignalOf<Clean<Clean<T>[K]>, P, true>;
35
35
  }> : {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libs-ui/interfaces-types",
3
- "version": "0.2.348-7",
3
+ "version": "0.2.350-0",
4
4
  "peerDependencies": {
5
5
  "rxjs": "~7.8.0"
6
6
  },