@awesome-cordova-plugins/onesignal 7.0.0 → 8.0.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.
package/ngx/index.js CHANGED
@@ -1,5 +1,4 @@
1
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
2
- import { __decorate, __metadata } from "tslib";
1
+ import { __decorate, __extends } from "tslib";
3
2
  import { Injectable } from '@angular/core';
4
3
  import { AwesomeCordovaNativePlugin, cordova } from '@awesome-cordova-plugins/core';
5
4
  import { Observable } from 'rxjs';
@@ -45,613 +44,76 @@ export var OSActionType;
45
44
  OSActionType[OSActionType["Opened"] = 0] = "Opened";
46
45
  OSActionType[OSActionType["ActionTake"] = 1] = "ActionTake";
47
46
  })(OSActionType || (OSActionType = {}));
48
- export class OneSignal extends AwesomeCordovaNativePlugin {
49
- constructor() {
50
- super(...arguments);
47
+ var OneSignal = /** @class */ (function (_super) {
48
+ __extends(OneSignal, _super);
49
+ function OneSignal() {
50
+ var _this = _super !== null && _super.apply(this, arguments) || this;
51
51
  /**
52
52
  * constants to use in inFocusDisplaying()
53
+ *
53
54
  * @hidden
54
55
  */
55
- this.OSInFocusDisplayOption = {
56
+ _this.OSInFocusDisplayOption = {
56
57
  None: 0,
57
58
  InAppAlert: 1,
58
59
  Notification: 2,
59
60
  };
60
- }
61
- /**
62
- * Start the initialization process. Once you are done configuring OneSignal, call the `endInit` function.
63
- * @param {string} appId Your OneSignal app id
64
- * @param {string} googleProjectNumber **ANDROID** - your Google project number; only required for Android GCM/FCM pushes.
65
- * @returns {any}
66
- */
67
- startInit(appId, googleProjectNumber) {
68
- return;
69
- }
70
- /**
71
- * Callback to run when a notification is received, whether it was displayed or not.
72
- * @returns {Observable<OneSignalReceivedNotification>}
73
- */
74
- handleNotificationReceived() {
75
- return;
76
- }
77
- /**
78
- * Callback to run when a notification is tapped on from the notification shade (**ANDROID**) or notification
79
- * center (**iOS**), or when closing an Alert notification shown in the app (if InAppAlert is enabled in
80
- * inFocusDisplaying).
81
- * @returns {Observable<OneSignalOpenedNotification>}
82
- */
83
- handleNotificationOpened() {
84
- return;
85
- }
86
- /**
87
- * Use to process an In-App Message the user just tapped on.
88
- * @returns {Observable<OSInAppMessageAction>}
89
- */
90
- handleInAppMessageClicked() {
91
- return;
92
- }
93
- /**
94
- * iOS** - Settings for iOS apps
95
- * @param settings
96
- * kOSSettingsKeyAutoPrompt: boolean = true
97
- * Auto prompt user for notification permissions.
98
- *
99
- * kOSSettingsKeyInAppLaunchURL: boolean = false
100
- * Launch notifications with a launch URL as an in app webview.
101
- * @param settings.kOSSettingsKeyAutoPrompt
102
- * @param settings.kOSSettingsKeyInAppLaunchURL
103
- * @returns {any}
104
- */
105
- iOSSettings(settings) {
106
- return;
107
- }
108
- /**
109
- * Must be called after `startInit` to complete initialization of OneSignal.
110
- * @returns {any}
111
- */
112
- endInit() {
113
- return;
114
- }
115
- /**
116
- * Prompt the user for notification permissions. Callback fires as soon as the user accepts or declines notifications.
117
- * @returns {Promise<boolean>}
118
- */
119
- promptForPushNotificationsWithUserResponse() {
120
- return;
121
- }
122
- /**
123
- * Retrieve a list of tags that have been set on the user from the OneSignal server.
124
- *
125
- * Quirk**: You must wait for `getTags` to resolve before calling it again, as the plugin will only process the last method call and discard any previous ones.
126
- * @returns {Promise<any>} Returns a Promise that resolves when tags are recieved.
127
- */
128
- getTags() {
129
- return;
130
- }
131
- /**
132
- * Lets you retrieve the OneSignal user id and device token.
133
- * Your handler is called after the device is successfully registered with OneSignal.
134
- * @returns {Promise<Object>} Returns a Promise that resolves if the device was successfully registered.
135
- *
136
- * userId {string} OneSignal userId is a UUID formatted string. (unique per device per app)
137
- *
138
- * pushToken {string} A push token is a Google/Apple assigned identifier(unique per device per app).
139
- */
140
- getIds() {
141
- return;
142
- }
143
- /**
144
- * Tag a user based on an app event of your choosing so later you can create segments on [onesignal.com](https://onesignal.com/) to target these users.
145
- * Recommend using sendTags over sendTag if you need to set more than one tag on a user at a time.
146
- * @param {string} Key of your choosing to create or update.
147
- * @param {string} Value to set on the key. NOTE: Passing in a blank String deletes the key, you can also call deleteTag.
148
- * @param key
149
- * @param value
150
- */
151
- sendTag(key, value) { }
152
- /**
153
- * Tag a user based on an app event of your choosing so later you can create segments on [onesignal.com](https://onesignal.com/) to target these users.
154
- * Recommend using sendTags over sendTag if you need to set more than one tag on a user at a time.
155
- * @param {string} Pass a json object with key/value pairs like: {key: "value", key2: "value2"}
156
- * @param json
157
- */
158
- sendTags(json) { }
159
- /**
160
- * Deletes a tag that was previously set on a user with `sendTag` or `sendTags`. Use `deleteTags` if you need to delete more than one.
161
- * @param {string} Key to remove.
162
- * @param key
163
- */
164
- deleteTag(key) { }
165
- /**
166
- * Deletes tags that were previously set on a user with `sendTag` or `sendTags`.
167
- * @param {string[]} Keys to remove.
168
- * @param keys
169
- */
170
- deleteTags(keys) { }
171
- /**
172
- * Call this when you would like to prompt an iOS user to accept push notifications with the default system prompt.
173
- * Only works if you set `kOSSettingsAutoPrompt` to `false` in `iOSSettings`
174
- */
175
- registerForPushNotifications() { }
176
- /**
177
- * Warning:
178
- * Only applies to Android and Amazon. You can call this from your UI from a button press for example to give your user's options for your notifications.
179
- *
180
- * By default OneSignal always vibrates the device when a notification is displayed unless the device is in a total silent mode.
181
- * Passing false means that the device will only vibrate lightly when the device is in it's vibrate only mode.
182
- * @param {boolean} false to disable vibrate, true to re-enable it.
183
- * @param enable
184
- */
185
- enableVibrate(enable) { }
186
- /**
187
- * Warning:
188
- * Only applies to Android and Amazon. You can call this from your UI from a button press for example to give your user's options for your notifications.
189
- *
190
- * By default OneSignal plays the system's default notification sound when the device's notification system volume is turned on.
191
- * Passing false means that the device will only vibrate unless the device is set to a total silent mode.
192
- * @param {boolean} false to disable sound, true to re-enable it.
193
- * @param enable
194
- */
195
- enableSound(enable) { }
196
- /**
197
- *
198
- *Setting to control how OneSignal notifications will be shown when one is received while your app is in focus. By default this is set to inAppAlert, which can be helpful during development.
199
- * @param {DisplayType} displayOption
200
- * @returns {any}
201
- */
202
- inFocusDisplaying(displayOption) {
203
- return;
204
- }
205
- /**
206
- * You can call this method with false to opt users out of receiving all notifications through OneSignal.
207
- * You can pass true later to opt users back into notifications.
208
- * @param {boolean} enable
209
- */
210
- setSubscription(enable) { }
211
- /**
212
- * Get the current notification and permission state. Returns a OSPermissionSubscriptionState type described below.
213
- * @returns {Promise<OSPermissionSubscriptionState>}
214
- */
215
- getPermissionSubscriptionState() {
216
- return;
217
- }
218
- /**
219
- *
220
- * @param {notificationObj} Parameters see POST [documentation](https://documentation.onesignal.com/v2.0/docs/notifications-create-notification)
221
- * @param notificationObj
222
- * @returns {Promise<any>} Returns a Promise that resolves if the notification was send successfully.
223
- */
224
- postNotification(notificationObj) {
225
- return;
226
- }
227
- /**
228
- * Cancels a single OneSignal notification based on its Android notification integer id. Use instead of NotificationManager.cancel(id); otherwise the notification will be restored when your app is restarted.
229
- * @param notificationId {string}
230
- */
231
- cancelNotification(notificationId) { }
232
- /**
233
- * Prompts the user for location permission to allow geotagging based on the "Location radius" filter on the OneSignal dashboard.
234
- */
235
- promptLocation() { }
236
- /**
237
- *
238
- * @param email {string}
239
- */
240
- syncHashedEmail(email) { }
241
- /**
242
- * Enable logging to help debug if you run into an issue setting up OneSignal.
243
- * The logging levels are as follows: 0 = None, 1= Fatal, 2 = Errors, 3 = Warnings, 4 = Info, 5 = Debug, 6 = Verbose
244
- *
245
- * The higher the value the more information is shown.
246
- * @param {loglevel} contains two properties: logLevel (for console logging) and visualLevel (for dialog messages)
247
- * @param logLevel
248
- * @param logLevel.logLevel
249
- * @param logLevel.visualLevel
250
- */
251
- setLogLevel(logLevel) { }
252
- /**
253
- * Disable or enable location collection (Defaults to enabled) if your app has location permission.
254
- * @param shared {boolean}
255
- */
256
- setLocationShared(shared) { }
257
- /**
258
- * The passed in function will be fired when a notification permission setting changes.
259
- * This includes the following events:
260
- * - Notification permission prompt shown
261
- * - The user accepting or declining the permission prompt
262
- * - Enabling/disabling notifications for your app in the device Settings after returning to your app.
263
- * @returns {Observable<any>}
264
- */
265
- addPermissionObserver() {
266
- return;
267
- }
268
- /**
269
- * The passed in function will be fired when a notification subscription property changes.
270
- * This includes the following events:
271
- * - Getting a push token from Apple / Google.
272
- * - Getting a player / user id from OneSignal
273
- * - OneSignal.setSubscription is called
274
- * - User disables or enables notifications
275
- * @returns {Observable<any>}
276
- */
277
- addSubscriptionObserver() {
278
- return;
279
- }
280
- /**
281
- * Clears all OneSignal notifications
282
- * @param email
283
- * @param emailAuthToken
284
- */
285
- setEmail(email, emailAuthToken) {
286
- return;
287
- }
288
- /**
289
- * If your app implements logout functionality, you can call logoutEmail to dissociate the email from the device
290
- */
291
- logoutEmail() {
292
- return;
293
- }
294
- /**
295
- * The passed in function will be fired when a notification subscription property changes.
296
- * This includes the following events:
297
- * - Getting a push token from Apple / Google.
298
- * - Getting a player / user id from OneSignal
299
- * - OneSignal.setSubscription is called
300
- * - User disables or enables notifications
301
- * @returns {Observable<any>}
302
- */
303
- addEmailSubscriptionObserver() {
304
- return;
305
- }
306
- /**
307
- * Clears all OneSignal notifications
308
- */
309
- clearOneSignalNotifications() { }
310
- /**
311
- * Allows you to delay the initialization of the SDK until the user provides privacy consent.
312
- * The SDK will not be fully initialized until the provideUserConsent(true) method is called.
313
- * @param {boolean} required
314
- */
315
- setRequiresUserPrivacyConsent(required) { }
316
- /**
317
- * If your application is set to require the user's privacy consent, you can provide this consent using this method.
318
- * Until you call provideUserConsent(true), the SDK will not fully initialize and will not send any data to OneSignal.
319
- * @param {boolean} granted
320
- */
321
- provideUserConsent(granted) { }
322
- /**
323
- * Accepts a callback, which returns a boolean variable indicating if the user has given privacy consent yet.
324
- * @param {Function} callback
325
- */
326
- userProvidedPrivacyConsent(callback) { }
327
- /**
328
- * Allows you to use your own system's user ID's to send push notifications to your users.
329
- * To tie a user to a given user ID, you can use this method.
330
- * @param {string} externalId
331
- */
332
- setExternalUserId(externalId) { }
333
- /**
334
- * Removes whatever was set as the current user's external user ID.
335
- */
336
- removeExternalUserId() { }
337
- /**
338
- * Add a trigger. May show an In-App Message if its trigger conditions were met.
339
- * @param {string} key Key for the trigger.
340
- * @param {string | number | Object} value Value for the trigger. String or number recommended. Object passed in will be converted to a string.
341
- */
342
- addTrigger(key, value) { }
343
- /**
344
- * Add a map of triggers. May show an In-App Message if its trigger conditions were met.
345
- * @param {Object.<string, string | number | Object>} triggers Allows you to set multiple trigger key/value pairs simultaneously. Pass a json object with key/value pairs like: `{"key": "value", "key2": "value2"}`.
346
- */
347
- addTriggers(triggers) { }
348
- /**
349
- * Removes a single trigger for the given key. May show an In-App Message if its trigger conditions were met.
350
- * @param {string} key Key for trigger to remove.
351
- */
352
- removeTriggerForKey(key) { }
353
- /**
354
- * Removes a list of triggers based on a collection (array) of keys. May show an In-App Message if its trigger conditions were met.
355
- * @param {string[]} keys Removes a collection of triggers from their keys. Pass an array of trigger keys like: `["key1", "key2", "key3"]`.
356
- */
357
- removeTriggersForKeys(keys) { }
358
- /**
359
- * Gets a trigger value for a provided trigger key.
360
- * @param {string} key Key for trigger to get value.
361
- * @returns {Promise<string | number | Object>} Return value set with `addTrigger`, or `null`/`nil` (iOS) if never set or removed.
362
- */
363
- getTriggerValueForKey(key) {
364
- return;
365
- }
366
- /**
367
- * Allows you to temporarily pause all In-App Messages. You may want to do this while the user is engaged in an activity that you don't want a message to interrupt (such as watching a video).
368
- * An In-App Message that would display if not paused will display right after resume if its conditions to display remains satisfied.
369
- * @param {boolean} pause To pause, set `true`. To resume, set `false`.
370
- */
371
- pauseInAppMessages(pause) { }
372
- }
373
- OneSignal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OneSignal, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
374
- OneSignal.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OneSignal });
375
- __decorate([
376
- Cordova({ sync: true }),
377
- __metadata("design:type", Function),
378
- __metadata("design:paramtypes", [String, String]),
379
- __metadata("design:returntype", Object)
380
- ], OneSignal.prototype, "startInit", null);
381
- __decorate([
382
- Cordova({
383
- observable: true,
384
- }),
385
- __metadata("design:type", Function),
386
- __metadata("design:paramtypes", []),
387
- __metadata("design:returntype", typeof (_a = typeof Observable !== "undefined" && Observable) === "function" ? _a : Object)
388
- ], OneSignal.prototype, "handleNotificationReceived", null);
389
- __decorate([
390
- Cordova({
391
- observable: true,
392
- }),
393
- __metadata("design:type", Function),
394
- __metadata("design:paramtypes", []),
395
- __metadata("design:returntype", typeof (_b = typeof Observable !== "undefined" && Observable) === "function" ? _b : Object)
396
- ], OneSignal.prototype, "handleNotificationOpened", null);
397
- __decorate([
398
- Cordova({
399
- observable: true,
400
- }),
401
- __metadata("design:type", Function),
402
- __metadata("design:paramtypes", []),
403
- __metadata("design:returntype", typeof (_c = typeof Observable !== "undefined" && Observable) === "function" ? _c : Object)
404
- ], OneSignal.prototype, "handleInAppMessageClicked", null);
405
- __decorate([
406
- Cordova({
407
- sync: true,
408
- platforms: ['iOS'],
409
- }),
410
- __metadata("design:type", Function),
411
- __metadata("design:paramtypes", [Object]),
412
- __metadata("design:returntype", Object)
413
- ], OneSignal.prototype, "iOSSettings", null);
414
- __decorate([
415
- Cordova({ sync: true }),
416
- __metadata("design:type", Function),
417
- __metadata("design:paramtypes", []),
418
- __metadata("design:returntype", Object)
419
- ], OneSignal.prototype, "endInit", null);
420
- __decorate([
421
- Cordova({
422
- platforms: ['iOS'],
423
- }),
424
- __metadata("design:type", Function),
425
- __metadata("design:paramtypes", []),
426
- __metadata("design:returntype", typeof (_d = typeof Promise !== "undefined" && Promise) === "function" ? _d : Object)
427
- ], OneSignal.prototype, "promptForPushNotificationsWithUserResponse", null);
428
- __decorate([
429
- Cordova(),
430
- __metadata("design:type", Function),
431
- __metadata("design:paramtypes", []),
432
- __metadata("design:returntype", typeof (_e = typeof Promise !== "undefined" && Promise) === "function" ? _e : Object)
433
- ], OneSignal.prototype, "getTags", null);
434
- __decorate([
435
- Cordova(),
436
- __metadata("design:type", Function),
437
- __metadata("design:paramtypes", []),
438
- __metadata("design:returntype", typeof (_f = typeof Promise !== "undefined" && Promise) === "function" ? _f : Object)
439
- ], OneSignal.prototype, "getIds", null);
440
- __decorate([
441
- Cordova({ sync: true }),
442
- __metadata("design:type", Function),
443
- __metadata("design:paramtypes", [String, String]),
444
- __metadata("design:returntype", void 0)
445
- ], OneSignal.prototype, "sendTag", null);
446
- __decorate([
447
- Cordova({ sync: true }),
448
- __metadata("design:type", Function),
449
- __metadata("design:paramtypes", [Object]),
450
- __metadata("design:returntype", void 0)
451
- ], OneSignal.prototype, "sendTags", null);
452
- __decorate([
453
- Cordova({ sync: true }),
454
- __metadata("design:type", Function),
455
- __metadata("design:paramtypes", [String]),
456
- __metadata("design:returntype", void 0)
457
- ], OneSignal.prototype, "deleteTag", null);
458
- __decorate([
459
- Cordova({ sync: true }),
460
- __metadata("design:type", Function),
461
- __metadata("design:paramtypes", [Array]),
462
- __metadata("design:returntype", void 0)
463
- ], OneSignal.prototype, "deleteTags", null);
464
- __decorate([
465
- Cordova({ sync: true }),
466
- __metadata("design:type", Function),
467
- __metadata("design:paramtypes", []),
468
- __metadata("design:returntype", void 0)
469
- ], OneSignal.prototype, "registerForPushNotifications", null);
470
- __decorate([
471
- Cordova({ sync: true }),
472
- __metadata("design:type", Function),
473
- __metadata("design:paramtypes", [Boolean]),
474
- __metadata("design:returntype", void 0)
475
- ], OneSignal.prototype, "enableVibrate", null);
476
- __decorate([
477
- Cordova({ sync: true }),
478
- __metadata("design:type", Function),
479
- __metadata("design:paramtypes", [Boolean]),
480
- __metadata("design:returntype", void 0)
481
- ], OneSignal.prototype, "enableSound", null);
482
- __decorate([
483
- Cordova({ sync: true }),
484
- __metadata("design:type", Function),
485
- __metadata("design:paramtypes", [typeof (_g = typeof OSDisplayType !== "undefined" && OSDisplayType) === "function" ? _g : Object]),
486
- __metadata("design:returntype", Object)
487
- ], OneSignal.prototype, "inFocusDisplaying", null);
488
- __decorate([
489
- Cordova({ sync: true }),
490
- __metadata("design:type", Function),
491
- __metadata("design:paramtypes", [Boolean]),
492
- __metadata("design:returntype", void 0)
493
- ], OneSignal.prototype, "setSubscription", null);
494
- __decorate([
495
- Cordova(),
496
- __metadata("design:type", Function),
497
- __metadata("design:paramtypes", []),
498
- __metadata("design:returntype", typeof (_h = typeof Promise !== "undefined" && Promise) === "function" ? _h : Object)
499
- ], OneSignal.prototype, "getPermissionSubscriptionState", null);
500
- __decorate([
501
- Cordova(),
502
- __metadata("design:type", Function),
503
- __metadata("design:paramtypes", [typeof (_j = typeof OSNotification !== "undefined" && OSNotification) === "function" ? _j : Object]),
504
- __metadata("design:returntype", typeof (_k = typeof Promise !== "undefined" && Promise) === "function" ? _k : Object)
505
- ], OneSignal.prototype, "postNotification", null);
506
- __decorate([
507
- Cordova({ sync: true }),
508
- __metadata("design:type", Function),
509
- __metadata("design:paramtypes", [String]),
510
- __metadata("design:returntype", void 0)
511
- ], OneSignal.prototype, "cancelNotification", null);
512
- __decorate([
513
- Cordova({ sync: true }),
514
- __metadata("design:type", Function),
515
- __metadata("design:paramtypes", []),
516
- __metadata("design:returntype", void 0)
517
- ], OneSignal.prototype, "promptLocation", null);
518
- __decorate([
519
- Cordova({ sync: true }),
520
- __metadata("design:type", Function),
521
- __metadata("design:paramtypes", [String]),
522
- __metadata("design:returntype", void 0)
523
- ], OneSignal.prototype, "syncHashedEmail", null);
524
- __decorate([
525
- Cordova({ sync: true }),
526
- __metadata("design:type", Function),
527
- __metadata("design:paramtypes", [Object]),
528
- __metadata("design:returntype", void 0)
529
- ], OneSignal.prototype, "setLogLevel", null);
530
- __decorate([
531
- Cordova({ sync: true }),
532
- __metadata("design:type", Function),
533
- __metadata("design:paramtypes", [Boolean]),
534
- __metadata("design:returntype", void 0)
535
- ], OneSignal.prototype, "setLocationShared", null);
536
- __decorate([
537
- Cordova({
538
- observable: true,
539
- }),
540
- __metadata("design:type", Function),
541
- __metadata("design:paramtypes", []),
542
- __metadata("design:returntype", typeof (_l = typeof Observable !== "undefined" && Observable) === "function" ? _l : Object)
543
- ], OneSignal.prototype, "addPermissionObserver", null);
544
- __decorate([
545
- Cordova({
546
- observable: true,
547
- }),
548
- __metadata("design:type", Function),
549
- __metadata("design:paramtypes", []),
550
- __metadata("design:returntype", typeof (_m = typeof Observable !== "undefined" && Observable) === "function" ? _m : Object)
551
- ], OneSignal.prototype, "addSubscriptionObserver", null);
552
- __decorate([
553
- Cordova(),
554
- __metadata("design:type", Function),
555
- __metadata("design:paramtypes", [String, String]),
556
- __metadata("design:returntype", typeof (_o = typeof Promise !== "undefined" && Promise) === "function" ? _o : Object)
557
- ], OneSignal.prototype, "setEmail", null);
558
- __decorate([
559
- Cordova(),
560
- __metadata("design:type", Function),
561
- __metadata("design:paramtypes", []),
562
- __metadata("design:returntype", typeof (_p = typeof Promise !== "undefined" && Promise) === "function" ? _p : Object)
563
- ], OneSignal.prototype, "logoutEmail", null);
564
- __decorate([
565
- Cordova({
566
- observable: true,
567
- }),
568
- __metadata("design:type", Function),
569
- __metadata("design:paramtypes", []),
570
- __metadata("design:returntype", typeof (_q = typeof Observable !== "undefined" && Observable) === "function" ? _q : Object)
571
- ], OneSignal.prototype, "addEmailSubscriptionObserver", null);
572
- __decorate([
573
- Cordova({ sync: true }),
574
- __metadata("design:type", Function),
575
- __metadata("design:paramtypes", []),
576
- __metadata("design:returntype", void 0)
577
- ], OneSignal.prototype, "clearOneSignalNotifications", null);
578
- __decorate([
579
- Cordova(),
580
- __metadata("design:type", Function),
581
- __metadata("design:paramtypes", [Boolean]),
582
- __metadata("design:returntype", void 0)
583
- ], OneSignal.prototype, "setRequiresUserPrivacyConsent", null);
584
- __decorate([
585
- Cordova(),
586
- __metadata("design:type", Function),
587
- __metadata("design:paramtypes", [Boolean]),
588
- __metadata("design:returntype", void 0)
589
- ], OneSignal.prototype, "provideUserConsent", null);
590
- __decorate([
591
- Cordova(),
592
- __metadata("design:type", Function),
593
- __metadata("design:paramtypes", [typeof (_r = typeof Function !== "undefined" && Function) === "function" ? _r : Object]),
594
- __metadata("design:returntype", void 0)
595
- ], OneSignal.prototype, "userProvidedPrivacyConsent", null);
596
- __decorate([
597
- Cordova(),
598
- __metadata("design:type", Function),
599
- __metadata("design:paramtypes", [String]),
600
- __metadata("design:returntype", void 0)
601
- ], OneSignal.prototype, "setExternalUserId", null);
602
- __decorate([
603
- Cordova(),
604
- __metadata("design:type", Function),
605
- __metadata("design:paramtypes", []),
606
- __metadata("design:returntype", void 0)
607
- ], OneSignal.prototype, "removeExternalUserId", null);
608
- __decorate([
609
- Cordova({
610
- sync: true,
611
- }),
612
- __metadata("design:type", Function),
613
- __metadata("design:paramtypes", [String, Object]),
614
- __metadata("design:returntype", void 0)
615
- ], OneSignal.prototype, "addTrigger", null);
616
- __decorate([
617
- Cordova({
618
- sync: true,
619
- }),
620
- __metadata("design:type", Function),
621
- __metadata("design:paramtypes", [typeof (_s = typeof Object !== "undefined" && Object) === "function" ? _s : Object]),
622
- __metadata("design:returntype", void 0)
623
- ], OneSignal.prototype, "addTriggers", null);
624
- __decorate([
625
- Cordova({
626
- sync: true,
627
- }),
628
- __metadata("design:type", Function),
629
- __metadata("design:paramtypes", [String]),
630
- __metadata("design:returntype", void 0)
631
- ], OneSignal.prototype, "removeTriggerForKey", null);
632
- __decorate([
633
- Cordova({
634
- sync: true,
635
- }),
636
- __metadata("design:type", Function),
637
- __metadata("design:paramtypes", [Array]),
638
- __metadata("design:returntype", void 0)
639
- ], OneSignal.prototype, "removeTriggersForKeys", null);
640
- __decorate([
641
- Cordova(),
642
- __metadata("design:type", Function),
643
- __metadata("design:paramtypes", [String]),
644
- __metadata("design:returntype", typeof (_t = typeof Promise !== "undefined" && Promise) === "function" ? _t : Object)
645
- ], OneSignal.prototype, "getTriggerValueForKey", null);
646
- __decorate([
647
- Cordova({
648
- sync: true,
649
- }),
650
- __metadata("design:type", Function),
651
- __metadata("design:paramtypes", [Boolean]),
652
- __metadata("design:returntype", void 0)
653
- ], OneSignal.prototype, "pauseInAppMessages", null);
654
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: OneSignal, decorators: [{
61
+ return _this;
62
+ }
63
+ OneSignal.prototype.startInit = function (appId, googleProjectNumber) { return cordova(this, "startInit", { "sync": true }, arguments); };
64
+ OneSignal.prototype.handleNotificationReceived = function () { return cordova(this, "handleNotificationReceived", { "observable": true }, arguments); };
65
+ OneSignal.prototype.handleNotificationOpened = function () { return cordova(this, "handleNotificationOpened", { "observable": true }, arguments); };
66
+ OneSignal.prototype.handleInAppMessageClicked = function () { return cordova(this, "handleInAppMessageClicked", { "observable": true }, arguments); };
67
+ OneSignal.prototype.iOSSettings = function (settings) { return cordova(this, "iOSSettings", { "sync": true, "platforms": ["iOS"] }, arguments); };
68
+ OneSignal.prototype.endInit = function () { return cordova(this, "endInit", { "sync": true }, arguments); };
69
+ OneSignal.prototype.promptForPushNotificationsWithUserResponse = function () { return cordova(this, "promptForPushNotificationsWithUserResponse", { "platforms": ["iOS"] }, arguments); };
70
+ OneSignal.prototype.getTags = function () { return cordova(this, "getTags", {}, arguments); };
71
+ OneSignal.prototype.getIds = function () { return cordova(this, "getIds", {}, arguments); };
72
+ OneSignal.prototype.sendTag = function (key, value) { return cordova(this, "sendTag", { "sync": true }, arguments); };
73
+ OneSignal.prototype.sendTags = function (json) { return cordova(this, "sendTags", { "sync": true }, arguments); };
74
+ OneSignal.prototype.deleteTag = function (key) { return cordova(this, "deleteTag", { "sync": true }, arguments); };
75
+ OneSignal.prototype.deleteTags = function (keys) { return cordova(this, "deleteTags", { "sync": true }, arguments); };
76
+ OneSignal.prototype.registerForPushNotifications = function () { return cordova(this, "registerForPushNotifications", { "sync": true }, arguments); };
77
+ OneSignal.prototype.enableVibrate = function (enable) { return cordova(this, "enableVibrate", { "sync": true }, arguments); };
78
+ OneSignal.prototype.enableSound = function (enable) { return cordova(this, "enableSound", { "sync": true }, arguments); };
79
+ OneSignal.prototype.inFocusDisplaying = function (displayOption) { return cordova(this, "inFocusDisplaying", { "sync": true }, arguments); };
80
+ OneSignal.prototype.setSubscription = function (enable) { return cordova(this, "setSubscription", { "sync": true }, arguments); };
81
+ OneSignal.prototype.getPermissionSubscriptionState = function () { return cordova(this, "getPermissionSubscriptionState", {}, arguments); };
82
+ OneSignal.prototype.postNotification = function (notificationObj) { return cordova(this, "postNotification", {}, arguments); };
83
+ OneSignal.prototype.cancelNotification = function (notificationId) { return cordova(this, "cancelNotification", { "sync": true }, arguments); };
84
+ OneSignal.prototype.promptLocation = function () { return cordova(this, "promptLocation", { "sync": true }, arguments); };
85
+ OneSignal.prototype.syncHashedEmail = function (email) { return cordova(this, "syncHashedEmail", { "sync": true }, arguments); };
86
+ OneSignal.prototype.setLogLevel = function (logLevel) { return cordova(this, "setLogLevel", { "sync": true }, arguments); };
87
+ OneSignal.prototype.setLocationShared = function (shared) { return cordova(this, "setLocationShared", { "sync": true }, arguments); };
88
+ OneSignal.prototype.addPermissionObserver = function () { return cordova(this, "addPermissionObserver", { "observable": true }, arguments); };
89
+ OneSignal.prototype.addSubscriptionObserver = function () { return cordova(this, "addSubscriptionObserver", { "observable": true }, arguments); };
90
+ OneSignal.prototype.setEmail = function (email, emailAuthToken) { return cordova(this, "setEmail", {}, arguments); };
91
+ OneSignal.prototype.logoutEmail = function () { return cordova(this, "logoutEmail", {}, arguments); };
92
+ OneSignal.prototype.addEmailSubscriptionObserver = function () { return cordova(this, "addEmailSubscriptionObserver", { "observable": true }, arguments); };
93
+ OneSignal.prototype.clearOneSignalNotifications = function () { return cordova(this, "clearOneSignalNotifications", { "sync": true }, arguments); };
94
+ OneSignal.prototype.setRequiresUserPrivacyConsent = function (required) { return cordova(this, "setRequiresUserPrivacyConsent", {}, arguments); };
95
+ OneSignal.prototype.provideUserConsent = function (granted) { return cordova(this, "provideUserConsent", {}, arguments); };
96
+ OneSignal.prototype.userProvidedPrivacyConsent = function (callback) { return cordova(this, "userProvidedPrivacyConsent", {}, arguments); };
97
+ OneSignal.prototype.setExternalUserId = function (externalId) { return cordova(this, "setExternalUserId", {}, arguments); };
98
+ OneSignal.prototype.removeExternalUserId = function () { return cordova(this, "removeExternalUserId", {}, arguments); };
99
+ OneSignal.prototype.addTrigger = function (key, value) { return cordova(this, "addTrigger", { "sync": true }, arguments); };
100
+ OneSignal.prototype.addTriggers = function (triggers) { return cordova(this, "addTriggers", { "sync": true }, arguments); };
101
+ OneSignal.prototype.removeTriggerForKey = function (key) { return cordova(this, "removeTriggerForKey", { "sync": true }, arguments); };
102
+ OneSignal.prototype.removeTriggersForKeys = function (keys) { return cordova(this, "removeTriggersForKeys", { "sync": true }, arguments); };
103
+ OneSignal.prototype.getTriggerValueForKey = function (key) { return cordova(this, "getTriggerValueForKey", {}, arguments); };
104
+ OneSignal.prototype.pauseInAppMessages = function (pause) { return cordova(this, "pauseInAppMessages", { "sync": true }, arguments); };
105
+ OneSignal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: OneSignal, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
106
+ OneSignal.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: OneSignal });
107
+ OneSignal.pluginName = "OneSignal";
108
+ OneSignal.plugin = "onesignal-cordova-plugin";
109
+ OneSignal.pluginRef = "plugins.OneSignal";
110
+ OneSignal.repo = "https://github.com/OneSignal/OneSignal-Cordova-SDK";
111
+ OneSignal.platforms = ["Amazon Fire OS", "Android", "iOS", "Windows"];
112
+ OneSignal = __decorate([], OneSignal);
113
+ return OneSignal;
114
+ }(AwesomeCordovaNativePlugin));
115
+ export { OneSignal };
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: OneSignal, decorators: [{
655
117
  type: Injectable
656
118
  }], propDecorators: { startInit: [], handleNotificationReceived: [], handleNotificationOpened: [], handleInAppMessageClicked: [], iOSSettings: [], endInit: [], promptForPushNotificationsWithUserResponse: [], getTags: [], getIds: [], sendTag: [], sendTags: [], deleteTag: [], deleteTags: [], registerForPushNotifications: [], enableVibrate: [], enableSound: [], inFocusDisplaying: [], setSubscription: [], getPermissionSubscriptionState: [], postNotification: [], cancelNotification: [], promptLocation: [], syncHashedEmail: [], setLogLevel: [], setLocationShared: [], addPermissionObserver: [], addSubscriptionObserver: [], setEmail: [], logoutEmail: [], addEmailSubscriptionObserver: [], clearOneSignalNotifications: [], setRequiresUserPrivacyConsent: [], provideUserConsent: [], userProvidedPrivacyConsent: [], setExternalUserId: [], removeExternalUserId: [], addTrigger: [], addTriggers: [], removeTriggerForKey: [], removeTriggersForKeys: [], getTriggerValueForKey: [], pauseInAppMessages: [] } });
657
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvb25lc2lnbmFsL25neC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyx1Q0FBK0MsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQTBGbEM7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxzQkFhWDtBQWJELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gsdUVBQVUsQ0FBQTtJQUNWOztPQUVHO0lBQ0gseUVBQVcsQ0FBQTtJQUNYOztPQUVHO0lBQ0gsd0VBQVcsQ0FBQTtBQUNiLENBQUMsRUFiVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBYWpDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxhQWFYO0FBYkQsV0FBWSxhQUFhO0lBQ3ZCOztPQUVHO0lBQ0gsaURBQVEsQ0FBQTtJQUNSOztPQUVHO0lBQ0gsNkRBQWMsQ0FBQTtJQUNkOztPQUVHO0lBQ0gsaUVBQWdCLENBQUE7QUFDbEIsQ0FBQyxFQWJXLGFBQWEsS0FBYixhQUFhLFFBYXhCO0FBOEtELE1BQU0sQ0FBTixJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDdEIsbURBQVUsQ0FBQTtJQUNWLDJEQUFjLENBQUE7QUFDaEIsQ0FBQyxFQUhXLFlBQVksS0FBWixZQUFZLFFBR3ZCO2FBdUlZLFNBQVUsU0FBUSwwQkFBMEI7OztRQUN2RDs7O1dBR0c7UUFDSCwyQkFBc0IsR0FBRztZQUN2QixJQUFJLEVBQUUsQ0FBQztZQUNQLFVBQVUsRUFBRSxDQUFDO1lBQ2IsWUFBWSxFQUFFLENBQUM7U0FDaEIsQ0FBQzs7SUFFRjs7Ozs7T0FLRztJQUVILFNBQVMsQ0FBQyxLQUFh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O3dEQUMwQixPQUFPLG9CQUFQLE9BQU87c0RBRTFDO0FBVUQ7SUFIQyxPQUFPLENBQUM7UUFDUCxJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUM7Ozs7bURBQ3lDOzRGQS9haEMsU0FBUztrQkFEckIsVUFBVTs4QkFtQlQsU0FBUyxNQVdULDBCQUEwQixNQWExQix3QkFBd0IsTUFXeEIseUJBQXlCLE1Bb0J6QixXQUFXLE1BU1gsT0FBTyxNQVdQLDBDQUEwQyxNQVcxQyxPQUFPLE1BY1AsTUFBTSxNQWFOLE9BQU8sTUFTUCxRQUFRLE1BUVIsU0FBUyxNQVFULFVBQVUsTUFPViw0QkFBNEIsTUFZNUIsYUFBYSxNQVliLFdBQVcsTUFTWCxpQkFBaUIsTUFVakIsZUFBZSxNQU9mLDhCQUE4QixNQVc5QixnQkFBZ0IsTUFTaEIsa0JBQWtCLE1BTWxCLGNBQWMsTUFPZCxlQUFlLE1BYWYsV0FBVyxNQU9YLGlCQUFpQixNQWFqQixxQkFBcUIsTUFnQnJCLHVCQUF1QixNQVV2QixRQUFRLE1BUVIsV0FBVyxNQWdCWCw0QkFBNEIsTUFRNUIsMkJBQTJCLE1BUTNCLDZCQUE2QixNQVE3QixrQkFBa0IsTUFPbEIsMEJBQTBCLE1BUTFCLGlCQUFpQixNQU1qQixvQkFBb0IsTUFVcEIsVUFBVSxNQVNWLFdBQVcsTUFTWCxtQkFBbUIsTUFTbkIscUJBQXFCLE1BUXJCLHFCQUFxQixNQVlyQixrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3Jkb3ZhLCBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiwgUGx1Z2luIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9TTm90aWZpY2F0aW9uIHtcbiAgLyoqXG4gICAqIFdhcyBhcHAgaW4gZm9jdXMuXG4gICAqL1xuICBpc0FwcEluRm9jdXM/OiBib29sZWFuO1xuICAvKipcbiAgICogV2FzIG5vdGlmaWNhdGlvbiBzaG93biB0byB0aGUgdXNlci4gV2lsbCBiZSBmYWxzZSBmb3Igc2lsZW50IG5vdGlmaWNhdGlvbnMuXG4gICAqL1xuICBzaG93bj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBTkRST0lEKiogLSBBbmRyb2lkIE5vdGlmaWNhdGlvbiBhc3NpZ25lZCB0byB0aGUgbm90aWZpY2F0aW9uLiBDYW4gYmUgdXNlZCB0byBjYW5jZWwgb3IgcmVwbGFjZSB0aGUgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgYW5kcm9pZE5vdGlmaWNhdGlvbklkPzogbnVtYmVyO1xuICAvKipcbiAgICogUGF5bG9hZCByZWNlaXZlZCBmcm9tIE9uZVNpZ25hbC5cbiAgICovXG4gIHBheWxvYWQ/OiBPU05vdGlmaWNhdGlvblBheWxvYWQ7XG4gIC8qKlxuICAgKiBIb3cgdGhlIG5vdGlmaWNhdGlvbiB3YXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyLiBDYW4gYmUgc2V0IHRvIGBOb3RpZmljYXRpb25gLCBgSW5BcHBBbGVydGAsIG9yIGBOb25lYCBpZiBpdCB3YXMgbm90IGRpc3BsYXllZC5cbiAgICovXG4gIGRpc3BsYXlUeXBlPzogT1NEaXNwbGF5VHlwZTtcbiAgLyoqXG4gICAqIEFORFJPSUQqKiAtIE5vdGlmaWNhdGlvbiBpcyBhIHN1bW1hcnkgbm90aWZpY2F0aW9uIGZvciBhIGdyb3VwIHRoaXMgd2lsbCBjb250YWluIGFsbCBub3RpZmljYXRpb24gcGF5bG9hZHMgaXQgd2FzIGNyZWF0ZWQgZnJvbS5cbiAgICovXG4gIGdyb3VwZWROb3RpZmljYXRpb25zPzogT1NOb3RpZmljYXRpb25QYXlsb2FkW107XG4gIGFwcF9pZD86IHN0cmluZztcbiAgY29udGVudHM/OiBhbnk7XG4gIGhlYWRpbmdzPzogYW55O1xuICBpc0lvcz86IGJvb2xlYW47XG4gIGlzQW5kcm9pZD86IGJvb2xlYW47XG4gIGlzV1A/OiBib29sZWFuO1xuICBpc1dQX1dOUz86IGJvb2xlYW47XG4gIGlzQWRtPzogYm9vbGVhbjtcbiAgaXNDaHJvbWU/OiBib29sZWFuO1xuICBpc0Nocm9tZVdlYj86IGJvb2xlYW47XG4gIGlzU2FmYXJpPzogYm9vbGVhbjtcbiAgaXNBbnlXZWI/OiBib29sZWFuO1xuICBpbmNsdWRlZF9zZWdtZW50cz86IHN0cmluZ1tdO1xuICBleGNsdWRlZF9zZWdtZW50cz86IHN0cmluZ1tdO1xuICBpbmNsdWRlX3BsYXllcl9pZHM/OiBzdHJpbmdbXTtcbiAgaW5jbHVkZV9pb3NfdG9rZW5zPzogc3RyaW5nW107XG4gIGluY2x1ZGVfYW5kcm9pZF9yZWdfaWRzPzogc3RyaW5nW107XG4gIGluY2x1ZGVfd3BfdXJpcz86IHN0cmluZ1tdO1xuICBpbmNsdWRlX3dwX3duc191cmlzPzogc3RyaW5nW107XG4gIGluY2x1ZGVfYW1hem9uX3JlZ19pZHM/OiBzdHJpbmdbXTtcbiAgaW5jbHVkZV9jaHJvbWVfcmVnX2lkcz86IHN0cmluZ1tdO1xuICBpbmNsdWRlX2Nocm9tZV93ZWJfcmVnX2lkcz86IHN0cmluZ1tdO1xuICBhcHBfaWRzPzogc3RyaW5nW107XG4gIHRhZ3M/OiBhbnlbXTtcbiAgaW9zX2JhZGdlVHlwZT86IHN0cmluZztcbiAgaW9zX2JhZGdlQ291bnQ/OiBudW1iZXI7XG4gIGlvc19zb3VuZD86IHN0cmluZztcbiAgYW5kcm9pZF9zb3VuZD86IHN0cmluZztcbiAgYWRtX3NvdW5kPzogc3RyaW5nO1xuICB3cF9zb3VuZD86IHN0cmluZztcbiAgd3Bfd25zX3NvdW5kPzogc3RyaW5nO1xuICBkYXRhPzogYW55O1xuICBidXR0b25zPzogYW55O1xuICBjb2xsYXBzZV9pZD86IHN0cmluZztcbiAgc21hbGxfaWNvbj86IHN0cmluZztcbiAgbGFyZ2VfaWNvbj86IHN0cmluZztcbiAgYmlnX3BpY3R1cmU/OiBzdHJpbmc7XG4gIGFkbV9zbWFsbF9pY29uPzogc3RyaW5nO1xuICBhZG1fbGFyZ2VfaWNvbj86IHN0cmluZztcbiAgYWRtX2JpZ19waWN0dXJlPzogc3RyaW5nO1xuICBjaHJvbWVfaWNvbj86IHN0cmluZztcbiAgY2hyb21lX2JpZ19waWN0dXJlPzogc3RyaW5nO1xuICBjaHJvbWVfd2ViX2ljb24/OiBzdHJpbmc7XG4gIGZpcmVmb3hfaWNvbj86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xuICBzZW5kX2FmdGVyPzogc3RyaW5nO1xuICBkZWxheWVkX29wdGlvbj86IHN0cmluZztcbiAgZGVsaXZlcnlfdGltZV9vZl9kYXk/OiBzdHJpbmc7XG4gIGFuZHJvaWRfbGVkX2NvbG9yPzogc3RyaW5nO1xuICBhbmRyb2lkX2FjY2VudF9jb2xvcj86IHN0cmluZztcbiAgYW5kcm9pZF92aXNpYmlsaXR5PzogbnVtYmVyO1xuICBjb250ZW50X2F2YWlsYWJsZT86IGJvb2xlYW47XG4gIGFtYXpvbl9iYWNrZ3JvdW5kX2RhdGE/OiBib29sZWFuO1xuICB0ZW1wbGF0ZV9pZD86IHN0cmluZztcbiAgYW5kcm9pZF9ncm91cD86IHN0cmluZztcbiAgYW5kcm9pZF9ncm91cF9tZXNzYWdlPzogYW55O1xuICBhZG1fZ3JvdXA/OiBzdHJpbmc7XG4gIGFkbV9ncm91cF9tZXNzYWdlPzogYW55O1xuICB0dGw/OiBudW1iZXI7XG4gIHByaW9yaXR5PzogbnVtYmVyO1xuICBpb3NfY2F0ZWdvcnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQU5EUk9JRCoqIC0gUHJpdmFjeSBzZXR0aW5nIGZvciBob3cgdGhlIG5vdGlmaWNhdGlvbiBzaG91bGQgYmUgc2hvd24gb24gdGhlIGxvY2tzY3JlZW4gb2YgQW5kcm9pZCA1KyBkZXZpY2VzLlxuICovXG5leHBvcnQgZW51bSBPU0xvY2tTY3JlZW5WaXNpYmlsaXR5IHtcbiAgLyoqXG4gICAqIEZ1bGx5IHZpc2libGUgKGRlZmF1bHQpXG4gICAqL1xuICBQdWJsaWMgPSAxLFxuICAvKipcbiAgICogQ29udGVudHMgYXJlIGhpZGRlblxuICAgKi9cbiAgUHJpdmF0ZSA9IDAsXG4gIC8qKlxuICAgKiBOb3Qgc2hvd25cbiAgICovXG4gIFNlY3JldCA9IC0xLFxufVxuXG4vKipcbiAqIEhvdyB0aGUgbm90aWZpY2F0aW9uIHdhcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuIFBhcnQgb2YgT1NOb3RpZmljYXRpb24uIFNlZSBpbkZvY3VzRGlzcGxheWluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhpcyBpcyB1c2VkLlxuICovXG5leHBvcnQgZW51bSBPU0Rpc3BsYXlUeXBlIHtcbiAgLyoqXG4gICAqIG5vdGlmaWNhdGlvbiBpcyBzaWxlbnQsIG9yIGluRm9jdXNEaXNwbGF5aW5nIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgTm9uZSA9IDAsXG4gIC8qKlxuICAgKiAoKipERUZBVUxUKiopIC0gbmF0aXZlIGFsZXJ0IGRpYWxvZyBkaXNwbGF5LlxuICAgKi9cbiAgSW5BcHBBbGVydCA9IDEsXG4gIC8qKlxuICAgKiBuYXRpdmUgbm90aWZpY2F0aW9uIGRpc3BsYXkuXG4gICAqL1xuICBOb3RpZmljYXRpb24gPSAyLFxufVxuXG4vKipcbiAqIENvbnRlbnRzIGFuZCBzZXR0aW5ncyBvZiB0aGUgbm90aWZpY2F0aW9uIHRoZSB1c2VyIHJlY2VpdmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9TTm90aWZpY2F0aW9uUGF5bG9hZCB7XG4gIC8qKlxuICAgKiBPbmVTaWduYWwgbm90aWZpY2F0aW9uIFVVSUQuXG4gICAqL1xuICBub3RpZmljYXRpb25JRDogc3RyaW5nO1xuICAvKipcbiAgICogVGl0bGUgb2YgdGhlIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCb2R5IG9mIHRoZSBub3RpZmljYXRpb24uXG4gICAqL1xuICBib2R5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDdXN0b20gYWRkaXRpb25hbCBkYXRhIHRoYXQgd2FzIHNlbnQgd2l0aCB0aGUgbm90aWZpY2F0aW9uLiBTZXQgb24gdGhlIGRhc2hib2FyZCB1bmRlciBPcHRpb25zID4gQWRkaXRpb25hbCBEYXRhXG4gICAqIG9yIHdpdGggdGhlICdkYXRhJyBmaWVsZCBvbiB0aGUgUkVTVCBBUEkuXG4gICAqL1xuICBhZGRpdGlvbmFsRGF0YT86IGFueTtcbiAgLyoqXG4gICAqIEFORFJPSUQqKiAtIFNtYWxsIGljb24gcmVzb3VyY2UgbmFtZSBzZXQgb24gdGhlIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHNtYWxsSWNvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFORFJPSUQqKiAtIExhcmdlIGljb24gc2V0IG9uIHRoZSBub3RpZmljYXRpb24uXG4gICAqL1xuICBsYXJnZUljb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBTkRST0lEKiogLSBCaWcgcGljdHVyZSBpbWFnZSBzZXQgb24gdGhlIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIGJpZ1BpY3R1cmU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBTkRST0lEKiogLSBBY2NlbnQgY29sb3Igc2hvd24gYXJvdW5kIHNtYWxsIG5vdGlmaWNhdGlvbiBpY29uIG9uIEFuZHJvaWQgNSsgZGV2aWNlcy4gQVJHQiBmb3JtYXQuXG4gICAqL1xuICBzbWFsbEljb25BY2NlbnRDb2xvcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFVSTCB0byBvcGVuIHdoZW4gb3BlbmluZyB0aGUgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgbGF1bmNoVVJMPzogc3RyaW5nO1xuICAvKipcbiAgICogU291bmQgcmVzb3VyY2UgdG8gcGxheSB3aGVuIHRoZSBub3RpZmljYXRpb24gaXMgc2hvd24uXG4gICAqL1xuICBzb3VuZDogc3RyaW5nO1xuICAvKipcbiAgICogQU5EUk9JRCoqIC0gRGV2aWNlcyB0aGF0IGhhdmUgYSBub3RpZmljYXRpb24gTEVEIHdpbGwgYmxpbmsgaW4gdGhpcyBjb2xvci4gQVJHQiBmb3JtYXQuXG4gICAqL1xuICBsZWRDb2xvcj86IHN0cmluZztcbiAgbG9ja1NjcmVlblZpc2liaWxpdHk/OiBPU0xvY2tTY3JlZW5WaXNpYmlsaXR5O1xuICAvKipcbiAgICogQU5EUk9JRCoqIC0gTm90aWZpY2F0aW9ucyB3aXRoIHRoaXMgc2FtZSBrZXkgd2lsbCBiZSBncm91cGVkIHRvZ2V0aGVyIGFzIGEgc2luZ2xlIHN1bW1hcnkgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgZ3JvdXBLZXk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBTkRST0lEKiogLSBTdW1tYXJ5IHRleHQgZGlzcGxheWVkIGluIHRoZSBzdW1tYXJ5IG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIGdyb3VwTWVzc2FnZT86IHN0cmluZztcbiAgLyoqXG4gICAqIExpc3Qgb2YgYWN0aW9uIGJ1dHRvbnMgb24gdGhlIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIGFjdGlvbkJ1dHRvbnM6IE9TQWN0aW9uQnV0dG9uW107XG4gIC8qKlxuICAgKiBBTkRST0lEKiogLSBUaGUgR29vZ2xlIHByb2plY3QgbnVtYmVyIHRoZSBub3RpZmljYXRpb24gd2FzIHNlbnQgdW5kZXIuXG4gICAqL1xuICBmcm9tUHJvamVjdE51bWJlcj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFORFJPSUQqKiAtIElmIGEgYmFja2dyb3VuZCBpbWFnZSB3YXMgc2V0IHRoaXMgb2JqZWN0IHdpbGwgYmUgYXZhaWxhYmxlLlxuICAgKi9cbiAgYmFja2dyb3VuZEltYWdlTGF5b3V0PzogT1NCYWNrZ3JvdW5kSW1hZ2VMYXlvdXQ7XG4gIHByaW9yaXR5PzogbnVtYmVyO1xuICAvKipcbiAgICogTGlzdCBvZiBhY3Rpb24gYnV0dG9ucyBvbiB0aGUgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgcmF3UGF5bG9hZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgYWN0aW9uIGJ1dHRvbnMgb24gdGhlIG5vdGlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPU0FjdGlvbkJ1dHRvbiB7XG4gIC8qKlxuICAgKiBJZCBhc3NpZ25lZCB0byB0aGUgYnV0dG9uLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRleHQgc2hvdyBvbiB0aGUgYnV0dG9uIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKipcbiAgICogQU5EUk9JRCoqIC0gSWNvbiBzaG93biBvbiB0aGUgYnV0dG9uLlxuICAgKi9cbiAgaWNvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9TUGVybWlzc2lvblN0YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT1NQZXJtaXNzaW9uU3RhdGUge1xuICAvKipcbiAgICogVXNlciB3YXMgcHJvbXB0ZWQuXG4gICAqL1xuICBoYXNQcm9tcHRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFBlcm1pc3Npb25zIFN0YXR1cyAoaU9TIE9ubHkpXG4gICAqL1xuICBzdGF0dXM6IGFueTtcbiAgLyoqXG4gICAqIFBlcm1pc3Npb25zIFN0YXRlIChBbmRyb2lkIE9ubHkpXG4gICAqL1xuICBzdGF0ZTogYW55O1xufVxuXG4vKipcbiAqIE9TU3Vic2NyaXB0aW9uU3RhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPU1N1YnNjcmlwdGlvblN0YXRlIHtcbiAgc3Vic2NyaWJlZDogYm9vbGVhbjtcbiAgdXNlclN1YnNjcmlwdGlvblNldHRpbmc6IGFueTtcbiAgdXNlcklkOiBhbnk7XG4gIHB1c2hUb2tlbjogYW55O1xufVxuXG4vKipcbiAqIFN1YnNjcmlwdGlvbiBhbmQgcGVybWlzc2lvbnMgc3RhdHVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT1NQZXJtaXNzaW9uU3Vic2NyaXB0aW9uU3RhdGUge1xuICAvKipcbiAgICogSWQgYXNzaWduZWQgdG8gdGhlIGJ1dHRvbi5cbiAgICovXG4gIHBlcm1pc3Npb25TdGF0dXM6IE9TUGVybWlzc2lvblN0YXRlO1xuICAvKipcbiAgICogVGV4dCBzaG93IG9uIHRoZSBidXR0b24gdG8gdGhlIHVzZXIuXG4gICAqL1xuICBzdWJzY3JpcHRpb25TdGF0dXM6IE9TU3Vic2NyaXB0aW9uU3RhdGU7XG59XG5cbi8qKlxuICogQU5EUk9JRCoqIC0gSWYgYSBiYWNrZ3JvdW5kIGltYWdlIHdhcyBzZXQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9TQmFja2dyb3VuZEltYWdlTGF5b3V0IHtcbiAgLyoqXG4gICAqIEltYWdlIFVSTCBvciBuYW1lIHVzZWQgYXMgdGhlIGJhY2tncm91bmQgaW1hZ2UuXG4gICAqL1xuICBpbWFnZTogc3RyaW5nO1xuICAvKipcbiAgICogVGV4dCBjb2xvciBvZiB0aGUgdGl0bGUgb24gdGhlIG5vdGlmaWNhdGlvbi4gQVJHQiBGb3JtYXQuXG4gICAqL1xuICB0aXRsZVRleHRDb2xvcjogc3RyaW5nO1xuICAvKipcbiAgICogVGV4dCBjb2xvciBvZiB0aGUgYm9keSBvbiB0aGUgbm90aWZpY2F0aW9uLiBBUkdCIEZvcm1hdC5cbiAgICovXG4gIGJvZHlUZXh0Q29sb3I6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW5mb3JtYXRpb24gcmV0dXJuZWQgZnJvbSBhIG5vdGlmaWNhdGlvbiB0aGUgdXNlciByZWNlaXZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPU05vdGlmaWNhdGlvbk9wZW5lZFJlc3VsdCB7XG4gIGFjdGlvbjoge1xuICAgIC8qKlxuICAgICAqIFdhcyB0aGUgbm90aWZpY2F0aW9uIG9wZW5lZCBub3JtYWxseSAoYE9wZW5lZGApIG9yIHdhcyBhIGJ1dHRvbiBwcmVzc2VkIG9uIHRoZSBub3RpZmljYXRpb24gKGBBY3Rpb25UYWtlbmApLlxuICAgICAqL1xuICAgIHR5cGU6IE9TQWN0aW9uVHlwZTtcbiAgICAvKipcbiAgICAgKiBJZiBgdHlwZWAgPT0gYEFjdGlvblRha2VuYCB0aGVuIHRoaXMgd2lsbCBjb250YWluIHRoZSBpZCBvZiB0aGUgYnV0dG9uIHByZXNzZWQuXG4gICAgICovXG4gICAgYWN0aW9uSUQ/OiBzdHJpbmc7XG4gIH07XG4gIG5vdGlmaWNhdGlvbjogT1NOb3RpZmljYXRpb247XG59XG5cbmV4cG9ydCBlbnVtIE9TQWN0aW9uVHlwZSB7XG4gIE9wZW5lZCA9IDAsXG4gIEFjdGlvblRha2UgPSAxLFxufVxuXG4vKipcbiAqIERldGFpbHMgYWJvdXQgdGhlIEluLUFwcCBNZXNzYWdlIGFjdGlvbiBlbGVtZW50IChidXR0b24gb3IgaW1hZ2UpIHRoYXQgd2FzIHRhcHBlZCBvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPU0luQXBwTWVzc2FnZUFjdGlvbiB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBjbGljayBuYW1lIGRlZmluZWQgZm9yIHRoZSBhY3Rpb24gZWxlbWVudC4gbnVsbCBvciBuaWwgKGlPUykgaWYgbm90IHNldC5cbiAgICovXG4gIGNsaWNrX25hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIFVSTCB0aGF0IG9wZW5zIHdoZW4gdGhlIGFjdGlvbiB0YWtlcyBwbGFjZS4gbnVsbCBvciBuaWwgKGlPUykgaWYgbm90IHNldC5cbiAgICovXG4gIGNsaWNrX3VybDogc3RyaW5nO1xuICAvKipcbiAgICogYHRydWVgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHVzZXIgaGFzIHByZXNzZWQgYW55IGFjdGlvbiBvbiB0aGUgSW4tQXBwIE1lc3NhZ2UuXG4gICAqL1xuICBmaXJzdF9jbGljazogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIEluLUFwcCBNZXNzYWdlIHdpbGwgYW5pbWF0ZSBvZmYgdGhlIHNjcmVlbi4gSWYgYGZhbHNlYCwgdGhlIEluLUFwcCBNZXNzYWdlIHdpbGwgc3RheSBvbiBzY3JlZW4gdW50aWwgdGhlIHVzZXIgZGlzbWlzc2VzIGl0LlxuICAgKi9cbiAgY2xvc2VzX21lc3NhZ2U6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQG5hbWUgT25lU2lnbmFsXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBPbmVTaWduYWwgcGx1Z2luIGlzIGFuIGNsaWVudCBpbXBsZW1lbnRhdGlvbiBmb3IgdXNpbmcgdGhlIFtPbmVTaWduYWxdKGh0dHBzOi8vb25lc2lnbmFsLmNvbS8pIFNlcnZpY2UuXG4gKiBPbmVTaWduYWwgaXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIGRlbGl2ZXJpbmcgcHVzaCBub3RpZmljYXRpb25zLlxuICpcbiAqIFBsZWFzZSB2aWV3IHRoZSBvZmZpY2lhbCBbT25lU2lnbmFsIElvbmljIFNESyBJbnN0YWxsYXRpb25dKGh0dHBzOi8vZG9jdW1lbnRhdGlvbi5vbmVzaWduYWwuY29tL2RvY3MvaW9uaWMtc2RrLXNldHVwKSBndWlkZVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogIyMjIyBJY29uc1xuICogSWYgeW91IHdhbnQgdG8gdXNlIGdlbmVyYXRlZCBpY29ucyB3aXRoIGNvbW1hbmQgYGlvbmljIGNvcmRvdmEgcmVzb3VyY2VzYDpcbiAqXG4gKiAxLiBBZGQgYSBmaWxlIHRvIHlvdXIgYGhvb2tzYCBkaXJlY3RvcnkgY2FsbGVkIGBjb3B5X2FuZHJvaWRfbm90aWZpY2F0aW9uX2ljb25zLmpzYFxuICpcbiAqIDIuIENvbmZpZ3VyZSB0aGUgaG9vayBpbiB5b3VyIGNvbmZpZy54bWxcbiAqIGBgYFxuICogICAgIDxwbGF0Zm9ybSBuYW1lPVwiYW5kcm9pZFwiPlxuICogICAgICAgICA8aG9vayB0eXBlPVwiYWZ0ZXJfcHJlcGFyZVwiIHNyYz1cImhvb2tzL2NvcHlfYW5kcm9pZF9ub3RpZmljYXRpb25faWNvbnMuanNcIiAvPlxuICogICAgIDwvcGxhdGZvcm0+XG4gKiBgYGBcbiAqXG4gKiAzLiBQdXQgdGhlIGZvbGxvd2luZyBjb2RlIGluIGl0OlxuICpcbiAqIGBgYFxuICogIyEvdXNyL2Jpbi9lbnYgbm9kZVxuICpcbiAqIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gKiB2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbiAqXG4gKiB2YXIgZmlsZXN0b2NvcHkgPSBbe1xuICogICAgIFwicmVzb3VyY2VzL2FuZHJvaWQvaWNvbi9kcmF3YWJsZS1oZHBpLWljb24ucG5nXCI6XG4gKiAgICAgICAgIFwicGxhdGZvcm1zL2FuZHJvaWQvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3N0YXRfb25lc2lnbmFsX2RlZmF1bHQucG5nXCJcbiAqIH0sIHtcbiAqICAgICBcInJlc291cmNlcy9hbmRyb2lkL2ljb24vZHJhd2FibGUtbWRwaS1pY29uLnBuZ1wiOlxuICogICAgICAgICBcInBsYXRmb3Jtcy9hbmRyb2lkL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUtbWRwaS9pY19zdGF0X29uZXNpZ25hbF9kZWZhdWx0LnBuZ1wiXG4gKiB9LCB7XG4gKiAgICAgXCJyZXNvdXJjZXMvYW5kcm9pZC9pY29uL2RyYXdhYmxlLXhoZHBpLWljb24ucG5nXCI6XG4gKiAgICAgICAgIFwicGxhdGZvcm1zL2FuZHJvaWQvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19zdGF0X29uZXNpZ25hbF9kZWZhdWx0LnBuZ1wiXG4gKiB9LCB7XG4gKiAgICAgXCJyZXNvdXJjZXMvYW5kcm9pZC9pY29uL2RyYXdhYmxlLXh4aGRwaS1pY29uLnBuZ1wiOlxuICogICAgICAgICBcInBsYXRmb3Jtcy9hbmRyb2lkL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3N0YXRfb25lc2lnbmFsX2RlZmF1bHQucG5nXCJcbiAqIH0sIHtcbiAqICAgICBcInJlc291cmNlcy9hbmRyb2lkL2ljb24vZHJhd2FibGUteHh4aGRwaS1pY29uLnBuZ1wiOlxuICogICAgICAgICBcInBsYXRmb3Jtcy9hbmRyb2lkL2FwcC9zcmMvbWFpbi9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19zdGF0X29uZXNpZ25hbF9kZWZhdWx0LnBuZ1wiXG4gKiB9IF07XG4gKlxuICogbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gKlxuICogICAgIC8vIG5vIG5lZWQgdG8gY29uZmlndXJlIGJlbG93XG4gKiAgICAgdmFyIHJvb3RkaXIgPSBjb250ZXh0Lm9wdHMucHJvamVjdFJvb3Q7XG4gKlxuICogICAgIGZpbGVzdG9jb3B5LmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gKiAgICAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAqICAgICAgICAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcbiAqICAgICAgICAgICAgIHZhciBzcmNmaWxlID0gcGF0aC5qb2luKHJvb3RkaXIsIGtleSk7XG4gKiAgICAgICAgICAgICB2YXIgZGVzdGZpbGUgPSBwYXRoLmpvaW4ocm9vdGRpciwgdmFsKTtcbiAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29weWluZyBcIitzcmNmaWxlK1wiIHRvIFwiK2Rlc3RmaWxlKTtcbiAqICAgICAgICAgICAgIHZhciBkZXN0ZGlyID0gcGF0aC5kaXJuYW1lKGRlc3RmaWxlKTtcbiAqICAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHNyY2ZpbGUpICYmIGZzLmV4aXN0c1N5bmMoZGVzdGRpcikpIHtcbiAqICAgICAgICAgICAgICAgICBmcy5jcmVhdGVSZWFkU3RyZWFtKHNyY2ZpbGUpLnBpcGUoXG4gKiAgICAgICAgICAgICAgICAgICAgIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRlc3RmaWxlKSk7XG4gKiAgICAgICAgICAgICB9XG4gKiAgICAgICAgIH0pO1xuICogICAgIH0pO1xuICpcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiAzLiBGcm9tIHRoZSByb290IG9mIHlvdXIgcHJvamVjdCBtYWtlIHRoZSBmaWxlIGV4ZWN1dGFibGU6XG4gKiBgJCBjaG1vZCAreCBob29rcy9jb3B5X2FuZHJvaWRfbm90aWZpY2F0aW9uX2ljb25zLmpzYFxuICogQHVzYWdlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBPbmVTaWduYWwgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvb25lc2lnbmFsL25neCc7XG4gKlxuICogY29uc3RydWN0b3IocHJpdmF0ZSBvbmVTaWduYWw6IE9uZVNpZ25hbCkgeyB9XG4gKlxuICogLi4uXG4gKlxuICogdGhpcy5vbmVTaWduYWwuc3RhcnRJbml0KCdiMmY3Zjk2Ni1kOGNjLTExZTQtYmVkMS1kZjhmMDViZTU1YmEnLCAnNzAzMzIyNzQ0MjYxJyk7XG4gKlxuICogdGhpcy5vbmVTaWduYWwuaW5Gb2N1c0Rpc3BsYXlpbmcodGhpcy5vbmVTaWduYWwuT1NJbkZvY3VzRGlzcGxheU9wdGlvbi5JbkFwcEFsZXJ0KTtcbiAqXG4gKiB0aGlzLm9uZVNpZ25hbC5oYW5kbGVOb3RpZmljYXRpb25SZWNlaXZlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gKiAgLy8gZG8gc29tZXRoaW5nIHdoZW4gbm90aWZpY2F0aW9uIGlzIHJlY2VpdmVkXG4gKiB9KTtcbiAqXG4gKiB0aGlzLm9uZVNpZ25hbC5oYW5kbGVOb3RpZmljYXRpb25PcGVuZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICogICAvLyBkbyBzb21ldGhpbmcgd2hlbiBhIG5vdGlmaWNhdGlvbiBpcyBvcGVuZWRcbiAqIH0pO1xuICpcbiAqIHRoaXMub25lU2lnbmFsLmVuZEluaXQoKTtcbiAqIGBgYFxuICogQGludGVyZmFjZXNcbiAqIE9TTm90aWZpY2F0aW9uXG4gKiBPU0xvY2tTY3JlZW5WaXNpYmlsaXR5XG4gKiBPU0Rpc3BsYXlUeXBlXG4gKiBPU05vdGlmaWNhdGlvblBheWxvYWRcbiAqIE9TQWN0aW9uQnV0dG9uXG4gKiBPU0JhY2tncm91bmRJbWFnZUxheW91dFxuICogT1NOb3RpZmljYXRpb25PcGVuZWRSZXN1bHRcbiAqIE9TQWN0aW9uVHlwZVxuICogT1NJbkFwcE1lc3NhZ2VBY3Rpb25cbiAqL1xuQFBsdWdpbih7XG4gIHBsdWdpbk5hbWU6ICdPbmVTaWduYWwnLFxuICBwbHVnaW46ICdvbmVzaWduYWwtY29yZG92YS1wbHVnaW4nLFxuICBwbHVnaW5SZWY6ICdwbHVnaW5zLk9uZVNpZ25hbCcsXG4gIHJlcG86ICdodHRwczovL2dpdGh1Yi5jb20vT25lU2lnbmFsL09uZVNpZ25hbC1Db3Jkb3ZhLVNESycsXG4gIHBsYXRmb3JtczogWydBbWF6b24gRmlyZSBPUycsICdBbmRyb2lkJywgJ2lPUycsICdXaW5kb3dzJ10sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9uZVNpZ25hbCBleHRlbmRzIEF3ZXNvbWVDb3Jkb3ZhTmF0aXZlUGx1Z2luIHtcbiAgLyoqXG4gICAqIGNvbnN0YW50cyB0byB1c2UgaW4gaW5Gb2N1c0Rpc3BsYXlpbmcoKVxuICAgKiBAaGlkZGVuXG4gICAqL1xuICBPU0luRm9jdXNEaXNwbGF5T3B0aW9uID0ge1xuICAgIE5vbmU6IDAsXG4gICAgSW5BcHBBbGVydDogMSxcbiAgICBOb3RpZmljYXRpb246IDIsXG4gIH07XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBPbmNlIHlvdSBhcmUgZG9uZSBjb25maWd1cmluZyBPbmVTaWduYWwsIGNhbGwgdGhlIGBlbmRJbml0YCBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIFlvdXIgT25lU2lnbmFsIGFwcCBpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ29vZ2xlUHJvamVjdE51bWJlciAqKkFORFJPSUQqKiAtIHlvdXIgR29vZ2xlIHByb2plY3QgbnVtYmVyOyBvbmx5IHJlcXVpcmVkIGZvciBBbmRyb2lkIEdDTS9GQ00gcHVzaGVzLlxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIHN0YXJ0SW5pdChhcHBJZDogc3RyaW5nLCBnb29nbGVQcm9qZWN0TnVtYmVyPzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gcnVuIHdoZW4gYSBub3RpZmljYXRpb24gaXMgcmVjZWl2ZWQsIHdoZXRoZXIgaXQgd2FzIGRpc3BsYXllZCBvciBub3QuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPE9uZVNpZ25hbFJlY2VpdmVkTm90aWZpY2F0aW9uPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvYnNlcnZhYmxlOiB0cnVlLFxuICB9KVxuICBoYW5kbGVOb3RpZmljYXRpb25SZWNlaXZlZCgpOiBPYnNlcnZhYmxlPE9TTm90aWZpY2F0aW9uPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIHJ1biB3aGVuIGEgbm90aWZpY2F0aW9uIGlzIHRhcHBlZCBvbiBmcm9tIHRoZSBub3RpZmljYXRpb24gc2hhZGUgKCoqQU5EUk9JRCoqKSBvciBub3RpZmljYXRpb25cbiAgICogY2VudGVyICgqKmlPUyoqKSwgb3Igd2hlbiBjbG9zaW5nIGFuIEFsZXJ0IG5vdGlmaWNhdGlvbiBzaG93biBpbiB0aGUgYXBwIChpZiBJbkFwcEFsZXJ0IGlzIGVuYWJsZWQgaW5cbiAgICogaW5Gb2N1c0Rpc3BsYXlpbmcpLlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxPbmVTaWduYWxPcGVuZWROb3RpZmljYXRpb24+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG9ic2VydmFibGU6IHRydWUsXG4gIH0pXG4gIGhhbmRsZU5vdGlmaWNhdGlvbk9wZW5lZCgpOiBPYnNlcnZhYmxlPE9TTm90aWZpY2F0aW9uT3BlbmVkUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0byBwcm9jZXNzIGFuIEluLUFwcCBNZXNzYWdlIHRoZSB1c2VyIGp1c3QgdGFwcGVkIG9uLlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxPU0luQXBwTWVzc2FnZUFjdGlvbj59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb2JzZXJ2YWJsZTogdHJ1ZSxcbiAgfSlcbiAgaGFuZGxlSW5BcHBNZXNzYWdlQ2xpY2tlZCgpOiBPYnNlcnZhYmxlPE9TSW5BcHBNZXNzYWdlQWN0aW9uPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIGlPUyoqIC0gU2V0dGluZ3MgZm9yIGlPUyBhcHBzXG4gICAqIEBwYXJhbSBzZXR0aW5nc1xuICAgKiAga09TU2V0dGluZ3NLZXlBdXRvUHJvbXB0OiBib29sZWFuID0gdHJ1ZVxuICAgKiAgQXV0byBwcm9tcHQgdXNlciBmb3Igbm90aWZpY2F0aW9uIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiAga09TU2V0dGluZ3NLZXlJbkFwcExhdW5jaFVSTDogYm9vbGVhbiA9IGZhbHNlXG4gICAqICBMYXVuY2ggbm90aWZpY2F0aW9ucyB3aXRoIGEgbGF1bmNoIFVSTCBhcyBhbiBpbiBhcHAgd2Vidmlldy5cbiAgICogQHBhcmFtIHNldHRpbmdzLmtPU1NldHRpbmdzS2V5QXV0b1Byb21wdFxuICAgKiBAcGFyYW0gc2V0dGluZ3Mua09TU2V0dGluZ3NLZXlJbkFwcExhdW5jaFVSTFxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN5bmM6IHRydWUsXG4gICAgcGxhdGZvcm1zOiBbJ2lPUyddLFxuICB9KVxuICBpT1NTZXR0aW5ncyhzZXR0aW5nczogeyBrT1NTZXR0aW5nc0tleUF1dG9Qcm9tcHQ6IGJvb2xlYW47IGtPU1NldHRpbmdzS2V5SW5BcHBMYXVuY2hVUkw6IGJvb2xlYW4gfSk6IGFueSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIGBzdGFydEluaXRgIHRvIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uIG9mIE9uZVNpZ25hbC5cbiAgICogQHJldHVybnMge2FueX1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlbmRJbml0KCk6IGFueSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb21wdCB0aGUgdXNlciBmb3Igbm90aWZpY2F0aW9uIHBlcm1pc3Npb25zLiBDYWxsYmFjayBmaXJlcyBhcyBzb29uIGFzIHRoZSB1c2VyIGFjY2VwdHMgb3IgZGVjbGluZXMgbm90aWZpY2F0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ2lPUyddLFxuICB9KVxuICBwcm9tcHRGb3JQdXNoTm90aWZpY2F0aW9uc1dpdGhVc2VyUmVzcG9uc2UoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgbGlzdCBvZiB0YWdzIHRoYXQgaGF2ZSBiZWVuIHNldCBvbiB0aGUgdXNlciBmcm9tIHRoZSBPbmVTaWduYWwgc2VydmVyLlxuICAgKlxuICAgKiBRdWlyayoqOiBZb3UgbXVzdCB3YWl0IGZvciBgZ2V0VGFnc2AgdG8gcmVzb2x2ZSBiZWZvcmUgY2FsbGluZyBpdCBhZ2FpbiwgYXMgdGhlIHBsdWdpbiB3aWxsIG9ubHkgcHJvY2VzcyB0aGUgbGFzdCBtZXRob2QgY2FsbCBhbmQgZGlzY2FyZCBhbnkgcHJldmlvdXMgb25lcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn0gUmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRhZ3MgYXJlIHJlY2lldmVkLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRUYWdzKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIExldHMgeW91IHJldHJpZXZlIHRoZSBPbmVTaWduYWwgdXNlciBpZCBhbmQgZGV2aWNlIHRva2VuLlxuICAgKiBZb3VyIGhhbmRsZXIgaXMgY2FsbGVkIGFmdGVyIHRoZSBkZXZpY2UgaXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgd2l0aCBPbmVTaWduYWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IFJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgaWYgdGhlIGRldmljZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqICB1c2VySWQge3N0cmluZ30gT25lU2lnbmFsIHVzZXJJZCBpcyBhIFVVSUQgZm9ybWF0dGVkIHN0cmluZy4gKHVuaXF1ZSBwZXIgZGV2aWNlIHBlciBhcHApXG4gICAqXG4gICAqICBwdXNoVG9rZW4ge3N0cmluZ30gQSBwdXNoIHRva2VuIGlzIGEgR29vZ2xlL0FwcGxlIGFzc2lnbmVkIGlkZW50aWZpZXIodW5pcXVlIHBlciBkZXZpY2UgcGVyIGFwcCkuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldElkcygpOiBQcm9taXNlPHsgdXNlcklkOiBzdHJpbmc7IHB1c2hUb2tlbjogc3RyaW5nIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVGFnIGEgdXNlciBiYXNlZCBvbiBhbiBhcHAgZXZlbnQgb2YgeW91ciBjaG9vc2luZyBzbyBsYXRlciB5b3UgY2FuIGNyZWF0ZSBzZWdtZW50cyBvbiBbb25lc2lnbmFsLmNvbV0oaHR0cHM6Ly9vbmVzaWduYWwuY29tLykgdG8gdGFyZ2V0IHRoZXNlIHVzZXJzLlxuICAgKiBSZWNvbW1lbmQgdXNpbmcgc2VuZFRhZ3Mgb3ZlciBzZW5kVGFnIGlmIHlvdSBuZWVkIHRvIHNldCBtb3JlIHRoYW4gb25lIHRhZyBvbiBhIHVzZXIgYXQgYSB0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gS2V5IG9mIHlvdXIgY2hvb3NpbmcgdG8gY3JlYXRlIG9yIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFZhbHVlIHRvIHNldCBvbiB0aGUga2V5LiBOT1RFOiBQYXNzaW5nIGluIGEgYmxhbmsgU3RyaW5nIGRlbGV0ZXMgdGhlIGtleSwgeW91IGNhbiBhbHNvIGNhbGwgZGVsZXRlVGFnLlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIHNlbmRUYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIFRhZyBhIHVzZXIgYmFzZWQgb24gYW4gYXBwIGV2ZW50IG9mIHlvdXIgY2hvb3Npbmcgc28gbGF0ZXIgeW91IGNhbiBjcmVhdGUgc2VnbWVudHMgb24gW29uZXNpZ25hbC5jb21dKGh0dHBzOi8vb25lc2lnbmFsLmNvbS8pIHRvIHRhcmdldCB0aGVzZSB1c2Vycy5cbiAgICogUmVjb21tZW5kIHVzaW5nIHNlbmRUYWdzIG92ZXIgc2VuZFRhZyBpZiB5b3UgbmVlZCB0byBzZXQgbW9yZSB0aGFuIG9uZSB0YWcgb24gYSB1c2VyIGF0IGEgdGltZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFBhc3MgYSBqc29uIG9iamVjdCB3aXRoIGtleS92YWx1ZSBwYWlycyBsaWtlOiB7a2V5OiBcInZhbHVlXCIsIGtleTI6IFwidmFsdWUyXCJ9XG4gICAqIEBwYXJhbSBqc29uXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgc2VuZFRhZ3MoanNvbjogYW55KTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgdGFnIHRoYXQgd2FzIHByZXZpb3VzbHkgc2V0IG9uIGEgdXNlciB3aXRoIGBzZW5kVGFnYCBvciBgc2VuZFRhZ3NgLiBVc2UgYGRlbGV0ZVRhZ3NgIGlmIHlvdSBuZWVkIHRvIGRlbGV0ZSBtb3JlIHRoYW4gb25lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gS2V5IHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIGtleVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGRlbGV0ZVRhZyhrZXk6IHN0cmluZyk6IHZvaWQge31cblxuICAvKipcbiAgICogRGVsZXRlcyB0YWdzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNldCBvbiBhIHVzZXIgd2l0aCBgc2VuZFRhZ2Agb3IgYHNlbmRUYWdzYC5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gS2V5cyB0byByZW1vdmUuXG4gICAqIEBwYXJhbSBrZXlzXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgZGVsZXRlVGFncyhrZXlzOiBzdHJpbmdbXSk6IHZvaWQge31cblxuICAvKipcbiAgICogQ2FsbCB0aGlzIHdoZW4geW91IHdvdWxkIGxpa2UgdG8gcHJvbXB0IGFuIGlPUyB1c2VyIHRvIGFjY2VwdCBwdXNoIG5vdGlmaWNhdGlvbnMgd2l0aCB0aGUgZGVmYXVsdCBzeXN0ZW0gcHJvbXB0LlxuICAgKiBPbmx5IHdvcmtzIGlmIHlvdSBzZXQgYGtPU1NldHRpbmdzQXV0b1Byb21wdGAgdG8gYGZhbHNlYCBpbiBgaU9TU2V0dGluZ3NgXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgcmVnaXN0ZXJGb3JQdXNoTm90aWZpY2F0aW9ucygpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIFdhcm5pbmc6XG4gICAqIE9ubHkgYXBwbGllcyB0byBBbmRyb2lkIGFuZCBBbWF6b24uIFlvdSBjYW4gY2FsbCB0aGlzIGZyb20geW91ciBVSSBmcm9tIGEgYnV0dG9uIHByZXNzIGZvciBleGFtcGxlIHRvIGdpdmUgeW91ciB1c2VyJ3Mgb3B0aW9ucyBmb3IgeW91ciBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0IE9uZVNpZ25hbCBhbHdheXMgdmlicmF0ZXMgdGhlIGRldmljZSB3aGVuIGEgbm90aWZpY2F0aW9uIGlzIGRpc3BsYXllZCB1bmxlc3MgdGhlIGRldmljZSBpcyBpbiBhIHRvdGFsIHNpbGVudCBtb2RlLlxuICAgKiBQYXNzaW5nIGZhbHNlIG1lYW5zIHRoYXQgdGhlIGRldmljZSB3aWxsIG9ubHkgdmlicmF0ZSBsaWdodGx5IHdoZW4gdGhlIGRldmljZSBpcyBpbiBpdCdzIHZpYnJhdGUgb25seSBtb2RlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZhbHNlIHRvIGRpc2FibGUgdmlicmF0ZSwgdHJ1ZSB0byByZS1lbmFibGUgaXQuXG4gICAqIEBwYXJhbSBlbmFibGVcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlbmFibGVWaWJyYXRlKGVuYWJsZTogYm9vbGVhbik6IHZvaWQge31cblxuICAvKipcbiAgICogV2FybmluZzpcbiAgICogT25seSBhcHBsaWVzIHRvIEFuZHJvaWQgYW5kIEFtYXpvbi4gWW91IGNhbiBjYWxsIHRoaXMgZnJvbSB5b3VyIFVJIGZyb20gYSBidXR0b24gcHJlc3MgZm9yIGV4YW1wbGUgdG8gZ2l2ZSB5b3VyIHVzZXIncyBvcHRpb25zIGZvciB5b3VyIG5vdGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgT25lU2lnbmFsIHBsYXlzIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IG5vdGlmaWNhdGlvbiBzb3VuZCB3aGVuIHRoZSBkZXZpY2UncyBub3RpZmljYXRpb24gc3lzdGVtIHZvbHVtZSBpcyB0dXJuZWQgb24uXG4gICAqIFBhc3NpbmcgZmFsc2UgbWVhbnMgdGhhdCB0aGUgZGV2aWNlIHdpbGwgb25seSB2aWJyYXRlIHVubGVzcyB0aGUgZGV2aWNlIGlzIHNldCB0byBhIHRvdGFsIHNpbGVudCBtb2RlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZhbHNlIHRvIGRpc2FibGUgc291bmQsIHRydWUgdG8gcmUtZW5hYmxlIGl0LlxuICAgKiBAcGFyYW0gZW5hYmxlXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgZW5hYmxlU291bmQoZW5hYmxlOiBib29sZWFuKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKlxuICAgKlNldHRpbmcgdG8gY29udHJvbCBob3cgT25lU2lnbmFsIG5vdGlmaWNhdGlvbnMgd2lsbCBiZSBzaG93biB3aGVuIG9uZSBpcyByZWNlaXZlZCB3aGlsZSB5b3VyIGFwcCBpcyBpbiBmb2N1cy4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byBpbkFwcEFsZXJ0LCB3aGljaCBjYW4gYmUgaGVscGZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gICAqIEBwYXJhbSB7RGlzcGxheVR5cGV9IGRpc3BsYXlPcHRpb25cbiAgICogQHJldHVybnMge2FueX1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBpbkZvY3VzRGlzcGxheWluZyhkaXNwbGF5T3B0aW9uOiBPU0Rpc3BsYXlUeXBlKTogYW55IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIHdpdGggZmFsc2UgdG8gb3B0IHVzZXJzIG91dCBvZiByZWNlaXZpbmcgYWxsIG5vdGlmaWNhdGlvbnMgdGhyb3VnaCBPbmVTaWduYWwuXG4gICAqIFlvdSBjYW4gcGFzcyB0cnVlIGxhdGVyIHRvIG9wdCB1c2VycyBiYWNrIGludG8gbm90aWZpY2F0aW9ucy5cbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBzZXRTdWJzY3JpcHRpb24oZW5hYmxlOiBib29sZWFuKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgbm90aWZpY2F0aW9uIGFuZCBwZXJtaXNzaW9uIHN0YXRlLiBSZXR1cm5zIGEgT1NQZXJtaXNzaW9uU3Vic2NyaXB0aW9uU3RhdGUgdHlwZSBkZXNjcmliZWQgYmVsb3cuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9TUGVybWlzc2lvblN1YnNjcmlwdGlvblN0YXRlPn1cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0UGVybWlzc2lvblN1YnNjcmlwdGlvblN0YXRlKCk6IFByb21pc2U8T1NQZXJtaXNzaW9uU3Vic2NyaXB0aW9uU3RhdGU+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtub3RpZmljYXRpb25PYmp9IFBhcmFtZXRlcnMgc2VlIFBPU1QgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jdW1lbnRhdGlvbi5vbmVzaWduYWwuY29tL3YyLjAvZG9jcy9ub3RpZmljYXRpb25zLWNyZWF0ZS1ub3RpZmljYXRpb24pXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb25PYmpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn0gUmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyBpZiB0aGUgbm90aWZpY2F0aW9uIHdhcyBzZW5kIHN1Y2Nlc3NmdWxseS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgcG9zdE5vdGlmaWNhdGlvbihub3RpZmljYXRpb25PYmo6IE9TTm90aWZpY2F0aW9uKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBhIHNpbmdsZSBPbmVTaWduYWwgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBBbmRyb2lkIG5vdGlmaWNhdGlvbiBpbnRlZ2VyIGlkLiBVc2UgaW5zdGVhZCBvZiBOb3RpZmljYXRpb25NYW5hZ2VyLmNhbmNlbChpZCk7IG90aGVyd2lzZSB0aGUgbm90aWZpY2F0aW9uIHdpbGwgYmUgcmVzdG9yZWQgd2hlbiB5b3VyIGFwcCBpcyByZXN0YXJ0ZWQuXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb25JZCB7c3RyaW5nfVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGNhbmNlbE5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZDogc3RyaW5nKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBQcm9tcHRzIHRoZSB1c2VyIGZvciBsb2NhdGlvbiBwZXJtaXNzaW9uIHRvIGFsbG93IGdlb3RhZ2dpbmcgYmFzZWQgb24gdGhlIFwiTG9jYXRpb24gcmFkaXVzXCIgZmlsdGVyIG9uIHRoZSBPbmVTaWduYWwgZGFzaGJvYXJkLlxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIHByb21wdExvY2F0aW9uKCk6IHZvaWQge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVtYWlsIHtzdHJpbmd9XG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgc3luY0hhc2hlZEVtYWlsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBsb2dnaW5nIHRvIGhlbHAgZGVidWcgaWYgeW91IHJ1biBpbnRvIGFuIGlzc3VlIHNldHRpbmcgdXAgT25lU2lnbmFsLlxuICAgKiBUaGUgbG9nZ2luZyBsZXZlbHMgYXJlIGFzIGZvbGxvd3M6IDAgPSBOb25lLCAxPSBGYXRhbCwgMiA9IEVycm9ycywgMyA9IFdhcm5pbmdzLCA0ID0gSW5mbywgNSA9IERlYnVnLCA2ID0gVmVyYm9zZVxuICAgKlxuICAgKiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSB0aGUgbW9yZSBpbmZvcm1hdGlvbiBpcyBzaG93bi5cbiAgICogQHBhcmFtIHtsb2dsZXZlbH0gY29udGFpbnMgdHdvIHByb3BlcnRpZXM6IGxvZ0xldmVsIChmb3IgY29uc29sZSBsb2dnaW5nKSBhbmQgdmlzdWFsTGV2ZWwgKGZvciBkaWFsb2cgbWVzc2FnZXMpXG4gICAqIEBwYXJhbSBsb2dMZXZlbFxuICAgKiBAcGFyYW0gbG9nTGV2ZWwubG9nTGV2ZWxcbiAgICogQHBhcmFtIGxvZ0xldmVsLnZpc3VhbExldmVsXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgc2V0TG9nTGV2ZWwobG9nTGV2ZWw6IHsgbG9nTGV2ZWw6IG51bWJlcjsgdmlzdWFsTGV2ZWw6IG51bWJlciB9KTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIG9yIGVuYWJsZSBsb2NhdGlvbiBjb2xsZWN0aW9uIChEZWZhdWx0cyB0byBlbmFibGVkKSBpZiB5b3VyIGFwcCBoYXMgbG9jYXRpb24gcGVybWlzc2lvbi5cbiAgICogQHBhcmFtIHNoYXJlZCB7Ym9vbGVhbn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBzZXRMb2NhdGlvblNoYXJlZChzaGFyZWQ6IGJvb2xlYW4pOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIFRoZSBwYXNzZWQgaW4gZnVuY3Rpb24gd2lsbCBiZSBmaXJlZCB3aGVuIGEgbm90aWZpY2F0aW9uIHBlcm1pc3Npb24gc2V0dGluZyBjaGFuZ2VzLlxuICAgKiBUaGlzIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuICAgKiAtIE5vdGlmaWNhdGlvbiBwZXJtaXNzaW9uIHByb21wdCBzaG93blxuICAgKiAtIFRoZSB1c2VyIGFjY2VwdGluZyBvciBkZWNsaW5pbmcgdGhlIHBlcm1pc3Npb24gcHJvbXB0XG4gICAqIC0gRW5hYmxpbmcvZGlzYWJsaW5nIG5vdGlmaWNhdGlvbnMgZm9yIHlvdXIgYXBwIGluIHRoZSBkZXZpY2UgU2V0dGluZ3MgYWZ0ZXIgcmV0dXJuaW5nIHRvIHlvdXIgYXBwLlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG9ic2VydmFibGU6IHRydWUsXG4gIH0pXG4gIGFkZFBlcm1pc3Npb25PYnNlcnZlcigpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGFzc2VkIGluIGZ1bmN0aW9uIHdpbGwgYmUgZmlyZWQgd2hlbiBhIG5vdGlmaWNhdGlvbiBzdWJzY3JpcHRpb24gcHJvcGVydHkgY2hhbmdlcy5cbiAgICogVGhpcyBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGV2ZW50czpcbiAgICogLSBHZXR0aW5nIGEgcHVzaCB0b2tlbiBmcm9tIEFwcGxlIC8gR29vZ2xlLlxuICAgKiAtIEdldHRpbmcgYSBwbGF5ZXIgLyB1c2VyIGlkIGZyb20gT25lU2lnbmFsXG4gICAqIC0gT25lU2lnbmFsLnNldFN1YnNjcmlwdGlvbiBpcyBjYWxsZWRcbiAgICogLSBVc2VyIGRpc2FibGVzIG9yIGVuYWJsZXMgbm90aWZpY2F0aW9uc1xuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG9ic2VydmFibGU6IHRydWUsXG4gIH0pXG4gIGFkZFN1YnNjcmlwdGlvbk9ic2VydmVyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgT25lU2lnbmFsIG5vdGlmaWNhdGlvbnNcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqIEBwYXJhbSBlbWFpbEF1dGhUb2tlblxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRFbWFpbChlbWFpbDogc3RyaW5nLCBlbWFpbEF1dGhUb2tlbj86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHlvdXIgYXBwIGltcGxlbWVudHMgbG9nb3V0IGZ1bmN0aW9uYWxpdHksIHlvdSBjYW4gY2FsbCBsb2dvdXRFbWFpbCB0byBkaXNzb2NpYXRlIHRoZSBlbWFpbCBmcm9tIHRoZSBkZXZpY2VcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgbG9nb3V0RW1haWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBhc3NlZCBpbiBmdW5jdGlvbiB3aWxsIGJlIGZpcmVkIHdoZW4gYSBub3RpZmljYXRpb24gc3Vic2NyaXB0aW9uIHByb3BlcnR5IGNoYW5nZXMuXG4gICAqIFRoaXMgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBldmVudHM6XG4gICAqIC0gR2V0dGluZyBhIHB1c2ggdG9rZW4gZnJvbSBBcHBsZSAvIEdvb2dsZS5cbiAgICogLSBHZXR0aW5nIGEgcGxheWVyIC8gdXNlciBpZCBmcm9tIE9uZVNpZ25hbFxuICAgKiAtIE9uZVNpZ25hbC5zZXRTdWJzY3JpcHRpb24gaXMgY2FsbGVkXG4gICAqIC0gVXNlciBkaXNhYmxlcyBvciBlbmFibGVzIG5vdGlmaWNhdGlvbnNcbiAgICogQHJldHVybnMge09ic2VydmFibGU8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvYnNlcnZhYmxlOiB0cnVlLFxuICB9KVxuICBhZGRFbWFpbFN1YnNjcmlwdGlvbk9ic2VydmVyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgT25lU2lnbmFsIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBjbGVhck9uZVNpZ25hbE5vdGlmaWNhdGlvbnMoKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgeW91IHRvIGRlbGF5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgU0RLIHVudGlsIHRoZSB1c2VyIHByb3ZpZGVzIHByaXZhY3kgY29uc2VudC5cbiAgICogVGhlIFNESyB3aWxsIG5vdCBiZSBmdWxseSBpbml0aWFsaXplZCB1bnRpbCB0aGUgcHJvdmlkZVVzZXJDb25zZW50KHRydWUpIG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVxdWlyZWRcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0UmVxdWlyZXNVc2VyUHJpdmFjeUNvbnNlbnQocmVxdWlyZWQ6IGJvb2xlYW4pOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIElmIHlvdXIgYXBwbGljYXRpb24gaXMgc2V0IHRvIHJlcXVpcmUgdGhlIHVzZXIncyBwcml2YWN5IGNvbnNlbnQsIHlvdSBjYW4gcHJvdmlkZSB0aGlzIGNvbnNlbnQgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqIFVudGlsIHlvdSBjYWxsIHByb3ZpZGVVc2VyQ29uc2VudCh0cnVlKSwgdGhlIFNESyB3aWxsIG5vdCBmdWxseSBpbml0aWFsaXplIGFuZCB3aWxsIG5vdCBzZW5kIGFueSBkYXRhIHRvIE9uZVNpZ25hbC5cbiAgICogQHBhcmFtIHtib29sZWFufSBncmFudGVkXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHByb3ZpZGVVc2VyQ29uc2VudChncmFudGVkOiBib29sZWFuKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBBY2NlcHRzIGEgY2FsbGJhY2ssIHdoaWNoIHJldHVybnMgYSBib29sZWFuIHZhcmlhYmxlIGluZGljYXRpbmcgaWYgdGhlIHVzZXIgaGFzIGdpdmVuIHByaXZhY3kgY29uc2VudCB5ZXQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHVzZXJQcm92aWRlZFByaXZhY3lDb25zZW50KGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge31cblxuICAvKipcbiAgICogQWxsb3dzIHlvdSB0byB1c2UgeW91ciBvd24gc3lzdGVtJ3MgdXNlciBJRCdzIHRvIHNlbmQgcHVzaCBub3RpZmljYXRpb25zIHRvIHlvdXIgdXNlcnMuXG4gICAqIFRvIHRpZSBhIHVzZXIgdG8gYSBnaXZlbiB1c2VyIElELCB5b3UgY2FuIHVzZSB0aGlzIG1ldGhvZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dGVybmFsSWRcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0RXh0ZXJuYWxVc2VySWQoZXh0ZXJuYWxJZDogc3RyaW5nKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHdoYXRldmVyIHdhcyBzZXQgYXMgdGhlIGN1cnJlbnQgdXNlcidzIGV4dGVybmFsIHVzZXIgSUQuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHJlbW92ZUV4dGVybmFsVXNlcklkKCk6IHZvaWQge31cblxuICAvKipcbiAgICogQWRkIGEgdHJpZ2dlci4gTWF5IHNob3cgYW4gSW4tQXBwIE1lc3NhZ2UgaWYgaXRzIHRyaWdnZXIgY29uZGl0aW9ucyB3ZXJlIG1ldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgZm9yIHRoZSB0cmlnZ2VyLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IE9iamVjdH0gdmFsdWUgVmFsdWUgZm9yIHRoZSB0cmlnZ2VyLiBTdHJpbmcgb3IgbnVtYmVyIHJlY29tbWVuZGVkLiBPYmplY3QgcGFzc2VkIGluIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN5bmM6IHRydWUsXG4gIH0pXG4gIGFkZFRyaWdnZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBPYmplY3QpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG1hcCBvZiB0cmlnZ2Vycy4gTWF5IHNob3cgYW4gSW4tQXBwIE1lc3NhZ2UgaWYgaXRzIHRyaWdnZXIgY29uZGl0aW9ucyB3ZXJlIG1ldC5cbiAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgT2JqZWN0Pn0gdHJpZ2dlcnMgQWxsb3dzIHlvdSB0byBzZXQgbXVsdGlwbGUgdHJpZ2dlciBrZXkvdmFsdWUgcGFpcnMgc2ltdWx0YW5lb3VzbHkuIFBhc3MgYSBqc29uIG9iamVjdCB3aXRoIGtleS92YWx1ZSBwYWlycyBsaWtlOiBge1wia2V5XCI6IFwidmFsdWVcIiwgXCJrZXkyXCI6IFwidmFsdWUyXCJ9YC5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzeW5jOiB0cnVlLFxuICB9KVxuICBhZGRUcmlnZ2Vycyh0cmlnZ2VyczogT2JqZWN0KTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgc2luZ2xlIHRyaWdnZXIgZm9yIHRoZSBnaXZlbiBrZXkuIE1heSBzaG93IGFuIEluLUFwcCBNZXNzYWdlIGlmIGl0cyB0cmlnZ2VyIGNvbmRpdGlvbnMgd2VyZSBtZXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgS2V5IGZvciB0cmlnZ2VyIHRvIHJlbW92ZS5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzeW5jOiB0cnVlLFxuICB9KVxuICByZW1vdmVUcmlnZ2VyRm9yS2V5KGtleTogc3RyaW5nKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgbGlzdCBvZiB0cmlnZ2VycyBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gKGFycmF5KSBvZiBrZXlzLiBNYXkgc2hvdyBhbiBJbi1BcHAgTWVzc2FnZSBpZiBpdHMgdHJpZ2dlciBjb25kaXRpb25zIHdlcmUgbWV0LlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBrZXlzIFJlbW92ZXMgYSBjb2xsZWN0aW9uIG9mIHRyaWdnZXJzIGZyb20gdGhlaXIga2V5cy4gUGFzcyBhbiBhcnJheSBvZiB0cmlnZ2VyIGtleXMgbGlrZTogYFtcImtleTFcIiwgXCJrZXkyXCIsIFwia2V5M1wiXWAuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3luYzogdHJ1ZSxcbiAgfSlcbiAgcmVtb3ZlVHJpZ2dlcnNGb3JLZXlzKGtleXM6IHN0cmluZ1tdKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgdHJpZ2dlciB2YWx1ZSBmb3IgYSBwcm92aWRlZCB0cmlnZ2VyIGtleS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgZm9yIHRyaWdnZXIgdG8gZ2V0IHZhbHVlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBPYmplY3Q+fSBSZXR1cm4gdmFsdWUgc2V0IHdpdGggYGFkZFRyaWdnZXJgLCBvciBgbnVsbGAvYG5pbGAgKGlPUykgaWYgbmV2ZXIgc2V0IG9yIHJlbW92ZWQuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldFRyaWdnZXJWYWx1ZUZvcktleShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgT2JqZWN0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB5b3UgdG8gdGVtcG9yYXJpbHkgcGF1c2UgYWxsIEluLUFwcCBNZXNzYWdlcy4gWW91IG1heSB3YW50IHRvIGRvIHRoaXMgd2hpbGUgdGhlIHVzZXIgaXMgZW5nYWdlZCBpbiBhbiBhY3Rpdml0eSB0aGF0IHlvdSBkb24ndCB3YW50IGEgbWVzc2FnZSB0byBpbnRlcnJ1cHQgKHN1Y2ggYXMgd2F0Y2hpbmcgYSB2aWRlbykuXG4gICAqIEFuIEluLUFwcCBNZXNzYWdlIHRoYXQgd291bGQgZGlzcGxheSBpZiBub3QgcGF1c2VkIHdpbGwgZGlzcGxheSByaWdodCBhZnRlciByZXN1bWUgaWYgaXRzIGNvbmRpdGlvbnMgdG8gZGlzcGxheSByZW1haW5zIHNhdGlzZmllZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBwYXVzZSBUbyBwYXVzZSwgc2V0IGB0cnVlYC4gVG8gcmVzdW1lLCBzZXQgYGZhbHNlYC5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzeW5jOiB0cnVlLFxuICB9KVxuICBwYXVzZUluQXBwTWVzc2FnZXMocGF1c2U6IGJvb2xlYW4pOiB2b2lkIHt9XG59XG4iXX0=
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvb25lc2lnbmFsL25neC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLHVDQUErQyxNQUFNLCtCQUErQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBMEZsQzs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLHNCQWFYO0FBYkQsV0FBWSxzQkFBc0I7SUFDaEM7O09BRUc7SUFDSCx1RUFBVSxDQUFBO0lBQ1Y7O09BRUc7SUFDSCx5RUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCx3RUFBVyxDQUFBO0FBQ2IsQ0FBQyxFQWJXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFhakM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGFBYVg7QUFiRCxXQUFZLGFBQWE7SUFDdkI7O09BRUc7SUFDSCxpREFBUSxDQUFBO0lBQ1I7O09BRUc7SUFDSCw2REFBYyxDQUFBO0lBQ2Q7O09BRUc7SUFDSCxpRUFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBYlcsYUFBYSxLQUFiLGFBQWEsUUFheEI7QUE4S0QsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUN0QixtREFBVSxDQUFBO0lBQ1YsMkRBQWMsQ0FBQTtBQUNoQixDQUFDLEVBSFcsWUFBWSxLQUFaLFlBQVksUUFHdkI7O0lBdUk4Qiw2QkFBMEI7OztRQUN2RDs7OztXQUlHO1FBQ0gsNEJBQXNCLEdBQUc7WUFDdkIsSUFBSSxFQUFFLENBQUM7WUFDUCxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksRUFBRSxDQUFDO1NBQ2hCLENBQUM7OztJQVVGLDZCQUFTLGFBQUMsS0FBYSxFQUFFLG1CQUE0QjtJQVlyRCw4Q0FBMEI7SUFjMUIsNENBQXdCO0lBWXhCLDZDQUF5QjtJQXFCekIsK0JBQVcsYUFBQyxRQUFzRjtJQVVsRywyQkFBTztJQVlQLDhEQUEwQztJQVkxQywyQkFBTztJQWVQLDBCQUFNO0lBY04sMkJBQU8sYUFBQyxHQUFXLEVBQUUsS0FBYTtJQVVsQyw0QkFBUSxhQUFDLElBQVM7SUFTbEIsNkJBQVMsYUFBQyxHQUFXO0lBU3JCLDhCQUFVLGFBQUMsSUFBYztJQU96QixnREFBNEI7SUFhNUIsaUNBQWEsYUFBQyxNQUFlO0lBYTdCLCtCQUFXLGFBQUMsTUFBZTtJQVUzQixxQ0FBaUIsYUFBQyxhQUE0QjtJQVc5QyxtQ0FBZSxhQUFDLE1BQWU7SUFRL0Isa0RBQThCO0lBVzlCLG9DQUFnQixhQUFDLGVBQStCO0lBVWhELHNDQUFrQixhQUFDLGNBQXNCO0lBTXpDLGtDQUFjO0lBT2QsbUNBQWUsYUFBQyxLQUFhO0lBYzdCLCtCQUFXLGFBQUMsUUFBbUQ7SUFRL0QscUNBQWlCLGFBQUMsTUFBZTtJQWNqQyx5Q0FBcUI7SUFpQnJCLDJDQUF1QjtJQVd2Qiw0QkFBUSxhQUFDLEtBQWEsRUFBRSxjQUF1QjtJQVEvQywrQkFBVztJQWlCWCxnREFBNEI7SUFRNUIsK0NBQTJCO0lBUzNCLGlEQUE2QixhQUFDLFFBQWlCO0lBUy9DLHNDQUFrQixhQUFDLE9BQWdCO0lBUW5DLDhDQUEwQixhQUFDLFFBQWtCO0lBUzdDLHFDQUFpQixhQUFDLFVBQWtCO0lBTXBDLHdDQUFvQjtJQVdwQiw4QkFBVSxhQUFDLEdBQVcsRUFBRSxLQUErQjtJQVV2RCwrQkFBVyxhQUFDLFFBQWdCO0lBVTVCLHVDQUFtQixhQUFDLEdBQVc7SUFVL0IseUNBQXFCLGFBQUMsSUFBYztJQVNwQyx5Q0FBcUIsYUFBQyxHQUFXO0lBYWpDLHNDQUFrQixhQUFDLEtBQWM7MkdBbmR0QixTQUFTOytHQUFULFNBQVM7Ozs7OztJQUFULFNBQVMsa0JBQVQsU0FBUztvQkF0YnRCO0VBc2IrQiwwQkFBMEI7U0FBNUMsU0FBUzs0RkFBVCxTQUFTO2tCQURyQixVQUFVOzhCQXFCVCxTQUFTLE1BWVQsMEJBQTBCLE1BYzFCLHdCQUF3QixNQVl4Qix5QkFBeUIsTUFxQnpCLFdBQVcsTUFVWCxPQUFPLE1BWVAsMENBQTBDLE1BWTFDLE9BQU8sTUFlUCxNQUFNLE1BY04sT0FBTyxNQVVQLFFBQVEsTUFTUixTQUFTLE1BU1QsVUFBVSxNQU9WLDRCQUE0QixNQWE1QixhQUFhLE1BYWIsV0FBVyxNQVVYLGlCQUFpQixNQVdqQixlQUFlLE1BUWYsOEJBQThCLE1BVzlCLGdCQUFnQixNQVVoQixrQkFBa0IsTUFNbEIsY0FBYyxNQU9kLGVBQWUsTUFjZixXQUFXLE1BUVgsaUJBQWlCLE1BY2pCLHFCQUFxQixNQWlCckIsdUJBQXVCLE1BV3ZCLFFBQVEsTUFRUixXQUFXLE1BaUJYLDRCQUE0QixNQVE1QiwyQkFBMkIsTUFTM0IsNkJBQTZCLE1BUzdCLGtCQUFrQixNQVFsQiwwQkFBMEIsTUFTMUIsaUJBQWlCLE1BTWpCLG9CQUFvQixNQVdwQixVQUFVLE1BVVYsV0FBVyxNQVVYLG1CQUFtQixNQVVuQixxQkFBcUIsTUFTckIscUJBQXFCLE1BYXJCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmRvdmEsIEF3ZXNvbWVDb3Jkb3ZhTmF0aXZlUGx1Z2luLCBQbHVnaW4gfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT1NOb3RpZmljYXRpb24ge1xuICAvKipcbiAgICogV2FzIGFwcCBpbiBmb2N1cy5cbiAgICovXG4gIGlzQXBwSW5Gb2N1cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXYXMgbm90aWZpY2F0aW9uIHNob3duIHRvIHRoZSB1c2VyLiBXaWxsIGJlIGZhbHNlIGZvciBzaWxlbnQgbm90aWZpY2F0aW9ucy5cbiAgICovXG4gIHNob3duPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFORFJPSUQqKiAtIEFuZHJvaWQgTm90aWZpY2F0aW9uIGFzc2lnbmVkIHRvIHRoZSBub3RpZmljYXRpb24uIENhbiBiZSB1c2VkIHRvIGNhbmNlbCBvciByZXBsYWNlIHRoZSBub3RpZmljYXRpb24uXG4gICAqL1xuICBhbmRyb2lkTm90aWZpY2F0aW9uSWQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQYXlsb2FkIHJlY2VpdmVkIGZyb20gT25lU2lnbmFsLlxuICAgKi9cbiAgcGF5bG9hZD86IE9TTm90aWZpY2F0aW9uUGF5bG9hZDtcbiAgLyoqXG4gICAqIEhvdyB0aGUgbm90aWZpY2F0aW9uIHdhcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuIENhbiBiZSBzZXQgdG8gYE5vdGlmaWNhdGlvbmAsIGBJbkFwcEFsZXJ0YCwgb3IgYE5vbmVgIGlmIGl0IHdhcyBub3QgZGlzcGxheWVkLlxuICAgKi9cbiAgZGlzcGxheVR5cGU/OiBPU0Rpc3BsYXlUeXBlO1xuICAvKipcbiAgICogQU5EUk9JRCoqIC0gTm90aWZpY2F0aW9uIGlzIGEgc3VtbWFyeSBub3RpZmljYXRpb24gZm9yIGEgZ3JvdXAgdGhpcyB3aWxsIGNvbnRhaW4gYWxsIG5vdGlmaWNhdGlvbiBwYXlsb2FkcyBpdCB3YXMgY3JlYXRlZCBmcm9tLlxuICAgKi9cbiAgZ3JvdXBlZE5vdGlmaWNhdGlvbnM/OiBPU05vdGlmaWNhdGlvblBheWxvYWRbXTtcbiAgYXBwX2lkPzogc3RyaW5nO1xuICBjb250ZW50cz86IGFueTtcbiAgaGVhZGluZ3M/OiBhbnk7XG4gIGlzSW9zPzogYm9vbGVhbjtcbiAgaXNBbmRyb2lkPzogYm9vbGVhbjtcbiAgaXNXUD86IGJvb2xlYW47XG4gIGlzV1BfV05TPzogYm9vbGVhbjtcbiAgaXNBZG0/OiBib29sZWFuO1xuICBpc0Nocm9tZT86IGJvb2xlYW47XG4gIGlzQ2hyb21lV2ViPzogYm9vbGVhbjtcbiAgaXNTYWZhcmk/OiBib29sZWFuO1xuICBpc0FueVdlYj86IGJvb2xlYW47XG4gIGluY2x1ZGVkX3NlZ21lbnRzPzogc3RyaW5nW107XG4gIGV4Y2x1ZGVkX3NlZ21lbnRzPzogc3RyaW5nW107XG4gIGluY2x1ZGVfcGxheWVyX2lkcz86IHN0cmluZ1tdO1xuICBpbmNsdWRlX2lvc190b2tlbnM/OiBzdHJpbmdbXTtcbiAgaW5jbHVkZV9hbmRyb2lkX3JlZ19pZHM/OiBzdHJpbmdbXTtcbiAgaW5jbHVkZV93cF91cmlzPzogc3RyaW5nW107XG4gIGluY2x1ZGVfd3Bfd25zX3VyaXM/OiBzdHJpbmdbXTtcbiAgaW5jbHVkZV9hbWF6b25fcmVnX2lkcz86IHN0cmluZ1tdO1xuICBpbmNsdWRlX2Nocm9tZV9yZWdfaWRzPzogc3RyaW5nW107XG4gIGluY2x1ZGVfY2hyb21lX3dlYl9yZWdfaWRzPzogc3RyaW5nW107XG4gIGFwcF9pZHM/OiBzdHJpbmdbXTtcbiAgdGFncz86IGFueVtdO1xuICBpb3NfYmFkZ2VUeXBlPzogc3RyaW5nO1xuICBpb3NfYmFkZ2VDb3VudD86IG51bWJlcjtcbiAgaW9zX3NvdW5kPzogc3RyaW5nO1xuICBhbmRyb2lkX3NvdW5kPzogc3RyaW5nO1xuICBhZG1fc291bmQ/OiBzdHJpbmc7XG4gIHdwX3NvdW5kPzogc3RyaW5nO1xuICB3cF93bnNfc291bmQ/OiBzdHJpbmc7XG4gIGRhdGE/OiBhbnk7XG4gIGJ1dHRvbnM/OiBhbnk7XG4gIGNvbGxhcHNlX2lkPzogc3RyaW5nO1xuICBzbWFsbF9pY29uPzogc3RyaW5nO1xuICBsYXJnZV9pY29uPzogc3RyaW5nO1xuICBiaWdfcGljdHVyZT86IHN0cmluZztcbiAgYWRtX3NtYWxsX2ljb24/OiBzdHJpbmc7XG4gIGFkbV9sYXJnZV9pY29uPzogc3RyaW5nO1xuICBhZG1fYmlnX3BpY3R1cmU/OiBzdHJpbmc7XG4gIGNocm9tZV9pY29uPzogc3RyaW5nO1xuICBjaHJvbWVfYmlnX3BpY3R1cmU/OiBzdHJpbmc7XG4gIGNocm9tZV93ZWJfaWNvbj86IHN0cmluZztcbiAgZmlyZWZveF9pY29uPzogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG4gIHNlbmRfYWZ0ZXI/OiBzdHJpbmc7XG4gIGRlbGF5ZWRfb3B0aW9uPzogc3RyaW5nO1xuICBkZWxpdmVyeV90aW1lX29mX2RheT86IHN0cmluZztcbiAgYW5kcm9pZF9sZWRfY29sb3I/OiBzdHJpbmc7XG4gIGFuZHJvaWRfYWNjZW50X2NvbG9yPzogc3RyaW5nO1xuICBhbmRyb2lkX3Zpc2liaWxpdHk/OiBudW1iZXI7XG4gIGNvbnRlbnRfYXZhaWxhYmxlPzogYm9vbGVhbjtcbiAgYW1hem9uX2JhY2tncm91bmRfZGF0YT86IGJvb2xlYW47XG4gIHRlbXBsYXRlX2lkPzogc3RyaW5nO1xuICBhbmRyb2lkX2dyb3VwPzogc3RyaW5nO1xuICBhbmRyb2lkX2dyb3VwX21lc3NhZ2U/OiBhbnk7XG4gIGFkbV9ncm91cD86IHN0cmluZztcbiAgYWRtX2dyb3VwX21lc3NhZ2U/OiBhbnk7XG4gIHR0bD86IG51bWJlcjtcbiAgcHJpb3JpdHk/OiBudW1iZXI7XG4gIGlvc19jYXRlZ29yeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBTkRST0lEKiogLSBQcml2YWN5IHNldHRpbmcgZm9yIGhvdyB0aGUgbm90aWZpY2F0aW9uIHNob3VsZCBiZSBzaG93biBvbiB0aGUgbG9ja3NjcmVlbiBvZiBBbmRyb2lkIDUrIGRldmljZXMuXG4gKi9cbmV4cG9ydCBlbnVtIE9TTG9ja1NjcmVlblZpc2liaWxpdHkge1xuICAvKipcbiAgICogRnVsbHkgdmlzaWJsZSAoZGVmYXVsdClcbiAgICovXG4gIFB1YmxpYyA9IDEsXG4gIC8qKlxuICAgKiBDb250ZW50cyBhcmUgaGlkZGVuXG4gICAqL1xuICBQcml2YXRlID0gMCxcbiAgLyoqXG4gICAqIE5vdCBzaG93blxuICAgKi9cbiAgU2VjcmV0ID0gLTEsXG59XG5cbi8qKlxuICogSG93IHRoZSBub3RpZmljYXRpb24gd2FzIGRpc3BsYXllZCB0byB0aGUgdXNlci4gUGFydCBvZiBPU05vdGlmaWNhdGlvbi4gU2VlIGluRm9jdXNEaXNwbGF5aW5nIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIGlzIHVzZWQuXG4gKi9cbmV4cG9ydCBlbnVtIE9TRGlzcGxheVR5cGUge1xuICAvKipcbiAgICogbm90aWZpY2F0aW9uIGlzIHNpbGVudCwgb3IgaW5Gb2N1c0Rpc3BsYXlpbmcgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBOb25lID0gMCxcbiAgLyoqXG4gICAqICgqKkRFRkFVTFQqKikgLSBuYXRpdmUgYWxlcnQgZGlhbG9nIGRpc3BsYXkuXG4gICAqL1xuICBJbkFwcEFsZXJ0ID0gMSxcbiAgLyoqXG4gICAqIG5hdGl2ZSBub3RpZmljYXRpb24gZGlzcGxheS5cbiAgICovXG4gIE5vdGlmaWNhdGlvbiA9IDIsXG59XG5cbi8qKlxuICogQ29udGVudHMgYW5kIHNldHRpbmdzIG9mIHRoZSBub3RpZmljYXRpb24gdGhlIHVzZXIgcmVjZWl2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT1NOb3RpZmljYXRpb25QYXlsb2FkIHtcbiAgLyoqXG4gICAqIE9uZVNpZ25hbCBub3RpZmljYXRpb24gVVVJRC5cbiAgICovXG4gIG5vdGlmaWNhdGlvbklEOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaXRsZSBvZiB0aGUgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEJvZHkgb2YgdGhlIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIGJvZHk6IHN0cmluZztcbiAgLyoqXG4gICAqIEN1c3RvbSBhZGRpdGlvbmFsIGRhdGEgdGhhdCB3YXMgc2VudCB3aXRoIHRoZSBub3RpZmljYXRpb24uIFNldCBvbiB0aGUgZGFzaGJvYXJkIHVuZGVyIE9wdGlvbnMgPiBBZGRpdGlvbmFsIERhdGFcbiAgICogb3Igd2l0aCB0aGUgJ2RhdGEnIGZpZWxkIG9uIHRoZSBSRVNUIEFQSS5cbiAgICovXG4gIGFkZGl0aW9uYWxEYXRhPzogYW55O1xuICAvKipcbiAgICogQU5EUk9JRCoqIC0gU21hbGwgaWNvbiByZXNvdXJjZSBuYW1lIHNldCBvbiB0aGUgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgc21hbGxJY29uPzogc3RyaW5nO1xuICAvKipcbiAgICogQU5EUk9JRCoqIC0gTGFyZ2UgaWNvbiBzZXQgb24gdGhlIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIGxhcmdlSWNvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFORFJPSUQqKiAtIEJpZyBwaWN0dXJlIGltYWdlIHNldCBvbiB0aGUgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgYmlnUGljdHVyZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEFORFJPSUQqKiAtIEFjY2VudCBjb2xvciBzaG93biBhcm91bmQgc21hbGwgbm90aWZpY2F0aW9uIGljb24gb24gQW5kcm9pZCA1KyBkZXZpY2VzLiBBUkdCIGZvcm1hdC5cbiAgICovXG4gIHNtYWxsSWNvbkFjY2VudENvbG9yPzogc3RyaW5nO1xuICAvKipcbiAgICogVVJMIHRvIG9wZW4gd2hlbiBvcGVuaW5nIHRoZSBub3RpZmljYXRpb24uXG4gICAqL1xuICBsYXVuY2hVUkw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTb3VuZCByZXNvdXJjZSB0byBwbGF5IHdoZW4gdGhlIG5vdGlmaWNhdGlvbiBpcyBzaG93bi5cbiAgICovXG4gIHNvdW5kOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBTkRST0lEKiogLSBEZXZpY2VzIHRoYXQgaGF2ZSBhIG5vdGlmaWNhdGlvbiBMRUQgd2lsbCBibGluayBpbiB0aGlzIGNvbG9yLiBBUkdCIGZvcm1hdC5cbiAgICovXG4gIGxlZENvbG9yPzogc3RyaW5nO1xuICBsb2NrU2NyZWVuVmlzaWJpbGl0eT86IE9TTG9ja1NjcmVlblZpc2liaWxpdHk7XG4gIC8qKlxuICAgKiBBTkRST0lEKiogLSBOb3RpZmljYXRpb25zIHdpdGggdGhpcyBzYW1lIGtleSB3aWxsIGJlIGdyb3VwZWQgdG9nZXRoZXIgYXMgYSBzaW5nbGUgc3VtbWFyeSBub3RpZmljYXRpb24uXG4gICAqL1xuICBncm91cEtleT86IHN0cmluZztcbiAgLyoqXG4gICAqIEFORFJPSUQqKiAtIFN1bW1hcnkgdGV4dCBkaXNwbGF5ZWQgaW4gdGhlIHN1bW1hcnkgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgZ3JvdXBNZXNzYWdlPzogc3RyaW5nO1xuICAvKipcbiAgICogTGlzdCBvZiBhY3Rpb24gYnV0dG9ucyBvbiB0aGUgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgYWN0aW9uQnV0dG9uczogT1NBY3Rpb25CdXR0b25bXTtcbiAgLyoqXG4gICAqIEFORFJPSUQqKiAtIFRoZSBHb29nbGUgcHJvamVjdCBudW1iZXIgdGhlIG5vdGlmaWNhdGlvbiB3YXMgc2VudCB1bmRlci5cbiAgICovXG4gIGZyb21Qcm9qZWN0TnVtYmVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQU5EUk9JRCoqIC0gSWYgYSBiYWNrZ3JvdW5kIGltYWdlIHdhcyBzZXQgdGhpcyBvYmplY3Qgd2lsbCBiZSBhdmFpbGFibGUuXG4gICAqL1xuICBiYWNrZ3JvdW5kSW1hZ2VMYXlvdXQ/OiBPU0JhY2tncm91bmRJbWFnZUxheW91dDtcbiAgcHJpb3JpdHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBMaXN0IG9mIGFjdGlvbiBidXR0b25zIG9uIHRoZSBub3RpZmljYXRpb24uXG4gICAqL1xuICByYXdQYXlsb2FkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTGlzdCBvZiBhY3Rpb24gYnV0dG9ucyBvbiB0aGUgbm90aWZpY2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9TQWN0aW9uQnV0dG9uIHtcbiAgLyoqXG4gICAqIElkIGFzc2lnbmVkIHRvIHRoZSBidXR0b24uXG4gICAqL1xuICBpZDogc3RyaW5nO1xuICAvKipcbiAgICogVGV4dCBzaG93IG9uIHRoZSBidXR0b24gdG8gdGhlIHVzZXIuXG4gICAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBTkRST0lEKiogLSBJY29uIHNob3duIG9uIHRoZSBidXR0b24uXG4gICAqL1xuICBpY29uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT1NQZXJtaXNzaW9uU3RhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPU1Blcm1pc3Npb25TdGF0ZSB7XG4gIC8qKlxuICAgKiBVc2VyIHdhcyBwcm9tcHRlZC5cbiAgICovXG4gIGhhc1Byb21wdGVkOiBib29sZWFuO1xuICAvKipcbiAgICogUGVybWlzc2lvbnMgU3RhdHVzIChpT1MgT25seSlcbiAgICovXG4gIHN0YXR1czogYW55O1xuICAvKipcbiAgICogUGVybWlzc2lvbnMgU3RhdGUgKEFuZHJvaWQgT25seSlcbiAgICovXG4gIHN0YXRlOiBhbnk7XG59XG5cbi8qKlxuICogT1NTdWJzY3JpcHRpb25TdGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9TU3Vic2NyaXB0aW9uU3RhdGUge1xuICBzdWJzY3JpYmVkOiBib29sZWFuO1xuICB1c2VyU3Vic2NyaXB0aW9uU2V0dGluZzogYW55O1xuICB1c2VySWQ6IGFueTtcbiAgcHVzaFRva2VuOiBhbnk7XG59XG5cbi8qKlxuICogU3Vic2NyaXB0aW9uIGFuZCBwZXJtaXNzaW9ucyBzdGF0dXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPU1Blcm1pc3Npb25TdWJzY3JpcHRpb25TdGF0ZSB7XG4gIC8qKlxuICAgKiBJZCBhc3NpZ25lZCB0byB0aGUgYnV0dG9uLlxuICAgKi9cbiAgcGVybWlzc2lvblN0YXR1czogT1NQZXJtaXNzaW9uU3RhdGU7XG4gIC8qKlxuICAgKiBUZXh0IHNob3cgb24gdGhlIGJ1dHRvbiB0byB0aGUgdXNlci5cbiAgICovXG4gIHN1YnNjcmlwdGlvblN0YXR1czogT1NTdWJzY3JpcHRpb25TdGF0ZTtcbn1cblxuLyoqXG4gKiBBTkRST0lEKiogLSBJZiBhIGJhY2tncm91bmQgaW1hZ2Ugd2FzIHNldCwgdGhpcyBvYmplY3Qgd2lsbCBiZSBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT1NCYWNrZ3JvdW5kSW1hZ2VMYXlvdXQge1xuICAvKipcbiAgICogSW1hZ2UgVVJMIG9yIG5hbWUgdXNlZCBhcyB0aGUgYmFja2dyb3VuZCBpbWFnZS5cbiAgICovXG4gIGltYWdlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUZXh0IGNvbG9yIG9mIHRoZSB0aXRsZSBvbiB0aGUgbm90aWZpY2F0aW9uLiBBUkdCIEZvcm1hdC5cbiAgICovXG4gIHRpdGxlVGV4dENvbG9yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUZXh0IGNvbG9yIG9mIHRoZSBib2R5IG9uIHRoZSBub3RpZmljYXRpb24uIEFSR0IgRm9ybWF0LlxuICAgKi9cbiAgYm9keVRleHRDb2xvcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBpbmZvcm1hdGlvbiByZXR1cm5lZCBmcm9tIGEgbm90aWZpY2F0aW9uIHRoZSB1c2VyIHJlY2VpdmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9TTm90aWZpY2F0aW9uT3BlbmVkUmVzdWx0IHtcbiAgYWN0aW9uOiB7XG4gICAgLyoqXG4gICAgICogV2FzIHRoZSBub3RpZmljYXRpb24gb3BlbmVkIG5vcm1hbGx5IChgT3BlbmVkYCkgb3Igd2FzIGEgYnV0dG9uIHByZXNzZWQgb24gdGhlIG5vdGlmaWNhdGlvbiAoYEFjdGlvblRha2VuYCkuXG4gICAgICovXG4gICAgdHlwZTogT1NBY3Rpb25UeXBlO1xuICAgIC8qKlxuICAgICAqIElmIGB0eXBlYCA9PSBgQWN0aW9uVGFrZW5gIHRoZW4gdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGlkIG9mIHRoZSBidXR0b24gcHJlc3NlZC5cbiAgICAgKi9cbiAgICBhY3Rpb25JRD86IHN0cmluZztcbiAgfTtcbiAgbm90aWZpY2F0aW9uOiBPU05vdGlmaWNhdGlvbjtcbn1cblxuZXhwb3J0IGVudW0gT1NBY3Rpb25UeXBlIHtcbiAgT3BlbmVkID0gMCxcbiAgQWN0aW9uVGFrZSA9IDEsXG59XG5cbi8qKlxuICogRGV0YWlscyBhYm91dCB0aGUgSW4tQXBwIE1lc3NhZ2UgYWN0aW9uIGVsZW1lbnQgKGJ1dHRvbiBvciBpbWFnZSkgdGhhdCB3YXMgdGFwcGVkIG9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9TSW5BcHBNZXNzYWdlQWN0aW9uIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIGNsaWNrIG5hbWUgZGVmaW5lZCBmb3IgdGhlIGFjdGlvbiBlbGVtZW50LiBudWxsIG9yIG5pbCAoaU9TKSBpZiBub3Qgc2V0LlxuICAgKi9cbiAgY2xpY2tfbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgVVJMIHRoYXQgb3BlbnMgd2hlbiB0aGUgYWN0aW9uIHRha2VzIHBsYWNlLiBudWxsIG9yIG5pbCAoaU9TKSBpZiBub3Qgc2V0LlxuICAgKi9cbiAgY2xpY2tfdXJsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgdHJ1ZWAgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgdXNlciBoYXMgcHJlc3NlZCBhbnkgYWN0aW9uIG9uIHRoZSBJbi1BcHAgTWVzc2FnZS5cbiAgICovXG4gIGZpcnN0X2NsaWNrOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgSW4tQXBwIE1lc3NhZ2Ugd2lsbCBhbmltYXRlIG9mZiB0aGUgc2NyZWVuLiBJZiBgZmFsc2VgLCB0aGUgSW4tQXBwIE1lc3NhZ2Ugd2lsbCBzdGF5IG9uIHNjcmVlbiB1bnRpbCB0aGUgdXNlciBkaXNtaXNzZXMgaXQuXG4gICAqL1xuICBjbG9zZXNfbWVzc2FnZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAbmFtZSBPbmVTaWduYWxcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIE9uZVNpZ25hbCBwbHVnaW4gaXMgYW4gY2xpZW50IGltcGxlbWVudGF0aW9uIGZvciB1c2luZyB0aGUgW09uZVNpZ25hbF0oaHR0cHM6Ly9vbmVzaWduYWwuY29tLykgU2VydmljZS5cbiAqIE9uZVNpZ25hbCBpcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBmb3IgZGVsaXZlcmluZyBwdXNoIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogUGxlYXNlIHZpZXcgdGhlIG9mZmljaWFsIFtPbmVTaWduYWwgSW9uaWMgU0RLIEluc3RhbGxhdGlvbl0oaHR0cHM6Ly9kb2N1bWVudGF0aW9uLm9uZXNpZ25hbC5jb20vZG9jcy9pb25pYy1zZGstc2V0dXApIGd1aWRlXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiAjIyMjIEljb25zXG4gKiBJZiB5b3Ugd2FudCB0byB1c2UgZ2VuZXJhdGVkIGljb25zIHdpdGggY29tbWFuZCBgaW9uaWMgY29yZG92YSByZXNvdXJjZXNgOlxuICpcbiAqIDEuIEFkZCBhIGZpbGUgdG8geW91ciBgaG9va3NgIGRpcmVjdG9yeSBjYWxsZWQgYGNvcHlfYW5kcm9pZF9ub3RpZmljYXRpb25faWNvbnMuanNgXG4gKlxuICogMi4gQ29uZmlndXJlIHRoZSBob29rIGluIHlvdXIgY29uZmlnLnhtbFxuICogYGBgXG4gKiAgICAgPHBsYXRmb3JtIG5hbWU9XCJhbmRyb2lkXCI+XG4gKiAgICAgICAgIDxob29rIHR5cGU9XCJhZnRlcl9wcmVwYXJlXCIgc3JjPVwiaG9va3MvY29weV9hbmRyb2lkX25vdGlmaWNhdGlvbl9pY29ucy5qc1wiIC8+XG4gKiAgICAgPC9wbGF0Zm9ybT5cbiAqIGBgYFxuICpcbiAqIDMuIFB1dCB0aGUgZm9sbG93aW5nIGNvZGUgaW4gaXQ6XG4gKlxuICogYGBgXG4gKiAjIS91c3IvYmluL2VudiBub2RlXG4gKlxuICogdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbiAqIHZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICpcbiAqIHZhciBmaWxlc3RvY29weSA9IFt7XG4gKiAgICAgXCJyZXNvdXJjZXMvYW5kcm9pZC9pY29uL2RyYXdhYmxlLWhkcGktaWNvbi5wbmdcIjpcbiAqICAgICAgICAgXCJwbGF0Zm9ybXMvYW5kcm9pZC9hcHAvc3JjL21haW4vcmVzL2RyYXdhYmxlLWhkcGkvaWNfc3RhdF9vbmVzaWduYWxfZGVmYXVsdC5wbmdcIlxuICogfSwge1xuICogICAgIFwicmVzb3VyY2VzL2FuZHJvaWQvaWNvbi9kcmF3YWJsZS1tZHBpLWljb24ucG5nXCI6XG4gKiAgICAgICAgIFwicGxhdGZvcm1zL2FuZHJvaWQvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX3N0YXRfb25lc2lnbmFsX2RlZmF1bHQucG5nXCJcbiAqIH0sIHtcbiAqICAgICBcInJlc291cmNlcy9hbmRyb2lkL2ljb24vZHJhd2FibGUteGhkcGktaWNvbi5wbmdcIjpcbiAqICAgICAgICAgXCJwbGF0Zm9ybXMvYW5kcm9pZC9hcHAvc3JjL21haW4vcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3N0YXRfb25lc2lnbmFsX2RlZmF1bHQucG5nXCJcbiAqIH0sIHtcbiAqICAgICBcInJlc291cmNlcy9hbmRyb2lkL2ljb24vZHJhd2FibGUteHhoZHBpLWljb24ucG5nXCI6XG4gKiAgICAgICAgIFwicGxhdGZvcm1zL2FuZHJvaWQvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfc3RhdF9vbmVzaWduYWxfZGVmYXVsdC5wbmdcIlxuICogfSwge1xuICogICAgIFwicmVzb3VyY2VzL2FuZHJvaWQvaWNvbi9kcmF3YWJsZS14eHhoZHBpLWljb24ucG5nXCI6XG4gKiAgICAgICAgIFwicGxhdGZvcm1zL2FuZHJvaWQvYXBwL3NyYy9tYWluL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3N0YXRfb25lc2lnbmFsX2RlZmF1bHQucG5nXCJcbiAqIH0gXTtcbiAqXG4gKiBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAqXG4gKiAgICAgLy8gbm8gbmVlZCB0byBjb25maWd1cmUgYmVsb3dcbiAqICAgICB2YXIgcm9vdGRpciA9IGNvbnRleHQub3B0cy5wcm9qZWN0Um9vdDtcbiAqXG4gKiAgICAgZmlsZXN0b2NvcHkuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAqICAgICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICogICAgICAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xuICogICAgICAgICAgICAgdmFyIHNyY2ZpbGUgPSBwYXRoLmpvaW4ocm9vdGRpciwga2V5KTtcbiAqICAgICAgICAgICAgIHZhciBkZXN0ZmlsZSA9IHBhdGguam9pbihyb290ZGlyLCB2YWwpO1xuICogICAgICAgICAgICAgY29uc29sZS5sb2coXCJjb3B5aW5nIFwiK3NyY2ZpbGUrXCIgdG8gXCIrZGVzdGZpbGUpO1xuICogICAgICAgICAgICAgdmFyIGRlc3RkaXIgPSBwYXRoLmRpcm5hbWUoZGVzdGZpbGUpO1xuICogICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc3JjZmlsZSkgJiYgZnMuZXhpc3RzU3luYyhkZXN0ZGlyKSkge1xuICogICAgICAgICAgICAgICAgIGZzLmNyZWF0ZVJlYWRTdHJlYW0oc3JjZmlsZSkucGlwZShcbiAqICAgICAgICAgICAgICAgICAgICAgZnMuY3JlYXRlV3JpdGVTdHJlYW0oZGVzdGZpbGUpKTtcbiAqICAgICAgICAgICAgIH1cbiAqICAgICAgICAgfSk7XG4gKiAgICAgfSk7XG4gKlxuICogfTtcbiAqIGBgYFxuICpcbiAqIDMuIEZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0IG1ha2UgdGhlIGZpbGUgZXhlY3V0YWJsZTpcbiAqIGAkIGNobW9kICt4IGhvb2tzL2NvcHlfYW5kcm9pZF9ub3RpZmljYXRpb25faWNvbnMuanNgXG4gKiBAdXNhZ2VcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IE9uZVNpZ25hbCB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9vbmVzaWduYWwvbmd4JztcbiAqXG4gKiBjb25zdHJ1Y3Rvcihwcml2YXRlIG9uZVNpZ25hbDogT25lU2lnbmFsKSB7IH1cbiAqXG4gKiAuLi5cbiAqXG4gKiB0aGlzLm9uZVNpZ25hbC5zdGFydEluaXQoJ2IyZjdmOTY2LWQ4Y2MtMTFlNC1iZWQxLWRmOGYwNWJlNTViYScsICc3MDMzMjI3NDQyNjEnKTtcbiAqXG4gKiB0aGlzLm9uZVNpZ25hbC5pbkZvY3VzRGlzcGxheWluZyh0aGlzLm9uZVNpZ25hbC5PU0luRm9jdXNEaXNwbGF5T3B0aW9uLkluQXBwQWxlcnQpO1xuICpcbiAqIHRoaXMub25lU2lnbmFsLmhhbmRsZU5vdGlmaWNhdGlvblJlY2VpdmVkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAqICAvLyBkbyBzb21ldGhpbmcgd2hlbiBub3RpZmljYXRpb24gaXMgcmVjZWl2ZWRcbiAqIH0pO1xuICpcbiAqIHRoaXMub25lU2lnbmFsLmhhbmRsZU5vdGlmaWNhdGlvbk9wZW5lZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gKiAgIC8vIGRvIHNvbWV0aGluZyB3aGVuIGEgbm90aWZpY2F0aW9uIGlzIG9wZW5lZFxuICogfSk7XG4gKlxuICogdGhpcy5vbmVTaWduYWwuZW5kSW5pdCgpO1xuICogYGBgXG4gKiBAaW50ZXJmYWNlc1xuICogT1NOb3RpZmljYXRpb25cbiAqIE9TTG9ja1NjcmVlblZpc2liaWxpdHlcbiAqIE9TRGlzcGxheVR5cGVcbiAqIE9TTm90aWZpY2F0aW9uUGF5bG9hZFxuICogT1NBY3Rpb25CdXR0b25cbiAqIE9TQmFja2dyb3VuZEltYWdlTGF5b3V0XG4gKiBPU05vdGlmaWNhdGlvbk9wZW5lZFJlc3VsdFxuICogT1NBY3Rpb25UeXBlXG4gKiBPU0luQXBwTWVzc2FnZUFjdGlvblxuICovXG5AUGx1Z2luKHtcbiAgcGx1Z2luTmFtZTogJ09uZVNpZ25hbCcsXG4gIHBsdWdpbjogJ29uZXNpZ25hbC1jb3Jkb3ZhLXBsdWdpbicsXG4gIHBsdWdpblJlZjogJ3BsdWdpbnMuT25lU2lnbmFsJyxcbiAgcmVwbzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9PbmVTaWduYWwvT25lU2lnbmFsLUNvcmRvdmEtU0RLJyxcbiAgcGxhdGZvcm1zOiBbJ0FtYXpvbiBGaXJlIE9TJywgJ0FuZHJvaWQnLCAnaU9TJywgJ1dpbmRvd3MnXSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT25lU2lnbmFsIGV4dGVuZHMgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4ge1xuICAvKipcbiAgICogY29uc3RhbnRzIHRvIHVzZSBpbiBpbkZvY3VzRGlzcGxheWluZygpXG4gICAqXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIE9TSW5Gb2N1c0Rpc3BsYXlPcHRpb24gPSB7XG4gICAgTm9uZTogMCxcbiAgICBJbkFwcEFsZXJ0OiAxLFxuICAgIE5vdGlmaWNhdGlvbjogMixcbiAgfTtcblxuICAvKipcbiAgICogU3RhcnQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIE9uY2UgeW91IGFyZSBkb25lIGNvbmZpZ3VyaW5nIE9uZVNpZ25hbCwgY2FsbCB0aGUgYGVuZEluaXRgIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgWW91ciBPbmVTaWduYWwgYXBwIGlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBnb29nbGVQcm9qZWN0TnVtYmVyICoqQU5EUk9JRCoqIC0geW91ciBHb29nbGUgcHJvamVjdCBudW1iZXI7IG9ubHkgcmVxdWlyZWQgZm9yIEFuZHJvaWQgR0NNL0ZDTSBwdXNoZXMuXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgc3RhcnRJbml0KGFwcElkOiBzdHJpbmcsIGdvb2dsZVByb2plY3ROdW1iZXI/OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBydW4gd2hlbiBhIG5vdGlmaWNhdGlvbiBpcyByZWNlaXZlZCwgd2hldGhlciBpdCB3YXMgZGlzcGxheWVkIG9yIG5vdC5cbiAgICpcbiAgICogQHJldHVybnMge09ic2VydmFibGU8T25lU2lnbmFsUmVjZWl2ZWROb3RpZmljYXRpb24+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG9ic2VydmFibGU6IHRydWUsXG4gIH0pXG4gIGhhbmRsZU5vdGlmaWNhdGlvblJlY2VpdmVkKCk6IE9ic2VydmFibGU8T1NOb3RpZmljYXRpb24+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gcnVuIHdoZW4gYSBub3RpZmljYXRpb24gaXMgdGFwcGVkIG9uIGZyb20gdGhlIG5vdGlmaWNhdGlvbiBzaGFkZSAoKipBTkRST0lEKiopIG9yIG5vdGlmaWNhdGlvblxuICAgKiBjZW50ZXIgKCoqaU9TKiopLCBvciB3aGVuIGNsb3NpbmcgYW4gQWxlcnQgbm90aWZpY2F0aW9uIHNob3duIGluIHRoZSBhcHAgKGlmIEluQXBwQWxlcnQgaXMgZW5hYmxlZCBpblxuICAgKiBpbkZvY3VzRGlzcGxheWluZykuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPE9uZVNpZ25hbE9wZW5lZE5vdGlmaWNhdGlvbj59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb2JzZXJ2YWJsZTogdHJ1ZSxcbiAgfSlcbiAgaGFuZGxlTm90aWZpY2F0aW9uT3BlbmVkKCk6IE9ic2VydmFibGU8T1NOb3RpZmljYXRpb25PcGVuZWRSZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVXNlIHRvIHByb2Nlc3MgYW4gSW4tQXBwIE1lc3NhZ2UgdGhlIHVzZXIganVzdCB0YXBwZWQgb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPE9TSW5BcHBNZXNzYWdlQWN0aW9uPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvYnNlcnZhYmxlOiB0cnVlLFxuICB9KVxuICBoYW5kbGVJbkFwcE1lc3NhZ2VDbGlja2VkKCk6IE9ic2VydmFibGU8T1NJbkFwcE1lc3NhZ2VBY3Rpb24+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogaU9TKiogLSBTZXR0aW5ncyBmb3IgaU9TIGFwcHNcbiAgICpcbiAgICogQHBhcmFtIHNldHRpbmdzXG4gICAqICBrT1NTZXR0aW5nc0tleUF1dG9Qcm9tcHQ6IGJvb2xlYW4gPSB0cnVlXG4gICAqICBBdXRvIHByb21wdCB1c2VyIGZvciBub3RpZmljYXRpb24gcGVybWlzc2lvbnMuXG4gICAqXG4gICAqICBrT1NTZXR0aW5nc0tleUluQXBwTGF1bmNoVVJMOiBib29sZWFuID0gZmFsc2VcbiAgICogIExhdW5jaCBub3RpZmljYXRpb25zIHdpdGggYSBsYXVuY2ggVVJMIGFzIGFuIGluIGFwcCB3ZWJ2aWV3LlxuICAgKiBAcGFyYW0gc2V0dGluZ3Mua09TU2V0dGluZ3NLZXlBdXRvUHJvbXB0XG4gICAqIEBwYXJhbSBzZXR0aW5ncy5rT1NTZXR0aW5nc0tleUluQXBwTGF1bmNoVVJMXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3luYzogdHJ1ZSxcbiAgICBwbGF0Zm9ybXM6IFsnaU9TJ10sXG4gIH0pXG4gIGlPU1NldHRpbmdzKHNldHRpbmdzOiB7IGtPU1NldHRpbmdzS2V5QXV0b1Byb21wdDogYm9vbGVhbjsga09TU2V0dGluZ3NLZXlJbkFwcExhdW5jaFVSTDogYm9vbGVhbiB9KTogYW55IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYHN0YXJ0SW5pdGAgdG8gY29tcGxldGUgaW5pdGlhbGl6YXRpb24gb2YgT25lU2lnbmFsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVuZEluaXQoKTogYW55IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUHJvbXB0IHRoZSB1c2VyIGZvciBub3RpZmljYXRpb24gcGVybWlzc2lvbnMuIENhbGxiYWNrIGZpcmVzIGFzIHNvb24gYXMgdGhlIHVzZXIgYWNjZXB0cyBvciBkZWNsaW5lcyBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnaU9TJ10sXG4gIH0pXG4gIHByb21wdEZvclB1c2hOb3RpZmljYXRpb25zV2l0aFVzZXJSZXNwb25zZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBsaXN0IG9mIHRhZ3MgdGhhdCBoYXZlIGJlZW4gc2V0IG9uIHRoZSB1c2VyIGZyb20gdGhlIE9uZVNpZ25hbCBzZXJ2ZXIuXG4gICAqXG4gICAqIFF1aXJrKio6IFlvdSBtdXN0IHdhaXQgZm9yIGBnZXRUYWdzYCB0byByZXNvbHZlIGJlZm9yZSBjYWxsaW5nIGl0IGFnYWluLCBhcyB0aGUgcGx1Z2luIHdpbGwgb25seSBwcm9jZXNzIHRoZSBsYXN0IG1ldGhvZCBjYWxsIGFuZCBkaXNjYXJkIGFueSBwcmV2aW91cyBvbmVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSBSZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGFncyBhcmUgcmVjaWV2ZWQuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldFRhZ3MoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogTGV0cyB5b3UgcmV0cmlldmUgdGhlIE9uZVNpZ25hbCB1c2VyIGlkIGFuZCBkZXZpY2UgdG9rZW4uXG4gICAqIFlvdXIgaGFuZGxlciBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGRldmljZSBpcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIE9uZVNpZ25hbC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gUmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyBpZiB0aGUgZGV2aWNlIHdhcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogIHVzZXJJZCB7c3RyaW5nfSBPbmVTaWduYWwgdXNlcklkIGlzIGEgVVVJRCBmb3JtYXR0ZWQgc3RyaW5nLiAodW5pcXVlIHBlciBkZXZpY2UgcGVyIGFwcClcbiAgICpcbiAgICogIHB1c2hUb2tlbiB7c3RyaW5nfSBBIHB1c2ggdG9rZW4gaXMgYSBHb29nbGUvQXBwbGUgYXNzaWduZWQgaWRlbnRpZmllcih1bmlxdWUgcGVyIGRldmljZSBwZXIgYXBwKS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0SWRzKCk6IFByb21pc2U8eyB1c2VySWQ6IHN0cmluZzsgcHVzaFRva2VuOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWcgYSB1c2VyIGJhc2VkIG9uIGFuIGFwcCBldmVudCBvZiB5b3VyIGNob29zaW5nIHNvIGxhdGVyIHlvdSBjYW4gY3JlYXRlIHNlZ21lbnRzIG9uIFtvbmVzaWduYWwuY29tXShodHRwczovL29uZXNpZ25hbC5jb20vKSB0byB0YXJnZXQgdGhlc2UgdXNlcnMuXG4gICAqIFJlY29tbWVuZCB1c2luZyBzZW5kVGFncyBvdmVyIHNlbmRUYWcgaWYgeW91IG5lZWQgdG8gc2V0IG1vcmUgdGhhbiBvbmUgdGFnIG9uIGEgdXNlciBhdCBhIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBLZXkgb2YgeW91ciBjaG9vc2luZyB0byBjcmVhdGUgb3IgdXBkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gVmFsdWUgdG8gc2V0IG9uIHRoZSBrZXkuIE5PVEU6IFBhc3NpbmcgaW4gYSBibGFuayBTdHJpbmcgZGVsZXRlcyB0aGUga2V5LCB5b3UgY2FuIGFsc28gY2FsbCBkZWxldGVUYWcuXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgc2VuZFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge31cblxuICAvKipcbiAgICogVGFnIGEgdXNlciBiYXNlZCBvbiBhbiBhcHAgZXZlbnQgb2YgeW91ciBjaG9vc2luZyBzbyBsYXRlciB5b3UgY2FuIGNyZWF0ZSBzZWdtZW50cyBvbiBbb25lc2lnbmFsLmNvbV0oaHR0cHM6Ly9vbmVzaWduYWwuY29tLykgdG8gdGFyZ2V0IHRoZXNlIHVzZXJzLlxuICAgKiBSZWNvbW1lbmQgdXNpbmcgc2VuZFRhZ3Mgb3ZlciBzZW5kVGFnIGlmIHlvdSBuZWVkIHRvIHNldCBtb3JlIHRoYW4gb25lIHRhZyBvbiBhIHVzZXIgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gUGFzcyBhIGpzb24gb2JqZWN0IHdpdGgga2V5L3ZhbHVlIHBhaXJzIGxpa2U6IHtrZXk6IFwidmFsdWVcIiwga2V5MjogXCJ2YWx1ZTJcIn1cbiAgICogQHBhcmFtIGpzb25cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBzZW5kVGFncyhqc29uOiBhbnkpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB0YWcgdGhhdCB3YXMgcHJldmlvdXNseSBzZXQgb24gYSB1c2VyIHdpdGggYHNlbmRUYWdgIG9yIGBzZW5kVGFnc2AuIFVzZSBgZGVsZXRlVGFnc2AgaWYgeW91IG5lZWQgdG8gZGVsZXRlIG1vcmUgdGhhbiBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBLZXkgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0ga2V5XG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgZGVsZXRlVGFnKGtleTogc3RyaW5nKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRhZ3MgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc2V0IG9uIGEgdXNlciB3aXRoIGBzZW5kVGFnYCBvciBgc2VuZFRhZ3NgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBLZXlzIHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIGtleXNcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBkZWxldGVUYWdzKGtleXM6IHN0cmluZ1tdKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgd2hlbiB5b3Ugd291bGQgbGlrZSB0byBwcm9tcHQgYW4gaU9TIHVzZXIgdG8gYWNjZXB0IHB1c2ggbm90aWZpY2F0aW9ucyB3aXRoIHRoZSBkZWZhdWx0IHN5c3RlbSBwcm9tcHQuXG4gICAqIE9ubHkgd29ya3MgaWYgeW91IHNldCBga09TU2V0dGluZ3NBdXRvUHJvbXB0YCB0byBgZmFsc2VgIGluIGBpT1NTZXR0aW5nc2BcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICByZWdpc3RlckZvclB1c2hOb3RpZmljYXRpb25zKCk6IHZvaWQge31cblxuICAvKipcbiAgICogV2FybmluZzpcbiAgICogT25seSBhcHBsaWVzIHRvIEFuZHJvaWQgYW5kIEFtYXpvbi4gWW91IGNhbiBjYWxsIHRoaXMgZnJvbSB5b3VyIFVJIGZyb20gYSBidXR0b24gcHJlc3MgZm9yIGV4YW1wbGUgdG8gZ2l2ZSB5b3VyIHVzZXIncyBvcHRpb25zIGZvciB5b3VyIG5vdGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgT25lU2lnbmFsIGFsd2F5cyB2aWJyYXRlcyB0aGUgZGV2aWNlIHdoZW4gYSBub3RpZmljYXRpb24gaXMgZGlzcGxheWVkIHVubGVzcyB0aGUgZGV2aWNlIGlzIGluIGEgdG90YWwgc2lsZW50IG1vZGUuXG4gICAqIFBhc3NpbmcgZmFsc2UgbWVhbnMgdGhhdCB0aGUgZGV2aWNlIHdpbGwgb25seSB2aWJyYXRlIGxpZ2h0bHkgd2hlbiB0aGUgZGV2aWNlIGlzIGluIGl0J3MgdmlicmF0ZSBvbmx5IG1vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmFsc2UgdG8gZGlzYWJsZSB2aWJyYXRlLCB0cnVlIHRvIHJlLWVuYWJsZSBpdC5cbiAgICogQHBhcmFtIGVuYWJsZVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGVuYWJsZVZpYnJhdGUoZW5hYmxlOiBib29sZWFuKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBXYXJuaW5nOlxuICAgKiBPbmx5IGFwcGxpZXMgdG8gQW5kcm9pZCBhbmQgQW1hem9uLiBZb3UgY2FuIGNhbGwgdGhpcyBmcm9tIHlvdXIgVUkgZnJvbSBhIGJ1dHRvbiBwcmVzcyBmb3IgZXhhbXBsZSB0byBnaXZlIHlvdXIgdXNlcidzIG9wdGlvbnMgZm9yIHlvdXIgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCBPbmVTaWduYWwgcGxheXMgdGhlIHN5c3RlbSdzIGRlZmF1bHQgbm90aWZpY2F0aW9uIHNvdW5kIHdoZW4gdGhlIGRldmljZSdzIG5vdGlmaWNhdGlvbiBzeXN0ZW0gdm9sdW1lIGlzIHR1cm5lZCBvbi5cbiAgICogUGFzc2luZyBmYWxzZSBtZWFucyB0aGF0IHRoZSBkZXZpY2Ugd2lsbCBvbmx5IHZpYnJhdGUgdW5sZXNzIHRoZSBkZXZpY2UgaXMgc2V0IHRvIGEgdG90YWwgc2lsZW50IG1vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmFsc2UgdG8gZGlzYWJsZSBzb3VuZCwgdHJ1ZSB0byByZS1lbmFibGUgaXQuXG4gICAqIEBwYXJhbSBlbmFibGVcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlbmFibGVTb3VuZChlbmFibGU6IGJvb2xlYW4pOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIFNldHRpbmcgdG8gY29udHJvbCBob3cgT25lU2lnbmFsIG5vdGlmaWNhdGlvbnMgd2lsbCBiZSBzaG93biB3aGVuIG9uZSBpcyByZWNlaXZlZCB3aGlsZSB5b3VyIGFwcCBpcyBpbiBmb2N1cy4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byBpbkFwcEFsZXJ0LCB3aGljaCBjYW4gYmUgaGVscGZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RGlzcGxheVR5cGV9IGRpc3BsYXlPcHRpb25cbiAgICogQHJldHVybnMge2FueX1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBpbkZvY3VzRGlzcGxheWluZyhkaXNwbGF5T3B0aW9uOiBPU0Rpc3BsYXlUeXBlKTogYW55IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIHdpdGggZmFsc2UgdG8gb3B0IHVzZXJzIG91dCBvZiByZWNlaXZpbmcgYWxsIG5vdGlmaWNhdGlvbnMgdGhyb3VnaCBPbmVTaWduYWwuXG4gICAqIFlvdSBjYW4gcGFzcyB0cnVlIGxhdGVyIHRvIG9wdCB1c2VycyBiYWNrIGludG8gbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBzZXRTdWJzY3JpcHRpb24oZW5hYmxlOiBib29sZWFuKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgbm90aWZpY2F0aW9uIGFuZCBwZXJtaXNzaW9uIHN0YXRlLiBSZXR1cm5zIGEgT1NQZXJtaXNzaW9uU3Vic2NyaXB0aW9uU3RhdGUgdHlwZSBkZXNjcmliZWQgYmVsb3cuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9TUGVybWlzc2lvblN1YnNjcmlwdGlvblN0YXRlPn1cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0UGVybWlzc2lvblN1YnNjcmlwdGlvblN0YXRlKCk6IFByb21pc2U8T1NQZXJtaXNzaW9uU3Vic2NyaXB0aW9uU3RhdGU+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtub3RpZmljYXRpb25PYmp9IFBhcmFtZXRlcnMgc2VlIFBPU1QgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jdW1lbnRhdGlvbi5vbmVzaWduYWwuY29tL3YyLjAvZG9jcy9ub3RpZmljYXRpb25zLWNyZWF0ZS1ub3RpZmljYXRpb24pXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb25PYmpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn0gUmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyBpZiB0aGUgbm90aWZpY2F0aW9uIHdhcyBzZW5kIHN1Y2Nlc3NmdWxseS5cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgcG9zdE5vdGlmaWNhdGlvbihub3RpZmljYXRpb25PYmo6IE9TTm90aWZpY2F0aW9uKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBhIHNpbmdsZSBPbmVTaWduYWwgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBBbmRyb2lkIG5vdGlmaWNhdGlvbiBpbnRlZ2VyIGlkLiBVc2UgaW5zdGVhZCBvZiBOb3RpZmljYXRpb25NYW5hZ2VyLmNhbmNlbChpZCk7IG90aGVyd2lzZSB0aGUgbm90aWZpY2F0aW9uIHdpbGwgYmUgcmVzdG9yZWQgd2hlbiB5b3VyIGFwcCBpcyByZXN0YXJ0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb25JZCB7c3RyaW5nfVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIGNhbmNlbE5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZDogc3RyaW5nKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBQcm9tcHRzIHRoZSB1c2VyIGZvciBsb2NhdGlvbiBwZXJtaXNzaW9uIHRvIGFsbG93IGdlb3RhZ2dpbmcgYmFzZWQgb24gdGhlIFwiTG9jYXRpb24gcmFkaXVzXCIgZmlsdGVyIG9uIHRoZSBPbmVTaWduYWwgZGFzaGJvYXJkLlxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIHByb21wdExvY2F0aW9uKCk6IHZvaWQge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVtYWlsIHtzdHJpbmd9XG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgc3luY0hhc2hlZEVtYWlsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBsb2dnaW5nIHRvIGhlbHAgZGVidWcgaWYgeW91IHJ1biBpbnRvIGFuIGlzc3VlIHNldHRpbmcgdXAgT25lU2lnbmFsLlxuICAgKiBUaGUgbG9nZ2luZyBsZXZlbHMgYXJlIGFzIGZvbGxvd3M6IDAgPSBOb25lLCAxPSBGYXRhbCwgMiA9IEVycm9ycywgMyA9IFdhcm5pbmdzLCA0ID0gSW5mbywgNSA9IERlYnVnLCA2ID0gVmVyYm9zZVxuICAgKlxuICAgKiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSB0aGUgbW9yZSBpbmZvcm1hdGlvbiBpcyBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtsb2dsZXZlbH0gY29udGFpbnMgdHdvIHByb3BlcnRpZXM6IGxvZ0xldmVsIChmb3IgY29uc29sZSBsb2dnaW5nKSBhbmQgdmlzdWFsTGV2ZWwgKGZvciBkaWFsb2cgbWVzc2FnZXMpXG4gICAqIEBwYXJhbSBsb2dMZXZlbFxuICAgKiBAcGFyYW0gbG9nTGV2ZWwubG9nTGV2ZWxcbiAgICogQHBhcmFtIGxvZ0xldmVsLnZpc3VhbExldmVsXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgc2V0TG9nTGV2ZWwobG9nTGV2ZWw6IHsgbG9nTGV2ZWw6IG51bWJlcjsgdmlzdWFsTGV2ZWw6IG51bWJlciB9KTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIG9yIGVuYWJsZSBsb2NhdGlvbiBjb2xsZWN0aW9uIChEZWZhdWx0cyB0byBlbmFibGVkKSBpZiB5b3VyIGFwcCBoYXMgbG9jYXRpb24gcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIHNoYXJlZCB7Ym9vbGVhbn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBzZXRMb2NhdGlvblNoYXJlZChzaGFyZWQ6IGJvb2xlYW4pOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIFRoZSBwYXNzZWQgaW4gZnVuY3Rpb24gd2lsbCBiZSBmaXJlZCB3aGVuIGEgbm90aWZpY2F0aW9uIHBlcm1pc3Npb24gc2V0dGluZyBjaGFuZ2VzLlxuICAgKiBUaGlzIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuICAgKiAtIE5vdGlmaWNhdGlvbiBwZXJtaXNzaW9uIHByb21wdCBzaG93blxuICAgKiAtIFRoZSB1c2VyIGFjY2VwdGluZyBvciBkZWNsaW5pbmcgdGhlIHBlcm1pc3Npb24gcHJvbXB0XG4gICAqIC0gRW5hYmxpbmcvZGlzYWJsaW5nIG5vdGlmaWNhdGlvbnMgZm9yIHlvdXIgYXBwIGluIHRoZSBkZXZpY2UgU2V0dGluZ3MgYWZ0ZXIgcmV0dXJuaW5nIHRvIHlvdXIgYXBwLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG9ic2VydmFibGU6IHRydWUsXG4gIH0pXG4gIGFkZFBlcm1pc3Npb25PYnNlcnZlcigpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGFzc2VkIGluIGZ1bmN0aW9uIHdpbGwgYmUgZmlyZWQgd2hlbiBhIG5vdGlmaWNhdGlvbiBzdWJzY3JpcHRpb24gcHJvcGVydHkgY2hhbmdlcy5cbiAgICogVGhpcyBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGV2ZW50czpcbiAgICogLSBHZXR0aW5nIGEgcHVzaCB0b2tlbiBmcm9tIEFwcGxlIC8gR29vZ2xlLlxuICAgKiAtIEdldHRpbmcgYSBwbGF5ZXIgLyB1c2VyIGlkIGZyb20gT25lU2lnbmFsXG4gICAqIC0gT25lU2lnbmFsLnNldFN1YnNjcmlwdGlvbiBpcyBjYWxsZWRcbiAgICogLSBVc2VyIGRpc2FibGVzIG9yIGVuYWJsZXMgbm90aWZpY2F0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG9ic2VydmFibGU6IHRydWUsXG4gIH0pXG4gIGFkZFN1YnNjcmlwdGlvbk9ic2VydmVyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgT25lU2lnbmFsIG5vdGlmaWNhdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqIEBwYXJhbSBlbWFpbEF1dGhUb2tlblxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzZXRFbWFpbChlbWFpbDogc3RyaW5nLCBlbWFpbEF1dGhUb2tlbj86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHlvdXIgYXBwIGltcGxlbWVudHMgbG9nb3V0IGZ1bmN0aW9uYWxpdHksIHlvdSBjYW4gY2FsbCBsb2dvdXRFbWFpbCB0byBkaXNzb2NpYXRlIHRoZSBlbWFpbCBmcm9tIHRoZSBkZXZpY2VcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgbG9nb3V0RW1haWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBhc3NlZCBpbiBmdW5jdGlvbiB3aWxsIGJlIGZpcmVkIHdoZW4gYSBub3RpZmljYXRpb24gc3Vic2NyaXB0aW9uIHByb3BlcnR5IGNoYW5nZXMuXG4gICAqIFRoaXMgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBldmVudHM6XG4gICAqIC0gR2V0dGluZyBhIHB1c2ggdG9rZW4gZnJvbSBBcHBsZSAvIEdvb2dsZS5cbiAgICogLSBHZXR0aW5nIGEgcGxheWVyIC8gdXNlciBpZCBmcm9tIE9uZVNpZ25hbFxuICAgKiAtIE9uZVNpZ25hbC5zZXRTdWJzY3JpcHRpb24gaXMgY2FsbGVkXG4gICAqIC0gVXNlciBkaXNhYmxlcyBvciBlbmFibGVzIG5vdGlmaWNhdGlvbnNcbiAgICpcbiAgICogQHJldHVybnMge09ic2VydmFibGU8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvYnNlcnZhYmxlOiB0cnVlLFxuICB9KVxuICBhZGRFbWFpbFN1YnNjcmlwdGlvbk9ic2VydmVyKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgT25lU2lnbmFsIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBjbGVhck9uZVNpZ25hbE5vdGlmaWNhdGlvbnMoKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgeW91IHRvIGRlbGF5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgU0RLIHVudGlsIHRoZSB1c2VyIHByb3ZpZGVzIHByaXZhY3kgY29uc2VudC5cbiAgICogVGhlIFNESyB3aWxsIG5vdCBiZSBmdWxseSBpbml0aWFsaXplZCB1bnRpbCB0aGUgcHJvdmlkZVVzZXJDb25zZW50KHRydWUpIG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVxdWlyZWRcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0UmVxdWlyZXNVc2VyUHJpdmFjeUNvbnNlbnQocmVxdWlyZWQ6IGJvb2xlYW4pOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIElmIHlvdXIgYXBwbGljYXRpb24gaXMgc2V0IHRvIHJlcXVpcmUgdGhlIHVzZXIncyBwcml2YWN5IGNvbnNlbnQsIHlvdSBjYW4gcHJvdmlkZSB0aGlzIGNvbnNlbnQgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqIFVudGlsIHlvdSBjYWxsIHByb3ZpZGVVc2VyQ29uc2VudCh0cnVlKSwgdGhlIFNESyB3aWxsIG5vdCBmdWxseSBpbml0aWFsaXplIGFuZCB3aWxsIG5vdCBzZW5kIGFueSBkYXRhIHRvIE9uZVNpZ25hbC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBncmFudGVkXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHByb3ZpZGVVc2VyQ29uc2VudChncmFudGVkOiBib29sZWFuKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBBY2NlcHRzIGEgY2FsbGJhY2ssIHdoaWNoIHJldHVybnMgYSBib29sZWFuIHZhcmlhYmxlIGluZGljYXRpbmcgaWYgdGhlIHVzZXIgaGFzIGdpdmVuIHByaXZhY3kgY29uc2VudCB5ZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHVzZXJQcm92aWRlZFByaXZhY3lDb25zZW50KGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge31cblxuICAvKipcbiAgICogQWxsb3dzIHlvdSB0byB1c2UgeW91ciBvd24gc3lzdGVtJ3MgdXNlciBJRCdzIHRvIHNlbmQgcHVzaCBub3RpZmljYXRpb25zIHRvIHlvdXIgdXNlcnMuXG4gICAqIFRvIHRpZSBhIHVzZXIgdG8gYSBnaXZlbiB1c2VyIElELCB5b3UgY2FuIHVzZSB0aGlzIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dGVybmFsSWRcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc2V0RXh0ZXJuYWxVc2VySWQoZXh0ZXJuYWxJZDogc3RyaW5nKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHdoYXRldmVyIHdhcyBzZXQgYXMgdGhlIGN1cnJlbnQgdXNlcidzIGV4dGVybmFsIHVzZXIgSUQuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHJlbW92ZUV4dGVybmFsVXNlcklkKCk6IHZvaWQge31cblxuICAvKipcbiAgICogQWRkIGEgdHJpZ2dlci4gTWF5IHNob3cgYW4gSW4tQXBwIE1lc3NhZ2UgaWYgaXRzIHRyaWdnZXIgY29uZGl0aW9ucyB3ZXJlIG1ldC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgZm9yIHRoZSB0cmlnZ2VyLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IE9iamVjdH0gdmFsdWUgVmFsdWUgZm9yIHRoZSB0cmlnZ2VyLiBTdHJpbmcgb3IgbnVtYmVyIHJlY29tbWVuZGVkLiBPYmplY3QgcGFzc2VkIGluIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nLlxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHN5bmM6IHRydWUsXG4gIH0pXG4gIGFkZFRyaWdnZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBPYmplY3QpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG1hcCBvZiB0cmlnZ2Vycy4gTWF5IHNob3cgYW4gSW4tQXBwIE1lc3NhZ2UgaWYgaXRzIHRyaWdnZXIgY29uZGl0aW9ucyB3ZXJlIG1ldC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgT2JqZWN0Pn0gdHJpZ2dlcnMgQWxsb3dzIHlvdSB0byBzZXQgbXVsdGlwbGUgdHJpZ2dlciBrZXkvdmFsdWUgcGFpcnMgc2ltdWx0YW5lb3VzbHkuIFBhc3MgYSBqc29uIG9iamVjdCB3aXRoIGtleS92YWx1ZSBwYWlycyBsaWtlOiBge1wia2V5XCI6IFwidmFsdWVcIiwgXCJrZXkyXCI6IFwidmFsdWUyXCJ9YC5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzeW5jOiB0cnVlLFxuICB9KVxuICBhZGRUcmlnZ2Vycyh0cmlnZ2VyczogT2JqZWN0KTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgc2luZ2xlIHRyaWdnZXIgZm9yIHRoZSBnaXZlbiBrZXkuIE1heSBzaG93IGFuIEluLUFwcCBNZXNzYWdlIGlmIGl0cyB0cmlnZ2VyIGNvbmRpdGlvbnMgd2VyZSBtZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgS2V5IGZvciB0cmlnZ2VyIHRvIHJlbW92ZS5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzeW5jOiB0cnVlLFxuICB9KVxuICByZW1vdmVUcmlnZ2VyRm9yS2V5KGtleTogc3RyaW5nKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgbGlzdCBvZiB0cmlnZ2VycyBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gKGFycmF5KSBvZiBrZXlzLiBNYXkgc2hvdyBhbiBJbi1BcHAgTWVzc2FnZSBpZiBpdHMgdHJpZ2dlciBjb25kaXRpb25zIHdlcmUgbWV0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBrZXlzIFJlbW92ZXMgYSBjb2xsZWN0aW9uIG9mIHRyaWdnZXJzIGZyb20gdGhlaXIga2V5cy4gUGFzcyBhbiBhcnJheSBvZiB0cmlnZ2VyIGtleXMgbGlrZTogYFtcImtleTFcIiwgXCJrZXkyXCIsIFwia2V5M1wiXWAuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgc3luYzogdHJ1ZSxcbiAgfSlcbiAgcmVtb3ZlVHJpZ2dlcnNGb3JLZXlzKGtleXM6IHN0cmluZ1tdKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgdHJpZ2dlciB2YWx1ZSBmb3IgYSBwcm92aWRlZCB0cmlnZ2VyIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgZm9yIHRyaWdnZXIgdG8gZ2V0IHZhbHVlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBPYmplY3Q+fSBSZXR1cm4gdmFsdWUgc2V0IHdpdGggYGFkZFRyaWdnZXJgLCBvciBgbnVsbGAvYG5pbGAgKGlPUykgaWYgbmV2ZXIgc2V0IG9yIHJlbW92ZWQuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldFRyaWdnZXJWYWx1ZUZvcktleShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgT2JqZWN0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB5b3UgdG8gdGVtcG9yYXJpbHkgcGF1c2UgYWxsIEluLUFwcCBNZXNzYWdlcy4gWW91IG1heSB3YW50IHRvIGRvIHRoaXMgd2hpbGUgdGhlIHVzZXIgaXMgZW5nYWdlZCBpbiBhbiBhY3Rpdml0eSB0aGF0IHlvdSBkb24ndCB3YW50IGEgbWVzc2FnZSB0byBpbnRlcnJ1cHQgKHN1Y2ggYXMgd2F0Y2hpbmcgYSB2aWRlbykuXG4gICAqIEFuIEluLUFwcCBNZXNzYWdlIHRoYXQgd291bGQgZGlzcGxheSBpZiBub3QgcGF1c2VkIHdpbGwgZGlzcGxheSByaWdodCBhZnRlciByZXN1bWUgaWYgaXRzIGNvbmRpdGlvbnMgdG8gZGlzcGxheSByZW1haW5zIHNhdGlzZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXVzZSBUbyBwYXVzZSwgc2V0IGB0cnVlYC4gVG8gcmVzdW1lLCBzZXQgYGZhbHNlYC5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBzeW5jOiB0cnVlLFxuICB9KVxuICBwYXVzZUluQXBwTWVzc2FnZXMocGF1c2U6IGJvb2xlYW4pOiB2b2lkIHt9XG59XG4iXX0=