@angular/core 8.0.3 → 8.1.0-beta.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/bundles/core-testing.umd.js +35 -9
- package/bundles/core-testing.umd.js.map +1 -1
- package/bundles/core-testing.umd.min.js +10 -10
- package/bundles/core-testing.umd.min.js.map +1 -1
- package/bundles/core.umd.js +11379 -9387
- package/bundles/core.umd.js.map +1 -1
- package/bundles/core.umd.min.js +205 -135
- package/bundles/core.umd.min.js.map +1 -1
- package/core.d.ts +1286 -406
- package/core.metadata.json +1 -1
- package/esm2015/core.js +2 -3
- package/esm2015/index.js +2 -2
- package/esm2015/public_api.js +2 -2
- package/esm2015/src/application_ref.js +7 -1
- package/esm2015/src/codegen_private_exports.js +2 -2
- package/esm2015/src/compiler/compiler_facade_interface.js +1 -1
- package/esm2015/src/core.js +4 -4
- package/esm2015/src/core_private_export.js +3 -1
- package/esm2015/src/core_render3_private_export.js +5 -3
- package/esm2015/src/debug/debug_node.js +4 -4
- package/esm2015/src/di/index.js +3 -3
- package/esm2015/src/di/injectable.js +1 -1
- package/esm2015/src/di/injector.js +24 -96
- package/esm2015/src/di/injector_compatibility.js +103 -6
- package/esm2015/src/di/interface/defs.js +24 -3
- package/esm2015/src/di/interface/provider.js +1 -1
- package/esm2015/src/di/r3_injector.js +82 -49
- package/esm2015/src/di/reflective_injector.js +3 -2
- package/esm2015/src/di.js +1 -1
- package/esm2015/src/i18n/locale_data.js +61 -0
- package/esm2015/src/i18n/locale_data_api.js +53 -0
- package/esm2015/src/i18n/locale_en.js +51 -0
- package/esm2015/src/i18n/localization.js +37 -0
- package/esm2015/src/linker/ng_module_factory_loader.js +4 -52
- package/esm2015/src/linker/ng_module_factory_registration.js +83 -0
- package/esm2015/src/metadata/directives.js +2 -2
- package/esm2015/src/metadata/ng_module.js +6 -1
- package/esm2015/src/metadata/resource_loading.js +2 -2
- package/esm2015/src/reflection/reflection_capabilities.js +14 -3
- package/esm2015/src/render3/assert.js +3 -2
- package/esm2015/src/render3/component.js +11 -5
- package/esm2015/src/render3/component_ref.js +4 -2
- package/esm2015/src/render3/debug.js +23 -15
- package/esm2015/src/render3/definition.js +12 -2
- package/esm2015/src/render3/errors.js +29 -1
- package/esm2015/src/render3/features/inherit_definition_feature.js +51 -37
- package/esm2015/src/render3/fields.js +3 -1
- package/esm2015/src/render3/i18n.js +76 -465
- package/esm2015/src/render3/index.js +3 -3
- package/esm2015/src/render3/instructions/all.js +10 -5
- package/esm2015/src/render3/instructions/attribute.js +28 -0
- package/esm2015/src/render3/instructions/attribute_interpolation.js +376 -0
- package/esm2015/src/render3/instructions/container.js +17 -16
- package/esm2015/src/render3/instructions/element.js +57 -35
- package/esm2015/src/render3/instructions/element_container.js +9 -8
- package/esm2015/src/render3/instructions/embedded_view.js +9 -12
- package/esm2015/src/render3/instructions/interpolation.js +375 -0
- package/esm2015/src/render3/instructions/listener.js +3 -2
- package/esm2015/src/render3/instructions/projection.js +18 -57
- package/esm2015/src/render3/instructions/property.js +10 -4
- package/esm2015/src/render3/instructions/property_interpolation.js +49 -382
- package/esm2015/src/render3/instructions/shared.js +82 -118
- package/esm2015/src/render3/instructions/styling.js +189 -236
- package/esm2015/src/render3/instructions/text.js +8 -7
- package/esm2015/src/render3/instructions/text_interpolation.js +357 -0
- package/esm2015/src/render3/interfaces/container.js +9 -5
- package/esm2015/src/render3/interfaces/definition.js +12 -6
- package/esm2015/src/render3/interfaces/node.js +20 -8
- package/esm2015/src/render3/interfaces/projection.js +1 -1
- package/esm2015/src/render3/interfaces/styling.js +16 -15
- package/esm2015/src/render3/interfaces/view.js +2 -2
- package/esm2015/src/render3/jit/directive.js +14 -5
- package/esm2015/src/render3/jit/environment.js +30 -15
- package/esm2015/src/render3/jit/module.js +38 -19
- package/esm2015/src/render3/ng_module_ref.js +39 -3
- package/esm2015/src/render3/node_manipulation.js +45 -43
- package/esm2015/src/render3/node_selector_matcher.js +40 -14
- package/esm2015/src/render3/query.js +77 -61
- package/esm2015/src/render3/state.js +33 -6
- package/esm2015/src/render3/styling/class_and_style_bindings.js +92 -80
- package/esm2015/src/render3/styling/host_instructions_queue.js +8 -5
- package/esm2015/src/render3/styling/shared.js +2 -2
- package/esm2015/src/render3/styling/util.js +2 -2
- package/esm2015/src/render3/styling_next/bindings.js +602 -0
- package/esm2015/src/render3/styling_next/instructions.js +366 -0
- package/esm2015/src/render3/styling_next/interfaces.js +374 -0
- package/esm2015/src/render3/styling_next/map_based_bindings.js +408 -0
- package/esm2015/src/render3/styling_next/state.js +51 -0
- package/esm2015/src/render3/styling_next/styling_debug.js +291 -0
- package/esm2015/src/render3/styling_next/util.js +259 -0
- package/esm2015/src/render3/util/attrs_utils.js +4 -3
- package/esm2015/src/render3/util/debug_utils.js +18 -0
- package/esm2015/src/render3/util/view_traversal_utils.js +2 -2
- package/esm2015/src/render3/view_engine_compatibility.js +24 -10
- package/esm2015/src/sanitization/sanitization.js +17 -7
- package/esm2015/src/sanitization/style_sanitizer.js +11 -1
- package/esm2015/src/util/ng_dev_mode.js +7 -3
- package/esm2015/src/version.js +1 -1
- package/esm2015/src/view/ng_module.js +3 -3
- package/esm2015/src/view/util.js +2 -2
- package/esm2015/testing/src/r3_test_bed_compiler.js +44 -12
- package/esm2015/testing/src/test_bed_common.js +2 -5
- package/esm5/core.js +2 -3
- package/esm5/src/application_ref.js +6 -1
- package/esm5/src/codegen_private_exports.js +2 -2
- package/esm5/src/compiler/compiler_facade_interface.js +1 -1
- package/esm5/src/core_private_export.js +3 -1
- package/esm5/src/core_render3_private_export.js +5 -3
- package/esm5/src/debug/debug_node.js +4 -4
- package/esm5/src/di/index.js +3 -3
- package/esm5/src/di/injectable.js +1 -1
- package/esm5/src/di/injector.js +14 -74
- package/esm5/src/di/injector_compatibility.js +77 -6
- package/esm5/src/di/interface/defs.js +24 -3
- package/esm5/src/di/interface/provider.js +1 -1
- package/esm5/src/di/r3_injector.js +60 -37
- package/esm5/src/di/reflective_injector.js +3 -2
- package/esm5/src/i18n/locale_data.js +38 -0
- package/esm5/src/i18n/locale_data_api.js +46 -0
- package/esm5/src/i18n/locale_en.js +39 -0
- package/esm5/src/i18n/localization.js +29 -0
- package/esm5/src/linker/ng_module_factory_loader.js +4 -32
- package/esm5/src/linker/ng_module_factory_registration.js +50 -0
- package/esm5/src/metadata/directives.js +2 -2
- package/esm5/src/metadata/ng_module.js +1 -1
- package/esm5/src/metadata/resource_loading.js +2 -2
- package/esm5/src/reflection/reflection_capabilities.js +14 -3
- package/esm5/src/render3/assert.js +2 -1
- package/esm5/src/render3/component.js +10 -4
- package/esm5/src/render3/component_ref.js +4 -2
- package/esm5/src/render3/debug.js +17 -10
- package/esm5/src/render3/definition.js +8 -2
- package/esm5/src/render3/errors.js +14 -1
- package/esm5/src/render3/features/inherit_definition_feature.js +41 -36
- package/esm5/src/render3/fields.js +2 -1
- package/esm5/src/render3/i18n.js +67 -437
- package/esm5/src/render3/index.js +3 -3
- package/esm5/src/render3/instructions/all.js +6 -1
- package/esm5/src/render3/instructions/attribute.js +22 -0
- package/esm5/src/render3/instructions/attribute_interpolation.js +346 -0
- package/esm5/src/render3/instructions/container.js +16 -15
- package/esm5/src/render3/instructions/element.js +43 -32
- package/esm5/src/render3/instructions/element_container.js +9 -8
- package/esm5/src/render3/instructions/embedded_view.js +8 -11
- package/esm5/src/render3/instructions/interpolation.js +243 -0
- package/esm5/src/render3/instructions/listener.js +3 -2
- package/esm5/src/render3/instructions/projection.js +19 -54
- package/esm5/src/render3/instructions/property.js +10 -4
- package/esm5/src/render3/instructions/property_interpolation.js +40 -254
- package/esm5/src/render3/instructions/shared.js +70 -105
- package/esm5/src/render3/instructions/styling.js +167 -209
- package/esm5/src/render3/instructions/text.js +8 -7
- package/esm5/src/render3/instructions/text_interpolation.js +264 -0
- package/esm5/src/render3/interfaces/container.js +8 -2
- package/esm5/src/render3/interfaces/definition.js +1 -1
- package/esm5/src/render3/interfaces/node.js +1 -8
- package/esm5/src/render3/interfaces/projection.js +1 -1
- package/esm5/src/render3/interfaces/styling.js +2 -2
- package/esm5/src/render3/interfaces/view.js +1 -1
- package/esm5/src/render3/jit/directive.js +12 -5
- package/esm5/src/render3/jit/environment.js +30 -15
- package/esm5/src/render3/jit/module.js +23 -18
- package/esm5/src/render3/ng_module_ref.js +37 -3
- package/esm5/src/render3/node_manipulation.js +39 -38
- package/esm5/src/render3/node_selector_matcher.js +36 -14
- package/esm5/src/render3/query.js +75 -53
- package/esm5/src/render3/state.js +29 -5
- package/esm5/src/render3/styling/class_and_style_bindings.js +80 -66
- package/esm5/src/render3/styling/host_instructions_queue.js +6 -3
- package/esm5/src/render3/styling/shared.js +2 -2
- package/esm5/src/render3/styling/util.js +2 -2
- package/esm5/src/render3/styling_next/bindings.js +446 -0
- package/esm5/src/render3/styling_next/instructions.js +277 -0
- package/esm5/src/render3/styling_next/interfaces.js +1 -0
- package/esm5/src/render3/styling_next/map_based_bindings.js +324 -0
- package/esm5/src/render3/styling_next/state.js +23 -0
- package/esm5/src/render3/styling_next/styling_debug.js +130 -0
- package/esm5/src/render3/styling_next/util.js +147 -0
- package/esm5/src/render3/util/attrs_utils.js +4 -3
- package/esm5/src/render3/util/debug_utils.js +11 -0
- package/esm5/src/render3/util/view_traversal_utils.js +2 -2
- package/esm5/src/render3/view_engine_compatibility.js +23 -10
- package/esm5/src/sanitization/sanitization.js +14 -6
- package/esm5/src/sanitization/style_sanitizer.js +1 -1
- package/esm5/src/util/ng_dev_mode.js +7 -3
- package/esm5/src/version.js +1 -1
- package/esm5/src/view/ng_module.js +3 -3
- package/esm5/src/view/util.js +2 -2
- package/esm5/testing/src/r3_test_bed_compiler.js +37 -11
- package/esm5/testing/src/test_bed_common.js +1 -1
- package/fesm2015/core.js +13604 -10868
- package/fesm2015/core.js.map +1 -1
- package/fesm2015/testing.js +43 -11
- package/fesm2015/testing.js.map +1 -1
- package/fesm5/core.js +11279 -9305
- package/fesm5/core.js.map +1 -1
- package/fesm5/testing.js +36 -10
- package/fesm5/testing.js.map +1 -1
- package/package.json +1 -1
- package/schematics/migrations/injectable-pipe/index.js +2 -5
- package/schematics/migrations/move-document/index.js +2 -5
- package/schematics/migrations/static-queries/index.js +2 -5
- package/schematics/migrations/template-var-assignment/index.js +2 -5
- package/src/r3_symbols.d.ts +24 -18
- package/testing/testing.d.ts +2 -5
- package/testing.d.ts +1 -1
|
@@ -2,13 +2,6 @@
|
|
|
2
2
|
* @fileoverview added by tsickle
|
|
3
3
|
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
4
|
*/
|
|
5
|
-
/**
|
|
6
|
-
* @license
|
|
7
|
-
* Copyright Google Inc. All Rights Reserved.
|
|
8
|
-
*
|
|
9
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
10
|
-
* found in the LICENSE file at https://angular.io/license
|
|
11
|
-
*/
|
|
12
5
|
/** @enum {number} */
|
|
13
6
|
const TNodeType = {
|
|
14
7
|
/**
|
|
@@ -160,6 +153,21 @@ const AttributeMarker = {
|
|
|
160
153
|
* ```
|
|
161
154
|
*/
|
|
162
155
|
ProjectAs: 5,
|
|
156
|
+
/**
|
|
157
|
+
* Signals that the following attribute will be translated by runtime i18n
|
|
158
|
+
*
|
|
159
|
+
* For example, given the following HTML:
|
|
160
|
+
*
|
|
161
|
+
* ```
|
|
162
|
+
* <div moo="car" foo="value" i18n-foo [bar]="binding" i18n-bar>
|
|
163
|
+
* ```
|
|
164
|
+
*
|
|
165
|
+
* the generated code is:
|
|
166
|
+
*
|
|
167
|
+
* ```
|
|
168
|
+
* var _c1 = ['moo', 'car', AttributeMarker.I18n, 'foo', 'bar'];
|
|
169
|
+
*/
|
|
170
|
+
I18n: 6,
|
|
163
171
|
};
|
|
164
172
|
export { AttributeMarker };
|
|
165
173
|
/**
|
|
@@ -418,6 +426,10 @@ if (false) {
|
|
|
418
426
|
* @type {?}
|
|
419
427
|
*/
|
|
420
428
|
TNode.prototype.onElementCreationFns;
|
|
429
|
+
/** @type {?} */
|
|
430
|
+
TNode.prototype.newStyles;
|
|
431
|
+
/** @type {?} */
|
|
432
|
+
TNode.prototype.newClasses;
|
|
421
433
|
}
|
|
422
434
|
/**
|
|
423
435
|
* Static data for an element
|
|
@@ -599,4 +611,4 @@ if (false) {
|
|
|
599
611
|
// failure based on types.
|
|
600
612
|
/** @type {?} */
|
|
601
613
|
export const unusedValueExportToPlacateAjd = 1;
|
|
602
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy9ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7SUFrQkU7O09BRUc7SUFDSCxZQUFhO0lBQ2I7O09BRUc7SUFDSCxhQUFjO0lBQ2Q7O09BRUc7SUFDSCxPQUFRO0lBQ1I7O09BRUc7SUFDSCxVQUFXO0lBQ1g7O09BRUc7SUFDSCxtQkFBb0I7SUFDcEI7O09BRUc7SUFDSCxlQUFnQjs7Ozs7SUFPaEIsaURBQWlEO0lBQ2pELGNBQXFCO0lBRXJCLHFEQUFxRDtJQUNyRCxjQUFxQjtJQUVyQix3RUFBd0U7SUFDeEUsa0JBQXlCO0lBRXpCLHlEQUF5RDtJQUN6RCxnQkFBdUI7SUFFdkIseURBQXlEO0lBQ3pELGlCQUF1Qjs7Ozs7SUFPdkIsNEZBQTRGO0lBQzVGLDhCQUE0RDtJQUU1RDswQkFDc0I7SUFDdEIsOEJBQStCO0lBQy9CLG1DQUFpRTs7Ozs7SUFPakU7Ozs7T0FJRztJQUNILGVBQWdCO0lBRWhCOzs7Ozs7Ozs7Ozs7Ozs7UUFlSTtJQUNKLFVBQVc7SUFFWDs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNILFNBQVU7SUFFVjs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILFdBQVk7SUFFWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNILFdBQVk7SUFFWjs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILFlBQWE7Ozs7Ozs7Ozs7Ozs7OztBQXNCZiwyQkE0T0M7Ozs7OztJQTFPQyxxQkFBZ0I7Ozs7Ozs7Ozs7SUFVaEIsc0JBQWM7Ozs7Ozs7Ozs7Ozs7OztJQWVkLDhCQUFzQjs7Ozs7SUFLdEIsK0JBQXVCOzs7OztJQUt2Qiw2QkFBcUI7Ozs7OztJQU1yQiwyQ0FBbUM7Ozs7OztJQU1uQyx5Q0FBaUM7Ozs7O0lBS2pDLHNCQUFrQjs7Ozs7Ozs7SUFTbEIsZ0NBQXNDOzs7OztJQUd0Qyx3QkFBcUI7Ozs7Ozs7Ozs7Ozs7Ozs7SUFnQnJCLHNCQUF3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQW1CeEIsMkJBQW1DOzs7OztJQUduQyw4QkFBK0M7Ozs7Ozs7O0lBUS9DLHVCQUF1Qzs7Ozs7Ozs7SUFRdkMsd0JBQXdDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBc0J4Qyx1QkFBMkI7Ozs7OztJQU0zQixxQkFBaUI7Ozs7Ozs7O0lBUWpCLCtCQUEyQjs7Ozs7Ozs7SUFRM0Isc0JBQWtCOzs7Ozs7Ozs7Ozs7Ozs7O0lBZ0JsQix1QkFBeUM7O0lBRXpDLGdDQUFxQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUF3Q3JDLDJCQUEwQzs7Ozs7Ozs7Ozs7OztJQWExQyxxQ0FBc0M7Ozs7OztBQUl4QyxrQ0FrQkM7Ozs7OztJQWhCQyw2QkFBYzs7SUFDZCw2QkFBd0Y7Ozs7Ozs7SUFNeEYsOEJBQWdEOztJQUNoRCw4QkFBYTs7Ozs7OztJQU9iLGtDQUFtQzs7Ozs7O0FBSXJDLCtCQVlDOzs7Ozs7SUFWQywwQkFBYzs7SUFDZCwwQkFBWTs7Ozs7OztJQU1aLDJCQUFnRDs7SUFDaEQsMkJBQWE7O0lBQ2IsK0JBQWlCOzs7Ozs7QUFJbkIsb0NBbUJDOzs7Ozs7Ozs7SUFaQywrQkFBYzs7SUFDZCwrQkFBWTs7Ozs7Ozs7SUFRWixnQ0FBZ0Q7O0lBQ2hELGdDQUEyQjs7SUFDM0Isb0NBQWlCOzs7Ozs7QUFJbkIsMkNBT0M7Ozs7OztJQUxDLHNDQUFjOztJQUNkLHNDQUF3Rjs7SUFDeEYsdUNBQWdEOztJQUNoRCx1Q0FBYTs7SUFDYiwyQ0FBaUI7Ozs7OztBQUluQix1Q0FZQzs7Ozs7O0lBVkMsa0NBQWM7O0lBQ2Qsa0NBQW1DOztJQUNuQyxtQ0FBZ0Q7O0lBQ2hELG1DQUFhOztJQUNiLHVDQUFpQjs7Ozs7O0lBS2pCLDRDQUE2Qjs7Ozs7O0FBSS9CLCtCQU9DOzs7Ozs7SUFMQywwQkFBYzs7SUFDZCwwQkFBd0Y7O0lBQ3hGLDJCQUE0Qjs7SUFDNUIsMkJBQWE7O0lBQ2IsK0JBQWlCOzs7Ozs7QUFJbkIscUNBYUM7Ozs7OztJQVhDLGdDQUFZOzs7Ozs7O0lBTVosaUNBQWdEOztJQUNoRCxpQ0FBYTs7Ozs7SUFHYixxQ0FBbUI7Ozs7O0FBK0RyQixNQUFNLE9BQU8sNkJBQTZCLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtDc3NTZWxlY3Rvcn0gZnJvbSAnLi9wcm9qZWN0aW9uJztcbmltcG9ydCB7Uk5vZGV9IGZyb20gJy4vcmVuZGVyZXInO1xuaW1wb3J0IHtTdHlsaW5nQ29udGV4dH0gZnJvbSAnLi9zdHlsaW5nJztcbmltcG9ydCB7TFZpZXcsIFRWaWV3fSBmcm9tICcuL3ZpZXcnO1xuXG5cbi8qKlxuICogVE5vZGVUeXBlIGNvcnJlc3BvbmRzIHRvIHRoZSB7QGxpbmsgVE5vZGV9IGB0eXBlYCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gVE5vZGVUeXBlIHtcbiAgLyoqXG4gICAqIFRoZSBUTm9kZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbiB7QGxpbmsgTENvbnRhaW5lcn0gZm9yIGVtYmVkZGVkIHZpZXdzLlxuICAgKi9cbiAgQ29udGFpbmVyID0gMCxcbiAgLyoqXG4gICAqIFRoZSBUTm9kZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbiBgPG5nLWNvbnRlbnQ+YCBwcm9qZWN0aW9uXG4gICAqL1xuICBQcm9qZWN0aW9uID0gMSxcbiAgLyoqXG4gICAqIFRoZSBUTm9kZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbiB7QGxpbmsgTFZpZXd9XG4gICAqL1xuICBWaWV3ID0gMixcbiAgLyoqXG4gICAqIFRoZSBUTm9kZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIERPTSBlbGVtZW50IGFrYSB7QGxpbmsgUk5vZGV9LlxuICAgKi9cbiAgRWxlbWVudCA9IDMsXG4gIC8qKlxuICAgKiBUaGUgVE5vZGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYW4gYDxuZy1jb250YWluZXI+YCBlbGVtZW50IHtAbGluayBSTm9kZX0uXG4gICAqL1xuICBFbGVtZW50Q29udGFpbmVyID0gNCxcbiAgLyoqXG4gICAqIFRoZSBUTm9kZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbiBJQ1UgY29tbWVudCB1c2VkIGluIGBpMThuYC5cbiAgICovXG4gIEljdUNvbnRhaW5lciA9IDUsXG59XG5cbi8qKlxuICogQ29ycmVzcG9uZHMgdG8gdGhlIFROb2RlLmZsYWdzIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZW51bSBUTm9kZUZsYWdzIHtcbiAgLyoqIFRoaXMgYml0IGlzIHNldCBpZiB0aGUgbm9kZSBpcyBhIGNvbXBvbmVudCAqL1xuICBpc0NvbXBvbmVudCA9IDBiMDAwMDEsXG5cbiAgLyoqIFRoaXMgYml0IGlzIHNldCBpZiB0aGUgbm9kZSBoYXMgYmVlbiBwcm9qZWN0ZWQgKi9cbiAgaXNQcm9qZWN0ZWQgPSAwYjAwMDEwLFxuXG4gIC8qKiBUaGlzIGJpdCBpcyBzZXQgaWYgYW55IGRpcmVjdGl2ZSBvbiB0aGlzIG5vZGUgaGFzIGNvbnRlbnQgcXVlcmllcyAqL1xuICBoYXNDb250ZW50UXVlcnkgPSAwYjAwMTAwLFxuXG4gIC8qKiBUaGlzIGJpdCBpcyBzZXQgaWYgdGhlIG5vZGUgaGFzIGFueSBcImNsYXNzXCIgaW5wdXRzICovXG4gIGhhc0NsYXNzSW5wdXQgPSAwYjAxMDAwLFxuXG4gIC8qKiBUaGlzIGJpdCBpcyBzZXQgaWYgdGhlIG5vZGUgaGFzIGFueSBcInN0eWxlXCIgaW5wdXRzICovXG4gIGhhc1N0eWxlSW5wdXQgPSAwYjEwMDAwLFxufVxuXG4vKipcbiAqIENvcnJlc3BvbmRzIHRvIHRoZSBUTm9kZS5wcm92aWRlckluZGV4ZXMgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFROb2RlUHJvdmlkZXJJbmRleGVzIHtcbiAgLyoqIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcHJvdmlkZXIgb24gdGhpcyBub2RlIGlzIGVuY29kZWQgb24gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgKi9cbiAgUHJvdmlkZXJzU3RhcnRJbmRleE1hc2sgPSAwYjAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExLFxuXG4gIC8qKiBUaGUgY291bnQgb2YgdmlldyBwcm92aWRlcnMgZnJvbSB0aGUgY29tcG9uZW50IG9uIHRoaXMgbm9kZSBpcyBlbmNvZGVkIG9uIHRoZSAxNiBtb3N0XG4gICAgIHNpZ25pZmljYW50IGJpdHMgKi9cbiAgQ3B0Vmlld1Byb3ZpZGVyc0NvdW50U2hpZnQgPSAxNixcbiAgQ3B0Vmlld1Byb3ZpZGVyc0NvdW50U2hpZnRlciA9IDBiMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAsXG59XG4vKipcbiAqIEEgc2V0IG9mIG1hcmtlciB2YWx1ZXMgdG8gYmUgdXNlZCBpbiB0aGUgYXR0cmlidXRlcyBhcnJheXMuIFRoZXNlIG1hcmtlcnMgaW5kaWNhdGUgdGhhdCBzb21lXG4gKiBpdGVtcyBhcmUgbm90IHJlZ3VsYXIgYXR0cmlidXRlcyBhbmQgdGhlIHByb2Nlc3Npbmcgc2hvdWxkIGJlIGFkYXB0ZWQgYWNjb3JkaW5nbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIEF0dHJpYnV0ZU1hcmtlciB7XG4gIC8qKlxuICAgKiBNYXJrZXIgaW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyAzIHZhbHVlcyBpbiB0aGUgYXR0cmlidXRlcyBhcnJheSBhcmU6XG4gICAqIG5hbWVzcGFjZVVyaSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWVcbiAgICogaW4gdGhhdCBvcmRlci5cbiAgICovXG4gIE5hbWVzcGFjZVVSSSA9IDAsXG5cbiAgLyoqXG4gICAgKiBTaWduYWxzIGNsYXNzIGRlY2xhcmF0aW9uLlxuICAgICpcbiAgICAqIEVhY2ggdmFsdWUgZm9sbG93aW5nIGBDbGFzc2VzYCBkZXNpZ25hdGVzIGEgY2xhc3MgbmFtZSB0byBpbmNsdWRlIG9uIHRoZSBlbGVtZW50LlxuICAgICogIyMgRXhhbXBsZTpcbiAgICAqXG4gICAgKiBHaXZlbjpcbiAgICAqIGBgYFxuICAgICogPGRpdiBjbGFzcz1cImZvbyBiYXIgYmF6XCI+Li4uPGQvdmk+XG4gICAgKiBgYGBcbiAgICAqXG4gICAgKiB0aGUgZ2VuZXJhdGVkIGNvZGUgaXM6XG4gICAgKiBgYGBcbiAgICAqIHZhciBfYzEgPSBbQXR0cmlidXRlTWFya2VyLkNsYXNzZXMsICdmb28nLCAnYmFyJywgJ2JheiddO1xuICAgICogYGBgXG4gICAgKi9cbiAgQ2xhc3NlcyA9IDEsXG5cbiAgLyoqXG4gICAqIFNpZ25hbHMgc3R5bGUgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIEVhY2ggcGFpciBvZiB2YWx1ZXMgZm9sbG93aW5nIGBTdHlsZXNgIGRlc2lnbmF0ZXMgYSBzdHlsZSBuYW1lIGFuZCB2YWx1ZSB0byBpbmNsdWRlIG9uIHRoZVxuICAgKiBlbGVtZW50LlxuICAgKiAjIyBFeGFtcGxlOlxuICAgKlxuICAgKiBHaXZlbjpcbiAgICogYGBgXG4gICAqIDxkaXYgc3R5bGU9XCJ3aWR0aDoxMDBweDsgaGVpZ2h0OjIwMHB4OyBjb2xvcjpyZWRcIj4uLi48L2Rpdj5cbiAgICogYGBgXG4gICAqXG4gICAqIHRoZSBnZW5lcmF0ZWQgY29kZSBpczpcbiAgICogYGBgXG4gICAqIHZhciBfYzEgPSBbQXR0cmlidXRlTWFya2VyLlN0eWxlcywgJ3dpZHRoJywgJzEwMHB4JywgJ2hlaWdodCcuICcyMDBweCcsICdjb2xvcicsICdyZWQnXTtcbiAgICogYGBgXG4gICAqL1xuICBTdHlsZXMgPSAyLFxuXG4gIC8qKlxuICAgKiBTaWduYWxzIHRoYXQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGUgbmFtZXMgd2VyZSBleHRyYWN0ZWQgZnJvbSBpbnB1dCBvciBvdXRwdXQgYmluZGluZ3MuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9sbG93aW5nIEhUTUw6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8ZGl2IG1vbz1cImNhclwiIFtmb29dPVwiZXhwXCIgKGJhcik9XCJkb1N0aCgpXCI+XG4gICAqIGBgYFxuICAgKlxuICAgKiB0aGUgZ2VuZXJhdGVkIGNvZGUgaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiB2YXIgX2MxID0gWydtb28nLCAnY2FyJywgQXR0cmlidXRlTWFya2VyLkJpbmRpbmdzLCAnZm9vJywgJ2JhciddO1xuICAgKiBgYGBcbiAgICovXG4gIEJpbmRpbmdzID0gMyxcblxuICAvKipcbiAgICogU2lnbmFscyB0aGF0IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlIG5hbWVzIHdlcmUgaG9pc3RlZCBmcm9tIGFuIGlubGluZS10ZW1wbGF0ZSBkZWNsYXJhdGlvbi5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGdpdmVuIHRoZSBmb2xsb3dpbmcgSFRNTDpcbiAgICpcbiAgICogYGBgXG4gICAqIDxkaXYgKm5nRm9yPVwibGV0IHZhbHVlIG9mIHZhbHVlczsgdHJhY2tCeTp0cmFja0J5XCIgZGlyQSBbZGlyQl09XCJ2YWx1ZVwiPlxuICAgKiBgYGBcbiAgICpcbiAgICogdGhlIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgYHRlbXBsYXRlKClgIGluc3RydWN0aW9uIHdvdWxkIGluY2x1ZGU6XG4gICAqXG4gICAqIGBgYFxuICAgKiBbJ2RpckEnLCAnJywgQXR0cmlidXRlTWFya2VyLkJpbmRpbmdzLCAnZGlyQicsIEF0dHJpYnV0ZU1hcmtlci5UZW1wbGF0ZSwgJ25nRm9yJywgJ25nRm9yT2YnLFxuICAgKiAnbmdGb3JUcmFja0J5JywgJ2xldC12YWx1ZSddXG4gICAqIGBgYFxuICAgKlxuICAgKiB3aGlsZSB0aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBgZWxlbWVudCgpYCBpbnN0cnVjdGlvbiBpbnNpZGUgdGhlIHRlbXBsYXRlIGZ1bmN0aW9uIHdvdWxkXG4gICAqIGluY2x1ZGU6XG4gICAqXG4gICAqIGBgYFxuICAgKiBbJ2RpckEnLCAnJywgQXR0cmlidXRlTWFya2VyLkJpbmRpbmdzLCAnZGlyQiddXG4gICAqIGBgYFxuICAgKi9cbiAgVGVtcGxhdGUgPSA0LFxuXG4gIC8qKlxuICAgKiBTaWduYWxzIHRoYXQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGUgaXMgYG5nUHJvamVjdEFzYCBhbmQgaXRzIHZhbHVlIGlzIGEgcGFyc2VkIGBDc3NTZWxlY3RvcmAuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9sbG93aW5nIEhUTUw6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8aDEgYXR0cj1cInZhbHVlXCIgbmdQcm9qZWN0QXM9XCJbdGl0bGVdXCI+XG4gICAqIGBgYFxuICAgKlxuICAgKiB0aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBgZWxlbWVudCgpYCBpbnN0cnVjdGlvbiB3b3VsZCBpbmNsdWRlOlxuICAgKlxuICAgKiBgYGBcbiAgICogWydhdHRyJywgJ3ZhbHVlJywgQXR0cmlidXRlTWFya2VyLlByb2plY3RBcywgWycnLCAndGl0bGUnLCAnJ11dXG4gICAqIGBgYFxuICAgKi9cbiAgUHJvamVjdEFzID0gNVxufVxuXG4vKipcbiAqIEEgY29tYmluYXRpb24gb2Y6XG4gKiAtIEF0dHJpYnV0ZSBuYW1lcyBhbmQgdmFsdWVzLlxuICogLSBTcGVjaWFsIG1hcmtlcnMgYWN0aW5nIGFzIGZsYWdzIHRvIGFsdGVyIGF0dHJpYnV0ZXMgcHJvY2Vzc2luZy5cbiAqIC0gUGFyc2VkIG5nUHJvamVjdEFzIHNlbGVjdG9ycy5cbiAqL1xuZXhwb3J0IHR5cGUgVEF0dHJpYnV0ZXMgPSAoc3RyaW5nIHwgQXR0cmlidXRlTWFya2VyIHwgQ3NzU2VsZWN0b3IpW107XG5cbi8qKlxuICogQmluZGluZyBkYXRhIChmbHl3ZWlnaHQpIGZvciBhIHBhcnRpY3VsYXIgbm9kZSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCB0ZW1wbGF0ZXNcbiAqIG9mIGEgc3BlY2lmaWMgdHlwZS5cbiAqXG4gKiBJZiBhIHByb3BlcnR5IGlzOlxuICogICAgLSBQcm9wZXJ0eUFsaWFzZXM6IHRoYXQgcHJvcGVydHkncyBkYXRhIHdhcyBnZW5lcmF0ZWQgYW5kIHRoaXMgaXMgaXRcbiAqICAgIC0gTnVsbDogdGhhdCBwcm9wZXJ0eSdzIGRhdGEgd2FzIGFscmVhZHkgZ2VuZXJhdGVkIGFuZCBub3RoaW5nIHdhcyBmb3VuZC5cbiAqICAgIC0gVW5kZWZpbmVkOiB0aGF0IHByb3BlcnR5J3MgZGF0YSBoYXMgbm90IHlldCBiZWVuIGdlbmVyYXRlZFxuICpcbiAqIHNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmx5d2VpZ2h0X3BhdHRlcm4gZm9yIG1vcmUgb24gdGhlIEZseXdlaWdodCBwYXR0ZXJuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVE5vZGUge1xuICAvKiogVGhlIHR5cGUgb2YgdGhlIFROb2RlLiBTZWUgVE5vZGVUeXBlLiAqL1xuICB0eXBlOiBUTm9kZVR5cGU7XG5cbiAgLyoqXG4gICAqIEluZGV4IG9mIHRoZSBUTm9kZSBpbiBUVmlldy5kYXRhIGFuZCBjb3JyZXNwb25kaW5nIG5hdGl2ZSBlbGVtZW50IGluIExWaWV3LlxuICAgKlxuICAgKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBnZXQgZnJvbSBhbnkgVE5vZGUgdG8gaXRzIGNvcnJlc3BvbmRpbmcgbmF0aXZlIGVsZW1lbnQgd2hlblxuICAgKiB0cmF2ZXJzaW5nIHRoZSBub2RlIHRyZWUuXG4gICAqXG4gICAqIElmIGluZGV4IGlzIC0xLCB0aGlzIGlzIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBjb250YWluZXIgbm9kZSBvciBlbWJlZGRlZCB2aWV3IG5vZGUuXG4gICAqL1xuICBpbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgaW5qZWN0b3IgaW4gdGhpcyBub2RlJ3MgTFZpZXcuXG4gICAqXG4gICAqIElmIHRoZSBpbmRleCA9PT0gLTEsIHRoZXJlIGlzIG5vIGluamVjdG9yIG9uIHRoaXMgbm9kZSBvciBhbnkgYW5jZXN0b3Igbm9kZSBpbiB0aGlzIHZpZXcuXG4gICAqXG4gICAqIElmIHRoZSBpbmRleCAhPT0gLTEsIGl0IGlzIHRoZSBpbmRleCBvZiB0aGlzIG5vZGUncyBpbmplY3RvciBPUiB0aGUgaW5kZXggb2YgYSBwYXJlbnQgaW5qZWN0b3JcbiAgICogaW4gdGhlIHNhbWUgdmlldy4gV2UgcGFzcyB0aGUgcGFyZW50IGluamVjdG9yIGluZGV4IGRvd24gdGhlIG5vZGUgdHJlZSBvZiBhIHZpZXcgc28gaXQnc1xuICAgKiBwb3NzaWJsZSB0byBmaW5kIHRoZSBwYXJlbnQgaW5qZWN0b3Igd2l0aG91dCB3YWxraW5nIGEgcG90ZW50aWFsbHkgZGVlcCBub2RlIHRyZWUuIEluamVjdG9yXG4gICAqIGluZGljZXMgYXJlIG5vdCBzZXQgYWNyb3NzIHZpZXcgYm91bmRhcmllcyBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGNvbXBvbmVudCBob3N0cy5cbiAgICpcbiAgICogSWYgdE5vZGUuaW5qZWN0b3JJbmRleCA9PT0gdE5vZGUucGFyZW50LmluamVjdG9ySW5kZXgsIHRoZW4gdGhlIGluZGV4IGJlbG9uZ3MgdG8gYSBwYXJlbnRcbiAgICogaW5qZWN0b3IuXG4gICAqL1xuICBpbmplY3RvckluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBzdGFydGluZyBpbmRleCBvZiB0aGUgZGlyZWN0aXZlcy5cbiAgICovXG4gIGRpcmVjdGl2ZVN0YXJ0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBmaW5hbCBleGNsdXNpdmUgaW5kZXggb2YgdGhlIGRpcmVjdGl2ZXMuXG4gICAqL1xuICBkaXJlY3RpdmVFbmQ6IG51bWJlcjtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBmaXJzdCBpbmRleCB3aGVyZSBwcm9wZXJ0eSBiaW5kaW5nIG1ldGFkYXRhIGlzIHN0b3JlZCBmb3JcbiAgICogdGhpcyBub2RlLlxuICAgKi9cbiAgcHJvcGVydHlNZXRhZGF0YVN0YXJ0SW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBleGNsdXNpdmUgZmluYWwgaW5kZXggd2hlcmUgcHJvcGVydHkgYmluZGluZyBtZXRhZGF0YSBpc1xuICAgKiBzdG9yZWQgZm9yIHRoaXMgbm9kZS5cbiAgICovXG4gIHByb3BlcnR5TWV0YWRhdGFFbmRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgaWYgTm9kZSBpc0NvbXBvbmVudCwgaXNQcm9qZWN0ZWQsIGhhc0NvbnRlbnRRdWVyeSwgaGFzQ2xhc3NJbnB1dCBhbmQgaGFzU3R5bGVJbnB1dFxuICAgKi9cbiAgZmxhZ3M6IFROb2RlRmxhZ3M7XG5cbiAgLyoqXG4gICAqIFRoaXMgbnVtYmVyIHN0b3JlcyB0d28gdmFsdWVzIHVzaW5nIGl0cyBiaXRzOlxuICAgKlxuICAgKiAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcHJvdmlkZXIgb24gdGhhdCBub2RlIChmaXJzdCAxNiBiaXRzKVxuICAgKiAtIHRoZSBjb3VudCBvZiB2aWV3IHByb3ZpZGVycyBmcm9tIHRoZSBjb21wb25lbnQgb24gdGhpcyBub2RlIChsYXN0IDE2IGJpdHMpXG4gICAqL1xuICAvLyBUT0RPKG1pc2tvKTogYnJlYWsgdGhpcyBpbnRvIGFjdHVhbCB2YXJzLlxuICBwcm92aWRlckluZGV4ZXM6IFROb2RlUHJvdmlkZXJJbmRleGVzO1xuXG4gIC8qKiBUaGUgdGFnIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4gKi9cbiAgdGFnTmFtZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGFuIGVsZW1lbnQuIFdlIG5lZWQgdG8gc3RvcmUgYXR0cmlidXRlcyB0byBzdXBwb3J0IHZhcmlvdXMgdXNlLWNhc2VzXG4gICAqIChhdHRyaWJ1dGUgaW5qZWN0aW9uLCBjb250ZW50IHByb2plY3Rpb24gd2l0aCBzZWxlY3RvcnMsIGRpcmVjdGl2ZXMgbWF0Y2hpbmcpLlxuICAgKiBBdHRyaWJ1dGVzIGFyZSBzdG9yZWQgc3RhdGljYWxseSBiZWNhdXNlIHJlYWRpbmcgdGhlbSBmcm9tIHRoZSBET00gd291bGQgYmUgd2F5IHRvbyBzbG93IGZvclxuICAgKiBjb250ZW50IHByb2plY3Rpb24gYW5kIHF1ZXJpZXMuXG4gICAqXG4gICAqIFNpbmNlIGF0dHJzIHdpbGwgYWx3YXlzIGJlIGNhbGN1bGF0ZWQgZmlyc3QsIHRoZXkgd2lsbCBuZXZlciBuZWVkIHRvIGJlIG1hcmtlZCB1bmRlZmluZWQgYnlcbiAgICogb3RoZXIgaW5zdHJ1Y3Rpb25zLlxuICAgKlxuICAgKiBGb3IgcmVndWxhciBhdHRyaWJ1dGVzIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUgYW5kIGl0cyB2YWx1ZSBhbHRlcm5hdGUgaW4gdGhlIGFycmF5LlxuICAgKiBlLmcuIFsncm9sZScsICdjaGVja2JveCddXG4gICAqIFRoaXMgYXJyYXkgY2FuIGNvbnRhaW4gZmxhZ3MgdGhhdCB3aWxsIGluZGljYXRlIFwic3BlY2lhbCBhdHRyaWJ1dGVzXCIgKGF0dHJpYnV0ZXMgd2l0aFxuICAgKiBuYW1lc3BhY2VzLCBhdHRyaWJ1dGVzIGV4dHJhY3RlZCBmcm9tIGJpbmRpbmdzIGFuZCBvdXRwdXRzKS5cbiAgICovXG4gIGF0dHJzOiBUQXR0cmlidXRlc3xudWxsO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBsb2NhbCBuYW1lcyB1bmRlciB3aGljaCBhIGdpdmVuIGVsZW1lbnQgaXMgZXhwb3J0ZWQgaW4gYSB0ZW1wbGF0ZSBhbmRcbiAgICogdmlzaWJsZSB0byBxdWVyaWVzLiBBbiBlbnRyeSBpbiB0aGlzIGFycmF5IGNhbiBiZSBjcmVhdGVkIGZvciBkaWZmZXJlbnQgcmVhc29uczpcbiAgICogLSBhbiBlbGVtZW50IGl0c2VsZiBpcyByZWZlcmVuY2VkLCBleC46IGA8ZGl2ICNmb28+YFxuICAgKiAtIGEgY29tcG9uZW50IGlzIHJlZmVyZW5jZWQsIGV4LjogYDxteS1jbXB0ICNmb28+YFxuICAgKiAtIGEgZGlyZWN0aXZlIGlzIHJlZmVyZW5jZWQsIGV4LjogYDxteS1jbXB0ICNmb289XCJkaXJlY3RpdmVFeHBvcnRBc1wiPmAuXG4gICAqXG4gICAqIEEgZ2l2ZW4gZWxlbWVudCBtaWdodCBoYXZlIGRpZmZlcmVudCBsb2NhbCBuYW1lcyBhbmQgdGhvc2UgbmFtZXMgY2FuIGJlIGFzc29jaWF0ZWRcbiAgICogd2l0aCBhIGRpcmVjdGl2ZS4gV2Ugc3RvcmUgbG9jYWwgbmFtZXMgYXQgZXZlbiBpbmRleGVzIHdoaWxlIG9kZCBpbmRleGVzIGFyZSByZXNlcnZlZFxuICAgKiBmb3IgZGlyZWN0aXZlIGluZGV4IGluIGEgdmlldyAob3IgYC0xYCBpZiB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIGRpcmVjdGl2ZSkuXG4gICAqXG4gICAqIFNvbWUgZXhhbXBsZXM6XG4gICAqIC0gYDxkaXYgI2Zvbz5gID0+IGBbXCJmb29cIiwgLTFdYFxuICAgKiAtIGA8bXktY21wdCAjZm9vPmAgPT4gYFtcImZvb1wiLCBteUNtcHRJZHhdYFxuICAgKiAtIGA8bXktY21wdCAjZm9vICNiYXI9XCJkaXJlY3RpdmVFeHBvcnRBc1wiPmAgPT4gYFtcImZvb1wiLCBteUNtcHRJZHgsIFwiYmFyXCIsIGRpcmVjdGl2ZUlkeF1gXG4gICAqIC0gYDxkaXYgI2ZvbyAjYmFyPVwiZGlyZWN0aXZlRXhwb3J0QXNcIj5gID0+IGBbXCJmb29cIiwgLTEsIFwiYmFyXCIsIGRpcmVjdGl2ZUlkeF1gXG4gICAqL1xuICBsb2NhbE5hbWVzOiAoc3RyaW5nfG51bWJlcilbXXxudWxsO1xuXG4gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCBpbnB1dCBwcm9wZXJ0aWVzIHRoYXQgbmVlZCB0byBiZSBzZXQgb25jZSBmcm9tIGF0dHJpYnV0ZSBkYXRhLiAqL1xuICBpbml0aWFsSW5wdXRzOiBJbml0aWFsSW5wdXREYXRhfG51bGx8dW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBkYXRhIGZvciBhbGwgZGlyZWN0aXZlcyBvbiB0aGlzIG5vZGUuXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgbWVhbnMgdGhhdCB0aGUgcHJvcCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LFxuICAgKiAtIGBudWxsYCBtZWFucyB0aGF0IHRoZSBwcm9wIGhhcyBiZWVuIGluaXRpYWxpemVkIGJ1dCBubyBpbnB1dHMgaGF2ZSBiZWVuIGZvdW5kLlxuICAgKi9cbiAgaW5wdXRzOiBQcm9wZXJ0eUFsaWFzZXN8bnVsbHx1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE91dHB1dCBkYXRhIGZvciBhbGwgZGlyZWN0aXZlcyBvbiB0aGlzIG5vZGUuXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgbWVhbnMgdGhhdCB0aGUgcHJvcCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LFxuICAgKiAtIGBudWxsYCBtZWFucyB0aGF0IHRoZSBwcm9wIGhhcyBiZWVuIGluaXRpYWxpemVkIGJ1dCBubyBvdXRwdXRzIGhhdmUgYmVlbiBmb3VuZC5cbiAgICovXG4gIG91dHB1dHM6IFByb3BlcnR5QWxpYXNlc3xudWxsfHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIFRWaWV3IG9yIFRWaWV3cyBhdHRhY2hlZCB0byB0aGlzIG5vZGUuXG4gICAqXG4gICAqIElmIHRoaXMgVE5vZGUgY29ycmVzcG9uZHMgdG8gYW4gTENvbnRhaW5lciB3aXRoIGlubGluZSB2aWV3cywgdGhlIGNvbnRhaW5lciB3aWxsXG4gICAqIG5lZWQgdG8gc3RvcmUgc2VwYXJhdGUgc3RhdGljIGRhdGEgZm9yIGVhY2ggb2YgaXRzIHZpZXcgYmxvY2tzIChUVmlld1tdKS4gT3RoZXJ3aXNlLFxuICAgKiBub2RlcyBpbiBpbmxpbmUgdmlld3Mgd2l0aCB0aGUgc2FtZSBpbmRleCBhcyBub2RlcyBpbiB0aGVpciBwYXJlbnQgdmlld3Mgd2lsbCBvdmVyd3JpdGVcbiAgICogZWFjaCBvdGhlciwgYXMgdGhleSBhcmUgaW4gdGhlIHNhbWUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEVhY2ggaW5kZXggaW4gdGhpcyBhcnJheSBjb3JyZXNwb25kcyB0byB0aGUgc3RhdGljIGRhdGEgZm9yIGEgY2VydGFpblxuICAgKiB2aWV3LiBTbyBpZiB5b3UgaGFkIFYoMCkgYW5kIFYoMSkgaW4gYSBjb250YWluZXIsIHlvdSBtaWdodCBoYXZlOlxuICAgKlxuICAgKiBbXG4gICAqICAgW3t0YWdOYW1lOiAnZGl2JywgYXR0cnM6IC4uLn0sIG51bGxdLCAgICAgLy8gVigwKSBUVmlld1xuICAgKiAgIFt7dGFnTmFtZTogJ2J1dHRvbicsIGF0dHJzIC4uLn0sIG51bGxdICAgIC8vIFYoMSkgVFZpZXdcbiAgICpcbiAgICogSWYgdGhpcyBUTm9kZSBjb3JyZXNwb25kcyB0byBhbiBMQ29udGFpbmVyIHdpdGggYSB0ZW1wbGF0ZSAoZS5nLiBzdHJ1Y3R1cmFsXG4gICAqIGRpcmVjdGl2ZSksIHRoZSB0ZW1wbGF0ZSdzIFRWaWV3IHdpbGwgYmUgc3RvcmVkIGhlcmUuXG4gICAqXG4gICAqIElmIHRoaXMgVE5vZGUgY29ycmVzcG9uZHMgdG8gYW4gZWxlbWVudCwgdFZpZXdzIHdpbGwgYmUgbnVsbCAuXG4gICAqL1xuICB0Vmlld3M6IFRWaWV3fFRWaWV3W118bnVsbDtcblxuICAvKipcbiAgICogVGhlIG5leHQgc2libGluZyBub2RlLiBOZWNlc3Nhcnkgc28gd2UgY2FuIHByb3BhZ2F0ZSB0aHJvdWdoIHRoZSByb290IG5vZGVzIG9mIGEgdmlld1xuICAgKiB0byBpbnNlcnQgdGhlbSBvciByZW1vdmUgdGhlbSBmcm9tIHRoZSBET00uXG4gICAqL1xuICBuZXh0OiBUTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV4dCBwcm9qZWN0ZWQgc2libGluZy4gU2luY2UgaW4gQW5ndWxhciBjb250ZW50IHByb2plY3Rpb24gd29ya3Mgb24gdGhlIG5vZGUtYnktbm9kZSBiYXNpc1xuICAgKiB0aGUgYWN0IG9mIHByb2plY3Rpbmcgbm9kZXMgbWlnaHQgY2hhbmdlIG5vZGVzIHJlbGF0aW9uc2hpcCBhdCB0aGUgaW5zZXJ0aW9uIHBvaW50ICh0YXJnZXRcbiAgICogdmlldykuIEF0IHRoZSBzYW1lIHRpbWUgd2UgbmVlZCB0byBrZWVwIGluaXRpYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gbm9kZXMgYXMgZXhwcmVzc2VkIGluXG4gICAqIGNvbnRlbnQgdmlldy5cbiAgICovXG4gIHByb2plY3Rpb25OZXh0OiBUTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBGaXJzdCBjaGlsZCBvZiB0aGUgY3VycmVudCBub2RlLlxuICAgKlxuICAgKiBGb3IgY29tcG9uZW50IG5vZGVzLCB0aGUgY2hpbGQgd2lsbCBhbHdheXMgYmUgYSBDb250ZW50Q2hpbGQgKGluIHNhbWUgdmlldykuXG4gICAqIEZvciBlbWJlZGRlZCB2aWV3IG5vZGVzLCB0aGUgY2hpbGQgd2lsbCBiZSBpbiB0aGVpciBjaGlsZCB2aWV3LlxuICAgKi9cbiAgY2hpbGQ6IFROb2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIFBhcmVudCBub2RlIChpbiB0aGUgc2FtZSB2aWV3IG9ubHkpLlxuICAgKlxuICAgKiBXZSBuZWVkIGEgcmVmZXJlbmNlIHRvIGEgbm9kZSdzIHBhcmVudCBzbyB3ZSBjYW4gYXBwZW5kIHRoZSBub2RlIHRvIGl0cyBwYXJlbnQncyBuYXRpdmVcbiAgICogZWxlbWVudCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZS5cbiAgICpcbiAgICogSWYgdGhlIHBhcmVudCB3b3VsZCBiZSBpbiBhIGRpZmZlcmVudCB2aWV3IChlLmcuIGNvbXBvbmVudCBob3N0KSwgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIG51bGwuXG4gICAqIEl0J3MgaW1wb3J0YW50IHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGNyb3NzIGNvbXBvbmVudCBib3VuZGFyaWVzIHdoZW4gcmV0cmlldmluZyB0aGUgcGFyZW50XG4gICAqIGJlY2F1c2UgdGhlIHBhcmVudCB3aWxsIGNoYW5nZSAoZS5nLiBpbmRleCwgYXR0cnMpIGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgY29tcG9uZW50IHdhc1xuICAgKiB1c2VkIChhbmQgdGh1cyBzaG91bGRuJ3QgYmUgc3RvcmVkIG9uIFROb2RlKS4gSW4gdGhlc2UgY2FzZXMsIHdlIHJldHJpZXZlIHRoZSBwYXJlbnQgdGhyb3VnaFxuICAgKiBMVmlldy5ub2RlIGluc3RlYWQgKHdoaWNoIHdpbGwgYmUgaW5zdGFuY2Utc3BlY2lmaWMpLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGFuIGlubGluZSB2aWV3IG5vZGUgKFYpLCB0aGUgcGFyZW50IHdpbGwgYmUgaXRzIGNvbnRhaW5lci5cbiAgICovXG4gIHBhcmVudDogVEVsZW1lbnROb2RlfFRDb250YWluZXJOb2RlfG51bGw7XG5cbiAgc3R5bGluZ1RlbXBsYXRlOiBTdHlsaW5nQ29udGV4dHxudWxsO1xuICAvKipcbiAgICogTGlzdCBvZiBwcm9qZWN0ZWQgVE5vZGVzIGZvciBhIGdpdmVuIGNvbXBvbmVudCBob3N0IGVsZW1lbnQgT1IgaW5kZXggaW50byB0aGUgc2FpZCBub2Rlcy5cbiAgICpcbiAgICogRm9yIGVhc2llciBkaXNjdXNzaW9uIGFzc3VtZSB0aGlzIGV4YW1wbGU6XG4gICAqIGA8cGFyZW50PmAncyB2aWV3IGRlZmluaXRpb246XG4gICAqIGBgYFxuICAgKiA8Y2hpbGQgaWQ9XCJjMVwiPmNvbnRlbnQxPC9jaGlsZD5cbiAgICogPGNoaWxkIGlkPVwiYzJcIj48c3Bhbj5jb250ZW50Mjwvc3Bhbj48L2NoaWxkPlxuICAgKiBgYGBcbiAgICogYDxjaGlsZD5gJ3MgdmlldyBkZWZpbml0aW9uOlxuICAgKiBgYGBcbiAgICogPG5nLWNvbnRlbnQgaWQ9XCJjb250MVwiPjwvbmctY29udGVudD5cbiAgICogYGBgXG4gICAqXG4gICAqIElmIGBBcnJheS5pc0FycmF5KHByb2plY3Rpb24pYCB0aGVuIGBUTm9kZWAgaXMgYSBob3N0IGVsZW1lbnQ6XG4gICAqIC0gYHByb2plY3Rpb25gIHN0b3JlcyB0aGUgY29udGVudCBub2RlcyB3aGljaCBhcmUgdG8gYmUgcHJvamVjdGVkLlxuICAgKiAgICAtIFRoZSBub2RlcyByZXByZXNlbnQgY2F0ZWdvcmllcyBkZWZpbmVkIGJ5IHRoZSBzZWxlY3RvcjogRm9yIGV4YW1wbGU6XG4gICAqICAgICAgYDxuZy1jb250ZW50Lz48bmctY29udGVudCBzZWxlY3Q9XCJhYmNcIi8+YCB3b3VsZCByZXByZXNlbnQgdGhlIGhlYWRzIGZvciBgPG5nLWNvbnRlbnQvPmBcbiAgICogICAgICBhbmQgYDxuZy1jb250ZW50IHNlbGVjdD1cImFiY1wiLz5gIHJlc3BlY3RpdmVseS5cbiAgICogICAgLSBUaGUgbm9kZXMgd2Ugc3RvcmUgaW4gYHByb2plY3Rpb25gIGFyZSBoZWFkcyBvbmx5LCB3ZSB1c2VkIGAubmV4dGAgdG8gZ2V0IHRoZWlyXG4gICAqICAgICAgc2libGluZ3MuXG4gICAqICAgIC0gVGhlIG5vZGVzIGAubmV4dGAgaXMgc29ydGVkL3Jld3JpdHRlbiBhcyBwYXJ0IG9mIHRoZSBwcm9qZWN0aW9uIHNldHVwLlxuICAgKiAgICAtIGBwcm9qZWN0aW9uYCBzaXplIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgcHJvamVjdGlvbnMgYDxuZy1jb250ZW50PmAuIFRoZSBzaXplIG9mXG4gICAqICAgICAgYGMxYCB3aWxsIGJlIGAxYCBiZWNhdXNlIGA8Y2hpbGQ+YCBoYXMgb25seSBvbmUgYDxuZy1jb250ZW50PmAuXG4gICAqIC0gd2Ugc3RvcmUgYHByb2plY3Rpb25gIHdpdGggdGhlIGhvc3QgKGBjMWAsIGBjMmApIHJhdGhlciB0aGFuIHRoZSBgPG5nLWNvbnRlbnQ+YCAoYGNvbnQxYClcbiAgICogICBiZWNhdXNlIHRoZSBzYW1lIGNvbXBvbmVudCAoYDxjaGlsZD5gKSBjYW4gYmUgdXNlZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMgKGBjMWAsIGBjMmApIGFuZCBhc1xuICAgKiAgIGEgcmVzdWx0IGhhdmUgZGlmZmVyZW50IHNldCBvZiBub2RlcyB0byBwcm9qZWN0LlxuICAgKiAtIHdpdGhvdXQgYHByb2plY3Rpb25gIGl0IHdvdWxkIGJlIGRpZmZpY3VsdCB0byBlZmZpY2llbnRseSB0cmF2ZXJzZSBub2RlcyB0byBiZSBwcm9qZWN0ZWQuXG4gICAqXG4gICAqIElmIGB0eXBlb2YgcHJvamVjdGlvbiA9PSAnbnVtYmVyJ2AgdGhlbiBgVE5vZGVgIGlzIGEgYDxuZy1jb250ZW50PmAgZWxlbWVudDpcbiAgICogLSBgcHJvamVjdGlvbmAgaXMgYW4gaW5kZXggb2YgdGhlIGhvc3QncyBgcHJvamVjdGlvbmBOb2Rlcy5cbiAgICogICAtIFRoaXMgd291bGQgcmV0dXJuIHRoZSBmaXJzdCBoZWFkIG5vZGUgdG8gcHJvamVjdDpcbiAgICogICAgIGBnZXRIb3N0KGN1cnJlbnRUTm9kZSkucHJvamVjdGlvbltjdXJyZW50VE5vZGUucHJvamVjdGlvbl1gLlxuICAgKiAtIFdoZW4gcHJvamVjdGluZyBub2RlcyB0aGUgcGFyZW50IG5vZGUgcmV0cmlldmVkIG1heSBiZSBhIGA8bmctY29udGVudD5gIG5vZGUsIGluIHdoaWNoIGNhc2VcbiAgICogICB0aGUgcHJvY2VzcyBpcyByZWN1cnNpdmUgaW4gbmF0dXJlIChub3QgaW1wbGVtZW50YXRpb24pLlxuICAgKlxuICAgKiBJZiBgcHJvamVjdGlvbmAgaXMgb2YgdHlwZSBgUk5vZGVbXVtdYCB0aGFuIHdlIGhhdmUgYSBjb2xsZWN0aW9uIG9mIG5hdGl2ZSBub2RlcyBwYXNzZWQgYXNcbiAgICogcHJvamVjdGFibGUgbm9kZXMgZHVyaW5nIGR5bmFtaWMgY29tcG9uZW50IGNyZWF0aW9uLlxuICAgKi9cbiAgcHJvamVjdGlvbjogKFROb2RlfFJOb2RlW10pW118bnVtYmVyfG51bGw7XG5cbiAgLyoqXG4gICAqIEEgYnVmZmVyIG9mIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgYGVsZW1lbnRFbmRgIChvciBgZWxlbWVudGApIGNvbXBsZXRlcy5cbiAgICpcbiAgICogRHVlIHRvIHRoZSBuYXR1cmUgb2YgaG93IGRpcmVjdGl2ZXMgd29yayBpbiBBbmd1bGFyLCBzb21lIGRpcmVjdGl2ZSBjb2RlIG1heVxuICAgKiBuZWVkIHRvIGZpcmUgYWZ0ZXIgYW55IHRlbXBsYXRlLWxldmVsIGNvZGUgcnVucy4gSWYgcHJlc2VudCwgdGhpcyBhcnJheSB3aWxsXG4gICAqIGJlIGZsdXNoZWQgKGVhY2ggZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkKSBvbmNlIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQgaXNcbiAgICogY3JlYXRlZC5cbiAgICpcbiAgICogSWYgYW4gZWxlbWVudCBpcyBjcmVhdGVkIG11bHRpcGxlIHRpbWVzIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHBvcHVsYXRlZFxuICAgKiB3aXRoIGZ1bmN0aW9ucyBlYWNoIHRpbWUgdGhlIGNyZWF0aW9uIGJsb2NrIGlzIGNhbGxlZC5cbiAgICovXG4gIG9uRWxlbWVudENyZWF0aW9uRm5zOiBGdW5jdGlvbltdfG51bGw7XG59XG5cbi8qKiBTdGF0aWMgZGF0YSBmb3IgYW4gZWxlbWVudCAgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVEVsZW1lbnROb2RlIGV4dGVuZHMgVE5vZGUge1xuICAvKiogSW5kZXggaW4gdGhlIGRhdGFbXSBhcnJheSAqL1xuICBpbmRleDogbnVtYmVyO1xuICBjaGlsZDogVEVsZW1lbnROb2RlfFRUZXh0Tm9kZXxURWxlbWVudENvbnRhaW5lck5vZGV8VENvbnRhaW5lck5vZGV8VFByb2plY3Rpb25Ob2RlfG51bGw7XG4gIC8qKlxuICAgKiBFbGVtZW50IG5vZGVzIHdpbGwgaGF2ZSBwYXJlbnRzIHVubGVzcyB0aGV5IGFyZSB0aGUgZmlyc3Qgbm9kZSBvZiBhIGNvbXBvbmVudCBvclxuICAgKiBlbWJlZGRlZCB2aWV3ICh3aGljaCBtZWFucyB0aGVpciBwYXJlbnQgaXMgaW4gYSBkaWZmZXJlbnQgdmlldyBhbmQgbXVzdCBiZVxuICAgKiByZXRyaWV2ZWQgdXNpbmcgdmlld0RhdGFbSE9TVF9OT0RFXSkuXG4gICAqL1xuICBwYXJlbnQ6IFRFbGVtZW50Tm9kZXxURWxlbWVudENvbnRhaW5lck5vZGV8bnVsbDtcbiAgdFZpZXdzOiBudWxsO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIGEgY29tcG9uZW50IFROb2RlIHdpdGggcHJvamVjdGlvbiwgdGhpcyB3aWxsIGJlIGFuIGFycmF5IG9mIHByb2plY3RlZFxuICAgKiBUTm9kZXMgb3IgbmF0aXZlIG5vZGVzIChzZWUgVE5vZGUucHJvamVjdGlvbiBmb3IgbW9yZSBpbmZvKS4gSWYgaXQncyBhIHJlZ3VsYXIgZWxlbWVudCBub2RlIG9yXG4gICAqIGEgY29tcG9uZW50IHdpdGhvdXQgcHJvamVjdGlvbiwgaXQgd2lsbCBiZSBudWxsLlxuICAgKi9cbiAgcHJvamVjdGlvbjogKFROb2RlfFJOb2RlW10pW118bnVsbDtcbn1cblxuLyoqIFN0YXRpYyBkYXRhIGZvciBhIHRleHQgbm9kZSAqL1xuZXhwb3J0IGludGVyZmFjZSBUVGV4dE5vZGUgZXh0ZW5kcyBUTm9kZSB7XG4gIC8qKiBJbmRleCBpbiB0aGUgZGF0YVtdIGFycmF5ICovXG4gIGluZGV4OiBudW1iZXI7XG4gIGNoaWxkOiBudWxsO1xuICAvKipcbiAgICogVGV4dCBub2RlcyB3aWxsIGhhdmUgcGFyZW50cyB1bmxlc3MgdGhleSBhcmUgdGhlIGZpcnN0IG5vZGUgb2YgYSBjb21wb25lbnQgb3JcbiAgICogZW1iZWRkZWQgdmlldyAod2hpY2ggbWVhbnMgdGhlaXIgcGFyZW50IGlzIGluIGEgZGlmZmVyZW50IHZpZXcgYW5kIG11c3QgYmVcbiAgICogcmV0cmlldmVkIHVzaW5nIExWaWV3Lm5vZGUpLlxuICAgKi9cbiAgcGFyZW50OiBURWxlbWVudE5vZGV8VEVsZW1lbnRDb250YWluZXJOb2RlfG51bGw7XG4gIHRWaWV3czogbnVsbDtcbiAgcHJvamVjdGlvbjogbnVsbDtcbn1cblxuLyoqIFN0YXRpYyBkYXRhIGZvciBhbiBMQ29udGFpbmVyICovXG5leHBvcnQgaW50ZXJmYWNlIFRDb250YWluZXJOb2RlIGV4dGVuZHMgVE5vZGUge1xuICAvKipcbiAgICogSW5kZXggaW4gdGhlIGRhdGFbXSBhcnJheS5cbiAgICpcbiAgICogSWYgaXQncyAtMSwgdGhpcyBpcyBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgY29udGFpbmVyIG5vZGUgdGhhdCBpc24ndCBzdG9yZWQgaW5cbiAgICogZGF0YVtdIChlLmcuIHdoZW4geW91IGluamVjdCBWaWV3Q29udGFpbmVyUmVmKSAuXG4gICAqL1xuICBpbmRleDogbnVtYmVyO1xuICBjaGlsZDogbnVsbDtcblxuICAvKipcbiAgICogQ29udGFpbmVyIG5vZGVzIHdpbGwgaGF2ZSBwYXJlbnRzIHVubGVzczpcbiAgICpcbiAgICogLSBUaGV5IGFyZSB0aGUgZmlyc3Qgbm9kZSBvZiBhIGNvbXBvbmVudCBvciBlbWJlZGRlZCB2aWV3XG4gICAqIC0gVGhleSBhcmUgZHluYW1pY2FsbHkgY3JlYXRlZFxuICAgKi9cbiAgcGFyZW50OiBURWxlbWVudE5vZGV8VEVsZW1lbnRDb250YWluZXJOb2RlfG51bGw7XG4gIHRWaWV3czogVFZpZXd8VFZpZXdbXXxudWxsO1xuICBwcm9qZWN0aW9uOiBudWxsO1xufVxuXG4vKiogU3RhdGljIGRhdGEgZm9yIGFuIDxuZy1jb250YWluZXI+ICovXG5leHBvcnQgaW50ZXJmYWNlIFRFbGVtZW50Q29udGFpbmVyTm9kZSBleHRlbmRzIFROb2RlIHtcbiAgLyoqIEluZGV4IGluIHRoZSBMVmlld1tdIGFycmF5LiAqL1xuICBpbmRleDogbnVtYmVyO1xuICBjaGlsZDogVEVsZW1lbnROb2RlfFRUZXh0Tm9kZXxUQ29udGFpbmVyTm9kZXxURWxlbWVudENvbnRhaW5lck5vZGV8VFByb2plY3Rpb25Ob2RlfG51bGw7XG4gIHBhcmVudDogVEVsZW1lbnROb2RlfFRFbGVtZW50Q29udGFpbmVyTm9kZXxudWxsO1xuICB0Vmlld3M6IG51bGw7XG4gIHByb2plY3Rpb246IG51bGw7XG59XG5cbi8qKiBTdGF0aWMgZGF0YSBmb3IgYW4gSUNVIGV4cHJlc3Npb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVEljdUNvbnRhaW5lck5vZGUgZXh0ZW5kcyBUTm9kZSB7XG4gIC8qKiBJbmRleCBpbiB0aGUgTFZpZXdbXSBhcnJheS4gKi9cbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hpbGQ6IFRFbGVtZW50Tm9kZXxUVGV4dE5vZGV8bnVsbDtcbiAgcGFyZW50OiBURWxlbWVudE5vZGV8VEVsZW1lbnRDb250YWluZXJOb2RlfG51bGw7XG4gIHRWaWV3czogbnVsbDtcbiAgcHJvamVjdGlvbjogbnVsbDtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY3VycmVudCBhY3RpdmUgY2FzZSBmb3IgYW4gSUNVIGV4cHJlc3Npb24uXG4gICAqIEl0IGlzIG51bGwgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY2FzZS5cbiAgICovXG4gIGFjdGl2ZUNhc2VJbmRleDogbnVtYmVyfG51bGw7XG59XG5cbi8qKiBTdGF0aWMgZGF0YSBmb3IgYSB2aWV3ICAqL1xuZXhwb3J0IGludGVyZmFjZSBUVmlld05vZGUgZXh0ZW5kcyBUTm9kZSB7XG4gIC8qKiBJZiAtMSwgaXQncyBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgdmlldy4gT3RoZXJ3aXNlLCBpdCBpcyB0aGUgdmlldyBibG9jayBJRC4gKi9cbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hpbGQ6IFRFbGVtZW50Tm9kZXxUVGV4dE5vZGV8VEVsZW1lbnRDb250YWluZXJOb2RlfFRDb250YWluZXJOb2RlfFRQcm9qZWN0aW9uTm9kZXxudWxsO1xuICBwYXJlbnQ6IFRDb250YWluZXJOb2RlfG51bGw7XG4gIHRWaWV3czogbnVsbDtcbiAgcHJvamVjdGlvbjogbnVsbDtcbn1cblxuLyoqIFN0YXRpYyBkYXRhIGZvciBhbiBMUHJvamVjdGlvbk5vZGUgICovXG5leHBvcnQgaW50ZXJmYWNlIFRQcm9qZWN0aW9uTm9kZSBleHRlbmRzIFROb2RlIHtcbiAgLyoqIEluZGV4IGluIHRoZSBkYXRhW10gYXJyYXkgKi9cbiAgY2hpbGQ6IG51bGw7XG4gIC8qKlxuICAgKiBQcm9qZWN0aW9uIG5vZGVzIHdpbGwgaGF2ZSBwYXJlbnRzIHVubGVzcyB0aGV5IGFyZSB0aGUgZmlyc3Qgbm9kZSBvZiBhIGNvbXBvbmVudFxuICAgKiBvciBlbWJlZGRlZCB2aWV3ICh3aGljaCBtZWFucyB0aGVpciBwYXJlbnQgaXMgaW4gYSBkaWZmZXJlbnQgdmlldyBhbmQgbXVzdCBiZVxuICAgKiByZXRyaWV2ZWQgdXNpbmcgTFZpZXcubm9kZSkuXG4gICAqL1xuICBwYXJlbnQ6IFRFbGVtZW50Tm9kZXxURWxlbWVudENvbnRhaW5lck5vZGV8bnVsbDtcbiAgdFZpZXdzOiBudWxsO1xuXG4gIC8qKiBJbmRleCBvZiB0aGUgcHJvamVjdGlvbiBub2RlLiAoU2VlIFROb2RlLnByb2plY3Rpb24gZm9yIG1vcmUgaW5mby4pICovXG4gIHByb2plY3Rpb246IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGlzIG1hcHBpbmcgaXMgbmVjZXNzYXJ5IHNvIHdlIGNhbiBzZXQgaW5wdXQgcHJvcGVydGllcyBhbmQgb3V0cHV0IGxpc3RlbmVyc1xuICogcHJvcGVybHkgYXQgcnVudGltZSB3aGVuIHByb3BlcnR5IG5hbWVzIGFyZSBtaW5pZmllZCBvciBhbGlhc2VkLlxuICpcbiAqIEtleTogdW5taW5pZmllZCAvIHB1YmxpYyBpbnB1dCBvciBvdXRwdXQgbmFtZVxuICogVmFsdWU6IGFycmF5IGNvbnRhaW5pbmcgbWluaWZpZWQgLyBpbnRlcm5hbCBuYW1lIGFuZCByZWxhdGVkIGRpcmVjdGl2ZSBpbmRleFxuICpcbiAqIFRoZSB2YWx1ZSBtdXN0IGJlIGFuIGFycmF5IHRvIHN1cHBvcnQgaW5wdXRzIGFuZCBvdXRwdXRzIHdpdGggdGhlIHNhbWUgbmFtZVxuICogb24gdGhlIHNhbWUgbm9kZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvcGVydHlBbGlhc2VzID0ge1xuICAvLyBUaGlzIHVzZXMgYW4gb2JqZWN0IG1hcCBiZWNhdXNlIHVzaW5nIHRoZSBNYXAgdHlwZSB3b3VsZCBiZSB0b28gc2xvd1xuICBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eUFsaWFzVmFsdWVcbn07XG5cbi8qKlxuICogU3RvcmUgdGhlIHJ1bnRpbWUgaW5wdXQgb3Igb3V0cHV0IG5hbWVzIGZvciBhbGwgdGhlIGRpcmVjdGl2ZXMuXG4gKlxuICogaSswOiBkaXJlY3RpdmUgaW5zdGFuY2UgaW5kZXhcbiAqIGkrMTogcHVibGljTmFtZVxuICogaSsyOiBwcml2YXRlTmFtZVxuICpcbiAqIGUuZy4gWzAsICdjaGFuZ2UnLCAnY2hhbmdlLW1pbmlmaWVkJ11cbiAqL1xuZXhwb3J0IHR5cGUgUHJvcGVydHlBbGlhc1ZhbHVlID0gKG51bWJlciB8IHN0cmluZylbXTtcblxuLyoqXG4gKiBUaGlzIGFycmF5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGlucHV0IHByb3BlcnRpZXMgdGhhdFxuICogbmVlZCB0byBiZSBzZXQgb25jZSBmcm9tIGF0dHJpYnV0ZSBkYXRhLiBJdCdzIG9yZGVyZWQgYnlcbiAqIGRpcmVjdGl2ZSBpbmRleCAocmVsYXRpdmUgdG8gZWxlbWVudCkgc28gaXQncyBzaW1wbGUgdG9cbiAqIGxvb2sgdXAgYSBzcGVjaWZpYyBkaXJlY3RpdmUncyBpbml0aWFsIGlucHV0IGRhdGEuXG4gKlxuICogV2l0aGluIGVhY2ggc3ViLWFycmF5OlxuICpcbiAqIGkrMDogYXR0cmlidXRlIG5hbWVcbiAqIGkrMTogbWluaWZpZWQvaW50ZXJuYWwgaW5wdXQgbmFtZVxuICogaSsyOiBpbml0aWFsIHZhbHVlXG4gKlxuICogSWYgYSBkaXJlY3RpdmUgb24gYSBub2RlIGRvZXMgbm90IGhhdmUgYW55IGlucHV0IHByb3BlcnRpZXNcbiAqIHRoYXQgc2hvdWxkIGJlIHNldCBmcm9tIGF0dHJpYnV0ZXMsIGl0cyBpbmRleCBpcyBzZXQgdG8gbnVsbFxuICogdG8gYXZvaWQgYSBzcGFyc2UgYXJyYXkuXG4gKlxuICogZS5nLiBbbnVsbCwgWydyb2xlLW1pbicsICdtaW5pZmllZC1pbnB1dCcsICdidXR0b24nXV1cbiAqL1xuZXhwb3J0IHR5cGUgSW5pdGlhbElucHV0RGF0YSA9IChJbml0aWFsSW5wdXRzIHwgbnVsbClbXTtcblxuLyoqXG4gKiBVc2VkIGJ5IEluaXRpYWxJbnB1dERhdGEgdG8gc3RvcmUgaW5wdXQgcHJvcGVydGllc1xuICogdGhhdCBzaG91bGQgYmUgc2V0IG9uY2UgZnJvbSBhdHRyaWJ1dGVzLlxuICpcbiAqIGkrMDogYXR0cmlidXRlIG5hbWVcbiAqIGkrMTogbWluaWZpZWQvaW50ZXJuYWwgaW5wdXQgbmFtZVxuICogaSsyOiBpbml0aWFsIHZhbHVlXG4gKlxuICogZS5nLiBbJ3JvbGUtbWluJywgJ21pbmlmaWVkLWlucHV0JywgJ2J1dHRvbiddXG4gKi9cbmV4cG9ydCB0eXBlIEluaXRpYWxJbnB1dHMgPSBzdHJpbmdbXTtcblxuLy8gTm90ZTogVGhpcyBoYWNrIGlzIG5lY2Vzc2FyeSBzbyB3ZSBkb24ndCBlcnJvbmVvdXNseSBnZXQgYSBjaXJjdWxhciBkZXBlbmRlbmN5XG4vLyBmYWlsdXJlIGJhc2VkIG9uIHR5cGVzLlxuZXhwb3J0IGNvbnN0IHVudXNlZFZhbHVlRXhwb3J0VG9QbGFjYXRlQWpkID0gMTtcblxuLyoqXG4gKiBUeXBlIHJlcHJlc2VudGluZyBhIHNldCBvZiBUTm9kZXMgdGhhdCBjYW4gaGF2ZSBsb2NhbCByZWZzIChgI2Zvb2ApIHBsYWNlZCBvbiB0aGVtLlxuICovXG5leHBvcnQgdHlwZSBUTm9kZVdpdGhMb2NhbFJlZnMgPSBUQ29udGFpbmVyTm9kZSB8IFRFbGVtZW50Tm9kZSB8IFRFbGVtZW50Q29udGFpbmVyTm9kZTtcblxuLyoqXG4gKiBUeXBlIGZvciBhIGZ1bmN0aW9uIHRoYXQgZXh0cmFjdHMgYSB2YWx1ZSBmb3IgYSBsb2NhbCByZWZzLlxuICogRXhhbXBsZTpcbiAqIC0gYDxkaXYgI25hdGl2ZURpdkVsPmAgLSBgbmF0aXZlRGl2RWxgIHNob3VsZCBwb2ludCB0byB0aGUgbmF0aXZlIGA8ZGl2PmAgZWxlbWVudDtcbiAqIC0gYDxuZy10ZW1wbGF0ZSAjdHBsUmVmPmAgLSBgdHBsUmVmYCBzaG91bGQgcG9pbnQgdG8gdGhlIGBUZW1wbGF0ZVJlZmAgaW5zdGFuY2U7XG4gKi9cbmV4cG9ydCB0eXBlIExvY2FsUmVmRXh0cmFjdG9yID0gKHROb2RlOiBUTm9kZVdpdGhMb2NhbFJlZnMsIGN1cnJlbnRWaWV3OiBMVmlldykgPT4gYW55O1xuIl19
|
|
614
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy9ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztJQWtCRTs7T0FFRztJQUNILFlBQWE7SUFDYjs7T0FFRztJQUNILGFBQWM7SUFDZDs7T0FFRztJQUNILE9BQVE7SUFDUjs7T0FFRztJQUNILFVBQVc7SUFDWDs7T0FFRztJQUNILG1CQUFvQjtJQUNwQjs7T0FFRztJQUNILGVBQWdCOzs7OztJQU9oQixpREFBaUQ7SUFDakQsY0FBcUI7SUFFckIscURBQXFEO0lBQ3JELGNBQXFCO0lBRXJCLHdFQUF3RTtJQUN4RSxrQkFBeUI7SUFFekIseURBQXlEO0lBQ3pELGdCQUF1QjtJQUV2Qix5REFBeUQ7SUFDekQsaUJBQXVCOzs7OztJQU92Qiw0RkFBNEY7SUFDNUYsOEJBQTREO0lBRTVEOzBCQUNzQjtJQUN0Qiw4QkFBK0I7SUFDL0IsbUNBQWlFOzs7OztJQU9qRTs7OztPQUlHO0lBQ0gsZUFBZ0I7SUFFaEI7Ozs7Ozs7Ozs7Ozs7OztRQWVJO0lBQ0osVUFBVztJQUVYOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsU0FBVTtJQUVWOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsV0FBWTtJQUVaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ0gsV0FBWTtJQUVaOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsWUFBYTtJQUViOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxPQUFJOzs7Ozs7Ozs7Ozs7Ozs7QUFzQk4sMkJBZ1BDOzs7Ozs7SUE5T0MscUJBQWdCOzs7Ozs7Ozs7O0lBVWhCLHNCQUFjOzs7Ozs7Ozs7Ozs7Ozs7SUFlZCw4QkFBc0I7Ozs7O0lBS3RCLCtCQUF1Qjs7Ozs7SUFLdkIsNkJBQXFCOzs7Ozs7SUFNckIsMkNBQW1DOzs7Ozs7SUFNbkMseUNBQWlDOzs7OztJQUtqQyxzQkFBa0I7Ozs7Ozs7O0lBU2xCLGdDQUFzQzs7Ozs7SUFHdEMsd0JBQXFCOzs7Ozs7Ozs7Ozs7Ozs7O0lBZ0JyQixzQkFBd0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFtQnhCLDJCQUFtQzs7Ozs7SUFHbkMsOEJBQStDOzs7Ozs7OztJQVEvQyx1QkFBdUM7Ozs7Ozs7O0lBUXZDLHdCQUF3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXNCeEMsdUJBQTJCOzs7Ozs7SUFNM0IscUJBQWlCOzs7Ozs7OztJQVFqQiwrQkFBMkI7Ozs7Ozs7O0lBUTNCLHNCQUFrQjs7Ozs7Ozs7Ozs7Ozs7OztJQWdCbEIsdUJBQXlDOztJQUV6QyxnQ0FBcUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBd0NyQywyQkFBMEM7Ozs7Ozs7Ozs7Ozs7SUFhMUMscUNBQXNDOztJQUV0QywwQkFBZ0M7O0lBRWhDLDJCQUFpQzs7Ozs7O0FBSW5DLGtDQWtCQzs7Ozs7O0lBaEJDLDZCQUFjOztJQUNkLDZCQUF3Rjs7Ozs7OztJQU14Riw4QkFBZ0Q7O0lBQ2hELDhCQUFhOzs7Ozs7O0lBT2Isa0NBQW1DOzs7Ozs7QUFJckMsK0JBWUM7Ozs7OztJQVZDLDBCQUFjOztJQUNkLDBCQUFZOzs7Ozs7O0lBTVosMkJBQWdEOztJQUNoRCwyQkFBYTs7SUFDYiwrQkFBaUI7Ozs7OztBQUluQixvQ0FtQkM7Ozs7Ozs7OztJQVpDLCtCQUFjOztJQUNkLCtCQUFZOzs7Ozs7OztJQVFaLGdDQUFnRDs7SUFDaEQsZ0NBQTJCOztJQUMzQixvQ0FBaUI7Ozs7OztBQUluQiwyQ0FPQzs7Ozs7O0lBTEMsc0NBQWM7O0lBQ2Qsc0NBQXdGOztJQUN4Rix1Q0FBZ0Q7O0lBQ2hELHVDQUFhOztJQUNiLDJDQUFpQjs7Ozs7O0FBSW5CLHVDQVlDOzs7Ozs7SUFWQyxrQ0FBYzs7SUFDZCxrQ0FBbUM7O0lBQ25DLG1DQUFnRDs7SUFDaEQsbUNBQWE7O0lBQ2IsdUNBQWlCOzs7Ozs7SUFLakIsNENBQTZCOzs7Ozs7QUFJL0IsK0JBT0M7Ozs7OztJQUxDLDBCQUFjOztJQUNkLDBCQUF3Rjs7SUFDeEYsMkJBQTRCOztJQUM1QiwyQkFBYTs7SUFDYiwrQkFBaUI7Ozs7OztBQUluQixxQ0FhQzs7Ozs7O0lBWEMsZ0NBQVk7Ozs7Ozs7SUFNWixpQ0FBZ0Q7O0lBQ2hELGlDQUFhOzs7OztJQUdiLHFDQUFtQjs7Ozs7QUErRHJCLE1BQU0sT0FBTyw2QkFBNkIsR0FBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtUU3R5bGluZ0NvbnRleHR9IGZyb20gJy4uL3N0eWxpbmdfbmV4dC9pbnRlcmZhY2VzJztcbmltcG9ydCB7Q3NzU2VsZWN0b3J9IGZyb20gJy4vcHJvamVjdGlvbic7XG5pbXBvcnQge1JOb2RlfSBmcm9tICcuL3JlbmRlcmVyJztcbmltcG9ydCB7U3R5bGluZ0NvbnRleHR9IGZyb20gJy4vc3R5bGluZyc7XG5pbXBvcnQge0xWaWV3LCBUVmlld30gZnJvbSAnLi92aWV3JztcblxuXG4vKipcbiAqIFROb2RlVHlwZSBjb3JyZXNwb25kcyB0byB0aGUge0BsaW5rIFROb2RlfSBgdHlwZWAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFROb2RlVHlwZSB7XG4gIC8qKlxuICAgKiBUaGUgVE5vZGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYW4ge0BsaW5rIExDb250YWluZXJ9IGZvciBlbWJlZGRlZCB2aWV3cy5cbiAgICovXG4gIENvbnRhaW5lciA9IDAsXG4gIC8qKlxuICAgKiBUaGUgVE5vZGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYW4gYDxuZy1jb250ZW50PmAgcHJvamVjdGlvblxuICAgKi9cbiAgUHJvamVjdGlvbiA9IDEsXG4gIC8qKlxuICAgKiBUaGUgVE5vZGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYW4ge0BsaW5rIExWaWV3fVxuICAgKi9cbiAgVmlldyA9IDIsXG4gIC8qKlxuICAgKiBUaGUgVE5vZGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBET00gZWxlbWVudCBha2Ege0BsaW5rIFJOb2RlfS5cbiAgICovXG4gIEVsZW1lbnQgPSAzLFxuICAvKipcbiAgICogVGhlIFROb2RlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGFuIGA8bmctY29udGFpbmVyPmAgZWxlbWVudCB7QGxpbmsgUk5vZGV9LlxuICAgKi9cbiAgRWxlbWVudENvbnRhaW5lciA9IDQsXG4gIC8qKlxuICAgKiBUaGUgVE5vZGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYW4gSUNVIGNvbW1lbnQgdXNlZCBpbiBgaTE4bmAuXG4gICAqL1xuICBJY3VDb250YWluZXIgPSA1LFxufVxuXG4vKipcbiAqIENvcnJlc3BvbmRzIHRvIHRoZSBUTm9kZS5mbGFncyBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gVE5vZGVGbGFncyB7XG4gIC8qKiBUaGlzIGJpdCBpcyBzZXQgaWYgdGhlIG5vZGUgaXMgYSBjb21wb25lbnQgKi9cbiAgaXNDb21wb25lbnQgPSAwYjAwMDAxLFxuXG4gIC8qKiBUaGlzIGJpdCBpcyBzZXQgaWYgdGhlIG5vZGUgaGFzIGJlZW4gcHJvamVjdGVkICovXG4gIGlzUHJvamVjdGVkID0gMGIwMDAxMCxcblxuICAvKiogVGhpcyBiaXQgaXMgc2V0IGlmIGFueSBkaXJlY3RpdmUgb24gdGhpcyBub2RlIGhhcyBjb250ZW50IHF1ZXJpZXMgKi9cbiAgaGFzQ29udGVudFF1ZXJ5ID0gMGIwMDEwMCxcblxuICAvKiogVGhpcyBiaXQgaXMgc2V0IGlmIHRoZSBub2RlIGhhcyBhbnkgXCJjbGFzc1wiIGlucHV0cyAqL1xuICBoYXNDbGFzc0lucHV0ID0gMGIwMTAwMCxcblxuICAvKiogVGhpcyBiaXQgaXMgc2V0IGlmIHRoZSBub2RlIGhhcyBhbnkgXCJzdHlsZVwiIGlucHV0cyAqL1xuICBoYXNTdHlsZUlucHV0ID0gMGIxMDAwMCxcbn1cblxuLyoqXG4gKiBDb3JyZXNwb25kcyB0byB0aGUgVE5vZGUucHJvdmlkZXJJbmRleGVzIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZW51bSBUTm9kZVByb3ZpZGVySW5kZXhlcyB7XG4gIC8qKiBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IHByb3ZpZGVyIG9uIHRoaXMgbm9kZSBpcyBlbmNvZGVkIG9uIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzICovXG4gIFByb3ZpZGVyc1N0YXJ0SW5kZXhNYXNrID0gMGIwMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMSxcblxuICAvKiogVGhlIGNvdW50IG9mIHZpZXcgcHJvdmlkZXJzIGZyb20gdGhlIGNvbXBvbmVudCBvbiB0aGlzIG5vZGUgaXMgZW5jb2RlZCBvbiB0aGUgMTYgbW9zdFxuICAgICBzaWduaWZpY2FudCBiaXRzICovXG4gIENwdFZpZXdQcm92aWRlcnNDb3VudFNoaWZ0ID0gMTYsXG4gIENwdFZpZXdQcm92aWRlcnNDb3VudFNoaWZ0ZXIgPSAwYjAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwLFxufVxuLyoqXG4gKiBBIHNldCBvZiBtYXJrZXIgdmFsdWVzIHRvIGJlIHVzZWQgaW4gdGhlIGF0dHJpYnV0ZXMgYXJyYXlzLiBUaGVzZSBtYXJrZXJzIGluZGljYXRlIHRoYXQgc29tZVxuICogaXRlbXMgYXJlIG5vdCByZWd1bGFyIGF0dHJpYnV0ZXMgYW5kIHRoZSBwcm9jZXNzaW5nIHNob3VsZCBiZSBhZGFwdGVkIGFjY29yZGluZ2x5LlxuICovXG5leHBvcnQgY29uc3QgZW51bSBBdHRyaWJ1dGVNYXJrZXIge1xuICAvKipcbiAgICogTWFya2VyIGluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgMyB2YWx1ZXMgaW4gdGhlIGF0dHJpYnV0ZXMgYXJyYXkgYXJlOlxuICAgKiBuYW1lc3BhY2VVcmksIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlXG4gICAqIGluIHRoYXQgb3JkZXIuXG4gICAqL1xuICBOYW1lc3BhY2VVUkkgPSAwLFxuXG4gIC8qKlxuICAgICogU2lnbmFscyBjbGFzcyBkZWNsYXJhdGlvbi5cbiAgICAqXG4gICAgKiBFYWNoIHZhbHVlIGZvbGxvd2luZyBgQ2xhc3Nlc2AgZGVzaWduYXRlcyBhIGNsYXNzIG5hbWUgdG8gaW5jbHVkZSBvbiB0aGUgZWxlbWVudC5cbiAgICAqICMjIEV4YW1wbGU6XG4gICAgKlxuICAgICogR2l2ZW46XG4gICAgKiBgYGBcbiAgICAqIDxkaXYgY2xhc3M9XCJmb28gYmFyIGJhelwiPi4uLjxkL3ZpPlxuICAgICogYGBgXG4gICAgKlxuICAgICogdGhlIGdlbmVyYXRlZCBjb2RlIGlzOlxuICAgICogYGBgXG4gICAgKiB2YXIgX2MxID0gW0F0dHJpYnV0ZU1hcmtlci5DbGFzc2VzLCAnZm9vJywgJ2JhcicsICdiYXonXTtcbiAgICAqIGBgYFxuICAgICovXG4gIENsYXNzZXMgPSAxLFxuXG4gIC8qKlxuICAgKiBTaWduYWxzIHN0eWxlIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBFYWNoIHBhaXIgb2YgdmFsdWVzIGZvbGxvd2luZyBgU3R5bGVzYCBkZXNpZ25hdGVzIGEgc3R5bGUgbmFtZSBhbmQgdmFsdWUgdG8gaW5jbHVkZSBvbiB0aGVcbiAgICogZWxlbWVudC5cbiAgICogIyMgRXhhbXBsZTpcbiAgICpcbiAgICogR2l2ZW46XG4gICAqIGBgYFxuICAgKiA8ZGl2IHN0eWxlPVwid2lkdGg6MTAwcHg7IGhlaWdodDoyMDBweDsgY29sb3I6cmVkXCI+Li4uPC9kaXY+XG4gICAqIGBgYFxuICAgKlxuICAgKiB0aGUgZ2VuZXJhdGVkIGNvZGUgaXM6XG4gICAqIGBgYFxuICAgKiB2YXIgX2MxID0gW0F0dHJpYnV0ZU1hcmtlci5TdHlsZXMsICd3aWR0aCcsICcxMDBweCcsICdoZWlnaHQnLiAnMjAwcHgnLCAnY29sb3InLCAncmVkJ107XG4gICAqIGBgYFxuICAgKi9cbiAgU3R5bGVzID0gMixcblxuICAvKipcbiAgICogU2lnbmFscyB0aGF0IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlIG5hbWVzIHdlcmUgZXh0cmFjdGVkIGZyb20gaW5wdXQgb3Igb3V0cHV0IGJpbmRpbmdzLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBIVE1MOlxuICAgKlxuICAgKiBgYGBcbiAgICogPGRpdiBtb289XCJjYXJcIiBbZm9vXT1cImV4cFwiIChiYXIpPVwiZG9TdGgoKVwiPlxuICAgKiBgYGBcbiAgICpcbiAgICogdGhlIGdlbmVyYXRlZCBjb2RlIGlzOlxuICAgKlxuICAgKiBgYGBcbiAgICogdmFyIF9jMSA9IFsnbW9vJywgJ2NhcicsIEF0dHJpYnV0ZU1hcmtlci5CaW5kaW5ncywgJ2ZvbycsICdiYXInXTtcbiAgICogYGBgXG4gICAqL1xuICBCaW5kaW5ncyA9IDMsXG5cbiAgLyoqXG4gICAqIFNpZ25hbHMgdGhhdCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZSBuYW1lcyB3ZXJlIGhvaXN0ZWQgZnJvbSBhbiBpbmxpbmUtdGVtcGxhdGUgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9sbG93aW5nIEhUTUw6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8ZGl2ICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB2YWx1ZXM7IHRyYWNrQnk6dHJhY2tCeVwiIGRpckEgW2RpckJdPVwidmFsdWVcIj5cbiAgICogYGBgXG4gICAqXG4gICAqIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGB0ZW1wbGF0ZSgpYCBpbnN0cnVjdGlvbiB3b3VsZCBpbmNsdWRlOlxuICAgKlxuICAgKiBgYGBcbiAgICogWydkaXJBJywgJycsIEF0dHJpYnV0ZU1hcmtlci5CaW5kaW5ncywgJ2RpckInLCBBdHRyaWJ1dGVNYXJrZXIuVGVtcGxhdGUsICduZ0ZvcicsICduZ0Zvck9mJyxcbiAgICogJ25nRm9yVHJhY2tCeScsICdsZXQtdmFsdWUnXVxuICAgKiBgYGBcbiAgICpcbiAgICogd2hpbGUgdGhlIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgYGVsZW1lbnQoKWAgaW5zdHJ1Y3Rpb24gaW5zaWRlIHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbiB3b3VsZFxuICAgKiBpbmNsdWRlOlxuICAgKlxuICAgKiBgYGBcbiAgICogWydkaXJBJywgJycsIEF0dHJpYnV0ZU1hcmtlci5CaW5kaW5ncywgJ2RpckInXVxuICAgKiBgYGBcbiAgICovXG4gIFRlbXBsYXRlID0gNCxcblxuICAvKipcbiAgICogU2lnbmFscyB0aGF0IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlIGlzIGBuZ1Byb2plY3RBc2AgYW5kIGl0cyB2YWx1ZSBpcyBhIHBhcnNlZCBgQ3NzU2VsZWN0b3JgLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBIVE1MOlxuICAgKlxuICAgKiBgYGBcbiAgICogPGgxIGF0dHI9XCJ2YWx1ZVwiIG5nUHJvamVjdEFzPVwiW3RpdGxlXVwiPlxuICAgKiBgYGBcbiAgICpcbiAgICogdGhlIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgYGVsZW1lbnQoKWAgaW5zdHJ1Y3Rpb24gd291bGQgaW5jbHVkZTpcbiAgICpcbiAgICogYGBgXG4gICAqIFsnYXR0cicsICd2YWx1ZScsIEF0dHJpYnV0ZU1hcmtlci5Qcm9qZWN0QXMsIFsnJywgJ3RpdGxlJywgJyddXVxuICAgKiBgYGBcbiAgICovXG4gIFByb2plY3RBcyA9IDUsXG5cbiAgLyoqXG4gICAqIFNpZ25hbHMgdGhhdCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZSB3aWxsIGJlIHRyYW5zbGF0ZWQgYnkgcnVudGltZSBpMThuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9sbG93aW5nIEhUTUw6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8ZGl2IG1vbz1cImNhclwiIGZvbz1cInZhbHVlXCIgaTE4bi1mb28gW2Jhcl09XCJiaW5kaW5nXCIgaTE4bi1iYXI+XG4gICAqIGBgYFxuICAgKlxuICAgKiB0aGUgZ2VuZXJhdGVkIGNvZGUgaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiB2YXIgX2MxID0gWydtb28nLCAnY2FyJywgQXR0cmlidXRlTWFya2VyLkkxOG4sICdmb28nLCAnYmFyJ107XG4gICAqL1xuICBJMThuLFxufVxuXG4vKipcbiAqIEEgY29tYmluYXRpb24gb2Y6XG4gKiAtIEF0dHJpYnV0ZSBuYW1lcyBhbmQgdmFsdWVzLlxuICogLSBTcGVjaWFsIG1hcmtlcnMgYWN0aW5nIGFzIGZsYWdzIHRvIGFsdGVyIGF0dHJpYnV0ZXMgcHJvY2Vzc2luZy5cbiAqIC0gUGFyc2VkIG5nUHJvamVjdEFzIHNlbGVjdG9ycy5cbiAqL1xuZXhwb3J0IHR5cGUgVEF0dHJpYnV0ZXMgPSAoc3RyaW5nIHwgQXR0cmlidXRlTWFya2VyIHwgQ3NzU2VsZWN0b3IpW107XG5cbi8qKlxuICogQmluZGluZyBkYXRhIChmbHl3ZWlnaHQpIGZvciBhIHBhcnRpY3VsYXIgbm9kZSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCB0ZW1wbGF0ZXNcbiAqIG9mIGEgc3BlY2lmaWMgdHlwZS5cbiAqXG4gKiBJZiBhIHByb3BlcnR5IGlzOlxuICogICAgLSBQcm9wZXJ0eUFsaWFzZXM6IHRoYXQgcHJvcGVydHkncyBkYXRhIHdhcyBnZW5lcmF0ZWQgYW5kIHRoaXMgaXMgaXRcbiAqICAgIC0gTnVsbDogdGhhdCBwcm9wZXJ0eSdzIGRhdGEgd2FzIGFscmVhZHkgZ2VuZXJhdGVkIGFuZCBub3RoaW5nIHdhcyBmb3VuZC5cbiAqICAgIC0gVW5kZWZpbmVkOiB0aGF0IHByb3BlcnR5J3MgZGF0YSBoYXMgbm90IHlldCBiZWVuIGdlbmVyYXRlZFxuICpcbiAqIHNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmx5d2VpZ2h0X3BhdHRlcm4gZm9yIG1vcmUgb24gdGhlIEZseXdlaWdodCBwYXR0ZXJuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVE5vZGUge1xuICAvKiogVGhlIHR5cGUgb2YgdGhlIFROb2RlLiBTZWUgVE5vZGVUeXBlLiAqL1xuICB0eXBlOiBUTm9kZVR5cGU7XG5cbiAgLyoqXG4gICAqIEluZGV4IG9mIHRoZSBUTm9kZSBpbiBUVmlldy5kYXRhIGFuZCBjb3JyZXNwb25kaW5nIG5hdGl2ZSBlbGVtZW50IGluIExWaWV3LlxuICAgKlxuICAgKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBnZXQgZnJvbSBhbnkgVE5vZGUgdG8gaXRzIGNvcnJlc3BvbmRpbmcgbmF0aXZlIGVsZW1lbnQgd2hlblxuICAgKiB0cmF2ZXJzaW5nIHRoZSBub2RlIHRyZWUuXG4gICAqXG4gICAqIElmIGluZGV4IGlzIC0xLCB0aGlzIGlzIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBjb250YWluZXIgbm9kZSBvciBlbWJlZGRlZCB2aWV3IG5vZGUuXG4gICAqL1xuICBpbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgaW5qZWN0b3IgaW4gdGhpcyBub2RlJ3MgTFZpZXcuXG4gICAqXG4gICAqIElmIHRoZSBpbmRleCA9PT0gLTEsIHRoZXJlIGlzIG5vIGluamVjdG9yIG9uIHRoaXMgbm9kZSBvciBhbnkgYW5jZXN0b3Igbm9kZSBpbiB0aGlzIHZpZXcuXG4gICAqXG4gICAqIElmIHRoZSBpbmRleCAhPT0gLTEsIGl0IGlzIHRoZSBpbmRleCBvZiB0aGlzIG5vZGUncyBpbmplY3RvciBPUiB0aGUgaW5kZXggb2YgYSBwYXJlbnQgaW5qZWN0b3JcbiAgICogaW4gdGhlIHNhbWUgdmlldy4gV2UgcGFzcyB0aGUgcGFyZW50IGluamVjdG9yIGluZGV4IGRvd24gdGhlIG5vZGUgdHJlZSBvZiBhIHZpZXcgc28gaXQnc1xuICAgKiBwb3NzaWJsZSB0byBmaW5kIHRoZSBwYXJlbnQgaW5qZWN0b3Igd2l0aG91dCB3YWxraW5nIGEgcG90ZW50aWFsbHkgZGVlcCBub2RlIHRyZWUuIEluamVjdG9yXG4gICAqIGluZGljZXMgYXJlIG5vdCBzZXQgYWNyb3NzIHZpZXcgYm91bmRhcmllcyBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGNvbXBvbmVudCBob3N0cy5cbiAgICpcbiAgICogSWYgdE5vZGUuaW5qZWN0b3JJbmRleCA9PT0gdE5vZGUucGFyZW50LmluamVjdG9ySW5kZXgsIHRoZW4gdGhlIGluZGV4IGJlbG9uZ3MgdG8gYSBwYXJlbnRcbiAgICogaW5qZWN0b3IuXG4gICAqL1xuICBpbmplY3RvckluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBzdGFydGluZyBpbmRleCBvZiB0aGUgZGlyZWN0aXZlcy5cbiAgICovXG4gIGRpcmVjdGl2ZVN0YXJ0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBmaW5hbCBleGNsdXNpdmUgaW5kZXggb2YgdGhlIGRpcmVjdGl2ZXMuXG4gICAqL1xuICBkaXJlY3RpdmVFbmQ6IG51bWJlcjtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBmaXJzdCBpbmRleCB3aGVyZSBwcm9wZXJ0eSBiaW5kaW5nIG1ldGFkYXRhIGlzIHN0b3JlZCBmb3JcbiAgICogdGhpcyBub2RlLlxuICAgKi9cbiAgcHJvcGVydHlNZXRhZGF0YVN0YXJ0SW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBleGNsdXNpdmUgZmluYWwgaW5kZXggd2hlcmUgcHJvcGVydHkgYmluZGluZyBtZXRhZGF0YSBpc1xuICAgKiBzdG9yZWQgZm9yIHRoaXMgbm9kZS5cbiAgICovXG4gIHByb3BlcnR5TWV0YWRhdGFFbmRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgaWYgTm9kZSBpc0NvbXBvbmVudCwgaXNQcm9qZWN0ZWQsIGhhc0NvbnRlbnRRdWVyeSwgaGFzQ2xhc3NJbnB1dCBhbmQgaGFzU3R5bGVJbnB1dFxuICAgKi9cbiAgZmxhZ3M6IFROb2RlRmxhZ3M7XG5cbiAgLyoqXG4gICAqIFRoaXMgbnVtYmVyIHN0b3JlcyB0d28gdmFsdWVzIHVzaW5nIGl0cyBiaXRzOlxuICAgKlxuICAgKiAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcHJvdmlkZXIgb24gdGhhdCBub2RlIChmaXJzdCAxNiBiaXRzKVxuICAgKiAtIHRoZSBjb3VudCBvZiB2aWV3IHByb3ZpZGVycyBmcm9tIHRoZSBjb21wb25lbnQgb24gdGhpcyBub2RlIChsYXN0IDE2IGJpdHMpXG4gICAqL1xuICAvLyBUT0RPKG1pc2tvKTogYnJlYWsgdGhpcyBpbnRvIGFjdHVhbCB2YXJzLlxuICBwcm92aWRlckluZGV4ZXM6IFROb2RlUHJvdmlkZXJJbmRleGVzO1xuXG4gIC8qKiBUaGUgdGFnIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4gKi9cbiAgdGFnTmFtZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGFuIGVsZW1lbnQuIFdlIG5lZWQgdG8gc3RvcmUgYXR0cmlidXRlcyB0byBzdXBwb3J0IHZhcmlvdXMgdXNlLWNhc2VzXG4gICAqIChhdHRyaWJ1dGUgaW5qZWN0aW9uLCBjb250ZW50IHByb2plY3Rpb24gd2l0aCBzZWxlY3RvcnMsIGRpcmVjdGl2ZXMgbWF0Y2hpbmcpLlxuICAgKiBBdHRyaWJ1dGVzIGFyZSBzdG9yZWQgc3RhdGljYWxseSBiZWNhdXNlIHJlYWRpbmcgdGhlbSBmcm9tIHRoZSBET00gd291bGQgYmUgd2F5IHRvbyBzbG93IGZvclxuICAgKiBjb250ZW50IHByb2plY3Rpb24gYW5kIHF1ZXJpZXMuXG4gICAqXG4gICAqIFNpbmNlIGF0dHJzIHdpbGwgYWx3YXlzIGJlIGNhbGN1bGF0ZWQgZmlyc3QsIHRoZXkgd2lsbCBuZXZlciBuZWVkIHRvIGJlIG1hcmtlZCB1bmRlZmluZWQgYnlcbiAgICogb3RoZXIgaW5zdHJ1Y3Rpb25zLlxuICAgKlxuICAgKiBGb3IgcmVndWxhciBhdHRyaWJ1dGVzIGEgbmFtZSBvZiBhbiBhdHRyaWJ1dGUgYW5kIGl0cyB2YWx1ZSBhbHRlcm5hdGUgaW4gdGhlIGFycmF5LlxuICAgKiBlLmcuIFsncm9sZScsICdjaGVja2JveCddXG4gICAqIFRoaXMgYXJyYXkgY2FuIGNvbnRhaW4gZmxhZ3MgdGhhdCB3aWxsIGluZGljYXRlIFwic3BlY2lhbCBhdHRyaWJ1dGVzXCIgKGF0dHJpYnV0ZXMgd2l0aFxuICAgKiBuYW1lc3BhY2VzLCBhdHRyaWJ1dGVzIGV4dHJhY3RlZCBmcm9tIGJpbmRpbmdzIGFuZCBvdXRwdXRzKS5cbiAgICovXG4gIGF0dHJzOiBUQXR0cmlidXRlc3xudWxsO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBsb2NhbCBuYW1lcyB1bmRlciB3aGljaCBhIGdpdmVuIGVsZW1lbnQgaXMgZXhwb3J0ZWQgaW4gYSB0ZW1wbGF0ZSBhbmRcbiAgICogdmlzaWJsZSB0byBxdWVyaWVzLiBBbiBlbnRyeSBpbiB0aGlzIGFycmF5IGNhbiBiZSBjcmVhdGVkIGZvciBkaWZmZXJlbnQgcmVhc29uczpcbiAgICogLSBhbiBlbGVtZW50IGl0c2VsZiBpcyByZWZlcmVuY2VkLCBleC46IGA8ZGl2ICNmb28+YFxuICAgKiAtIGEgY29tcG9uZW50IGlzIHJlZmVyZW5jZWQsIGV4LjogYDxteS1jbXB0ICNmb28+YFxuICAgKiAtIGEgZGlyZWN0aXZlIGlzIHJlZmVyZW5jZWQsIGV4LjogYDxteS1jbXB0ICNmb289XCJkaXJlY3RpdmVFeHBvcnRBc1wiPmAuXG4gICAqXG4gICAqIEEgZ2l2ZW4gZWxlbWVudCBtaWdodCBoYXZlIGRpZmZlcmVudCBsb2NhbCBuYW1lcyBhbmQgdGhvc2UgbmFtZXMgY2FuIGJlIGFzc29jaWF0ZWRcbiAgICogd2l0aCBhIGRpcmVjdGl2ZS4gV2Ugc3RvcmUgbG9jYWwgbmFtZXMgYXQgZXZlbiBpbmRleGVzIHdoaWxlIG9kZCBpbmRleGVzIGFyZSByZXNlcnZlZFxuICAgKiBmb3IgZGlyZWN0aXZlIGluZGV4IGluIGEgdmlldyAob3IgYC0xYCBpZiB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIGRpcmVjdGl2ZSkuXG4gICAqXG4gICAqIFNvbWUgZXhhbXBsZXM6XG4gICAqIC0gYDxkaXYgI2Zvbz5gID0+IGBbXCJmb29cIiwgLTFdYFxuICAgKiAtIGA8bXktY21wdCAjZm9vPmAgPT4gYFtcImZvb1wiLCBteUNtcHRJZHhdYFxuICAgKiAtIGA8bXktY21wdCAjZm9vICNiYXI9XCJkaXJlY3RpdmVFeHBvcnRBc1wiPmAgPT4gYFtcImZvb1wiLCBteUNtcHRJZHgsIFwiYmFyXCIsIGRpcmVjdGl2ZUlkeF1gXG4gICAqIC0gYDxkaXYgI2ZvbyAjYmFyPVwiZGlyZWN0aXZlRXhwb3J0QXNcIj5gID0+IGBbXCJmb29cIiwgLTEsIFwiYmFyXCIsIGRpcmVjdGl2ZUlkeF1gXG4gICAqL1xuICBsb2NhbE5hbWVzOiAoc3RyaW5nfG51bWJlcilbXXxudWxsO1xuXG4gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCBpbnB1dCBwcm9wZXJ0aWVzIHRoYXQgbmVlZCB0byBiZSBzZXQgb25jZSBmcm9tIGF0dHJpYnV0ZSBkYXRhLiAqL1xuICBpbml0aWFsSW5wdXRzOiBJbml0aWFsSW5wdXREYXRhfG51bGx8dW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBkYXRhIGZvciBhbGwgZGlyZWN0aXZlcyBvbiB0aGlzIG5vZGUuXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgbWVhbnMgdGhhdCB0aGUgcHJvcCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LFxuICAgKiAtIGBudWxsYCBtZWFucyB0aGF0IHRoZSBwcm9wIGhhcyBiZWVuIGluaXRpYWxpemVkIGJ1dCBubyBpbnB1dHMgaGF2ZSBiZWVuIGZvdW5kLlxuICAgKi9cbiAgaW5wdXRzOiBQcm9wZXJ0eUFsaWFzZXN8bnVsbHx1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE91dHB1dCBkYXRhIGZvciBhbGwgZGlyZWN0aXZlcyBvbiB0aGlzIG5vZGUuXG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgbWVhbnMgdGhhdCB0aGUgcHJvcCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LFxuICAgKiAtIGBudWxsYCBtZWFucyB0aGF0IHRoZSBwcm9wIGhhcyBiZWVuIGluaXRpYWxpemVkIGJ1dCBubyBvdXRwdXRzIGhhdmUgYmVlbiBmb3VuZC5cbiAgICovXG4gIG91dHB1dHM6IFByb3BlcnR5QWxpYXNlc3xudWxsfHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIFRWaWV3IG9yIFRWaWV3cyBhdHRhY2hlZCB0byB0aGlzIG5vZGUuXG4gICAqXG4gICAqIElmIHRoaXMgVE5vZGUgY29ycmVzcG9uZHMgdG8gYW4gTENvbnRhaW5lciB3aXRoIGlubGluZSB2aWV3cywgdGhlIGNvbnRhaW5lciB3aWxsXG4gICAqIG5lZWQgdG8gc3RvcmUgc2VwYXJhdGUgc3RhdGljIGRhdGEgZm9yIGVhY2ggb2YgaXRzIHZpZXcgYmxvY2tzIChUVmlld1tdKS4gT3RoZXJ3aXNlLFxuICAgKiBub2RlcyBpbiBpbmxpbmUgdmlld3Mgd2l0aCB0aGUgc2FtZSBpbmRleCBhcyBub2RlcyBpbiB0aGVpciBwYXJlbnQgdmlld3Mgd2lsbCBvdmVyd3JpdGVcbiAgICogZWFjaCBvdGhlciwgYXMgdGhleSBhcmUgaW4gdGhlIHNhbWUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEVhY2ggaW5kZXggaW4gdGhpcyBhcnJheSBjb3JyZXNwb25kcyB0byB0aGUgc3RhdGljIGRhdGEgZm9yIGEgY2VydGFpblxuICAgKiB2aWV3LiBTbyBpZiB5b3UgaGFkIFYoMCkgYW5kIFYoMSkgaW4gYSBjb250YWluZXIsIHlvdSBtaWdodCBoYXZlOlxuICAgKlxuICAgKiBbXG4gICAqICAgW3t0YWdOYW1lOiAnZGl2JywgYXR0cnM6IC4uLn0sIG51bGxdLCAgICAgLy8gVigwKSBUVmlld1xuICAgKiAgIFt7dGFnTmFtZTogJ2J1dHRvbicsIGF0dHJzIC4uLn0sIG51bGxdICAgIC8vIFYoMSkgVFZpZXdcbiAgICpcbiAgICogSWYgdGhpcyBUTm9kZSBjb3JyZXNwb25kcyB0byBhbiBMQ29udGFpbmVyIHdpdGggYSB0ZW1wbGF0ZSAoZS5nLiBzdHJ1Y3R1cmFsXG4gICAqIGRpcmVjdGl2ZSksIHRoZSB0ZW1wbGF0ZSdzIFRWaWV3IHdpbGwgYmUgc3RvcmVkIGhlcmUuXG4gICAqXG4gICAqIElmIHRoaXMgVE5vZGUgY29ycmVzcG9uZHMgdG8gYW4gZWxlbWVudCwgdFZpZXdzIHdpbGwgYmUgbnVsbCAuXG4gICAqL1xuICB0Vmlld3M6IFRWaWV3fFRWaWV3W118bnVsbDtcblxuICAvKipcbiAgICogVGhlIG5leHQgc2libGluZyBub2RlLiBOZWNlc3Nhcnkgc28gd2UgY2FuIHByb3BhZ2F0ZSB0aHJvdWdoIHRoZSByb290IG5vZGVzIG9mIGEgdmlld1xuICAgKiB0byBpbnNlcnQgdGhlbSBvciByZW1vdmUgdGhlbSBmcm9tIHRoZSBET00uXG4gICAqL1xuICBuZXh0OiBUTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV4dCBwcm9qZWN0ZWQgc2libGluZy4gU2luY2UgaW4gQW5ndWxhciBjb250ZW50IHByb2plY3Rpb24gd29ya3Mgb24gdGhlIG5vZGUtYnktbm9kZSBiYXNpc1xuICAgKiB0aGUgYWN0IG9mIHByb2plY3Rpbmcgbm9kZXMgbWlnaHQgY2hhbmdlIG5vZGVzIHJlbGF0aW9uc2hpcCBhdCB0aGUgaW5zZXJ0aW9uIHBvaW50ICh0YXJnZXRcbiAgICogdmlldykuIEF0IHRoZSBzYW1lIHRpbWUgd2UgbmVlZCB0byBrZWVwIGluaXRpYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gbm9kZXMgYXMgZXhwcmVzc2VkIGluXG4gICAqIGNvbnRlbnQgdmlldy5cbiAgICovXG4gIHByb2plY3Rpb25OZXh0OiBUTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBGaXJzdCBjaGlsZCBvZiB0aGUgY3VycmVudCBub2RlLlxuICAgKlxuICAgKiBGb3IgY29tcG9uZW50IG5vZGVzLCB0aGUgY2hpbGQgd2lsbCBhbHdheXMgYmUgYSBDb250ZW50Q2hpbGQgKGluIHNhbWUgdmlldykuXG4gICAqIEZvciBlbWJlZGRlZCB2aWV3IG5vZGVzLCB0aGUgY2hpbGQgd2lsbCBiZSBpbiB0aGVpciBjaGlsZCB2aWV3LlxuICAgKi9cbiAgY2hpbGQ6IFROb2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIFBhcmVudCBub2RlIChpbiB0aGUgc2FtZSB2aWV3IG9ubHkpLlxuICAgKlxuICAgKiBXZSBuZWVkIGEgcmVmZXJlbmNlIHRvIGEgbm9kZSdzIHBhcmVudCBzbyB3ZSBjYW4gYXBwZW5kIHRoZSBub2RlIHRvIGl0cyBwYXJlbnQncyBuYXRpdmVcbiAgICogZWxlbWVudCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZS5cbiAgICpcbiAgICogSWYgdGhlIHBhcmVudCB3b3VsZCBiZSBpbiBhIGRpZmZlcmVudCB2aWV3IChlLmcuIGNvbXBvbmVudCBob3N0KSwgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIG51bGwuXG4gICAqIEl0J3MgaW1wb3J0YW50IHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGNyb3NzIGNvbXBvbmVudCBib3VuZGFyaWVzIHdoZW4gcmV0cmlldmluZyB0aGUgcGFyZW50XG4gICAqIGJlY2F1c2UgdGhlIHBhcmVudCB3aWxsIGNoYW5nZSAoZS5nLiBpbmRleCwgYXR0cnMpIGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgY29tcG9uZW50IHdhc1xuICAgKiB1c2VkIChhbmQgdGh1cyBzaG91bGRuJ3QgYmUgc3RvcmVkIG9uIFROb2RlKS4gSW4gdGhlc2UgY2FzZXMsIHdlIHJldHJpZXZlIHRoZSBwYXJlbnQgdGhyb3VnaFxuICAgKiBMVmlldy5ub2RlIGluc3RlYWQgKHdoaWNoIHdpbGwgYmUgaW5zdGFuY2Utc3BlY2lmaWMpLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGFuIGlubGluZSB2aWV3IG5vZGUgKFYpLCB0aGUgcGFyZW50IHdpbGwgYmUgaXRzIGNvbnRhaW5lci5cbiAgICovXG4gIHBhcmVudDogVEVsZW1lbnROb2RlfFRDb250YWluZXJOb2RlfG51bGw7XG5cbiAgc3R5bGluZ1RlbXBsYXRlOiBTdHlsaW5nQ29udGV4dHxudWxsO1xuICAvKipcbiAgICogTGlzdCBvZiBwcm9qZWN0ZWQgVE5vZGVzIGZvciBhIGdpdmVuIGNvbXBvbmVudCBob3N0IGVsZW1lbnQgT1IgaW5kZXggaW50byB0aGUgc2FpZCBub2Rlcy5cbiAgICpcbiAgICogRm9yIGVhc2llciBkaXNjdXNzaW9uIGFzc3VtZSB0aGlzIGV4YW1wbGU6XG4gICAqIGA8cGFyZW50PmAncyB2aWV3IGRlZmluaXRpb246XG4gICAqIGBgYFxuICAgKiA8Y2hpbGQgaWQ9XCJjMVwiPmNvbnRlbnQxPC9jaGlsZD5cbiAgICogPGNoaWxkIGlkPVwiYzJcIj48c3Bhbj5jb250ZW50Mjwvc3Bhbj48L2NoaWxkPlxuICAgKiBgYGBcbiAgICogYDxjaGlsZD5gJ3MgdmlldyBkZWZpbml0aW9uOlxuICAgKiBgYGBcbiAgICogPG5nLWNvbnRlbnQgaWQ9XCJjb250MVwiPjwvbmctY29udGVudD5cbiAgICogYGBgXG4gICAqXG4gICAqIElmIGBBcnJheS5pc0FycmF5KHByb2plY3Rpb24pYCB0aGVuIGBUTm9kZWAgaXMgYSBob3N0IGVsZW1lbnQ6XG4gICAqIC0gYHByb2plY3Rpb25gIHN0b3JlcyB0aGUgY29udGVudCBub2RlcyB3aGljaCBhcmUgdG8gYmUgcHJvamVjdGVkLlxuICAgKiAgICAtIFRoZSBub2RlcyByZXByZXNlbnQgY2F0ZWdvcmllcyBkZWZpbmVkIGJ5IHRoZSBzZWxlY3RvcjogRm9yIGV4YW1wbGU6XG4gICAqICAgICAgYDxuZy1jb250ZW50Lz48bmctY29udGVudCBzZWxlY3Q9XCJhYmNcIi8+YCB3b3VsZCByZXByZXNlbnQgdGhlIGhlYWRzIGZvciBgPG5nLWNvbnRlbnQvPmBcbiAgICogICAgICBhbmQgYDxuZy1jb250ZW50IHNlbGVjdD1cImFiY1wiLz5gIHJlc3BlY3RpdmVseS5cbiAgICogICAgLSBUaGUgbm9kZXMgd2Ugc3RvcmUgaW4gYHByb2plY3Rpb25gIGFyZSBoZWFkcyBvbmx5LCB3ZSB1c2VkIGAubmV4dGAgdG8gZ2V0IHRoZWlyXG4gICAqICAgICAgc2libGluZ3MuXG4gICAqICAgIC0gVGhlIG5vZGVzIGAubmV4dGAgaXMgc29ydGVkL3Jld3JpdHRlbiBhcyBwYXJ0IG9mIHRoZSBwcm9qZWN0aW9uIHNldHVwLlxuICAgKiAgICAtIGBwcm9qZWN0aW9uYCBzaXplIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgcHJvamVjdGlvbnMgYDxuZy1jb250ZW50PmAuIFRoZSBzaXplIG9mXG4gICAqICAgICAgYGMxYCB3aWxsIGJlIGAxYCBiZWNhdXNlIGA8Y2hpbGQ+YCBoYXMgb25seSBvbmUgYDxuZy1jb250ZW50PmAuXG4gICAqIC0gd2Ugc3RvcmUgYHByb2plY3Rpb25gIHdpdGggdGhlIGhvc3QgKGBjMWAsIGBjMmApIHJhdGhlciB0aGFuIHRoZSBgPG5nLWNvbnRlbnQ+YCAoYGNvbnQxYClcbiAgICogICBiZWNhdXNlIHRoZSBzYW1lIGNvbXBvbmVudCAoYDxjaGlsZD5gKSBjYW4gYmUgdXNlZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMgKGBjMWAsIGBjMmApIGFuZCBhc1xuICAgKiAgIGEgcmVzdWx0IGhhdmUgZGlmZmVyZW50IHNldCBvZiBub2RlcyB0byBwcm9qZWN0LlxuICAgKiAtIHdpdGhvdXQgYHByb2plY3Rpb25gIGl0IHdvdWxkIGJlIGRpZmZpY3VsdCB0byBlZmZpY2llbnRseSB0cmF2ZXJzZSBub2RlcyB0byBiZSBwcm9qZWN0ZWQuXG4gICAqXG4gICAqIElmIGB0eXBlb2YgcHJvamVjdGlvbiA9PSAnbnVtYmVyJ2AgdGhlbiBgVE5vZGVgIGlzIGEgYDxuZy1jb250ZW50PmAgZWxlbWVudDpcbiAgICogLSBgcHJvamVjdGlvbmAgaXMgYW4gaW5kZXggb2YgdGhlIGhvc3QncyBgcHJvamVjdGlvbmBOb2Rlcy5cbiAgICogICAtIFRoaXMgd291bGQgcmV0dXJuIHRoZSBmaXJzdCBoZWFkIG5vZGUgdG8gcHJvamVjdDpcbiAgICogICAgIGBnZXRIb3N0KGN1cnJlbnRUTm9kZSkucHJvamVjdGlvbltjdXJyZW50VE5vZGUucHJvamVjdGlvbl1gLlxuICAgKiAtIFdoZW4gcHJvamVjdGluZyBub2RlcyB0aGUgcGFyZW50IG5vZGUgcmV0cmlldmVkIG1heSBiZSBhIGA8bmctY29udGVudD5gIG5vZGUsIGluIHdoaWNoIGNhc2VcbiAgICogICB0aGUgcHJvY2VzcyBpcyByZWN1cnNpdmUgaW4gbmF0dXJlIChub3QgaW1wbGVtZW50YXRpb24pLlxuICAgKlxuICAgKiBJZiBgcHJvamVjdGlvbmAgaXMgb2YgdHlwZSBgUk5vZGVbXVtdYCB0aGFuIHdlIGhhdmUgYSBjb2xsZWN0aW9uIG9mIG5hdGl2ZSBub2RlcyBwYXNzZWQgYXNcbiAgICogcHJvamVjdGFibGUgbm9kZXMgZHVyaW5nIGR5bmFtaWMgY29tcG9uZW50IGNyZWF0aW9uLlxuICAgKi9cbiAgcHJvamVjdGlvbjogKFROb2RlfFJOb2RlW10pW118bnVtYmVyfG51bGw7XG5cbiAgLyoqXG4gICAqIEEgYnVmZmVyIG9mIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgYGVsZW1lbnRFbmRgIChvciBgZWxlbWVudGApIGNvbXBsZXRlcy5cbiAgICpcbiAgICogRHVlIHRvIHRoZSBuYXR1cmUgb2YgaG93IGRpcmVjdGl2ZXMgd29yayBpbiBBbmd1bGFyLCBzb21lIGRpcmVjdGl2ZSBjb2RlIG1heVxuICAgKiBuZWVkIHRvIGZpcmUgYWZ0ZXIgYW55IHRlbXBsYXRlLWxldmVsIGNvZGUgcnVucy4gSWYgcHJlc2VudCwgdGhpcyBhcnJheSB3aWxsXG4gICAqIGJlIGZsdXNoZWQgKGVhY2ggZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkKSBvbmNlIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQgaXNcbiAgICogY3JlYXRlZC5cbiAgICpcbiAgICogSWYgYW4gZWxlbWVudCBpcyBjcmVhdGVkIG11bHRpcGxlIHRpbWVzIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHBvcHVsYXRlZFxuICAgKiB3aXRoIGZ1bmN0aW9ucyBlYWNoIHRpbWUgdGhlIGNyZWF0aW9uIGJsb2NrIGlzIGNhbGxlZC5cbiAgICovXG4gIG9uRWxlbWVudENyZWF0aW9uRm5zOiBGdW5jdGlvbltdfG51bGw7XG4gIC8vIFRPRE8gKG1hdHNrbyk6IHJlbmFtZSB0aGlzIHRvIGBzdHlsZXNgIG9uY2UgdGhlIG9sZCBzdHlsaW5nIGltcGwgaXMgZ29uZVxuICBuZXdTdHlsZXM6IFRTdHlsaW5nQ29udGV4dHxudWxsO1xuICAvLyBUT0RPIChtYXRza28pOiByZW5hbWUgdGhpcyB0byBgY2xhc3Nlc2Agb25jZSB0aGUgb2xkIHN0eWxpbmcgaW1wbCBpcyBnb25lXG4gIG5ld0NsYXNzZXM6IFRTdHlsaW5nQ29udGV4dHxudWxsO1xufVxuXG4vKiogU3RhdGljIGRhdGEgZm9yIGFuIGVsZW1lbnQgICovXG5leHBvcnQgaW50ZXJmYWNlIFRFbGVtZW50Tm9kZSBleHRlbmRzIFROb2RlIHtcbiAgLyoqIEluZGV4IGluIHRoZSBkYXRhW10gYXJyYXkgKi9cbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hpbGQ6IFRFbGVtZW50Tm9kZXxUVGV4dE5vZGV8VEVsZW1lbnRDb250YWluZXJOb2RlfFRDb250YWluZXJOb2RlfFRQcm9qZWN0aW9uTm9kZXxudWxsO1xuICAvKipcbiAgICogRWxlbWVudCBub2RlcyB3aWxsIGhhdmUgcGFyZW50cyB1bmxlc3MgdGhleSBhcmUgdGhlIGZpcnN0IG5vZGUgb2YgYSBjb21wb25lbnQgb3JcbiAgICogZW1iZWRkZWQgdmlldyAod2hpY2ggbWVhbnMgdGhlaXIgcGFyZW50IGlzIGluIGEgZGlmZmVyZW50IHZpZXcgYW5kIG11c3QgYmVcbiAgICogcmV0cmlldmVkIHVzaW5nIHZpZXdEYXRhW0hPU1RfTk9ERV0pLlxuICAgKi9cbiAgcGFyZW50OiBURWxlbWVudE5vZGV8VEVsZW1lbnRDb250YWluZXJOb2RlfG51bGw7XG4gIHRWaWV3czogbnVsbDtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBhIGNvbXBvbmVudCBUTm9kZSB3aXRoIHByb2plY3Rpb24sIHRoaXMgd2lsbCBiZSBhbiBhcnJheSBvZiBwcm9qZWN0ZWRcbiAgICogVE5vZGVzIG9yIG5hdGl2ZSBub2RlcyAoc2VlIFROb2RlLnByb2plY3Rpb24gZm9yIG1vcmUgaW5mbykuIElmIGl0J3MgYSByZWd1bGFyIGVsZW1lbnQgbm9kZSBvclxuICAgKiBhIGNvbXBvbmVudCB3aXRob3V0IHByb2plY3Rpb24sIGl0IHdpbGwgYmUgbnVsbC5cbiAgICovXG4gIHByb2plY3Rpb246IChUTm9kZXxSTm9kZVtdKVtdfG51bGw7XG59XG5cbi8qKiBTdGF0aWMgZGF0YSBmb3IgYSB0ZXh0IG5vZGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVFRleHROb2RlIGV4dGVuZHMgVE5vZGUge1xuICAvKiogSW5kZXggaW4gdGhlIGRhdGFbXSBhcnJheSAqL1xuICBpbmRleDogbnVtYmVyO1xuICBjaGlsZDogbnVsbDtcbiAgLyoqXG4gICAqIFRleHQgbm9kZXMgd2lsbCBoYXZlIHBhcmVudHMgdW5sZXNzIHRoZXkgYXJlIHRoZSBmaXJzdCBub2RlIG9mIGEgY29tcG9uZW50IG9yXG4gICAqIGVtYmVkZGVkIHZpZXcgKHdoaWNoIG1lYW5zIHRoZWlyIHBhcmVudCBpcyBpbiBhIGRpZmZlcmVudCB2aWV3IGFuZCBtdXN0IGJlXG4gICAqIHJldHJpZXZlZCB1c2luZyBMVmlldy5ub2RlKS5cbiAgICovXG4gIHBhcmVudDogVEVsZW1lbnROb2RlfFRFbGVtZW50Q29udGFpbmVyTm9kZXxudWxsO1xuICB0Vmlld3M6IG51bGw7XG4gIHByb2plY3Rpb246IG51bGw7XG59XG5cbi8qKiBTdGF0aWMgZGF0YSBmb3IgYW4gTENvbnRhaW5lciAqL1xuZXhwb3J0IGludGVyZmFjZSBUQ29udGFpbmVyTm9kZSBleHRlbmRzIFROb2RlIHtcbiAgLyoqXG4gICAqIEluZGV4IGluIHRoZSBkYXRhW10gYXJyYXkuXG4gICAqXG4gICAqIElmIGl0J3MgLTEsIHRoaXMgaXMgYSBkeW5hbWljYWxseSBjcmVhdGVkIGNvbnRhaW5lciBub2RlIHRoYXQgaXNuJ3Qgc3RvcmVkIGluXG4gICAqIGRhdGFbXSAoZS5nLiB3aGVuIHlvdSBpbmplY3QgVmlld0NvbnRhaW5lclJlZikgLlxuICAgKi9cbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hpbGQ6IG51bGw7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBub2RlcyB3aWxsIGhhdmUgcGFyZW50cyB1bmxlc3M6XG4gICAqXG4gICAqIC0gVGhleSBhcmUgdGhlIGZpcnN0IG5vZGUgb2YgYSBjb21wb25lbnQgb3IgZW1iZWRkZWQgdmlld1xuICAgKiAtIFRoZXkgYXJlIGR5bmFtaWNhbGx5IGNyZWF0ZWRcbiAgICovXG4gIHBhcmVudDogVEVsZW1lbnROb2RlfFRFbGVtZW50Q29udGFpbmVyTm9kZXxudWxsO1xuICB0Vmlld3M6IFRWaWV3fFRWaWV3W118bnVsbDtcbiAgcHJvamVjdGlvbjogbnVsbDtcbn1cblxuLyoqIFN0YXRpYyBkYXRhIGZvciBhbiA8bmctY29udGFpbmVyPiAqL1xuZXhwb3J0IGludGVyZmFjZSBURWxlbWVudENvbnRhaW5lck5vZGUgZXh0ZW5kcyBUTm9kZSB7XG4gIC8qKiBJbmRleCBpbiB0aGUgTFZpZXdbXSBhcnJheS4gKi9cbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hpbGQ6IFRFbGVtZW50Tm9kZXxUVGV4dE5vZGV8VENvbnRhaW5lck5vZGV8VEVsZW1lbnRDb250YWluZXJOb2RlfFRQcm9qZWN0aW9uTm9kZXxudWxsO1xuICBwYXJlbnQ6IFRFbGVtZW50Tm9kZXxURWxlbWVudENvbnRhaW5lck5vZGV8bnVsbDtcbiAgdFZpZXdzOiBudWxsO1xuICBwcm9qZWN0aW9uOiBudWxsO1xufVxuXG4vKiogU3RhdGljIGRhdGEgZm9yIGFuIElDVSBleHByZXNzaW9uICovXG5leHBvcnQgaW50ZXJmYWNlIFRJY3VDb250YWluZXJOb2RlIGV4dGVuZHMgVE5vZGUge1xuICAvKiogSW5kZXggaW4gdGhlIExWaWV3W10gYXJyYXkuICovXG4gIGluZGV4OiBudW1iZXI7XG4gIGNoaWxkOiBURWxlbWVudE5vZGV8VFRleHROb2RlfG51bGw7XG4gIHBhcmVudDogVEVsZW1lbnROb2RlfFRFbGVtZW50Q29udGFpbmVyTm9kZXxudWxsO1xuICB0Vmlld3M6IG51bGw7XG4gIHByb2plY3Rpb246IG51bGw7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgYWN0aXZlIGNhc2UgZm9yIGFuIElDVSBleHByZXNzaW9uLlxuICAgKiBJdCBpcyBudWxsIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIGNhc2UuXG4gICAqL1xuICBhY3RpdmVDYXNlSW5kZXg6IG51bWJlcnxudWxsO1xufVxuXG4vKiogU3RhdGljIGRhdGEgZm9yIGEgdmlldyAgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVFZpZXdOb2RlIGV4dGVuZHMgVE5vZGUge1xuICAvKiogSWYgLTEsIGl0J3MgYSBkeW5hbWljYWxseSBjcmVhdGVkIHZpZXcuIE90aGVyd2lzZSwgaXQgaXMgdGhlIHZpZXcgYmxvY2sgSUQuICovXG4gIGluZGV4OiBudW1iZXI7XG4gIGNoaWxkOiBURWxlbWVudE5vZGV8VFRleHROb2RlfFRFbGVtZW50Q29udGFpbmVyTm9kZXxUQ29udGFpbmVyTm9kZXxUUHJvamVjdGlvbk5vZGV8bnVsbDtcbiAgcGFyZW50OiBUQ29udGFpbmVyTm9kZXxudWxsO1xuICB0Vmlld3M6IG51bGw7XG4gIHByb2plY3Rpb246IG51bGw7XG59XG5cbi8qKiBTdGF0aWMgZGF0YSBmb3IgYW4gTFByb2plY3Rpb25Ob2RlICAqL1xuZXhwb3J0IGludGVyZmFjZSBUUHJvamVjdGlvbk5vZGUgZXh0ZW5kcyBUTm9kZSB7XG4gIC8qKiBJbmRleCBpbiB0aGUgZGF0YVtdIGFycmF5ICovXG4gIGNoaWxkOiBudWxsO1xuICAvKipcbiAgICogUHJvamVjdGlvbiBub2RlcyB3aWxsIGhhdmUgcGFyZW50cyB1bmxlc3MgdGhleSBhcmUgdGhlIGZpcnN0IG5vZGUgb2YgYSBjb21wb25lbnRcbiAgICogb3IgZW1iZWRkZWQgdmlldyAod2hpY2ggbWVhbnMgdGhlaXIgcGFyZW50IGlzIGluIGEgZGlmZmVyZW50IHZpZXcgYW5kIG11c3QgYmVcbiAgICogcmV0cmlldmVkIHVzaW5nIExWaWV3Lm5vZGUpLlxuICAgKi9cbiAgcGFyZW50OiBURWxlbWVudE5vZGV8VEVsZW1lbnRDb250YWluZXJOb2RlfG51bGw7XG4gIHRWaWV3czogbnVsbDtcblxuICAvKiogSW5kZXggb2YgdGhlIHByb2plY3Rpb24gbm9kZS4gKFNlZSBUTm9kZS5wcm9qZWN0aW9uIGZvciBtb3JlIGluZm8uKSAqL1xuICBwcm9qZWN0aW9uOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhpcyBtYXBwaW5nIGlzIG5lY2Vzc2FyeSBzbyB3ZSBjYW4gc2V0IGlucHV0IHByb3BlcnRpZXMgYW5kIG91dHB1dCBsaXN0ZW5lcnNcbiAqIHByb3Blcmx5IGF0IHJ1bnRpbWUgd2hlbiBwcm9wZXJ0eSBuYW1lcyBhcmUgbWluaWZpZWQgb3IgYWxpYXNlZC5cbiAqXG4gKiBLZXk6IHVubWluaWZpZWQgLyBwdWJsaWMgaW5wdXQgb3Igb3V0cHV0IG5hbWVcbiAqIFZhbHVlOiBhcnJheSBjb250YWluaW5nIG1pbmlmaWVkIC8gaW50ZXJuYWwgbmFtZSBhbmQgcmVsYXRlZCBkaXJlY3RpdmUgaW5kZXhcbiAqXG4gKiBUaGUgdmFsdWUgbXVzdCBiZSBhbiBhcnJheSB0byBzdXBwb3J0IGlucHV0cyBhbmQgb3V0cHV0cyB3aXRoIHRoZSBzYW1lIG5hbWVcbiAqIG9uIHRoZSBzYW1lIG5vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIFByb3BlcnR5QWxpYXNlcyA9IHtcbiAgLy8gVGhpcyB1c2VzIGFuIG9iamVjdCBtYXAgYmVjYXVzZSB1c2luZyB0aGUgTWFwIHR5cGUgd291bGQgYmUgdG9vIHNsb3dcbiAgW2tleTogc3RyaW5nXTogUHJvcGVydHlBbGlhc1ZhbHVlXG59O1xuXG4vKipcbiAqIFN0b3JlIHRoZSBydW50aW1lIGlucHV0IG9yIG91dHB1dCBuYW1lcyBmb3IgYWxsIHRoZSBkaXJlY3RpdmVzLlxuICpcbiAqIGkrMDogZGlyZWN0aXZlIGluc3RhbmNlIGluZGV4XG4gKiBpKzE6IHB1YmxpY05hbWVcbiAqIGkrMjogcHJpdmF0ZU5hbWVcbiAqXG4gKiBlLmcuIFswLCAnY2hhbmdlJywgJ2NoYW5nZS1taW5pZmllZCddXG4gKi9cbmV4cG9ydCB0eXBlIFByb3BlcnR5QWxpYXNWYWx1ZSA9IChudW1iZXIgfCBzdHJpbmcpW107XG5cbi8qKlxuICogVGhpcyBhcnJheSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpbnB1dCBwcm9wZXJ0aWVzIHRoYXRcbiAqIG5lZWQgdG8gYmUgc2V0IG9uY2UgZnJvbSBhdHRyaWJ1dGUgZGF0YS4gSXQncyBvcmRlcmVkIGJ5XG4gKiBkaXJlY3RpdmUgaW5kZXggKHJlbGF0aXZlIHRvIGVsZW1lbnQpIHNvIGl0J3Mgc2ltcGxlIHRvXG4gKiBsb29rIHVwIGEgc3BlY2lmaWMgZGlyZWN0aXZlJ3MgaW5pdGlhbCBpbnB1dCBkYXRhLlxuICpcbiAqIFdpdGhpbiBlYWNoIHN1Yi1hcnJheTpcbiAqXG4gKiBpKzA6IGF0dHJpYnV0ZSBuYW1lXG4gKiBpKzE6IG1pbmlmaWVkL2ludGVybmFsIGlucHV0IG5hbWVcbiAqIGkrMjogaW5pdGlhbCB2YWx1ZVxuICpcbiAqIElmIGEgZGlyZWN0aXZlIG9uIGEgbm9kZSBkb2VzIG5vdCBoYXZlIGFueSBpbnB1dCBwcm9wZXJ0aWVzXG4gKiB0aGF0IHNob3VsZCBiZSBzZXQgZnJvbSBhdHRyaWJ1dGVzLCBpdHMgaW5kZXggaXMgc2V0IHRvIG51bGxcbiAqIHRvIGF2b2lkIGEgc3BhcnNlIGFycmF5LlxuICpcbiAqIGUuZy4gW251bGwsIFsncm9sZS1taW4nLCAnbWluaWZpZWQtaW5wdXQnLCAnYnV0dG9uJ11dXG4gKi9cbmV4cG9ydCB0eXBlIEluaXRpYWxJbnB1dERhdGEgPSAoSW5pdGlhbElucHV0cyB8IG51bGwpW107XG5cbi8qKlxuICogVXNlZCBieSBJbml0aWFsSW5wdXREYXRhIHRvIHN0b3JlIGlucHV0IHByb3BlcnRpZXNcbiAqIHRoYXQgc2hvdWxkIGJlIHNldCBvbmNlIGZyb20gYXR0cmlidXRlcy5cbiAqXG4gKiBpKzA6IGF0dHJpYnV0ZSBuYW1lXG4gKiBpKzE6IG1pbmlmaWVkL2ludGVybmFsIGlucHV0IG5hbWVcbiAqIGkrMjogaW5pdGlhbCB2YWx1ZVxuICpcbiAqIGUuZy4gWydyb2xlLW1pbicsICdtaW5pZmllZC1pbnB1dCcsICdidXR0b24nXVxuICovXG5leHBvcnQgdHlwZSBJbml0aWFsSW5wdXRzID0gc3RyaW5nW107XG5cbi8vIE5vdGU6IFRoaXMgaGFjayBpcyBuZWNlc3Nhcnkgc28gd2UgZG9uJ3QgZXJyb25lb3VzbHkgZ2V0IGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuLy8gZmFpbHVyZSBiYXNlZCBvbiB0eXBlcy5cbmV4cG9ydCBjb25zdCB1bnVzZWRWYWx1ZUV4cG9ydFRvUGxhY2F0ZUFqZCA9IDE7XG5cbi8qKlxuICogVHlwZSByZXByZXNlbnRpbmcgYSBzZXQgb2YgVE5vZGVzIHRoYXQgY2FuIGhhdmUgbG9jYWwgcmVmcyAoYCNmb29gKSBwbGFjZWQgb24gdGhlbS5cbiAqL1xuZXhwb3J0IHR5cGUgVE5vZGVXaXRoTG9jYWxSZWZzID0gVENvbnRhaW5lck5vZGUgfCBURWxlbWVudE5vZGUgfCBURWxlbWVudENvbnRhaW5lck5vZGU7XG5cbi8qKlxuICogVHlwZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIGEgdmFsdWUgZm9yIGEgbG9jYWwgcmVmcy5cbiAqIEV4YW1wbGU6XG4gKiAtIGA8ZGl2ICNuYXRpdmVEaXZFbD5gIC0gYG5hdGl2ZURpdkVsYCBzaG91bGQgcG9pbnQgdG8gdGhlIG5hdGl2ZSBgPGRpdj5gIGVsZW1lbnQ7XG4gKiAtIGA8bmctdGVtcGxhdGUgI3RwbFJlZj5gIC0gYHRwbFJlZmAgc2hvdWxkIHBvaW50IHRvIHRoZSBgVGVtcGxhdGVSZWZgIGluc3RhbmNlO1xuICovXG5leHBvcnQgdHlwZSBMb2NhbFJlZkV4dHJhY3RvciA9ICh0Tm9kZTogVE5vZGVXaXRoTG9jYWxSZWZzLCBjdXJyZW50VmlldzogTFZpZXcpID0+IGFueTtcbiJdfQ==
|
|
@@ -25,4 +25,4 @@ export { SelectorFlags };
|
|
|
25
25
|
// failure based on types.
|
|
26
26
|
/** @type {?} */
|
|
27
27
|
export const unusedValueExportToPlacateAjd = 1;
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy9wcm9qZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7SUFzREUsaUVBQWlFO0lBQ2pFLE1BQVk7SUFFWixtQ0FBbUM7SUFDbkMsWUFBa0I7SUFFbEIsa0NBQWtDO0lBQ2xDLFVBQWdCO0lBRWhCLG9DQUFvQztJQUNwQyxRQUFjOzs7Ozs7QUFLaEIsTUFBTSxPQUFPLDZCQUE2QixHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuXG4vKipcbiAqIEV4cHJlc3NlcyBhIHNpbmdsZSBDU1MgU2VsZWN0b3IuXG4gKlxuICogQmVnaW5uaW5nIG9mIGFycmF5XG4gKiAtIEZpcnN0IGluZGV4OiBlbGVtZW50IG5hbWVcbiAqIC0gU3Vic2VxdWVudCBvZGQgaW5kaWNlczogYXR0ciBrZXlzXG4gKiAtIFN1YnNlcXVlbnQgZXZlbiBpbmRpY2VzOiBhdHRyIHZhbHVlc1xuICpcbiAqIEFmdGVyIFNlbGVjdG9yRmxhZ3MuQ0xBU1MgZmxhZ1xuICogLSBDbGFzcyBuYW1lIHZhbHVlc1xuICpcbiAqIFNlbGVjdG9yRmxhZ3MuTk9UIGZsYWdcbiAqIC0gQ2hhbmdlcyB0aGUgbW9kZSB0byBOT1RcbiAqIC0gQ2FuIGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgZmxhZ3MgdG8gc2V0IHRoZSBlbGVtZW50IC8gYXR0ciAvIGNsYXNzIG1vZGVcbiAqXG4gKiBlLmcuIFNlbGVjdG9yRmxhZ3MuTk9UIHwgU2VsZWN0b3JGbGFncy5FTEVNRU5UXG4gKlxuICogRXhhbXBsZTpcbiAqIE9yaWdpbmFsOiBgZGl2LmZvby5iYXJbYXR0cjE9dmFsMV1bYXR0cjJdYFxuICogUGFyc2VkOiBbJ2RpdicsICdhdHRyMScsICd2YWwxJywgJ2F0dHIyJywgJycsIFNlbGVjdG9yRmxhZ3MuQ0xBU1MsICdmb28nLCAnYmFyJ11cbiAqXG4gKiBPcmlnaW5hbDogJ2RpdlthdHRyMV06bm90KC5mb29bYXR0cjJdKVxuICogUGFyc2VkOiBbXG4gKiAgJ2RpdicsICdhdHRyMScsICcnLFxuICogIFNlbGVjdG9yRmxhZ3MuTk9UIHwgU2VsZWN0b3JGbGFncy5BVFRSSUJVVEUgJ2F0dHIyJywgJycsIFNlbGVjdG9yRmxhZ3MuQ0xBU1MsICdmb28nXG4gKiBdXG4gKlxuICogU2VlIG1vcmUgZXhhbXBsZXMgaW4gbm9kZV9zZWxlY3Rvcl9tYXRjaGVyX3NwZWMudHNcbiAqL1xuZXhwb3J0IHR5cGUgQ3NzU2VsZWN0b3IgPSAoc3RyaW5nIHwgU2VsZWN0b3JGbGFncylbXTtcblxuLyoqXG4gKiBBIGxpc3Qgb2YgQ3NzU2VsZWN0b3JzLlxuICpcbiAqIEEgZGlyZWN0aXZlIG9yIGNvbXBvbmVudCBjYW4gaGF2ZSBtdWx0aXBsZSBzZWxlY3RvcnMuIFRoaXMgdHlwZSBpcyB1c2VkIGZvclxuICogZGlyZWN0aXZlIGRlZnMgc28gYW55IG9mIHRoZSBzZWxlY3RvcnMgaW4gdGhlIGxpc3Qgd2lsbCBtYXRjaCB0aGF0IGRpcmVjdGl2ZS5cbiAqXG4gKiBPcmlnaW5hbDogJ2Zvcm0sIFtuZ0Zvcm1dJ1xuICogUGFyc2VkOiBbWydmb3JtJ10sIFsnJywgJ25nRm9ybScsICcnXV1cbiAqL1xuZXhwb3J0IHR5cGUgQ3NzU2VsZWN0b3JMaXN0ID0gQ3NzU2VsZWN0b3JbXTtcblxuLyoqIEZsYWdzIHVzZWQgdG8gYnVpbGQgdXAgQ3NzU2VsZWN0b3JzICovXG5leHBvcnQgY29uc3QgZW51bSBTZWxlY3RvckZsYWdzIHtcbiAgLyoqIEluZGljYXRlcyB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgbmVnYXRpdmUgc2VsZWN0b3IgKi9cbiAgTk9UID0gMGIwMDAxLFxuXG4gIC8qKiBNb2RlIGZvciBtYXRjaGluZyBhdHRyaWJ1dGVzICovXG4gIEFUVFJJQlVURSA9IDBiMDAxMCxcblxuICAvKiogTW9kZSBmb3IgbWF0Y2hpbmcgdGFnIG5hbWVzICovXG4gIEVMRU1FTlQgPSAwYjAxMDAsXG5cbiAgLyoqIE1vZGUgZm9yIG1hdGNoaW5nIGNsYXNzIG5hbWVzICovXG4gIENMQVNTID0gMGIxMDAwLFxufVxuXG4vLyBOb3RlOiBUaGlzIGhhY2sgaXMgbmVjZXNzYXJ5IHNvIHdlIGRvbid0IGVycm9uZW91c2x5IGdldCBhIGNpcmN1bGFyIGRlcGVuZGVuY3lcbi8vIGZhaWx1cmUgYmFzZWQgb24gdHlwZXMuXG5leHBvcnQgY29uc3QgdW51c2VkVmFsdWVFeHBvcnRUb1BsYWNhdGVBamQgPSAxO1xuIl19
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
* Once the styling context is created then single and multi properties can be stored within it.
|
|
42
42
|
* For this to happen, the following function needs to be called:
|
|
43
43
|
*
|
|
44
|
-
* `
|
|
44
|
+
* `styling` (called with style properties, class properties and a sanitizer + a directive
|
|
45
45
|
* instance).
|
|
46
46
|
*
|
|
47
47
|
* When this instruction is called it will populate the styling context with the provided style
|
|
@@ -112,8 +112,8 @@
|
|
|
112
112
|
* values are and how they work.
|
|
113
113
|
*
|
|
114
114
|
* Each time a binding property is updated (whether it be through a single
|
|
115
|
-
* property instruction like `
|
|
116
|
-
* `
|
|
115
|
+
* property instruction like `styleProp`, `classProp`,
|
|
116
|
+
* `styleMap` or `classMap`) then the values in the context will be updated as
|
|
117
117
|
* well.
|
|
118
118
|
*
|
|
119
119
|
* If for example `[style.width]` updates to `555px` then its value will be reflected
|
|
@@ -132,9 +132,9 @@
|
|
|
132
132
|
*
|
|
133
133
|
* Despite the context being updated, nothing has been rendered on screen (not styles or
|
|
134
134
|
* classes have been set on the element). To kick off rendering for an element the following
|
|
135
|
-
* function needs to be run `
|
|
135
|
+
* function needs to be run `stylingApply`.
|
|
136
136
|
*
|
|
137
|
-
* `
|
|
137
|
+
* `stylingApply` will run through the context and find each dirty value and render them onto
|
|
138
138
|
* the element. Once complete, all styles/classes will be set to clean. Because of this, the render
|
|
139
139
|
* function will now know not to rerun itself again if called again unless new style/class values
|
|
140
140
|
* have changed.
|
|
@@ -148,11 +148,12 @@
|
|
|
148
148
|
* Each of the following instructions supports accepting a directive instance as an input parameter:
|
|
149
149
|
*
|
|
150
150
|
* - `elementHostAttrs`
|
|
151
|
-
* - `
|
|
152
|
-
* - `
|
|
153
|
-
* - `
|
|
154
|
-
* - `
|
|
155
|
-
* - `
|
|
151
|
+
* - `styling`
|
|
152
|
+
* - `styleProp`
|
|
153
|
+
* - `classProp`
|
|
154
|
+
* - `styleMap`
|
|
155
|
+
* - `classMap`
|
|
156
|
+
* - `stylingApply`
|
|
156
157
|
*
|
|
157
158
|
* Each time a directive value is passed in, it will be converted into an index by examining the
|
|
158
159
|
* directive registry (which lives in the context configuration area). The index is then used
|
|
@@ -246,7 +247,7 @@
|
|
|
246
247
|
*
|
|
247
248
|
* ## Rendering
|
|
248
249
|
* The rendering mechanism (when the styling data is applied on screen) occurs via the
|
|
249
|
-
* `
|
|
250
|
+
* `stylingApply` function and is designed to run after **all** styling functions have been
|
|
250
251
|
* evaluated. The rendering algorithm will loop over the context and only apply the styles that are
|
|
251
252
|
* flagged as dirty (either because they are new, updated or have been removed via multi or
|
|
252
253
|
* single bindings).
|
|
@@ -280,7 +281,7 @@ if (false) {
|
|
|
280
281
|
* the styling is applied).
|
|
281
282
|
*
|
|
282
283
|
* This queue is used when any `hostStyling` instructions are executed from the `hostBindings`
|
|
283
|
-
* function. Template-level styling functions (e.g. `
|
|
284
|
+
* function. Template-level styling functions (e.g. `styleMap` and `classProp`)
|
|
284
285
|
* do not make use of this queue (they are applied to the styling context immediately).
|
|
285
286
|
*
|
|
286
287
|
* Due to the nature of how components/directives are evaluated, directives (both parent and
|
|
@@ -314,7 +315,7 @@ if (false) {
|
|
|
314
315
|
* inside of `renderStyling`).
|
|
315
316
|
*
|
|
316
317
|
* Right now each directive's hostBindings function, as well the template function, both
|
|
317
|
-
* call `
|
|
318
|
+
* call `stylingApply()` and `hostStylingApply()`. The fact that this is called
|
|
318
319
|
* multiple times for the same element (b/c of change detection) causes some issues. To avoid
|
|
319
320
|
* having styling code be rendered on an element multiple times, the `HostInstructionsQueue`
|
|
320
321
|
* reserves a slot for a reference pointing to the very last directive that was registered and
|
|
@@ -614,11 +615,11 @@ export { DirectiveOwnerAndPlayerBuilderIndex };
|
|
|
614
615
|
/**
|
|
615
616
|
* The default directive styling index value for template-based bindings.
|
|
616
617
|
*
|
|
617
|
-
* All host-level bindings (e.g. `hostStyleProp` and `
|
|
618
|
+
* All host-level bindings (e.g. `hostStyleProp` and `hostClassMap`) are
|
|
618
619
|
* assigned a directive styling index value based on the current directive
|
|
619
620
|
* uniqueId and the directive super-class inheritance depth. But for template
|
|
620
621
|
* bindings they always have the same directive styling index value.
|
|
621
622
|
* @type {?}
|
|
622
623
|
*/
|
|
623
624
|
export const DEFAULT_TEMPLATE_DIRECTIVE_INDEX = 0;
|
|
624
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy9zdHlsaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdVFBLG9DQW9FQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdERCwyQ0FBNEY7Ozs7Ozs7SUFNMUYsdUNBQXdDO0lBQ3hDLHNCQUF1QjtJQUN2Qix1QkFBd0I7SUFDeEIsc0JBQXVCO0lBQ3ZCLGVBQWdCO0lBQ2hCLE9BQVE7Ozs7Ozs7Ozs7O0FBVVYsMENBR0M7Ozs7Ozs7OztJQTBHQzs7T0FFRztJQUNILDJCQUE0QjtJQUU1Qjs7Ozs7Ozs7O09BU0c7SUFDSCw0QkFBNkI7SUFFN0I7O09BRUc7SUFDSCx3QkFBeUI7SUFFekI7O09BRUc7SUFDSCxhQUFjO0lBRWQ7O09BRUc7SUFDSCxjQUFlO0lBRWY7OztPQUdHO0lBQ0gsdUJBQXdCO0lBRXhCOztPQUVHO0lBQ0gseUJBQTRCO0lBQzVCLHVCQUF3QjtJQUV4Qjs7T0FFRztJQUNILE9BQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JWLDZDQUdDOzs7Ozs7Ozs7SUFPQyw4QkFBK0I7SUFDL0IsdUJBQXdCO0lBQ3hCLE9BQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCViw0Q0FHQzs7Ozs7Ozs7O0lBT0Msc0JBQXVCO0lBQ3ZCLHVCQUF3QjtJQUN4QixxQkFBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5RHhCLDBDQUVDOzs7Ozs7O0lBR0MsdUJBQXdCO0lBQ3hCLHNCQUF1QjtJQUN2QixrQkFBbUI7SUFDbkIsc0JBQXVCO0lBQ3ZCLGNBQWU7SUFDZixtQkFBb0I7SUFDcEIsT0FBUTs7Ozs7SUFRUiw0QkFBNEI7SUFDNUIsT0FBYztJQUNkLHNEQUFzRDtJQUN0RCxRQUFlO0lBQ2Ysa0RBQWtEO0lBQ2xELFFBQWU7SUFDZiwwREFBMEQ7SUFDMUQsV0FBa0I7SUFDbEIsd0VBQXdFO0lBQ3hFLHNCQUE2QjtJQUM3QixzRUFBc0U7SUFDdEUsMkJBQWlDO0lBQ2pDLGVBQWdCO0lBQ2hCLGdDQUFnQztJQUNoQyxXQUFpQjs7Ozs7SUFLakIseUVBQXlFO0lBQ3pFLDBEQUEwRDtJQUMxRCxrQkFBbUI7SUFDbkIseUZBQXlGO0lBQ3pGLHFCQUFzQjtJQUN0Qiw2RUFBNkU7SUFDN0UsNEJBQTZCO0lBQzdCLHlFQUF5RTtJQUN6RSw2QkFBOEI7SUFDOUIsNkJBQThCO0lBQzlCLGtFQUFrRTtJQUNsRSw0QkFBNkI7SUFDN0IsaUdBQWlHO0lBQ2pHLHNEQUFzRDtJQUN0RCxxQkFBc0I7SUFDdEIscUVBQXFFO0lBQ3JFLG9CQUFxQjtJQUNyQixpR0FBaUc7SUFDakcseUVBQXlFO0lBQ3pFLHdCQUF5QjtJQUN6QixnQkFBaUI7SUFDakIsd0VBQXdFO0lBQ3hFLDZCQUE4QjtJQUM5QixjQUFlO0lBQ2YsaUJBQWtCO0lBQ2xCLGNBQWU7SUFDZiwyQkFBNEI7SUFDNUIsZ0ZBQWdGO0lBQ2hGLE9BQVE7SUFDUixvREFBb0Q7SUFDcEQsZ0JBQWlCO0lBQ2pCLG1DQUFtQztJQUNuQyxjQUEwQjs7Ozs7SUFZMUIsZ0JBQWlCO0lBQ2pCLGNBQTRCOzs7Ozs7Ozs7Ozs7QUFXOUIsTUFBTSxPQUFPLGdDQUFnQyxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge1N0eWxlU2FuaXRpemVGbn0gZnJvbSAnLi4vLi4vc2FuaXRpemF0aW9uL3N0eWxlX3Nhbml0aXplcic7XG5pbXBvcnQge1JFbGVtZW50fSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlbmRlcmVyJztcbmltcG9ydCB7TENvbnRhaW5lcn0gZnJvbSAnLi9jb250YWluZXInO1xuaW1wb3J0IHtQbGF5ZXJDb250ZXh0fSBmcm9tICcuL3BsYXllcic7XG5pbXBvcnQge0xWaWV3fSBmcm9tICcuL3ZpZXcnO1xuXG5cbi8qKlxuICogVGhlIHN0eWxpbmcgY29udGV4dCBhY3RzIGFzIGEgc3R5bGluZyBtYW5pZmVzdCAoc2hhcGVkIGFzIGFuIGFycmF5KSBmb3IgZGV0ZXJtaW5pbmcgd2hpY2hcbiAqIHN0eWxpbmcgcHJvcGVydGllcyBoYXZlIGJlZW4gYXNzaWduZWQgdmlhIHRoZSBwcm92aWRlZCBgdXBkYXRlU3R5bGluZ01hcGAsIGB1cGRhdGVTdHlsZVByb3BgXG4gKiBhbmQgYHVwZGF0ZUNsYXNzUHJvcGAgZnVuY3Rpb25zLiBJdCBhbHNvIHN0b3JlcyB0aGUgc3RhdGljIHN0eWxlL2NsYXNzIHZhbHVlcyB0aGF0IHdlcmVcbiAqIGV4dHJhY3RlZCBmcm9tIHRoZSB0ZW1wbGF0ZSBieSB0aGUgY29tcGlsZXIuXG4gKlxuICogQSBjb250ZXh0IGlzIGNyZWF0ZWQgYnkgQW5ndWxhciB3aGVuOlxuICogMS4gQW4gZWxlbWVudCBjb250YWlucyBzdGF0aWMgc3R5bGluZyB2YWx1ZXMgKGxpa2Ugc3R5bGU9XCIuLi5cIiBvciBjbGFzcz1cIi4uLlwiKVxuICogMi4gQW4gZWxlbWVudCBjb250YWlucyBzaW5nbGUgcHJvcGVydHkgYmluZGluZyB2YWx1ZXMgKGxpa2UgW3N0eWxlLnByb3BdPVwieFwiIG9yXG4gKiBbY2xhc3MucHJvcF09XCJ5XCIpXG4gKiAzLiBBbiBlbGVtZW50IGNvbnRhaW5zIG11bHRpIHByb3BlcnR5IGJpbmRpbmcgdmFsdWVzIChsaWtlIFtzdHlsZV09XCJ4XCIgb3IgW2NsYXNzXT1cInlcIilcbiAqIDQuIEEgZGlyZWN0aXZlIGNvbnRhaW5zIGhvc3QgYmluZGluZ3MgZm9yIHN0YXRpYywgc2luZ2xlIG9yIG11bHRpIHN0eWxpbmcgcHJvcGVydGllcy9iaW5kaW5ncy5cbiAqIDUuIEFuIGFuaW1hdGlvbiBwbGF5ZXIgaXMgYWRkZWQgdG8gYW4gZWxlbWVudCB2aWEgYGFkZFBsYXllcmBcbiAqXG4gKiBOb3RlIHRoYXQgZXZlbiBpZiBhbiBlbGVtZW50IGNvbnRhaW5zIHN0YXRpYyBzdHlsaW5nIHRoZW4gdGhpcyBjb250ZXh0IHdpbGwgYmUgY3JlYXRlZCBhbmRcbiAqIGF0dGFjaGVkIHRvIGl0LiBUaGUgcmVhc29uIHdoeSB0aGlzIGhhcHBlbnMgKGluc3RlYWQgb2YgdHJlYXRpbmcgc3R5bGVzL2NsYXNzZXMgYXMgcmVndWxhclxuICogSFRNTCBhdHRyaWJ1dGVzKSBpcyBiZWNhdXNlIHRoZSBzdHlsZS9jbGFzcyBiaW5kaW5ncyBtdXN0IGJlIGFibGUgdG8gZGVmYXVsdCB0aGVtc2VsdmVzIGJhY2tcbiAqIHRvIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGljIHZhbHVlcyB3aGVuIHRoZXkgYXJlIHNldCB0byBudWxsLlxuICpcbiAqIFNheSBmb3IgZXhhbXBsZSB3ZSBoYXZlIHRoaXM6XG4gKiBgYGBcbiAqIDwhLS0gd2hlbiBgbXlXaWR0aEV4cD1udWxsYCB0aGVuIGEgd2lkdGggb2YgYDEwMHB4YFxuICogICAgICB3aWxsIGJlIHVzZWQgYSBkZWZhdWx0IHZhbHVlIGZvciB3aWR0aCAtLT5cbiAqIDxkaXYgc3R5bGU9XCJ3aWR0aDoxMDBweFwiIFtzdHlsZS53aWR0aF09XCJteVdpZHRoRXhwXCI+PC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBFdmVuIGluIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlcmUgYXJlIG5vIGJpbmRpbmdzLCB0aGUgc3RhdGljIHN0eWxpbmcgaXMgc3RpbGwgcGxhY2VkIGludG8gdGhlXG4gKiBjb250ZXh0IGJlY2F1c2UgdGhlcmUgbWF5IGJlIGFub3RoZXIgZGlyZWN0aXZlIG9uIHRoZSBzYW1lIGVsZW1lbnQgdGhhdCBoYXMgc3R5bGluZy5cbiAqXG4gKiBXaGVuIEFuZ3VsYXIgaW5pdGlhbGl6ZXMgc3R5bGluZyBkYXRhIGZvciBhbiBlbGVtZW50IHRoZW4gaXQgd2lsbCBmaXJzdCByZWdpc3RlciB0aGUgc3RhdGljXG4gKiBzdHlsaW5nIHZhbHVlcyBvbiB0aGUgZWxlbWVudCB1c2luZyBvbmUgb2YgdGhlc2UgdHdvIGluc3RydWN0aW9uczpcbiAqXG4gKiAxLiBlbGVtZW50U3RhcnQgb3IgZWxlbWVudCAod2l0aGluIHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbiBvZiBhIGNvbXBvbmVudClcbiAqIDIuIGVsZW1lbnRIb3N0QXR0cnMgKGZvciBkaXJlY3RpdmUgaG9zdCBiaW5kaW5ncylcbiAqXG4gKiBJbiBlaXRoZXIgY2FzZSwgYSBzdHlsaW5nIGNvbnRleHQgd2lsbCBiZSBjcmVhdGVkIGFuZCBzdG9yZWQgd2l0aGluIGFuIGVsZW1lbnQncyBgTFZpZXdEYXRhYC5cbiAqIE9uY2UgdGhlIHN0eWxpbmcgY29udGV4dCBpcyBjcmVhdGVkIHRoZW4gc2luZ2xlIGFuZCBtdWx0aSBwcm9wZXJ0aWVzIGNhbiBiZSBzdG9yZWQgd2l0aGluIGl0LlxuICogRm9yIHRoaXMgdG8gaGFwcGVuLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZDpcbiAqXG4gKiBgZWxlbWVudFN0eWxpbmdgIChjYWxsZWQgd2l0aCBzdHlsZSBwcm9wZXJ0aWVzLCBjbGFzcyBwcm9wZXJ0aWVzIGFuZCBhIHNhbml0aXplciArIGEgZGlyZWN0aXZlXG4gKiBpbnN0YW5jZSkuXG4gKlxuICogV2hlbiB0aGlzIGluc3RydWN0aW9uIGlzIGNhbGxlZCBpdCB3aWxsIHBvcHVsYXRlIHRoZSBzdHlsaW5nIGNvbnRleHQgd2l0aCB0aGUgcHJvdmlkZWQgc3R5bGVcbiAqIGFuZCBjbGFzcyBuYW1lcyBpbnRvIHRoZSBjb250ZXh0LlxuICpcbiAqIFRoZSBjb250ZXh0IGl0c2VsZiBsb29rcyBsaWtlIHRoaXM6XG4gKlxuICogY29udGV4dCA9IFtcbiAqICAgLy8gMC04OiBoZWFkZXIgdmFsdWVzIChhYm91dCA4IGVudHJpZXMgb2YgY29uZmlndXJhdGlvbiBkYXRhKVxuICogICAvLyA5KzogdGhpcyBpcyB3aGVyZSBlYWNoIGVudHJ5IGlzIHN0b3JlZDpcbiAqIF1cbiAqXG4gKiBMZXQncyBzYXkgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHRlbXBsYXRlIGNvZGU6XG4gKlxuICogYGBgXG4gKiA8ZGl2IGNsYXNzPVwiZm9vIGJhclwiXG4gKiAgICAgIHN0eWxlPVwid2lkdGg6MjAwcHg7IGNvbG9yOnJlZFwiXG4gKiAgICAgIFtzdHlsZS53aWR0aF09XCJteVdpZHRoRXhwXCJcbiAqICAgICAgW3N0eWxlLmhlaWdodF09XCJteUhlaWdodEV4cFwiXG4gKiAgICAgIFtjbGFzcy5iYXpdPVwibXlCYXpFeHBcIj5cbiAqIGBgYFxuICpcbiAqIFRoZSBjb250ZXh0IGdlbmVyYXRlZCBmcm9tIHRoZXNlIHZhbHVlcyB3aWxsIGxvb2sgbGlrZSB0aGlzIChub3RlIHRoYXRcbiAqIGZvciBlYWNoIGJpbmRpbmcgbmFtZSAodGhlIGNsYXNzIGFuZCBzdHlsZSBiaW5kaW5ncykgdGhlIHZhbHVlcyB3aWxsXG4gKiBiZSBpbnNlcnRlZCB0d2ljZSBpbnRvIHRoZSBhcnJheSAob25jZSBmb3Igc2luZ2xlIHByb3BlcnR5IGVudHJpZXMgYW5kXG4gKiBhZ2FpbiBmb3IgbXVsdGkgcHJvcGVydHkgZW50cmllcykuXG4gKlxuICogY29udGV4dCA9IFtcbiAqICAgLy8gMC04OiBoZWFkZXIgdmFsdWVzIChhYm91dCA4IGVudHJpZXMgb2YgY29uZmlndXJhdGlvbiBkYXRhKVxuICogICAvLyA5KzogdGhpcyBpcyB3aGVyZSBlYWNoIGVudHJ5IGlzIHN0b3JlZDpcbiAqXG4gKiAgIC8vIFNJTkdMRSBQUk9QRVJUSUVTXG4gKiAgIGNvbmZpZ0ZvcldpZHRoLFxuICogICAnd2lkdGgnXG4gKiAgIG15V2lkdGhFeHAsIC8vIHRoZSBiaW5kaW5nIHZhbHVlIG5vdCB0aGUgYmluZGluZyBpdHNlbGZcbiAqICAgMCwgLy8gdGhlIGRpcmVjdGl2ZSBvd25lclxuICpcbiAqICAgY29uZmlnRm9ySGVpZ2h0LFxuICogICAnaGVpZ2h0J1xuICogICBteUhlaWdodEV4cCwgLy8gdGhlIGJpbmRpbmcgdmFsdWUgbm90IHRoZSBiaW5kaW5nIGl0c2VsZlxuICogICAwLCAvLyB0aGUgZGlyZWN0aXZlIG93bmVyXG4gKlxuICogICBjb25maWdGb3JCYXpDbGFzcyxcbiAqICAgJ2JhelxuICogICBteUJhekNsYXNzRXhwLCAvLyB0aGUgYmluZGluZyB2YWx1ZSBub3QgdGhlIGJpbmRpbmcgaXRzZWxmXG4gKiAgIDAsIC8vIHRoZSBkaXJlY3RpdmUgb3duZXJcbiAqXG4gKiAgIC8vIE1VTFRJIFBST1BFUlRJRVNcbiAqICAgY29uZmlnRm9yV2lkdGgsXG4gKiAgICd3aWR0aCdcbiAqICAgbXlXaWR0aEV4cCwgLy8gdGhlIGJpbmRpbmcgdmFsdWUgbm90IHRoZSBiaW5kaW5nIGl0c2VsZlxuICogICAwLCAvLyB0aGUgZGlyZWN0aXZlIG93bmVyXG4gKlxuICogICBjb25maWdGb3JIZWlnaHQsXG4gKiAgICdoZWlnaHQnXG4gKiAgIG15SGVpZ2h0RXhwLCAvLyB0aGUgYmluZGluZyB2YWx1ZSBub3QgdGhlIGJpbmRpbmcgaXRzZWxmXG4gKiAgIDAsIC8vIHRoZSBkaXJlY3RpdmUgb3duZXJcbiAqXG4gKiAgIGNvbmZpZ0ZvckJhekNsYXNzLFxuICogICAnYmF6XG4gKiAgIG15QmF6Q2xhc3NFeHAsIC8vIHRoZSBiaW5kaW5nIHZhbHVlIG5vdCB0aGUgYmluZGluZyBpdHNlbGZcbiAqICAgMCwgLy8gdGhlIGRpcmVjdGl2ZSBvd25lclxuICogXVxuICpcbiAqIFRoZSBjb25maWd1cmF0aW9uIHZhbHVlcyBhcmUgbGVmdCBvdXQgb2YgdGhlIGV4YW1wbGUgYWJvdmUgYmVjYXVzZVxuICogdGhlIG9yZGVyaW5nIG9mIHRoZW0gY291bGQgY2hhbmdlIGJldHdlZW4gY29kZSBwYXRjaGVzLiBQbGVhc2UgcmVhZCB0aGVcbiAqIGRvY3VtZW50YXRpb24gYmVsb3cgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmQgb2Ygd2hhdCB0aGUgY29uZmlndXJhdGlvblxuICogdmFsdWVzIGFyZSBhbmQgaG93IHRoZXkgd29yay5cbiAqXG4gKiBFYWNoIHRpbWUgYSBiaW5kaW5nIHByb3BlcnR5IGlzIHVwZGF0ZWQgKHdoZXRoZXIgaXQgYmUgdGhyb3VnaCBhIHNpbmdsZVxuICogcHJvcGVydHkgaW5zdHJ1Y3Rpb24gbGlrZSBgZWxlbWVudFN0eWxlUHJvcGAsIGBlbGVtZW50Q2xhc3NQcm9wYCBvclxuICogYGVsZW1lbnRTdHlsaW5nTWFwYCkgdGhlbiB0aGUgdmFsdWVzIGluIHRoZSBjb250ZXh0IHdpbGwgYmUgdXBkYXRlZCBhc1xuICogd2VsbC5cbiAqXG4gKiBJZiBmb3IgZXhhbXBsZSBgW3N0eWxlLndpZHRoXWAgdXBkYXRlcyB0byBgNTU1cHhgIHRoZW4gaXRzIHZhbHVlIHdpbGwgYmUgcmVmbGVjdGVkXG4gKiBpbiB0aGUgY29udGV4dCBhcyBzbzpcbiAqXG4gKiBjb250ZXh0ID0gW1xuICogICAvLyAuLi5cbiAqICAgY29uZmlnRm9yV2lkdGgsIC8vIHRoaXMgd2lsbCBiZSBtYXJrZWQgRElSVFlcbiAqICAgJ3dpZHRoJ1xuICogICAnNTU1cHgnLFxuICogICAwLFxuICogICAvLy4uXG4gKiBdXG4gKlxuICogVGhlIGNvbnRleHQgYW5kIGRpcmVjdGl2ZSBkYXRhIHdpbGwgYWxzbyBiZSBtYXJrZWQgZGlydHkuXG4gKlxuICogRGVzcGl0ZSB0aGUgY29udGV4dCBiZWluZyB1cGRhdGVkLCBub3RoaW5nIGhhcyBiZWVuIHJlbmRlcmVkIG9uIHNjcmVlbiAobm90IHN0eWxlcyBvclxuICogY2xhc3NlcyBoYXZlIGJlZW4gc2V0IG9uIHRoZSBlbGVtZW50KS4gVG8ga2ljayBvZmYgcmVuZGVyaW5nIGZvciBhbiBlbGVtZW50IHRoZSBmb2xsb3dpbmdcbiAqIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJ1biBgZWxlbWVudFN0eWxpbmdBcHBseWAuXG4gKlxuICogYGVsZW1lbnRTdHlsaW5nQXBwbHlgIHdpbGwgcnVuIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIGZpbmQgZWFjaCBkaXJ0eSB2YWx1ZSBhbmQgcmVuZGVyIHRoZW0gb250b1xuICogdGhlIGVsZW1lbnQuIE9uY2UgY29tcGxldGUsIGFsbCBzdHlsZXMvY2xhc3NlcyB3aWxsIGJlIHNldCB0byBjbGVhbi4gQmVjYXVzZSBvZiB0aGlzLCB0aGUgcmVuZGVyXG4gKiBmdW5jdGlvbiB3aWxsIG5vdyBrbm93IG5vdCB0byByZXJ1biBpdHNlbGYgYWdhaW4gaWYgY2FsbGVkIGFnYWluIHVubGVzcyBuZXcgc3R5bGUvY2xhc3MgdmFsdWVzXG4gKiBoYXZlIGNoYW5nZWQuXG4gKlxuICogIyMgRGlyZWN0aXZlc1xuICogRGlyZWN0aXZlIHN0eWxlL2NsYXNzIHZhbHVlcyAod2hpY2ggYXJlIHByb3ZpZGVkIHRocm91Z2ggaG9zdCBiaW5kaW5ncykgYXJlIGFsc28gc3VwcG9ydGVkIGFuZFxuICogaG91c2VkIHdpdGhpbiB0aGUgc2FtZSBzdHlsaW5nIGNvbnRleHQgYXMgYXJlIHRlbXBsYXRlLWxldmVsIHN0eWxlL2NsYXNzIHByb3BlcnRpZXMvYmluZGluZ3NcbiAqIFNvIGxvbmcgYXMgdGhleSBhcmUgYWxsIGFzc2lnbmVkIHRvIHRoZSBzYW1lIGVsZW1lbnQsIGJvdGggZGlyZWN0aXZlLWxldmVsIGFuZCB0ZW1wbGF0ZS1sZXZlbFxuICogc3R5bGluZyBiaW5kaW5ncyBzaGFyZSB0aGUgc2FtZSBjb250ZXh0LlxuICpcbiAqIEVhY2ggb2YgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgc3VwcG9ydHMgYWNjZXB0aW5nIGEgZGlyZWN0aXZlIGluc3RhbmNlIGFzIGFuIGlucHV0IHBhcmFtZXRlcjpcbiAqXG4gKiAtIGBlbGVtZW50SG9zdEF0dHJzYFxuICogLSBgZWxlbWVudFN0eWxpbmdgXG4gKiAtIGBlbGVtZW50U3R5bGVQcm9wYFxuICogLSBgZWxlbWVudENsYXNzUHJvcGBcbiAqIC0gYGVsZW1lbnRTdHlsaW5nTWFwYFxuICogLSBgZWxlbWVudFN0eWxpbmdBcHBseWBcbiAqXG4gKiBFYWNoIHRpbWUgYSBkaXJlY3RpdmUgdmFsdWUgaXMgcGFzc2VkIGluLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGFuIGluZGV4IGJ5IGV4YW1pbmluZyB0aGVcbiAqIGRpcmVjdGl2ZSByZWdpc3RyeSAod2hpY2ggbGl2ZXMgaW4gdGhlIGNvbnRleHQgY29uZmlndXJhdGlvbiBhcmVhKS4gVGhlIGluZGV4IGlzIHRoZW4gdXNlZFxuICogdG8gaGVscCBzaW5nbGUgc3R5bGUgcHJvcGVydGllcyBmaWd1cmUgb3V0IHdoZXJlIGEgdmFsdWUgaXMgbG9jYXRlZCBpbiB0aGUgY29udGV4dC5cbiAqXG4gKlxuICogIyMgU2luZ2xlLWxldmVsIHN0eWxpbmcgYmluZGluZ3MgKGBbc3R5bGUucHJvcF1gIGFuZCBgW2NsYXNzLm5hbWVdYClcbiAqXG4gKiBCb3RoIGBbc3R5bGUucHJvcF1gIGFuZCBgW2NsYXNzLm5hbWVdYCBiaW5kaW5ncyBhcmUgcnVuIHRocm91Z2ggdGhlIGB1cGRhdGVTdHlsZVByb3BgXG4gKiBhbmQgYHVwZGF0ZUNsYXNzUHJvcGAgZnVuY3Rpb25zIHJlc3BlY3RpdmVseS4gVGhleSB3b3JrIGJ5IGV4YW1pbmluZyB0aGUgcHJvdmlkZWRcbiAqIGBvZmZzZXRgIHZhbHVlIGFuZCBhcmUgYWJsZSB0byBsb2NhdGUgdGhlIGV4YWN0IHNwb3QgaW4gdGhlIGNvbnRleHQgd2hlcmUgdGhlXG4gKiBtYXRjaGluZyBzdHlsZSBpcyBsb2NhdGVkLlxuICpcbiAqIEJvdGggYFtzdHlsZS5wcm9wXWAgYW5kIGBbY2xhc3MubmFtZV1gIGJpbmRpbmdzIGFyZSBhYmxlIHRvIHByb2Nlc3MgdGhlc2UgdmFsdWVzXG4gKiBmcm9tIGRpcmVjdGl2ZSBob3N0IGJpbmRpbmdzLiBXaGVuIGV2YWx1YXRlZCAoZnJvbSB0aGUgaG9zdCBiaW5kaW5nIGZ1bmN0aW9uKSB0aGVcbiAqIGBkaXJlY3RpdmVSZWZgIHZhbHVlIGlzIHRoZW4gcGFzc2VkIGluLlxuICpcbiAqIElmIHR3byBkaXJlY3RpdmVzIG9yIGEgZGlyZWN0aXZlICsgYSB0ZW1wbGF0ZSBiaW5kaW5nIGJvdGggd3JpdGUgdG8gdGhlIHNhbWUgc3R5bGUvY2xhc3NcbiAqIGJpbmRpbmcgdGhlbiB0aGUgc3R5bGluZyBjb250ZXh0IGNvZGUgd2lsbCBkZWNpZGUgd2hpY2ggb25lIHdpbnMgYmFzZWQgb24gdGhlIGZvbGxvd2luZ1xuICogcnVsZTpcbiAqXG4gKiAxLiBJZiB0aGUgdGVtcGxhdGUgYmluZGluZyBoYXMgYSB2YWx1ZSB0aGVuIGl0IGFsd2F5cyB3aW5zXG4gKiAyLiBPdGhlcndpc2Ugd2hpY2hldmVyIGZpcnN0LXJlZ2lzdGVyZWQgZGlyZWN0aXZlIHRoYXQgaGFzIHRoYXQgdmFsdWUgZmlyc3Qgd2lsbCB3aW5cbiAqXG4gKiBUaGUgY29kZSBleGFtcGxlIGhlbHBzIG1ha2UgdGhpcyBjbGVhcjpcbiAqXG4gKiBgYGBcbiAqIDwhLS1cbiAqIDxkaXYgW3N0eWxlLndpZHRoXT1cIm15V2lkdGhcIlxuICogICAgICBbbXktd2lkdGgtZGlyZWN0aXZlXT1cIic2MDBweCdcIj5cbiAqIC0tPlxuICpcbiAqIEBEaXJlY3RpdmUoe1xuICogIHNlbGVjdG9yOiAnW215LXdpZHRoLWRpcmVjdGl2ZSddXG4gKiB9KVxuICogY2xhc3MgTXlXaWR0aERpcmVjdGl2ZSB7XG4gKiAgIEBJbnB1dCgnbXktd2lkdGgtZGlyZWN0aXZlJylcbiAqICAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpXG4gKiAgIHB1YmxpYyB3aWR0aCA9IG51bGw7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBTaW5jZSB0aGVyZSBpcyBhIHN0eWxlIGJpbmRpbmcgZm9yIHdpZHRoIHByZXNlbnQgb24gdGhlIGVsZW1lbnQgKGBbc3R5bGUud2lkdGhdYCkgdGhlblxuICogaXQgd2lsbCBhbHdheXMgd2luIG92ZXIgdGhlIHdpZHRoIGJpbmRpbmcgdGhhdCBpcyBwcmVzZW50IGFzIGEgaG9zdCBiaW5kaW5nIHdpdGhpblxuICogdGhlIGBNeVdpZHRoRGlyZWN0aXZlYC4gSG93ZXZlciwgaWYgYFtzdHlsZS53aWR0aF1gIHJlbmRlcnMgYXMgYG51bGxgIChzbyBgbXlXaWR0aD1udWxsYClcbiAqIHRoZW4gdGhlIGBNeVdpZHRoRGlyZWN0aXZlYCB3aWxsIGJlIGFibGUgdG8gd3JpdGUgdG8gdGhlIGB3aWR0aGAgc3R5bGUgd2l0aGluIHRoZSBjb250ZXh0LlxuICogU2ltcGx5IHB1dCwgd2hpY2hldmVyIGRpcmVjdGl2ZSB3cml0ZXMgdG8gYSB2YWx1ZSBmaXJzdCBlbmRzIHVwIGhhdmluZyBvd25lcnNoaXAgb2YgaXQgYXNcbiAqIGxvbmcgYXMgdGhlIHRlbXBsYXRlIGRpZG4ndCBzZXQgYW55dGhpbmcuXG4gKlxuICogVGhlIHdheSBpbiB3aGljaCB0aGUgb3duZXJzaGlwIGlzIGZhY2lsaXRhdGVkIGlzIHRocm91Z2ggaW5kZXggdmFsdWUuIFRoZSBlYXJsaWVzdCBkaXJlY3RpdmVzXG4gKiBnZXQgdGhlIHNtYWxsZXN0IGluZGV4IHZhbHVlcyAod2l0aCAwIGJlaW5nIHJlc2VydmVkIGZvciB0aGUgdGVtcGxhdGUgZWxlbWVudCBiaW5kaW5ncykuIEVhY2hcbiAqIHRpbWUgYSB2YWx1ZSBpcyB3cml0dGVuIGZyb20gYSBkaXJlY3RpdmUgb3IgdGhlIHRlbXBsYXRlIGJpbmRpbmdzLCB0aGUgdmFsdWUgaXRzZWxmIGdldHNcbiAqIGFzc2lnbmVkIHRoZSBkaXJlY3RpdmUgaW5kZXggdmFsdWUgaW4gaXRzIGRhdGEuIElmIGFub3RoZXIgZGlyZWN0aXZlIHdyaXRlcyBhIHZhbHVlIGFnYWluIHRoZW5cbiAqIGl0cyBkaXJlY3RpdmUgaW5kZXggZ2V0cyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBkaXJlY3RpdmUgaW5kZXggdGhhdCBleGlzdHMgb24gdGhlIGVsZW1lbnQuIE9ubHlcbiAqIHdoZW4gdGhlIG5ldyB2YWx1ZSdzIGRpcmVjdGl2ZSBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIGRpcmVjdGl2ZSBpbmRleCB0aGVuIHRoZSBuZXdcbiAqIHZhbHVlIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgY29udGV4dC4gQnV0LCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbnVsbCB0aGVuIHRoZSBuZXcgdmFsdWUgaXNcbiAqIHdyaXR0ZW4gYnkgdGhlIGxlc3MgaW1wb3J0YW50IGRpcmVjdGl2ZS5cbiAqXG4gKiBFYWNoIGRpcmVjdGl2ZSBhbHNvIGhhcyBpdHMgb3duIHNhbml0aXplciBhbmQgZGlydHkgZmxhZ3MuIFRoZXNlIHZhbHVlcyBhcmUgY29uc3VtZWQgd2l0aGluIHRoZVxuICogcmVuZGVyaW5nIGZ1bmN0aW9uLlxuICpcbiAqXG4gKiAjIyBNdWx0aS1sZXZlbCBzdHlsaW5nIGJpbmRpbmdzIChgW3N0eWxlXWAgYW5kIGBbY2xhc3NdYClcbiAqXG4gKiBNdWx0aS1sZXZlbCBzdHlsaW5nIGJpbmRpbmdzIGFyZSB0cmVhdGVkIGFzIGxlc3MgaW1wb3J0YW50IChsZXNzIHNwZWNpZmljKSBhcyBzaW5nbGUtbGV2ZWxcbiAqIGJpbmRpbmdzICh0aGluZ3MgbGlrZSBgW3N0eWxlLnByb3BdYCBhbmQgYFtjbGFzcy5uYW1lXWApLlxuICpcbiAqIE11bHRpLWxldmVsIGJpbmRpbmdzIGFyZSBzdGlsbCBhcHBsaWVkIHRvIHRoZSBjb250ZXh0IGluIGEgc2ltaWxhciB3YXkgYXMgYXJlIHNpbmdsZSBsZXZlbFxuICogYmluZGluZ3MsIGJ1dCB0aGlzIHByb2Nlc3Mgd29ya3MgYnkgZGlmZmluZyB0aGUgbmV3IG11bHRpLWxldmVsIHZhbHVlcyAod2hpY2ggYXJlIGtleS92YWx1ZVxuICogbWFwcykgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0IG9mIHN0eWxlcyB0aGF0IGxpdmUgaW4gdGhlIGNvbnRleHQuIEVhY2ggdGltZSBhIG5ldyBtYXAgdmFsdWVcbiAqIGlzIGRldGVjdGVkICh2aWEgaWRlbnRpdHkgY2hlY2spIHRoZW4gaXQgd2lsbCBsb29wIHRocm91Z2ggdGhlIHZhbHVlcyBhbmQgZmlndXJlIG91dCB3aGF0XG4gKiBoYXMgY2hhbmdlZCBhbmQgcmVvcmRlciB0aGUgY29udGV4dCBhcnJheSB0byBtYXRjaCB0aGUgb3JkZXJpbmcgb2YgdGhlIGtleXMuIFRoaXMgcmVvcmRlcmluZ1xuICogb2YgdGhlIGNvbnRleHQgbWFrZXMgc3VyZSB0aGF0IGZvbGxvdy11cCB0cmF2ZXJzYWxzIG9mIHRoZSBjb250ZXh0IHdoZW4gdXBkYXRlZCBhZ2FpbnN0IHRoZVxuICoga2V5L3ZhbHVlIG1hcCBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gbyhuKSAod2hlcmUgXCJuXCIgaXMgdGhlIHNpemUgb2YgdGhlIGtleS92YWx1ZSBtYXApLlxuICpcbiAqIElmIGEgYGRpcmVjdGl2ZVJlZmAgdmFsdWUgaXMgcGFzc2VkIGluIHRoZW4gdGhlIHN0eWxpbmcgYWxnb3JpdGhtIGNvZGUgd2lsbCB0YWtlIHRoZSBkaXJlY3RpdmUnc1xuICogcHJpb3JpdGl6YXRpb24gaW5kZXggaW50byBhY2NvdW50IGFuZCB1cGRhdGUgdGhlIHZhbHVlcyB3aXRoIHJlc3BlY3QgdG8gbW9yZSBpbXBvcnRhbnRcbiAqIGRpcmVjdGl2ZXMuIFRoaXMgbWVhbnMgdGhhdCBpZiBhIHZhbHVlIHN1Y2ggYXMgYHdpZHRoYCBpcyB1cGRhdGVkIGluIHR3byBkaWZmZXJlbnQgYFtzdHlsZV1gXG4gKiBiaW5kaW5ncyAoc2F5IG9uZSBvbiB0aGUgdGVtcGxhdGUgYW5kIGFub3RoZXIgd2l0aGluIGEgZGlyZWN0aXZlIHRoYXQgc2l0cyBvbiB0aGUgc2FtZSBlbGVtZW50KVxuICogdGhlbiB0aGUgYWxnb3JpdGhtIHdpbGwgZGVjaWRlIGhvdyB0byB1cGRhdGUgdGhlIHZhbHVlIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgaGV1cmlzdGljOlxuICpcbiAqIDEuIElmIHRoZSB0ZW1wbGF0ZSBiaW5kaW5nIGhhcyBhIHZhbHVlIHRoZW4gaXQgYWx3YXlzIHdpbnNcbiAqIDIuIElmIG5vdCB0aGVuIHdoaWNoZXZlciBmaXJzdC1yZWdpc3RlcmVkIGRpcmVjdGl2ZSB0aGF0IGhhcyB0aGF0IHZhbHVlIGZpcnN0IHdpbGwgd2luXG4gKlxuICogSXQgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgdmFsdWUgaWYgaXQgd2FzIHNldCB0byBgbnVsbGAgYnkgYSBwcmV2aW91cyBkaXJlY3RpdmUgKG9yIHRoZSB0ZW1wbGF0ZSkuXG4gKlxuICogRWFjaCB0aW1lIGEgdmFsdWUgaXMgdXBkYXRlZCAob3IgcmVtb3ZlZCkgdGhlbiB0aGUgY29udGV4dCB3aWxsIGNoYW5nZSBzaGFwZSB0byBiZXR0ZXIgbWF0Y2hcbiAqIHRoZSBvcmRlcmluZyBvZiB0aGUgc3R5bGluZyBkYXRhIGFzIHdlbGwgYXMgdGhlIG9yZGVyaW5nIG9mIGVhY2ggZGlyZWN0aXZlIHRoYXQgY29udGFpbnMgc3R5bGluZ1xuICogZGF0YS4gKFNlZSBgcGF0Y2hTdHlsaW5nTWFwSW50b0NvbnRleHRgIGluc2lkZSBvZiBjbGFzc19hbmRfc3R5bGVfYmluZGluZ3MudHMgdG8gYmV0dGVyXG4gKiB1bmRlcnN0YW5kIGhvdyB0aGlzIHdvcmtzLilcbiAqXG4gKiAjIyBSZW5kZXJpbmdcbiAqIFRoZSByZW5kZXJpbmcgbWVjaGFuaXNtICh3aGVuIHRoZSBzdHlsaW5nIGRhdGEgaXMgYXBwbGllZCBvbiBzY3JlZW4pIG9jY3VycyB2aWEgdGhlXG4gKiBgZWxlbWVudFN0eWxpbmdBcHBseWAgZnVuY3Rpb24gYW5kIGlzIGRlc2lnbmVkIHRvIHJ1biBhZnRlciAqKmFsbCoqIHN0eWxpbmcgZnVuY3Rpb25zIGhhdmUgYmVlblxuICogZXZhbHVhdGVkLiBUaGUgcmVuZGVyaW5nIGFsZ29yaXRobSB3aWxsIGxvb3Agb3ZlciB0aGUgY29udGV4dCBhbmQgb25seSBhcHBseSB0aGUgc3R5bGVzIHRoYXQgYXJlXG4gKiBmbGFnZ2VkIGFzIGRpcnR5IChlaXRoZXIgYmVjYXVzZSB0aGV5IGFyZSBuZXcsIHVwZGF0ZWQgb3IgaGF2ZSBiZWVuIHJlbW92ZWQgdmlhIG11bHRpIG9yXG4gKiBzaW5nbGUgYmluZGluZ3MpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0eWxpbmdDb250ZXh0IGV4dGVuZHNcbiAgICBBcnJheTx7W2tleTogc3RyaW5nXTogYW55fXxudW1iZXJ8c3RyaW5nfGJvb2xlYW58UkVsZW1lbnR8U3R5bGVTYW5pdGl6ZUZufFBsYXllckNvbnRleHR8bnVsbD4ge1xuICAvKipcbiAgICogTG9jYXRpb24gb2YgZWxlbWVudCB0aGF0IGlzIHVzZWQgYXMgYSB0YXJnZXQgZm9yIHRoaXMgY29udGV4dC5cbiAgICovXG4gIFtTdHlsaW5nSW5kZXguRWxlbWVudFBvc2l0aW9uXTogTENvbnRhaW5lcnxMVmlld3xSRWxlbWVudHxudWxsO1xuXG4gIC8qKlxuICAgKiBBIG51bWVyaWMgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmF0aW9uIHN0YXR1cyAod2hldGhlciB0aGUgY29udGV4dCBpcyBkaXJ0eSBvciBub3QpXG4gICAqIG1peGVkIHRvZ2V0aGVyICh1c2luZyBiaXQgc2hpZnRpbmcpIHdpdGggYSBpbmRleCB2YWx1ZSB3aGljaCB0ZWxscyB0aGUgc3RhcnRpbmcgaW5kZXggdmFsdWVcbiAgICogb2Ygd2hlcmUgdGhlIG11bHRpIHN0eWxlIGVudHJpZXMgYmVnaW4uXG4gICAqL1xuICBbU3R5bGluZ0luZGV4Lk1hc3RlckZsYWdQb3NpdGlvbl06IG51bWJlcjtcblxuICAvKipcbiAgICogTG9jYXRpb24gb2YgdGhlIGNvbGxlY3Rpb24gb2YgZGlyZWN0aXZlcyBmb3IgdGhpcyBjb250ZXh0XG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkRpcmVjdGl2ZVJlZ2lzdHJ5UG9zaXRpb25dOiBEaXJlY3RpdmVSZWdpc3RyeVZhbHVlcztcblxuICAvKipcbiAgICogTG9jYXRpb24gb2YgYWxsIHN0YXRpYyBzdHlsZXMgdmFsdWVzXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkluaXRpYWxTdHlsZVZhbHVlc1Bvc2l0aW9uXTogSW5pdGlhbFN0eWxpbmdWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIExvY2F0aW9uIG9mIGFsbCBzdGF0aWMgY2xhc3MgdmFsdWVzXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkluaXRpYWxDbGFzc1ZhbHVlc1Bvc2l0aW9uXTogSW5pdGlhbFN0eWxpbmdWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIEEgbnVtZXJpYyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIGluZGV4IG9mZnNldCB2YWx1ZS4gV2hlbmV2ZXIgYSBzaW5nbGUgY2xhc3MgaXNcbiAgICogYXBwbGllZCAodXNpbmcgYGVsZW1lbnRDbGFzc1Byb3BgKSBpdCBzaG91bGQgaGF2ZSBhbiBzdHlsaW5nIGluZGV4IHZhbHVlIHRoYXQgZG9lc24ndFxuICAgKiBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGFueSBzdHlsZSB2YWx1ZXMgdGhhdCBleGlzdCBpbiB0aGUgY29udGV4dC5cbiAgICovXG4gIFtTdHlsaW5nSW5kZXguU2luZ2xlUHJvcE9mZnNldFBvc2l0aW9uc106IFNpbmdsZVByb3BPZmZzZXRWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXN0IGNsYXNzIHZhbHVlIHRoYXQgd2FzIGludGVycHJldGVkIGJ5IGVsZW1lbnRTdHlsaW5nTWFwLiBUaGlzIGlzIGNhY2hlZFxuICAgKiBTbyB0aGF0IHRoZSBhbGdvcml0aG0gY2FuIGV4aXQgZWFybHkgaW5jYXNlIHRoZSB2YWx1ZSBoYXMgbm90IGNoYW5nZWQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkNhY2hlZE11bHRpQ2xhc3Nlc106IGFueXxNYXBCYXNlZE9mZnNldFZhbHVlcztcblxuICAvKipcbiAgICogVGhlIGxhc3Qgc3R5bGUgdmFsdWUgdGhhdCB3YXMgaW50ZXJwcmV0ZWQgYnkgZWxlbWVudFN0eWxpbmdNYXAuIFRoaXMgaXMgY2FjaGVkXG4gICAqIFNvIHRoYXQgdGhlIGFsZ29yaXRobSBjYW4gZXhpdCBlYXJseSBpbmNhc2UgdGhlIHZhbHVlIGhhcyBub3QgY2hhbmdlZC5cbiAgICovXG4gIFtTdHlsaW5nSW5kZXguQ2FjaGVkTXVsdGlTdHlsZXNdOiBhbnl8TWFwQmFzZWRPZmZzZXRWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIEEgcXVldWUgb2YgYWxsIGhvc3RTdHlsaW5nIGluc3RydWN0aW9ucy5cbiAgICpcbiAgICogVGhpcyBhcnJheSAocXVldWUpIGlzIHBvcHVsYXRlZCBvbmx5IHdoZW4gaG9zdC1sZXZlbCBzdHlsaW5nIGluc3RydWN0aW9uc1xuICAgKiAoZS5nLiBgaG9zdFN0eWxpbmdNYXBgIGFuZCBgaG9zdENsYXNzUHJvcGApIGFyZSB1c2VkIHRvIGFwcGx5IHN0eWxlIGFuZFxuICAgKiBjbGFzcyB2YWx1ZXMgdmlhIGhvc3QgYmluZGluZ3MgdG8gdGhlIGhvc3QgZWxlbWVudC4gRGVzcGl0ZSB0aGVzZSBiZWluZ1xuICAgKiBzdGFuZGFyZCBhbmd1bGFyIGluc3RydWN0aW9ucywgdGhleSBhcmUgbm90IGRlc2lnbmVkIHRvIGltbWVkaWF0ZWx5IGFwcGx5XG4gICAqIHRoZWlyIHZhbHVlcyB0byB0aGUgc3R5bGluZyBjb250ZXh0IHdoZW4gZXhlY3V0ZWQuIFdoYXQgaGFwcGVucyBpbnN0ZWFkIGlzXG4gICAqIGEgcXVldWUgaXMgY29uc3RydWN0ZWQgYW5kIGVhY2ggaW5zdHJ1Y3Rpb24gaXMgcG9wdWxhdGVkIGludG8gdGhlIHF1ZXVlLlxuICAgKiBUaGVuLCBvbmNlIHRoZSBzdHlsZS9jbGFzcyB2YWx1ZXMgYXJlIHNldCB0byBmbHVzaCAodmlhIGBlbGVtZW50U3R5bGluZ0FwcGx5YCBvclxuICAgKiBgaG9zdFN0eWxpbmdBcHBseWApLCB0aGUgcXVldWUgaXMgZmx1c2hlZCBhbmQgdGhlIHZhbHVlcyBhcmUgcmVuZGVyZWQgb250b1xuICAgKiB0aGUgaG9zdCBlbGVtZW50LlxuICAgKi9cbiAgW1N0eWxpbmdJbmRleC5Ib3N0SW5zdHJ1Y3Rpb25zUXVldWVdOiBIb3N0SW5zdHJ1Y3Rpb25zUXVldWV8bnVsbDtcblxuICAvKipcbiAgICogTG9jYXRpb24gb2YgYW5pbWF0aW9uIGNvbnRleHQgKHdoaWNoIGNvbnRhaW5zIHRoZSBhY3RpdmUgcGxheWVycykgZm9yIHRoaXMgZWxlbWVudCBzdHlsaW5nXG4gICAqIGNvbnRleHQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LlBsYXllckNvbnRleHRdOiBQbGF5ZXJDb250ZXh0fG51bGw7XG59XG5cbi8qKlxuICogQSBxdWV1ZSBvZiBhbGwgaG9zdC1yZWxhdGVkIHN0eWxpbmcgaW5zdHJ1Y3Rpb25zICh0aGVzZSBhcmUgYnVmZmVyZWQgYW5kIGV2YWx1YXRlZCBqdXN0IGJlZm9yZVxuICogdGhlIHN0eWxpbmcgaXMgYXBwbGllZCkuXG4gKlxuICogVGhpcyBxdWV1ZSBpcyB1c2VkIHdoZW4gYW55IGBob3N0U3R5bGluZ2AgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZCBmcm9tIHRoZSBgaG9zdEJpbmRpbmdzYFxuICogZnVuY3Rpb24uIFRlbXBsYXRlLWxldmVsIHN0eWxpbmcgZnVuY3Rpb25zIChlLmcuIGBlbGVtZW50U3R5bGluZ01hcGAgYW5kIGBlbGVtZW50Q2xhc3NQcm9wYClcbiAqIGRvIG5vdCBtYWtlIHVzZSBvZiB0aGlzIHF1ZXVlICh0aGV5IGFyZSBhcHBsaWVkIHRvIHRoZSBzdHlsaW5nIGNvbnRleHQgaW1tZWRpYXRlbHkpLlxuICpcbiAqIER1ZSB0byB0aGUgbmF0dXJlIG9mIGhvdyBjb21wb25lbnRzL2RpcmVjdGl2ZXMgYXJlIGV2YWx1YXRlZCwgZGlyZWN0aXZlcyAoYm90aCBwYXJlbnQgYW5kXG4gKiBzdWJjbGFzcyBkaXJlY3RpdmVzKSBtYXkgbm90IGFwcGx5IHRoZWlyIHN0eWxpbmcgYXQgdGhlIHJpZ2h0IHRpbWUgZm9yIHRoZSBzdHlsaW5nXG4gKiBhbGdvcml0aG0gY29kZSB0byBwcmlvcml0aXplIHRoZW0uIFRoZXJlZm9yZSwgYWxsIGhvc3Qtc3R5bGluZyBpbnN0cnVjdGlvbnMgYXJlIHF1ZXVlZCB1cFxuICogKGJ1ZmZlcmVkKSBpbnRvIHRoZSBhcnJheSBiZWxvdyBhbmQgYXJlIGF1dG9tYXRpY2FsbHkgc29ydGVkIGluIHRlcm1zIG9mIHByaW9yaXR5LiBUaGVcbiAqIHByaW9yaXR5IGZvciBob3N0LXN0eWxpbmcgaXMgYXMgZm9sbG93czpcbiAqXG4gKiAxLiBUaGUgdGVtcGxhdGUgKHRoaXMgZG9lc24ndCBnZXQgcXVldWVkLCBidXQgZ2V0cyBldmFsdWF0ZWQgaW1tZWRpYXRlbHkpXG4gKiAyLiBBbnkgZGlyZWN0aXZlcyBwcmVzZW50IG9uIHRoZSBob3N0XG4gKiAgIDJhKSBmaXJzdCBjaGlsZCBkaXJlY3RpdmUgc3R5bGluZyBiaW5kaW5ncyBhcmUgdXBkYXRlZFxuICogICAyYikgdGhlbiBhbnkgcGFyZW50IGRpcmVjdGl2ZXNcbiAqIDMuIENvbXBvbmVudCBob3N0IGJpbmRpbmdzXG4gKlxuICogQW5ndWxhciBydW5zIGNoYW5nZSBkZXRlY3Rpb24gZm9yIGVhY2ggb2YgdGhlc2UgY2FzZXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIuIEJlY2F1c2Ugb2YgdGhpc1xuICogdGhlIGFycmF5IGJlbG93IGlzIHBvcHVsYXRlZCB3aXRoIGVhY2ggb2YgdGhlIGhvc3Qgc3R5bGluZyBmdW5jdGlvbnMgKyB0aGVpciBhcmd1bWVudHMuXG4gKlxuICogY29udGV4dFtIb3N0SW5zdHJ1Y3Rpb25zUXVldWVdID0gW1xuICogICBkaXJlY3RpdmVJbmRleCxcbiAqICAgaG9zdFN0eWxpbmdGbixcbiAqICAgW2FyZ3VtZW50c0ZvckZuXSxcbiAqICAgLi4uXG4gKiAgIGFub3RoZXJEaXJlY3RpdmVJbmRleCwgPC0tIHRoaXMgaGFzIGEgbG93ZXIgcHJpb3JpdHkgKGEgaGlnaGVyIGRpcmVjdGl2ZSBpbmRleClcbiAqICAgYW5vdGhlckhvc3RTdHlsaW5nRm4sXG4gKiAgIFthcmd1bWVudHNGb3JGbl0sXG4gKiBdXG4gKlxuICogV2hlbiBgcmVuZGVyU3R5bGluZ2AgaXMgY2FsbGVkICh3aXRoaW4gYGNsYXNzX2FuZF9ob3N0X2JpbmRpbmdzLnRzYCkgdGhlbiB0aGUgcXVldWUgaXNcbiAqIGRyYWluZWQgYW5kIGVhY2ggb2YgdGhlIGluc3RydWN0aW9ucyBhcmUgZXhlY3V0ZWQuIE9uY2UgY29tcGxldGUgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW5cbiAqIHRoZSBzdHlsZS9jbGFzcyBiaW5kaW5nIGNvZGUgaXMgcmVuZGVyZWQgb24gdGhlIGVsZW1lbnQgKHdoaWNoIGlzIHdoYXQgaGFwcGVucyBub3JtYWxseVxuICogaW5zaWRlIG9mIGByZW5kZXJTdHlsaW5nYCkuXG4gKlxuICogUmlnaHQgbm93IGVhY2ggZGlyZWN0aXZlJ3MgaG9zdEJpbmRpbmdzIGZ1bmN0aW9uLCBhcyB3ZWxsIHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbiwgYm90aFxuICogY2FsbCBgZWxlbWVudFN0eWxpbmdBcHBseSgpYCBhbmQgYGhvc3RTdHlsaW5nQXBwbHkoKWAuIFRoZSBmYWN0IHRoYXQgdGhpcyBpcyBjYWxsZWRcbiAqIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZSBlbGVtZW50IChiL2Mgb2YgY2hhbmdlIGRldGVjdGlvbikgY2F1c2VzIHNvbWUgaXNzdWVzLiBUbyBhdm9pZFxuICogaGF2aW5nIHN0eWxpbmcgY29kZSBiZSByZW5kZXJlZCBvbiBhbiBlbGVtZW50IG11bHRpcGxlIHRpbWVzLCB0aGUgYEhvc3RJbnN0cnVjdGlvbnNRdWV1ZWBcbiAqIHJlc2VydmVzIGEgc2xvdCBmb3IgYSByZWZlcmVuY2UgcG9pbnRpbmcgdG8gdGhlIHZlcnkgbGFzdCBkaXJlY3RpdmUgdGhhdCB3YXMgcmVnaXN0ZXJlZCBhbmRcbiAqIG9ubHkgYWxsb3dzIGZvciBzdHlsaW5nIHRvIGJlIGFwcGxpZWQgb25jZSB0aGF0IGRpcmVjdGl2ZSBpcyBlbmNvdW50ZXJlZCAod2hpY2ggd2lsbCBoYXBwZW5cbiAqIGFzIHRoZSBsYXN0IHVwZGF0ZSBmb3IgdGhhdCBlbGVtZW50KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3N0SW5zdHJ1Y3Rpb25zUXVldWUgZXh0ZW5kcyBBcnJheTxudW1iZXJ8RnVuY3Rpb258YW55W10+IHsgWzBdOiBudW1iZXI7IH1cblxuLyoqXG4gKiBVc2VkIGFzIGEgcmVmZXJlbmNlIGZvciBhbnkgdmFsdWVzIGNvbnRhaW5lZCB3aXRoaW4gYEhvc3RJbnN0cnVjdGlvbnNRdWV1ZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIEhvc3RJbnN0cnVjdGlvbnNRdWV1ZUluZGV4IHtcbiAgTGFzdFJlZ2lzdGVyZWREaXJlY3RpdmVJbmRleFBvc2l0aW9uID0gMCxcbiAgVmFsdWVzU3RhcnRQb3NpdGlvbiA9IDEsXG4gIERpcmVjdGl2ZUluZGV4T2Zmc2V0ID0gMCxcbiAgSW5zdHJ1Y3Rpb25Gbk9mZnNldCA9IDEsXG4gIFBhcmFtc09mZnNldCA9IDIsXG4gIFNpemUgPSAzLFxufVxuXG4vKipcbiAqIFVzZWQgYXMgYSBzdHlsaW5nIGFycmF5IHRvIGhvdXNlIHN0YXRpYyBjbGFzcyBhbmQgc3R5bGUgdmFsdWVzIHRoYXQgd2VyZSBleHRyYWN0ZWRcbiAqIGJ5IHRoZSBjb21waWxlciBhbmQgcGxhY2VkIGluIHRoZSBhbmltYXRpb24gY29udGV4dCB2aWEgYGVsZW1lbnRTdGFydGAgYW5kXG4gKiBgZWxlbWVudEhvc3RBdHRyc2AuXG4gKlxuICogU2VlIFtJbml0aWFsU3R5bGluZ1ZhbHVlc0luZGV4XSBmb3IgYSBicmVha2Rvd24gb2YgaG93IGFsbCB0aGlzIHdvcmtzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYWxTdHlsaW5nVmFsdWVzIGV4dGVuZHMgQXJyYXk8c3RyaW5nfGJvb2xlYW58bnVtYmVyfG51bGw+IHtcbiAgW0luaXRpYWxTdHlsaW5nVmFsdWVzSW5kZXguRGVmYXVsdE51bGxWYWx1ZVBvc2l0aW9uXTogbnVsbDtcbiAgW0luaXRpYWxTdHlsaW5nVmFsdWVzSW5kZXguQ2FjaGVkU3RyaW5nVmFsdWVQb3NpdGlvbl06IHN0cmluZ3xudWxsO1xufVxuXG4vKipcbiAqIFVzZWQgYXMgYW4gb2Zmc2V0L3Bvc2l0aW9uIGluZGV4IHRvIGZpZ3VyZSBvdXQgd2hlcmUgaW5pdGlhbCBzdHlsaW5nXG4gKiB2YWx1ZXMgYXJlIGxvY2F0ZWQuXG4gKlxuICogVXNlZCBhcyBhIHJlZmVyZW5jZSBwb2ludCB0byBwcm92aWRlIG1hcmtlcnMgdG8gYWxsIHN0YXRpYyBzdHlsaW5nXG4gKiB2YWx1ZXMgKHRoZSBpbml0aWFsIHN0eWxlIGFuZCBjbGFzcyB2YWx1ZXMgb24gYW4gZWxlbWVudCkgd2l0aGluIGFuXG4gKiBhcnJheSB3aXRoaW4gdGhlIGBTdHlsaW5nQ29udGV4dGAuIFRoaXMgYXJyYXkgY29udGFpbnMga2V5L3ZhbHVlIHBhaXJzXG4gKiB3aGVyZSB0aGUga2V5IGlzIHRoZSBzdHlsZSBwcm9wZXJ0eSBuYW1lIG9yIGNsYXNzTmFtZSBhbmQgdGhlIHZhbHVlIGlzXG4gKiB0aGUgc3R5bGUgdmFsdWUgb3Igd2hldGhlciBvciBub3QgYSBjbGFzcyBpcyBwcmVzZW50IG9uIHRoZSBlbG1lbnQuXG4gKlxuICogVGhlIGZpcnN0IHZhbHVlIGlzIGFsd2F5cyBudWxsIHNvIHRoYXQgYSBpbml0aWFsIGluZGV4IHZhbHVlIG9mXG4gKiBgMGAgd2lsbCBhbHdheXMgcG9pbnQgdG8gYSBudWxsIHZhbHVlLlxuICpcbiAqIFRoZSBzZWNvbmQgdmFsdWUgaXMgYWxzbyBhbHdheXMgbnVsbCB1bmxlc3MgYSBzdHJpbmctYmFzZWQgcmVwcmVzZW50YXRpb25cbiAqIG9mIHRoZSBzdHlsaW5nIGRhdGEgd2FzIGNvbnN0cnVjdGVkIChpdCBnZXRzIGNhY2hlZCBpbiB0aGlzIHNsb3QpLlxuICpcbiAqIElmIGEgPGRpdj4gZWxlbWVudHMgY29udGFpbnMgYSBsaXN0IG9mIHN0YXRpYyBzdHlsaW5nIHZhbHVlcyBsaWtlIHNvOlxuICpcbiAqIDxkaXYgY2xhc3M9XCJmb28gYmFyIGJhelwiIHN0eWxlPVwid2lkdGg6MTAwcHg7IGhlaWdodDoyMDBweDtcIj5cbiAqXG4gKiBUaGVuIHRoZSBpbml0aWFsIHN0eWxlcyBmb3IgdGhhdCB3aWxsIGxvb2sgbGlrZSBzbzpcbiAqXG4gKiBTdHlsZXM6XG4gKiBgYGBcbiAqIFN0eWxpbmdDb250ZXh0W0luaXRpYWxTdHlsZXNJbmRleF0gPSBbXG4gKiAgIG51bGwsIG51bGwsICd3aWR0aCcsICcxMDBweCcsIGhlaWdodCwgJzIwMHB4J1xuICogXVxuICogYGBgXG4gKlxuICogQ2xhc3NlczpcbiAqIGBgYFxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbENsYXNzZXNJbmRleF0gPSBbXG4gKiAgIG51bGwsIG51bGwsICdmb28nLCB0cnVlLCAnYmFyJywgdHJ1ZSwgJ2JheicsIHRydWVcbiAqIF1cbiAqIGBgYFxuICpcbiAqIEluaXRpYWwgc3R5bGUgYW5kIGNsYXNzIGVudHJpZXMgaGF2ZSB0aGVpciBvd24gYXJyYXlzLiBUaGlzIGlzIGJlY2F1c2VcbiAqIGl0J3MgZWFzaWVyIHRvIGFkZCB0byB0aGUgZW5kIG9mIG9uZSBhcnJheSBhbmQgbm90IHRoZW4gaGF2ZSB0byB1cGRhdGVcbiAqIGV2ZXJ5IGNvbnRleHQgZW50cmllcycgcG9pbnRlciBpbmRleCB0byB0aGUgbmV3bHkgb2Zmc2V0ZWQgdmFsdWVzLlxuICpcbiAqIFdoZW4gcHJvcGVydHkgYmluZGluZHMgYXJlIGFkZGVkIHRvIGEgY29udGV4dCB0aGVuIGluaXRpYWwgc3R5bGUvY2xhc3NcbiAqIHZhbHVlcyB3aWxsIGFsc28gYmUgaW5zZXJ0ZWQgaW50byB0aGUgYXJyYXkuIFRoaXMgaXMgdG8gY3JlYXRlIGEgc3BhY2VcbiAqIGluIHRoZSBzaXR1YXRpb24gd2hlbiBhIGZvbGxvdy11cCBkaXJlY3RpdmUgaW5zZXJ0cyBzdGF0aWMgc3R5bGluZyBpbnRvXG4gKiB0aGUgYXJyYXkuIEJ5IGRlZmF1bHQsIHN0eWxlIHZhbHVlcyBhcmUgYG51bGxgIGFuZCBjbGFzcyB2YWx1ZXMgYXJlXG4gKiBgZmFsc2VgIHdoZW4gaW5zZXJ0ZWQgYnkgcHJvcGVydHkgYmluZGluZ3MuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiBgYGBcbiAqIDxkaXYgY2xhc3M9XCJmb28gYmFyIGJhelwiXG4gKiAgICAgIFtjbGFzcy5jYXJdPVwibXlDYXJFeHBcIlxuICogICAgICBzdHlsZT1cIndpZHRoOjEwMHB4OyBoZWlnaHQ6MjAwcHg7XCJcbiAqICAgICAgW3N0eWxlLm9wYWNpdHldPVwibXlPcGFjaXR5RXhwXCI+XG4gKiBgYGBcbiAqXG4gKiBXaWxsIGNvbnN0cnVjdCBpbml0aWFsIHN0eWxpbmcgdmFsdWVzIHRoYXQgbG9vayBsaWtlOlxuICpcbiAqIFN0eWxlczpcbiAqIGBgYFxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbFN0eWxlc0luZGV4XSA9IFtcbiAqICAgbnVsbCwgbnVsbCwgJ3dpZHRoJywgJzEwMHB4JywgaGVpZ2h0LCAnMjAwcHgnLCAnb3BhY2l0eScsIG51bGxcbiAqIF1cbiAqIGBgYFxuICpcbiAqIENsYXNzZXM6XG4gKiBgYGBcbiAqIFN0eWxpbmdDb250ZXh0W0luaXRpYWxDbGFzc2VzSW5kZXhdID0gW1xuICogICBudWxsLCBudWxsLCAnZm9vJywgdHJ1ZSwgJ2JhcicsIHRydWUsICdiYXonLCB0cnVlLCAnY2FyJywgZmFsc2VcbiAqIF1cbiAqIGBgYFxuICpcbiAqIE5vdyBpZiBhIGRpcmVjdGl2ZSBjb21lcyBhbG9uZyBhbmQgaW50cm9kdWNlcyBgY2FyYCBhcyBhIHN0YXRpY1xuICogY2xhc3MgdmFsdWUgb3IgYG9wYWNpdHlgIHRoZW4gdGhvc2UgdmFsdWVzIHdpbGwgYmUgZmlsbGVkIGludG9cbiAqIHRoZSBpbml0aWFsIHN0eWxlcyBhcnJheS5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBcbiAqIEBEaXJlY3RpdmUoe1xuICogICBzZWxlY3RvcjogJ29wYWNpdHktY2FyLWRpcmVjdGl2ZScsXG4gKiAgIGhvc3Q6IHtcbiAqICAgICAnc3R5bGUnOiAnb3BhY2l0eTowLjUnLFxuICogICAgICdjbGFzcyc6ICdjYXInXG4gKiAgIH1cbiAqIH0pXG4gKiBjbGFzcyBPcGFjaXR5Q2FyRGlyZWN0aXZlIHt9XG4gKiBgYGBcbiAqXG4gKiBUaGlzIHdpbGwgcmVuZGVyIGl0c2VsZiBhczpcbiAqXG4gKiBTdHlsZXM6XG4gKiBgYGBcbiAqIFN0eWxpbmdDb250ZXh0W0luaXRpYWxTdHlsZXNJbmRleF0gPSBbXG4gKiAgIG51bGwsIG51bGwsICd3aWR0aCcsICcxMDBweCcsIGhlaWdodCwgJzIwMHB4JywgJ29wYWNpdHknLCAnMC41J1xuICogXVxuICogYGBgXG4gKlxuICogQ2xhc3NlczpcbiAqIGBgYFxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbENsYXNzZXNJbmRleF0gPSBbXG4gKiAgIG51bGwsIG51bGwsICdmb28nLCB0cnVlLCAnYmFyJywgdHJ1ZSwgJ2JheicsIHRydWUsICdjYXInLCB0cnVlXG4gKiBdXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gSW5pdGlhbFN0eWxpbmdWYWx1ZXNJbmRleCB7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgdmFsdWUgaXMgYWx3YXlzIGBudWxsYCBzbyB0aGF0IGBzdHlsZXNbMF0gPT0gbnVsbGAgZm9yIHVuYXNzaWduZWQgdmFsdWVzXG4gICAqL1xuICBEZWZhdWx0TnVsbFZhbHVlUG9zaXRpb24gPSAwLFxuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBub24tc3R5bGluZyBjb2RlIHRvIGV4YW1pbmUgd2hhdCB0aGUgc3R5bGUgb3IgY2xhc3NOYW1lIHN0cmluZyBpczpcbiAgICogc3R5bGVzOiBbJ3dpZHRoJywgJzEwMHB4JywgMCwgJ29wYWNpdHknLCBudWxsLCAwLCAnaGVpZ2h0JywgJzIwMHB4JywgMF1cbiAgICogICAgPT4gaW5pdGlhbFN0eWxlc1tDYWNoZWRTdHJpbmdWYWx1ZVBvc2l0aW9uXSA9ICd3aWR0aDoxMDBweDtoZWlnaHQ6MjAwcHgnO1xuICAgKiBjbGFzc2VzOiBbJ2ZvbycsIHRydWUsIDAsICdiYXInLCBmYWxzZSwgMCwgJ2JheicsIHRydWUsIDBdXG4gICAqICAgID0+IGluaXRpYWxDbGFzc2VzW0NhY2hlZFN0cmluZ1ZhbHVlUG9zaXRpb25dID0gJ2ZvbyBiYXInO1xuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcyBgbnVsbGAgYnkgZGVmYXVsdCBhbmQgaXQgd2lsbCBvbmx5IGJlIHBvcHVsYXRlZFxuICAgKiBvbmNlIGBnZXRJbml0aWFsU3R5bGVTdHJpbmdWYWx1ZWAgb3IgYGdldEluaXRpYWxDbGFzc05hbWVWYWx1ZWAgaXMgZXhlY3V0ZWQuXG4gICAqL1xuICBDYWNoZWRTdHJpbmdWYWx1ZVBvc2l0aW9uID0gMSxcblxuICAvKipcbiAgICogV2hlcmUgdGhlIHN0eWxlIG9yIGNsYXNzIHZhbHVlcyBzdGFydCBpbiB0aGUgdHVwbGVcbiAgICovXG4gIEtleVZhbHVlU3RhcnRQb3NpdGlvbiA9IDIsXG5cbiAgLyoqXG4gICAqIFRoZSBvZmZzZXQgdmFsdWUgKGluZGV4ICsgb2Zmc2V0KSBmb3IgdGhlIHByb3BlcnR5IHZhbHVlIGZvciBlYWNoIHN0eWxlL2NsYXNzIGVudHJ5XG4gICAqL1xuICBQcm9wT2Zmc2V0ID0gMCxcblxuICAvKipcbiAgICogVGhlIG9mZnNldCB2YWx1ZSAoaW5kZXggKyBvZmZzZXQpIGZvciB0aGUgc3R5bGUvY2xhc3MgdmFsdWUgZm9yIGVhY2ggc3R5bGUvY2xhc3MgZW50cnlcbiAgICovXG4gIFZhbHVlT2Zmc2V0ID0gMSxcblxuICAvKipcbiAgICogVGhlIG9mZnNldCB2YWx1ZSAoaW5kZXggKyBvZmZzZXQpIGZvciB0aGUgc3R5bGUvY2xhc3MgZGlyZWN0aXZlIG93bmVyIGZvciBlYWNoIHN0eWxlL2NsYXNzXG4gICAgIGVudHJ5XG4gICAqL1xuICBEaXJlY3RpdmVPd25lck9mZnNldCA9IDIsXG5cbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBiaXQgc2V0IGFzaWRlIHRvIG1hcmsgaWYgdGhlIGluaXRpYWwgc3R5bGUgd2FzIGFscmVhZHkgcmVuZGVyZVxuICAgKi9cbiAgQXBwbGllZEZsYWdCaXRQb3NpdGlvbiA9IDBiMCxcbiAgQXBwbGllZEZsYWdCaXRMZW5ndGggPSAxLFxuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgc2l6ZSBmb3IgZWFjaCBzdHlsZS9jbGFzcyBlbnRyeSAocHJvcCArIHZhbHVlICsgZGlyZWN0aXZlT3duZXIpXG4gICAqL1xuICBTaXplID0gM1xufVxuXG4vKipcbiAqIEFuIGFycmF5IGxvY2F0ZWQgaW4gdGhlIFN0eWxpbmdDb250ZXh0IHRoYXQgaG91c2VzIGFsbCBkaXJlY3RpdmUgaW5zdGFuY2VzIGFuZCBhZGRpdGlvbmFsXG4gKiBkYXRhIGFib3V0IHRoZW0uXG4gKlxuICogRWFjaCBlbnRyeSBpbiB0aGlzIGFycmF5IHJlcHJlc2VudHMgYSBzb3VyY2Ugb2Ygd2hlcmUgc3R5bGUvY2xhc3MgYmluZGluZyB2YWx1ZXMgY291bGRcbiAqIGNvbWUgZnJvbS4gQnkgZGVmYXVsdCwgdGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSBkaXJlY3RpdmUgaGVyZSB3aXRoIGEgbnVsbCB2YWx1ZSBhbmRcbiAqIHRoYXQgcmVwcmVzZW50cyBiaW5kaW5ncyB0aGF0IGxpdmUgZGlyZWN0bHkgb24gYW4gZWxlbWVudCBpbiB0aGUgdGVtcGxhdGUgKG5vdCBob3N0IGJpbmRpbmdzKS5cbiAqXG4gKiBFYWNoIHN1Y2Nlc3NpdmUgZW50cnkgaW4gdGhlIGFycmF5IGlzIGFuIGFjdHVhbCBpbnN0YW5jZSBvZiBhIGRpcmVjdGl2ZSBhcyB3ZWxsIGFzIHNvbWVcbiAqIGFkZGl0aW9uYWwgaW5mbyBhYm91dCB0aGF0IGVudHJ5LlxuICpcbiAqIEFuIGVudHJ5IHdpdGhpbiB0aGlzIGFycmF5IGhhcyB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAqIFswXSA9IFRoZSBpbnN0YW5jZSBvZiB0aGUgZGlyZWN0aXZlICh0aGUgZmlyc3QgZW50cnkgaXMgbnVsbCBiZWNhdXNlIGl0cyByZXNlcnZlZCBmb3IgdGhlXG4gKiAgICAgICB0ZW1wbGF0ZSlcbiAqIFsxXSA9IFRoZSBwb2ludGVyIHRoYXQgdGVsbHMgd2hlcmUgdGhlIHNpbmdsZSBzdHlsaW5nIChzdHVmZiBsaWtlIFtjbGFzcy5mb29dIGFuZCBbc3R5bGUucHJvcF0pXG4gKiAgICAgICBvZmZzZXQgdmFsdWVzIGFyZSBsb2NhdGVkLiBUaGlzIHZhbHVlIHdpbGwgYWxsb3cgZm9yIGEgYmluZGluZyBpbnN0cnVjdGlvbiB0byBmaW5kIGV4YWN0bHlcbiAqICAgICAgIHdoZXJlIGEgc3R5bGUgaXMgbG9jYXRlZC5cbiAqIFsyXSA9IFdoZXRoZXIgb3Igbm90IHRoZSBkaXJlY3RpdmUgaGFzIGFueSBzdHlsaW5nIHZhbHVlcyB0aGF0IGFyZSBkaXJ0eS4gVGhpcyBpcyB1c2VkIGFzXG4gKiAgICAgICByZWZlcmVuY2Ugd2l0aGluIHRoZSBgcmVuZGVyU3R5bGluZ2AgZnVuY3Rpb24gdG8gZGVjaWRlIHdoZXRoZXIgdG8gc2tpcCBpdGVyYXRpbmdcbiAqICAgICAgIHRocm91Z2ggdGhlIGNvbnRleHQgd2hlbiByZW5kZXJpbmcgaXMgZXhlY3V0ZWQuXG4gKiBbM10gPSBUaGUgc3R5bGVTYW5pdGl6ZXIgaW5zdGFuY2UgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgZGlyZWN0aXZlLiBBbHRob3VnaCBpdCdzIHVubGlrZWx5LFxuICogICAgICAgYSBkaXJlY3RpdmUgY291bGQgaW50cm9kdWNlIGl0cyBvd24gc3BlY2lhbCBzdHlsZSBzYW5pdGl6ZXIgYW5kIGZvciB0aGlzIHJlYWNoIGVhY2hcbiAqICAgICAgIGRpcmVjdGl2ZSB3aWxsIGdldCBpdHMgb3duIHNwYWNlIGZvciBpdCAoaWYgbnVsbCB0aGVuIHRoZSB2ZXJ5IGZpcnN0IHNhbml0aXplciBpcyB1c2VkKS5cbiAqXG4gKiBFYWNoIHRpbWUgYSBuZXcgZGlyZWN0aXZlIGlzIGFkZGVkIGl0IHdpbGwgaW5zZXJ0IHRoZXNlIGZvdXIgdmFsdWVzIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5LlxuICogV2hlbiB0aGlzIGFycmF5IGlzIGV4YW1pbmVkIHRoZW4gdGhlIHJlc3VsdGluZyBkaXJlY3RpdmVJbmRleCB3aWxsIGJlIHJlc29sdmVkIGJ5IGRpdmlkaW5nIHRoZVxuICogaW5kZXggdmFsdWUgYnkgdGhlIHNpemUgb2YgdGhlIGFycmF5IGVudHJpZXMgKHNvIGlmIERpckEgaXMgYXQgc3BvdCA4IHRoZW4gaXRzIGluZGV4IHdpbGwgYmUgMikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aXZlUmVnaXN0cnlWYWx1ZXMgZXh0ZW5kcyBBcnJheTxudWxsfHt9fGJvb2xlYW58bnVtYmVyfFN0eWxlU2FuaXRpemVGbj4ge1xuICBbRGlyZWN0aXZlUmVnaXN0cnlWYWx1ZXNJbmRleC5TaW5nbGVQcm9wVmFsdWVzSW5kZXhPZmZzZXRdOiBudW1iZXI7XG4gIFtEaXJlY3RpdmVSZWdpc3RyeVZhbHVlc0luZGV4LlN0eWxlU2FuaXRpemVyT2Zmc2V0XTogU3R5bGVTYW5pdGl6ZUZufG51bGw7XG59XG5cbi8qKlxuICogQW4gZW51bSB0aGF0IG91dGxpbmVzIHRoZSBvZmZzZXQvcG9zaXRpb24gdmFsdWVzIGZvciBlYWNoIGRpcmVjdGl2ZSBlbnRyeSBhbmQgaXRzIGRhdGFcbiAqIHRoYXQgYXJlIGhvdXNlZCBpbnNpZGUgb2YgW0RpcmVjdGl2ZVJlZ2lzdHJ5VmFsdWVzXS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gRGlyZWN0aXZlUmVnaXN0cnlWYWx1ZXNJbmRleCB7XG4gIFNpbmdsZVByb3BWYWx1ZXNJbmRleE9mZnNldCA9IDAsXG4gIFN0eWxlU2FuaXRpemVyT2Zmc2V0ID0gMSxcbiAgU2l6ZSA9IDJcbn1cblxuLyoqXG4gKiBBbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBpbmRleCBwb2ludGVyIHZhbHVlcyBmb3IgZXZlcnkgc2luZ2xlIHN0eWxpbmcgcHJvcGVydHlcbiAqIHRoYXQgZXhpc3RzIGluIHRoZSBjb250ZXh0IGFuZCBmb3IgZXZlcnkgZGlyZWN0aXZlLiBJdCBhbHNvIGNvbnRhaW5zIHRoZSB0b3RhbFxuICogc2luZ2xlIHN0eWxlcyBhbmQgc2luZ2xlIGNsYXNzZXMgdGhhdCBleGlzdHMgaW4gdGhlIGNvbnRleHQgYXMgdGhlIGZpcnN0IHR3byB2YWx1ZXMuXG4gKlxuICogTGV0J3Mgc2F5IHdlIGhhdmUgdGhlIGZvbGxvd2luZyB0ZW1wbGF0ZSBjb2RlOlxuICpcbiAqIDxkaXYgW3N0eWxlLndpZHRoXT1cIm15V2lkdGhcIlxuICogICAgICBbc3R5bGUuaGVpZ2h0XT1cIm15SGVpZ2h0XCJcbiAqICAgICAgW2NsYXNzLmZsaXBwZWRdPVwiZmxpcENsYXNzXCJcbiAqICAgICAgZGlyZWN0aXZlLXdpdGgtb3BhY2l0eT5cbiAqICAgICAgZGlyZWN0aXZlLXdpdGgtZm9vLWJhci1jbGFzc2VzPlxuICpcbiAqIFdlIGhhdmUgdHdvIGRpcmVjdGl2ZSBhbmQgdGVtcGxhdGUtYmluZGluZyBzb3VyY2VzLFxuICogMiArIDEgc3R5bGVzIGFuZCAxICsgMSBjbGFzc2VzLiBXaGVuIHRoZSBiaW5kaW5ncyBhcmVcbiAqIHJlZ2lzdGVyZWQgdGhlIFNpbmdsZVByb3BPZmZzZXRzIGFycmF5IHdpbGwgbG9vayBsaWtlIHNvOlxuICpcbiAqIHNfMC9jXzAgPSB0ZW1wbGF0ZSBkaXJlY3RpdmUgdmFsdWVcbiAqIHNfMS9jXzEgPSBkaXJlY3RpdmUgb25lIChkaXJlY3RpdmUtd2l0aC1vcGFjaXR5KVxuICogc18yL2NfMiA9IGRpcmVjdGl2ZSB0d28gKGRpcmVjdGl2ZS13aXRoLWZvby1iYXItY2xhc3NlcylcbiAqXG4gKiBbMywgMiwgMiwgMSwgc18wMCwgczAxLCBjXzAxLCAxLCAwLCBzXzEwLCAwLCAxLCBjXzIwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xlUHJvcE9mZnNldFZhbHVlcyBleHRlbmRzIEFycmF5PG51bWJlcj4ge1xuICBbU2luZ2xlUHJvcE9mZnNldFZhbHVlc0luZGV4LlN0eWxlc0NvdW50UG9zaXRpb25dOiBudW1iZXI7XG4gIFtTaW5nbGVQcm9wT2Zmc2V0VmFsdWVzSW5kZXguQ2xhc3Nlc0NvdW50UG9zaXRpb25dOiBudW1iZXI7XG59XG5cbi8qKlxuICogQW4gZW51bSB0aGF0IG91dGxpbmVzIHRoZSBvZmZzZXQvcG9zaXRpb24gdmFsdWVzIGZvciBlYWNoIHNpbmdsZSBwcm9wL2NsYXNzIGVudHJ5XG4gKiB0aGF0IGFyZSBob3VzZWQgaW5zaWRlIG9mIFtTaW5nbGVQcm9wT2Zmc2V0VmFsdWVzXS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gU2luZ2xlUHJvcE9mZnNldFZhbHVlc0luZGV4IHtcbiAgU3R5bGVzQ291bnRQb3NpdGlvbiA9IDAsXG4gIENsYXNzZXNDb3VudFBvc2l0aW9uID0gMSxcbiAgVmFsdWVTdGFydFBvc2l0aW9uID0gMlxufVxuXG4vKipcbiAqIFVzZWQgYSByZWZlcmVuY2UgZm9yIGFsbCBtdWx0aSBzdHlsaW5nIHZhbHVlcyAodmFsdWVzIHRoYXQgYXJlIGFzc2lnbmVkIHZpYSB0aGVcbiAqIGBbc3R5bGVdYCBhbmQgYFtjbGFzc11gIGJpbmRpbmdzKS5cbiAqXG4gKiBTaW5nbGUtc3R5bGluZyBwcm9wZXJ0aWVzICh0aGluZ3Mgc2V0IHZpYSBgW3N0eWxlLnByb3BdYCBhbmQgYFtjbGFzcy5uYW1lXWAgYmluZGluZ3MpXG4gKiBhcmUgbm90IGhhbmRsZWQgdXNpbmcgdGhlIHNhbWUgYXBwcm9hY2ggYXMgbXVsdGktc3R5bGluZyBiaW5kaW5ncyAoc3VjaCBhcyBgW3N0eWxlXWBcbiAqIGBbY2xhc3NdYCBiaW5kaW5ncykuXG4gKlxuICogTXVsdGktc3R5bGluZyBiaW5kaW5ncyByZWx5IG9uIGEgZGlmZmluZyBhbGdvcml0aG0gdG8gZmlndXJlIG91dCB3aGF0IHByb3BlcnRpZXMgaGF2ZSBiZWVuIGFkZGVkLFxuICogcmVtb3ZlZCBhbmQgbW9kaWZpZWQuIE11bHRpLXN0eWxpbmcgcHJvcGVydGllcyBhcmUgYWxzbyBldmFsdWF0ZWQgYWNyb3NzIGRpcmVjdGl2ZXMtLXdoaWNoIG1lYW5zXG4gKiB0aGF0IEFuZ3VsYXIgc3VwcG9ydHMgaGF2aW5nIG11bHRpcGxlIGRpcmVjdGl2ZXMgYWxsIHdyaXRlIHRvIHRoZSBzYW1lIGBbc3R5bGVdYCBhbmQgYFtjbGFzc11gXG4gKiBiaW5kaW5ncyAodXNpbmcgaG9zdCBiaW5kaW5ncykgZXZlbiBpZiB0aGUgYFtzdHlsZV1gIGFuZC9vciBgW2NsYXNzXWAgYmluZGluZ3MgYXJlIGJlaW5nIHdyaXR0ZW5cbiAqIHRvIG9uIHRoZSB0ZW1wbGF0ZSBlbGVtZW50LlxuICpcbiAqIEFsbCBtdWx0aS1zdHlsaW5nIHZhbHVlcyB0aGF0IGFyZSB3cml0dGVuIHRvIGFuIGVsZW1lbnQgKHdoZXRoZXIgaXQgYmUgZnJvbSB0aGUgdGVtcGxhdGUgb3IgYW55XG4gKiBkaXJlY3RpdmVzIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50KSBhcmUgYWxsIHdyaXR0ZW4gaW50byB0aGUgYE1hcEJhc2VkT2Zmc2V0VmFsdWVzYCBhcnJheS4gKE5vdGVcbiAqIHRoYXQgdGhlcmUgYXJlIHR3byBhcnJheXM6IG9uZSBmb3Igc3R5bGVzIGFuZCBhbm90aGVyIGZvciBjbGFzc2VzLilcbiAqXG4gKiBUaGlzIGFycmF5IGlzIHNoYXBlZCBpbiB0aGUgZm9sbG93aW5nIHdheTpcbiAqXG4gKiBbMF0gID0gVGhlIHRvdGFsIGFtb3VudCBvZiB1bmlxdWUgbXVsdGktc3R5bGUgb3IgbXVsdGktY2xhc3MgZW50cmllcyB0aGF0IGV4aXN0IGN1cnJlbnRseSBpbiB0aGVcbiAqICAgICAgICBjb250ZXh0LlxuICogWzErXSA9IENvbnRhaW5zIGFuIGVudHJ5IG9mIGZvdXIgdmFsdWVzIC4uLiBFYWNoIGVudHJ5IGlzIGEgdmFsdWUgYXNzaWduZWQgYnkgYVxuICogYFtzdHlsZV1gL2BbY2xhc3NdYFxuICogICAgICAgIGJpbmRpbmcgKHdlIGNhbGwgdGhpcyBhICoqc291cmNlKiopLlxuICpcbiAqICAgICAgICBBbiBleGFtcGxlIGVudHJ5IGxvb2tzIGxpa2Ugc28gKGF0IGEgZ2l2ZW4gYGlgIGluZGV4KTpcbiAqICAgICAgICBbaSArIDBdID0gV2hldGhlciBvciBub3QgdGhlIHZhbHVlIGlzIGRpcnR5XG4gKlxuICogICAgICAgIFtpICsgMV0gPSBUaGUgaW5kZXggb2Ygd2hlcmUgdGhlIG1hcC1iYXNlZCB2YWx1ZXNcbiAqICAgICAgICAgICAgICAgICAgKGZvciB0aGlzICoqc291cmNlKiopIHN0YXJ0IHdpdGhpbiB0aGUgY29udGV4dFxuICpcbiAqICAgICAgICBbaSArIDJdID0gVGhlIHVudG91Y2hlZCwgbGFzdCBzZXQgdmFsdWUgb2YgdGhlIGJpbmRpbmdcbiAqXG4gKiAgICAgICAgW2kgKyAzXSA9IFRoZSB0b3RhbCBhbW91bnQgb2YgdW5xaXVlIGJpbmRpbmcgdmFsdWVzIHRoYXQgd2VyZVxuICogICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgYW5kIHNldCBpbnRvIHRoZSBjb250ZXh0LiAoTm90ZSB0aGF0IHRoaXMgdmFsdWUgZG9lc1xuICogICAgICAgICAgICAgICAgICBub3QgcmVmbGVjdCB0aGUgdG90YWwgYW1vdW50IG9mIHZhbHVlcyB3aXRoaW4gdGhlIGJpbmRpbmdcbiAqICAgICAgICAgICAgICAgICAgdmFsdWUgKHNpbmNlIGl0J3MgYSBtYXApLCBidXQgaW5zdGVhZCByZWZsZWN0cyB0aGUgdG90YWwgdmFsdWVzXG4gKiAgICAgICAgICAgICAgICAgIHRoYXQgd2VyZSBub3QgdXNlZCBieSBhbm90aGVyIGRpcmVjdGl2ZSkuXG4gKlxuICogRWFjaCB0aW1lIGEgZGlyZWN0aXZlIChvciB0ZW1wbGF0ZSkgd3JpdGVzIGEgdmFsdWUgdG8gYSBgW2NsYXNzXWAvYFtzdHlsZV1gIGJpbmRpbmcgdGhlbiB0aGVcbiAqIHN0eWxpbmcgZGlmZmluZyBhbGdvcml0aG0gY29kZSB3aWxsIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byB1cGRhdGUgdGhlIHZhbHVlIGJhc2VkIG9uIHRoZVxuICogZm9sbG93aW5nIHJ1bGVzOlxuICpcbiAqIDEuIElmIGEgbW9yZSBpbXBvcnRhbnQgZGlyZWN0aXZlIChlaXRoZXIgdGhlIHRlbXBsYXRlIG9yIGEgZGlyZWN0aXZlIHRoYXQgd2FzIHJlZ2lzdGVyZWRcbiAqICAgIGJlZm9yZWhhbmQpIGhhcyB3cml0dGVuIGEgc3BlY2lmaWMgc3R5bGluZyB2YWx1ZSBpbnRvIHRoZSBjb250ZXh0IHRoZW4gYW55IGZvbGxvdy11cCBzdHlsaW5nXG4gKiAgICB2YWx1ZXMgKHNldCBieSBhbm90aGVyIGRpcmVjdGl2ZSB2aWEgaXRzIGBbc3R5bGVdYCBhbmQvb3IgYFtjbGFzc11gIGhvc3QgYmluZGluZykgd2lsbCBub3QgYmVcbiAqICAgIGFibGUgdG8gc2V0IGl0LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGZvcm1lciBkaXJlY3RpdmUgaGFzIHByaW9ydHkuXG4gKiAyLiBPbmx5IGlmIGEgZm9ybWVyIGRpcmVjdGl2ZSBoYXMgc2V0IGEgc3BlY2lmaWMgc3R5bGluZyB2YWx1ZSB0byBudWxsICh3aGV0aGVyIGJ5IGFjdHVhbGx5XG4gKiAgICBzZXR0aW5nIGl0IHRvIG51bGwgb3Igbm90IGluY2x1ZGluZyBpdCBpbiBpcyBtYXAgdmFsdWUpIHRoZW4gYSBsZXNzIGltcG9yYXRhbnQgZGlyZWN0aXZlIGNhblxuICogICAgc2V0IGl0cyBvd24gdmFsdWUuXG4gKlxuICogIyMgSG93IHRoZSBtYXAtYmFzZWQgc3R5bGluZyBhbGdvcml0aG0gdXBkYXRlcyBpdHNlbGZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXBCYXNlZE9mZnNldFZhbHVlcyBleHRlbmRzIEFycmF5PGFueT4ge1xuICBbTWFwQmFzZWRPZmZzZXRWYWx1ZXNJbmRleC5FbnRyaWVzQ291bnRQb3NpdGlvbl06IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gTWFwQmFzZWRPZmZzZXRWYWx1ZXNJbmRleCB7XG4gIEVudHJpZXNDb3VudFBvc2l0aW9uID0gMCxcbiAgVmFsdWVzU3RhcnRQb3NpdGlvbiA9IDEsXG4gIERpcnR5RmxhZ09mZnNldCA9IDAsXG4gIFBvc2l0aW9uU3RhcnRPZmZzZXQgPSAxLFxuICBWYWx1ZU9mZnNldCA9IDIsXG4gIFZhbHVlQ291bnRPZmZzZXQgPSAzLFxuICBTaXplID0gNFxufVxuXG4vKipcbiAqIFVzZWQgdG8gc2V0IHRoZSBjb250ZXh0IHRvIGJlIGRpcnR5IG9yIG5vdCBib3RoIG9uIHRoZSBtYXN0ZXIgZmxhZyAocG9zaXRpb24gMSlcbiAqIG9yIGZvciBlYWNoIHNpbmdsZS9tdWx0aSBwcm9wZXJ0eSB0aGF0IGV4aXN0cyBpbiB0aGUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gU3R5bGluZ0ZsYWdzIHtcbiAgLy8gSW1wbGllcyBubyBjb25maWd1cmF0aW9uc1xuICBOb25lID0gMGIwMDAwMCxcbiAgLy8gV2hldGhlciBvciBub3QgdGhlIGVudHJ5IG9yIGNvbnRleHQgaXRzZWxmIGlzIGRpcnR5XG4gIERpcnR5ID0gMGIwMDAwMSxcbiAgLy8gV2hldGhlciBvciBub3QgdGhpcyBpcyBhIGNsYXNzLWJhc2VkIGFzc2lnbm1lbnRcbiAgQ2xhc3MgPSAwYjAwMDEwLFxuICAvLyBXaGV0aGVyIG9yIG5vdCBhIHNhbml0aXplciB3YXMgYXBwbGllZCB0byB0aGlzIHByb3BlcnR5XG4gIFNhbml0aXplID0gMGIwMDEwMCxcbiAgLy8gV2hldGhlciBvciBub3QgYW55IHBsYXllciBidWlsZGVycyB3aXRoaW4gbmVlZCB0byBwcm9kdWNlIG5ldyBwbGF5ZXJzXG4gIFBsYXllckJ1aWxkZXJzRGlydHkgPSAwYjAxMDAwLFxuICAvLyBUaGUgbWF4IGFtb3VudCBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IHRoZXNlIGNvbmZpZ3VyYXRpb24gdmFsdWVzXG4gIEJpbmRpbmdBbGxvY2F0aW9uTG9ja2VkID0gMGIxMDAwMCxcbiAgQml0Q291bnRTaXplID0gNSxcbiAgLy8gVGhlcmUgYXJlIG9ubHkgZml2ZSBiaXRzIGhlcmVcbiAgQml0TWFzayA9IDBiMTExMTFcbn1cblxuLyoqIFVzZWQgYXMgbnVtZXJpYyBwb2ludGVyIHZhbHVlcyB0byBkZXRlcm1pbmUgd2hhdCBjZWxscyB0byB1cGRhdGUgaW4gdGhlIGBTdHlsaW5nQ29udGV4dGAgKi9cbmV4cG9ydCBjb25zdCBlbnVtIFN0eWxpbmdJbmRleCB7XG4gIC8vIFBvc2l0aW9uIG9mIHdoZXJlIHRoZSBpbml0aWFsIHN0eWxlcyBhcmUgc3RvcmVkIGluIHRoZSBzdHlsaW5nIGNvbnRleHRcbiAgLy8gVGhpcyBpbmRleCBtdXN0IGFsaWduIHdpdGggSE9TVCwgc2VlIGludGVyZmFjZXMvdmlldy50c1xuICBFbGVtZW50UG9zaXRpb24gPSAwLFxuICAvLyBJbmRleCBvZiBsb2NhdGlvbiB3aGVyZSB0aGUgc3RhcnQgb2Ygc2luZ2xlIHByb3BlcnRpZXMgYXJlIHN0b3JlZC4gKGB1cGRhdGVTdHlsZVByb3BgKVxuICBNYXN0ZXJGbGFnUG9zaXRpb24gPSAxLFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgcmVnaXN0ZXJlZCBkaXJlY3RpdmVzIGV4aXN0IGZvciB0aGlzIHN0eWxpbmcgY29udGV4dFxuICBEaXJlY3RpdmVSZWdpc3RyeVBvc2l0aW9uID0gMixcbiAgLy8gUG9zaXRpb24gb2Ygd2hlcmUgdGhlIGluaXRpYWwgc3R5bGVzIGFyZSBzdG9yZWQgaW4gdGhlIHN0eWxpbmcgY29udGV4dFxuICBJbml0aWFsU3R5bGVWYWx1ZXNQb3NpdGlvbiA9IDMsXG4gIEluaXRpYWxDbGFzc1ZhbHVlc1Bvc2l0aW9uID0gNCxcbiAgLy8gSW5kZXggb2YgbG9jYXRpb24gd2hlcmUgdGhlIGNsYXNzIGluZGV4IG9mZnNldCB2YWx1ZSBpcyBsb2NhdGVkXG4gIFNpbmdsZVByb3BPZmZzZXRQb3NpdGlvbnMgPSA1LFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgbGFzdCBzdHJpbmctYmFzZWQgQ1NTIGNsYXNzIHZhbHVlIHdhcyBzdG9yZWQgKG9yIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlXG4gIC8vIGluaXRpYWwgc3R5bGVzIHdoZW4gYSBbY2xhc3NdIGRpcmVjdGl2ZSBpcyBwcmVzZW50KVxuICBDYWNoZWRNdWx0aUNsYXNzZXMgPSA2LFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgbGFzdCBzdHJpbmctYmFzZWQgQ1NTIGNsYXNzIHZhbHVlIHdhcyBzdG9yZWRcbiAgQ2FjaGVkTXVsdGlTdHlsZXMgPSA3LFxuICAvLyBNdWx0aSBhbmQgc2luZ2xlIGVudHJpZXMgYXJlIHN0b3JlZCBpbiBgU3R5bGluZ0NvbnRleHRgIGFzOiBGbGFnOyBQcm9wZXJ0eU5hbWU7ICBQcm9wZXJ0eVZhbHVlXG4gIC8vIFBvc2l0aW9uIG9mIHdoZXJlIHRoZSBpbml0aWFsIHN0eWxlcyBhcmUgc3RvcmVkIGluIHRoZSBzdHlsaW5nIGNvbnRleHRcbiAgSG9zdEluc3RydWN0aW9uc1F1ZXVlID0gOCxcbiAgUGxheWVyQ29udGV4dCA9IDksXG4gIC8vIExvY2F0aW9uIG9mIHNpbmdsZSAocHJvcCkgdmFsdWUgZW50cmllcyBhcmUgc3RvcmVkIHdpdGhpbiB0aGUgY29udGV4dFxuICBTaW5nbGVTdHlsZXNTdGFydFBvc2l0aW9uID0gMTAsXG4gIEZsYWdzT2Zmc2V0ID0gMCxcbiAgUHJvcGVydHlPZmZzZXQgPSAxLFxuICBWYWx1ZU9mZnNldCA9IDIsXG4gIFBsYXllckJ1aWxkZXJJbmRleE9mZnNldCA9IDMsXG4gIC8vIFNpemUgb2YgZWFjaCBtdWx0aSBvciBzaW5nbGUgZW50cnkgKGZsYWcgKyBwcm9wICsgdmFsdWUgKyBwbGF5ZXJCdWlsZGVySW5kZXgpXG4gIFNpemUgPSA0LFxuICAvLyBFYWNoIGZsYWcgaGFzIGEgYmluYXJ5IGRpZ2l0IGxlbmd0aCBvZiB0aGlzIHZhbHVlXG4gIEJpdENvdW50U2l6ZSA9IDE0LCAgLy8gKDMyIC0gNCkgLyAyID0gfjE0XG4gIC8vIFRoZSBiaW5hcnkgZGlnaXQgdmFsdWUgYXMgYSBtYXNrXG4gIEJpdE1hc2sgPSAwYjExMTExMTExMTExMTExLCAgLy8gMTQgYml0c1xufVxuXG4vKipcbiAqIEFuIGVudW0gdGhhdCBvdXRsaW5lcyB0aGUgYml0IGZsYWcgZGF0YSBmb3IgZGlyZWN0aXZlIG93bmVyIGFuZCBwbGF5ZXIgaW5kZXhcbiAqIHZhbHVlcyB0aGF0IGV4aXN0IHdpdGhpbiBlbiBlbnRyeSB0aGF0IGxpdmVzIGluIHRoZSBTdHlsaW5nQ29udGV4dC5cbiAqXG4gKiBUaGUgdmFsdWVzIGhlcmUgc3BsaXQgYSBudW1iZXIgdmFsdWUgaW50byB0d28gc2V0cyBvZiBiaXRzOlxuICogIC0gVGhlIGZpcnN0IDE2IGJpdHMgYXJlIHVzZWQgdG8gc3RvcmUgdGhlIGRpcmVjdGl2ZUluZGV4IHRoYXQgb3ducyB0aGlzIHN0eWxlIHZhbHVlXG4gKiAgLSBUaGUgb3RoZXIgMTYgYml0cyBhcmUgdXNlZCB0byBzdG9yZSB0aGUgcGxheWVyQnVpbGRlckluZGV4IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhpcyBzdHlsZVxuICovXG5leHBvcnQgY29uc3QgZW51bSBEaXJlY3RpdmVPd25lckFuZFBsYXllckJ1aWxkZXJJbmRleCB7XG4gIEJpdENvdW50U2l6ZSA9IDE2LFxuICBCaXRNYXNrID0gMGIxMTExMTExMTExMTExMTExXG59XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZGlyZWN0aXZlIHN0eWxpbmcgaW5kZXggdmFsdWUgZm9yIHRlbXBsYXRlLWJhc2VkIGJpbmRpbmdzLlxuICpcbiAqIEFsbCBob3N0LWxldmVsIGJpbmRpbmdzIChlLmcuIGBob3N0U3R5bGVQcm9wYCBhbmQgYGhvc3RTdHlsaW5nTWFwYCkgYXJlXG4gKiBhc3NpZ25lZCBhIGRpcmVjdGl2ZSBzdHlsaW5nIGluZGV4IHZhbHVlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRpcmVjdGl2ZVxuICogdW5pcXVlSWQgYW5kIHRoZSBkaXJlY3RpdmUgc3VwZXItY2xhc3MgaW5oZXJpdGFuY2UgZGVwdGguIEJ1dCBmb3IgdGVtcGxhdGVcbiAqIGJpbmRpbmdzIHRoZXkgYWx3YXlzIGhhdmUgdGhlIHNhbWUgZGlyZWN0aXZlIHN0eWxpbmcgaW5kZXggdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RFTVBMQVRFX0RJUkVDVElWRV9JTkRFWCA9IDA7XG4iXX0=
|
|
625
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy9zdHlsaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdRQSxvQ0FvRUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnREQsMkNBQTRGOzs7Ozs7O0lBTTFGLHVDQUF3QztJQUN4QyxzQkFBdUI7SUFDdkIsdUJBQXdCO0lBQ3hCLHNCQUF1QjtJQUN2QixlQUFnQjtJQUNoQixPQUFROzs7Ozs7Ozs7OztBQVVWLDBDQUdDOzs7Ozs7Ozs7SUEwR0M7O09BRUc7SUFDSCwyQkFBNEI7SUFFNUI7Ozs7Ozs7OztPQVNHO0lBQ0gsNEJBQTZCO0lBRTdCOztPQUVHO0lBQ0gsd0JBQXlCO0lBRXpCOztPQUVHO0lBQ0gsYUFBYztJQUVkOztPQUVHO0lBQ0gsY0FBZTtJQUVmOzs7T0FHRztJQUNILHVCQUF3QjtJQUV4Qjs7T0FFRztJQUNILHlCQUE0QjtJQUM1Qix1QkFBd0I7SUFFeEI7O09BRUc7SUFDSCxPQUFROzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStCViw2Q0FHQzs7Ozs7Ozs7O0lBT0MsOEJBQStCO0lBQy9CLHVCQUF3QjtJQUN4QixPQUFROzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQlYsNENBR0M7Ozs7Ozs7OztJQU9DLHNCQUF1QjtJQUN2Qix1QkFBd0I7SUFDeEIscUJBQXNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUR4QiwwQ0FFQzs7Ozs7OztJQUdDLHVCQUF3QjtJQUN4QixzQkFBdUI7SUFDdkIsa0JBQW1CO0lBQ25CLHNCQUF1QjtJQUN2QixjQUFlO0lBQ2YsbUJBQW9CO0lBQ3BCLE9BQVE7Ozs7O0lBUVIsNEJBQTRCO0lBQzVCLE9BQWM7SUFDZCxzREFBc0Q7SUFDdEQsUUFBZTtJQUNmLGtEQUFrRDtJQUNsRCxRQUFlO0lBQ2YsMERBQTBEO0lBQzFELFdBQWtCO0lBQ2xCLHdFQUF3RTtJQUN4RSxzQkFBNkI7SUFDN0Isc0VBQXNFO0lBQ3RFLDJCQUFpQztJQUNqQyxlQUFnQjtJQUNoQixnQ0FBZ0M7SUFDaEMsV0FBaUI7Ozs7O0lBS2pCLHlFQUF5RTtJQUN6RSwwREFBMEQ7SUFDMUQsa0JBQW1CO0lBQ25CLHlGQUF5RjtJQUN6RixxQkFBc0I7SUFDdEIsNkVBQTZFO0lBQzdFLDRCQUE2QjtJQUM3Qix5RUFBeUU7SUFDekUsNkJBQThCO0lBQzlCLDZCQUE4QjtJQUM5QixrRUFBa0U7SUFDbEUsNEJBQTZCO0lBQzdCLGlHQUFpRztJQUNqRyxzREFBc0Q7SUFDdEQscUJBQXNCO0lBQ3RCLHFFQUFxRTtJQUNyRSxvQkFBcUI7SUFDckIsaUdBQWlHO0lBQ2pHLHlFQUF5RTtJQUN6RSx3QkFBeUI7SUFDekIsZ0JBQWlCO0lBQ2pCLHdFQUF3RTtJQUN4RSw2QkFBOEI7SUFDOUIsY0FBZTtJQUNmLGlCQUFrQjtJQUNsQixjQUFlO0lBQ2YsMkJBQTRCO0lBQzVCLGdGQUFnRjtJQUNoRixPQUFRO0lBQ1Isb0RBQW9EO0lBQ3BELGdCQUFpQjtJQUNqQixtQ0FBbUM7SUFDbkMsY0FBMEI7Ozs7O0lBWTFCLGdCQUFpQjtJQUNqQixjQUE0Qjs7Ozs7Ozs7Ozs7O0FBVzlCLE1BQU0sT0FBTyxnQ0FBZ0MsR0FBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtTdHlsZVNhbml0aXplRm59IGZyb20gJy4uLy4uL3Nhbml0aXphdGlvbi9zdHlsZV9zYW5pdGl6ZXInO1xuaW1wb3J0IHtSRWxlbWVudH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZW5kZXJlcic7XG5pbXBvcnQge0xDb250YWluZXJ9IGZyb20gJy4vY29udGFpbmVyJztcbmltcG9ydCB7UGxheWVyQ29udGV4dH0gZnJvbSAnLi9wbGF5ZXInO1xuaW1wb3J0IHtMVmlld30gZnJvbSAnLi92aWV3JztcblxuXG4vKipcbiAqIFRoZSBzdHlsaW5nIGNvbnRleHQgYWN0cyBhcyBhIHN0eWxpbmcgbWFuaWZlc3QgKHNoYXBlZCBhcyBhbiBhcnJheSkgZm9yIGRldGVybWluaW5nIHdoaWNoXG4gKiBzdHlsaW5nIHByb3BlcnRpZXMgaGF2ZSBiZWVuIGFzc2lnbmVkIHZpYSB0aGUgcHJvdmlkZWQgYHVwZGF0ZVN0eWxpbmdNYXBgLCBgdXBkYXRlU3R5bGVQcm9wYFxuICogYW5kIGB1cGRhdGVDbGFzc1Byb3BgIGZ1bmN0aW9ucy4gSXQgYWxzbyBzdG9yZXMgdGhlIHN0YXRpYyBzdHlsZS9jbGFzcyB2YWx1ZXMgdGhhdCB3ZXJlXG4gKiBleHRyYWN0ZWQgZnJvbSB0aGUgdGVtcGxhdGUgYnkgdGhlIGNvbXBpbGVyLlxuICpcbiAqIEEgY29udGV4dCBpcyBjcmVhdGVkIGJ5IEFuZ3VsYXIgd2hlbjpcbiAqIDEuIEFuIGVsZW1lbnQgY29udGFpbnMgc3RhdGljIHN0eWxpbmcgdmFsdWVzIChsaWtlIHN0eWxlPVwiLi4uXCIgb3IgY2xhc3M9XCIuLi5cIilcbiAqIDIuIEFuIGVsZW1lbnQgY29udGFpbnMgc2luZ2xlIHByb3BlcnR5IGJpbmRpbmcgdmFsdWVzIChsaWtlIFtzdHlsZS5wcm9wXT1cInhcIiBvclxuICogW2NsYXNzLnByb3BdPVwieVwiKVxuICogMy4gQW4gZWxlbWVudCBjb250YWlucyBtdWx0aSBwcm9wZXJ0eSBiaW5kaW5nIHZhbHVlcyAobGlrZSBbc3R5bGVdPVwieFwiIG9yIFtjbGFzc109XCJ5XCIpXG4gKiA0LiBBIGRpcmVjdGl2ZSBjb250YWlucyBob3N0IGJpbmRpbmdzIGZvciBzdGF0aWMsIHNpbmdsZSBvciBtdWx0aSBzdHlsaW5nIHByb3BlcnRpZXMvYmluZGluZ3MuXG4gKiA1LiBBbiBhbmltYXRpb24gcGxheWVyIGlzIGFkZGVkIHRvIGFuIGVsZW1lbnQgdmlhIGBhZGRQbGF5ZXJgXG4gKlxuICogTm90ZSB0aGF0IGV2ZW4gaWYgYW4gZWxlbWVudCBjb250YWlucyBzdGF0aWMgc3R5bGluZyB0aGVuIHRoaXMgY29udGV4dCB3aWxsIGJlIGNyZWF0ZWQgYW5kXG4gKiBhdHRhY2hlZCB0byBpdC4gVGhlIHJlYXNvbiB3aHkgdGhpcyBoYXBwZW5zIChpbnN0ZWFkIG9mIHRyZWF0aW5nIHN0eWxlcy9jbGFzc2VzIGFzIHJlZ3VsYXJcbiAqIEhUTUwgYXR0cmlidXRlcykgaXMgYmVjYXVzZSB0aGUgc3R5bGUvY2xhc3MgYmluZGluZ3MgbXVzdCBiZSBhYmxlIHRvIGRlZmF1bHQgdGhlbXNlbHZlcyBiYWNrXG4gKiB0byB0aGVpciByZXNwZWN0aXZlIHN0YXRpYyB2YWx1ZXMgd2hlbiB0aGV5IGFyZSBzZXQgdG8gbnVsbC5cbiAqXG4gKiBTYXkgZm9yIGV4YW1wbGUgd2UgaGF2ZSB0aGlzOlxuICogYGBgXG4gKiA8IS0tIHdoZW4gYG15V2lkdGhFeHA9bnVsbGAgdGhlbiBhIHdpZHRoIG9mIGAxMDBweGBcbiAqICAgICAgd2lsbCBiZSB1c2VkIGEgZGVmYXVsdCB2YWx1ZSBmb3Igd2lkdGggLS0+XG4gKiA8ZGl2IHN0eWxlPVwid2lkdGg6MTAwcHhcIiBbc3R5bGUud2lkdGhdPVwibXlXaWR0aEV4cFwiPjwvZGl2PlxuICogYGBgXG4gKlxuICogRXZlbiBpbiB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZXJlIGFyZSBubyBiaW5kaW5ncywgdGhlIHN0YXRpYyBzdHlsaW5nIGlzIHN0aWxsIHBsYWNlZCBpbnRvIHRoZVxuICogY29udGV4dCBiZWNhdXNlIHRoZXJlIG1heSBiZSBhbm90aGVyIGRpcmVjdGl2ZSBvbiB0aGUgc2FtZSBlbGVtZW50IHRoYXQgaGFzIHN0eWxpbmcuXG4gKlxuICogV2hlbiBBbmd1bGFyIGluaXRpYWxpemVzIHN0eWxpbmcgZGF0YSBmb3IgYW4gZWxlbWVudCB0aGVuIGl0IHdpbGwgZmlyc3QgcmVnaXN0ZXIgdGhlIHN0YXRpY1xuICogc3R5bGluZyB2YWx1ZXMgb24gdGhlIGVsZW1lbnQgdXNpbmcgb25lIG9mIHRoZXNlIHR3byBpbnN0cnVjdGlvbnM6XG4gKlxuICogMS4gZWxlbWVudFN0YXJ0IG9yIGVsZW1lbnQgKHdpdGhpbiB0aGUgdGVtcGxhdGUgZnVuY3Rpb24gb2YgYSBjb21wb25lbnQpXG4gKiAyLiBlbGVtZW50SG9zdEF0dHJzIChmb3IgZGlyZWN0aXZlIGhvc3QgYmluZGluZ3MpXG4gKlxuICogSW4gZWl0aGVyIGNhc2UsIGEgc3R5bGluZyBjb250ZXh0IHdpbGwgYmUgY3JlYXRlZCBhbmQgc3RvcmVkIHdpdGhpbiBhbiBlbGVtZW50J3MgYExWaWV3RGF0YWAuXG4gKiBPbmNlIHRoZSBzdHlsaW5nIGNvbnRleHQgaXMgY3JlYXRlZCB0aGVuIHNpbmdsZSBhbmQgbXVsdGkgcHJvcGVydGllcyBjYW4gYmUgc3RvcmVkIHdpdGhpbiBpdC5cbiAqIEZvciB0aGlzIHRvIGhhcHBlbiwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQ6XG4gKlxuICogYHN0eWxpbmdgIChjYWxsZWQgd2l0aCBzdHlsZSBwcm9wZXJ0aWVzLCBjbGFzcyBwcm9wZXJ0aWVzIGFuZCBhIHNhbml0aXplciArIGEgZGlyZWN0aXZlXG4gKiBpbnN0YW5jZSkuXG4gKlxuICogV2hlbiB0aGlzIGluc3RydWN0aW9uIGlzIGNhbGxlZCBpdCB3aWxsIHBvcHVsYXRlIHRoZSBzdHlsaW5nIGNvbnRleHQgd2l0aCB0aGUgcHJvdmlkZWQgc3R5bGVcbiAqIGFuZCBjbGFzcyBuYW1lcyBpbnRvIHRoZSBjb250ZXh0LlxuICpcbiAqIFRoZSBjb250ZXh0IGl0c2VsZiBsb29rcyBsaWtlIHRoaXM6XG4gKlxuICogY29udGV4dCA9IFtcbiAqICAgLy8gMC04OiBoZWFkZXIgdmFsdWVzIChhYm91dCA4IGVudHJpZXMgb2YgY29uZmlndXJhdGlvbiBkYXRhKVxuICogICAvLyA5KzogdGhpcyBpcyB3aGVyZSBlYWNoIGVudHJ5IGlzIHN0b3JlZDpcbiAqIF1cbiAqXG4gKiBMZXQncyBzYXkgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHRlbXBsYXRlIGNvZGU6XG4gKlxuICogYGBgXG4gKiA8ZGl2IGNsYXNzPVwiZm9vIGJhclwiXG4gKiAgICAgIHN0eWxlPVwid2lkdGg6MjAwcHg7IGNvbG9yOnJlZFwiXG4gKiAgICAgIFtzdHlsZS53aWR0aF09XCJteVdpZHRoRXhwXCJcbiAqICAgICAgW3N0eWxlLmhlaWdodF09XCJteUhlaWdodEV4cFwiXG4gKiAgICAgIFtjbGFzcy5iYXpdPVwibXlCYXpFeHBcIj5cbiAqIGBgYFxuICpcbiAqIFRoZSBjb250ZXh0IGdlbmVyYXRlZCBmcm9tIHRoZXNlIHZhbHVlcyB3aWxsIGxvb2sgbGlrZSB0aGlzIChub3RlIHRoYXRcbiAqIGZvciBlYWNoIGJpbmRpbmcgbmFtZSAodGhlIGNsYXNzIGFuZCBzdHlsZSBiaW5kaW5ncykgdGhlIHZhbHVlcyB3aWxsXG4gKiBiZSBpbnNlcnRlZCB0d2ljZSBpbnRvIHRoZSBhcnJheSAob25jZSBmb3Igc2luZ2xlIHByb3BlcnR5IGVudHJpZXMgYW5kXG4gKiBhZ2FpbiBmb3IgbXVsdGkgcHJvcGVydHkgZW50cmllcykuXG4gKlxuICogY29udGV4dCA9IFtcbiAqICAgLy8gMC04OiBoZWFkZXIgdmFsdWVzIChhYm91dCA4IGVudHJpZXMgb2YgY29uZmlndXJhdGlvbiBkYXRhKVxuICogICAvLyA5KzogdGhpcyBpcyB3aGVyZSBlYWNoIGVudHJ5IGlzIHN0b3JlZDpcbiAqXG4gKiAgIC8vIFNJTkdMRSBQUk9QRVJUSUVTXG4gKiAgIGNvbmZpZ0ZvcldpZHRoLFxuICogICAnd2lkdGgnXG4gKiAgIG15V2lkdGhFeHAsIC8vIHRoZSBiaW5kaW5nIHZhbHVlIG5vdCB0aGUgYmluZGluZyBpdHNlbGZcbiAqICAgMCwgLy8gdGhlIGRpcmVjdGl2ZSBvd25lclxuICpcbiAqICAgY29uZmlnRm9ySGVpZ2h0LFxuICogICAnaGVpZ2h0J1xuICogICBteUhlaWdodEV4cCwgLy8gdGhlIGJpbmRpbmcgdmFsdWUgbm90IHRoZSBiaW5kaW5nIGl0c2VsZlxuICogICAwLCAvLyB0aGUgZGlyZWN0aXZlIG93bmVyXG4gKlxuICogICBjb25maWdGb3JCYXpDbGFzcyxcbiAqICAgJ2JhelxuICogICBteUJhekNsYXNzRXhwLCAvLyB0aGUgYmluZGluZyB2YWx1ZSBub3QgdGhlIGJpbmRpbmcgaXRzZWxmXG4gKiAgIDAsIC8vIHRoZSBkaXJlY3RpdmUgb3duZXJcbiAqXG4gKiAgIC8vIE1VTFRJIFBST1BFUlRJRVNcbiAqICAgY29uZmlnRm9yV2lkdGgsXG4gKiAgICd3aWR0aCdcbiAqICAgbXlXaWR0aEV4cCwgLy8gdGhlIGJpbmRpbmcgdmFsdWUgbm90IHRoZSBiaW5kaW5nIGl0c2VsZlxuICogICAwLCAvLyB0aGUgZGlyZWN0aXZlIG93bmVyXG4gKlxuICogICBjb25maWdGb3JIZWlnaHQsXG4gKiAgICdoZWlnaHQnXG4gKiAgIG15SGVpZ2h0RXhwLCAvLyB0aGUgYmluZGluZyB2YWx1ZSBub3QgdGhlIGJpbmRpbmcgaXRzZWxmXG4gKiAgIDAsIC8vIHRoZSBkaXJlY3RpdmUgb3duZXJcbiAqXG4gKiAgIGNvbmZpZ0ZvckJhekNsYXNzLFxuICogICAnYmF6XG4gKiAgIG15QmF6Q2xhc3NFeHAsIC8vIHRoZSBiaW5kaW5nIHZhbHVlIG5vdCB0aGUgYmluZGluZyBpdHNlbGZcbiAqICAgMCwgLy8gdGhlIGRpcmVjdGl2ZSBvd25lclxuICogXVxuICpcbiAqIFRoZSBjb25maWd1cmF0aW9uIHZhbHVlcyBhcmUgbGVmdCBvdXQgb2YgdGhlIGV4YW1wbGUgYWJvdmUgYmVjYXVzZVxuICogdGhlIG9yZGVyaW5nIG9mIHRoZW0gY291bGQgY2hhbmdlIGJldHdlZW4gY29kZSBwYXRjaGVzLiBQbGVhc2UgcmVhZCB0aGVcbiAqIGRvY3VtZW50YXRpb24gYmVsb3cgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmQgb2Ygd2hhdCB0aGUgY29uZmlndXJhdGlvblxuICogdmFsdWVzIGFyZSBhbmQgaG93IHRoZXkgd29yay5cbiAqXG4gKiBFYWNoIHRpbWUgYSBiaW5kaW5nIHByb3BlcnR5IGlzIHVwZGF0ZWQgKHdoZXRoZXIgaXQgYmUgdGhyb3VnaCBhIHNpbmdsZVxuICogcHJvcGVydHkgaW5zdHJ1Y3Rpb24gbGlrZSBgc3R5bGVQcm9wYCwgYGNsYXNzUHJvcGAsXG4gKiBgc3R5bGVNYXBgIG9yIGBjbGFzc01hcGApIHRoZW4gdGhlIHZhbHVlcyBpbiB0aGUgY29udGV4dCB3aWxsIGJlIHVwZGF0ZWQgYXNcbiAqIHdlbGwuXG4gKlxuICogSWYgZm9yIGV4YW1wbGUgYFtzdHlsZS53aWR0aF1gIHVwZGF0ZXMgdG8gYDU1NXB4YCB0aGVuIGl0cyB2YWx1ZSB3aWxsIGJlIHJlZmxlY3RlZFxuICogaW4gdGhlIGNvbnRleHQgYXMgc286XG4gKlxuICogY29udGV4dCA9IFtcbiAqICAgLy8gLi4uXG4gKiAgIGNvbmZpZ0ZvcldpZHRoLCAvLyB0aGlzIHdpbGwgYmUgbWFya2VkIERJUlRZXG4gKiAgICd3aWR0aCdcbiAqICAgJzU1NXB4JyxcbiAqICAgMCxcbiAqICAgLy8uLlxuICogXVxuICpcbiAqIFRoZSBjb250ZXh0IGFuZCBkaXJlY3RpdmUgZGF0YSB3aWxsIGFsc28gYmUgbWFya2VkIGRpcnR5LlxuICpcbiAqIERlc3BpdGUgdGhlIGNvbnRleHQgYmVpbmcgdXBkYXRlZCwgbm90aGluZyBoYXMgYmVlbiByZW5kZXJlZCBvbiBzY3JlZW4gKG5vdCBzdHlsZXMgb3JcbiAqIGNsYXNzZXMgaGF2ZSBiZWVuIHNldCBvbiB0aGUgZWxlbWVudCkuIFRvIGtpY2sgb2ZmIHJlbmRlcmluZyBmb3IgYW4gZWxlbWVudCB0aGUgZm9sbG93aW5nXG4gKiBmdW5jdGlvbiBuZWVkcyB0byBiZSBydW4gYHN0eWxpbmdBcHBseWAuXG4gKlxuICogYHN0eWxpbmdBcHBseWAgd2lsbCBydW4gdGhyb3VnaCB0aGUgY29udGV4dCBhbmQgZmluZCBlYWNoIGRpcnR5IHZhbHVlIGFuZCByZW5kZXIgdGhlbSBvbnRvXG4gKiB0aGUgZWxlbWVudC4gT25jZSBjb21wbGV0ZSwgYWxsIHN0eWxlcy9jbGFzc2VzIHdpbGwgYmUgc2V0IHRvIGNsZWFuLiBCZWNhdXNlIG9mIHRoaXMsIHRoZSByZW5kZXJcbiAqIGZ1bmN0aW9uIHdpbGwgbm93IGtub3cgbm90IHRvIHJlcnVuIGl0c2VsZiBhZ2FpbiBpZiBjYWxsZWQgYWdhaW4gdW5sZXNzIG5ldyBzdHlsZS9jbGFzcyB2YWx1ZXNcbiAqIGhhdmUgY2hhbmdlZC5cbiAqXG4gKiAjIyBEaXJlY3RpdmVzXG4gKiBEaXJlY3RpdmUgc3R5bGUvY2xhc3MgdmFsdWVzICh3aGljaCBhcmUgcHJvdmlkZWQgdGhyb3VnaCBob3N0IGJpbmRpbmdzKSBhcmUgYWxzbyBzdXBwb3J0ZWQgYW5kXG4gKiBob3VzZWQgd2l0aGluIHRoZSBzYW1lIHN0eWxpbmcgY29udGV4dCBhcyBhcmUgdGVtcGxhdGUtbGV2ZWwgc3R5bGUvY2xhc3MgcHJvcGVydGllcy9iaW5kaW5nc1xuICogU28gbG9uZyBhcyB0aGV5IGFyZSBhbGwgYXNzaWduZWQgdG8gdGhlIHNhbWUgZWxlbWVudCwgYm90aCBkaXJlY3RpdmUtbGV2ZWwgYW5kIHRlbXBsYXRlLWxldmVsXG4gKiBzdHlsaW5nIGJpbmRpbmdzIHNoYXJlIHRoZSBzYW1lIGNvbnRleHQuXG4gKlxuICogRWFjaCBvZiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBzdXBwb3J0cyBhY2NlcHRpbmcgYSBkaXJlY3RpdmUgaW5zdGFuY2UgYXMgYW4gaW5wdXQgcGFyYW1ldGVyOlxuICpcbiAqIC0gYGVsZW1lbnRIb3N0QXR0cnNgXG4gKiAtIGBzdHlsaW5nYFxuICogLSBgc3R5bGVQcm9wYFxuICogLSBgY2xhc3NQcm9wYFxuICogLSBgc3R5bGVNYXBgXG4gKiAtIGBjbGFzc01hcGBcbiAqIC0gYHN0eWxpbmdBcHBseWBcbiAqXG4gKiBFYWNoIHRpbWUgYSBkaXJlY3RpdmUgdmFsdWUgaXMgcGFzc2VkIGluLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGFuIGluZGV4IGJ5IGV4YW1pbmluZyB0aGVcbiAqIGRpcmVjdGl2ZSByZWdpc3RyeSAod2hpY2ggbGl2ZXMgaW4gdGhlIGNvbnRleHQgY29uZmlndXJhdGlvbiBhcmVhKS4gVGhlIGluZGV4IGlzIHRoZW4gdXNlZFxuICogdG8gaGVscCBzaW5nbGUgc3R5bGUgcHJvcGVydGllcyBmaWd1cmUgb3V0IHdoZXJlIGEgdmFsdWUgaXMgbG9jYXRlZCBpbiB0aGUgY29udGV4dC5cbiAqXG4gKlxuICogIyMgU2luZ2xlLWxldmVsIHN0eWxpbmcgYmluZGluZ3MgKGBbc3R5bGUucHJvcF1gIGFuZCBgW2NsYXNzLm5hbWVdYClcbiAqXG4gKiBCb3RoIGBbc3R5bGUucHJvcF1gIGFuZCBgW2NsYXNzLm5hbWVdYCBiaW5kaW5ncyBhcmUgcnVuIHRocm91Z2ggdGhlIGB1cGRhdGVTdHlsZVByb3BgXG4gKiBhbmQgYHVwZGF0ZUNsYXNzUHJvcGAgZnVuY3Rpb25zIHJlc3BlY3RpdmVseS4gVGhleSB3b3JrIGJ5IGV4YW1pbmluZyB0aGUgcHJvdmlkZWRcbiAqIGBvZmZzZXRgIHZhbHVlIGFuZCBhcmUgYWJsZSB0byBsb2NhdGUgdGhlIGV4YWN0IHNwb3QgaW4gdGhlIGNvbnRleHQgd2hlcmUgdGhlXG4gKiBtYXRjaGluZyBzdHlsZSBpcyBsb2NhdGVkLlxuICpcbiAqIEJvdGggYFtzdHlsZS5wcm9wXWAgYW5kIGBbY2xhc3MubmFtZV1gIGJpbmRpbmdzIGFyZSBhYmxlIHRvIHByb2Nlc3MgdGhlc2UgdmFsdWVzXG4gKiBmcm9tIGRpcmVjdGl2ZSBob3N0IGJpbmRpbmdzLiBXaGVuIGV2YWx1YXRlZCAoZnJvbSB0aGUgaG9zdCBiaW5kaW5nIGZ1bmN0aW9uKSB0aGVcbiAqIGBkaXJlY3RpdmVSZWZgIHZhbHVlIGlzIHRoZW4gcGFzc2VkIGluLlxuICpcbiAqIElmIHR3byBkaXJlY3RpdmVzIG9yIGEgZGlyZWN0aXZlICsgYSB0ZW1wbGF0ZSBiaW5kaW5nIGJvdGggd3JpdGUgdG8gdGhlIHNhbWUgc3R5bGUvY2xhc3NcbiAqIGJpbmRpbmcgdGhlbiB0aGUgc3R5bGluZyBjb250ZXh0IGNvZGUgd2lsbCBkZWNpZGUgd2hpY2ggb25lIHdpbnMgYmFzZWQgb24gdGhlIGZvbGxvd2luZ1xuICogcnVsZTpcbiAqXG4gKiAxLiBJZiB0aGUgdGVtcGxhdGUgYmluZGluZyBoYXMgYSB2YWx1ZSB0aGVuIGl0IGFsd2F5cyB3aW5zXG4gKiAyLiBPdGhlcndpc2Ugd2hpY2hldmVyIGZpcnN0LXJlZ2lzdGVyZWQgZGlyZWN0aXZlIHRoYXQgaGFzIHRoYXQgdmFsdWUgZmlyc3Qgd2lsbCB3aW5cbiAqXG4gKiBUaGUgY29kZSBleGFtcGxlIGhlbHBzIG1ha2UgdGhpcyBjbGVhcjpcbiAqXG4gKiBgYGBcbiAqIDwhLS1cbiAqIDxkaXYgW3N0eWxlLndpZHRoXT1cIm15V2lkdGhcIlxuICogICAgICBbbXktd2lkdGgtZGlyZWN0aXZlXT1cIic2MDBweCdcIj5cbiAqIC0tPlxuICpcbiAqIEBEaXJlY3RpdmUoe1xuICogIHNlbGVjdG9yOiAnW215LXdpZHRoLWRpcmVjdGl2ZSddXG4gKiB9KVxuICogY2xhc3MgTXlXaWR0aERpcmVjdGl2ZSB7XG4gKiAgIEBJbnB1dCgnbXktd2lkdGgtZGlyZWN0aXZlJylcbiAqICAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpXG4gKiAgIHB1YmxpYyB3aWR0aCA9IG51bGw7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBTaW5jZSB0aGVyZSBpcyBhIHN0eWxlIGJpbmRpbmcgZm9yIHdpZHRoIHByZXNlbnQgb24gdGhlIGVsZW1lbnQgKGBbc3R5bGUud2lkdGhdYCkgdGhlblxuICogaXQgd2lsbCBhbHdheXMgd2luIG92ZXIgdGhlIHdpZHRoIGJpbmRpbmcgdGhhdCBpcyBwcmVzZW50IGFzIGEgaG9zdCBiaW5kaW5nIHdpdGhpblxuICogdGhlIGBNeVdpZHRoRGlyZWN0aXZlYC4gSG93ZXZlciwgaWYgYFtzdHlsZS53aWR0aF1gIHJlbmRlcnMgYXMgYG51bGxgIChzbyBgbXlXaWR0aD1udWxsYClcbiAqIHRoZW4gdGhlIGBNeVdpZHRoRGlyZWN0aXZlYCB3aWxsIGJlIGFibGUgdG8gd3JpdGUgdG8gdGhlIGB3aWR0aGAgc3R5bGUgd2l0aGluIHRoZSBjb250ZXh0LlxuICogU2ltcGx5IHB1dCwgd2hpY2hldmVyIGRpcmVjdGl2ZSB3cml0ZXMgdG8gYSB2YWx1ZSBmaXJzdCBlbmRzIHVwIGhhdmluZyBvd25lcnNoaXAgb2YgaXQgYXNcbiAqIGxvbmcgYXMgdGhlIHRlbXBsYXRlIGRpZG4ndCBzZXQgYW55dGhpbmcuXG4gKlxuICogVGhlIHdheSBpbiB3aGljaCB0aGUgb3duZXJzaGlwIGlzIGZhY2lsaXRhdGVkIGlzIHRocm91Z2ggaW5kZXggdmFsdWUuIFRoZSBlYXJsaWVzdCBkaXJlY3RpdmVzXG4gKiBnZXQgdGhlIHNtYWxsZXN0IGluZGV4IHZhbHVlcyAod2l0aCAwIGJlaW5nIHJlc2VydmVkIGZvciB0aGUgdGVtcGxhdGUgZWxlbWVudCBiaW5kaW5ncykuIEVhY2hcbiAqIHRpbWUgYSB2YWx1ZSBpcyB3cml0dGVuIGZyb20gYSBkaXJlY3RpdmUgb3IgdGhlIHRlbXBsYXRlIGJpbmRpbmdzLCB0aGUgdmFsdWUgaXRzZWxmIGdldHNcbiAqIGFzc2lnbmVkIHRoZSBkaXJlY3RpdmUgaW5kZXggdmFsdWUgaW4gaXRzIGRhdGEuIElmIGFub3RoZXIgZGlyZWN0aXZlIHdyaXRlcyBhIHZhbHVlIGFnYWluIHRoZW5cbiAqIGl0cyBkaXJlY3RpdmUgaW5kZXggZ2V0cyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBkaXJlY3RpdmUgaW5kZXggdGhhdCBleGlzdHMgb24gdGhlIGVsZW1lbnQuIE9ubHlcbiAqIHdoZW4gdGhlIG5ldyB2YWx1ZSdzIGRpcmVjdGl2ZSBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIGRpcmVjdGl2ZSBpbmRleCB0aGVuIHRoZSBuZXdcbiAqIHZhbHVlIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgY29udGV4dC4gQnV0LCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbnVsbCB0aGVuIHRoZSBuZXcgdmFsdWUgaXNcbiAqIHdyaXR0ZW4gYnkgdGhlIGxlc3MgaW1wb3J0YW50IGRpcmVjdGl2ZS5cbiAqXG4gKiBFYWNoIGRpcmVjdGl2ZSBhbHNvIGhhcyBpdHMgb3duIHNhbml0aXplciBhbmQgZGlydHkgZmxhZ3MuIFRoZXNlIHZhbHVlcyBhcmUgY29uc3VtZWQgd2l0aGluIHRoZVxuICogcmVuZGVyaW5nIGZ1bmN0aW9uLlxuICpcbiAqXG4gKiAjIyBNdWx0aS1sZXZlbCBzdHlsaW5nIGJpbmRpbmdzIChgW3N0eWxlXWAgYW5kIGBbY2xhc3NdYClcbiAqXG4gKiBNdWx0aS1sZXZlbCBzdHlsaW5nIGJpbmRpbmdzIGFyZSB0cmVhdGVkIGFzIGxlc3MgaW1wb3J0YW50IChsZXNzIHNwZWNpZmljKSBhcyBzaW5nbGUtbGV2ZWxcbiAqIGJpbmRpbmdzICh0aGluZ3MgbGlrZSBgW3N0eWxlLnByb3BdYCBhbmQgYFtjbGFzcy5uYW1lXWApLlxuICpcbiAqIE11bHRpLWxldmVsIGJpbmRpbmdzIGFyZSBzdGlsbCBhcHBsaWVkIHRvIHRoZSBjb250ZXh0IGluIGEgc2ltaWxhciB3YXkgYXMgYXJlIHNpbmdsZSBsZXZlbFxuICogYmluZGluZ3MsIGJ1dCB0aGlzIHByb2Nlc3Mgd29ya3MgYnkgZGlmZmluZyB0aGUgbmV3IG11bHRpLWxldmVsIHZhbHVlcyAod2hpY2ggYXJlIGtleS92YWx1ZVxuICogbWFwcykgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0IG9mIHN0eWxlcyB0aGF0IGxpdmUgaW4gdGhlIGNvbnRleHQuIEVhY2ggdGltZSBhIG5ldyBtYXAgdmFsdWVcbiAqIGlzIGRldGVjdGVkICh2aWEgaWRlbnRpdHkgY2hlY2spIHRoZW4gaXQgd2lsbCBsb29wIHRocm91Z2ggdGhlIHZhbHVlcyBhbmQgZmlndXJlIG91dCB3aGF0XG4gKiBoYXMgY2hhbmdlZCBhbmQgcmVvcmRlciB0aGUgY29udGV4dCBhcnJheSB0byBtYXRjaCB0aGUgb3JkZXJpbmcgb2YgdGhlIGtleXMuIFRoaXMgcmVvcmRlcmluZ1xuICogb2YgdGhlIGNvbnRleHQgbWFrZXMgc3VyZSB0aGF0IGZvbGxvdy11cCB0cmF2ZXJzYWxzIG9mIHRoZSBjb250ZXh0IHdoZW4gdXBkYXRlZCBhZ2FpbnN0IHRoZVxuICoga2V5L3ZhbHVlIG1hcCBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gbyhuKSAod2hlcmUgXCJuXCIgaXMgdGhlIHNpemUgb2YgdGhlIGtleS92YWx1ZSBtYXApLlxuICpcbiAqIElmIGEgYGRpcmVjdGl2ZVJlZmAgdmFsdWUgaXMgcGFzc2VkIGluIHRoZW4gdGhlIHN0eWxpbmcgYWxnb3JpdGhtIGNvZGUgd2lsbCB0YWtlIHRoZSBkaXJlY3RpdmUnc1xuICogcHJpb3JpdGl6YXRpb24gaW5kZXggaW50byBhY2NvdW50IGFuZCB1cGRhdGUgdGhlIHZhbHVlcyB3aXRoIHJlc3BlY3QgdG8gbW9yZSBpbXBvcnRhbnRcbiAqIGRpcmVjdGl2ZXMuIFRoaXMgbWVhbnMgdGhhdCBpZiBhIHZhbHVlIHN1Y2ggYXMgYHdpZHRoYCBpcyB1cGRhdGVkIGluIHR3byBkaWZmZXJlbnQgYFtzdHlsZV1gXG4gKiBiaW5kaW5ncyAoc2F5IG9uZSBvbiB0aGUgdGVtcGxhdGUgYW5kIGFub3RoZXIgd2l0aGluIGEgZGlyZWN0aXZlIHRoYXQgc2l0cyBvbiB0aGUgc2FtZSBlbGVtZW50KVxuICogdGhlbiB0aGUgYWxnb3JpdGhtIHdpbGwgZGVjaWRlIGhvdyB0byB1cGRhdGUgdGhlIHZhbHVlIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgaGV1cmlzdGljOlxuICpcbiAqIDEuIElmIHRoZSB0ZW1wbGF0ZSBiaW5kaW5nIGhhcyBhIHZhbHVlIHRoZW4gaXQgYWx3YXlzIHdpbnNcbiAqIDIuIElmIG5vdCB0aGVuIHdoaWNoZXZlciBmaXJzdC1yZWdpc3RlcmVkIGRpcmVjdGl2ZSB0aGF0IGhhcyB0aGF0IHZhbHVlIGZpcnN0IHdpbGwgd2luXG4gKlxuICogSXQgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgdmFsdWUgaWYgaXQgd2FzIHNldCB0byBgbnVsbGAgYnkgYSBwcmV2aW91cyBkaXJlY3RpdmUgKG9yIHRoZSB0ZW1wbGF0ZSkuXG4gKlxuICogRWFjaCB0aW1lIGEgdmFsdWUgaXMgdXBkYXRlZCAob3IgcmVtb3ZlZCkgdGhlbiB0aGUgY29udGV4dCB3aWxsIGNoYW5nZSBzaGFwZSB0byBiZXR0ZXIgbWF0Y2hcbiAqIHRoZSBvcmRlcmluZyBvZiB0aGUgc3R5bGluZyBkYXRhIGFzIHdlbGwgYXMgdGhlIG9yZGVyaW5nIG9mIGVhY2ggZGlyZWN0aXZlIHRoYXQgY29udGFpbnMgc3R5bGluZ1xuICogZGF0YS4gKFNlZSBgcGF0Y2hTdHlsaW5nTWFwSW50b0NvbnRleHRgIGluc2lkZSBvZiBjbGFzc19hbmRfc3R5bGVfYmluZGluZ3MudHMgdG8gYmV0dGVyXG4gKiB1bmRlcnN0YW5kIGhvdyB0aGlzIHdvcmtzLilcbiAqXG4gKiAjIyBSZW5kZXJpbmdcbiAqIFRoZSByZW5kZXJpbmcgbWVjaGFuaXNtICh3aGVuIHRoZSBzdHlsaW5nIGRhdGEgaXMgYXBwbGllZCBvbiBzY3JlZW4pIG9jY3VycyB2aWEgdGhlXG4gKiBgc3R5bGluZ0FwcGx5YCBmdW5jdGlvbiBhbmQgaXMgZGVzaWduZWQgdG8gcnVuIGFmdGVyICoqYWxsKiogc3R5bGluZyBmdW5jdGlvbnMgaGF2ZSBiZWVuXG4gKiBldmFsdWF0ZWQuIFRoZSByZW5kZXJpbmcgYWxnb3JpdGhtIHdpbGwgbG9vcCBvdmVyIHRoZSBjb250ZXh0IGFuZCBvbmx5IGFwcGx5IHRoZSBzdHlsZXMgdGhhdCBhcmVcbiAqIGZsYWdnZWQgYXMgZGlydHkgKGVpdGhlciBiZWNhdXNlIHRoZXkgYXJlIG5ldywgdXBkYXRlZCBvciBoYXZlIGJlZW4gcmVtb3ZlZCB2aWEgbXVsdGkgb3JcbiAqIHNpbmdsZSBiaW5kaW5ncykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3R5bGluZ0NvbnRleHQgZXh0ZW5kc1xuICAgIEFycmF5PHtba2V5OiBzdHJpbmddOiBhbnl9fG51bWJlcnxzdHJpbmd8Ym9vbGVhbnxSRWxlbWVudHxTdHlsZVNhbml0aXplRm58UGxheWVyQ29udGV4dHxudWxsPiB7XG4gIC8qKlxuICAgKiBMb2NhdGlvbiBvZiBlbGVtZW50IHRoYXQgaXMgdXNlZCBhcyBhIHRhcmdldCBmb3IgdGhpcyBjb250ZXh0LlxuICAgKi9cbiAgW1N0eWxpbmdJbmRleC5FbGVtZW50UG9zaXRpb25dOiBMQ29udGFpbmVyfExWaWV3fFJFbGVtZW50fG51bGw7XG5cbiAgLyoqXG4gICAqIEEgbnVtZXJpYyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdHVzICh3aGV0aGVyIHRoZSBjb250ZXh0IGlzIGRpcnR5IG9yIG5vdClcbiAgICogbWl4ZWQgdG9nZXRoZXIgKHVzaW5nIGJpdCBzaGlmdGluZykgd2l0aCBhIGluZGV4IHZhbHVlIHdoaWNoIHRlbGxzIHRoZSBzdGFydGluZyBpbmRleCB2YWx1ZVxuICAgKiBvZiB3aGVyZSB0aGUgbXVsdGkgc3R5bGUgZW50cmllcyBiZWdpbi5cbiAgICovXG4gIFtTdHlsaW5nSW5kZXguTWFzdGVyRmxhZ1Bvc2l0aW9uXTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBMb2NhdGlvbiBvZiB0aGUgY29sbGVjdGlvbiBvZiBkaXJlY3RpdmVzIGZvciB0aGlzIGNvbnRleHRcbiAgICovXG4gIFtTdHlsaW5nSW5kZXguRGlyZWN0aXZlUmVnaXN0cnlQb3NpdGlvbl06IERpcmVjdGl2ZVJlZ2lzdHJ5VmFsdWVzO1xuXG4gIC8qKlxuICAgKiBMb2NhdGlvbiBvZiBhbGwgc3RhdGljIHN0eWxlcyB2YWx1ZXNcbiAgICovXG4gIFtTdHlsaW5nSW5kZXguSW5pdGlhbFN0eWxlVmFsdWVzUG9zaXRpb25dOiBJbml0aWFsU3R5bGluZ1ZhbHVlcztcblxuICAvKipcbiAgICogTG9jYXRpb24gb2YgYWxsIHN0YXRpYyBjbGFzcyB2YWx1ZXNcbiAgICovXG4gIFtTdHlsaW5nSW5kZXguSW5pdGlhbENsYXNzVmFsdWVzUG9zaXRpb25dOiBJbml0aWFsU3R5bGluZ1ZhbHVlcztcblxuICAvKipcbiAgICogQSBudW1lcmljIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgY2xhc3MgaW5kZXggb2Zmc2V0IHZhbHVlLiBXaGVuZXZlciBhIHNpbmdsZSBjbGFzcyBpc1xuICAgKiBhcHBsaWVkICh1c2luZyBgY2xhc3NQcm9wYCkgaXQgc2hvdWxkIGhhdmUgYW4gc3R5bGluZyBpbmRleCB2YWx1ZSB0aGF0IGRvZXNuJ3RcbiAgICogbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBhbnkgc3R5bGUgdmFsdWVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbnRleHQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LlNpbmdsZVByb3BPZmZzZXRQb3NpdGlvbnNdOiBTaW5nbGVQcm9wT2Zmc2V0VmFsdWVzO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCBjbGFzcyB2YWx1ZSB0aGF0IHdhcyBpbnRlcnByZXRlZCBieSBgc3R5bGVNYXBgLiBUaGlzIGlzIGNhY2hlZFxuICAgKiBTbyB0aGF0IHRoZSBhbGdvcml0aG0gY2FuIGV4aXQgZWFybHkgaW5jYXNlIHRoZSB2YWx1ZSBoYXMgbm90IGNoYW5nZWQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4LkNhY2hlZE11bHRpQ2xhc3Nlc106IGFueXxNYXBCYXNlZE9mZnNldFZhbHVlcztcblxuICAvKipcbiAgICogVGhlIGxhc3Qgc3R5bGUgdmFsdWUgdGhhdCB3YXMgaW50ZXJwcmV0ZWQgYnkgYGNsYXNzTWFwYC4gVGhpcyBpcyBjYWNoZWRcbiAgICogU28gdGhhdCB0aGUgYWxnb3JpdGhtIGNhbiBleGl0IGVhcmx5IGluY2FzZSB0aGUgdmFsdWUgaGFzIG5vdCBjaGFuZ2VkLlxuICAgKi9cbiAgW1N0eWxpbmdJbmRleC5DYWNoZWRNdWx0aVN0eWxlc106IGFueXxNYXBCYXNlZE9mZnNldFZhbHVlcztcblxuICAvKipcbiAgICogQSBxdWV1ZSBvZiBhbGwgaG9zdFN0eWxpbmcgaW5zdHJ1Y3Rpb25zLlxuICAgKlxuICAgKiBUaGlzIGFycmF5IChxdWV1ZSkgaXMgcG9wdWxhdGVkIG9ubHkgd2hlbiBob3N0LWxldmVsIHN0eWxpbmcgaW5zdHJ1Y3Rpb25zXG4gICAqIChlLmcuIGBob3N0U3R5bGVNYXBgIGFuZCBgaG9zdENsYXNzUHJvcGApIGFyZSB1c2VkIHRvIGFwcGx5IHN0eWxlIGFuZFxuICAgKiBjbGFzcyB2YWx1ZXMgdmlhIGhvc3QgYmluZGluZ3MgdG8gdGhlIGhvc3QgZWxlbWVudC4gRGVzcGl0ZSB0aGVzZSBiZWluZ1xuICAgKiBzdGFuZGFyZCBhbmd1bGFyIGluc3RydWN0aW9ucywgdGhleSBhcmUgbm90IGRlc2lnbmVkIHRvIGltbWVkaWF0ZWx5IGFwcGx5XG4gICAqIHRoZWlyIHZhbHVlcyB0byB0aGUgc3R5bGluZyBjb250ZXh0IHdoZW4gZXhlY3V0ZWQuIFdoYXQgaGFwcGVucyBpbnN0ZWFkIGlzXG4gICAqIGEgcXVldWUgaXMgY29uc3RydWN0ZWQgYW5kIGVhY2ggaW5zdHJ1Y3Rpb24gaXMgcG9wdWxhdGVkIGludG8gdGhlIHF1ZXVlLlxuICAgKiBUaGVuLCBvbmNlIHRoZSBzdHlsZS9jbGFzcyB2YWx1ZXMgYXJlIHNldCB0byBmbHVzaCAodmlhIGBzdHlsaW5nQXBwbHlgIG9yXG4gICAqIGBob3N0U3R5bGluZ0FwcGx5YCksIHRoZSBxdWV1ZSBpcyBmbHVzaGVkIGFuZCB0aGUgdmFsdWVzIGFyZSByZW5kZXJlZCBvbnRvXG4gICAqIHRoZSBob3N0IGVsZW1lbnQuXG4gICAqL1xuICBbU3R5bGluZ0luZGV4Lkhvc3RJbnN0cnVjdGlvbnNRdWV1ZV06IEhvc3RJbnN0cnVjdGlvbnNRdWV1ZXxudWxsO1xuXG4gIC8qKlxuICAgKiBMb2NhdGlvbiBvZiBhbmltYXRpb24gY29udGV4dCAod2hpY2ggY29udGFpbnMgdGhlIGFjdGl2ZSBwbGF5ZXJzKSBmb3IgdGhpcyBlbGVtZW50IHN0eWxpbmdcbiAgICogY29udGV4dC5cbiAgICovXG4gIFtTdHlsaW5nSW5kZXguUGxheWVyQ29udGV4dF06IFBsYXllckNvbnRleHR8bnVsbDtcbn1cblxuLyoqXG4gKiBBIHF1ZXVlIG9mIGFsbCBob3N0LXJlbGF0ZWQgc3R5bGluZyBpbnN0cnVjdGlvbnMgKHRoZXNlIGFyZSBidWZmZXJlZCBhbmQgZXZhbHVhdGVkIGp1c3QgYmVmb3JlXG4gKiB0aGUgc3R5bGluZyBpcyBhcHBsaWVkKS5cbiAqXG4gKiBUaGlzIHF1ZXVlIGlzIHVzZWQgd2hlbiBhbnkgYGhvc3RTdHlsaW5nYCBpbnN0cnVjdGlvbnMgYXJlIGV4ZWN1dGVkIGZyb20gdGhlIGBob3N0QmluZGluZ3NgXG4gKiBmdW5jdGlvbi4gVGVtcGxhdGUtbGV2ZWwgc3R5bGluZyBmdW5jdGlvbnMgKGUuZy4gYHN0eWxlTWFwYCBhbmQgYGNsYXNzUHJvcGApXG4gKiBkbyBub3QgbWFrZSB1c2Ugb2YgdGhpcyBxdWV1ZSAodGhleSBhcmUgYXBwbGllZCB0byB0aGUgc3R5bGluZyBjb250ZXh0IGltbWVkaWF0ZWx5KS5cbiAqXG4gKiBEdWUgdG8gdGhlIG5hdHVyZSBvZiBob3cgY29tcG9uZW50cy9kaXJlY3RpdmVzIGFyZSBldmFsdWF0ZWQsIGRpcmVjdGl2ZXMgKGJvdGggcGFyZW50IGFuZFxuICogc3ViY2xhc3MgZGlyZWN0aXZlcykgbWF5IG5vdCBhcHBseSB0aGVpciBzdHlsaW5nIGF0IHRoZSByaWdodCB0aW1lIGZvciB0aGUgc3R5bGluZ1xuICogYWxnb3JpdGhtIGNvZGUgdG8gcHJpb3JpdGl6ZSB0aGVtLiBUaGVyZWZvcmUsIGFsbCBob3N0LXN0eWxpbmcgaW5zdHJ1Y3Rpb25zIGFyZSBxdWV1ZWQgdXBcbiAqIChidWZmZXJlZCkgaW50byB0aGUgYXJyYXkgYmVsb3cgYW5kIGFyZSBhdXRvbWF0aWNhbGx5IHNvcnRlZCBpbiB0ZXJtcyBvZiBwcmlvcml0eS4gVGhlXG4gKiBwcmlvcml0eSBmb3IgaG9zdC1zdHlsaW5nIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogMS4gVGhlIHRlbXBsYXRlICh0aGlzIGRvZXNuJ3QgZ2V0IHF1ZXVlZCwgYnV0IGdldHMgZXZhbHVhdGVkIGltbWVkaWF0ZWx5KVxuICogMi4gQW55IGRpcmVjdGl2ZXMgcHJlc2VudCBvbiB0aGUgaG9zdFxuICogICAyYSkgZmlyc3QgY2hpbGQgZGlyZWN0aXZlIHN0eWxpbmcgYmluZGluZ3MgYXJlIHVwZGF0ZWRcbiAqICAgMmIpIHRoZW4gYW55IHBhcmVudCBkaXJlY3RpdmVzXG4gKiAzLiBDb21wb25lbnQgaG9zdCBiaW5kaW5nc1xuICpcbiAqIEFuZ3VsYXIgcnVucyBjaGFuZ2UgZGV0ZWN0aW9uIGZvciBlYWNoIG9mIHRoZXNlIGNhc2VzIGluIGEgZGlmZmVyZW50IG9yZGVyLiBCZWNhdXNlIG9mIHRoaXNcbiAqIHRoZSBhcnJheSBiZWxvdyBpcyBwb3B1bGF0ZWQgd2l0aCBlYWNoIG9mIHRoZSBob3N0IHN0eWxpbmcgZnVuY3Rpb25zICsgdGhlaXIgYXJndW1lbnRzLlxuICpcbiAqIGNvbnRleHRbSG9zdEluc3RydWN0aW9uc1F1ZXVlXSA9IFtcbiAqICAgZGlyZWN0aXZlSW5kZXgsXG4gKiAgIGhvc3RTdHlsaW5nRm4sXG4gKiAgIFthcmd1bWVudHNGb3JGbl0sXG4gKiAgIC4uLlxuICogICBhbm90aGVyRGlyZWN0aXZlSW5kZXgsIDwtLSB0aGlzIGhhcyBhIGxvd2VyIHByaW9yaXR5IChhIGhpZ2hlciBkaXJlY3RpdmUgaW5kZXgpXG4gKiAgIGFub3RoZXJIb3N0U3R5bGluZ0ZuLFxuICogICBbYXJndW1lbnRzRm9yRm5dLFxuICogXVxuICpcbiAqIFdoZW4gYHJlbmRlclN0eWxpbmdgIGlzIGNhbGxlZCAod2l0aGluIGBjbGFzc19hbmRfaG9zdF9iaW5kaW5ncy50c2ApIHRoZW4gdGhlIHF1ZXVlIGlzXG4gKiBkcmFpbmVkIGFuZCBlYWNoIG9mIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGV4ZWN1dGVkLiBPbmNlIGNvbXBsZXRlIHRoZSBxdWV1ZSBpcyBlbXB0eSB0aGVuXG4gKiB0aGUgc3R5bGUvY2xhc3MgYmluZGluZyBjb2RlIGlzIHJlbmRlcmVkIG9uIHRoZSBlbGVtZW50ICh3aGljaCBpcyB3aGF0IGhhcHBlbnMgbm9ybWFsbHlcbiAqIGluc2lkZSBvZiBgcmVuZGVyU3R5bGluZ2ApLlxuICpcbiAqIFJpZ2h0IG5vdyBlYWNoIGRpcmVjdGl2ZSdzIGhvc3RCaW5kaW5ncyBmdW5jdGlvbiwgYXMgd2VsbCB0aGUgdGVtcGxhdGUgZnVuY3Rpb24sIGJvdGhcbiAqIGNhbGwgYHN0eWxpbmdBcHBseSgpYCBhbmQgYGhvc3RTdHlsaW5nQXBwbHkoKWAuIFRoZSBmYWN0IHRoYXQgdGhpcyBpcyBjYWxsZWRcbiAqIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZSBlbGVtZW50IChiL2Mgb2YgY2hhbmdlIGRldGVjdGlvbikgY2F1c2VzIHNvbWUgaXNzdWVzLiBUbyBhdm9pZFxuICogaGF2aW5nIHN0eWxpbmcgY29kZSBiZSByZW5kZXJlZCBvbiBhbiBlbGVtZW50IG11bHRpcGxlIHRpbWVzLCB0aGUgYEhvc3RJbnN0cnVjdGlvbnNRdWV1ZWBcbiAqIHJlc2VydmVzIGEgc2xvdCBmb3IgYSByZWZlcmVuY2UgcG9pbnRpbmcgdG8gdGhlIHZlcnkgbGFzdCBkaXJlY3RpdmUgdGhhdCB3YXMgcmVnaXN0ZXJlZCBhbmRcbiAqIG9ubHkgYWxsb3dzIGZvciBzdHlsaW5nIHRvIGJlIGFwcGxpZWQgb25jZSB0aGF0IGRpcmVjdGl2ZSBpcyBlbmNvdW50ZXJlZCAod2hpY2ggd2lsbCBoYXBwZW5cbiAqIGFzIHRoZSBsYXN0IHVwZGF0ZSBmb3IgdGhhdCBlbGVtZW50KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3N0SW5zdHJ1Y3Rpb25zUXVldWUgZXh0ZW5kcyBBcnJheTxudW1iZXJ8RnVuY3Rpb258YW55W10+IHsgWzBdOiBudW1iZXI7IH1cblxuLyoqXG4gKiBVc2VkIGFzIGEgcmVmZXJlbmNlIGZvciBhbnkgdmFsdWVzIGNvbnRhaW5lZCB3aXRoaW4gYEhvc3RJbnN0cnVjdGlvbnNRdWV1ZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIEhvc3RJbnN0cnVjdGlvbnNRdWV1ZUluZGV4IHtcbiAgTGFzdFJlZ2lzdGVyZWREaXJlY3RpdmVJbmRleFBvc2l0aW9uID0gMCxcbiAgVmFsdWVzU3RhcnRQb3NpdGlvbiA9IDEsXG4gIERpcmVjdGl2ZUluZGV4T2Zmc2V0ID0gMCxcbiAgSW5zdHJ1Y3Rpb25Gbk9mZnNldCA9IDEsXG4gIFBhcmFtc09mZnNldCA9IDIsXG4gIFNpemUgPSAzLFxufVxuXG4vKipcbiAqIFVzZWQgYXMgYSBzdHlsaW5nIGFycmF5IHRvIGhvdXNlIHN0YXRpYyBjbGFzcyBhbmQgc3R5bGUgdmFsdWVzIHRoYXQgd2VyZSBleHRyYWN0ZWRcbiAqIGJ5IHRoZSBjb21waWxlciBhbmQgcGxhY2VkIGluIHRoZSBhbmltYXRpb24gY29udGV4dCB2aWEgYGVsZW1lbnRTdGFydGAgYW5kXG4gKiBgZWxlbWVudEhvc3RBdHRyc2AuXG4gKlxuICogU2VlIFtJbml0aWFsU3R5bGluZ1ZhbHVlc0luZGV4XSBmb3IgYSBicmVha2Rvd24gb2YgaG93IGFsbCB0aGlzIHdvcmtzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYWxTdHlsaW5nVmFsdWVzIGV4dGVuZHMgQXJyYXk8c3RyaW5nfGJvb2xlYW58bnVtYmVyfG51bGw+IHtcbiAgW0luaXRpYWxTdHlsaW5nVmFsdWVzSW5kZXguRGVmYXVsdE51bGxWYWx1ZVBvc2l0aW9uXTogbnVsbDtcbiAgW0luaXRpYWxTdHlsaW5nVmFsdWVzSW5kZXguQ2FjaGVkU3RyaW5nVmFsdWVQb3NpdGlvbl06IHN0cmluZ3xudWxsO1xufVxuXG4vKipcbiAqIFVzZWQgYXMgYW4gb2Zmc2V0L3Bvc2l0aW9uIGluZGV4IHRvIGZpZ3VyZSBvdXQgd2hlcmUgaW5pdGlhbCBzdHlsaW5nXG4gKiB2YWx1ZXMgYXJlIGxvY2F0ZWQuXG4gKlxuICogVXNlZCBhcyBhIHJlZmVyZW5jZSBwb2ludCB0byBwcm92aWRlIG1hcmtlcnMgdG8gYWxsIHN0YXRpYyBzdHlsaW5nXG4gKiB2YWx1ZXMgKHRoZSBpbml0aWFsIHN0eWxlIGFuZCBjbGFzcyB2YWx1ZXMgb24gYW4gZWxlbWVudCkgd2l0aGluIGFuXG4gKiBhcnJheSB3aXRoaW4gdGhlIGBTdHlsaW5nQ29udGV4dGAuIFRoaXMgYXJyYXkgY29udGFpbnMga2V5L3ZhbHVlIHBhaXJzXG4gKiB3aGVyZSB0aGUga2V5IGlzIHRoZSBzdHlsZSBwcm9wZXJ0eSBuYW1lIG9yIGNsYXNzTmFtZSBhbmQgdGhlIHZhbHVlIGlzXG4gKiB0aGUgc3R5bGUgdmFsdWUgb3Igd2hldGhlciBvciBub3QgYSBjbGFzcyBpcyBwcmVzZW50IG9uIHRoZSBlbG1lbnQuXG4gKlxuICogVGhlIGZpcnN0IHZhbHVlIGlzIGFsd2F5cyBudWxsIHNvIHRoYXQgYSBpbml0aWFsIGluZGV4IHZhbHVlIG9mXG4gKiBgMGAgd2lsbCBhbHdheXMgcG9pbnQgdG8gYSBudWxsIHZhbHVlLlxuICpcbiAqIFRoZSBzZWNvbmQgdmFsdWUgaXMgYWxzbyBhbHdheXMgbnVsbCB1bmxlc3MgYSBzdHJpbmctYmFzZWQgcmVwcmVzZW50YXRpb25cbiAqIG9mIHRoZSBzdHlsaW5nIGRhdGEgd2FzIGNvbnN0cnVjdGVkIChpdCBnZXRzIGNhY2hlZCBpbiB0aGlzIHNsb3QpLlxuICpcbiAqIElmIGEgPGRpdj4gZWxlbWVudHMgY29udGFpbnMgYSBsaXN0IG9mIHN0YXRpYyBzdHlsaW5nIHZhbHVlcyBsaWtlIHNvOlxuICpcbiAqIDxkaXYgY2xhc3M9XCJmb28gYmFyIGJhelwiIHN0eWxlPVwid2lkdGg6MTAwcHg7IGhlaWdodDoyMDBweDtcIj5cbiAqXG4gKiBUaGVuIHRoZSBpbml0aWFsIHN0eWxlcyBmb3IgdGhhdCB3aWxsIGxvb2sgbGlrZSBzbzpcbiAqXG4gKiBTdHlsZXM6XG4gKiBgYGBcbiAqIFN0eWxpbmdDb250ZXh0W0luaXRpYWxTdHlsZXNJbmRleF0gPSBbXG4gKiAgIG51bGwsIG51bGwsICd3aWR0aCcsICcxMDBweCcsIGhlaWdodCwgJzIwMHB4J1xuICogXVxuICogYGBgXG4gKlxuICogQ2xhc3NlczpcbiAqIGBgYFxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbENsYXNzZXNJbmRleF0gPSBbXG4gKiAgIG51bGwsIG51bGwsICdmb28nLCB0cnVlLCAnYmFyJywgdHJ1ZSwgJ2JheicsIHRydWVcbiAqIF1cbiAqIGBgYFxuICpcbiAqIEluaXRpYWwgc3R5bGUgYW5kIGNsYXNzIGVudHJpZXMgaGF2ZSB0aGVpciBvd24gYXJyYXlzLiBUaGlzIGlzIGJlY2F1c2VcbiAqIGl0J3MgZWFzaWVyIHRvIGFkZCB0byB0aGUgZW5kIG9mIG9uZSBhcnJheSBhbmQgbm90IHRoZW4gaGF2ZSB0byB1cGRhdGVcbiAqIGV2ZXJ5IGNvbnRleHQgZW50cmllcycgcG9pbnRlciBpbmRleCB0byB0aGUgbmV3bHkgb2Zmc2V0ZWQgdmFsdWVzLlxuICpcbiAqIFdoZW4gcHJvcGVydHkgYmluZGluZHMgYXJlIGFkZGVkIHRvIGEgY29udGV4dCB0aGVuIGluaXRpYWwgc3R5bGUvY2xhc3NcbiAqIHZhbHVlcyB3aWxsIGFsc28gYmUgaW5zZXJ0ZWQgaW50byB0aGUgYXJyYXkuIFRoaXMgaXMgdG8gY3JlYXRlIGEgc3BhY2VcbiAqIGluIHRoZSBzaXR1YXRpb24gd2hlbiBhIGZvbGxvdy11cCBkaXJlY3RpdmUgaW5zZXJ0cyBzdGF0aWMgc3R5bGluZyBpbnRvXG4gKiB0aGUgYXJyYXkuIEJ5IGRlZmF1bHQsIHN0eWxlIHZhbHVlcyBhcmUgYG51bGxgIGFuZCBjbGFzcyB2YWx1ZXMgYXJlXG4gKiBgZmFsc2VgIHdoZW4gaW5zZXJ0ZWQgYnkgcHJvcGVydHkgYmluZGluZ3MuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiBgYGBcbiAqIDxkaXYgY2xhc3M9XCJmb28gYmFyIGJhelwiXG4gKiAgICAgIFtjbGFzcy5jYXJdPVwibXlDYXJFeHBcIlxuICogICAgICBzdHlsZT1cIndpZHRoOjEwMHB4OyBoZWlnaHQ6MjAwcHg7XCJcbiAqICAgICAgW3N0eWxlLm9wYWNpdHldPVwibXlPcGFjaXR5RXhwXCI+XG4gKiBgYGBcbiAqXG4gKiBXaWxsIGNvbnN0cnVjdCBpbml0aWFsIHN0eWxpbmcgdmFsdWVzIHRoYXQgbG9vayBsaWtlOlxuICpcbiAqIFN0eWxlczpcbiAqIGBgYFxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbFN0eWxlc0luZGV4XSA9IFtcbiAqICAgbnVsbCwgbnVsbCwgJ3dpZHRoJywgJzEwMHB4JywgaGVpZ2h0LCAnMjAwcHgnLCAnb3BhY2l0eScsIG51bGxcbiAqIF1cbiAqIGBgYFxuICpcbiAqIENsYXNzZXM6XG4gKiBgYGBcbiAqIFN0eWxpbmdDb250ZXh0W0luaXRpYWxDbGFzc2VzSW5kZXhdID0gW1xuICogICBudWxsLCBudWxsLCAnZm9vJywgdHJ1ZSwgJ2JhcicsIHRydWUsICdiYXonLCB0cnVlLCAnY2FyJywgZmFsc2VcbiAqIF1cbiAqIGBgYFxuICpcbiAqIE5vdyBpZiBhIGRpcmVjdGl2ZSBjb21lcyBhbG9uZyBhbmQgaW50cm9kdWNlcyBgY2FyYCBhcyBhIHN0YXRpY1xuICogY2xhc3MgdmFsdWUgb3IgYG9wYWNpdHlgIHRoZW4gdGhvc2UgdmFsdWVzIHdpbGwgYmUgZmlsbGVkIGludG9cbiAqIHRoZSBpbml0aWFsIHN0eWxlcyBhcnJheS5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBcbiAqIEBEaXJlY3RpdmUoe1xuICogICBzZWxlY3RvcjogJ29wYWNpdHktY2FyLWRpcmVjdGl2ZScsXG4gKiAgIGhvc3Q6IHtcbiAqICAgICAnc3R5bGUnOiAnb3BhY2l0eTowLjUnLFxuICogICAgICdjbGFzcyc6ICdjYXInXG4gKiAgIH1cbiAqIH0pXG4gKiBjbGFzcyBPcGFjaXR5Q2FyRGlyZWN0aXZlIHt9XG4gKiBgYGBcbiAqXG4gKiBUaGlzIHdpbGwgcmVuZGVyIGl0c2VsZiBhczpcbiAqXG4gKiBTdHlsZXM6XG4gKiBgYGBcbiAqIFN0eWxpbmdDb250ZXh0W0luaXRpYWxTdHlsZXNJbmRleF0gPSBbXG4gKiAgIG51bGwsIG51bGwsICd3aWR0aCcsICcxMDBweCcsIGhlaWdodCwgJzIwMHB4JywgJ29wYWNpdHknLCAnMC41J1xuICogXVxuICogYGBgXG4gKlxuICogQ2xhc3NlczpcbiAqIGBgYFxuICogU3R5bGluZ0NvbnRleHRbSW5pdGlhbENsYXNzZXNJbmRleF0gPSBbXG4gKiAgIG51bGwsIG51bGwsICdmb28nLCB0cnVlLCAnYmFyJywgdHJ1ZSwgJ2JheicsIHRydWUsICdjYXInLCB0cnVlXG4gKiBdXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gSW5pdGlhbFN0eWxpbmdWYWx1ZXNJbmRleCB7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgdmFsdWUgaXMgYWx3YXlzIGBudWxsYCBzbyB0aGF0IGBzdHlsZXNbMF0gPT0gbnVsbGAgZm9yIHVuYXNzaWduZWQgdmFsdWVzXG4gICAqL1xuICBEZWZhdWx0TnVsbFZhbHVlUG9zaXRpb24gPSAwLFxuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBub24tc3R5bGluZyBjb2RlIHRvIGV4YW1pbmUgd2hhdCB0aGUgc3R5bGUgb3IgY2xhc3NOYW1lIHN0cmluZyBpczpcbiAgICogc3R5bGVzOiBbJ3dpZHRoJywgJzEwMHB4JywgMCwgJ29wYWNpdHknLCBudWxsLCAwLCAnaGVpZ2h0JywgJzIwMHB4JywgMF1cbiAgICogICAgPT4gaW5pdGlhbFN0eWxlc1tDYWNoZWRTdHJpbmdWYWx1ZVBvc2l0aW9uXSA9ICd3aWR0aDoxMDBweDtoZWlnaHQ6MjAwcHgnO1xuICAgKiBjbGFzc2VzOiBbJ2ZvbycsIHRydWUsIDAsICdiYXInLCBmYWxzZSwgMCwgJ2JheicsIHRydWUsIDBdXG4gICAqICAgID0+IGluaXRpYWxDbGFzc2VzW0NhY2hlZFN0cmluZ1ZhbHVlUG9zaXRpb25dID0gJ2ZvbyBiYXInO1xuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcyBgbnVsbGAgYnkgZGVmYXVsdCBhbmQgaXQgd2lsbCBvbmx5IGJlIHBvcHVsYXRlZFxuICAgKiBvbmNlIGBnZXRJbml0aWFsU3R5bGVTdHJpbmdWYWx1ZWAgb3IgYGdldEluaXRpYWxDbGFzc05hbWVWYWx1ZWAgaXMgZXhlY3V0ZWQuXG4gICAqL1xuICBDYWNoZWRTdHJpbmdWYWx1ZVBvc2l0aW9uID0gMSxcblxuICAvKipcbiAgICogV2hlcmUgdGhlIHN0eWxlIG9yIGNsYXNzIHZhbHVlcyBzdGFydCBpbiB0aGUgdHVwbGVcbiAgICovXG4gIEtleVZhbHVlU3RhcnRQb3NpdGlvbiA9IDIsXG5cbiAgLyoqXG4gICAqIFRoZSBvZmZzZXQgdmFsdWUgKGluZGV4ICsgb2Zmc2V0KSBmb3IgdGhlIHByb3BlcnR5IHZhbHVlIGZvciBlYWNoIHN0eWxlL2NsYXNzIGVudHJ5XG4gICAqL1xuICBQcm9wT2Zmc2V0ID0gMCxcblxuICAvKipcbiAgICogVGhlIG9mZnNldCB2YWx1ZSAoaW5kZXggKyBvZmZzZXQpIGZvciB0aGUgc3R5bGUvY2xhc3MgdmFsdWUgZm9yIGVhY2ggc3R5bGUvY2xhc3MgZW50cnlcbiAgICovXG4gIFZhbHVlT2Zmc2V0ID0gMSxcblxuICAvKipcbiAgICogVGhlIG9mZnNldCB2YWx1ZSAoaW5kZXggKyBvZmZzZXQpIGZvciB0aGUgc3R5bGUvY2xhc3MgZGlyZWN0aXZlIG93bmVyIGZvciBlYWNoIHN0eWxlL2NsYXNzXG4gICAgIGVudHJ5XG4gICAqL1xuICBEaXJlY3RpdmVPd25lck9mZnNldCA9IDIsXG5cbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBiaXQgc2V0IGFzaWRlIHRvIG1hcmsgaWYgdGhlIGluaXRpYWwgc3R5bGUgd2FzIGFscmVhZHkgcmVuZGVyZVxuICAgKi9cbiAgQXBwbGllZEZsYWdCaXRQb3NpdGlvbiA9IDBiMCxcbiAgQXBwbGllZEZsYWdCaXRMZW5ndGggPSAxLFxuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgc2l6ZSBmb3IgZWFjaCBzdHlsZS9jbGFzcyBlbnRyeSAocHJvcCArIHZhbHVlICsgZGlyZWN0aXZlT3duZXIpXG4gICAqL1xuICBTaXplID0gM1xufVxuXG4vKipcbiAqIEFuIGFycmF5IGxvY2F0ZWQgaW4gdGhlIFN0eWxpbmdDb250ZXh0IHRoYXQgaG91c2VzIGFsbCBkaXJlY3RpdmUgaW5zdGFuY2VzIGFuZCBhZGRpdGlvbmFsXG4gKiBkYXRhIGFib3V0IHRoZW0uXG4gKlxuICogRWFjaCBlbnRyeSBpbiB0aGlzIGFycmF5IHJlcHJlc2VudHMgYSBzb3VyY2Ugb2Ygd2hlcmUgc3R5bGUvY2xhc3MgYmluZGluZyB2YWx1ZXMgY291bGRcbiAqIGNvbWUgZnJvbS4gQnkgZGVmYXVsdCwgdGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSBkaXJlY3RpdmUgaGVyZSB3aXRoIGEgbnVsbCB2YWx1ZSBhbmRcbiAqIHRoYXQgcmVwcmVzZW50cyBiaW5kaW5ncyB0aGF0IGxpdmUgZGlyZWN0bHkgb24gYW4gZWxlbWVudCBpbiB0aGUgdGVtcGxhdGUgKG5vdCBob3N0IGJpbmRpbmdzKS5cbiAqXG4gKiBFYWNoIHN1Y2Nlc3NpdmUgZW50cnkgaW4gdGhlIGFycmF5IGlzIGFuIGFjdHVhbCBpbnN0YW5jZSBvZiBhIGRpcmVjdGl2ZSBhcyB3ZWxsIGFzIHNvbWVcbiAqIGFkZGl0aW9uYWwgaW5mbyBhYm91dCB0aGF0IGVudHJ5LlxuICpcbiAqIEFuIGVudHJ5IHdpdGhpbiB0aGlzIGFycmF5IGhhcyB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAqIFswXSA9IFRoZSBpbnN0YW5jZSBvZiB0aGUgZGlyZWN0aXZlICh0aGUgZmlyc3QgZW50cnkgaXMgbnVsbCBiZWNhdXNlIGl0cyByZXNlcnZlZCBmb3IgdGhlXG4gKiAgICAgICB0ZW1wbGF0ZSlcbiAqIFsxXSA9IFRoZSBwb2ludGVyIHRoYXQgdGVsbHMgd2hlcmUgdGhlIHNpbmdsZSBzdHlsaW5nIChzdHVmZiBsaWtlIFtjbGFzcy5mb29dIGFuZCBbc3R5bGUucHJvcF0pXG4gKiAgICAgICBvZmZzZXQgdmFsdWVzIGFyZSBsb2NhdGVkLiBUaGlzIHZhbHVlIHdpbGwgYWxsb3cgZm9yIGEgYmluZGluZyBpbnN0cnVjdGlvbiB0byBmaW5kIGV4YWN0bHlcbiAqICAgICAgIHdoZXJlIGEgc3R5bGUgaXMgbG9jYXRlZC5cbiAqIFsyXSA9IFdoZXRoZXIgb3Igbm90IHRoZSBkaXJlY3RpdmUgaGFzIGFueSBzdHlsaW5nIHZhbHVlcyB0aGF0IGFyZSBkaXJ0eS4gVGhpcyBpcyB1c2VkIGFzXG4gKiAgICAgICByZWZlcmVuY2Ugd2l0aGluIHRoZSBgcmVuZGVyU3R5bGluZ2AgZnVuY3Rpb24gdG8gZGVjaWRlIHdoZXRoZXIgdG8gc2tpcCBpdGVyYXRpbmdcbiAqICAgICAgIHRocm91Z2ggdGhlIGNvbnRleHQgd2hlbiByZW5kZXJpbmcgaXMgZXhlY3V0ZWQuXG4gKiBbM10gPSBUaGUgc3R5bGVTYW5pdGl6ZXIgaW5zdGFuY2UgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgZGlyZWN0aXZlLiBBbHRob3VnaCBpdCdzIHVubGlrZWx5LFxuICogICAgICAgYSBkaXJlY3RpdmUgY291bGQgaW50cm9kdWNlIGl0cyBvd24gc3BlY2lhbCBzdHlsZSBzYW5pdGl6ZXIgYW5kIGZvciB0aGlzIHJlYWNoIGVhY2hcbiAqICAgICAgIGRpcmVjdGl2ZSB3aWxsIGdldCBpdHMgb3duIHNwYWNlIGZvciBpdCAoaWYgbnVsbCB0aGVuIHRoZSB2ZXJ5IGZpcnN0IHNhbml0aXplciBpcyB1c2VkKS5cbiAqXG4gKiBFYWNoIHRpbWUgYSBuZXcgZGlyZWN0aXZlIGlzIGFkZGVkIGl0IHdpbGwgaW5zZXJ0IHRoZXNlIGZvdXIgdmFsdWVzIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5LlxuICogV2hlbiB0aGlzIGFycmF5IGlzIGV4YW1pbmVkIHRoZW4gdGhlIHJlc3VsdGluZyBkaXJlY3RpdmVJbmRleCB3aWxsIGJlIHJlc29sdmVkIGJ5IGRpdmlkaW5nIHRoZVxuICogaW5kZXggdmFsdWUgYnkgdGhlIHNpemUgb2YgdGhlIGFycmF5IGVudHJpZXMgKHNvIGlmIERpckEgaXMgYXQgc3BvdCA4IHRoZW4gaXRzIGluZGV4IHdpbGwgYmUgMikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aXZlUmVnaXN0cnlWYWx1ZXMgZXh0ZW5kcyBBcnJheTxudWxsfHt9fGJvb2xlYW58bnVtYmVyfFN0eWxlU2FuaXRpemVGbj4ge1xuICBbRGlyZWN0aXZlUmVnaXN0cnlWYWx1ZXNJbmRleC5TaW5nbGVQcm9wVmFsdWVzSW5kZXhPZmZzZXRdOiBudW1iZXI7XG4gIFtEaXJlY3RpdmVSZWdpc3RyeVZhbHVlc0luZGV4LlN0eWxlU2FuaXRpemVyT2Zmc2V0XTogU3R5bGVTYW5pdGl6ZUZufG51bGw7XG59XG5cbi8qKlxuICogQW4gZW51bSB0aGF0IG91dGxpbmVzIHRoZSBvZmZzZXQvcG9zaXRpb24gdmFsdWVzIGZvciBlYWNoIGRpcmVjdGl2ZSBlbnRyeSBhbmQgaXRzIGRhdGFcbiAqIHRoYXQgYXJlIGhvdXNlZCBpbnNpZGUgb2YgW0RpcmVjdGl2ZVJlZ2lzdHJ5VmFsdWVzXS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gRGlyZWN0aXZlUmVnaXN0cnlWYWx1ZXNJbmRleCB7XG4gIFNpbmdsZVByb3BWYWx1ZXNJbmRleE9mZnNldCA9IDAsXG4gIFN0eWxlU2FuaXRpemVyT2Zmc2V0ID0gMSxcbiAgU2l6ZSA9IDJcbn1cblxuLyoqXG4gKiBBbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBpbmRleCBwb2ludGVyIHZhbHVlcyBmb3IgZXZlcnkgc2luZ2xlIHN0eWxpbmcgcHJvcGVydHlcbiAqIHRoYXQgZXhpc3RzIGluIHRoZSBjb250ZXh0IGFuZCBmb3IgZXZlcnkgZGlyZWN0aXZlLiBJdCBhbHNvIGNvbnRhaW5zIHRoZSB0b3RhbFxuICogc2luZ2xlIHN0eWxlcyBhbmQgc2luZ2xlIGNsYXNzZXMgdGhhdCBleGlzdHMgaW4gdGhlIGNvbnRleHQgYXMgdGhlIGZpcnN0IHR3byB2YWx1ZXMuXG4gKlxuICogTGV0J3Mgc2F5IHdlIGhhdmUgdGhlIGZvbGxvd2luZyB0ZW1wbGF0ZSBjb2RlOlxuICpcbiAqIDxkaXYgW3N0eWxlLndpZHRoXT1cIm15V2lkdGhcIlxuICogICAgICBbc3R5bGUuaGVpZ2h0XT1cIm15SGVpZ2h0XCJcbiAqICAgICAgW2NsYXNzLmZsaXBwZWRdPVwiZmxpcENsYXNzXCJcbiAqICAgICAgZGlyZWN0aXZlLXdpdGgtb3BhY2l0eT5cbiAqICAgICAgZGlyZWN0aXZlLXdpdGgtZm9vLWJhci1jbGFzc2VzPlxuICpcbiAqIFdlIGhhdmUgdHdvIGRpcmVjdGl2ZSBhbmQgdGVtcGxhdGUtYmluZGluZyBzb3VyY2VzLFxuICogMiArIDEgc3R5bGVzIGFuZCAxICsgMSBjbGFzc2VzLiBXaGVuIHRoZSBiaW5kaW5ncyBhcmVcbiAqIHJlZ2lzdGVyZWQgdGhlIFNpbmdsZVByb3BPZmZzZXRzIGFycmF5IHdpbGwgbG9vayBsaWtlIHNvOlxuICpcbiAqIHNfMC9jXzAgPSB0ZW1wbGF0ZSBkaXJlY3RpdmUgdmFsdWVcbiAqIHNfMS9jXzEgPSBkaXJlY3RpdmUgb25lIChkaXJlY3RpdmUtd2l0aC1vcGFjaXR5KVxuICogc18yL2NfMiA9IGRpcmVjdGl2ZSB0d28gKGRpcmVjdGl2ZS13aXRoLWZvby1iYXItY2xhc3NlcylcbiAqXG4gKiBbMywgMiwgMiwgMSwgc18wMCwgczAxLCBjXzAxLCAxLCAwLCBzXzEwLCAwLCAxLCBjXzIwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xlUHJvcE9mZnNldFZhbHVlcyBleHRlbmRzIEFycmF5PG51bWJlcj4ge1xuICBbU2luZ2xlUHJvcE9mZnNldFZhbHVlc0luZGV4LlN0eWxlc0NvdW50UG9zaXRpb25dOiBudW1iZXI7XG4gIFtTaW5nbGVQcm9wT2Zmc2V0VmFsdWVzSW5kZXguQ2xhc3Nlc0NvdW50UG9zaXRpb25dOiBudW1iZXI7XG59XG5cbi8qKlxuICogQW4gZW51bSB0aGF0IG91dGxpbmVzIHRoZSBvZmZzZXQvcG9zaXRpb24gdmFsdWVzIGZvciBlYWNoIHNpbmdsZSBwcm9wL2NsYXNzIGVudHJ5XG4gKiB0aGF0IGFyZSBob3VzZWQgaW5zaWRlIG9mIFtTaW5nbGVQcm9wT2Zmc2V0VmFsdWVzXS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gU2luZ2xlUHJvcE9mZnNldFZhbHVlc0luZGV4IHtcbiAgU3R5bGVzQ291bnRQb3NpdGlvbiA9IDAsXG4gIENsYXNzZXNDb3VudFBvc2l0aW9uID0gMSxcbiAgVmFsdWVTdGFydFBvc2l0aW9uID0gMlxufVxuXG4vKipcbiAqIFVzZWQgYSByZWZlcmVuY2UgZm9yIGFsbCBtdWx0aSBzdHlsaW5nIHZhbHVlcyAodmFsdWVzIHRoYXQgYXJlIGFzc2lnbmVkIHZpYSB0aGVcbiAqIGBbc3R5bGVdYCBhbmQgYFtjbGFzc11gIGJpbmRpbmdzKS5cbiAqXG4gKiBTaW5nbGUtc3R5bGluZyBwcm9wZXJ0aWVzICh0aGluZ3Mgc2V0IHZpYSBgW3N0eWxlLnByb3BdYCBhbmQgYFtjbGFzcy5uYW1lXWAgYmluZGluZ3MpXG4gKiBhcmUgbm90IGhhbmRsZWQgdXNpbmcgdGhlIHNhbWUgYXBwcm9hY2ggYXMgbXVsdGktc3R5bGluZyBiaW5kaW5ncyAoc3VjaCBhcyBgW3N0eWxlXWBcbiAqIGBbY2xhc3NdYCBiaW5kaW5ncykuXG4gKlxuICogTXVsdGktc3R5bGluZyBiaW5kaW5ncyByZWx5IG9uIGEgZGlmZmluZyBhbGdvcml0aG0gdG8gZmlndXJlIG91dCB3aGF0IHByb3BlcnRpZXMgaGF2ZSBiZWVuIGFkZGVkLFxuICogcmVtb3ZlZCBhbmQgbW9kaWZpZWQuIE11bHRpLXN0eWxpbmcgcHJvcGVydGllcyBhcmUgYWxzbyBldmFsdWF0ZWQgYWNyb3NzIGRpcmVjdGl2ZXMtLXdoaWNoIG1lYW5zXG4gKiB0aGF0IEFuZ3VsYXIgc3VwcG9ydHMgaGF2aW5nIG11bHRpcGxlIGRpcmVjdGl2ZXMgYWxsIHdyaXRlIHRvIHRoZSBzYW1lIGBbc3R5bGVdYCBhbmQgYFtjbGFzc11gXG4gKiBiaW5kaW5ncyAodXNpbmcgaG9zdCBiaW5kaW5ncykgZXZlbiBpZiB0aGUgYFtzdHlsZV1gIGFuZC9vciBgW2NsYXNzXWAgYmluZGluZ3MgYXJlIGJlaW5nIHdyaXR0ZW5cbiAqIHRvIG9uIHRoZSB0ZW1wbGF0ZSBlbGVtZW50LlxuICpcbiAqIEFsbCBtdWx0aS1zdHlsaW5nIHZhbHVlcyB0aGF0IGFyZSB3cml0dGVuIHRvIGFuIGVsZW1lbnQgKHdoZXRoZXIgaXQgYmUgZnJvbSB0aGUgdGVtcGxhdGUgb3IgYW55XG4gKiBkaXJlY3RpdmVzIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50KSBhcmUgYWxsIHdyaXR0ZW4gaW50byB0aGUgYE1hcEJhc2VkT2Zmc2V0VmFsdWVzYCBhcnJheS4gKE5vdGVcbiAqIHRoYXQgdGhlcmUgYXJlIHR3byBhcnJheXM6IG9uZSBmb3Igc3R5bGVzIGFuZCBhbm90aGVyIGZvciBjbGFzc2VzLilcbiAqXG4gKiBUaGlzIGFycmF5IGlzIHNoYXBlZCBpbiB0aGUgZm9sbG93aW5nIHdheTpcbiAqXG4gKiBbMF0gID0gVGhlIHRvdGFsIGFtb3VudCBvZiB1bmlxdWUgbXVsdGktc3R5bGUgb3IgbXVsdGktY2xhc3MgZW50cmllcyB0aGF0IGV4aXN0IGN1cnJlbnRseSBpbiB0aGVcbiAqICAgICAgICBjb250ZXh0LlxuICogWzErXSA9IENvbnRhaW5zIGFuIGVudHJ5IG9mIGZvdXIgdmFsdWVzIC4uLiBFYWNoIGVudHJ5IGlzIGEgdmFsdWUgYXNzaWduZWQgYnkgYVxuICogYFtzdHlsZV1gL2BbY2xhc3NdYFxuICogICAgICAgIGJpbmRpbmcgKHdlIGNhbGwgdGhpcyBhICoqc291cmNlKiopLlxuICpcbiAqICAgICAgICBBbiBleGFtcGxlIGVudHJ5IGxvb2tzIGxpa2Ugc28gKGF0IGEgZ2l2ZW4gYGlgIGluZGV4KTpcbiAqICAgICAgICBbaSArIDBdID0gV2hldGhlciBvciBub3QgdGhlIHZhbHVlIGlzIGRpcnR5XG4gKlxuICogICAgICAgIFtpICsgMV0gPSBUaGUgaW5kZXggb2Ygd2hlcmUgdGhlIG1hcC1iYXNlZCB2YWx1ZXNcbiAqICAgICAgICAgICAgICAgICAgKGZvciB0aGlzICoqc291cmNlKiopIHN0YXJ0IHdpdGhpbiB0aGUgY29udGV4dFxuICpcbiAqICAgICAgICBbaSArIDJdID0gVGhlIHVudG91Y2hlZCwgbGFzdCBzZXQgdmFsdWUgb2YgdGhlIGJpbmRpbmdcbiAqXG4gKiAgICAgICAgW2kgKyAzXSA9IFRoZSB0b3RhbCBhbW91bnQgb2YgdW5xaXVlIGJpbmRpbmcgdmFsdWVzIHRoYXQgd2VyZVxuICogICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgYW5kIHNldCBpbnRvIHRoZSBjb250ZXh0LiAoTm90ZSB0aGF0IHRoaXMgdmFsdWUgZG9lc1xuICogICAgICAgICAgICAgICAgICBub3QgcmVmbGVjdCB0aGUgdG90YWwgYW1vdW50IG9mIHZhbHVlcyB3aXRoaW4gdGhlIGJpbmRpbmdcbiAqICAgICAgICAgICAgICAgICAgdmFsdWUgKHNpbmNlIGl0J3MgYSBtYXApLCBidXQgaW5zdGVhZCByZWZsZWN0cyB0aGUgdG90YWwgdmFsdWVzXG4gKiAgICAgICAgICAgICAgICAgIHRoYXQgd2VyZSBub3QgdXNlZCBieSBhbm90aGVyIGRpcmVjdGl2ZSkuXG4gKlxuICogRWFjaCB0aW1lIGEgZGlyZWN0aXZlIChvciB0ZW1wbGF0ZSkgd3JpdGVzIGEgdmFsdWUgdG8gYSBgW2NsYXNzXWAvYFtzdHlsZV1gIGJpbmRpbmcgdGhlbiB0aGVcbiAqIHN0eWxpbmcgZGlmZmluZyBhbGdvcml0aG0gY29kZSB3aWxsIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byB1cGRhdGUgdGhlIHZhbHVlIGJhc2VkIG9uIHRoZVxuICogZm9sbG93aW5nIHJ1bGVzOlxuICpcbiAqIDEuIElmIGEgbW9yZSBpbXBvcnRhbnQgZGlyZWN0aXZlIChlaXRoZXIgdGhlIHRlbXBsYXRlIG9yIGEgZGlyZWN0aXZlIHRoYXQgd2FzIHJlZ2lzdGVyZWRcbiAqICAgIGJlZm9yZWhhbmQpIGhhcyB3cml0dGVuIGEgc3BlY2lmaWMgc3R5bGluZyB2YWx1ZSBpbnRvIHRoZSBjb250ZXh0IHRoZW4gYW55IGZvbGxvdy11cCBzdHlsaW5nXG4gKiAgICB2YWx1ZXMgKHNldCBieSBhbm90aGVyIGRpcmVjdGl2ZSB2aWEgaXRzIGBbc3R5bGVdYCBhbmQvb3IgYFtjbGFzc11gIGhvc3QgYmluZGluZykgd2lsbCBub3QgYmVcbiAqICAgIGFibGUgdG8gc2V0IGl0LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGZvcm1lciBkaXJlY3RpdmUgaGFzIHByaW9ydHkuXG4gKiAyLiBPbmx5IGlmIGEgZm9ybWVyIGRpcmVjdGl2ZSBoYXMgc2V0IGEgc3BlY2lmaWMgc3R5bGluZyB2YWx1ZSB0byBudWxsICh3aGV0aGVyIGJ5IGFjdHVhbGx5XG4gKiAgICBzZXR0aW5nIGl0IHRvIG51bGwgb3Igbm90IGluY2x1ZGluZyBpdCBpbiBpcyBtYXAgdmFsdWUpIHRoZW4gYSBsZXNzIGltcG9yYXRhbnQgZGlyZWN0aXZlIGNhblxuICogICAgc2V0IGl0cyBvd24gdmFsdWUuXG4gKlxuICogIyMgSG93IHRoZSBtYXAtYmFzZWQgc3R5bGluZyBhbGdvcml0aG0gdXBkYXRlcyBpdHNlbGZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXBCYXNlZE9mZnNldFZhbHVlcyBleHRlbmRzIEFycmF5PGFueT4ge1xuICBbTWFwQmFzZWRPZmZzZXRWYWx1ZXNJbmRleC5FbnRyaWVzQ291bnRQb3NpdGlvbl06IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gTWFwQmFzZWRPZmZzZXRWYWx1ZXNJbmRleCB7XG4gIEVudHJpZXNDb3VudFBvc2l0aW9uID0gMCxcbiAgVmFsdWVzU3RhcnRQb3NpdGlvbiA9IDEsXG4gIERpcnR5RmxhZ09mZnNldCA9IDAsXG4gIFBvc2l0aW9uU3RhcnRPZmZzZXQgPSAxLFxuICBWYWx1ZU9mZnNldCA9IDIsXG4gIFZhbHVlQ291bnRPZmZzZXQgPSAzLFxuICBTaXplID0gNFxufVxuXG4vKipcbiAqIFVzZWQgdG8gc2V0IHRoZSBjb250ZXh0IHRvIGJlIGRpcnR5IG9yIG5vdCBib3RoIG9uIHRoZSBtYXN0ZXIgZmxhZyAocG9zaXRpb24gMSlcbiAqIG9yIGZvciBlYWNoIHNpbmdsZS9tdWx0aSBwcm9wZXJ0eSB0aGF0IGV4aXN0cyBpbiB0aGUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gU3R5bGluZ0ZsYWdzIHtcbiAgLy8gSW1wbGllcyBubyBjb25maWd1cmF0aW9uc1xuICBOb25lID0gMGIwMDAwMCxcbiAgLy8gV2hldGhlciBvciBub3QgdGhlIGVudHJ5IG9yIGNvbnRleHQgaXRzZWxmIGlzIGRpcnR5XG4gIERpcnR5ID0gMGIwMDAwMSxcbiAgLy8gV2hldGhlciBvciBub3QgdGhpcyBpcyBhIGNsYXNzLWJhc2VkIGFzc2lnbm1lbnRcbiAgQ2xhc3MgPSAwYjAwMDEwLFxuICAvLyBXaGV0aGVyIG9yIG5vdCBhIHNhbml0aXplciB3YXMgYXBwbGllZCB0byB0aGlzIHByb3BlcnR5XG4gIFNhbml0aXplID0gMGIwMDEwMCxcbiAgLy8gV2hldGhlciBvciBub3QgYW55IHBsYXllciBidWlsZGVycyB3aXRoaW4gbmVlZCB0byBwcm9kdWNlIG5ldyBwbGF5ZXJzXG4gIFBsYXllckJ1aWxkZXJzRGlydHkgPSAwYjAxMDAwLFxuICAvLyBUaGUgbWF4IGFtb3VudCBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IHRoZXNlIGNvbmZpZ3VyYXRpb24gdmFsdWVzXG4gIEJpbmRpbmdBbGxvY2F0aW9uTG9ja2VkID0gMGIxMDAwMCxcbiAgQml0Q291bnRTaXplID0gNSxcbiAgLy8gVGhlcmUgYXJlIG9ubHkgZml2ZSBiaXRzIGhlcmVcbiAgQml0TWFzayA9IDBiMTExMTFcbn1cblxuLyoqIFVzZWQgYXMgbnVtZXJpYyBwb2ludGVyIHZhbHVlcyB0byBkZXRlcm1pbmUgd2hhdCBjZWxscyB0byB1cGRhdGUgaW4gdGhlIGBTdHlsaW5nQ29udGV4dGAgKi9cbmV4cG9ydCBjb25zdCBlbnVtIFN0eWxpbmdJbmRleCB7XG4gIC8vIFBvc2l0aW9uIG9mIHdoZXJlIHRoZSBpbml0aWFsIHN0eWxlcyBhcmUgc3RvcmVkIGluIHRoZSBzdHlsaW5nIGNvbnRleHRcbiAgLy8gVGhpcyBpbmRleCBtdXN0IGFsaWduIHdpdGggSE9TVCwgc2VlIGludGVyZmFjZXMvdmlldy50c1xuICBFbGVtZW50UG9zaXRpb24gPSAwLFxuICAvLyBJbmRleCBvZiBsb2NhdGlvbiB3aGVyZSB0aGUgc3RhcnQgb2Ygc2luZ2xlIHByb3BlcnRpZXMgYXJlIHN0b3JlZC4gKGB1cGRhdGVTdHlsZVByb3BgKVxuICBNYXN0ZXJGbGFnUG9zaXRpb24gPSAxLFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgcmVnaXN0ZXJlZCBkaXJlY3RpdmVzIGV4aXN0IGZvciB0aGlzIHN0eWxpbmcgY29udGV4dFxuICBEaXJlY3RpdmVSZWdpc3RyeVBvc2l0aW9uID0gMixcbiAgLy8gUG9zaXRpb24gb2Ygd2hlcmUgdGhlIGluaXRpYWwgc3R5bGVzIGFyZSBzdG9yZWQgaW4gdGhlIHN0eWxpbmcgY29udGV4dFxuICBJbml0aWFsU3R5bGVWYWx1ZXNQb3NpdGlvbiA9IDMsXG4gIEluaXRpYWxDbGFzc1ZhbHVlc1Bvc2l0aW9uID0gNCxcbiAgLy8gSW5kZXggb2YgbG9jYXRpb24gd2hlcmUgdGhlIGNsYXNzIGluZGV4IG9mZnNldCB2YWx1ZSBpcyBsb2NhdGVkXG4gIFNpbmdsZVByb3BPZmZzZXRQb3NpdGlvbnMgPSA1LFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgbGFzdCBzdHJpbmctYmFzZWQgQ1NTIGNsYXNzIHZhbHVlIHdhcyBzdG9yZWQgKG9yIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlXG4gIC8vIGluaXRpYWwgc3R5bGVzIHdoZW4gYSBbY2xhc3NdIGRpcmVjdGl2ZSBpcyBwcmVzZW50KVxuICBDYWNoZWRNdWx0aUNsYXNzZXMgPSA2LFxuICAvLyBQb3NpdGlvbiBvZiB3aGVyZSB0aGUgbGFzdCBzdHJpbmctYmFzZWQgQ1NTIGNsYXNzIHZhbHVlIHdhcyBzdG9yZWRcbiAgQ2FjaGVkTXVsdGlTdHlsZXMgPSA3LFxuICAvLyBNdWx0aSBhbmQgc2luZ2xlIGVudHJpZXMgYXJlIHN0b3JlZCBpbiBgU3R5bGluZ0NvbnRleHRgIGFzOiBGbGFnOyBQcm9wZXJ0eU5hbWU7ICBQcm9wZXJ0eVZhbHVlXG4gIC8vIFBvc2l0aW9uIG9mIHdoZXJlIHRoZSBpbml0aWFsIHN0eWxlcyBhcmUgc3RvcmVkIGluIHRoZSBzdHlsaW5nIGNvbnRleHRcbiAgSG9zdEluc3RydWN0aW9uc1F1ZXVlID0gOCxcbiAgUGxheWVyQ29udGV4dCA9IDksXG4gIC8vIExvY2F0aW9uIG9mIHNpbmdsZSAocHJvcCkgdmFsdWUgZW50cmllcyBhcmUgc3RvcmVkIHdpdGhpbiB0aGUgY29udGV4dFxuICBTaW5nbGVTdHlsZXNTdGFydFBvc2l0aW9uID0gMTAsXG4gIEZsYWdzT2Zmc2V0ID0gMCxcbiAgUHJvcGVydHlPZmZzZXQgPSAxLFxuICBWYWx1ZU9mZnNldCA9IDIsXG4gIFBsYXllckJ1aWxkZXJJbmRleE9mZnNldCA9IDMsXG4gIC8vIFNpemUgb2YgZWFjaCBtdWx0aSBvciBzaW5nbGUgZW50cnkgKGZsYWcgKyBwcm9wICsgdmFsdWUgKyBwbGF5ZXJCdWlsZGVySW5kZXgpXG4gIFNpemUgPSA0LFxuICAvLyBFYWNoIGZsYWcgaGFzIGEgYmluYXJ5IGRpZ2l0IGxlbmd0aCBvZiB0aGlzIHZhbHVlXG4gIEJpdENvdW50U2l6ZSA9IDE0LCAgLy8gKDMyIC0gNCkgLyAyID0gfjE0XG4gIC8vIFRoZSBiaW5hcnkgZGlnaXQgdmFsdWUgYXMgYSBtYXNrXG4gIEJpdE1hc2sgPSAwYjExMTExMTExMTExMTExLCAgLy8gMTQgYml0c1xufVxuXG4vKipcbiAqIEFuIGVudW0gdGhhdCBvdXRsaW5lcyB0aGUgYml0IGZsYWcgZGF0YSBmb3IgZGlyZWN0aXZlIG93bmVyIGFuZCBwbGF5ZXIgaW5kZXhcbiAqIHZhbHVlcyB0aGF0IGV4aXN0IHdpdGhpbiBlbiBlbnRyeSB0aGF0IGxpdmVzIGluIHRoZSBTdHlsaW5nQ29udGV4dC5cbiAqXG4gKiBUaGUgdmFsdWVzIGhlcmUgc3BsaXQgYSBudW1iZXIgdmFsdWUgaW50byB0d28gc2V0cyBvZiBiaXRzOlxuICogIC0gVGhlIGZpcnN0IDE2IGJpdHMgYXJlIHVzZWQgdG8gc3RvcmUgdGhlIGRpcmVjdGl2ZUluZGV4IHRoYXQgb3ducyB0aGlzIHN0eWxlIHZhbHVlXG4gKiAgLSBUaGUgb3RoZXIgMTYgYml0cyBhcmUgdXNlZCB0byBzdG9yZSB0aGUgcGxheWVyQnVpbGRlckluZGV4IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhpcyBzdHlsZVxuICovXG5leHBvcnQgY29uc3QgZW51bSBEaXJlY3RpdmVPd25lckFuZFBsYXllckJ1aWxkZXJJbmRleCB7XG4gIEJpdENvdW50U2l6ZSA9IDE2LFxuICBCaXRNYXNrID0gMGIxMTExMTExMTExMTExMTExXG59XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgZGlyZWN0aXZlIHN0eWxpbmcgaW5kZXggdmFsdWUgZm9yIHRlbXBsYXRlLWJhc2VkIGJpbmRpbmdzLlxuICpcbiAqIEFsbCBob3N0LWxldmVsIGJpbmRpbmdzIChlLmcuIGBob3N0U3R5bGVQcm9wYCBhbmQgYGhvc3RDbGFzc01hcGApIGFyZVxuICogYXNzaWduZWQgYSBkaXJlY3RpdmUgc3R5bGluZyBpbmRleCB2YWx1ZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkaXJlY3RpdmVcbiAqIHVuaXF1ZUlkIGFuZCB0aGUgZGlyZWN0aXZlIHN1cGVyLWNsYXNzIGluaGVyaXRhbmNlIGRlcHRoLiBCdXQgZm9yIHRlbXBsYXRlXG4gKiBiaW5kaW5ncyB0aGV5IGFsd2F5cyBoYXZlIHRoZSBzYW1lIGRpcmVjdGl2ZSBzdHlsaW5nIGluZGV4IHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9URU1QTEFURV9ESVJFQ1RJVkVfSU5ERVggPSAwO1xuIl19
|