p6-cdk-namer 1.3.47 → 1.3.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +4 -4
- package/lib/p6cdknamer.js +1 -1
- package/node_modules/@aws-sdk/client-iam/dist-cjs/endpoint/ruleset.js +1 -1
- package/node_modules/@aws-sdk/client-iam/dist-cjs/index.js +15 -15
- package/node_modules/@aws-sdk/client-iam/dist-es/endpoint/ruleset.js +1 -1
- package/node_modules/@aws-sdk/client-iam/dist-es/models/models_0.js +12 -12
- package/node_modules/@aws-sdk/client-iam/dist-es/protocols/Aws_query.js +3 -3
- package/node_modules/@aws-sdk/client-iam/dist-types/commands/AddClientIDToOpenIDConnectProviderCommand.d.ts +4 -0
- package/node_modules/@aws-sdk/client-iam/dist-types/commands/RemoveClientIDFromOpenIDConnectProviderCommand.d.ts +4 -0
- package/node_modules/@aws-sdk/client-iam/dist-types/commands/UpdateOpenIDConnectProviderThumbprintCommand.d.ts +4 -0
- package/node_modules/@aws-sdk/client-iam/dist-types/commands/UpdateSAMLProviderCommand.d.ts +4 -0
- package/node_modules/@aws-sdk/client-iam/dist-types/models/models_0.d.ts +13 -13
- package/node_modules/@aws-sdk/client-iam/dist-types/ts3.4/models/models_0.d.ts +10 -10
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/core/package.json +3 -3
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-http/package.json +5 -5
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-ini/package.json +8 -8
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/middleware-user-agent/package.json +4 -4
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/nested-clients/package.json +12 -12
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/util-endpoints/dist-cjs/index.js +3 -0
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/util-endpoints/dist-cjs/lib/aws/partitions.json +3 -0
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partitions.json +3 -0
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/util-endpoints/package.json +1 -1
- package/node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/core/package.json +2 -2
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/middleware-endpoint/package.json +2 -2
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/middleware-retry/package.json +2 -2
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/node-http-handler/dist-cjs/index.js +17 -12
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +16 -11
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +1 -1
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/node-http-handler/package.json +1 -1
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/smithy-client/package.json +4 -4
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/util-defaults-mode-browser/package.json +2 -2
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/util-defaults-mode-node/package.json +2 -2
- package/node_modules/@aws-sdk/client-iam/node_modules/@smithy/util-stream/package.json +2 -2
- package/node_modules/@aws-sdk/client-iam/package.json +13 -13
- package/node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/core/package.json +3 -3
- package/node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/middleware-user-agent/package.json +4 -4
- package/node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints/dist-cjs/index.js +3 -0
- package/node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints/dist-cjs/lib/aws/partitions.json +3 -0
- package/node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partitions.json +3 -0
- package/node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints/package.json +1 -1
- package/node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/core/package.json +2 -2
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-endpoint/package.json +2 -2
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-retry/package.json +2 -2
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler/dist-cjs/index.js +17 -12
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +16 -11
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +1 -1
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler/package.json +1 -1
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/smithy-client/package.json +4 -4
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-browser/package.json +2 -2
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-node/package.json +2 -2
- package/node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream/package.json +2 -2
- package/node_modules/@aws-sdk/client-sso/package.json +12 -12
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/core/package.json +3 -3
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/middleware-user-agent/package.json +4 -4
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/package.json +12 -12
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-endpoints/dist-cjs/index.js +3 -0
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-endpoints/dist-cjs/lib/aws/partitions.json +3 -0
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partitions.json +3 -0
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-endpoints/package.json +1 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/core/package.json +2 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-endpoint/package.json +2 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-retry/package.json +2 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler/dist-cjs/index.js +17 -12
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +16 -11
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +1 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler/package.json +1 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/smithy-client/package.json +4 -4
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-browser/package.json +2 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-node/package.json +2 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-stream/package.json +2 -2
- package/node_modules/@aws-sdk/token-providers/package.json +3 -3
- package/node_modules/cdk-iam-floyd/README.md +4 -4
- package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/cdk-iam-floyd.d.ts +2 -0
- package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/cdk-iam-floyd.js +5 -1
- package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/iam-floyd.d.ts +2 -0
- package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/iam-floyd.js +3 -1
- package/node_modules/cdk-iam-floyd/lib/generated/index.d.ts +1 -0
- package/node_modules/cdk-iam-floyd/lib/generated/index.js +5 -3
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/auroradsql.d.ts +24 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/auroradsql.js +34 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchobservabilityadminservice.d.ts +2 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchobservabilityadminservice.js +6 -6
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elementalmedialive.d.ts +24 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elementalmedialive.js +34 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/quicksight.d.ts +10 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/quicksight.js +11 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/rtbfabric.d.ts +436 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/rtbfabric.js +559 -0
- package/node_modules/cdk-iam-floyd/package.json +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,559 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Rtbfabric = void 0;
|
|
4
|
+
const shared_1 = require("../../shared");
|
|
5
|
+
/**
|
|
6
|
+
* Statement provider for service [rtbfabric](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrtbfabric.html).
|
|
7
|
+
*
|
|
8
|
+
* @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
|
|
9
|
+
*/
|
|
10
|
+
class Rtbfabric extends shared_1.PolicyStatement {
|
|
11
|
+
/**
|
|
12
|
+
* Grants permission to accept a link invitation from another Gateway
|
|
13
|
+
*
|
|
14
|
+
* Access Level: Write
|
|
15
|
+
*
|
|
16
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_AcceptLink.html
|
|
17
|
+
*/
|
|
18
|
+
toAcceptLink() {
|
|
19
|
+
return this.to('AcceptLink');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Grants permission to create an inbound external link for a responder gateway
|
|
23
|
+
*
|
|
24
|
+
* Access Level: Write
|
|
25
|
+
*
|
|
26
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_CreateInboundExternalLink.html
|
|
27
|
+
*/
|
|
28
|
+
toCreateInboundExternalLink() {
|
|
29
|
+
return this.to('CreateInboundExternalLink');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Grants permission to create a new link between RTB applications
|
|
33
|
+
*
|
|
34
|
+
* Access Level: Write
|
|
35
|
+
*
|
|
36
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_CreateLink.html
|
|
37
|
+
*/
|
|
38
|
+
toCreateLink() {
|
|
39
|
+
return this.to('CreateLink');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Grants permission to create an outbound external link for a requester gateway to connect to external public responder endpoints
|
|
43
|
+
*
|
|
44
|
+
* Access Level: Write
|
|
45
|
+
*
|
|
46
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_CreateOutboundExternalLink.html
|
|
47
|
+
*/
|
|
48
|
+
toCreateOutboundExternalLink() {
|
|
49
|
+
return this.to('CreateOutboundExternalLink');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Grants permission to create a requester gateway
|
|
53
|
+
*
|
|
54
|
+
* Access Level: Write
|
|
55
|
+
*
|
|
56
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_CreateRequesterGateway.html
|
|
57
|
+
*/
|
|
58
|
+
toCreateRequesterGateway() {
|
|
59
|
+
return this.to('CreateRequesterGateway');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Grants permission to create a responder gateway
|
|
63
|
+
*
|
|
64
|
+
* Access Level: Write
|
|
65
|
+
*
|
|
66
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_CreateResponderGateway.html
|
|
67
|
+
*/
|
|
68
|
+
toCreateResponderGateway() {
|
|
69
|
+
return this.to('CreateResponderGateway');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Grants permission to delete an inbound external link
|
|
73
|
+
*
|
|
74
|
+
* Access Level: Write
|
|
75
|
+
*
|
|
76
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_DeleteInboundExternalLink.html
|
|
77
|
+
*/
|
|
78
|
+
toDeleteInboundExternalLink() {
|
|
79
|
+
return this.to('DeleteInboundExternalLink');
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Grants permission to delete a link between RTB applications
|
|
83
|
+
*
|
|
84
|
+
* Access Level: Write
|
|
85
|
+
*
|
|
86
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_DeleteLink.html
|
|
87
|
+
*/
|
|
88
|
+
toDeleteLink() {
|
|
89
|
+
return this.to('DeleteLink');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Grants permission to delete an outbound external link
|
|
93
|
+
*
|
|
94
|
+
* Access Level: Write
|
|
95
|
+
*
|
|
96
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_DeleteOutboundExternalLink.html
|
|
97
|
+
*/
|
|
98
|
+
toDeleteOutboundExternalLink() {
|
|
99
|
+
return this.to('DeleteOutboundExternalLink');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Grants permission to delete a requester gateway
|
|
103
|
+
*
|
|
104
|
+
* Access Level: Write
|
|
105
|
+
*
|
|
106
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_DeleteRequesterGateway.html
|
|
107
|
+
*/
|
|
108
|
+
toDeleteRequesterGateway() {
|
|
109
|
+
return this.to('DeleteRequesterGateway');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Grants permission to delete a responder gateway
|
|
113
|
+
*
|
|
114
|
+
* Access Level: Write
|
|
115
|
+
*
|
|
116
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_DeleteResponderGateway.html
|
|
117
|
+
*/
|
|
118
|
+
toDeleteResponderGateway() {
|
|
119
|
+
return this.to('DeleteResponderGateway');
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Grants permission to retrieve information about an inbound external link
|
|
123
|
+
*
|
|
124
|
+
* Access Level: Read
|
|
125
|
+
*
|
|
126
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_GetInboundExternalLink.html
|
|
127
|
+
*/
|
|
128
|
+
toGetInboundExternalLink() {
|
|
129
|
+
return this.to('GetInboundExternalLink');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Grants permission to retrieve information about a link between RTB applications
|
|
133
|
+
*
|
|
134
|
+
* Access Level: Read
|
|
135
|
+
*
|
|
136
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_GetLink.html
|
|
137
|
+
*/
|
|
138
|
+
toGetLink() {
|
|
139
|
+
return this.to('GetLink');
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Grants permission to retrieve information about an outbound external link
|
|
143
|
+
*
|
|
144
|
+
* Access Level: Read
|
|
145
|
+
*
|
|
146
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_GetOutboundExternalLink.html
|
|
147
|
+
*/
|
|
148
|
+
toGetOutboundExternalLink() {
|
|
149
|
+
return this.to('GetOutboundExternalLink');
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Grants permission to retrieve information about a requester gateway
|
|
153
|
+
*
|
|
154
|
+
* Access Level: Read
|
|
155
|
+
*
|
|
156
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_GetRequesterGateway.html
|
|
157
|
+
*/
|
|
158
|
+
toGetRequesterGateway() {
|
|
159
|
+
return this.to('GetRequesterGateway');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Grants permission to retrieve information about a responder gateway
|
|
163
|
+
*
|
|
164
|
+
* Access Level: Read
|
|
165
|
+
*
|
|
166
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_GetResponderGateway.html
|
|
167
|
+
*/
|
|
168
|
+
toGetResponderGateway() {
|
|
169
|
+
return this.to('GetResponderGateway');
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Grants permission to list links associated with an RTB application
|
|
173
|
+
*
|
|
174
|
+
* Access Level: List
|
|
175
|
+
*
|
|
176
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_ListLinks.html
|
|
177
|
+
*/
|
|
178
|
+
toListLinks() {
|
|
179
|
+
return this.to('ListLinks');
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Grants permission to list requester gateways with optional filtering and pagination
|
|
183
|
+
*
|
|
184
|
+
* Access Level: List
|
|
185
|
+
*
|
|
186
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_ListRequesterGateways.html
|
|
187
|
+
*/
|
|
188
|
+
toListRequesterGateways() {
|
|
189
|
+
return this.to('ListRequesterGateways');
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Grants permission to list responder gateways with optional filtering and pagination
|
|
193
|
+
*
|
|
194
|
+
* Access Level: List
|
|
195
|
+
*
|
|
196
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_ListResponderGateways.html
|
|
197
|
+
*/
|
|
198
|
+
toListResponderGateways() {
|
|
199
|
+
return this.to('ListResponderGateways');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Grants permission to list tags for a resource
|
|
203
|
+
*
|
|
204
|
+
* Access Level: Read
|
|
205
|
+
*
|
|
206
|
+
* Possible conditions:
|
|
207
|
+
* - .ifAwsResourceTag()
|
|
208
|
+
*
|
|
209
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_ListTagsForResource.html
|
|
210
|
+
*/
|
|
211
|
+
toListTagsForResource() {
|
|
212
|
+
return this.to('ListTagsForResource');
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Grants permission to reject a link request between RTB applications
|
|
216
|
+
*
|
|
217
|
+
* Access Level: Write
|
|
218
|
+
*
|
|
219
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_RejectLink.html
|
|
220
|
+
*/
|
|
221
|
+
toRejectLink() {
|
|
222
|
+
return this.to('RejectLink');
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Grants permission to assign one or more tags (key-value pairs) to the specified resource
|
|
226
|
+
*
|
|
227
|
+
* Access Level: Tagging
|
|
228
|
+
*
|
|
229
|
+
* Possible conditions:
|
|
230
|
+
* - .ifAwsRequestTag()
|
|
231
|
+
* - .ifAwsResourceTag()
|
|
232
|
+
* - .ifAwsTagKeys()
|
|
233
|
+
*
|
|
234
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_TagResource.html
|
|
235
|
+
*/
|
|
236
|
+
toTagResource() {
|
|
237
|
+
return this.to('TagResource');
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Grants permission to remove a tag or tags from a resource
|
|
241
|
+
*
|
|
242
|
+
* Access Level: Tagging
|
|
243
|
+
*
|
|
244
|
+
* Possible conditions:
|
|
245
|
+
* - .ifAwsResourceTag()
|
|
246
|
+
* - .ifAwsTagKeys()
|
|
247
|
+
*
|
|
248
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_UntagResource.html
|
|
249
|
+
*/
|
|
250
|
+
toUntagResource() {
|
|
251
|
+
return this.to('UntagResource');
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Grants permission to update configuration settings for an existing link
|
|
255
|
+
*
|
|
256
|
+
* Access Level: Write
|
|
257
|
+
*
|
|
258
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_UpdateLink.html
|
|
259
|
+
*/
|
|
260
|
+
toUpdateLink() {
|
|
261
|
+
return this.to('UpdateLink');
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Grants permission to update a link module flow
|
|
265
|
+
*
|
|
266
|
+
* Access Level: Write
|
|
267
|
+
*
|
|
268
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_UpdateLinkModuleFlow.html
|
|
269
|
+
*/
|
|
270
|
+
toUpdateLinkModuleFlow() {
|
|
271
|
+
return this.to('UpdateLinkModuleFlow');
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Grants permission to update a requester gateway
|
|
275
|
+
*
|
|
276
|
+
* Access Level: Write
|
|
277
|
+
*
|
|
278
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_UpdateRequesterGateway.html
|
|
279
|
+
*/
|
|
280
|
+
toUpdateRequesterGateway() {
|
|
281
|
+
return this.to('UpdateRequesterGateway');
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Grants permission to update a responder gateway
|
|
285
|
+
*
|
|
286
|
+
* Access Level: Write
|
|
287
|
+
*
|
|
288
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/api/API_UpdateResponderGateway.html
|
|
289
|
+
*/
|
|
290
|
+
toUpdateResponderGateway() {
|
|
291
|
+
return this.to('UpdateResponderGateway');
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Adds a resource of type InboundExternalLink to the statement
|
|
295
|
+
*
|
|
296
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/links.html
|
|
297
|
+
*
|
|
298
|
+
* @param gatewayId - Identifier for the gatewayId.
|
|
299
|
+
* @param linkId - Identifier for the linkId.
|
|
300
|
+
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
|
|
301
|
+
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
|
|
302
|
+
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
|
|
303
|
+
*
|
|
304
|
+
* Possible conditions:
|
|
305
|
+
* - .ifInboundExternalLinkLinkId()
|
|
306
|
+
* - .ifResponderGatewayGatewayId()
|
|
307
|
+
*/
|
|
308
|
+
onInboundExternalLink(gatewayId, linkId, account, region, partition) {
|
|
309
|
+
return this.on(`arn:${partition ?? this.defaultPartition}:rtbfabric:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:gateway/${gatewayId}/link/${linkId}`);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Adds a resource of type Link to the statement
|
|
313
|
+
*
|
|
314
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/links.html
|
|
315
|
+
*
|
|
316
|
+
* @param gatewayId - Identifier for the gatewayId.
|
|
317
|
+
* @param linkId - Identifier for the linkId.
|
|
318
|
+
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
|
|
319
|
+
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
|
|
320
|
+
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
|
|
321
|
+
*
|
|
322
|
+
* Possible conditions:
|
|
323
|
+
* - .ifLinkLinkId()
|
|
324
|
+
* - .ifRequesterGatewayGatewayId()
|
|
325
|
+
* - .ifResponderGatewayGatewayId()
|
|
326
|
+
*/
|
|
327
|
+
onLink(gatewayId, linkId, account, region, partition) {
|
|
328
|
+
return this.on(`arn:${partition ?? this.defaultPartition}:rtbfabric:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:gateway/${gatewayId}/link/${linkId}`);
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Adds a resource of type OutboundExternalLink to the statement
|
|
332
|
+
*
|
|
333
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/links.html
|
|
334
|
+
*
|
|
335
|
+
* @param gatewayId - Identifier for the gatewayId.
|
|
336
|
+
* @param linkId - Identifier for the linkId.
|
|
337
|
+
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
|
|
338
|
+
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
|
|
339
|
+
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
|
|
340
|
+
*
|
|
341
|
+
* Possible conditions:
|
|
342
|
+
* - .ifOutboundExternalLinkLinkId()
|
|
343
|
+
* - .ifRequesterGatewayGatewayId()
|
|
344
|
+
*/
|
|
345
|
+
onOutboundExternalLink(gatewayId, linkId, account, region, partition) {
|
|
346
|
+
return this.on(`arn:${partition ?? this.defaultPartition}:rtbfabric:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:gateway/${gatewayId}/link/${linkId}`);
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Adds a resource of type RequesterGateway to the statement
|
|
350
|
+
*
|
|
351
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/working-with-requester-rtb-applications.html
|
|
352
|
+
*
|
|
353
|
+
* @param gatewayId - Identifier for the gatewayId.
|
|
354
|
+
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
|
|
355
|
+
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
|
|
356
|
+
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
|
|
357
|
+
*
|
|
358
|
+
* Possible conditions:
|
|
359
|
+
* - .ifRequesterGatewayGatewayId()
|
|
360
|
+
*/
|
|
361
|
+
onRequesterGateway(gatewayId, account, region, partition) {
|
|
362
|
+
return this.on(`arn:${partition ?? this.defaultPartition}:rtbfabric:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:gateway/${gatewayId}`);
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Adds a resource of type ResponderGateway to the statement
|
|
366
|
+
*
|
|
367
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/working-with-responder-rtb-applications.html
|
|
368
|
+
*
|
|
369
|
+
* @param gatewayId - Identifier for the gatewayId.
|
|
370
|
+
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
|
|
371
|
+
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
|
|
372
|
+
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
|
|
373
|
+
*
|
|
374
|
+
* Possible conditions:
|
|
375
|
+
* - .ifResponderGatewayGatewayId()
|
|
376
|
+
*/
|
|
377
|
+
onResponderGateway(gatewayId, account, region, partition) {
|
|
378
|
+
return this.on(`arn:${partition ?? this.defaultPartition}:rtbfabric:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:gateway/${gatewayId}`);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Filters access by a tag key and value pair that is allowed in the request
|
|
382
|
+
*
|
|
383
|
+
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag
|
|
384
|
+
*
|
|
385
|
+
* Applies to actions:
|
|
386
|
+
* - .toTagResource()
|
|
387
|
+
*
|
|
388
|
+
* @param tagKey The tag key to check
|
|
389
|
+
* @param value The value(s) to check
|
|
390
|
+
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
|
|
391
|
+
*/
|
|
392
|
+
ifAwsRequestTag(tagKey, value, operator) {
|
|
393
|
+
return this.if(`aws:RequestTag/${tagKey}`, value, operator ?? 'StringLike');
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Filters access by a tag key and value pair of a resource
|
|
397
|
+
*
|
|
398
|
+
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag
|
|
399
|
+
*
|
|
400
|
+
* Applies to actions:
|
|
401
|
+
* - .toListTagsForResource()
|
|
402
|
+
* - .toTagResource()
|
|
403
|
+
* - .toUntagResource()
|
|
404
|
+
*
|
|
405
|
+
* @param tagKey The tag key to check
|
|
406
|
+
* @param value The value(s) to check
|
|
407
|
+
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
|
|
408
|
+
*/
|
|
409
|
+
ifAwsResourceTag(tagKey, value, operator) {
|
|
410
|
+
return this.if(`aws:ResourceTag/${tagKey}`, value, operator ?? 'StringLike');
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Filters access by a list of tag keys that are allowed in the request
|
|
414
|
+
*
|
|
415
|
+
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys
|
|
416
|
+
*
|
|
417
|
+
* Applies to actions:
|
|
418
|
+
* - .toTagResource()
|
|
419
|
+
* - .toUntagResource()
|
|
420
|
+
*
|
|
421
|
+
* @param value The value(s) to check
|
|
422
|
+
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
|
|
423
|
+
*/
|
|
424
|
+
ifAwsTagKeys(value, operator) {
|
|
425
|
+
return this.if(`aws:TagKeys`, value, operator ?? 'StringLike');
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Filters access by gateway identifier supporting rtb-gw-* formats
|
|
429
|
+
*
|
|
430
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
|
|
431
|
+
*
|
|
432
|
+
* @param value The value(s) to check
|
|
433
|
+
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
|
|
434
|
+
*/
|
|
435
|
+
ifInboundExternalLinkGatewayId(value, operator) {
|
|
436
|
+
return this.if(`InboundExternalLinkGatewayId`, value, operator ?? 'StringLike');
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Filters access by InboundExternalLink resource linkId identifier
|
|
440
|
+
*
|
|
441
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
|
|
442
|
+
*
|
|
443
|
+
* Applies to resource types:
|
|
444
|
+
* - InboundExternalLink
|
|
445
|
+
*
|
|
446
|
+
* @param value The value(s) to check
|
|
447
|
+
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
|
|
448
|
+
*/
|
|
449
|
+
ifInboundExternalLinkLinkId(value, operator) {
|
|
450
|
+
return this.if(`InboundExternalLinkLinkId`, value, operator ?? 'StringLike');
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Filters access by Link resource linkId identifier
|
|
454
|
+
*
|
|
455
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
|
|
456
|
+
*
|
|
457
|
+
* Applies to resource types:
|
|
458
|
+
* - Link
|
|
459
|
+
*
|
|
460
|
+
* @param value The value(s) to check
|
|
461
|
+
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
|
|
462
|
+
*/
|
|
463
|
+
ifLinkLinkId(value, operator) {
|
|
464
|
+
return this.if(`LinkLinkId`, value, operator ?? 'StringLike');
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Filters access by OutboundExternalLink resource linkId identifier
|
|
468
|
+
*
|
|
469
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
|
|
470
|
+
*
|
|
471
|
+
* Applies to resource types:
|
|
472
|
+
* - OutboundExternalLink
|
|
473
|
+
*
|
|
474
|
+
* @param value The value(s) to check
|
|
475
|
+
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
|
|
476
|
+
*/
|
|
477
|
+
ifOutboundExternalLinkLinkId(value, operator) {
|
|
478
|
+
return this.if(`OutboundExternalLinkLinkId`, value, operator ?? 'StringLike');
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Filters access by gateway identifier supporting rtb-gw-* formats
|
|
482
|
+
*
|
|
483
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
|
|
484
|
+
*
|
|
485
|
+
* Applies to resource types:
|
|
486
|
+
* - Link
|
|
487
|
+
* - OutboundExternalLink
|
|
488
|
+
* - RequesterGateway
|
|
489
|
+
*
|
|
490
|
+
* @param value The value(s) to check
|
|
491
|
+
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
|
|
492
|
+
*/
|
|
493
|
+
ifRequesterGatewayGatewayId(value, operator) {
|
|
494
|
+
return this.if(`RequesterGatewayGatewayId`, value, operator ?? 'StringLike');
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Filters access by gateway identifier supporting rtb-gw-* formats
|
|
498
|
+
*
|
|
499
|
+
* https://docs.aws.amazon.com/rtb-fabric/latest/userguide/security_iam_service-with-iam.html
|
|
500
|
+
*
|
|
501
|
+
* Applies to resource types:
|
|
502
|
+
* - InboundExternalLink
|
|
503
|
+
* - Link
|
|
504
|
+
* - ResponderGateway
|
|
505
|
+
*
|
|
506
|
+
* @param value The value(s) to check
|
|
507
|
+
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
|
|
508
|
+
*/
|
|
509
|
+
ifResponderGatewayGatewayId(value, operator) {
|
|
510
|
+
return this.if(`ResponderGatewayGatewayId`, value, operator ?? 'StringLike');
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Statement provider for service [rtbfabric](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrtbfabric.html).
|
|
514
|
+
*
|
|
515
|
+
*/
|
|
516
|
+
constructor(props) {
|
|
517
|
+
super(props);
|
|
518
|
+
this.servicePrefix = 'rtbfabric';
|
|
519
|
+
this.accessLevelList = {
|
|
520
|
+
Write: [
|
|
521
|
+
'AcceptLink',
|
|
522
|
+
'CreateInboundExternalLink',
|
|
523
|
+
'CreateLink',
|
|
524
|
+
'CreateOutboundExternalLink',
|
|
525
|
+
'CreateRequesterGateway',
|
|
526
|
+
'CreateResponderGateway',
|
|
527
|
+
'DeleteInboundExternalLink',
|
|
528
|
+
'DeleteLink',
|
|
529
|
+
'DeleteOutboundExternalLink',
|
|
530
|
+
'DeleteRequesterGateway',
|
|
531
|
+
'DeleteResponderGateway',
|
|
532
|
+
'RejectLink',
|
|
533
|
+
'UpdateLink',
|
|
534
|
+
'UpdateLinkModuleFlow',
|
|
535
|
+
'UpdateRequesterGateway',
|
|
536
|
+
'UpdateResponderGateway'
|
|
537
|
+
],
|
|
538
|
+
Read: [
|
|
539
|
+
'GetInboundExternalLink',
|
|
540
|
+
'GetLink',
|
|
541
|
+
'GetOutboundExternalLink',
|
|
542
|
+
'GetRequesterGateway',
|
|
543
|
+
'GetResponderGateway',
|
|
544
|
+
'ListTagsForResource'
|
|
545
|
+
],
|
|
546
|
+
List: [
|
|
547
|
+
'ListLinks',
|
|
548
|
+
'ListRequesterGateways',
|
|
549
|
+
'ListResponderGateways'
|
|
550
|
+
],
|
|
551
|
+
Tagging: [
|
|
552
|
+
'TagResource',
|
|
553
|
+
'UntagResource'
|
|
554
|
+
]
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
exports.Rtbfabric = Rtbfabric;
|
|
559
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnRiZmFicmljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicnRiZmFicmljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlDQUF5RDtBQUd6RDs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsd0JBQWU7SUFHNUM7Ozs7OztPQU1HO0lBQ0ksWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLDJCQUEyQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLDRCQUE0QjtRQUNqQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksd0JBQXdCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx3QkFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLDJCQUEyQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLDRCQUE0QjtRQUNqQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsNEJBQTRCLENB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QUN6QixxQkFBcUI7Z0JBQ3JCLHFCQUFxQjtnQkFDckIscUJBQXFCO2FBQ3RCO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLFdBQVc7Z0JBQ1gsdUJBQXVCO2dCQUN2Qix1QkFBdUI7YUFDeEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsYUFBYTtnQkFDYixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQztJQWlQRixDQUFDO0NBQ0Y7QUE5a0JELDhCQThrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW3J0YmZhYnJpY10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYXdzcnRiZmFicmljLmh0bWwpLlxuICpcbiAqIEBwYXJhbSBzaWQgW1NJRF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19zaWQuaHRtbCkgb2YgdGhlIHN0YXRlbWVudFxuICovXG5leHBvcnQgY2xhc3MgUnRiZmFicmljIGV4dGVuZHMgUG9saWN5U3RhdGVtZW50IHtcbiAgcHVibGljIHNlcnZpY2VQcmVmaXggPSAncnRiZmFicmljJztcblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWNjZXB0IGEgbGluayBpbnZpdGF0aW9uIGZyb20gYW5vdGhlciBHYXRld2F5XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3J0Yi1mYWJyaWMvbGF0ZXN0L2FwaS9BUElfQWNjZXB0TGluay5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9BY2NlcHRMaW5rKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdBY2NlcHRMaW5rJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuIGluYm91bmQgZXh0ZXJuYWwgbGluayBmb3IgYSByZXNwb25kZXIgZ2F0ZXdheVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZUluYm91bmRFeHRlcm5hbExpbmsuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlSW5ib3VuZEV4dGVybmFsTGluaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlSW5ib3VuZEV4dGVybmFsTGluaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBsaW5rIGJldHdlZW4gUlRCIGFwcGxpY2F0aW9uc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZUxpbmsuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlTGluaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlTGluaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhbiBvdXRib3VuZCBleHRlcm5hbCBsaW5rIGZvciBhIHJlcXVlc3RlciBnYXRld2F5IHRvIGNvbm5lY3QgdG8gZXh0ZXJuYWwgcHVibGljIHJlc3BvbmRlciBlbmRwb2ludHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9DcmVhdGVPdXRib3VuZEV4dGVybmFsTGluay5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVPdXRib3VuZEV4dGVybmFsTGluaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlT3V0Ym91bmRFeHRlcm5hbExpbmsnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSByZXF1ZXN0ZXIgZ2F0ZXdheVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVJlcXVlc3RlckdhdGV3YXkuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlUmVxdWVzdGVyR2F0ZXdheSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlUmVxdWVzdGVyR2F0ZXdheScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHJlc3BvbmRlciBnYXRld2F5XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3J0Yi1mYWJyaWMvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlUmVzcG9uZGVyR2F0ZXdheS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVSZXNwb25kZXJHYXRld2F5KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVSZXNwb25kZXJHYXRld2F5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGFuIGluYm91bmQgZXh0ZXJuYWwgbGlua1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC9hcGkvQVBJX0RlbGV0ZUluYm91bmRFeHRlcm5hbExpbmsuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlSW5ib3VuZEV4dGVybmFsTGluaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlSW5ib3VuZEV4dGVybmFsTGluaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGxpbmsgYmV0d2VlbiBSVEIgYXBwbGljYXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3J0Yi1mYWJyaWMvbGF0ZXN0L2FwaS9BUElfRGVsZXRlTGluay5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVMaW5rKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVMaW5rJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGFuIG91dGJvdW5kIGV4dGVybmFsIGxpbmtcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9EZWxldGVPdXRib3VuZEV4dGVybmFsTGluay5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVPdXRib3VuZEV4dGVybmFsTGluaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlT3V0Ym91bmRFeHRlcm5hbExpbmsnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSByZXF1ZXN0ZXIgZ2F0ZXdheVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC9hcGkvQVBJX0RlbGV0ZVJlcXVlc3RlckdhdGV3YXkuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlUmVxdWVzdGVyR2F0ZXdheSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlUmVxdWVzdGVyR2F0ZXdheScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHJlc3BvbmRlciBnYXRld2F5XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3J0Yi1mYWJyaWMvbGF0ZXN0L2FwaS9BUElfRGVsZXRlUmVzcG9uZGVyR2F0ZXdheS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVSZXNwb25kZXJHYXRld2F5KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVSZXNwb25kZXJHYXRld2F5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYW4gaW5ib3VuZCBleHRlcm5hbCBsaW5rXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9HZXRJbmJvdW5kRXh0ZXJuYWxMaW5rLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldEluYm91bmRFeHRlcm5hbExpbmsoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldEluYm91bmRFeHRlcm5hbExpbmsnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhIGxpbmsgYmV0d2VlbiBSVEIgYXBwbGljYXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9HZXRMaW5rLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldExpbmsoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldExpbmsnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhbiBvdXRib3VuZCBleHRlcm5hbCBsaW5rXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9HZXRPdXRib3VuZEV4dGVybmFsTGluay5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRPdXRib3VuZEV4dGVybmFsTGluaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0T3V0Ym91bmRFeHRlcm5hbExpbmsnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhIHJlcXVlc3RlciBnYXRld2F5XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9HZXRSZXF1ZXN0ZXJHYXRld2F5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFJlcXVlc3RlckdhdGV3YXkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFJlcXVlc3RlckdhdGV3YXknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhIHJlc3BvbmRlciBnYXRld2F5XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9HZXRSZXNwb25kZXJHYXRld2F5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFJlc3BvbmRlckdhdGV3YXkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFJlc3BvbmRlckdhdGV3YXknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGxpbmtzIGFzc29jaWF0ZWQgd2l0aCBhbiBSVEIgYXBwbGljYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC9hcGkvQVBJX0xpc3RMaW5rcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0TGlua3MoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RMaW5rcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgcmVxdWVzdGVyIGdhdGV3YXlzIHdpdGggb3B0aW9uYWwgZmlsdGVyaW5nIGFuZCBwYWdpbmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9MaXN0UmVxdWVzdGVyR2F0ZXdheXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFJlcXVlc3RlckdhdGV3YXlzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0UmVxdWVzdGVyR2F0ZXdheXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHJlc3BvbmRlciBnYXRld2F5cyB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3J0Yi1mYWJyaWMvbGF0ZXN0L2FwaS9BUElfTGlzdFJlc3BvbmRlckdhdGV3YXlzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSZXNwb25kZXJHYXRld2F5cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJlc3BvbmRlckdhdGV3YXlzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0YWdzIGZvciBhIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3J0Yi1mYWJyaWMvbGF0ZXN0L2FwaS9BUElfTGlzdFRhZ3NGb3JSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VGFnc0ZvclJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0VGFnc0ZvclJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVqZWN0IGEgbGluayByZXF1ZXN0IGJldHdlZW4gUlRCIGFwcGxpY2F0aW9uc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC9hcGkvQVBJX1JlamVjdExpbmsuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUmVqZWN0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUmVqZWN0TGluaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFzc2lnbiBvbmUgb3IgbW9yZSB0YWdzIChrZXktdmFsdWUgcGFpcnMpIHRvIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9UYWdSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9UYWdSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZW1vdmUgYSB0YWcgb3IgdGFncyBmcm9tIGEgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9VbnRhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VudGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VudGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgYW4gZXhpc3RpbmcgbGlua1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC9hcGkvQVBJX1VwZGF0ZUxpbmsuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlTGluaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlTGluaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhIGxpbmsgbW9kdWxlIGZsb3dcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvYXBpL0FQSV9VcGRhdGVMaW5rTW9kdWxlRmxvdy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVMaW5rTW9kdWxlRmxvdygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlTGlua01vZHVsZUZsb3cnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSByZXF1ZXN0ZXIgZ2F0ZXdheVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC9hcGkvQVBJX1VwZGF0ZVJlcXVlc3RlckdhdGV3YXkuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUmVxdWVzdGVyR2F0ZXdheSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlUmVxdWVzdGVyR2F0ZXdheScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhIHJlc3BvbmRlciBnYXRld2F5XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3J0Yi1mYWJyaWMvbGF0ZXN0L2FwaS9BUElfVXBkYXRlUmVzcG9uZGVyR2F0ZXdheS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVSZXNwb25kZXJHYXRld2F5KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVSZXNwb25kZXJHYXRld2F5Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWNjZXNzTGV2ZWxMaXN0OiBBY2Nlc3NMZXZlbExpc3QgPSB7XG4gICAgV3JpdGU6IFtcbiAgICAgICdBY2NlcHRMaW5rJyxcbiAgICAgICdDcmVhdGVJbmJvdW5kRXh0ZXJuYWxMaW5rJyxcbiAgICAgICdDcmVhdGVMaW5rJyxcbiAgICAgICdDcmVhdGVPdXRib3VuZEV4dGVybmFsTGluaycsXG4gICAgICAnQ3JlYXRlUmVxdWVzdGVyR2F0ZXdheScsXG4gICAgICAnQ3JlYXRlUmVzcG9uZGVyR2F0ZXdheScsXG4gICAgICAnRGVsZXRlSW5ib3VuZEV4dGVybmFsTGluaycsXG4gICAgICAnRGVsZXRlTGluaycsXG4gICAgICAnRGVsZXRlT3V0Ym91bmRFeHRlcm5hbExpbmsnLFxuICAgICAgJ0RlbGV0ZVJlcXVlc3RlckdhdGV3YXknLFxuICAgICAgJ0RlbGV0ZVJlc3BvbmRlckdhdGV3YXknLFxuICAgICAgJ1JlamVjdExpbmsnLFxuICAgICAgJ1VwZGF0ZUxpbmsnLFxuICAgICAgJ1VwZGF0ZUxpbmtNb2R1bGVGbG93JyxcbiAgICAgICdVcGRhdGVSZXF1ZXN0ZXJHYXRld2F5JyxcbiAgICAgICdVcGRhdGVSZXNwb25kZXJHYXRld2F5J1xuICAgIF0sXG4gICAgUmVhZDogW1xuICAgICAgJ0dldEluYm91bmRFeHRlcm5hbExpbmsnLFxuICAgICAgJ0dldExpbmsnLFxuICAgICAgJ0dldE91dGJvdW5kRXh0ZXJuYWxMaW5rJyxcbiAgICAgICdHZXRSZXF1ZXN0ZXJHYXRld2F5JyxcbiAgICAgICdHZXRSZXNwb25kZXJHYXRld2F5JyxcbiAgICAgICdMaXN0VGFnc0ZvclJlc291cmNlJ1xuICAgIF0sXG4gICAgTGlzdDogW1xuICAgICAgJ0xpc3RMaW5rcycsXG4gICAgICAnTGlzdFJlcXVlc3RlckdhdGV3YXlzJyxcbiAgICAgICdMaXN0UmVzcG9uZGVyR2F0ZXdheXMnXG4gICAgXSxcbiAgICBUYWdnaW5nOiBbXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBJbmJvdW5kRXh0ZXJuYWxMaW5rIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3J0Yi1mYWJyaWMvbGF0ZXN0L3VzZXJndWlkZS9saW5rcy5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBnYXRld2F5SWQgLSBJZGVudGlmaWVyIGZvciB0aGUgZ2F0ZXdheUlkLlxuICAgKiBAcGFyYW0gbGlua0lkIC0gSWRlbnRpZmllciBmb3IgdGhlIGxpbmtJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmSW5ib3VuZEV4dGVybmFsTGlua0xpbmtJZCgpXG4gICAqIC0gLmlmUmVzcG9uZGVyR2F0ZXdheUdhdGV3YXlJZCgpXG4gICAqL1xuICBwdWJsaWMgb25JbmJvdW5kRXh0ZXJuYWxMaW5rKGdhdGV3YXlJZDogc3RyaW5nLCBsaW5rSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpydGJmYWJyaWM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OmdhdGV3YXkvJHsgZ2F0ZXdheUlkIH0vbGluay8keyBsaW5rSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIExpbmsgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvdXNlcmd1aWRlL2xpbmtzLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIGdhdGV3YXlJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBnYXRld2F5SWQuXG4gICAqIEBwYXJhbSBsaW5rSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgbGlua0lkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZMaW5rTGlua0lkKClcbiAgICogLSAuaWZSZXF1ZXN0ZXJHYXRld2F5R2F0ZXdheUlkKClcbiAgICogLSAuaWZSZXNwb25kZXJHYXRld2F5R2F0ZXdheUlkKClcbiAgICovXG4gIHB1YmxpYyBvbkxpbmsoZ2F0ZXdheUlkOiBzdHJpbmcsIGxpbmtJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OnJ0YmZhYnJpYzokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06Z2F0ZXdheS8keyBnYXRld2F5SWQgfS9saW5rLyR7IGxpbmtJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgT3V0Ym91bmRFeHRlcm5hbExpbmsgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvdXNlcmd1aWRlL2xpbmtzLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIGdhdGV3YXlJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBnYXRld2F5SWQuXG4gICAqIEBwYXJhbSBsaW5rSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgbGlua0lkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZPdXRib3VuZEV4dGVybmFsTGlua0xpbmtJZCgpXG4gICAqIC0gLmlmUmVxdWVzdGVyR2F0ZXdheUdhdGV3YXlJZCgpXG4gICAqL1xuICBwdWJsaWMgb25PdXRib3VuZEV4dGVybmFsTGluayhnYXRld2F5SWQ6IHN0cmluZywgbGlua0lkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06cnRiZmFicmljOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTpnYXRld2F5LyR7IGdhdGV3YXlJZCB9L2xpbmsvJHsgbGlua0lkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBSZXF1ZXN0ZXJHYXRld2F5IHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3J0Yi1mYWJyaWMvbGF0ZXN0L3VzZXJndWlkZS93b3JraW5nLXdpdGgtcmVxdWVzdGVyLXJ0Yi1hcHBsaWNhdGlvbnMuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gZ2F0ZXdheUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIGdhdGV3YXlJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmUmVxdWVzdGVyR2F0ZXdheUdhdGV3YXlJZCgpXG4gICAqL1xuICBwdWJsaWMgb25SZXF1ZXN0ZXJHYXRld2F5KGdhdGV3YXlJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OnJ0YmZhYnJpYzokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06Z2F0ZXdheS8keyBnYXRld2F5SWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIFJlc3BvbmRlckdhdGV3YXkgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvdXNlcmd1aWRlL3dvcmtpbmctd2l0aC1yZXNwb25kZXItcnRiLWFwcGxpY2F0aW9ucy5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBnYXRld2F5SWQgLSBJZGVudGlmaWVyIGZvciB0aGUgZ2F0ZXdheUlkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZSZXNwb25kZXJHYXRld2F5R2F0ZXdheUlkKClcbiAgICovXG4gIHB1YmxpYyBvblJlc3BvbmRlckdhdGV3YXkoZ2F0ZXdheUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06cnRiZmFicmljOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTpnYXRld2F5LyR7IGdhdGV3YXlJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgYSB0YWcga2V5IGFuZCB2YWx1ZSBwYWlyIHRoYXQgaXMgYWxsb3dlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVxdWVzdHRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdGFnS2V5IFRoZSB0YWcga2V5IHRvIGNoZWNrXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzUmVxdWVzdFRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXF1ZXN0VGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgYSB0YWcga2V5IGFuZCB2YWx1ZSBwYWlyIG9mIGEgcmVzb3VyY2VcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19jb25kaXRpb24ta2V5cy5odG1sI2NvbmRpdGlvbi1rZXlzLXJlc291cmNldGFnXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gYWN0aW9uczpcbiAgICogLSAudG9MaXN0VGFnc0ZvclJlc291cmNlKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB0YWdLZXkgVGhlIHRhZyBrZXkgdG8gY2hlY2tcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZBd3NSZXNvdXJjZVRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXNvdXJjZVRhZy8keyB0YWdLZXkgfWAsIHZhbHVlLCBvcGVyYXRvciA/PyAnU3RyaW5nTGlrZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IGEgbGlzdCBvZiB0YWcga2V5cyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSByZXF1ZXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy10YWdrZXlzXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gYWN0aW9uczpcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzVGFnS2V5cyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlRhZ0tleXNgLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSBnYXRld2F5IGlkZW50aWZpZXIgc3VwcG9ydGluZyBydGItZ3ctKiBmb3JtYXRzXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC91c2VyZ3VpZGUvc2VjdXJpdHlfaWFtX3NlcnZpY2Utd2l0aC1pYW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkluYm91bmRFeHRlcm5hbExpbmtHYXRld2F5SWQodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYEluYm91bmRFeHRlcm5hbExpbmtHYXRld2F5SWRgLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSBJbmJvdW5kRXh0ZXJuYWxMaW5rIHJlc291cmNlIGxpbmtJZCBpZGVudGlmaWVyXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC91c2VyZ3VpZGUvc2VjdXJpdHlfaWFtX3NlcnZpY2Utd2l0aC1pYW0uaHRtbFxuICAgKlxuICAgKiBBcHBsaWVzIHRvIHJlc291cmNlIHR5cGVzOlxuICAgKiAtIEluYm91bmRFeHRlcm5hbExpbmtcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZJbmJvdW5kRXh0ZXJuYWxMaW5rTGlua0lkKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3BlcmF0b3I/OiBPcGVyYXRvciB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmlmKGBJbmJvdW5kRXh0ZXJuYWxMaW5rTGlua0lkYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgTGluayByZXNvdXJjZSBsaW5rSWQgaWRlbnRpZmllclxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvdXNlcmd1aWRlL3NlY3VyaXR5X2lhbV9zZXJ2aWNlLXdpdGgtaWFtLmh0bWxcbiAgICpcbiAgICogQXBwbGllcyB0byByZXNvdXJjZSB0eXBlczpcbiAgICogLSBMaW5rXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmTGlua0xpbmtJZCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgTGlua0xpbmtJZGAsIHZhbHVlLCBvcGVyYXRvciA/PyAnU3RyaW5nTGlrZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IE91dGJvdW5kRXh0ZXJuYWxMaW5rIHJlc291cmNlIGxpbmtJZCBpZGVudGlmaWVyXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ydGItZmFicmljL2xhdGVzdC91c2VyZ3VpZGUvc2VjdXJpdHlfaWFtX3NlcnZpY2Utd2l0aC1pYW0uaHRtbFxuICAgKlxuICAgKiBBcHBsaWVzIHRvIHJlc291cmNlIHR5cGVzOlxuICAgKiAtIE91dGJvdW5kRXh0ZXJuYWxMaW5rXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmT3V0Ym91bmRFeHRlcm5hbExpbmtMaW5rSWQodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYE91dGJvdW5kRXh0ZXJuYWxMaW5rTGlua0lkYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgZ2F0ZXdheSBpZGVudGlmaWVyIHN1cHBvcnRpbmcgcnRiLWd3LSogZm9ybWF0c1xuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcnRiLWZhYnJpYy9sYXRlc3QvdXNlcmd1aWRlL3NlY3VyaXR5X2lhbV9zZXJ2aWNlLXdpdGgtaWFtLmh0bWxcbiAgICpcbiAgICogQXBwbGllcyB0byByZXNvdXJjZSB0eXBlczpcbiAgICogLSBMaW5rXG4gICAqIC0gT3V0Ym91bmRFeHRlcm5hbExpbmtcbiAgICogLSBSZXF1ZXN0ZXJHYXRld2F5XG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmUmVxdWVzdGVyR2F0ZXdheUdhdGV3YXlJZCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgUmVxdWVzdGVyR2F0ZXdheUdhdGV3YXlJZGAsIHZhbHVlLCBvcGVyYXRvciA/PyAnU3RyaW5nTGlrZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IGdhdGV3YXkgaWRlbnRpZmllciBzdXBwb3J0aW5nIHJ0Yi1ndy0qIGZvcm1hdHNcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3J0Yi1mYWJyaWMvbGF0ZXN0L3VzZXJndWlkZS9zZWN1cml0eV9pYW1fc2VydmljZS13aXRoLWlhbS5odG1sXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gcmVzb3VyY2UgdHlwZXM6XG4gICAqIC0gSW5ib3VuZEV4dGVybmFsTGlua1xuICAgKiAtIExpbmtcbiAgICogLSBSZXNwb25kZXJHYXRld2F5XG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmUmVzcG9uZGVyR2F0ZXdheUdhdGV3YXlJZCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgUmVzcG9uZGVyR2F0ZXdheUdhdGV3YXlJZGAsIHZhbHVlLCBvcGVyYXRvciA/PyAnU3RyaW5nTGlrZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRlbWVudCBwcm92aWRlciBmb3Igc2VydmljZSBbcnRiZmFicmljXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hd3NydGJmYWJyaWMuaHRtbCkuXG4gICAqXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wcz86IGlhbS5Qb2xpY3lTdGF0ZW1lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxufVxuIl19
|