botframework-webchat 4.16.1-main.20240110.d642b89 → 4.16.1-main.20240119.3d09177
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/dist/webchat-es5.js +1 -1
- package/dist/webchat-minimal.js +1 -1
- package/dist/webchat.js +1 -1
- package/lib/AddFullBundle.js +9 -18
- package/lib/FullComposer.js +1 -13
- package/lib/FullReactWebChat.js +1 -12
- package/lib/adaptiveCards/AdaptiveCardsComposer.js +3 -13
- package/lib/adaptiveCards/AdaptiveCardsContext.js +1 -3
- package/lib/adaptiveCards/Attachment/AdaptiveCardAttachment.js +2 -8
- package/lib/adaptiveCards/Attachment/AdaptiveCardBuilder.js +1 -17
- package/lib/adaptiveCards/Attachment/AdaptiveCardContent.js +5 -20
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/closest.js +1 -5
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/findDOMNodeOwner.js +2 -7
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/useAdaptiveCardModEffect.js +6 -28
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/useLazyRef.js +1 -6
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/usePrevious.js +2 -3
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/useValueRef.js +1 -3
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/useActionSetShouldNotBeMenuBarModEffect.js +1 -7
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/useActionShouldBePushButtonModEffect.js +7 -21
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/useActiveElementModEffect.js +4 -12
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/useDisabledModEffect.js +4 -12
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/usePersistValuesModEffect.js +5 -16
- package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/useRoleModEffect.js +3 -7
- package/lib/adaptiveCards/Attachment/AdaptiveCardRenderer.js +82 -116
- package/lib/adaptiveCards/Attachment/AnimationCardAttachment.js +2 -8
- package/lib/adaptiveCards/Attachment/AnimationCardContent.js +10 -21
- package/lib/adaptiveCards/Attachment/AudioCardAttachment.js +3 -8
- package/lib/adaptiveCards/Attachment/AudioCardContent.js +13 -24
- package/lib/adaptiveCards/Attachment/CommonCard.js +9 -28
- package/lib/adaptiveCards/Attachment/HeroCardAttachment.js +2 -8
- package/lib/adaptiveCards/Attachment/HeroCardContent.js +9 -29
- package/lib/adaptiveCards/Attachment/OAuthCardAttachment.js +2 -8
- package/lib/adaptiveCards/Attachment/OAuthCardContent.js +9 -28
- package/lib/adaptiveCards/Attachment/ReceiptCardAttachment.js +2 -8
- package/lib/adaptiveCards/Attachment/ReceiptCardContent.js +37 -70
- package/lib/adaptiveCards/Attachment/SignInCardAttachment.js +2 -8
- package/lib/adaptiveCards/Attachment/SignInCardContent.js +5 -15
- package/lib/adaptiveCards/Attachment/ThumbnailCardAttachment.js +2 -8
- package/lib/adaptiveCards/Attachment/ThumbnailCardContent.js +22 -44
- package/lib/adaptiveCards/Attachment/VideoCardAttachment.js +3 -8
- package/lib/adaptiveCards/Attachment/VideoCardContent.js +9 -20
- package/lib/adaptiveCards/Attachment/private/renderAdaptiveCard.js +11 -21
- package/lib/adaptiveCards/AttachmentForScreenReader/AdaptiveCardAttachment.js +18 -37
- package/lib/adaptiveCards/AttachmentForScreenReader/RichCardAttachment.js +19 -25
- package/lib/adaptiveCards/DOMManipulationWithUndo/addEventListenerWithUndo.js +1 -5
- package/lib/adaptiveCards/DOMManipulationWithUndo/bunchUndos.js +1 -4
- package/lib/adaptiveCards/DOMManipulationWithUndo/durableAddClassWithUndo.js +3 -7
- package/lib/adaptiveCards/DOMManipulationWithUndo/durableDisableInputElementAccessiblyWithUndo.js +5 -18
- package/lib/adaptiveCards/DOMManipulationWithUndo/private/addClass.js +2 -3
- package/lib/adaptiveCards/DOMManipulationWithUndo/private/getAttributeOrFalse.js +1 -2
- package/lib/adaptiveCards/DOMManipulationWithUndo/private/noOp.js +1 -3
- package/lib/adaptiveCards/DOMManipulationWithUndo/private/setOrRemoveAttributeIfFalse.js +1 -2
- package/lib/adaptiveCards/DOMManipulationWithUndo/setOrRemoveAttributeIfFalseWithUndo.js +1 -9
- package/lib/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.js +6 -6
- package/lib/adaptiveCards/Styles/StyleSet/AnimationCardAttachment.js +2 -2
- package/lib/adaptiveCards/Styles/StyleSet/AudioCardAttachment.js +3 -3
- package/lib/adaptiveCards/Styles/adaptiveCardHostConfig.js +7 -14
- package/lib/adaptiveCards/Styles/createAdaptiveCardsStyleSet.js +2 -12
- package/lib/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.js +3 -10
- package/lib/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.js +1 -14
- package/lib/adaptiveCards/defaultStyleOptions.js +1 -1
- package/lib/adaptiveCards/hooks/internal/useAdaptiveCardsContext.js +1 -7
- package/lib/adaptiveCards/hooks/internal/useParseAdaptiveCardJSON.js +13 -33
- package/lib/adaptiveCards/hooks/internal/useUniqueId.js +2 -5
- package/lib/adaptiveCards/hooks/useAdaptiveCardsHostConfig.js +4 -13
- package/lib/adaptiveCards/hooks/useAdaptiveCardsPackage.js +2 -6
- package/lib/adaptiveCards/normalizeStyleOptions.js +1 -7
- package/lib/addVersion.js +4 -9
- package/lib/createBrowserWebSpeechPonyfillFactory.js +1 -4
- package/lib/createCognitiveServicesSpeechServicesPonyfillFactory.js +24 -34
- package/lib/createDirectLine.js +14 -16
- package/lib/createDirectLineAppServiceExtension.js +4 -6
- package/lib/createDirectLineSpeechAdapters.js +16 -23
- package/lib/createFullStyleSet.js +2 -8
- package/lib/fullBundleDefaultStyleOptions.js +1 -9
- package/lib/hooks/useStyleOptions.js +3 -8
- package/lib/hooks/useStyleSet.js +3 -9
- package/lib/index-es5.js +3 -17
- package/lib/index-minimal.js +2 -22
- package/lib/index.js +2 -43
- package/lib/markdown/markdownItPlugins/ariaLabel.js +15 -18
- package/lib/markdown/markdownItPlugins/betterLink.js +15 -32
- package/lib/markdown/markdownItPlugins/respectCRLF.js +3 -4
- package/lib/markdown/private/iterateLinkDefinitions.js +1 -25
- package/lib/markdown/renderMarkdown.js +9 -25
- package/lib/polyfill.js +1 -22
- package/lib/renderWebChat.js +1 -5
- package/lib/speech/CustomAudioInputStream.js +65 -104
- package/lib/speech/bytesPerSample.js +1 -2
- package/lib/speech/createAudioConfig.js +11 -30
- package/lib/speech/createAudioContext.js +6 -5
- package/lib/speech/createMicrophoneAudioConfigAndAudioContext.js +25 -37
- package/lib/speech/getUserMedia.js +5 -8
- package/lib/useComposerProps.js +7 -14
- package/package.json +32 -19
- package/src/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.tsx +2 -2
- package/src/__tests__/createDirectLine.spec.js +0 -32
- package/src/__tests__/versionTag.es5.spec.js +0 -16
- package/src/__tests__/versionTag.full.spec.js +0 -16
- package/src/__tests__/versionTag.minimal.spec.js +0 -16
- package/src/adaptiveCards/Styles/createAdaptiveCardsStyleSet.spec.js +0 -13
|
@@ -1,65 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
-
|
|
12
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
-
|
|
14
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
-
|
|
16
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
|
-
|
|
18
12
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
-
|
|
20
13
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
21
|
-
|
|
22
14
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
23
|
-
|
|
24
15
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
25
|
-
|
|
26
16
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
27
|
-
|
|
28
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
29
|
-
|
|
30
18
|
var _microsoftCognitiveservicesSpeechSdk = require("microsoft-cognitiveservices-speech-sdk");
|
|
31
|
-
|
|
32
19
|
var _Exports = require("microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common/Exports");
|
|
33
|
-
|
|
34
20
|
var _AudioStreamFormat = require("microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/Audio/AudioStreamFormat");
|
|
35
|
-
|
|
36
21
|
var _Exports2 = require("microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common.speech/Exports");
|
|
37
|
-
|
|
38
22
|
var _botframeworkWebchatCore = require("botframework-webchat-core");
|
|
39
|
-
|
|
40
23
|
var _uuid = require("uuid");
|
|
41
|
-
|
|
42
24
|
var _pDeferEs = _interopRequireDefault(require("p-defer-es5"));
|
|
43
|
-
|
|
44
25
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
45
|
-
|
|
46
26
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
47
|
-
|
|
48
27
|
var SYMBOL_DEVICE_INFO_DEFERRED = Symbol('deviceInfoDeferred');
|
|
49
28
|
var SYMBOL_EVENTS = Symbol('events');
|
|
50
29
|
var SYMBOL_FORMAT_DEFERRED = Symbol('formatDeferred');
|
|
51
|
-
var SYMBOL_OPTIONS = Symbol('options');
|
|
30
|
+
var SYMBOL_OPTIONS = Symbol('options');
|
|
31
|
+
|
|
32
|
+
// Speech SDK quirks: Only 2 lifecycle functions are actually used.
|
|
52
33
|
// They are: attach() and turnOff().
|
|
53
34
|
// Others are not used, including: blob(), close(), detach(), turnOn().
|
|
54
|
-
|
|
55
35
|
var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
56
36
|
(0, _inherits2.default)(CustomAudioInputStream, _AudioInputStream);
|
|
57
|
-
|
|
58
37
|
var _super = _createSuper(CustomAudioInputStream);
|
|
59
|
-
|
|
60
38
|
function CustomAudioInputStream() {
|
|
61
39
|
var _this;
|
|
62
|
-
|
|
63
40
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
64
41
|
(0, _classCallCheck2.default)(this, CustomAudioInputStream);
|
|
65
42
|
_this = _super.call(this);
|
|
@@ -70,26 +47,28 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
70
47
|
var normalizedOptions = {
|
|
71
48
|
debug: options.debug || false,
|
|
72
49
|
id: options.id || (0, _uuid.v4)().replace(/\x2D/g, '')
|
|
73
|
-
};
|
|
74
|
-
// eslint-disable-next-line security/detect-object-injection
|
|
50
|
+
};
|
|
75
51
|
|
|
76
|
-
|
|
52
|
+
// False alarm: indexer is a constant of type Symbol.
|
|
77
53
|
// eslint-disable-next-line security/detect-object-injection
|
|
54
|
+
_this[SYMBOL_DEVICE_INFO_DEFERRED] = (0, _pDeferEs.default)();
|
|
78
55
|
|
|
79
|
-
|
|
56
|
+
// False alarm: indexer is a constant of type Symbol.
|
|
80
57
|
// eslint-disable-next-line security/detect-object-injection
|
|
58
|
+
_this[SYMBOL_EVENTS] = new _Exports.EventSource();
|
|
81
59
|
|
|
82
|
-
|
|
60
|
+
// False alarm: indexer is a constant of type Symbol.
|
|
83
61
|
// eslint-disable-next-line security/detect-object-injection
|
|
62
|
+
_this[SYMBOL_FORMAT_DEFERRED] = (0, _pDeferEs.default)();
|
|
84
63
|
|
|
64
|
+
// False alarm: indexer is a constant of type Symbol.
|
|
65
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
85
66
|
_this[SYMBOL_OPTIONS] = normalizedOptions;
|
|
86
67
|
return _this;
|
|
87
68
|
}
|
|
88
|
-
|
|
89
69
|
(0, _createClass2.default)(CustomAudioInputStream, [{
|
|
90
70
|
key: "events",
|
|
91
|
-
get:
|
|
92
|
-
/** Gets the event source for listening to events. */
|
|
71
|
+
get: /** Gets the event source for listening to events. */
|
|
93
72
|
// ESLint: This code will only works in browsers other than IE11. Only works in ES5 is okay.
|
|
94
73
|
// @ts-ignore Accessors are only available when targeting ECMAScript 5 and higher.ts(1056)
|
|
95
74
|
function get() {
|
|
@@ -97,6 +76,7 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
97
76
|
// eslint-disable-next-line security/detect-object-injection
|
|
98
77
|
return this[SYMBOL_EVENTS];
|
|
99
78
|
}
|
|
79
|
+
|
|
100
80
|
/** Gets the format of the audio stream. */
|
|
101
81
|
// Speech SDK quirks: `AudioStreamFormatImpl` is internal implementation while `AudioStreamFormat` is public.
|
|
102
82
|
// It is weird to expose `AudioStreamFormatImpl` instead of `AudioStreamFormat`.
|
|
@@ -105,17 +85,17 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
105
85
|
// But in Direct Line Speech, it is called before "attach".
|
|
106
86
|
// ESLint: This code will only works in browsers other than IE11. Only works in ES5 is okay.
|
|
107
87
|
// @ts-ignore Accessors are only available when targeting ECMAScript 5 and higher.ts(1056)
|
|
108
|
-
|
|
109
88
|
}, {
|
|
110
89
|
key: "format",
|
|
111
90
|
get: function get() {
|
|
112
|
-
this.debug('Getting "format".');
|
|
113
|
-
// eslint-disable-next-line security/detect-object-injection
|
|
91
|
+
this.debug('Getting "format".');
|
|
114
92
|
|
|
93
|
+
// False alarm: indexer is a constant of type Symbol.
|
|
94
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
115
95
|
return this[SYMBOL_FORMAT_DEFERRED].promise;
|
|
116
96
|
}
|
|
117
|
-
/** Gets the ID of this audio stream. */
|
|
118
97
|
|
|
98
|
+
/** Gets the ID of this audio stream. */
|
|
119
99
|
}, {
|
|
120
100
|
key: "id",
|
|
121
101
|
value: function id() {
|
|
@@ -123,173 +103,167 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
123
103
|
// eslint-disable-next-line security/detect-object-injection
|
|
124
104
|
return this[SYMBOL_OPTIONS].id;
|
|
125
105
|
}
|
|
106
|
+
|
|
126
107
|
/** Emits an event. */
|
|
127
108
|
// Speech SDK quirks: In JavaScript, onXxx means "listen to event XXX".
|
|
128
109
|
// Instead, in Speech SDK, it means "emit event XXX".
|
|
129
|
-
|
|
130
110
|
}, {
|
|
131
111
|
key: "onEvent",
|
|
132
112
|
value: function onEvent(event) {
|
|
133
113
|
// False alarm: indexer is a constant of type Symbol.
|
|
134
114
|
// eslint-disable-next-line security/detect-object-injection
|
|
135
115
|
this[SYMBOL_EVENTS].onEvent(event);
|
|
136
|
-
|
|
137
116
|
_Exports.Events.instance.onEvent(event);
|
|
138
117
|
}
|
|
139
|
-
/** Emits an `AudioSourceInitializingEvent`. */
|
|
140
118
|
|
|
119
|
+
/** Emits an `AudioSourceInitializingEvent`. */
|
|
141
120
|
}, {
|
|
142
121
|
key: "emitInitializing",
|
|
143
122
|
value: function emitInitializing() {
|
|
144
123
|
this.debug('Emitting "AudioSourceInitializingEvent".');
|
|
145
124
|
this.onEvent(new _Exports.AudioSourceInitializingEvent(this.id()));
|
|
146
125
|
}
|
|
147
|
-
/** Emits an `AudioSourceReadyEvent`. */
|
|
148
126
|
|
|
127
|
+
/** Emits an `AudioSourceReadyEvent`. */
|
|
149
128
|
}, {
|
|
150
129
|
key: "emitReady",
|
|
151
130
|
value: function emitReady() {
|
|
152
131
|
this.debug('Emitting "AudioSourceReadyEvent".');
|
|
153
132
|
this.onEvent(new _Exports.AudioSourceReadyEvent(this.id()));
|
|
154
133
|
}
|
|
134
|
+
|
|
155
135
|
/** Emits an `AudioSourceErrorEvent`. */
|
|
156
136
|
// Speech SDK quirks: Since "turnOn" is never called and "turnOff" does not work in Direct Line Speech, the "source error" event is not emitted at all.
|
|
157
137
|
// Instead, we only emit "node error" event.
|
|
158
|
-
|
|
159
138
|
}, {
|
|
160
139
|
key: "emitError",
|
|
161
140
|
value: function emitError(error) {
|
|
162
141
|
this.debug('Emitting "AudioSourceErrorEvent".', {
|
|
163
142
|
error: error
|
|
164
|
-
});
|
|
143
|
+
});
|
|
165
144
|
|
|
145
|
+
// Speech SDK quirks: "error" is a string, instead of object of type "Error".
|
|
166
146
|
this.onEvent(new _Exports.AudioSourceErrorEvent(this.id(), error.message));
|
|
167
147
|
}
|
|
168
|
-
/** Emits an `AudioStreamNodeAttachingEvent`. */
|
|
169
148
|
|
|
149
|
+
/** Emits an `AudioStreamNodeAttachingEvent`. */
|
|
170
150
|
}, {
|
|
171
151
|
key: "emitNodeAttaching",
|
|
172
152
|
value: function emitNodeAttaching(audioNodeId) {
|
|
173
153
|
this.debug("Emitting \"AudioStreamNodeAttachingEvent\" for node \"".concat(audioNodeId, "\"."));
|
|
174
154
|
this.onEvent(new _Exports.AudioStreamNodeAttachingEvent(this.id(), audioNodeId));
|
|
175
155
|
}
|
|
176
|
-
/** Emits an `AudioStreamNodeAttachedEvent`. */
|
|
177
156
|
|
|
157
|
+
/** Emits an `AudioStreamNodeAttachedEvent`. */
|
|
178
158
|
}, {
|
|
179
159
|
key: "emitNodeAttached",
|
|
180
160
|
value: function emitNodeAttached(audioNodeId) {
|
|
181
161
|
this.debug("Emitting \"AudioStreamNodeAttachedEvent\" for node \"".concat(audioNodeId, "\"."));
|
|
182
162
|
this.onEvent(new _Exports.AudioStreamNodeAttachedEvent(this.id(), audioNodeId));
|
|
183
163
|
}
|
|
184
|
-
/** Emits an `AudioStreamNodeErrorEvent`. */
|
|
185
164
|
|
|
165
|
+
/** Emits an `AudioStreamNodeErrorEvent`. */
|
|
186
166
|
}, {
|
|
187
167
|
key: "emitNodeError",
|
|
188
168
|
value: function emitNodeError(audioNodeId, error) {
|
|
189
169
|
this.debug("Emitting \"AudioStreamNodeErrorEvent\" for node \"".concat(audioNodeId, "\"."), {
|
|
190
170
|
error: error
|
|
191
|
-
});
|
|
171
|
+
});
|
|
192
172
|
|
|
173
|
+
// Speech SDK quirks: "error" is a string, instead of object of type "Error".
|
|
193
174
|
this.onEvent(new _Exports.AudioStreamNodeErrorEvent(this.id(), audioNodeId, error.message));
|
|
194
175
|
}
|
|
195
|
-
/** Emits an `AudioStreamNodeDetachedEvent`. */
|
|
196
176
|
|
|
177
|
+
/** Emits an `AudioStreamNodeDetachedEvent`. */
|
|
197
178
|
}, {
|
|
198
179
|
key: "emitNodeDetached",
|
|
199
180
|
value: function emitNodeDetached(audioNodeId) {
|
|
200
181
|
this.debug('Emitting "AudioStreamNodeDetachedEvent".');
|
|
201
182
|
this.onEvent(new _Exports.AudioStreamNodeDetachedEvent(this.id(), audioNodeId));
|
|
202
183
|
}
|
|
203
|
-
/** Emits an `AudioSourceOffEvent`. */
|
|
204
184
|
|
|
185
|
+
/** Emits an `AudioSourceOffEvent`. */
|
|
205
186
|
}, {
|
|
206
187
|
key: "emitOff",
|
|
207
188
|
value: function emitOff() {
|
|
208
189
|
this.debug('Emitting "AudioSourceOffEvent".');
|
|
209
190
|
this.onEvent(new _Exports.AudioSourceOffEvent(this.id()));
|
|
210
|
-
}
|
|
211
|
-
// ESLint: Speech SDK requires this function, but we are not implementing it.
|
|
191
|
+
}
|
|
212
192
|
|
|
193
|
+
// Speech SDK quirks: Although "close" is marked as abstract, it is never called in our observations.
|
|
194
|
+
// ESLint: Speech SDK requires this function, but we are not implementing it.
|
|
213
195
|
}, {
|
|
214
196
|
key: "close",
|
|
215
197
|
value: function close() {
|
|
216
198
|
this.debug('Callback for "close".');
|
|
217
199
|
throw new Error('Not implemented');
|
|
218
|
-
}
|
|
200
|
+
}
|
|
219
201
|
|
|
202
|
+
// Speech SDK quirks: Although "turnOn" is implemented in Speech SDK Push/PullAudioInputStream, it is never called in our observations.
|
|
220
203
|
}, {
|
|
221
204
|
key: "turnOn",
|
|
222
205
|
value: function turnOn() {
|
|
223
206
|
this.debug('Callback for "turnOn".');
|
|
224
207
|
throw new Error('Not implemented');
|
|
225
|
-
}
|
|
208
|
+
}
|
|
226
209
|
|
|
210
|
+
// Speech SDK quirks: Although "detach" is implemented in Speech SDK Push/PullAudioInputStream, it is never called in our observations.
|
|
227
211
|
}, {
|
|
228
212
|
key: "detach",
|
|
229
213
|
value: function detach() {
|
|
230
214
|
this.debug('Callback for "detach".');
|
|
231
215
|
throw new Error('Not implemented');
|
|
232
216
|
}
|
|
233
|
-
/** Log the message to console if `debug` is set to `true`. */
|
|
234
217
|
|
|
218
|
+
/** Log the message to console if `debug` is set to `true`. */
|
|
235
219
|
}, {
|
|
236
220
|
key: "debug",
|
|
237
221
|
value: function debug(message) {
|
|
238
222
|
var _console;
|
|
239
|
-
|
|
240
223
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
241
224
|
args[_key - 1] = arguments[_key];
|
|
242
225
|
}
|
|
243
|
-
|
|
244
226
|
// ESLint: For debugging, will only log when "debug" is set to "true".
|
|
245
227
|
// False alarm: indexer is a constant of type Symbol.
|
|
246
228
|
// eslint-disable-next-line no-console, security/detect-object-injection
|
|
247
229
|
this[SYMBOL_OPTIONS].debug && (_console = console).info.apply(_console, ["CustomAudioInputStream: ".concat(message)].concat(args));
|
|
248
230
|
}
|
|
249
|
-
/** Implements this function. When called, it should start recording and return an `IAudioStreamNode`. */
|
|
250
231
|
|
|
232
|
+
/** Implements this function. When called, it should start recording and return an `IAudioStreamNode`. */
|
|
251
233
|
}, {
|
|
252
234
|
key: "attach",
|
|
253
|
-
value:
|
|
254
|
-
/** Attaches the device by returning an audio node. */
|
|
235
|
+
value: /** Attaches the device by returning an audio node. */
|
|
255
236
|
function attach(audioNodeId) {
|
|
256
237
|
var _this2 = this;
|
|
257
|
-
|
|
258
238
|
this.debug("Callback for \"attach\" with \"".concat(audioNodeId, "\"."));
|
|
259
239
|
this.emitNodeAttaching(audioNodeId);
|
|
260
240
|
return Promise.resolve().then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
261
241
|
var _yield$_this2$perform, audioStreamNode, deviceInfo, format;
|
|
262
|
-
|
|
263
242
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
264
243
|
while (1) {
|
|
265
244
|
switch (_context2.prev = _context2.next) {
|
|
266
245
|
case 0:
|
|
267
246
|
_this2.emitInitializing();
|
|
268
|
-
|
|
269
247
|
_context2.prev = 1;
|
|
270
248
|
_context2.next = 4;
|
|
271
249
|
return _this2.performAttach(audioNodeId);
|
|
272
|
-
|
|
273
250
|
case 4:
|
|
274
251
|
_yield$_this2$perform = _context2.sent;
|
|
275
252
|
audioStreamNode = _yield$_this2$perform.audioStreamNode;
|
|
276
253
|
deviceInfo = _yield$_this2$perform.deviceInfo;
|
|
277
254
|
format = _yield$_this2$perform.format;
|
|
278
|
-
|
|
279
255
|
// Although only getter of "format" is called before "attach" (in Direct Line Speech),
|
|
280
256
|
// we are handling both "deviceInfo" and "format" in similar way for uniformity.
|
|
257
|
+
|
|
281
258
|
// False alarm: indexer is a constant of type Symbol.
|
|
282
259
|
// eslint-disable-next-line security/detect-object-injection
|
|
283
|
-
_this2[SYMBOL_DEVICE_INFO_DEFERRED].resolve(deviceInfo);
|
|
284
|
-
// eslint-disable-next-line security/detect-object-injection
|
|
285
|
-
|
|
260
|
+
_this2[SYMBOL_DEVICE_INFO_DEFERRED].resolve(deviceInfo);
|
|
286
261
|
|
|
262
|
+
// False alarm: indexer is a constant of type Symbol.
|
|
263
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
287
264
|
_this2[SYMBOL_FORMAT_DEFERRED].resolve(new _AudioStreamFormat.AudioStreamFormatImpl(format.samplesPerSec, format.bitsPerSample, format.channels));
|
|
288
|
-
|
|
289
265
|
_this2.emitReady();
|
|
290
|
-
|
|
291
266
|
_this2.emitNodeAttached(audioNodeId);
|
|
292
|
-
|
|
293
267
|
return _context2.abrupt("return", {
|
|
294
268
|
detach: function () {
|
|
295
269
|
var _detach = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
@@ -298,16 +272,12 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
298
272
|
switch (_context.prev = _context.next) {
|
|
299
273
|
case 0:
|
|
300
274
|
_this2.debug("Detaching audio node \"".concat(audioNodeId, "\"."));
|
|
301
|
-
|
|
302
275
|
_context.next = 3;
|
|
303
276
|
return audioStreamNode.detach();
|
|
304
|
-
|
|
305
277
|
case 3:
|
|
306
278
|
// Speech SDK quirks: Since "turnOff" is not called in Direct Line Speech, we will emit event "source off" here instead.
|
|
307
279
|
_this2.emitOff();
|
|
308
|
-
|
|
309
280
|
_this2.emitNodeDetached(audioNodeId);
|
|
310
|
-
|
|
311
281
|
case 5:
|
|
312
282
|
case "end":
|
|
313
283
|
return _context.stop();
|
|
@@ -315,11 +285,9 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
315
285
|
}
|
|
316
286
|
}, _callee);
|
|
317
287
|
}));
|
|
318
|
-
|
|
319
288
|
function detach() {
|
|
320
289
|
return _detach.apply(this, arguments);
|
|
321
290
|
}
|
|
322
|
-
|
|
323
291
|
return detach;
|
|
324
292
|
}(),
|
|
325
293
|
id: function id() {
|
|
@@ -327,19 +295,14 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
327
295
|
},
|
|
328
296
|
read: function read() {
|
|
329
297
|
_this2.debug('Reading');
|
|
330
|
-
|
|
331
298
|
return audioStreamNode.read();
|
|
332
299
|
}
|
|
333
300
|
});
|
|
334
|
-
|
|
335
301
|
case 15:
|
|
336
302
|
_context2.prev = 15;
|
|
337
303
|
_context2.t0 = _context2["catch"](1);
|
|
338
|
-
|
|
339
304
|
_this2.emitNodeError(audioNodeId, _context2.t0);
|
|
340
|
-
|
|
341
305
|
throw _context2.t0;
|
|
342
|
-
|
|
343
306
|
case 19:
|
|
344
307
|
case "end":
|
|
345
308
|
return _context2.stop();
|
|
@@ -348,14 +311,15 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
348
311
|
}, _callee2, null, [[1, 15]]);
|
|
349
312
|
})));
|
|
350
313
|
}
|
|
314
|
+
|
|
351
315
|
/**
|
|
352
316
|
* Implements this function. When called, it should stop recording. This is called before the `IAudioStreamNode.detach` function.
|
|
353
317
|
*
|
|
354
318
|
* Note: when using with Direct Line Speech, this function is never called.
|
|
355
319
|
*/
|
|
320
|
+
|
|
356
321
|
// ESLint: We are not implementing this function because it is not called by Direct Line Speech.
|
|
357
322
|
// eslint-disable-next-line class-methods-use-this
|
|
358
|
-
|
|
359
323
|
}, {
|
|
360
324
|
key: "performTurnOff",
|
|
361
325
|
value: function performTurnOff() {
|
|
@@ -363,15 +327,15 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
363
327
|
// eslint-disable-next-line no-useless-return
|
|
364
328
|
return;
|
|
365
329
|
}
|
|
330
|
+
|
|
366
331
|
/** Turn off the audio device. This is called before detaching from the graph. */
|
|
367
332
|
// Speech SDK quirks: It is confused to have both "turnOff" and "detach". "turnOff" is called before "detach".
|
|
368
333
|
// Why don't we put all logics at "detach"?
|
|
369
334
|
// Speech SDK quirks: Direct Line Speech never call "turnOff". "Source off" event need to be emitted during "detach" instead.
|
|
370
335
|
// Also, custom implementation should be done at "detach" instead, such as ending and closing output streams.
|
|
371
|
-
|
|
372
336
|
}, {
|
|
373
337
|
key: "turnOff",
|
|
374
|
-
value: function () {
|
|
338
|
+
value: (function () {
|
|
375
339
|
var _turnOff = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
376
340
|
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
377
341
|
while (1) {
|
|
@@ -380,7 +344,6 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
380
344
|
this.debug("Callback for \"turnOff\".");
|
|
381
345
|
_context3.next = 3;
|
|
382
346
|
return this.performTurnOff();
|
|
383
|
-
|
|
384
347
|
case 3:
|
|
385
348
|
case "end":
|
|
386
349
|
return _context3.stop();
|
|
@@ -388,39 +351,38 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
388
351
|
}
|
|
389
352
|
}, _callee3, this);
|
|
390
353
|
}));
|
|
391
|
-
|
|
392
354
|
function turnOff() {
|
|
393
355
|
return _turnOff.apply(this, arguments);
|
|
394
356
|
}
|
|
395
|
-
|
|
396
357
|
return turnOff;
|
|
397
358
|
}()
|
|
398
359
|
/** Gets the device information. */
|
|
399
360
|
// ESLint: This code will only works in browsers other than IE11. Only works in ES5 is okay.
|
|
400
361
|
// @ts-ignore Accessors are only available when targeting ECMAScript 5 and higher.ts(1056)
|
|
401
|
-
|
|
362
|
+
)
|
|
402
363
|
}, {
|
|
403
364
|
key: "deviceInfo",
|
|
404
365
|
get: function get() {
|
|
405
|
-
this.debug("Getting \"deviceInfo\".");
|
|
406
|
-
// eslint-disable-next-line security/detect-object-injection
|
|
366
|
+
this.debug("Getting \"deviceInfo\".");
|
|
407
367
|
|
|
368
|
+
// False alarm: indexer is a constant of type Symbol.
|
|
369
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
408
370
|
return Promise.all([this[SYMBOL_DEVICE_INFO_DEFERRED].promise, this[SYMBOL_FORMAT_DEFERRED].promise]).then(function (_ref2) {
|
|
409
371
|
var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
372
|
+
_ref3$ = _ref3[0],
|
|
373
|
+
connectivity = _ref3$.connectivity,
|
|
374
|
+
manufacturer = _ref3$.manufacturer,
|
|
375
|
+
model = _ref3$.model,
|
|
376
|
+
type = _ref3$.type,
|
|
377
|
+
_ref3$2 = _ref3[1],
|
|
378
|
+
bitsPerSample = _ref3$2.bitsPerSample,
|
|
379
|
+
channels = _ref3$2.channels,
|
|
380
|
+
samplesPerSec = _ref3$2.samplesPerSec;
|
|
420
381
|
return {
|
|
421
382
|
bitspersample: bitsPerSample,
|
|
422
383
|
channelcount: channels,
|
|
423
|
-
connectivity: typeof connectivity === 'string' && !(0, _botframeworkWebchatCore.isForbiddenPropertyName)(connectivity) ?
|
|
384
|
+
connectivity: typeof connectivity === 'string' && !(0, _botframeworkWebchatCore.isForbiddenPropertyName)(connectivity) ?
|
|
385
|
+
// Mitigated through denylisting.
|
|
424
386
|
// eslint-disable-next-line security/detect-object-injection
|
|
425
387
|
_Exports2.connectivity[connectivity] : connectivity || _Exports2.connectivity.Unknown,
|
|
426
388
|
manufacturer: manufacturer || '',
|
|
@@ -435,7 +397,6 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
|
|
|
435
397
|
}]);
|
|
436
398
|
return CustomAudioInputStream;
|
|
437
399
|
}(_microsoftCognitiveservicesSpeechSdk.AudioInputStream);
|
|
438
|
-
|
|
439
400
|
var _default = CustomAudioInputStream;
|
|
440
401
|
exports.default = _default;
|
|
441
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRUQiLCJTeW1ib2wiLCJTWU1CT0xfRVZFTlRTIiwiU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRCIsIlNZTUJPTF9PUFRJT05TIiwiQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbSIsIm9wdGlvbnMiLCJub3JtYWxpemVkT3B0aW9ucyIsImRlYnVnIiwiaWQiLCJ2NCIsInJlcGxhY2UiLCJjcmVhdGVEZWZlcnJlZCIsIkV2ZW50U291cmNlIiwicHJvbWlzZSIsImV2ZW50Iiwib25FdmVudCIsIkV2ZW50cyIsImluc3RhbmNlIiwiQXVkaW9Tb3VyY2VJbml0aWFsaXppbmdFdmVudCIsIkF1ZGlvU291cmNlUmVhZHlFdmVudCIsImVycm9yIiwiQXVkaW9Tb3VyY2VFcnJvckV2ZW50IiwibWVzc2FnZSIsImF1ZGlvTm9kZUlkIiwiQXVkaW9TdHJlYW1Ob2RlQXR0YWNoaW5nRXZlbnQiLCJBdWRpb1N0cmVhbU5vZGVBdHRhY2hlZEV2ZW50IiwiQXVkaW9TdHJlYW1Ob2RlRXJyb3JFdmVudCIsIkF1ZGlvU3RyZWFtTm9kZURldGFjaGVkRXZlbnQiLCJBdWRpb1NvdXJjZU9mZkV2ZW50IiwiRXJyb3IiLCJhcmdzIiwiY29uc29sZSIsImluZm8iLCJlbWl0Tm9kZUF0dGFjaGluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImVtaXRJbml0aWFsaXppbmciLCJwZXJmb3JtQXR0YWNoIiwiYXVkaW9TdHJlYW1Ob2RlIiwiZGV2aWNlSW5mbyIsImZvcm1hdCIsIkF1ZGlvU3RyZWFtRm9ybWF0SW1wbCIsInNhbXBsZXNQZXJTZWMiLCJiaXRzUGVyU2FtcGxlIiwiY2hhbm5lbHMiLCJlbWl0UmVhZHkiLCJlbWl0Tm9kZUF0dGFjaGVkIiwiZGV0YWNoIiwiZW1pdE9mZiIsImVtaXROb2RlRGV0YWNoZWQiLCJyZWFkIiwiZW1pdE5vZGVFcnJvciIsInBlcmZvcm1UdXJuT2ZmIiwiYWxsIiwiY29ubmVjdGl2aXR5IiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJ0eXBlIiwiYml0c3BlcnNhbXBsZSIsImNoYW5uZWxjb3VudCIsImlzRm9yYmlkZGVuUHJvcGVydHlOYW1lIiwiQ29ubmVjdGl2aXR5IiwiVW5rbm93biIsInNhbXBsZXJhdGUiLCJUeXBlIiwiQXVkaW9JbnB1dFN0cmVhbSJdLCJzb3VyY2VSb290IjoiYnVuZGxlOi8vLyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NwZWVjaC9DdXN0b21BdWRpb0lucHV0U3RyZWFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1ZGlvSW5wdXRTdHJlYW0gfSBmcm9tICdtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNkayc7XG5cbmltcG9ydCB7XG4gIEF1ZGlvU291cmNlRXJyb3JFdmVudCxcbiAgQXVkaW9Tb3VyY2VFdmVudCxcbiAgQXVkaW9Tb3VyY2VJbml0aWFsaXppbmdFdmVudCxcbiAgQXVkaW9Tb3VyY2VPZmZFdmVudCxcbiAgQXVkaW9Tb3VyY2VSZWFkeUV2ZW50LFxuICBBdWRpb1N0cmVhbU5vZGVBdHRhY2hlZEV2ZW50LFxuICBBdWRpb1N0cmVhbU5vZGVBdHRhY2hpbmdFdmVudCxcbiAgQXVkaW9TdHJlYW1Ob2RlRGV0YWNoZWRFdmVudCxcbiAgQXVkaW9TdHJlYW1Ob2RlRXJyb3JFdmVudCxcbiAgRXZlbnRzLFxuICBFdmVudFNvdXJjZVxufSBmcm9tICdtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNkay9kaXN0cmliL2xpYi9zcmMvY29tbW9uL0V4cG9ydHMnO1xuXG5pbXBvcnQgeyBBdWRpb1N0cmVhbUZvcm1hdEltcGwgfSBmcm9tICdtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNkay9kaXN0cmliL2xpYi9zcmMvc2RrL0F1ZGlvL0F1ZGlvU3RyZWFtRm9ybWF0JztcblxuaW1wb3J0IHtcbiAgY29ubmVjdGl2aXR5IGFzIENvbm5lY3Rpdml0eSxcbiAgSVNwZWVjaENvbmZpZ0F1ZGlvRGV2aWNlLFxuICB0eXBlIGFzIFR5cGVcbn0gZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsvZGlzdHJpYi9saWIvc3JjL2NvbW1vbi5zcGVlY2gvRXhwb3J0cyc7XG5cbmltcG9ydCB7IGlzRm9yYmlkZGVuUHJvcGVydHlOYW1lIH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtY29yZSc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IGNyZWF0ZURlZmVycmVkLCB7IERlZmVycmVkUHJvbWlzZSB9IGZyb20gJ3AtZGVmZXItZXM1JztcblxudHlwZSBBdWRpb1N0cmVhbU5vZGUgPSB7XG4gIGRldGFjaDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgaWQ6ICgpID0+IHN0cmluZztcbiAgcmVhZDogKCkgPT4gUHJvbWlzZTxTdHJlYW1DaHVuazxBcnJheUJ1ZmZlcj4+O1xufTtcblxudHlwZSBEZXZpY2VJbmZvID0ge1xuICBjb25uZWN0aXZpdHk/OiBDb25uZWN0aXZpdHkgfCAnQmx1ZXRvb3RoJyB8ICdXaXJlZCcgfCAnV2lGaScgfCAnQ2VsbHVsYXInIHwgJ0luQnVpbHQnIHwgJ1Vua25vd24nO1xuICBtYW51ZmFjdHVyZXI/OiBzdHJpbmc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICB0eXBlPzpcbiAgICB8IFR5cGVcbiAgICB8ICdQaG9uZSdcbiAgICB8ICdTcGVha2VyJ1xuICAgIHwgJ0NhcidcbiAgICB8ICdIZWFkc2V0J1xuICAgIHwgJ1RoZXJtb3N0YXQnXG4gICAgfCAnTWljcm9waG9uZXMnXG4gICAgfCAnRGVza3Bob25lJ1xuICAgIHwgJ1JlbW90ZUNvbnRyb2wnXG4gICAgfCAnVW5rbm93bidcbiAgICB8ICdGaWxlJ1xuICAgIHwgJ1N0cmVhbSc7XG59O1xuXG50eXBlIEZvcm1hdCA9IHtcbiAgYml0c1BlclNhbXBsZTogbnVtYmVyO1xuICBjaGFubmVsczogbnVtYmVyO1xuICBzYW1wbGVzUGVyU2VjOiBudW1iZXI7XG59O1xuXG50eXBlIE5vcm1hbGl6ZWRPcHRpb25zID0gUmVxdWlyZWQ8T21pdDxPcHRpb25zLCAnZGVidWcnPj4gJiB7XG4gIGRlYnVnOiBib29sZWFuO1xufTtcblxudHlwZSBPcHRpb25zID0ge1xuICBkZWJ1Zz86IHRydWU7XG4gIGlkPzogc3RyaW5nO1xufTtcblxudHlwZSBTdHJlYW1DaHVuazxUPiA9IHtcbiAgaXNFbmQ6IGJvb2xlYW47XG4gIGJ1ZmZlcjogVDtcbiAgdGltZVJlY2VpdmVkOiBudW1iZXI7XG59O1xuXG5jb25zdCBTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRUQgPSBTeW1ib2woJ2RldmljZUluZm9EZWZlcnJlZCcpO1xuY29uc3QgU1lNQk9MX0VWRU5UUyA9IFN5bWJvbCgnZXZlbnRzJyk7XG5jb25zdCBTWU1CT0xfRk9STUFUX0RFRkVSUkVEID0gU3ltYm9sKCdmb3JtYXREZWZlcnJlZCcpO1xuY29uc3QgU1lNQk9MX09QVElPTlMgPSBTeW1ib2woJ29wdGlvbnMnKTtcblxuLy8gU3BlZWNoIFNESyBxdWlya3M6IE9ubHkgMiBsaWZlY3ljbGUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSB1c2VkLlxuLy8gICAgICAgICAgICAgICAgICAgIFRoZXkgYXJlOiBhdHRhY2goKSBhbmQgdHVybk9mZigpLlxuLy8gICAgICAgICAgICAgICAgICAgIE90aGVycyBhcmUgbm90IHVzZWQsIGluY2x1ZGluZzogYmxvYigpLCBjbG9zZSgpLCBkZXRhY2goKSwgdHVybk9uKCkuXG5hYnN0cmFjdCBjbGFzcyBDdXN0b21BdWRpb0lucHV0U3RyZWFtIGV4dGVuZHMgQXVkaW9JbnB1dFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBub3JtYWxpemVkT3B0aW9uczogTm9ybWFsaXplZE9wdGlvbnMgPSB7XG4gICAgICBkZWJ1Zzogb3B0aW9ucy5kZWJ1ZyB8fCBmYWxzZSxcbiAgICAgIGlkOiBvcHRpb25zLmlkIHx8IHY0KCkucmVwbGFjZSgvLS9ndSwgJycpXG4gICAgfTtcblxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRURdID0gY3JlYXRlRGVmZXJyZWQ8RGV2aWNlSW5mbz4oKTtcblxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfRVZFTlRTXSA9IG5ldyBFdmVudFNvdXJjZTxBdWRpb1NvdXJjZUV2ZW50PigpO1xuXG4gICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICB0aGlzW1NZTUJPTF9GT1JNQVRfREVGRVJSRURdID0gY3JlYXRlRGVmZXJyZWQ8QXVkaW9TdHJlYW1Gb3JtYXRJbXBsPigpO1xuXG4gICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICB0aGlzW1NZTUJPTF9PUFRJT05TXSA9IG5vcm1hbGl6ZWRPcHRpb25zO1xuICB9XG5cbiAgW1NZTUJPTF9ERVZJQ0VfSU5GT19ERUZFUlJFRF06IERlZmVycmVkUHJvbWlzZTxEZXZpY2VJbmZvPjtcbiAgW1NZTUJPTF9FVkVOVFNdOiBFdmVudFNvdXJjZTxBdWRpb1NvdXJjZUV2ZW50PjtcbiAgW1NZTUJPTF9GT1JNQVRfREVGRVJSRURdOiBEZWZlcnJlZFByb21pc2U8QXVkaW9TdHJlYW1Gb3JtYXRJbXBsPjtcbiAgW1NZTUJPTF9PUFRJT05TXTogTm9ybWFsaXplZE9wdGlvbnM7XG5cbiAgLyoqIEdldHMgdGhlIGV2ZW50IHNvdXJjZSBmb3IgbGlzdGVuaW5nIHRvIGV2ZW50cy4gKi9cbiAgLy8gRVNMaW50OiBUaGlzIGNvZGUgd2lsbCBvbmx5IHdvcmtzIGluIGJyb3dzZXJzIG90aGVyIHRoYW4gSUUxMS4gT25seSB3b3JrcyBpbiBFUzUgaXMgb2theS5cbiAgLy8gQHRzLWlnbm9yZSBBY2Nlc3NvcnMgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGFyZ2V0aW5nIEVDTUFTY3JpcHQgNSBhbmQgaGlnaGVyLnRzKDEwNTYpXG4gIGdldCBldmVudHMoKTogRXZlbnRTb3VyY2U8QXVkaW9Tb3VyY2VFdmVudD4ge1xuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgcmV0dXJuIHRoaXNbU1lNQk9MX0VWRU5UU107XG4gIH1cblxuICAvKiogR2V0cyB0aGUgZm9ybWF0IG9mIHRoZSBhdWRpbyBzdHJlYW0uICovXG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBgQXVkaW9TdHJlYW1Gb3JtYXRJbXBsYCBpcyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiB3aGlsZSBgQXVkaW9TdHJlYW1Gb3JtYXRgIGlzIHB1YmxpYy5cbiAgLy8gICAgICAgICAgICAgICAgICAgIEl0IGlzIHdlaXJkIHRvIGV4cG9zZSBgQXVkaW9TdHJlYW1Gb3JtYXRJbXBsYCBpbnN0ZWFkIG9mIGBBdWRpb1N0cmVhbUZvcm1hdGAuXG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBJdCBpcyB3ZWlyZCB0byByZXR1cm4gYSBgUHJvbWlzZWAgaW4gYSBwcm9wZXJ0eS5cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IEluIG5vcm1hbCBzcGVlY2ggcmVjb2duaXRpb24sIGdldHRlciBvZiBcImZvcm1hdFwiIGlzIGNhbGxlZCBvbmx5IGFmdGVyIFwiYXR0YWNoXCIuXG4gIC8vICAgICAgICAgICAgICAgICAgICBCdXQgaW4gRGlyZWN0IExpbmUgU3BlZWNoLCBpdCBpcyBjYWxsZWQgYmVmb3JlIFwiYXR0YWNoXCIuXG4gIC8vIEVTTGludDogVGhpcyBjb2RlIHdpbGwgb25seSB3b3JrcyBpbiBicm93c2VycyBvdGhlciB0aGFuIElFMTEuIE9ubHkgd29ya3MgaW4gRVM1IGlzIG9rYXkuXG4gIC8vIEB0cy1pZ25vcmUgQWNjZXNzb3JzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIHRhcmdldGluZyBFQ01BU2NyaXB0IDUgYW5kIGhpZ2hlci50cygxMDU2KVxuICBnZXQgZm9ybWF0KCk6IFByb21pc2U8QXVkaW9TdHJlYW1Gb3JtYXRJbXBsPiB7XG4gICAgdGhpcy5kZWJ1ZygnR2V0dGluZyBcImZvcm1hdFwiLicpO1xuXG4gICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICByZXR1cm4gdGhpc1tTWU1CT0xfRk9STUFUX0RFRkVSUkVEXS5wcm9taXNlO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIElEIG9mIHRoaXMgYXVkaW8gc3RyZWFtLiAqL1xuICBpZCgpOiBzdHJpbmcge1xuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgcmV0dXJuIHRoaXNbU1lNQk9MX09QVElPTlNdLmlkO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGV2ZW50LiAqL1xuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogSW4gSmF2YVNjcmlwdCwgb25YeHggbWVhbnMgXCJsaXN0ZW4gdG8gZXZlbnQgWFhYXCIuXG4gIC8vICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCBpbiBTcGVlY2ggU0RLLCBpdCBtZWFucyBcImVtaXQgZXZlbnQgWFhYXCIuXG4gIHByb3RlY3RlZCBvbkV2ZW50KGV2ZW50OiBBdWRpb1NvdXJjZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICB0aGlzW1NZTUJPTF9FVkVOVFNdLm9uRXZlbnQoZXZlbnQpO1xuICAgIEV2ZW50cy5pbnN0YW5jZS5vbkV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9Tb3VyY2VJbml0aWFsaXppbmdFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0SW5pdGlhbGl6aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoJ0VtaXR0aW5nIFwiQXVkaW9Tb3VyY2VJbml0aWFsaXppbmdFdmVudFwiLicpO1xuICAgIHRoaXMub25FdmVudChuZXcgQXVkaW9Tb3VyY2VJbml0aWFsaXppbmdFdmVudCh0aGlzLmlkKCkpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9Tb3VyY2VSZWFkeUV2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXRSZWFkeSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdFbWl0dGluZyBcIkF1ZGlvU291cmNlUmVhZHlFdmVudFwiLicpO1xuICAgIHRoaXMub25FdmVudChuZXcgQXVkaW9Tb3VyY2VSZWFkeUV2ZW50KHRoaXMuaWQoKSkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1NvdXJjZUVycm9yRXZlbnRgLiAqL1xuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogU2luY2UgXCJ0dXJuT25cIiBpcyBuZXZlciBjYWxsZWQgYW5kIFwidHVybk9mZlwiIGRvZXMgbm90IHdvcmsgaW4gRGlyZWN0IExpbmUgU3BlZWNoLCB0aGUgXCJzb3VyY2UgZXJyb3JcIiBldmVudCBpcyBub3QgZW1pdHRlZCBhdCBhbGwuXG4gIC8vICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB3ZSBvbmx5IGVtaXQgXCJub2RlIGVycm9yXCIgZXZlbnQuXG4gIHByb3RlY3RlZCBlbWl0RXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZygnRW1pdHRpbmcgXCJBdWRpb1NvdXJjZUVycm9yRXZlbnRcIi4nLCB7IGVycm9yIH0pO1xuXG4gICAgLy8gU3BlZWNoIFNESyBxdWlya3M6IFwiZXJyb3JcIiBpcyBhIHN0cmluZywgaW5zdGVhZCBvZiBvYmplY3Qgb2YgdHlwZSBcIkVycm9yXCIuXG4gICAgdGhpcy5vbkV2ZW50KG5ldyBBdWRpb1NvdXJjZUVycm9yRXZlbnQodGhpcy5pZCgpLCBlcnJvci5tZXNzYWdlKSk7XG4gIH1cblxuICAvKiogRW1pdHMgYW4gYEF1ZGlvU3RyZWFtTm9kZUF0dGFjaGluZ0V2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXROb2RlQXR0YWNoaW5nKGF1ZGlvTm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKGBFbWl0dGluZyBcIkF1ZGlvU3RyZWFtTm9kZUF0dGFjaGluZ0V2ZW50XCIgZm9yIG5vZGUgXCIke2F1ZGlvTm9kZUlkfVwiLmApO1xuICAgIHRoaXMub25FdmVudChuZXcgQXVkaW9TdHJlYW1Ob2RlQXR0YWNoaW5nRXZlbnQodGhpcy5pZCgpLCBhdWRpb05vZGVJZCkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1N0cmVhbU5vZGVBdHRhY2hlZEV2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXROb2RlQXR0YWNoZWQoYXVkaW9Ob2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoYEVtaXR0aW5nIFwiQXVkaW9TdHJlYW1Ob2RlQXR0YWNoZWRFdmVudFwiIGZvciBub2RlIFwiJHthdWRpb05vZGVJZH1cIi5gKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU3RyZWFtTm9kZUF0dGFjaGVkRXZlbnQodGhpcy5pZCgpLCBhdWRpb05vZGVJZCkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1N0cmVhbU5vZGVFcnJvckV2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXROb2RlRXJyb3IoYXVkaW9Ob2RlSWQ6IHN0cmluZywgZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZyhgRW1pdHRpbmcgXCJBdWRpb1N0cmVhbU5vZGVFcnJvckV2ZW50XCIgZm9yIG5vZGUgXCIke2F1ZGlvTm9kZUlkfVwiLmAsIHsgZXJyb3IgfSk7XG5cbiAgICAvLyBTcGVlY2ggU0RLIHF1aXJrczogXCJlcnJvclwiIGlzIGEgc3RyaW5nLCBpbnN0ZWFkIG9mIG9iamVjdCBvZiB0eXBlIFwiRXJyb3JcIi5cbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU3RyZWFtTm9kZUVycm9yRXZlbnQodGhpcy5pZCgpLCBhdWRpb05vZGVJZCwgZXJyb3IubWVzc2FnZSkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1N0cmVhbU5vZGVEZXRhY2hlZEV2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXROb2RlRGV0YWNoZWQoYXVkaW9Ob2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoJ0VtaXR0aW5nIFwiQXVkaW9TdHJlYW1Ob2RlRGV0YWNoZWRFdmVudFwiLicpO1xuICAgIHRoaXMub25FdmVudChuZXcgQXVkaW9TdHJlYW1Ob2RlRGV0YWNoZWRFdmVudCh0aGlzLmlkKCksIGF1ZGlvTm9kZUlkKSk7XG4gIH1cblxuICAvKiogRW1pdHMgYW4gYEF1ZGlvU291cmNlT2ZmRXZlbnRgLiAqL1xuICBwcm90ZWN0ZWQgZW1pdE9mZigpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdFbWl0dGluZyBcIkF1ZGlvU291cmNlT2ZmRXZlbnRcIi4nKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU291cmNlT2ZmRXZlbnQodGhpcy5pZCgpKSk7XG4gIH1cblxuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogQWx0aG91Z2ggXCJjbG9zZVwiIGlzIG1hcmtlZCBhcyBhYnN0cmFjdCwgaXQgaXMgbmV2ZXIgY2FsbGVkIGluIG91ciBvYnNlcnZhdGlvbnMuXG4gIC8vIEVTTGludDogU3BlZWNoIFNESyByZXF1aXJlcyB0aGlzIGZ1bmN0aW9uLCBidXQgd2UgYXJlIG5vdCBpbXBsZW1lbnRpbmcgaXQuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoJ0NhbGxiYWNrIGZvciBcImNsb3NlXCIuJyk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IEFsdGhvdWdoIFwidHVybk9uXCIgaXMgaW1wbGVtZW50ZWQgaW4gU3BlZWNoIFNESyBQdXNoL1B1bGxBdWRpb0lucHV0U3RyZWFtLCBpdCBpcyBuZXZlciBjYWxsZWQgaW4gb3VyIG9ic2VydmF0aW9ucy5cbiAgdHVybk9uKCk6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoJ0NhbGxiYWNrIGZvciBcInR1cm5PblwiLicpO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBBbHRob3VnaCBcImRldGFjaFwiIGlzIGltcGxlbWVudGVkIGluIFNwZWVjaCBTREsgUHVzaC9QdWxsQXVkaW9JbnB1dFN0cmVhbSwgaXQgaXMgbmV2ZXIgY2FsbGVkIGluIG91ciBvYnNlcnZhdGlvbnMuXG4gIGRldGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdDYWxsYmFjayBmb3IgXCJkZXRhY2hcIi4nKTtcblxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogTG9nIHRoZSBtZXNzYWdlIHRvIGNvbnNvbGUgaWYgYGRlYnVnYCBpcyBzZXQgdG8gYHRydWVgLiAqL1xuICBwcml2YXRlIGRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICAvLyBFU0xpbnQ6IEZvciBkZWJ1Z2dpbmcsIHdpbGwgb25seSBsb2cgd2hlbiBcImRlYnVnXCIgaXMgc2V0IHRvIFwidHJ1ZVwiLlxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUsIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfT1BUSU9OU10uZGVidWcgJiYgY29uc29sZS5pbmZvKGBDdXN0b21BdWRpb0lucHV0U3RyZWFtOiAke21lc3NhZ2V9YCwgLi4uYXJncyk7XG4gIH1cblxuICAvKiogSW1wbGVtZW50cyB0aGlzIGZ1bmN0aW9uLiBXaGVuIGNhbGxlZCwgaXQgc2hvdWxkIHN0YXJ0IHJlY29yZGluZyBhbmQgcmV0dXJuIGFuIGBJQXVkaW9TdHJlYW1Ob2RlYC4gKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBlcmZvcm1BdHRhY2goYXVkaW9Ob2RlSWQ6IHN0cmluZyk6IFByb21pc2U8e1xuICAgIGF1ZGlvU3RyZWFtTm9kZTogQXVkaW9TdHJlYW1Ob2RlO1xuICAgIGRldmljZUluZm86IERldmljZUluZm87XG4gICAgZm9ybWF0OiBGb3JtYXQ7XG4gIH0+O1xuXG4gIC8qKiBBdHRhY2hlcyB0aGUgZGV2aWNlIGJ5IHJldHVybmluZyBhbiBhdWRpbyBub2RlLiAqL1xuICBhdHRhY2goYXVkaW9Ob2RlSWQ6IHN0cmluZyk6IFByb21pc2U8QXVkaW9TdHJlYW1Ob2RlPiB7XG4gICAgdGhpcy5kZWJ1ZyhgQ2FsbGJhY2sgZm9yIFwiYXR0YWNoXCIgd2l0aCBcIiR7YXVkaW9Ob2RlSWR9XCIuYCk7XG5cbiAgICB0aGlzLmVtaXROb2RlQXR0YWNoaW5nKGF1ZGlvTm9kZUlkKTtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuPEF1ZGlvU3RyZWFtTm9kZT4oYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5lbWl0SW5pdGlhbGl6aW5nKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgYXVkaW9TdHJlYW1Ob2RlLCBkZXZpY2VJbmZvLCBmb3JtYXQgfSA9IGF3YWl0IHRoaXMucGVyZm9ybUF0dGFjaChhdWRpb05vZGVJZCk7XG5cbiAgICAgICAgLy8gQWx0aG91Z2ggb25seSBnZXR0ZXIgb2YgXCJmb3JtYXRcIiBpcyBjYWxsZWQgYmVmb3JlIFwiYXR0YWNoXCIgKGluIERpcmVjdCBMaW5lIFNwZWVjaCksXG4gICAgICAgIC8vIHdlIGFyZSBoYW5kbGluZyBib3RoIFwiZGV2aWNlSW5mb1wiIGFuZCBcImZvcm1hdFwiIGluIHNpbWlsYXIgd2F5IGZvciB1bmlmb3JtaXR5LlxuXG4gICAgICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICB0aGlzW1NZTUJPTF9ERVZJQ0VfSU5GT19ERUZFUlJFRF0ucmVzb2x2ZShkZXZpY2VJbmZvKTtcblxuICAgICAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgdGhpc1tTWU1CT0xfRk9STUFUX0RFRkVSUkVEXS5yZXNvbHZlKFxuICAgICAgICAgIG5ldyBBdWRpb1N0cmVhbUZvcm1hdEltcGwoZm9ybWF0LnNhbXBsZXNQZXJTZWMsIGZvcm1hdC5iaXRzUGVyU2FtcGxlLCBmb3JtYXQuY2hhbm5lbHMpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5lbWl0UmVhZHkoKTtcbiAgICAgICAgdGhpcy5lbWl0Tm9kZUF0dGFjaGVkKGF1ZGlvTm9kZUlkKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRldGFjaDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgRGV0YWNoaW5nIGF1ZGlvIG5vZGUgXCIke2F1ZGlvTm9kZUlkfVwiLmApO1xuXG4gICAgICAgICAgICBhd2FpdCBhdWRpb1N0cmVhbU5vZGUuZGV0YWNoKCk7XG5cbiAgICAgICAgICAgIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBTaW5jZSBcInR1cm5PZmZcIiBpcyBub3QgY2FsbGVkIGluIERpcmVjdCBMaW5lIFNwZWVjaCwgd2Ugd2lsbCBlbWl0IGV2ZW50IFwic291cmNlIG9mZlwiIGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICAgIHRoaXMuZW1pdE9mZigpO1xuICAgICAgICAgICAgdGhpcy5lbWl0Tm9kZURldGFjaGVkKGF1ZGlvTm9kZUlkKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlkOiAoKSA9PiBhdWRpb1N0cmVhbU5vZGUuaWQoKSxcbiAgICAgICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdSZWFkaW5nJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBhdWRpb1N0cmVhbU5vZGUucmVhZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZW1pdE5vZGVFcnJvcihhdWRpb05vZGVJZCwgZXJyb3IpO1xuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgdGhpcyBmdW5jdGlvbi4gV2hlbiBjYWxsZWQsIGl0IHNob3VsZCBzdG9wIHJlY29yZGluZy4gVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSBgSUF1ZGlvU3RyZWFtTm9kZS5kZXRhY2hgIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBOb3RlOiB3aGVuIHVzaW5nIHdpdGggRGlyZWN0IExpbmUgU3BlZWNoLCB0aGlzIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZC5cbiAgICovXG5cbiAgLy8gRVNMaW50OiBXZSBhcmUgbm90IGltcGxlbWVudGluZyB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgaXQgaXMgbm90IGNhbGxlZCBieSBEaXJlY3QgTGluZSBTcGVlY2guXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByb3RlY3RlZCBwZXJmb3JtVHVybk9mZigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBFU0xpbnQ6IFwicmV0dXJuXCIgaXMgcmVxdWlyZWQgYnkgVHlwZVNjcmlwdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLXJldHVyblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKiBUdXJuIG9mZiB0aGUgYXVkaW8gZGV2aWNlLiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgZGV0YWNoaW5nIGZyb20gdGhlIGdyYXBoLiAqL1xuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogSXQgaXMgY29uZnVzZWQgdG8gaGF2ZSBib3RoIFwidHVybk9mZlwiIGFuZCBcImRldGFjaFwiLiBcInR1cm5PZmZcIiBpcyBjYWxsZWQgYmVmb3JlIFwiZGV0YWNoXCIuXG4gIC8vICAgICAgICAgICAgICAgICAgICBXaHkgZG9uJ3Qgd2UgcHV0IGFsbCBsb2dpY3MgYXQgXCJkZXRhY2hcIj9cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IERpcmVjdCBMaW5lIFNwZWVjaCBuZXZlciBjYWxsIFwidHVybk9mZlwiLiBcIlNvdXJjZSBvZmZcIiBldmVudCBuZWVkIHRvIGJlIGVtaXR0ZWQgZHVyaW5nIFwiZGV0YWNoXCIgaW5zdGVhZC5cbiAgLy8gICAgICAgICAgICAgICAgICAgIEFsc28sIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgZG9uZSBhdCBcImRldGFjaFwiIGluc3RlYWQsIHN1Y2ggYXMgZW5kaW5nIGFuZCBjbG9zaW5nIG91dHB1dCBzdHJlYW1zLlxuICBhc3luYyB0dXJuT2ZmKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGVidWcoYENhbGxiYWNrIGZvciBcInR1cm5PZmZcIi5gKTtcblxuICAgIGF3YWl0IHRoaXMucGVyZm9ybVR1cm5PZmYoKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24uICovXG4gIC8vIEVTTGludDogVGhpcyBjb2RlIHdpbGwgb25seSB3b3JrcyBpbiBicm93c2VycyBvdGhlciB0aGFuIElFMTEuIE9ubHkgd29ya3MgaW4gRVM1IGlzIG9rYXkuXG4gIC8vIEB0cy1pZ25vcmUgQWNjZXNzb3JzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIHRhcmdldGluZyBFQ01BU2NyaXB0IDUgYW5kIGhpZ2hlci50cygxMDU2KVxuICBnZXQgZGV2aWNlSW5mbygpOiBQcm9taXNlPElTcGVlY2hDb25maWdBdWRpb0RldmljZT4ge1xuICAgIHRoaXMuZGVidWcoYEdldHRpbmcgXCJkZXZpY2VJbmZvXCIuYCk7XG5cbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbdGhpc1tTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRURdLnByb21pc2UsIHRoaXNbU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRF0ucHJvbWlzZV0pLnRoZW4oXG4gICAgICAoW3sgY29ubmVjdGl2aXR5LCBtYW51ZmFjdHVyZXIsIG1vZGVsLCB0eXBlIH0sIHsgYml0c1BlclNhbXBsZSwgY2hhbm5lbHMsIHNhbXBsZXNQZXJTZWMgfV0pID0+ICh7XG4gICAgICAgIGJpdHNwZXJzYW1wbGU6IGJpdHNQZXJTYW1wbGUsXG4gICAgICAgIGNoYW5uZWxjb3VudDogY2hhbm5lbHMsXG4gICAgICAgIGNvbm5lY3Rpdml0eTpcbiAgICAgICAgICB0eXBlb2YgY29ubmVjdGl2aXR5ID09PSAnc3RyaW5nJyAmJiAhaXNGb3JiaWRkZW5Qcm9wZXJ0eU5hbWUoY29ubmVjdGl2aXR5KVxuICAgICAgICAgICAgPyAvLyBNaXRpZ2F0ZWQgdGhyb3VnaCBkZW55bGlzdGluZy5cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgIENvbm5lY3Rpdml0eVtjb25uZWN0aXZpdHldXG4gICAgICAgICAgICA6IGNvbm5lY3Rpdml0eSB8fCBDb25uZWN0aXZpdHkuVW5rbm93bixcbiAgICAgICAgbWFudWZhY3R1cmVyOiBtYW51ZmFjdHVyZXIgfHwgJycsXG4gICAgICAgIG1vZGVsOiBtb2RlbCB8fCAnJyxcbiAgICAgICAgc2FtcGxlcmF0ZTogc2FtcGxlc1BlclNlYyxcbiAgICAgICAgLy8gTWl0aWdhdGVkIHRocm91Z2ggZGVueWxpc3RpbmcuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICB0eXBlOiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgJiYgIWlzRm9yYmlkZGVuUHJvcGVydHlOYW1lKHR5cGUpID8gVHlwZVt0eXBlXSA6IHR5cGUgfHwgVHlwZS5Vbmtub3duXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbTtcblxuZXhwb3J0IHR5cGUgeyBBdWRpb1N0cmVhbU5vZGUsIERldmlj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
|
|
402
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWljcm9zb2Z0Q29nbml0aXZlc2VydmljZXNTcGVlY2hTZGsiLCJyZXF1aXJlIiwiX0V4cG9ydHMiLCJfQXVkaW9TdHJlYW1Gb3JtYXQiLCJfRXhwb3J0czIiLCJfYm90ZnJhbWV3b3JrV2ViY2hhdENvcmUiLCJfdXVpZCIsIl9wRGVmZXJFcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY3JlYXRlU3VwZXIiLCJEZXJpdmVkIiwiaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJfY3JlYXRlU3VwZXJJbnRlcm5hbCIsIlN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsImRlZmF1bHQiLCJyZXN1bHQiLCJOZXdUYXJnZXQiLCJjb25zdHJ1Y3RvciIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsInNoYW0iLCJQcm94eSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsImUiLCJTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRUQiLCJTeW1ib2wiLCJTWU1CT0xfRVZFTlRTIiwiU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRCIsIlNZTUJPTF9PUFRJT05TIiwiQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbSIsIl9BdWRpb0lucHV0U3RyZWFtIiwiX2luaGVyaXRzMiIsIl9zdXBlciIsIl90aGlzIiwib3B0aW9ucyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIl9jbGFzc0NhbGxDaGVjazIiLCJfZGVmaW5lUHJvcGVydHkyIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZDIiLCJub3JtYWxpemVkT3B0aW9ucyIsImRlYnVnIiwiaWQiLCJ2NCIsInJlcGxhY2UiLCJjcmVhdGVEZWZlcnJlZCIsIkV2ZW50U291cmNlIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImdldCIsInByb21pc2UiLCJ2YWx1ZSIsIm9uRXZlbnQiLCJldmVudCIsIkV2ZW50cyIsImluc3RhbmNlIiwiZW1pdEluaXRpYWxpemluZyIsIkF1ZGlvU291cmNlSW5pdGlhbGl6aW5nRXZlbnQiLCJlbWl0UmVhZHkiLCJBdWRpb1NvdXJjZVJlYWR5RXZlbnQiLCJlbWl0RXJyb3IiLCJlcnJvciIsIkF1ZGlvU291cmNlRXJyb3JFdmVudCIsIm1lc3NhZ2UiLCJlbWl0Tm9kZUF0dGFjaGluZyIsImF1ZGlvTm9kZUlkIiwiY29uY2F0IiwiQXVkaW9TdHJlYW1Ob2RlQXR0YWNoaW5nRXZlbnQiLCJlbWl0Tm9kZUF0dGFjaGVkIiwiQXVkaW9TdHJlYW1Ob2RlQXR0YWNoZWRFdmVudCIsImVtaXROb2RlRXJyb3IiLCJBdWRpb1N0cmVhbU5vZGVFcnJvckV2ZW50IiwiZW1pdE5vZGVEZXRhY2hlZCIsIkF1ZGlvU3RyZWFtTm9kZURldGFjaGVkRXZlbnQiLCJlbWl0T2ZmIiwiQXVkaW9Tb3VyY2VPZmZFdmVudCIsImNsb3NlIiwiRXJyb3IiLCJ0dXJuT24iLCJkZXRhY2giLCJfY29uc29sZSIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uc29sZSIsImluZm8iLCJhdHRhY2giLCJfdGhpczIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfeWllbGQkX3RoaXMyJHBlcmZvcm0iLCJhdWRpb1N0cmVhbU5vZGUiLCJkZXZpY2VJbmZvIiwiZm9ybWF0Iiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInByZXYiLCJuZXh0IiwicGVyZm9ybUF0dGFjaCIsInNlbnQiLCJBdWRpb1N0cmVhbUZvcm1hdEltcGwiLCJzYW1wbGVzUGVyU2VjIiwiYml0c1BlclNhbXBsZSIsImNoYW5uZWxzIiwiYWJydXB0IiwiX2RldGFjaCIsIl9jYWxsZWUiLCJfY2FsbGVlJCIsIl9jb250ZXh0Iiwic3RvcCIsInJlYWQiLCJ0MCIsInBlcmZvcm1UdXJuT2ZmIiwiX3R1cm5PZmYiLCJfY2FsbGVlMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsInR1cm5PZmYiLCJhbGwiLCJfcmVmMiIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkyIiwiX3JlZjMkIiwiY29ubmVjdGl2aXR5IiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJ0eXBlIiwiX3JlZjMkMiIsImJpdHNwZXJzYW1wbGUiLCJjaGFubmVsY291bnQiLCJpc0ZvcmJpZGRlblByb3BlcnR5TmFtZSIsIkNvbm5lY3Rpdml0eSIsIlVua25vd24iLCJzYW1wbGVyYXRlIiwiVHlwZSIsIkF1ZGlvSW5wdXRTdHJlYW0iLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImJ1bmRsZTovLy8iLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcGVlY2gvQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdWRpb0lucHV0U3RyZWFtIH0gZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsnO1xuXG5pbXBvcnQge1xuICBBdWRpb1NvdXJjZUVycm9yRXZlbnQsXG4gIEF1ZGlvU291cmNlRXZlbnQsXG4gIEF1ZGlvU291cmNlSW5pdGlhbGl6aW5nRXZlbnQsXG4gIEF1ZGlvU291cmNlT2ZmRXZlbnQsXG4gIEF1ZGlvU291cmNlUmVhZHlFdmVudCxcbiAgQXVkaW9TdHJlYW1Ob2RlQXR0YWNoZWRFdmVudCxcbiAgQXVkaW9TdHJlYW1Ob2RlQXR0YWNoaW5nRXZlbnQsXG4gIEF1ZGlvU3RyZWFtTm9kZURldGFjaGVkRXZlbnQsXG4gIEF1ZGlvU3RyZWFtTm9kZUVycm9yRXZlbnQsXG4gIEV2ZW50cyxcbiAgRXZlbnRTb3VyY2Vcbn0gZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsvZGlzdHJpYi9saWIvc3JjL2NvbW1vbi9FeHBvcnRzJztcblxuaW1wb3J0IHsgQXVkaW9TdHJlYW1Gb3JtYXRJbXBsIH0gZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsvZGlzdHJpYi9saWIvc3JjL3Nkay9BdWRpby9BdWRpb1N0cmVhbUZvcm1hdCc7XG5cbmltcG9ydCB7XG4gIGNvbm5lY3Rpdml0eSBhcyBDb25uZWN0aXZpdHksXG4gIElTcGVlY2hDb25maWdBdWRpb0RldmljZSxcbiAgdHlwZSBhcyBUeXBlXG59IGZyb20gJ21pY3Jvc29mdC1jb2duaXRpdmVzZXJ2aWNlcy1zcGVlY2gtc2RrL2Rpc3RyaWIvbGliL3NyYy9jb21tb24uc3BlZWNoL0V4cG9ydHMnO1xuXG5pbXBvcnQgeyBpc0ZvcmJpZGRlblByb3BlcnR5TmFtZSB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWNvcmUnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBjcmVhdGVEZWZlcnJlZCwgeyBEZWZlcnJlZFByb21pc2UgfSBmcm9tICdwLWRlZmVyLWVzNSc7XG5cbnR5cGUgQXVkaW9TdHJlYW1Ob2RlID0ge1xuICBkZXRhY2g6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGlkOiAoKSA9PiBzdHJpbmc7XG4gIHJlYWQ6ICgpID0+IFByb21pc2U8U3RyZWFtQ2h1bms8QXJyYXlCdWZmZXI+Pjtcbn07XG5cbnR5cGUgRGV2aWNlSW5mbyA9IHtcbiAgY29ubmVjdGl2aXR5PzogQ29ubmVjdGl2aXR5IHwgJ0JsdWV0b290aCcgfCAnV2lyZWQnIHwgJ1dpRmknIHwgJ0NlbGx1bGFyJyB8ICdJbkJ1aWx0JyB8ICdVbmtub3duJztcbiAgbWFudWZhY3R1cmVyPzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCBUeXBlXG4gICAgfCAnUGhvbmUnXG4gICAgfCAnU3BlYWtlcidcbiAgICB8ICdDYXInXG4gICAgfCAnSGVhZHNldCdcbiAgICB8ICdUaGVybW9zdGF0J1xuICAgIHwgJ01pY3JvcGhvbmVzJ1xuICAgIHwgJ0Rlc2twaG9uZSdcbiAgICB8ICdSZW1vdGVDb250cm9sJ1xuICAgIHwgJ1Vua25vd24nXG4gICAgfCAnRmlsZSdcbiAgICB8ICdTdHJlYW0nO1xufTtcblxudHlwZSBGb3JtYXQgPSB7XG4gIGJpdHNQZXJTYW1wbGU6IG51bWJlcjtcbiAgY2hhbm5lbHM6IG51bWJlcjtcbiAgc2FtcGxlc1BlclNlYzogbnVtYmVyO1xufTtcblxudHlwZSBOb3JtYWxpemVkT3B0aW9ucyA9IFJlcXVpcmVkPE9taXQ8T3B0aW9ucywgJ2RlYnVnJz4+ICYge1xuICBkZWJ1ZzogYm9vbGVhbjtcbn07XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgZGVidWc/OiB0cnVlO1xuICBpZD86IHN0cmluZztcbn07XG5cbnR5cGUgU3RyZWFtQ2h1bms8VD4gPSB7XG4gIGlzRW5kOiBib29sZWFuO1xuICBidWZmZXI6IFQ7XG4gIHRpbWVSZWNlaXZlZDogbnVtYmVyO1xufTtcblxuY29uc3QgU1lNQk9MX0RFVklDRV9JTkZPX0RFRkVSUkVEID0gU3ltYm9sKCdkZXZpY2VJbmZvRGVmZXJyZWQnKTtcbmNvbnN0IFNZTUJPTF9FVkVOVFMgPSBTeW1ib2woJ2V2ZW50cycpO1xuY29uc3QgU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRCA9IFN5bWJvbCgnZm9ybWF0RGVmZXJyZWQnKTtcbmNvbnN0IFNZTUJPTF9PUFRJT05TID0gU3ltYm9sKCdvcHRpb25zJyk7XG5cbi8vIFNwZWVjaCBTREsgcXVpcmtzOiBPbmx5IDIgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgdXNlZC5cbi8vICAgICAgICAgICAgICAgICAgICBUaGV5IGFyZTogYXR0YWNoKCkgYW5kIHR1cm5PZmYoKS5cbi8vICAgICAgICAgICAgICAgICAgICBPdGhlcnMgYXJlIG5vdCB1c2VkLCBpbmNsdWRpbmc6IGJsb2IoKSwgY2xvc2UoKSwgZGV0YWNoKCksIHR1cm5PbigpLlxuYWJzdHJhY3QgY2xhc3MgQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbSBleHRlbmRzIEF1ZGlvSW5wdXRTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnM6IE5vcm1hbGl6ZWRPcHRpb25zID0ge1xuICAgICAgZGVidWc6IG9wdGlvbnMuZGVidWcgfHwgZmFsc2UsXG4gICAgICBpZDogb3B0aW9ucy5pZCB8fCB2NCgpLnJlcGxhY2UoLy0vZ3UsICcnKVxuICAgIH07XG5cbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHRoaXNbU1lNQk9MX0RFVklDRV9JTkZPX0RFRkVSUkVEXSA9IGNyZWF0ZURlZmVycmVkPERldmljZUluZm8+KCk7XG5cbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHRoaXNbU1lNQk9MX0VWRU5UU10gPSBuZXcgRXZlbnRTb3VyY2U8QXVkaW9Tb3VyY2VFdmVudD4oKTtcblxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfRk9STUFUX0RFRkVSUkVEXSA9IGNyZWF0ZURlZmVycmVkPEF1ZGlvU3RyZWFtRm9ybWF0SW1wbD4oKTtcblxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfT1BUSU9OU10gPSBub3JtYWxpemVkT3B0aW9ucztcbiAgfVxuXG4gIFtTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRURdOiBEZWZlcnJlZFByb21pc2U8RGV2aWNlSW5mbz47XG4gIFtTWU1CT0xfRVZFTlRTXTogRXZlbnRTb3VyY2U8QXVkaW9Tb3VyY2VFdmVudD47XG4gIFtTWU1CT0xfRk9STUFUX0RFRkVSUkVEXTogRGVmZXJyZWRQcm9taXNlPEF1ZGlvU3RyZWFtRm9ybWF0SW1wbD47XG4gIFtTWU1CT0xfT1BUSU9OU106IE5vcm1hbGl6ZWRPcHRpb25zO1xuXG4gIC8qKiBHZXRzIHRoZSBldmVudCBzb3VyY2UgZm9yIGxpc3RlbmluZyB0byBldmVudHMuICovXG4gIC8vIEVTTGludDogVGhpcyBjb2RlIHdpbGwgb25seSB3b3JrcyBpbiBicm93c2VycyBvdGhlciB0aGFuIElFMTEuIE9ubHkgd29ya3MgaW4gRVM1IGlzIG9rYXkuXG4gIC8vIEB0cy1pZ25vcmUgQWNjZXNzb3JzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIHRhcmdldGluZyBFQ01BU2NyaXB0IDUgYW5kIGhpZ2hlci50cygxMDU2KVxuICBnZXQgZXZlbnRzKCk6IEV2ZW50U291cmNlPEF1ZGlvU291cmNlRXZlbnQ+IHtcbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHJldHVybiB0aGlzW1NZTUJPTF9FVkVOVFNdO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGZvcm1hdCBvZiB0aGUgYXVkaW8gc3RyZWFtLiAqL1xuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogYEF1ZGlvU3RyZWFtRm9ybWF0SW1wbGAgaXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gd2hpbGUgYEF1ZGlvU3RyZWFtRm9ybWF0YCBpcyBwdWJsaWMuXG4gIC8vICAgICAgICAgICAgICAgICAgICBJdCBpcyB3ZWlyZCB0byBleHBvc2UgYEF1ZGlvU3RyZWFtRm9ybWF0SW1wbGAgaW5zdGVhZCBvZiBgQXVkaW9TdHJlYW1Gb3JtYXRgLlxuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogSXQgaXMgd2VpcmQgdG8gcmV0dXJuIGEgYFByb21pc2VgIGluIGEgcHJvcGVydHkuXG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBJbiBub3JtYWwgc3BlZWNoIHJlY29nbml0aW9uLCBnZXR0ZXIgb2YgXCJmb3JtYXRcIiBpcyBjYWxsZWQgb25seSBhZnRlciBcImF0dGFjaFwiLlxuICAvLyAgICAgICAgICAgICAgICAgICAgQnV0IGluIERpcmVjdCBMaW5lIFNwZWVjaCwgaXQgaXMgY2FsbGVkIGJlZm9yZSBcImF0dGFjaFwiLlxuICAvLyBFU0xpbnQ6IFRoaXMgY29kZSB3aWxsIG9ubHkgd29ya3MgaW4gYnJvd3NlcnMgb3RoZXIgdGhhbiBJRTExLiBPbmx5IHdvcmtzIGluIEVTNSBpcyBva2F5LlxuICAvLyBAdHMtaWdub3JlIEFjY2Vzc29ycyBhcmUgb25seSBhdmFpbGFibGUgd2hlbiB0YXJnZXRpbmcgRUNNQVNjcmlwdCA1IGFuZCBoaWdoZXIudHMoMTA1NilcbiAgZ2V0IGZvcm1hdCgpOiBQcm9taXNlPEF1ZGlvU3RyZWFtRm9ybWF0SW1wbD4ge1xuICAgIHRoaXMuZGVidWcoJ0dldHRpbmcgXCJmb3JtYXRcIi4nKTtcblxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgcmV0dXJuIHRoaXNbU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRF0ucHJvbWlzZTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBJRCBvZiB0aGlzIGF1ZGlvIHN0cmVhbS4gKi9cbiAgaWQoKTogc3RyaW5nIHtcbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHJldHVybiB0aGlzW1NZTUJPTF9PUFRJT05TXS5pZDtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBldmVudC4gKi9cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IEluIEphdmFTY3JpcHQsIG9uWHh4IG1lYW5zIFwibGlzdGVuIHRvIGV2ZW50IFhYWFwiLlxuICAvLyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgaW4gU3BlZWNoIFNESywgaXQgbWVhbnMgXCJlbWl0IGV2ZW50IFhYWFwiLlxuICBwcm90ZWN0ZWQgb25FdmVudChldmVudDogQXVkaW9Tb3VyY2VFdmVudCk6IHZvaWQge1xuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfRVZFTlRTXS5vbkV2ZW50KGV2ZW50KTtcbiAgICBFdmVudHMuaW5zdGFuY2Uub25FdmVudChldmVudCk7XG4gIH1cblxuICAvKiogRW1pdHMgYW4gYEF1ZGlvU291cmNlSW5pdGlhbGl6aW5nRXZlbnRgLiAqL1xuICBwcm90ZWN0ZWQgZW1pdEluaXRpYWxpemluZygpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdFbWl0dGluZyBcIkF1ZGlvU291cmNlSW5pdGlhbGl6aW5nRXZlbnRcIi4nKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU291cmNlSW5pdGlhbGl6aW5nRXZlbnQodGhpcy5pZCgpKSk7XG4gIH1cblxuICAvKiogRW1pdHMgYW4gYEF1ZGlvU291cmNlUmVhZHlFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0UmVhZHkoKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZygnRW1pdHRpbmcgXCJBdWRpb1NvdXJjZVJlYWR5RXZlbnRcIi4nKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU291cmNlUmVhZHlFdmVudCh0aGlzLmlkKCkpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9Tb3VyY2VFcnJvckV2ZW50YC4gKi9cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IFNpbmNlIFwidHVybk9uXCIgaXMgbmV2ZXIgY2FsbGVkIGFuZCBcInR1cm5PZmZcIiBkb2VzIG5vdCB3b3JrIGluIERpcmVjdCBMaW5lIFNwZWVjaCwgdGhlIFwic291cmNlIGVycm9yXCIgZXZlbnQgaXMgbm90IGVtaXR0ZWQgYXQgYWxsLlxuICAvLyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgd2Ugb25seSBlbWl0IFwibm9kZSBlcnJvclwiIGV2ZW50LlxuICBwcm90ZWN0ZWQgZW1pdEVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoJ0VtaXR0aW5nIFwiQXVkaW9Tb3VyY2VFcnJvckV2ZW50XCIuJywgeyBlcnJvciB9KTtcblxuICAgIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBcImVycm9yXCIgaXMgYSBzdHJpbmcsIGluc3RlYWQgb2Ygb2JqZWN0IG9mIHR5cGUgXCJFcnJvclwiLlxuICAgIHRoaXMub25FdmVudChuZXcgQXVkaW9Tb3VyY2VFcnJvckV2ZW50KHRoaXMuaWQoKSwgZXJyb3IubWVzc2FnZSkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1N0cmVhbU5vZGVBdHRhY2hpbmdFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0Tm9kZUF0dGFjaGluZyhhdWRpb05vZGVJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZyhgRW1pdHRpbmcgXCJBdWRpb1N0cmVhbU5vZGVBdHRhY2hpbmdFdmVudFwiIGZvciBub2RlIFwiJHthdWRpb05vZGVJZH1cIi5gKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU3RyZWFtTm9kZUF0dGFjaGluZ0V2ZW50KHRoaXMuaWQoKSwgYXVkaW9Ob2RlSWQpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9TdHJlYW1Ob2RlQXR0YWNoZWRFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0Tm9kZUF0dGFjaGVkKGF1ZGlvTm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKGBFbWl0dGluZyBcIkF1ZGlvU3RyZWFtTm9kZUF0dGFjaGVkRXZlbnRcIiBmb3Igbm9kZSBcIiR7YXVkaW9Ob2RlSWR9XCIuYCk7XG4gICAgdGhpcy5vbkV2ZW50KG5ldyBBdWRpb1N0cmVhbU5vZGVBdHRhY2hlZEV2ZW50KHRoaXMuaWQoKSwgYXVkaW9Ob2RlSWQpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9TdHJlYW1Ob2RlRXJyb3JFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0Tm9kZUVycm9yKGF1ZGlvTm9kZUlkOiBzdHJpbmcsIGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoYEVtaXR0aW5nIFwiQXVkaW9TdHJlYW1Ob2RlRXJyb3JFdmVudFwiIGZvciBub2RlIFwiJHthdWRpb05vZGVJZH1cIi5gLCB7IGVycm9yIH0pO1xuXG4gICAgLy8gU3BlZWNoIFNESyBxdWlya3M6IFwiZXJyb3JcIiBpcyBhIHN0cmluZywgaW5zdGVhZCBvZiBvYmplY3Qgb2YgdHlwZSBcIkVycm9yXCIuXG4gICAgdGhpcy5vbkV2ZW50KG5ldyBBdWRpb1N0cmVhbU5vZGVFcnJvckV2ZW50KHRoaXMuaWQoKSwgYXVkaW9Ob2RlSWQsIGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9TdHJlYW1Ob2RlRGV0YWNoZWRFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0Tm9kZURldGFjaGVkKGF1ZGlvTm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdFbWl0dGluZyBcIkF1ZGlvU3RyZWFtTm9kZURldGFjaGVkRXZlbnRcIi4nKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU3RyZWFtTm9kZURldGFjaGVkRXZlbnQodGhpcy5pZCgpLCBhdWRpb05vZGVJZCkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1NvdXJjZU9mZkV2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXRPZmYoKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZygnRW1pdHRpbmcgXCJBdWRpb1NvdXJjZU9mZkV2ZW50XCIuJyk7XG4gICAgdGhpcy5vbkV2ZW50KG5ldyBBdWRpb1NvdXJjZU9mZkV2ZW50KHRoaXMuaWQoKSkpO1xuICB9XG5cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IEFsdGhvdWdoIFwiY2xvc2VcIiBpcyBtYXJrZWQgYXMgYWJzdHJhY3QsIGl0IGlzIG5ldmVyIGNhbGxlZCBpbiBvdXIgb2JzZXJ2YXRpb25zLlxuICAvLyBFU0xpbnQ6IFNwZWVjaCBTREsgcmVxdWlyZXMgdGhpcyBmdW5jdGlvbiwgYnV0IHdlIGFyZSBub3QgaW1wbGVtZW50aW5nIGl0LlxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdDYWxsYmFjayBmb3IgXCJjbG9zZVwiLicpO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBBbHRob3VnaCBcInR1cm5PblwiIGlzIGltcGxlbWVudGVkIGluIFNwZWVjaCBTREsgUHVzaC9QdWxsQXVkaW9JbnB1dFN0cmVhbSwgaXQgaXMgbmV2ZXIgY2FsbGVkIGluIG91ciBvYnNlcnZhdGlvbnMuXG4gIHR1cm5PbigpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdDYWxsYmFjayBmb3IgXCJ0dXJuT25cIi4nKTtcblxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogQWx0aG91Z2ggXCJkZXRhY2hcIiBpcyBpbXBsZW1lbnRlZCBpbiBTcGVlY2ggU0RLIFB1c2gvUHVsbEF1ZGlvSW5wdXRTdHJlYW0sIGl0IGlzIG5ldmVyIGNhbGxlZCBpbiBvdXIgb2JzZXJ2YXRpb25zLlxuICBkZXRhY2goKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZygnQ2FsbGJhY2sgZm9yIFwiZGV0YWNoXCIuJyk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIExvZyB0aGUgbWVzc2FnZSB0byBjb25zb2xlIGlmIGBkZWJ1Z2AgaXMgc2V0IHRvIGB0cnVlYC4gKi9cbiAgcHJpdmF0ZSBkZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzKSB7XG4gICAgLy8gRVNMaW50OiBGb3IgZGVidWdnaW5nLCB3aWxsIG9ubHkgbG9nIHdoZW4gXCJkZWJ1Z1wiIGlzIHNldCB0byBcInRydWVcIi5cbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlLCBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHRoaXNbU1lNQk9MX09QVElPTlNdLmRlYnVnICYmIGNvbnNvbGUuaW5mbyhgQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbTogJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqIEltcGxlbWVudHMgdGhpcyBmdW5jdGlvbi4gV2hlbiBjYWxsZWQsIGl0IHNob3VsZCBzdGFydCByZWNvcmRpbmcgYW5kIHJldHVybiBhbiBgSUF1ZGlvU3RyZWFtTm9kZWAuICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwZXJmb3JtQXR0YWNoKGF1ZGlvTm9kZUlkOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgICBhdWRpb1N0cmVhbU5vZGU6IEF1ZGlvU3RyZWFtTm9kZTtcbiAgICBkZXZpY2VJbmZvOiBEZXZpY2VJbmZvO1xuICAgIGZvcm1hdDogRm9ybWF0O1xuICB9PjtcblxuICAvKiogQXR0YWNoZXMgdGhlIGRldmljZSBieSByZXR1cm5pbmcgYW4gYXVkaW8gbm9kZS4gKi9cbiAgYXR0YWNoKGF1ZGlvTm9kZUlkOiBzdHJpbmcpOiBQcm9taXNlPEF1ZGlvU3RyZWFtTm9kZT4ge1xuICAgIHRoaXMuZGVidWcoYENhbGxiYWNrIGZvciBcImF0dGFjaFwiIHdpdGggXCIke2F1ZGlvTm9kZUlkfVwiLmApO1xuXG4gICAgdGhpcy5lbWl0Tm9kZUF0dGFjaGluZyhhdWRpb05vZGVJZCk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbjxBdWRpb1N0cmVhbU5vZGU+KGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMuZW1pdEluaXRpYWxpemluZygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGF1ZGlvU3RyZWFtTm9kZSwgZGV2aWNlSW5mbywgZm9ybWF0IH0gPSBhd2FpdCB0aGlzLnBlcmZvcm1BdHRhY2goYXVkaW9Ob2RlSWQpO1xuXG4gICAgICAgIC8vIEFsdGhvdWdoIG9ubHkgZ2V0dGVyIG9mIFwiZm9ybWF0XCIgaXMgY2FsbGVkIGJlZm9yZSBcImF0dGFjaFwiIChpbiBEaXJlY3QgTGluZSBTcGVlY2gpLFxuICAgICAgICAvLyB3ZSBhcmUgaGFuZGxpbmcgYm90aCBcImRldmljZUluZm9cIiBhbmQgXCJmb3JtYXRcIiBpbiBzaW1pbGFyIHdheSBmb3IgdW5pZm9ybWl0eS5cblxuICAgICAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgdGhpc1tTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRURdLnJlc29sdmUoZGV2aWNlSW5mbyk7XG5cbiAgICAgICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgIHRoaXNbU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRF0ucmVzb2x2ZShcbiAgICAgICAgICBuZXcgQXVkaW9TdHJlYW1Gb3JtYXRJbXBsKGZvcm1hdC5zYW1wbGVzUGVyU2VjLCBmb3JtYXQuYml0c1BlclNhbXBsZSwgZm9ybWF0LmNoYW5uZWxzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZW1pdFJlYWR5KCk7XG4gICAgICAgIHRoaXMuZW1pdE5vZGVBdHRhY2hlZChhdWRpb05vZGVJZCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZXRhY2g6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYERldGFjaGluZyBhdWRpbyBub2RlIFwiJHthdWRpb05vZGVJZH1cIi5gKTtcblxuICAgICAgICAgICAgYXdhaXQgYXVkaW9TdHJlYW1Ob2RlLmRldGFjaCgpO1xuXG4gICAgICAgICAgICAvLyBTcGVlY2ggU0RLIHF1aXJrczogU2luY2UgXCJ0dXJuT2ZmXCIgaXMgbm90IGNhbGxlZCBpbiBEaXJlY3QgTGluZSBTcGVlY2gsIHdlIHdpbGwgZW1pdCBldmVudCBcInNvdXJjZSBvZmZcIiBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgICB0aGlzLmVtaXRPZmYoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdE5vZGVEZXRhY2hlZChhdWRpb05vZGVJZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpZDogKCkgPT4gYXVkaW9TdHJlYW1Ob2RlLmlkKCksXG4gICAgICAgICAgcmVhZDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnUmVhZGluZycpO1xuXG4gICAgICAgICAgICByZXR1cm4gYXVkaW9TdHJlYW1Ob2RlLnJlYWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtaXROb2RlRXJyb3IoYXVkaW9Ob2RlSWQsIGVycm9yKTtcblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRzIHRoaXMgZnVuY3Rpb24uIFdoZW4gY2FsbGVkLCBpdCBzaG91bGQgc3RvcCByZWNvcmRpbmcuIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgYElBdWRpb1N0cmVhbU5vZGUuZGV0YWNoYCBmdW5jdGlvbi5cbiAgICpcbiAgICogTm90ZTogd2hlbiB1c2luZyB3aXRoIERpcmVjdCBMaW5lIFNwZWVjaCwgdGhpcyBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQuXG4gICAqL1xuXG4gIC8vIEVTTGludDogV2UgYXJlIG5vdCBpbXBsZW1lbnRpbmcgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGl0IGlzIG5vdCBjYWxsZWQgYnkgRGlyZWN0IExpbmUgU3BlZWNoLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBwcm90ZWN0ZWQgcGVyZm9ybVR1cm5PZmYoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRVNMaW50OiBcInJldHVyblwiIGlzIHJlcXVpcmVkIGJ5IFR5cGVTY3JpcHRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1yZXR1cm5cbiAgICByZXR1cm47XG4gIH1cblxuICAvKiogVHVybiBvZmYgdGhlIGF1ZGlvIGRldmljZS4gVGhpcyBpcyBjYWxsZWQgYmVmb3JlIGRldGFjaGluZyBmcm9tIHRoZSBncmFwaC4gKi9cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IEl0IGlzIGNvbmZ1c2VkIHRvIGhhdmUgYm90aCBcInR1cm5PZmZcIiBhbmQgXCJkZXRhY2hcIi4gXCJ0dXJuT2ZmXCIgaXMgY2FsbGVkIGJlZm9yZSBcImRldGFjaFwiLlxuICAvLyAgICAgICAgICAgICAgICAgICAgV2h5IGRvbid0IHdlIHB1dCBhbGwgbG9naWNzIGF0IFwiZGV0YWNoXCI/XG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBEaXJlY3QgTGluZSBTcGVlY2ggbmV2ZXIgY2FsbCBcInR1cm5PZmZcIi4gXCJTb3VyY2Ugb2ZmXCIgZXZlbnQgbmVlZCB0byBiZSBlbWl0dGVkIGR1cmluZyBcImRldGFjaFwiIGluc3RlYWQuXG4gIC8vICAgICAgICAgICAgICAgICAgICBBbHNvLCBjdXN0b20gaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIGRvbmUgYXQgXCJkZXRhY2hcIiBpbnN0ZWFkLCBzdWNoIGFzIGVuZGluZyBhbmQgY2xvc2luZyBvdXRwdXQgc3RyZWFtcy5cbiAgYXN5bmMgdHVybk9mZigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRlYnVnKGBDYWxsYmFjayBmb3IgXCJ0dXJuT2ZmXCIuYCk7XG5cbiAgICBhd2FpdCB0aGlzLnBlcmZvcm1UdXJuT2ZmKCk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgZGV2aWNlIGluZm9ybWF0aW9uLiAqL1xuICAvLyBFU0xpbnQ6IFRoaXMgY29kZSB3aWxsIG9ubHkgd29ya3MgaW4gYnJvd3NlcnMgb3RoZXIgdGhhbiBJRTExLiBPbmx5IHdvcmtzIGluIEVTNSBpcyBva2F5LlxuICAvLyBAdHMtaWdub3JlIEFjY2Vzc29ycyBhcmUgb25seSBhdmFpbGFibGUgd2hlbiB0YXJnZXRpbmcgRUNNQVNjcmlwdCA1IGFuZCBoaWdoZXIudHMoMTA1NilcbiAgZ2V0IGRldmljZUluZm8oKTogUHJvbWlzZTxJU3BlZWNoQ29uZmlnQXVkaW9EZXZpY2U+IHtcbiAgICB0aGlzLmRlYnVnKGBHZXR0aW5nIFwiZGV2aWNlSW5mb1wiLmApO1xuXG4gICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXNbU1lNQk9MX0RFVklDRV9JTkZPX0RFRkVSUkVEXS5wcm9taXNlLCB0aGlzW1NZTUJPTF9GT1JNQVRfREVGRVJSRURdLnByb21pc2VdKS50aGVuKFxuICAgICAgKFt7IGNvbm5lY3Rpdml0eSwgbWFudWZhY3R1cmVyLCBtb2RlbCwgdHlwZSB9LCB7IGJpdHNQZXJTYW1wbGUsIGNoYW5uZWxzLCBzYW1wbGVzUGVyU2VjIH1dKSA9PiAoe1xuICAgICAgICBiaXRzcGVyc2FtcGxlOiBiaXRzUGVyU2FtcGxlLFxuICAgICAgICBjaGFubmVsY291bnQ6IGNoYW5uZWxzLFxuICAgICAgICBjb25uZWN0aXZpdHk6XG4gICAgICAgICAgdHlwZW9mIGNvbm5lY3Rpdml0eSA9PT0gJ3N0cmluZycgJiYgIWlzRm9yYmlkZGVuUHJvcGVydHlOYW1lKGNvbm5lY3Rpdml0eSlcbiAgICAgICAgICAgID8gLy8gTWl0aWdhdGVkIHRocm91Z2ggZGVueWxpc3RpbmcuXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgICAgICBDb25uZWN0aXZpdHlbY29ubmVjdGl2aXR5XVxuICAgICAgICAgICAgOiBjb25uZWN0aXZpdHkgfHwgQ29ubmVjdGl2aXR5LlVua25vd24sXG4gICAgICAgIG1hbnVmYWN0dXJlcjogbWFudWZhY3R1cmVyIHx8ICcnLFxuICAgICAgICBtb2RlbDogbW9kZWwgfHwgJycsXG4gICAgICAgIHNhbXBsZXJhdGU6IHNhbXBsZXNQZXJTZWMsXG4gICAgICAgIC8vIE1pdGlnYXRlZCB0aHJvdWdoIGRlbnlsaXN0aW5nLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgdHlwZTogdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnICYmICFpc0ZvcmJpZGRlblByb3BlcnR5TmFtZSh0eXBlKSA/IFR5cGVbdHlwZV0gOiB0eXBlIHx8IFR5cGUuVW5rbm93blxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEN1c3RvbUF1ZGlvSW5wdXRTdHJlYW07XG5cbmV4cG9ydCB0eXBlIHsgQXVkaW9TdHJlYW1Ob2RlLCBEZXZpY2VJbmZvLCBGb3JtYXQsIE9wdGlvbnMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxvQ0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBY0EsSUFBQUUsa0JBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQU1BLElBQUFJLHdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxTQUFBLEdBQUFDLHNCQUFBLENBQUFQLE9BQUE7QUFBOEQsU0FBQVEsYUFBQUMsT0FBQSxRQUFBQyx5QkFBQSxHQUFBQyx5QkFBQSxvQkFBQUMscUJBQUEsUUFBQUMsS0FBQSxPQUFBQyxnQkFBQSxDQUFBQyxPQUFBLEVBQUFOLE9BQUEsR0FBQU8sTUFBQSxNQUFBTix5QkFBQSxRQUFBTyxTQUFBLE9BQUFILGdCQUFBLENBQUFDLE9BQUEsUUFBQUcsV0FBQSxFQUFBRixNQUFBLEdBQUFHLE9BQUEsQ0FBQUMsU0FBQSxDQUFBUCxLQUFBLEVBQUFRLFNBQUEsRUFBQUosU0FBQSxZQUFBRCxNQUFBLEdBQUFILEtBQUEsQ0FBQVMsS0FBQSxPQUFBRCxTQUFBLGdCQUFBRSwyQkFBQSxDQUFBUixPQUFBLFFBQUFDLE1BQUE7QUFBQSxTQUFBTCwwQkFBQSxlQUFBUSxPQUFBLHFCQUFBQSxPQUFBLENBQUFDLFNBQUEsb0JBQUFELE9BQUEsQ0FBQUMsU0FBQSxDQUFBSSxJQUFBLDJCQUFBQyxLQUFBLG9DQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FBQSxDQUFBQyxJQUFBLENBQUFWLE9BQUEsQ0FBQUMsU0FBQSxD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
|
|
@@ -4,11 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = bytesPerSample;
|
|
7
|
-
|
|
8
7
|
function bytesPerSample(settings) {
|
|
9
8
|
// `channelCount` is not on @types/web@0.0.54 yet, related to https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/1290.
|
|
10
9
|
// @ts-ignore
|
|
11
10
|
// eslint-disable-next-line no-magic-numbers
|
|
12
11
|
return (settings.sampleSize >> 3) * settings.channelCount * settings.sampleRate;
|
|
13
12
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJieXRlc1BlclNhbXBsZSIsInNldHRpbmdzIiwic2FtcGxlU2l6ZSIsImNoYW5uZWxDb3VudCIsInNhbXBsZVJhdGUiXSwic291cmNlUm9vdCI6ImJ1bmRsZTovLy8iLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcGVlY2gvYnl0ZXNQZXJTYW1wbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnl0ZXNQZXJTYW1wbGUoc2V0dGluZ3M6IE1lZGlhVHJhY2tTZXR0aW5ncykge1xuICAvLyBgY2hhbm5lbENvdW50YCBpcyBub3Qgb24gQHR5cGVzL3dlYkAwLjAuNTQgeWV0LCByZWxhdGVkIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC1ET00tbGliLWdlbmVyYXRvci9pc3N1ZXMvMTI5MC5cbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICByZXR1cm4gKChzZXR0aW5ncy5zYW1wbGVTaXplIGFzIG51bWJlcikgPj4gMykgKiAoc2V0dGluZ3MuY2hhbm5lbENvdW50IGFzIG51bWJlcikgKiAoc2V0dGluZ3Muc2FtcGxlUmF0ZSBhcyBudW1iZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBZSxTQUFTQSxjQUFjQSxDQUFDQyxRQUE0QixFQUFFO0VBQ25FO0VBQ0E7RUFDQTtFQUNBLE9BQU8sQ0FBRUEsUUFBUSxDQUFDQyxVQUFVLElBQWUsQ0FBQyxJQUFLRCxRQUFRLENBQUNFLFlBQXVCLEdBQUlGLFFBQVEsQ0FBQ0csVUFBcUI7QUFDckgifQ==
|